summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-03 06:55:42 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-03 06:55:42 +0800
commit6a063cf74ad8168e9080c1f3be20e5dfe3c3187c (patch)
treefb1c3ab1ea836434cdd86be3b4e59a5fc8b8571f
parent742a7ee1beab323e30d60c599697a2a831c4f4de (diff)
ported battle_controller_opponent from pokeem and corrected lots of stuff
-rw-r--r--asm/battle_2.s6
-rw-r--r--asm/battle_ai_switch_items.s14
-rw-r--r--asm/battle_anim.s4
-rw-r--r--asm/battle_anim_effects_1.s20
-rw-r--r--asm/battle_anim_effects_2.s30
-rw-r--r--asm/battle_anim_effects_3.s16
-rw-r--r--asm/battle_anim_mons.s28
-rw-r--r--asm/battle_controller_link_opponent.s60
-rw-r--r--asm/battle_controller_link_partner.s46
-rw-r--r--asm/battle_controller_oak.s44
-rw-r--r--asm/battle_controller_opponent.s6736
-rw-r--r--asm/battle_controller_player.s46
-rw-r--r--asm/battle_controller_pokedude.s44
-rw-r--r--asm/battle_interface.s34
-rw-r--r--asm/battle_tower.s6
-rw-r--r--asm/bug.s12
-rw-r--r--asm/dragon.s4
-rw-r--r--asm/fighting.s12
-rw-r--r--asm/fire.s4
-rw-r--r--asm/flying.s4
-rw-r--r--asm/ground.s8
-rw-r--r--asm/ice.s4
-rw-r--r--asm/poison.s4
-rw-r--r--asm/rock.s4
-rw-r--r--asm/water.s8
-rw-r--r--data/data.s5
-rw-r--r--include/battle.h43
-rw-r--r--include/battle_2.h2
-rw-r--r--include/battle_ai_script_commands.h8
-rw-r--r--include/battle_anim.h6
-rw-r--r--include/battle_controllers.h7
-rw-r--r--include/battle_interface.h2
-rw-r--r--include/battle_tower.h2
-rw-r--r--include/pokemon.h10
-rw-r--r--include/trainer_tower.h1
-rw-r--r--ld_script.txt4
-rw-r--r--src/battle_controller_opponent.c1788
-rw-r--r--src/battle_controller_safari.c12
-rw-r--r--src/pokemon.c28
-rw-r--r--src/trainer_tower.c2
-rw-r--r--sym_ewram.txt6
41 files changed, 2096 insertions, 7028 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s
index b206cc493..d4fb29c16 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -4061,8 +4061,8 @@ _08011E98: .4byte nullsub_10
_08011E9C: .4byte gUnknown_2022AE8
thumb_func_end sub_8011E3C
- thumb_func_start sub_8011EA0
-sub_8011EA0: @ 8011EA0
+ thumb_func_start SpriteCB_FaintOpponentMon
+SpriteCB_FaintOpponentMon: @ 8011EA0
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -4201,7 +4201,7 @@ _08011F8C:
.align 2, 0
_08011FAC: .4byte gUnknown_82349CC
_08011FB0: .4byte sub_8011FB4
- thumb_func_end sub_8011EA0
+ thumb_func_end SpriteCB_FaintOpponentMon
thumb_func_start sub_8011FB4
sub_8011FB4: @ 8011FB4
diff --git a/asm/battle_ai_switch_items.s b/asm/battle_ai_switch_items.s
index eb415e34e..58acf73c2 100644
--- a/asm/battle_ai_switch_items.s
+++ b/asm/battle_ai_switch_items.s
@@ -1379,8 +1379,8 @@ _08039C76:
bx r1
thumb_func_end sub_8039A80
- thumb_func_start sub_8039C84
-sub_8039C84: @ 8039C84
+ thumb_func_start AI_TrySwitchOrUseItem
+AI_TrySwitchOrUseItem: @ 8039C84
push {r4-r6,lr}
ldr r5, _08039CDC @ =gBattleTypeFlags
ldr r0, [r5]
@@ -1406,7 +1406,7 @@ _08039C94:
ldrb r0, [r0]
cmp r0, 0x6
bne _08039D5A
- bl sub_8039E3C
+ bl GetMostSuitableMonToSwitchInto
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x6
@@ -1525,7 +1525,7 @@ _08039DA8:
bx r0
.align 2, 0
_08039DB0: .4byte gActiveBattler
- thumb_func_end sub_8039C84
+ thumb_func_end AI_TrySwitchOrUseItem
thumb_func_start sub_8039DB4
sub_8039DB4: @ 8039DB4
@@ -1600,8 +1600,8 @@ _08039E26:
_08039E38: .4byte gUnknown_824F050
thumb_func_end sub_8039DB4
- thumb_func_start sub_8039E3C
-sub_8039E3C: @ 8039E3C
+ thumb_func_start GetMostSuitableMonToSwitchInto
+GetMostSuitableMonToSwitchInto: @ 8039E3C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -2015,7 +2015,7 @@ _0803A188: .4byte gBattlerPartyIndexes
_0803A18C: .4byte gBattleMoveDamage
_0803A190: .4byte gActiveBattler
_0803A194: .4byte gBattleMoves
- thumb_func_end sub_8039E3C
+ thumb_func_end GetMostSuitableMonToSwitchInto
thumb_func_start sub_803A198
sub_803A198: @ 803A198
diff --git a/asm/battle_anim.s b/asm/battle_anim.s
index a79600e01..9d16e91e1 100644
--- a/asm/battle_anim.s
+++ b/asm/battle_anim.s
@@ -28,7 +28,7 @@ ClearBattleAnimationVars: @ 80724C0
ldr r0, _0807256C @ =gAnimMovePower
movs r2, 0
strh r1, [r0]
- ldr r0, _08072570 @ =gUnknown_2037EFE
+ ldr r0, _08072570 @ =gAnimFriendship
strb r2, [r0]
ldr r4, _08072574 @ =gUnknown_2037F14
ldr r5, _08072578 @ =gAnimMoveTurn
@@ -91,7 +91,7 @@ _08072560: .4byte gUnknown_2037EE3
_08072564: .4byte gAnimDisableStructPtr
_08072568: .4byte gAnimMoveDmg
_0807256C: .4byte gAnimMovePower
-_08072570: .4byte gUnknown_2037EFE
+_08072570: .4byte gAnimFriendship
_08072574: .4byte gUnknown_2037F14
_08072578: .4byte gAnimMoveTurn
_0807257C: .4byte gUnknown_2037F17
diff --git a/asm/battle_anim_effects_1.s b/asm/battle_anim_effects_1.s
index 9045a447e..2d436f3ef 100644
--- a/asm/battle_anim_effects_1.s
+++ b/asm/battle_anim_effects_1.s
@@ -113,7 +113,7 @@ sub_80A2388: @ 80A2388
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
- ldr r0, _080A23D0 @ =sub_8075590
+ ldr r0, _080A23D0 @ =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, _080A23D4 @ =move_anim_8074EE0
adds r0, r4, 0
@@ -124,7 +124,7 @@ sub_80A2388: @ 80A2388
.align 2, 0
_080A23C8: .4byte gBattleAnimArgs
_080A23CC: .4byte gBattleAnimAttacker
-_080A23D0: .4byte sub_8075590
+_080A23D0: .4byte StartAnimLinearTranslation
_080A23D4: .4byte move_anim_8074EE0
thumb_func_end sub_80A2388
@@ -153,7 +153,7 @@ sub_80A23D8: @ 80A23D8
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
- ldr r0, _080A2428 @ =sub_8075590
+ ldr r0, _080A2428 @ =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, _080A242C @ =DestroyAnimSprite
adds r0, r4, 0
@@ -164,7 +164,7 @@ sub_80A23D8: @ 80A23D8
.align 2, 0
_080A2420: .4byte gBattleAnimArgs
_080A2424: .4byte gBattleAnimTarget
-_080A2428: .4byte sub_8075590
+_080A2428: .4byte StartAnimLinearTranslation
_080A242C: .4byte DestroyAnimSprite
thumb_func_end sub_80A23D8
@@ -5903,7 +5903,7 @@ _080A5004:
asrs r0, 24
adds r4, r0
strh r4, [r5, 0x36]
- ldr r0, _080A507C @ =sub_8075590
+ ldr r0, _080A507C @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080A5080 @ =sub_80A5084
adds r0, r5, 0
@@ -5931,7 +5931,7 @@ _080A506A:
bx r0
.align 2, 0
_080A5078: .4byte gUnknown_83E3548
-_080A507C: .4byte sub_8075590
+_080A507C: .4byte StartAnimLinearTranslation
_080A5080: .4byte sub_80A5084
thumb_func_end sub_80A4FD4
@@ -6048,7 +6048,7 @@ _080A5118:
lsrs r0, 24
adds r0, r6
strh r0, [r5, 0x36]
- ldr r0, _080A516C @ =sub_8075590
+ ldr r0, _080A516C @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080A5170 @ =sub_80A5220
adds r0, r5, 0
@@ -6059,7 +6059,7 @@ _080A5160:
bx r0
.align 2, 0
_080A5168: .4byte gBattleAnimTarget
-_080A516C: .4byte sub_8075590
+_080A516C: .4byte StartAnimLinearTranslation
_080A5170: .4byte sub_80A5220
thumb_func_end sub_80A50B8
@@ -7711,7 +7711,7 @@ _080A5D90:
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
- ldr r0, _080A5DD8 @ =sub_8075590
+ ldr r0, _080A5DD8 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080A5DDC @ =DestroyAnimSprite
adds r0, r5, 0
@@ -7722,7 +7722,7 @@ _080A5DCC:
bx r0
.align 2, 0
_080A5DD4: .4byte gBattleAnimAttacker
-_080A5DD8: .4byte sub_8075590
+_080A5DD8: .4byte StartAnimLinearTranslation
_080A5DDC: .4byte DestroyAnimSprite
thumb_func_end sub_80A5D7C
diff --git a/asm/battle_anim_effects_2.s b/asm/battle_anim_effects_2.s
index c4d4a043c..722ff51ba 100644
--- a/asm/battle_anim_effects_2.s
+++ b/asm/battle_anim_effects_2.s
@@ -286,14 +286,14 @@ sub_80A7058: @ 80A7058
ldrh r1, [r0, 0x22]
adds r1, 0xF
strh r1, [r0, 0x36]
- ldr r1, _080A7078 @ =sub_8075590
+ ldr r1, _080A7078 @ =StartAnimLinearTranslation
str r1, [r0, 0x1C]
ldr r1, _080A707C @ =sub_80A7080
bl StoreSpriteCallbackInData6
pop {r0}
bx r0
.align 2, 0
-_080A7078: .4byte sub_8075590
+_080A7078: .4byte StartAnimLinearTranslation
_080A707C: .4byte sub_80A7080
thumb_func_end sub_80A7058
@@ -586,14 +586,14 @@ sub_80A72A0: @ 80A72A0
ldrh r1, [r0, 0x22]
subs r1, 0x20
strh r1, [r0, 0x36]
- ldr r1, _080A72C0 @ =sub_8075590
+ ldr r1, _080A72C0 @ =StartAnimLinearTranslation
str r1, [r0, 0x1C]
ldr r1, _080A72C4 @ =DestroyAnimSprite
bl StoreSpriteCallbackInData6
pop {r0}
bx r0
.align 2, 0
-_080A72C0: .4byte sub_8075590
+_080A72C0: .4byte StartAnimLinearTranslation
_080A72C4: .4byte DestroyAnimSprite
thumb_func_end sub_80A72A0
@@ -698,7 +698,7 @@ _080A7380:
mov r0, r8
strh r0, [r5, 0x32]
strh r7, [r5, 0x36]
- ldr r0, _080A73C4 @ =sub_8075590
+ ldr r0, _080A73C4 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080A73C8 @ =DestroyAnimSprite
adds r0, r5, 0
@@ -714,7 +714,7 @@ _080A73B4: .4byte gBattleAnimAttacker
_080A73B8: .4byte gBattleAnimArgs
_080A73BC: .4byte gBattleAnimTarget
_080A73C0: .4byte 0xffffa000
-_080A73C4: .4byte sub_8075590
+_080A73C4: .4byte StartAnimLinearTranslation
_080A73C8: .4byte DestroyAnimSprite
thumb_func_end sub_80A72C8
@@ -1764,7 +1764,7 @@ sub_80A7BC4: @ 80A7BC4
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
- ldr r0, _080A7C14 @ =sub_8075590
+ ldr r0, _080A7C14 @ =StartAnimLinearTranslation
str r0, [r4, 0x1C]
adds r2, r4, 0
adds r2, 0x2C
@@ -1780,7 +1780,7 @@ sub_80A7BC4: @ 80A7BC4
bx r0
.align 2, 0
_080A7C10: .4byte gBattleAnimTarget
-_080A7C14: .4byte sub_8075590
+_080A7C14: .4byte StartAnimLinearTranslation
_080A7C18: .4byte sub_80A7C1C
thumb_func_end sub_80A7BC4
@@ -1998,7 +1998,7 @@ _080A7D90:
lsrs r0, 24
adds r0, r6
strh r0, [r5, 0x36]
- ldr r0, _080A7DF0 @ =sub_8075590
+ ldr r0, _080A7DF0 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080A7DF4 @ =sub_80A7DF8
adds r0, r5, 0
@@ -2013,7 +2013,7 @@ _080A7DE0: .4byte 0x0000ffe0
_080A7DE4: .4byte 0x0000fff0
_080A7DE8: .4byte gBattleAnimArgs
_080A7DEC: .4byte gBattleAnimTarget
-_080A7DF0: .4byte sub_8075590
+_080A7DF0: .4byte StartAnimLinearTranslation
_080A7DF4: .4byte sub_80A7DF8
thumb_func_end sub_80A7D64
@@ -5442,7 +5442,7 @@ _080A9808:
ldrh r1, [r4, 0x6]
adds r0, r1
strh r0, [r5, 0x36]
- ldr r0, _080A9858 @ =sub_8075590
+ ldr r0, _080A9858 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080A985C @ =DestroyAnimSprite
adds r0, r5, 0
@@ -5457,7 +5457,7 @@ _080A9808:
.align 2, 0
_080A9850: .4byte gBattleAnimAttacker
_080A9854: .4byte gBattleAnimArgs
-_080A9858: .4byte sub_8075590
+_080A9858: .4byte StartAnimLinearTranslation
_080A985C: .4byte DestroyAnimSprite
thumb_func_end sub_80A97E8
@@ -7733,7 +7733,7 @@ _080AA9C6:
str r0, [r6, 0x1C]
strh r5, [r6, 0x2E]
adds r0, r6, 0
- bl oamt_add_pos2_onto_pos1
+ bl SetSpritePrimaryCoordsFromSecondaryCoords
movs r0, 0x5
strh r0, [r6, 0x32]
strh r5, [r6, 0x36]
@@ -7891,7 +7891,7 @@ _080AAB50:
ldrh r0, [r5, 0x22]
subs r0, 0x48
strh r0, [r5, 0x36]
- ldr r0, _080AAB74 @ =sub_8075590
+ ldr r0, _080AAB74 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080AAB78 @ =DestroyAnimSprite
adds r0, r5, 0
@@ -7901,7 +7901,7 @@ _080AAB50:
bx r0
.align 2, 0
_080AAB70: .4byte gBattleAnimAttacker
-_080AAB74: .4byte sub_8075590
+_080AAB74: .4byte StartAnimLinearTranslation
_080AAB78: .4byte DestroyAnimSprite
thumb_func_end sub_80AAAE4
diff --git a/asm/battle_anim_effects_3.s b/asm/battle_anim_effects_3.s
index 0869b7481..d1356c619 100644
--- a/asm/battle_anim_effects_3.s
+++ b/asm/battle_anim_effects_3.s
@@ -265,7 +265,7 @@ _080DE49E:
strh r0, [r5, 0x2E]
strh r7, [r5, 0x32]
strh r6, [r5, 0x36]
- ldr r0, _080DE4D4 @ =sub_8075590
+ ldr r0, _080DE4D4 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080DE4D8 @ =DestroyAnimSprite
adds r0, r5, 0
@@ -277,7 +277,7 @@ _080DE49E:
.align 2, 0
_080DE4CC: .4byte gBattleAnimTarget
_080DE4D0: .4byte gBattleAnimArgs
-_080DE4D4: .4byte sub_8075590
+_080DE4D4: .4byte StartAnimLinearTranslation
_080DE4D8: .4byte DestroyAnimSprite
thumb_func_end sub_80DE440
@@ -2404,7 +2404,7 @@ _080DF4C4:
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
- ldr r0, _080DF520 @ =sub_8075590
+ ldr r0, _080DF520 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
_080DF510:
pop {r4,r5}
@@ -2413,7 +2413,7 @@ _080DF510:
.align 2, 0
_080DF518: .4byte DestroyAnimSprite
_080DF51C: .4byte gBattleAnimTarget
-_080DF520: .4byte sub_8075590
+_080DF520: .4byte StartAnimLinearTranslation
thumb_func_end sub_80DF468
thumb_func_start sub_80DF524
@@ -11173,7 +11173,7 @@ sub_80E38D8: @ 80E38D8
ldr r3, _080E3924 @ =gBattleAnimArgs
movs r2, 0
strh r2, [r3, 0xE]
- ldr r1, _080E3928 @ =gUnknown_2037EFE
+ ldr r1, _080E3928 @ =gAnimFriendship
ldrb r0, [r1]
ldrb r1, [r1]
adds r0, r1, 0
@@ -11209,7 +11209,7 @@ _080E3918:
bx r0
.align 2, 0
_080E3924: .4byte gBattleAnimArgs
-_080E3928: .4byte gUnknown_2037EFE
+_080E3928: .4byte gAnimFriendship
thumb_func_end sub_80E38D8
thumb_func_start sub_80E392C
@@ -12703,7 +12703,7 @@ sub_80E44EC: @ 80E44EC
ldr r2, _080E4508 @ =gBattleAnimArgs
movs r0, 0
strh r0, [r2, 0xE]
- ldr r0, _080E450C @ =gUnknown_2037F00
+ ldr r0, _080E450C @ =gWeatherMoveAnim
ldrh r1, [r0]
movs r0, 0x60
ands r0, r1
@@ -12713,7 +12713,7 @@ sub_80E44EC: @ 80E44EC
b _080E4532
.align 2, 0
_080E4508: .4byte gBattleAnimArgs
-_080E450C: .4byte gUnknown_2037F00
+_080E450C: .4byte gWeatherMoveAnim
_080E4510:
movs r0, 0x7
ands r0, r1
diff --git a/asm/battle_anim_mons.s b/asm/battle_anim_mons.s
index 59c16da0d..ddb5d6977 100644
--- a/asm/battle_anim_mons.s
+++ b/asm/battle_anim_mons.s
@@ -1715,8 +1715,8 @@ _080750F6:
bx r1
thumb_func_end sub_80750C8
- thumb_func_start oamt_add_pos2_onto_pos1
-oamt_add_pos2_onto_pos1: @ 80750FC
+ thumb_func_start SetSpritePrimaryCoordsFromSecondaryCoords
+SetSpritePrimaryCoordsFromSecondaryCoords: @ 80750FC
ldrh r1, [r0, 0x24]
ldrh r2, [r0, 0x20]
adds r1, r2
@@ -1729,7 +1729,7 @@ oamt_add_pos2_onto_pos1: @ 80750FC
strh r2, [r0, 0x24]
strh r2, [r0, 0x26]
bx lr
- thumb_func_end oamt_add_pos2_onto_pos1
+ thumb_func_end SetSpritePrimaryCoordsFromSecondaryCoords
thumb_func_start sub_8075114
sub_8075114: @ 8075114
@@ -2347,8 +2347,8 @@ _08075574:
_0807558C: .4byte 0x0000fffe
thumb_func_end obj_translate_based_on_private_1_2_3_4
- thumb_func_start sub_8075590
-sub_8075590: @ 8075590
+ thumb_func_start StartAnimLinearTranslation
+StartAnimLinearTranslation: @ 8075590
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4, 0x20]
@@ -2366,7 +2366,7 @@ sub_8075590: @ 8075590
bx r0
.align 2, 0
_080755B4: .4byte sub_807563C
- thumb_func_end sub_8075590
+ thumb_func_end StartAnimLinearTranslation
thumb_func_start sub_80755B8
sub_80755B8: @ 80755B8
@@ -3547,7 +3547,7 @@ _08075E30:
ldrh r6, [r6, 0x6]
adds r0, r6
strh r0, [r5, 0x36]
- ldr r0, _08075E78 @ =sub_8075590
+ ldr r0, _08075E78 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _08075E7C @ =DestroyAnimSprite
adds r0, r5, 0
@@ -3559,7 +3559,7 @@ _08075E30:
_08075E6C: .4byte gBattleAnimArgs
_08075E70: .4byte gBattleAnimAttacker
_08075E74: .4byte gBattleAnimTarget
-_08075E78: .4byte sub_8075590
+_08075E78: .4byte StartAnimLinearTranslation
_08075E7C: .4byte DestroyAnimSprite
thumb_func_end sub_8075DF4
@@ -3701,7 +3701,7 @@ _08075F62:
ldrh r4, [r4, 0x6]
adds r0, r4
strh r0, [r5, 0x36]
- ldr r0, _08075FB4 @ =sub_8075590
+ ldr r0, _08075FB4 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _08075FB8 @ =DestroyAnimSprite
adds r0, r5, 0
@@ -3713,7 +3713,7 @@ _08075F62:
_08075FA8: .4byte gBattleAnimTarget
_08075FAC: .4byte gBattleAnimAttacker
_08075FB0: .4byte gBattleAnimArgs
-_08075FB4: .4byte sub_8075590
+_08075FB4: .4byte StartAnimLinearTranslation
_08075FB8: .4byte DestroyAnimSprite
thumb_func_end sub_8075F0C
@@ -4667,7 +4667,7 @@ sub_80766B8: @ 80766B8
push {lr}
lsls r0, 24
lsrs r2, r0, 24
- ldr r0, _080766E4 @ =gUnknown_2037EFE
+ ldr r0, _080766E4 @ =gAnimFriendship
ldrb r0, [r0]
movs r1, 0
cmp r0, 0x1E
@@ -4687,7 +4687,7 @@ _080766D6:
pop {r0}
bx r0
.align 2, 0
-_080766E4: .4byte gUnknown_2037EFE
+_080766E4: .4byte gAnimFriendship
_080766E8: .4byte gBattleAnimArgs
thumb_func_end sub_80766B8
@@ -6327,7 +6327,7 @@ _08077390:
subs r0, 0x50
_0807739E:
strh r0, [r4, 0x22]
- ldr r0, _080773B4 @ =sub_8075590
+ ldr r0, _080773B4 @ =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, _080773B8 @ =DestroyAnimSprite
adds r0, r4, 0
@@ -6336,7 +6336,7 @@ _0807739E:
pop {r0}
bx r0
.align 2, 0
-_080773B4: .4byte sub_8075590
+_080773B4: .4byte StartAnimLinearTranslation
_080773B8: .4byte DestroyAnimSprite
thumb_func_end sub_8077350
diff --git a/asm/battle_controller_link_opponent.s b/asm/battle_controller_link_opponent.s
index 406216216..7aba90e39 100644
--- a/asm/battle_controller_link_opponent.s
+++ b/asm/battle_controller_link_opponent.s
@@ -807,7 +807,7 @@ CompleteOnHealthbarDone_4: @ 803ACCC
ldrb r1, [r1]
movs r2, 0
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -825,7 +825,7 @@ CompleteOnHealthbarDone_4: @ 803ACCC
adds r0, r5
ldrb r0, [r0]
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
b _0803AD18
.align 2, 0
_0803AD0C: .4byte gActiveBattler
@@ -4256,7 +4256,7 @@ _0803C992:
bl SetMultiuseSpriteTemplateToTrainerBack
ldr r5, _0803CAD0 @ =gMultiuseSpriteTemplate
adds r6, r7, 0
- ldr r1, _0803CAD4 @ =gUnknown_823932C
+ ldr r1, _0803CAD4 @ =gTrainerFrontPicCoords
mov r2, r9
lsls r0, r2, 2
adds r0, r1
@@ -4391,7 +4391,7 @@ _0803C992:
_0803CAC8: .4byte gFacilityClassToPicIndex
_0803CACC: .4byte gActiveBattler
_0803CAD0: .4byte gMultiuseSpriteTemplate
-_0803CAD4: .4byte gUnknown_823932C
+_0803CAD4: .4byte gTrainerFrontPicCoords
_0803CAD8: .4byte gBattlerSpriteIds
_0803CADC: .4byte gSprites
_0803CAE0: .4byte 0x0000ff10
@@ -4425,7 +4425,7 @@ sub_803CB0C: @ 803CB0C
lsls r0, 2
ldr r5, _0803CBA4 @ =gSprites
adds r0, r5
- bl oamt_add_pos2_onto_pos1
+ bl SetSpritePrimaryCoordsFromSecondaryCoords
ldrb r0, [r4]
adds r0, r6
ldrb r1, [r0]
@@ -4463,7 +4463,7 @@ sub_803CB0C: @ 803CB0C
adds r1, r5, 0
adds r1, 0x1C
adds r0, r1
- ldr r1, _0803CBA8 @ =sub_8075590
+ ldr r1, _0803CBA8 @ =StartAnimLinearTranslation
str r1, [r0]
ldrb r0, [r4]
adds r0, r6
@@ -4487,7 +4487,7 @@ sub_803CB0C: @ 803CB0C
_0803CB9C: .4byte gBattlerSpriteIds
_0803CBA0: .4byte gActiveBattler
_0803CBA4: .4byte gSprites
-_0803CBA8: .4byte sub_8075590
+_0803CBA8: .4byte StartAnimLinearTranslation
_0803CBAC: .4byte SpriteCallbackDummy
_0803CBB0: .4byte gBattlerControllerFuncs
_0803CBB4: .4byte sub_803A70C
@@ -4557,7 +4557,7 @@ _0803CC0C:
lsls r0, 2
adds r2, 0x1C
adds r0, r2
- ldr r1, _0803CC58 @ =sub_8011EA0
+ ldr r1, _0803CC58 @ =SpriteCB_FaintOpponentMon
str r1, [r0]
ldr r1, _0803CC5C @ =gBattlerControllerFuncs
ldrb r0, [r5]
@@ -4572,7 +4572,7 @@ _0803CC48:
.align 2, 0
_0803CC50: .4byte gSprites
_0803CC54: .4byte gBattlerSpriteIds
-_0803CC58: .4byte sub_8011EA0
+_0803CC58: .4byte SpriteCB_FaintOpponentMon
_0803CC5C: .4byte gBattlerControllerFuncs
_0803CC60: .4byte sub_803AD20
thumb_func_end sub_803CBB8
@@ -4679,7 +4679,7 @@ _0803CCA6:
lsls r1, 24
orrs r3, r1
str r3, [r4]
- ldr r3, _0803CD8C @ =gUnknown_2037EFE
+ ldr r3, _0803CD8C @ =gAnimFriendship
ldrb r1, [r6]
lsls r1, 9
mov r2, r12
@@ -4687,7 +4687,7 @@ _0803CCA6:
adds r1, r2
ldrb r1, [r1]
strb r1, [r3]
- ldr r4, _0803CD90 @ =gUnknown_2037F00
+ ldr r4, _0803CD90 @ =gWeatherMoveAnim
ldrb r2, [r6]
lsls r2, 9
mov r1, r12
@@ -4728,8 +4728,8 @@ _0803CD7C: .4byte gBattleBufferA
_0803CD80: .4byte gAnimMoveTurn
_0803CD84: .4byte gAnimMovePower
_0803CD88: .4byte gAnimMoveDmg
-_0803CD8C: .4byte gUnknown_2037EFE
-_0803CD90: .4byte gUnknown_2037F00
+_0803CD8C: .4byte gAnimFriendship
+_0803CD90: .4byte gWeatherMoveAnim
_0803CD94: .4byte gAnimDisableStructPtr
_0803CD98: .4byte gTransformedPersonalities
_0803CD9C:
@@ -5531,8 +5531,8 @@ _0803D3AC: .4byte gActiveBattler
_0803D3B0: .4byte gBattleBufferA
thumb_func_end RecordedOpponentHandlePlaySE
- thumb_func_start LinkOpponentHandlecmd44
-LinkOpponentHandlecmd44: @ 803D3B4
+ thumb_func_start LinkOpponentHandlePlayFanfare
+LinkOpponentHandlePlayFanfare: @ 803D3B4
push {lr}
ldr r2, _0803D3DC @ =gBattleBufferA
ldr r0, _0803D3E0 @ =gActiveBattler
@@ -5553,7 +5553,7 @@ LinkOpponentHandlecmd44: @ 803D3B4
.align 2, 0
_0803D3DC: .4byte gBattleBufferA
_0803D3E0: .4byte gActiveBattler
- thumb_func_end LinkOpponentHandlecmd44
+ thumb_func_end LinkOpponentHandlePlayFanfare
thumb_func_start RecordedOpponentHandleFaintingCry
RecordedOpponentHandleFaintingCry: @ 803D3E4
@@ -5622,7 +5622,7 @@ sub_803D454: @ 803D454
lsls r0, 2
ldr r4, _0803D53C @ =gSprites
adds r0, r4
- bl oamt_add_pos2_onto_pos1
+ bl SetSpritePrimaryCoordsFromSecondaryCoords
ldrb r0, [r6]
adds r0, r5
ldrb r1, [r0]
@@ -5660,7 +5660,7 @@ sub_803D454: @ 803D454
adds r1, r4, 0
adds r1, 0x1C
adds r0, r1
- ldr r1, _0803D540 @ =sub_8075590
+ ldr r1, _0803D540 @ =StartAnimLinearTranslation
str r1, [r0]
ldrb r0, [r6]
adds r0, r5
@@ -5696,14 +5696,14 @@ sub_803D454: @ 803D454
ands r0, r1
cmp r0, 0
beq _0803D516
- ldr r0, _0803D554 @ =gUnknown_2024000
+ ldr r0, _0803D554 @ =gBattlerStatusSummaryTaskId
adds r0, r2, r0
ldrb r1, [r0]
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
adds r0, r4
- ldr r1, _0803D558 @ =sub_80491B0
+ ldr r1, _0803D558 @ =Task_HidePartyStatusSummary
str r1, [r0]
_0803D516:
ldr r0, [r3]
@@ -5725,13 +5725,13 @@ _0803D516:
_0803D534: .4byte gBattlerSpriteIds
_0803D538: .4byte gActiveBattler
_0803D53C: .4byte gSprites
-_0803D540: .4byte sub_8075590
+_0803D540: .4byte StartAnimLinearTranslation
_0803D544: .4byte sub_803D648
_0803D548: .4byte sub_803D564
_0803D54C: .4byte gTasks
_0803D550: .4byte gBattleSpritesDataPtr
-_0803D554: .4byte gUnknown_2024000
-_0803D558: .4byte sub_80491B0
+_0803D554: .4byte gBattlerStatusSummaryTaskId
+_0803D558: .4byte Task_HidePartyStatusSummary
_0803D55C: .4byte gBattlerControllerFuncs
_0803D560: .4byte nullsub_19
thumb_func_end sub_803D454
@@ -5957,8 +5957,8 @@ _0803D718:
subs r4, 0x2
adds r3, r4
ldrb r3, [r3]
- bl sub_8048D14
- ldr r2, _0803D780 @ =gUnknown_2024000
+ bl CreatePartyStatusSummarySprites
+ ldr r2, _0803D780 @ =gBattlerStatusSummaryTaskId
ldrb r1, [r5]
adds r1, r2
movs r3, 0
@@ -5999,7 +5999,7 @@ _0803D776:
bx r0
.align 2, 0
_0803D77C: .4byte gUnknown_2022BC8
-_0803D780: .4byte gUnknown_2024000
+_0803D780: .4byte gBattlerStatusSummaryTaskId
_0803D784: .4byte gBattleSpritesDataPtr
_0803D788: .4byte gBattlerControllerFuncs
_0803D78C: .4byte sub_803D790
@@ -6061,14 +6061,14 @@ RecordedOpponentHandleCmd49: @ 803D7D8
cmp r0, 0
beq _0803D80A
ldr r2, _0803D81C @ =gTasks
- ldr r0, _0803D820 @ =gUnknown_2024000
+ ldr r0, _0803D820 @ =gBattlerStatusSummaryTaskId
adds r0, r3, r0
ldrb r1, [r0]
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
adds r0, r2
- ldr r1, _0803D824 @ =sub_80491B0
+ ldr r1, _0803D824 @ =Task_HidePartyStatusSummary
str r1, [r0]
_0803D80A:
bl RecordedOpponentBufferExecCompleted
@@ -6078,8 +6078,8 @@ _0803D80A:
_0803D814: .4byte gBattleSpritesDataPtr
_0803D818: .4byte gActiveBattler
_0803D81C: .4byte gTasks
-_0803D820: .4byte gUnknown_2024000
-_0803D824: .4byte sub_80491B0
+_0803D820: .4byte gBattlerStatusSummaryTaskId
+_0803D824: .4byte Task_HidePartyStatusSummary
thumb_func_end RecordedOpponentHandleCmd49
thumb_func_start sub_803D828
diff --git a/asm/battle_controller_link_partner.s b/asm/battle_controller_link_partner.s
index 8644e651c..09aaf645c 100644
--- a/asm/battle_controller_link_partner.s
+++ b/asm/battle_controller_link_partner.s
@@ -495,7 +495,7 @@ sub_80D45D0: @ 80D45D0
ldrb r1, [r1]
movs r2, 0
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -513,7 +513,7 @@ sub_80D45D0: @ 80D45D0
adds r0, r6
ldrb r0, [r0]
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
b _080D4632
.align 2, 0
_080D4610: .4byte gActiveBattler
@@ -4016,7 +4016,7 @@ sub_80D6348: @ 80D6348
lsls r0, 2
ldr r5, _080D63DC @ =gSprites
adds r0, r5
- bl oamt_add_pos2_onto_pos1
+ bl SetSpritePrimaryCoordsFromSecondaryCoords
ldrb r0, [r4]
adds r0, r6
ldrb r1, [r0]
@@ -4053,7 +4053,7 @@ sub_80D6348: @ 80D6348
adds r1, r5, 0
adds r1, 0x1C
adds r0, r1
- ldr r1, _080D63E4 @ =sub_8075590
+ ldr r1, _080D63E4 @ =StartAnimLinearTranslation
str r1, [r0]
ldrb r0, [r4]
adds r0, r6
@@ -4078,7 +4078,7 @@ _080D63D4: .4byte gBattlerSpriteIds
_080D63D8: .4byte gActiveBattler
_080D63DC: .4byte gSprites
_080D63E0: .4byte 0x0000ffd8
-_080D63E4: .4byte sub_8075590
+_080D63E4: .4byte StartAnimLinearTranslation
_080D63E8: .4byte SpriteCallbackDummy
_080D63EC: .4byte gBattlerControllerFuncs
_080D63F0: .4byte sub_80D42A8
@@ -4300,7 +4300,7 @@ _080D6522:
lsls r1, 24
orrs r3, r1
str r3, [r4]
- ldr r3, _080D6608 @ =gUnknown_2037EFE
+ ldr r3, _080D6608 @ =gAnimFriendship
ldrb r1, [r6]
lsls r1, 9
mov r2, r12
@@ -4308,7 +4308,7 @@ _080D6522:
adds r1, r2
ldrb r1, [r1]
strb r1, [r3]
- ldr r4, _080D660C @ =gUnknown_2037F00
+ ldr r4, _080D660C @ =gWeatherMoveAnim
ldrb r2, [r6]
lsls r2, 9
mov r1, r12
@@ -4349,8 +4349,8 @@ _080D65F8: .4byte gBattleBufferA
_080D65FC: .4byte gAnimMoveTurn
_080D6600: .4byte gAnimMovePower
_080D6604: .4byte gAnimMoveDmg
-_080D6608: .4byte gUnknown_2037EFE
-_080D660C: .4byte gUnknown_2037F00
+_080D6608: .4byte gAnimFriendship
+_080D660C: .4byte gWeatherMoveAnim
_080D6610: .4byte gAnimDisableStructPtr
_080D6614: .4byte gTransformedPersonalities
_080D6618:
@@ -5244,7 +5244,7 @@ sub_80D6CD4: @ 80D6CD4
lsls r0, 2
ldr r4, _080D6DE4 @ =gSprites
adds r0, r4
- bl oamt_add_pos2_onto_pos1
+ bl SetSpritePrimaryCoordsFromSecondaryCoords
ldrb r0, [r6]
adds r0, r5
ldrb r1, [r0]
@@ -5281,7 +5281,7 @@ sub_80D6CD4: @ 80D6CD4
adds r1, r4, 0
adds r1, 0x1C
adds r0, r1
- ldr r1, _080D6DEC @ =sub_8075590
+ ldr r1, _080D6DEC @ =StartAnimLinearTranslation
str r1, [r0]
ldrb r2, [r6]
adds r0, r2, r5
@@ -5362,7 +5362,7 @@ _080D6DDC: .4byte gBattlerSpriteIds
_080D6DE0: .4byte gActiveBattler
_080D6DE4: .4byte gSprites
_080D6DE8: .4byte 0x0000ffd8
-_080D6DEC: .4byte sub_8075590
+_080D6DEC: .4byte StartAnimLinearTranslation
_080D6DF0: .4byte sub_80335F8
_080D6DF4: .4byte 0x0000d6f9
_080D6DF8: .4byte gLinkPlayers
@@ -5425,14 +5425,14 @@ _080D6E0C:
ands r0, r1
cmp r0, 0
beq _080D6E86
- ldr r0, _080D6EC0 @ =gUnknown_2024000
+ ldr r0, _080D6EC0 @ =gBattlerStatusSummaryTaskId
adds r0, r2, r0
ldrb r1, [r0]
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
adds r0, r4
- ldr r1, _080D6EC4 @ =sub_80491B0
+ ldr r1, _080D6EC4 @ =Task_HidePartyStatusSummary
str r1, [r0]
_080D6E86:
ldr r0, [r3]
@@ -5458,8 +5458,8 @@ _080D6EB0: .4byte gActiveBattler
_080D6EB4: .4byte sub_80D6ED0
_080D6EB8: .4byte gTasks
_080D6EBC: .4byte gBattleSpritesDataPtr
-_080D6EC0: .4byte gUnknown_2024000
-_080D6EC4: .4byte sub_80491B0
+_080D6EC0: .4byte gBattlerStatusSummaryTaskId
+_080D6EC4: .4byte Task_HidePartyStatusSummary
_080D6EC8: .4byte gBattlerControllerFuncs
_080D6ECC: .4byte nullsub_77
thumb_func_end sub_80D6CD4
@@ -5638,8 +5638,8 @@ _080D700C:
subs r4, 0x2
adds r3, r4
ldrb r3, [r3]
- bl sub_8048D14
- ldr r2, _080D7094 @ =gUnknown_2024000
+ bl CreatePartyStatusSummarySprites
+ ldr r2, _080D7094 @ =gBattlerStatusSummaryTaskId
ldrb r1, [r5]
adds r1, r2
movs r3, 0
@@ -5681,7 +5681,7 @@ _080D7080:
_080D7088: .4byte gBattleSpritesDataPtr
_080D708C: .4byte gActiveBattler
_080D7090: .4byte gUnknown_2022BC8
-_080D7094: .4byte gUnknown_2024000
+_080D7094: .4byte gBattlerStatusSummaryTaskId
_080D7098: .4byte gBattlerControllerFuncs
_080D709C: .4byte sub_80D70A0
thumb_func_end sub_80D6FDC
@@ -5742,14 +5742,14 @@ sub_80D70E8: @ 80D70E8
cmp r0, 0
beq _080D711A
ldr r2, _080D712C @ =gTasks
- ldr r0, _080D7130 @ =gUnknown_2024000
+ ldr r0, _080D7130 @ =gBattlerStatusSummaryTaskId
adds r0, r3, r0
ldrb r1, [r0]
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
adds r0, r2
- ldr r1, _080D7134 @ =sub_80491B0
+ ldr r1, _080D7134 @ =Task_HidePartyStatusSummary
str r1, [r0]
_080D711A:
bl sub_80D49E8
@@ -5759,8 +5759,8 @@ _080D711A:
_080D7124: .4byte gBattleSpritesDataPtr
_080D7128: .4byte gActiveBattler
_080D712C: .4byte gTasks
-_080D7130: .4byte gUnknown_2024000
-_080D7134: .4byte sub_80491B0
+_080D7130: .4byte gBattlerStatusSummaryTaskId
+_080D7134: .4byte Task_HidePartyStatusSummary
thumb_func_end sub_80D70E8
thumb_func_start sub_80D7138
diff --git a/asm/battle_controller_oak.s b/asm/battle_controller_oak.s
index 1c1838616..d4743e8a4 100644
--- a/asm/battle_controller_oak.s
+++ b/asm/battle_controller_oak.s
@@ -1362,7 +1362,7 @@ _080E807C:
adds r0, r7, 0
movs r2, 0x1
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -2371,7 +2371,7 @@ sub_80E88C0: @ 80E88C0
ldrb r1, [r1]
movs r2, 0
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -2389,7 +2389,7 @@ sub_80E88C0: @ 80E88C0
adds r0, r6
ldrb r0, [r0]
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
b _080E8922
.align 2, 0
_080E8900: .4byte gActiveBattler
@@ -5529,7 +5529,7 @@ sub_80EA2B8: @ 80EA2B8
lsls r1, 24
orrs r3, r1
str r3, [r4]
- ldr r3, _080EA3A0 @ =gUnknown_2037EFE
+ ldr r3, _080EA3A0 @ =gAnimFriendship
ldrb r1, [r6]
lsls r1, 9
mov r2, r12
@@ -5537,7 +5537,7 @@ sub_80EA2B8: @ 80EA2B8
adds r1, r2
ldrb r1, [r1]
strb r1, [r3]
- ldr r4, _080EA3A4 @ =gUnknown_2037F00
+ ldr r4, _080EA3A4 @ =gWeatherMoveAnim
ldrb r2, [r6]
lsls r2, 9
mov r1, r12
@@ -5578,8 +5578,8 @@ _080EA390: .4byte gActiveBattler
_080EA394: .4byte gAnimMoveTurn
_080EA398: .4byte gAnimMovePower
_080EA39C: .4byte gAnimMoveDmg
-_080EA3A0: .4byte gUnknown_2037EFE
-_080EA3A4: .4byte gUnknown_2037F00
+_080EA3A0: .4byte gAnimFriendship
+_080EA3A4: .4byte gWeatherMoveAnim
_080EA3A8: .4byte gAnimDisableStructPtr
_080EA3AC: .4byte gTransformedPersonalities
_080EA3B0:
@@ -6419,7 +6419,7 @@ _080EAA48:
ldrb r0, [r0]
movs r1, 0
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
_080EAA82:
ldr r1, _080EAAAC @ =gBattlerControllerFuncs
ldr r0, _080EAAB0 @ =gActiveBattler
@@ -6822,7 +6822,7 @@ _080EAD64:
lsls r0, 2
ldr r5, _080EAEAC @ =gSprites
adds r0, r5
- bl oamt_add_pos2_onto_pos1
+ bl SetSpritePrimaryCoordsFromSecondaryCoords
ldrb r0, [r7]
adds r0, r6
ldrb r1, [r0]
@@ -6859,7 +6859,7 @@ _080EAD64:
adds r1, r5, 0
adds r1, 0x1C
adds r0, r1
- ldr r1, _080EAEB4 @ =sub_8075590
+ ldr r1, _080EAEB4 @ =StartAnimLinearTranslation
str r1, [r0]
ldrb r2, [r7]
adds r0, r2, r6
@@ -6941,14 +6941,14 @@ _080EAD64:
ands r0, r1
cmp r0, 0
beq _080EAE84
- ldr r0, _080EAED4 @ =gUnknown_2024000
+ ldr r0, _080EAED4 @ =gBattlerStatusSummaryTaskId
adds r0, r2, r0
ldrb r1, [r0]
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
adds r0, r4
- ldr r1, _080EAED8 @ =sub_80491B0
+ ldr r1, _080EAED8 @ =Task_HidePartyStatusSummary
str r1, [r0]
_080EAE84:
ldr r0, [r3]
@@ -6970,7 +6970,7 @@ _080EAEA4: .4byte gBattlerSpriteIds
_080EAEA8: .4byte gActiveBattler
_080EAEAC: .4byte gSprites
_080EAEB0: .4byte 0x0000ffd8
-_080EAEB4: .4byte sub_8075590
+_080EAEB4: .4byte StartAnimLinearTranslation
_080EAEB8: .4byte sub_80335F8
_080EAEBC: .4byte 0x0000d6f8
_080EAEC0: .4byte gUnknown_8239FD4
@@ -6978,8 +6978,8 @@ _080EAEC4: .4byte gSaveBlock2Ptr
_080EAEC8: .4byte sub_80EB0A8
_080EAECC: .4byte gTasks
_080EAED0: .4byte gBattleSpritesDataPtr
-_080EAED4: .4byte gUnknown_2024000
-_080EAED8: .4byte sub_80491B0
+_080EAED4: .4byte gBattlerStatusSummaryTaskId
+_080EAED8: .4byte Task_HidePartyStatusSummary
_080EAEDC: .4byte gBattlerControllerFuncs
_080EAEE0: .4byte nullsub_13
_080EAEE4:
@@ -6998,14 +6998,14 @@ _080EAEE4:
cmp r0, 0
beq _080EAF14
ldr r2, _080EAF28 @ =gTasks
- ldr r0, _080EAF2C @ =gUnknown_2024000
+ ldr r0, _080EAF2C @ =gBattlerStatusSummaryTaskId
adds r0, r3, r0
ldrb r1, [r0]
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
adds r0, r2
- ldr r1, _080EAF30 @ =sub_80491B0
+ ldr r1, _080EAF30 @ =Task_HidePartyStatusSummary
str r1, [r0]
_080EAF14:
bl WallyBufferExecCompleted
@@ -7017,8 +7017,8 @@ _080EAF18:
_080EAF20: .4byte gBattleSpritesDataPtr
_080EAF24: .4byte gActiveBattler
_080EAF28: .4byte gTasks
-_080EAF2C: .4byte gUnknown_2024000
-_080EAF30: .4byte sub_80491B0
+_080EAF2C: .4byte gBattlerStatusSummaryTaskId
+_080EAF30: .4byte Task_HidePartyStatusSummary
thumb_func_end sub_80EAD54
thumb_func_start sub_80EAF34
@@ -7295,8 +7295,8 @@ _080EB14C:
subs r3, 0x2
adds r4, r3
ldrb r3, [r4]
- bl sub_8048D14
- ldr r2, _080EB19C @ =gUnknown_2024000
+ bl CreatePartyStatusSummarySprites
+ ldr r2, _080EB19C @ =gBattlerStatusSummaryTaskId
ldrb r1, [r5]
adds r1, r2
strb r0, [r1]
@@ -7309,7 +7309,7 @@ _080EB18A:
_080EB190: .4byte gBattleSpritesDataPtr
_080EB194: .4byte gActiveBattler
_080EB198: .4byte gUnknown_2022BC8
-_080EB19C: .4byte gUnknown_2024000
+_080EB19C: .4byte gBattlerStatusSummaryTaskId
thumb_func_end sub_80EB11C
thumb_func_start sub_80EB1A0
diff --git a/asm/battle_controller_opponent.s b/asm/battle_controller_opponent.s
deleted file mode 100644
index 85f203998..000000000
--- a/asm/battle_controller_opponent.s
+++ /dev/null
@@ -1,6736 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_17
-nullsub_17: @ 8035A78
- bx lr
- thumb_func_end nullsub_17
-
- thumb_func_start SetControllerToOpponent
-SetControllerToOpponent: @ 8035A7C
- ldr r1, _08035A8C @ =gBattlerControllerFuncs
- ldr r0, _08035A90 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08035A94 @ =sub_8035A98
- str r1, [r0]
- bx lr
- .align 2, 0
-_08035A8C: .4byte gBattlerControllerFuncs
-_08035A90: .4byte gActiveBattler
-_08035A94: .4byte sub_8035A98
- thumb_func_end SetControllerToOpponent
-
- thumb_func_start sub_8035A98
-sub_8035A98: @ 8035A98
- push {lr}
- ldr r2, _08035ACC @ =gBattleControllerExecFlags
- ldr r1, _08035AD0 @ =gBitTable
- ldr r0, _08035AD4 @ =gActiveBattler
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08035AE4
- ldr r0, _08035AD8 @ =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _08035AE0
- ldr r0, _08035ADC @ =gUnknown_8250A34
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _08035AE4
- .align 2, 0
-_08035ACC: .4byte gBattleControllerExecFlags
-_08035AD0: .4byte gBitTable
-_08035AD4: .4byte gActiveBattler
-_08035AD8: .4byte gBattleBufferA
-_08035ADC: .4byte gUnknown_8250A34
-_08035AE0:
- bl OpponentBufferExecCompleted
-_08035AE4:
- pop {r0}
- bx r0
- thumb_func_end sub_8035A98
-
- thumb_func_start sub_8035AE8
-sub_8035AE8: @ 8035AE8
- push {lr}
- ldr r2, _08035B10 @ =gSprites
- ldr r1, _08035B14 @ =gBattlerSpriteIds
- ldr r0, _08035B18 @ =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, _08035B1C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08035B0C
- bl OpponentBufferExecCompleted
-_08035B0C:
- pop {r0}
- bx r0
- .align 2, 0
-_08035B10: .4byte gSprites
-_08035B14: .4byte gBattlerSpriteIds
-_08035B18: .4byte gActiveBattler
-_08035B1C: .4byte SpriteCallbackDummy
- thumb_func_end sub_8035AE8
-
- thumb_func_start sub_8035B20
-sub_8035B20: @ 8035B20
- push {lr}
- ldr r2, _08035B48 @ =gSprites
- ldr r1, _08035B4C @ =gBattlerSpriteIds
- ldr r0, _08035B50 @ =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, _08035B54 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08035B44
- bl OpponentBufferExecCompleted
-_08035B44:
- pop {r0}
- bx r0
- .align 2, 0
-_08035B48: .4byte gSprites
-_08035B4C: .4byte gBattlerSpriteIds
-_08035B50: .4byte gActiveBattler
-_08035B54: .4byte SpriteCallbackDummy
- thumb_func_end sub_8035B20
-
- thumb_func_start sub_8035B58
-sub_8035B58: @ 8035B58
- push {r4-r6,lr}
- ldr r4, _08035BD0 @ =gSprites
- ldr r6, _08035BD4 @ =gBattlerSpriteIds
- ldr r5, _08035BD8 @ =gActiveBattler
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r2, r0, 2
- adds r0, r4, 0
- adds r0, 0x1C
- adds r0, r2, r0
- ldr r1, [r0]
- ldr r0, _08035BDC @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08035BC8
- adds r0, r2, r4
- ldrh r0, [r0, 0x6]
- bl FreeTrainerFrontPicPaletteAndTile
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r1, 0x38]
- ldr r2, _08035BE0 @ =0x000003ff
- ands r2, r0
- ldrh r3, [r1, 0x4]
- ldr r0, _08035BE4 @ =0xfffffc00
- ands r0, r3
- orrs r0, r2
- strh r0, [r1, 0x4]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- bl OpponentBufferExecCompleted
-_08035BC8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08035BD0: .4byte gSprites
-_08035BD4: .4byte gBattlerSpriteIds
-_08035BD8: .4byte gActiveBattler
-_08035BDC: .4byte SpriteCallbackDummy
-_08035BE0: .4byte 0x000003ff
-_08035BE4: .4byte 0xfffffc00
- thumb_func_end sub_8035B58
-
- thumb_func_start sub_8035BE8
-sub_8035BE8: @ 8035BE8
- push {r4,lr}
- ldr r4, _08035C28 @ =gBattleSpritesDataPtr
- ldr r1, [r4]
- ldr r3, _08035C2C @ =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 _08035C20
- 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 OpponentBufferExecCompleted
-_08035C20:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08035C28: .4byte gBattleSpritesDataPtr
-_08035C2C: .4byte gActiveBattler
- thumb_func_end sub_8035BE8
-
- thumb_func_start sub_8035C30
-sub_8035C30: @ 8035C30
- push {r4-r7,lr}
- movs r6, 0
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08035C54
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08035C88
- ldr r0, _08035C74 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08035C88
-_08035C54:
- ldr r2, _08035C78 @ =gSprites
- ldr r1, _08035C7C @ =gHealthboxSpriteIds
- ldr r0, _08035C80 @ =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, _08035C84 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08035CBE
- b _08035CBC
- .align 2, 0
-_08035C74: .4byte gBattleTypeFlags
-_08035C78: .4byte gSprites
-_08035C7C: .4byte gHealthboxSpriteIds
-_08035C80: .4byte gActiveBattler
-_08035C84: .4byte SpriteCallbackDummy
-_08035C88:
- ldr r2, _08035D84 @ =gSprites
- ldr r5, _08035D88 @ =gHealthboxSpriteIds
- ldr r0, _08035D8C @ =gActiveBattler
- ldrb r3, [r0]
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r4, [r0]
- ldr r0, _08035D90 @ =SpriteCallbackDummy
- cmp r4, r0
- bne _08035CBE
- movs r0, 0x2
- eors r3, r0
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- cmp r0, r4
- bne _08035CBE
-_08035CBC:
- movs r6, 0x1
-_08035CBE:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _08035CCA
- movs r6, 0
-_08035CCA:
- cmp r6, 0
- bne _08035CD0
- b _08035DD2
-_08035CD0:
- ldr r0, _08035D94 @ =gBattleSpritesDataPtr
- mov r12, r0
- ldr r0, [r0]
- ldr r7, _08035D8C @ =gActiveBattler
- ldrb r2, [r7]
- ldr r3, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r3
- ldrb r1, [r4, 0x1]
- movs r5, 0x1
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _08035DD2
- movs r6, 0x2
- adds r1, r6, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x1]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _08035DD2
- ldrb r1, [r4]
- movs r3, 0x7F
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- mov r1, r12
- ldr r0, [r1]
- 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 r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- mov r0, r12
- ldr r2, [r0]
- ldrb r0, [r7]
- 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]
- mov r1, r12
- ldr r2, [r1]
- ldrb r0, [r7]
- 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, _08035D98 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, _08035D9C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08035DA4
- ldr r0, _08035DA0 @ =gMPlayInfo_BGM
- bl m4aMPlayContinue
- b _08035DB0
- .align 2, 0
-_08035D84: .4byte gSprites
-_08035D88: .4byte gHealthboxSpriteIds
-_08035D8C: .4byte gActiveBattler
-_08035D90: .4byte SpriteCallbackDummy
-_08035D94: .4byte gBattleSpritesDataPtr
-_08035D98: .4byte 0x000027f9
-_08035D9C: .4byte gBattleTypeFlags
-_08035DA0: .4byte gMPlayInfo_BGM
-_08035DA4:
- ldr r0, _08035DD8 @ =gMPlayInfo_BGM
- ldr r1, _08035DDC @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_08035DB0:
- ldr r0, _08035DE0 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r3, _08035DE4 @ =gActiveBattler
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x9]
- ldr r1, _08035DE8 @ =gBattlerControllerFuncs
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08035DEC @ =sub_8035BE8
- str r1, [r0]
-_08035DD2:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08035DD8: .4byte gMPlayInfo_BGM
-_08035DDC: .4byte 0x0000ffff
-_08035DE0: .4byte gBattleSpritesDataPtr
-_08035DE4: .4byte gActiveBattler
-_08035DE8: .4byte gBattlerControllerFuncs
-_08035DEC: .4byte sub_8035BE8
- thumb_func_end sub_8035C30
-
- thumb_func_start sub_8035DF0
-sub_8035DF0: @ 8035DF0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r4, _08035FC0 @ =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r1, _08035FC4 @ =gActiveBattler
- mov r9, r1
- ldrb r2, [r1]
- ldr r1, [r0, 0x4]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r5, 0x88
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08035E2C
- ldr r0, _08035FC8 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08035FCC @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_08035E2C:
- ldr r1, [r4]
- mov r2, r9
- ldrb r0, [r2]
- movs r7, 0x2
- adds r2, r7, 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, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08035E60
- ldr r0, _08035FC8 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08035FCC @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_08035E60:
- ldr r0, [r4]
- mov r1, r9
- ldrb r2, [r1]
- 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
- beq _08035E7E
- b _08035FB4
-_08035E7E:
- adds r1, r7, 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
- beq _08035E96
- b _08035FB4
-_08035E96:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08035F28
- ldr r0, _08035FD0 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08035F28
- ldr r1, _08035FD4 @ =gUnknown_3004FFC
- mov r2, r9
- ldrb r0, [r2]
- eors r0, r7
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08035FD8 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r4, _08035FDC @ =gHealthboxSpriteIds
- mov r1, r9
- ldrb r0, [r1]
- adds r1, r7, 0
- eors r1, r0
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _08035FC8 @ =gBattlerPartyIndexes
- mov r8, r2
- lsls r1, 1
- add r1, r8
- ldrh r1, [r1]
- movs r6, 0x64
- muls r1, r6
- ldr r5, _08035FCC @ =gEnemyParty
- adds r1, r5
- movs r2, 0
- bl UpdateHealthboxAttribute
- mov r1, r9
- ldrb r0, [r1]
- eors r0, r7
- bl sub_804BD94
- mov r2, r9
- ldrb r0, [r2]
- eors r0, r7
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- mov r1, r9
- ldrb r0, [r1]
- adds r4, r7, 0
- eors r4, r0
- lsls r0, r4, 1
- add r0, r8
- ldrh r0, [r0]
- muls r0, r6
- adds r0, r5
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBattlerShadowSpriteCallback
-_08035F28:
- ldr r1, _08035FD4 @ =gUnknown_3004FFC
- ldr r5, _08035FC4 @ =gActiveBattler
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08035FD8 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r4, _08035FDC @ =gHealthboxSpriteIds
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _08035FC8 @ =gBattlerPartyIndexes
- mov r9, r2
- lsls r1, 1
- add r1, r9
- ldrh r1, [r1]
- movs r2, 0x64
- mov r8, r2
- mov r2, r8
- muls r2, r1
- adds r1, r2, 0
- ldr r6, _08035FCC @ =gEnemyParty
- adds r1, r6
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r5]
- bl sub_804BD94
- ldrb r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldrb r4, [r5]
- lsls r0, r4, 1
- add r0, r9
- ldrh r0, [r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBattlerShadowSpriteCallback
- ldr r0, _08035FC0 @ =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, _08035FE0 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08035FE4 @ =sub_8035C30
- str r1, [r0]
-_08035FB4:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08035FC0: .4byte gBattleSpritesDataPtr
-_08035FC4: .4byte gActiveBattler
-_08035FC8: .4byte gBattlerPartyIndexes
-_08035FCC: .4byte gEnemyParty
-_08035FD0: .4byte gBattleTypeFlags
-_08035FD4: .4byte gUnknown_3004FFC
-_08035FD8: .4byte gSprites
-_08035FDC: .4byte gHealthboxSpriteIds
-_08035FE0: .4byte gBattlerControllerFuncs
-_08035FE4: .4byte sub_8035C30
- thumb_func_end sub_8035DF0
-
- thumb_func_start sub_8035FE8
-sub_8035FE8: @ 8035FE8
- push {r4-r7,lr}
- ldr r2, _08036044 @ =gSprites
- ldr r0, _08036048 @ =gBattlerSpriteIds
- ldr r7, _0803604C @ =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 _08036094
- movs r4, 0x24
- ldrsh r0, [r1, r4]
- cmp r0, 0
- bne _08036094
- ldr r6, _08036050 @ =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 _0803605C
- ldr r0, _08036054 @ =gBattlerPartyIndexes
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08036058 @ =gEnemyParty
- adds r1, r0
- adds r0, r3, 0
- bl sub_80F1720
- b _08036094
- .align 2, 0
-_08036044: .4byte gSprites
-_08036048: .4byte gBattlerSpriteIds
-_0803604C: .4byte gActiveBattler
-_08036050: .4byte gBattleSpritesDataPtr
-_08036054: .4byte gBattlerPartyIndexes
-_08036058: .4byte gEnemyParty
-_0803605C:
- ldrb r0, [r1, 0x1]
- ands r2, r0
- cmp r2, 0
- beq _08036094
- 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, _0803609C @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- bl OpponentBufferExecCompleted
-_08036094:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803609C: .4byte 0x000027f9
- thumb_func_end sub_8035FE8
-
- thumb_func_start sub_80360A0
-sub_80360A0: @ 80360A0
- push {r4-r6,lr}
- ldr r6, _080360E0 @ =gActiveBattler
- ldrb r0, [r6]
- ldr r5, _080360E4 @ =gHealthboxSpriteIds
- adds r1, r0, r5
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8049FD8
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080360E8
- ldrb r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- movs r2, 0
- bl sub_8048440
- b _08036124
- .align 2, 0
-_080360E0: .4byte gActiveBattler
-_080360E4: .4byte gHealthboxSpriteIds
-_080360E8:
- movs r0, 0x1
- bl sub_80EB2E0
- lsls r0, 24
- cmp r0, 0
- bne _08036120
- ldr r0, _08036114 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08036120
- movs r0, 0x1
- bl sub_80EB2F4
- ldr r0, _08036118 @ =gBattlerControllerFuncs
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0803611C @ =sub_80E8570
- str r0, [r1]
- b _08036124
- .align 2, 0
-_08036114: .4byte gBattleTypeFlags
-_08036118: .4byte gBattlerControllerFuncs
-_0803611C: .4byte sub_80E8570
-_08036120:
- bl OpponentBufferExecCompleted
-_08036124:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80360A0
-
- thumb_func_start sub_803612C
-sub_803612C: @ 803612C
- push {lr}
- ldr r2, _08036160 @ =gSprites
- ldr r0, _08036164 @ =gBattlerSpriteIds
- ldr r1, _08036168 @ =gActiveBattler
- ldrb r3, [r1]
- 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 _0803615A
- ldr r0, _0803616C @ =gHealthboxSpriteIds
- adds r0, r3, r0
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl OpponentBufferExecCompleted
-_0803615A:
- pop {r0}
- bx r0
- .align 2, 0
-_08036160: .4byte gSprites
-_08036164: .4byte gBattlerSpriteIds
-_08036168: .4byte gActiveBattler
-_0803616C: .4byte gHealthboxSpriteIds
- thumb_func_end sub_803612C
-
- thumb_func_start sub_8036170
-sub_8036170: @ 8036170
- push {r4-r6,lr}
- ldr r0, _080361D0 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r6, _080361D4 @ =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 _080361CA
- ldr r5, _080361D8 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080361DC @ =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
- ldrb r0, [r6]
- bl HideBattlerShadowSprite
- ldr r1, _080361E0 @ =gHealthboxSpriteIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl OpponentBufferExecCompleted
-_080361CA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080361D0: .4byte gBattleSpritesDataPtr
-_080361D4: .4byte gActiveBattler
-_080361D8: .4byte gBattlerSpriteIds
-_080361DC: .4byte gSprites
-_080361E0: .4byte gHealthboxSpriteIds
- thumb_func_end sub_8036170
-
- thumb_func_start sub_80361E4
-sub_80361E4: @ 80361E4
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080361F6
- bl OpponentBufferExecCompleted
-_080361F6:
- pop {r0}
- bx r0
- thumb_func_end sub_80361E4
-
- thumb_func_start sub_80361FC
-sub_80361FC: @ 80361FC
- push {r4,lr}
- ldr r1, _08036238 @ =gBattlerSpriteIds
- ldr r0, _0803623C @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, _08036240 @ =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 _08036248
- 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, _08036244 @ =gDoingBattleAnim
- strb r3, [r0]
- bl OpponentBufferExecCompleted
- b _08036272
- .align 2, 0
-_08036238: .4byte gBattlerSpriteIds
-_0803623C: .4byte gActiveBattler
-_08036240: .4byte gSprites
-_08036244: .4byte gDoingBattleAnim
-_08036248:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _0803626C
- 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]
-_0803626C:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_08036272:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80361FC
-
- thumb_func_start sub_8036278
-sub_8036278: @ 8036278
- push {r4,lr}
- ldr r2, _080362CC @ =gSprites
- ldr r0, _080362D0 @ =gHealthboxSpriteIds
- ldr r4, _080362D4 @ =gActiveBattler
- ldrb r3, [r4]
- 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, _080362D8 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080362C4
- ldr r0, _080362DC @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080362B8
- adds r0, r3, 0
- adds r1, r3, 0
- adds r2, r3, 0
- movs r3, 0x6
- bl InitAndLaunchSpecialAnimation
-_080362B8:
- ldr r0, _080362E0 @ =gBattlerControllerFuncs
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _080362E4 @ =sub_80362E8
- str r0, [r1]
-_080362C4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080362CC: .4byte gSprites
-_080362D0: .4byte gHealthboxSpriteIds
-_080362D4: .4byte gActiveBattler
-_080362D8: .4byte SpriteCallbackDummy
-_080362DC: .4byte gBattleSpritesDataPtr
-_080362E0: .4byte gBattlerControllerFuncs
-_080362E4: .4byte sub_80362E8
- thumb_func_end sub_8036278
-
- thumb_func_start sub_80362E8
-sub_80362E8: @ 80362E8
- push {lr}
- ldr r0, _08036324 @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _08036328 @ =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, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08036320
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _08036320
- ldr r0, _0803632C @ =gMPlayInfo_BGM
- ldr r1, _08036330 @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- bl OpponentBufferExecCompleted
-_08036320:
- pop {r0}
- bx r0
- .align 2, 0
-_08036324: .4byte gBattleSpritesDataPtr
-_08036328: .4byte gActiveBattler
-_0803632C: .4byte gMPlayInfo_BGM
-_08036330: .4byte 0x0000ffff
- thumb_func_end sub_80362E8
-
- thumb_func_start sub_8036334
-sub_8036334: @ 8036334
- push {r4,r5,lr}
- ldr r3, _080363E0 @ =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldr r5, _080363E4 @ =gActiveBattler
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r2
- ldrb r1, [r2, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080363D8
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldr r0, [r3]
- ldrb r2, [r5]
- 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, _080363E8 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r1, _080363EC @ =gBattlerSpriteIds
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080363F0 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- ldr r4, _080363F4 @ =gHealthboxSpriteIds
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _080363F8 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _080363FC @ =gEnemyParty
- 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, _08036400 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08036404 @ =sub_8036278
- str r1, [r0]
-_080363D8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080363E0: .4byte gBattleSpritesDataPtr
-_080363E4: .4byte gActiveBattler
-_080363E8: .4byte 0x000027f9
-_080363EC: .4byte gBattlerSpriteIds
-_080363F0: .4byte gSprites
-_080363F4: .4byte gHealthboxSpriteIds
-_080363F8: .4byte gBattlerPartyIndexes
-_080363FC: .4byte gEnemyParty
-_08036400: .4byte gBattlerControllerFuncs
-_08036404: .4byte sub_8036278
- thumb_func_end sub_8036334
-
- thumb_func_start sub_8036408
-sub_8036408: @ 8036408
- push {r4-r6,lr}
- ldr r6, _080364AC @ =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldr r5, _080364B0 @ =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 _0803643A
- ldr r0, _080364B4 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080364B8 @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0803643A:
- ldr r4, _080364BC @ =gSprites
- ldr r0, _080364C0 @ =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, _080364C4 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080364A4
- 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 _080364A4
- adds r0, r3, r4
- bl DestroySprite
- ldrb r4, [r5]
- ldr r1, _080364B4 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080364B8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBattlerShadowSpriteCallback
- ldr r1, _080364C8 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080364CC @ =sub_8036334
- str r1, [r0]
-_080364A4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080364AC: .4byte gBattleSpritesDataPtr
-_080364B0: .4byte gActiveBattler
-_080364B4: .4byte gBattlerPartyIndexes
-_080364B8: .4byte gEnemyParty
-_080364BC: .4byte gSprites
-_080364C0: .4byte gUnknown_3004FFC
-_080364C4: .4byte SpriteCallbackDummy
-_080364C8: .4byte gBattlerControllerFuncs
-_080364CC: .4byte sub_8036334
- thumb_func_end sub_8036408
-
- thumb_func_start sub_80364D0
-sub_80364D0: @ 80364D0
- push {lr}
- ldr r0, _080364F8 @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _080364FC @ =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 _080364F2
- bl OpponentBufferExecCompleted
-_080364F2:
- pop {r0}
- bx r0
- .align 2, 0
-_080364F8: .4byte gBattleSpritesDataPtr
-_080364FC: .4byte gActiveBattler
- thumb_func_end sub_80364D0
-
- thumb_func_start sub_8036500
-sub_8036500: @ 8036500
- push {lr}
- ldr r0, _08036528 @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _0803652C @ =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 _08036522
- bl OpponentBufferExecCompleted
-_08036522:
- pop {r0}
- bx r0
- .align 2, 0
-_08036528: .4byte gBattleSpritesDataPtr
-_0803652C: .4byte gActiveBattler
- thumb_func_end sub_8036500
-
- thumb_func_start OpponentBufferExecCompleted
-OpponentBufferExecCompleted: @ 8036530
- ldr r1, _08036554 @ =gBattlerControllerFuncs
- ldr r2, _08036558 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803655C @ =sub_8035A98
- str r1, [r0]
- ldr r3, _08036560 @ =gBattleControllerExecFlags
- ldr r1, _08036564 @ =gBitTable
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r3]
- bics r0, r1
- str r0, [r3]
- bx lr
- .align 2, 0
-_08036554: .4byte gBattlerControllerFuncs
-_08036558: .4byte gActiveBattler
-_0803655C: .4byte sub_8035A98
-_08036560: .4byte gBattleControllerExecFlags
-_08036564: .4byte gBitTable
- thumb_func_end OpponentBufferExecCompleted
-
- thumb_func_start OpponentHandleGetAttributes
-OpponentHandleGetAttributes: @ 8036568
- push {r4-r6,lr}
- sub sp, 0x100
- movs r6, 0
- ldr r1, _08036594 @ =gBattleBufferA
- ldr r0, _08036598 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _080365A0
- ldr r0, _0803659C @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- mov r1, sp
- bl sub_80365DC
- adds r6, r0, 0
- b _080365C2
- .align 2, 0
-_08036594: .4byte gBattleBufferA
-_08036598: .4byte gActiveBattler
-_0803659C: .4byte gBattlerPartyIndexes
-_080365A0:
- ldrb r4, [r1]
- movs r5, 0
-_080365A4:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _080365BA
- lsls r0, r5, 24
- lsrs r0, 24
- mov r2, sp
- adds r1, r2, r6
- bl sub_80365DC
- adds r6, r0
-_080365BA:
- lsrs r4, 1
- adds r5, 0x1
- cmp r5, 0x5
- ble _080365A4
-_080365C2:
- lsls r1, r6, 16
- lsrs r1, 16
- movs r0, 0x1
- mov r2, sp
- bl BtlController_EmitDataTransfer
- bl OpponentBufferExecCompleted
- add sp, 0x100
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end OpponentHandleGetAttributes
-
- thumb_func_start sub_80365DC
-sub_80365DC: @ 80365DC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x90
- adds r7, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- movs r6, 0
- ldr r2, _08036610 @ =gBattleBufferA
- ldr r3, _08036614 @ =gActiveBattler
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, r2, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x3B
- bls _08036606
- bl _08036D72
-_08036606:
- lsls r0, 2
- ldr r1, _08036618 @ =_0803661C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08036610: .4byte gBattleBufferA
-_08036614: .4byte gActiveBattler
-_08036618: .4byte _0803661C
- .align 2, 0
-_0803661C:
- .4byte _0803670C
- .4byte _08036930
- .4byte _08036940
- .4byte _08036950
- .4byte _080369B8
- .4byte _080369B8
- .4byte _080369B8
- .4byte _080369B8
- .4byte _080369D4
- .4byte _08036A10
- .4byte _08036A10
- .4byte _08036A10
- .4byte _08036A10
- .4byte _08036D72
- .4byte _08036D72
- .4byte _08036D72
- .4byte _08036D72
- .4byte _08036A2C
- .4byte _08036A3C
- .4byte _08036A6C
- .4byte _08036A7C
- .4byte _08036A8C
- .4byte _08036A9C
- .4byte _08036AAC
- .4byte _08036ABC
- .4byte _08036ACC
- .4byte _08036ADC
- .4byte _08036AEC
- .4byte _08036AFC
- .4byte _08036B0C
- .4byte _08036B1C
- .4byte _08036B2C
- .4byte _08036B7C
- .4byte _08036B8C
- .4byte _08036B9C
- .4byte _08036BAC
- .4byte _08036BBC
- .4byte _08036BCC
- .4byte _08036BDC
- .4byte _08036BEC
- .4byte _08036BFC
- .4byte _08036C30
- .4byte _08036C40
- .4byte _08036C50
- .4byte _08036C60
- .4byte _08036C70
- .4byte _08036C80
- .4byte _08036C90
- .4byte _08036CA0
- .4byte _08036CC0
- .4byte _08036CD0
- .4byte _08036CE0
- .4byte _08036CF0
- .4byte _08036D00
- .4byte _08036D10
- .4byte _08036D20
- .4byte _08036D30
- .4byte _08036D40
- .4byte _08036D50
- .4byte _08036D60
-_0803670C:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08036920 @ =gEnemyParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- mov r1, sp
- strh r0, [r1]
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2E]
- movs r6, 0
- add r0, sp, 0x24
- mov r9, r0
- movs r1, 0x3B
- add r1, sp
- mov r10, r1
- mov r2, sp
- adds r2, 0x2B
- str r2, [sp, 0x80]
- mov r0, sp
- adds r0, 0x2A
- str r0, [sp, 0x7C]
- mov r1, sp
- adds r1, 0x68
- str r1, [sp, 0x8C]
- adds r2, 0x5
- str r2, [sp, 0x84]
- adds r0, 0x12
- str r0, [sp, 0x88]
- mov r8, r4
- add r4, sp, 0xC
-_08036758:
- adds r1, r6, 0
- adds r1, 0xD
- mov r0, r8
- bl GetMonData
- strh r0, [r4]
- adds r1, r6, 0
- adds r1, 0x11
- mov r0, r8
- bl GetMonData
- mov r2, r9
- adds r1, r2, r6
- strb r0, [r1]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _08036758
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08036920 @ =gEnemyParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl GetMonData
- mov r1, r10
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x20
- bl GetMonData
- ldr r2, [sp, 0x80]
- strb r0, [r2]
- adds r0, r4, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x44]
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- mov r3, sp
- movs r5, 0x1F
- ands r0, r5
- ldrb r2, [r3, 0x14]
- movs r1, 0x20
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- mov r3, sp
- movs r6, 0x1F
- ands r0, r6
- lsls r0, 5
- ldrh r2, [r3, 0x14]
- ldr r1, _08036924 @ =0xfffffc1f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x14]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- mov r3, sp
- ands r0, r5
- 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, r4, 0
- movs r1, 0x2A
- bl GetMonData
- movs r1, 0x1F
- ands r1, r0
- lsls r1, 15
- ldr r0, [sp, 0x14]
- ldr r2, _08036928 @ =0xfff07fff
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x14]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- mov r3, sp
- ands r0, r6
- lsls r0, 4
- ldrh r2, [r3, 0x16]
- ldr r1, _0803692C @ =0xfffffe0f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x16]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- mov r3, sp
- ands r0, r5
- 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, r4, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x48]
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- str r0, [sp, 0x4C]
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- ldr r1, [sp, 0x7C]
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x28]
- adds r0, r4, 0
- movs r1, 0x3A
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2C]
- adds r0, r4, 0
- movs r1, 0x3B
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x2]
- adds r0, r4, 0
- movs r1, 0x3C
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x4]
- adds r0, r4, 0
- movs r1, 0x3D
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x6]
- adds r0, r4, 0
- movs r1, 0x3E
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0x8]
- adds r0, r4, 0
- movs r1, 0x3F
- bl GetMonData
- mov r1, sp
- strh r0, [r1, 0xA]
- adds r0, r4, 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, r4, 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, r4, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x54]
- adds r0, r4, 0
- movs r1, 0x2
- ldr r2, [sp, 0x8C]
- bl GetMonData
- ldr r0, [sp, 0x84]
- ldr r1, [sp, 0x8C]
- bl StringCopy10
- adds r0, r4, 0
- movs r1, 0x7
- ldr r2, [sp, 0x88]
- bl GetMonData
- mov r2, sp
- movs r6, 0
-_08036910:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0x57
- bls _08036910
- b _08036D72
- .align 2, 0
-_08036920: .4byte gEnemyParty
-_08036924: .4byte 0xfffffc1f
-_08036928: .4byte 0xfff07fff
-_0803692C: .4byte 0xfffffe0f
-_08036930:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803693C @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- b _08036CAA
- .align 2, 0
-_0803693C: .4byte gEnemyParty
-_08036940:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803694C @ =gEnemyParty
- adds r0, r1
- movs r1, 0xC
- b _08036CAA
- .align 2, 0
-_0803694C: .4byte gEnemyParty
-_08036950:
- movs r6, 0
- add r2, sp, 0x58
- mov r9, r2
- add r0, sp, 0x60
- mov r10, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _080369B4 @ =gEnemyParty
- adds r4, r1, r0
- mov r8, r9
-_08036966:
- adds r1, r6, 0
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- mov r1, r8
- strh r0, [r1]
- adds r1, r6, 0
- adds r1, 0x11
- adds r0, r4, 0
- bl GetMonData
- mov r2, r10
- adds r1, r2, r6
- strb r0, [r1]
- movs r0, 0x2
- add r8, r0
- adds r6, 0x1
- cmp r6, 0x3
- ble _08036966
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080369B4 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- mov r1, r9
- strb r0, [r1, 0xC]
- mov r2, r9
- movs r6, 0
-_080369A4:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0xF
- bls _080369A4
- b _08036D72
- .align 2, 0
-_080369B4: .4byte gEnemyParty
-_080369B8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080369D0 @ =gEnemyParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x9
- b _08036CAA
- .align 2, 0
-_080369D0: .4byte gEnemyParty
-_080369D4:
- movs r6, 0
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r2, _08036A0C @ =gEnemyParty
- mov r8, r2
-_080369E0:
- adds r1, r6, 0
- adds r1, 0x11
- mov r2, r8
- adds r0, r4, r2
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- cmp r6, 0x3
- ble _080369E0
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036A0C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- b _08036D72
- .align 2, 0
-_08036A0C: .4byte gEnemyParty
-_08036A10:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036A28 @ =gEnemyParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x8
- b _08036D6A
- .align 2, 0
-_08036A28: .4byte gEnemyParty
-_08036A2C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036A38 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1
- b _08036A46
- .align 2, 0
-_08036A38: .4byte gEnemyParty
-_08036A3C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036A68 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x19
-_08036A46:
- 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 r6, 0x3
- b _08036D72
- .align 2, 0
-_08036A68: .4byte gEnemyParty
-_08036A6C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036A78 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1A
- b _08036D6A
- .align 2, 0
-_08036A78: .4byte gEnemyParty
-_08036A7C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036A88 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1B
- b _08036D6A
- .align 2, 0
-_08036A88: .4byte gEnemyParty
-_08036A8C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036A98 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1C
- b _08036D6A
- .align 2, 0
-_08036A98: .4byte gEnemyParty
-_08036A9C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036AA8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1D
- b _08036D6A
- .align 2, 0
-_08036AA8: .4byte gEnemyParty
-_08036AAC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036AB8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1E
- b _08036D6A
- .align 2, 0
-_08036AB8: .4byte gEnemyParty
-_08036ABC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036AC8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1F
- b _08036D6A
- .align 2, 0
-_08036AC8: .4byte gEnemyParty
-_08036ACC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036AD8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x20
- b _08036D6A
- .align 2, 0
-_08036AD8: .4byte gEnemyParty
-_08036ADC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036AE8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x22
- b _08036D6A
- .align 2, 0
-_08036AE8: .4byte gEnemyParty
-_08036AEC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036AF8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x23
- b _08036D6A
- .align 2, 0
-_08036AF8: .4byte gEnemyParty
-_08036AFC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036B08 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x24
- b _08036D6A
- .align 2, 0
-_08036B08: .4byte gEnemyParty
-_08036B0C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036B18 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x25
- b _08036D6A
- .align 2, 0
-_08036B18: .4byte gEnemyParty
-_08036B1C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036B28 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x26
- b _08036D6A
- .align 2, 0
-_08036B28: .4byte gEnemyParty
-_08036B2C:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08036B78 @ =gEnemyParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x27
- bl GetMonData
- strb r0, [r7]
- adds r0, r4, 0
- movs r1, 0x28
- bl GetMonData
- strb r0, [r7, 0x1]
- adds r0, r4, 0
- movs r1, 0x29
- bl GetMonData
- strb r0, [r7, 0x2]
- adds r0, r4, 0
- movs r1, 0x2A
- bl GetMonData
- strb r0, [r7, 0x3]
- adds r0, r4, 0
- movs r1, 0x2B
- bl GetMonData
- strb r0, [r7, 0x4]
- adds r0, r4, 0
- movs r1, 0x2C
- bl GetMonData
- strb r0, [r7, 0x5]
- movs r6, 0x6
- b _08036D72
- .align 2, 0
-_08036B78: .4byte gEnemyParty
-_08036B7C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036B88 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x27
- b _08036D6A
- .align 2, 0
-_08036B88: .4byte gEnemyParty
-_08036B8C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036B98 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x28
- b _08036D6A
- .align 2, 0
-_08036B98: .4byte gEnemyParty
-_08036B9C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036BA8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x29
- b _08036D6A
- .align 2, 0
-_08036BA8: .4byte gEnemyParty
-_08036BAC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036BB8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2A
- b _08036D6A
- .align 2, 0
-_08036BB8: .4byte gEnemyParty
-_08036BBC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036BC8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2B
- b _08036D6A
- .align 2, 0
-_08036BC8: .4byte gEnemyParty
-_08036BCC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036BD8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2C
- b _08036D6A
- .align 2, 0
-_08036BD8: .4byte gEnemyParty
-_08036BDC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036BE8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0
- b _08036C06
- .align 2, 0
-_08036BE8: .4byte gEnemyParty
-_08036BEC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036BF8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x9
- b _08036CAA
- .align 2, 0
-_08036BF8: .4byte gEnemyParty
-_08036BFC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036C2C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x37
-_08036C06:
- 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 r6, 0x4
- b _08036D72
- .align 2, 0
-_08036C2C: .4byte gEnemyParty
-_08036C30:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036C3C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x38
- b _08036D6A
- .align 2, 0
-_08036C3C: .4byte gEnemyParty
-_08036C40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036C4C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x39
- b _08036CAA
- .align 2, 0
-_08036C4C: .4byte gEnemyParty
-_08036C50:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036C5C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3A
- b _08036CAA
- .align 2, 0
-_08036C5C: .4byte gEnemyParty
-_08036C60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036C6C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3B
- b _08036CAA
- .align 2, 0
-_08036C6C: .4byte gEnemyParty
-_08036C70:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036C7C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3C
- b _08036CAA
- .align 2, 0
-_08036C7C: .4byte gEnemyParty
-_08036C80:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036C8C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3D
- b _08036CAA
- .align 2, 0
-_08036C8C: .4byte gEnemyParty
-_08036C90:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036C9C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3E
- b _08036CAA
- .align 2, 0
-_08036C9C: .4byte gEnemyParty
-_08036CA0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036CBC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3F
-_08036CAA:
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- strb r0, [r7]
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r6, 0x2
- b _08036D72
- .align 2, 0
-_08036CBC: .4byte gEnemyParty
-_08036CC0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036CCC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x16
- b _08036D6A
- .align 2, 0
-_08036CCC: .4byte gEnemyParty
-_08036CD0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036CDC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x17
- b _08036D6A
- .align 2, 0
-_08036CDC: .4byte gEnemyParty
-_08036CE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036CEC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x18
- b _08036D6A
- .align 2, 0
-_08036CEC: .4byte gEnemyParty
-_08036CF0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036CFC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x21
- b _08036D6A
- .align 2, 0
-_08036CFC: .4byte gEnemyParty
-_08036D00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036D0C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2F
- b _08036D6A
- .align 2, 0
-_08036D0C: .4byte gEnemyParty
-_08036D10:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036D1C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x30
- b _08036D6A
- .align 2, 0
-_08036D1C: .4byte gEnemyParty
-_08036D20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036D2C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x32
- b _08036D6A
- .align 2, 0
-_08036D2C: .4byte gEnemyParty
-_08036D30:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036D3C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x33
- b _08036D6A
- .align 2, 0
-_08036D3C: .4byte gEnemyParty
-_08036D40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036D4C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x34
- b _08036D6A
- .align 2, 0
-_08036D4C: .4byte gEnemyParty
-_08036D50:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036D5C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x35
- b _08036D6A
- .align 2, 0
-_08036D5C: .4byte gEnemyParty
-_08036D60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08036D84 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x36
-_08036D6A:
- bl GetMonData
- strb r0, [r7]
- movs r6, 0x1
-_08036D72:
- adds r0, r6, 0
- add sp, 0x90
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08036D84: .4byte gEnemyParty
- thumb_func_end sub_80365DC
-
- thumb_func_start OpponentHandlecmd1
-OpponentHandlecmd1: @ 8036D88
- push {r4-r7,lr}
- sub sp, 0x58
- ldr r2, _08036E00 @ =gBattlerPartyIndexes
- ldr r5, _08036E04 @ =gActiveBattler
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- adds r4, r2, 0
- muls r4, r0
- ldr r3, _08036E08 @ =gBattleBufferA
- lsls r1, 9
- adds r0, r3, 0x1
- adds r0, r1, r0
- ldrb r2, [r0]
- ldr r0, _08036E0C @ =gEnemyParty
- adds r0, r2, r0
- adds r6, r4, r0
- mov r0, sp
- adds r4, r0, r2
- movs r2, 0
- adds r0, r3, 0x2
- adds r1, r0
- adds r7, r5, 0
- mov r12, r3
- ldrb r1, [r1]
- cmp r2, r1
- bcs _08036DDE
- adds r3, r0, 0
-_08036DC4:
- adds r1, r4, r2
- adds r0, r6, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- ldrb r0, [r5]
- lsls r0, 9
- adds r0, r3
- ldrb r0, [r0]
- cmp r2, r0
- bcc _08036DC4
-_08036DDE:
- ldrb r0, [r7]
- lsls r0, 9
- mov r1, r12
- adds r1, 0x2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- adds r2, r4, 0
- bl BtlController_EmitDataTransfer
- bl OpponentBufferExecCompleted
- add sp, 0x58
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08036E00: .4byte gBattlerPartyIndexes
-_08036E04: .4byte gActiveBattler
-_08036E08: .4byte gBattleBufferA
-_08036E0C: .4byte gEnemyParty
- thumb_func_end OpponentHandlecmd1
-
- thumb_func_start OpponentHandleSetAttributes
-OpponentHandleSetAttributes: @ 8036E10
- push {r4,r5,lr}
- ldr r1, _08036E34 @ =gBattleBufferA
- ldr r0, _08036E38 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _08036E40
- ldr r0, _08036E3C @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- bl sub_8036E68
- b _08036E5E
- .align 2, 0
-_08036E34: .4byte gBattleBufferA
-_08036E38: .4byte gActiveBattler
-_08036E3C: .4byte gBattlerPartyIndexes
-_08036E40:
- ldrb r4, [r1]
- movs r5, 0
-_08036E44:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _08036E52
- adds r0, r5, 0
- bl sub_8036E68
-_08036E52:
- lsrs r4, 1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08036E44
-_08036E5E:
- bl OpponentBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end OpponentHandleSetAttributes
-
- thumb_func_start sub_8036E68
-sub_8036E68: @ 8036E68
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x38
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r3, _08036EA0 @ =gActiveBattler
- ldrb r0, [r3]
- lsls r0, 9
- ldr r2, _08036EA4 @ =gUnknown_2022BC7
- adds r4, r0, r2
- adds r7, r4, 0
- subs r1, r2, 0x2
- adds r0, r1
- ldrb r0, [r0]
- adds r6, r3, 0
- adds r3, r2, 0
- cmp r0, 0x3B
- bls _08036E96
- bl _08037774
-_08036E96:
- lsls r0, 2
- ldr r1, _08036EA8 @ =_08036EAC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08036EA0: .4byte gActiveBattler
-_08036EA4: .4byte gUnknown_2022BC7
-_08036EA8: .4byte _08036EAC
- .align 2, 0
-_08036EAC:
- .4byte _08036F9C
- .4byte _08037134
- .4byte _08037150
- .4byte _0803716C
- .4byte _080371C0
- .4byte _080371C0
- .4byte _080371C0
- .4byte _080371C0
- .4byte _080371E0
- .4byte _08037248
- .4byte _08037248
- .4byte _08037248
- .4byte _08037248
- .4byte _08037774
- .4byte _08037774
- .4byte _08037774
- .4byte _08037774
- .4byte _08037270
- .4byte _0803728C
- .4byte _080372A8
- .4byte _080372C4
- .4byte _080372E0
- .4byte _080372FC
- .4byte _08037318
- .4byte _08037334
- .4byte _08037350
- .4byte _0803736C
- .4byte _08037388
- .4byte _080373A4
- .4byte _080373C0
- .4byte _080373DC
- .4byte _080373F8
- .4byte _0803746C
- .4byte _08037488
- .4byte _080374A4
- .4byte _080374C0
- .4byte _080374DC
- .4byte _080374F8
- .4byte _08037514
- .4byte _08037530
- .4byte _0803754C
- .4byte _08037568
- .4byte _08037584
- .4byte _080375A0
- .4byte _080375BC
- .4byte _080375D8
- .4byte _080375F4
- .4byte _08037610
- .4byte _0803762C
- .4byte _08037648
- .4byte _08037664
- .4byte _08037680
- .4byte _0803769C
- .4byte _080376B8
- .4byte _080376D4
- .4byte _080376F0
- .4byte _0803770C
- .4byte _08037728
- .4byte _08037744
- .4byte _08037760
-_08036F9C:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08037130 @ =gEnemyParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- adds r2, r7, 0
- bl SetMonData
- adds r2, r7, 0
- adds r2, 0x2E
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
- movs r0, 0
- mov r8, r0
- movs r0, 0x3B
- adds r0, r7
- mov r10, r0
- adds r0, r7, 0
- adds r0, 0x2B
- str r0, [sp, 0x20]
- adds r0, 0x19
- str r0, [sp, 0x28]
- adds r0, 0x4
- str r0, [sp, 0x2C]
- adds r0, 0x4
- str r0, [sp, 0x30]
- subs r0, 0x22
- str r0, [sp, 0x1C]
- subs r0, 0x2
- str r0, [sp, 0x18]
- adds r0, 0x4
- str r0, [sp, 0x24]
- adds r0, r7, 0x2
- str r0, [sp, 0x4]
- adds r0, r7, 0x4
- str r0, [sp, 0x8]
- adds r0, r7, 0x6
- str r0, [sp, 0xC]
- adds r0, 0x2
- str r0, [sp, 0x10]
- adds r0, 0x2
- str r0, [sp, 0x14]
- mov r9, r4
- adds r6, r7, 0
- adds r6, 0x24
- adds r4, r7, 0
- adds r4, 0xC
-_08037002:
- mov r1, r8
- adds r1, 0xD
- mov r0, r9
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- mov r0, r9
- adds r2, r6, 0
- bl SetMonData
- adds r6, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _08037002
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08037130 @ =gEnemyParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- mov r2, r10
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x20
- ldr r2, [sp, 0x20]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x19
- ldr r2, [sp, 0x28]
- bl SetMonData
- ldrb r0, [r7, 0x14]
- lsls r0, 27
- lsrs r0, 27
- mov r1, sp
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x27
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r7, 0x14]
- lsls r0, 22
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x28
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r7, 0x15]
- lsls r0, 25
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x29
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldr r0, [r7, 0x14]
- lsls r0, 12
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2A
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrh r0, [r7, 0x16]
- lsls r0, 23
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2B
- mov r2, sp
- bl SetMonData
- mov r1, sp
- ldrb r0, [r7, 0x17]
- lsls r0, 26
- lsrs r0, 27
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2C
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0
- ldr r2, [sp, 0x2C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x37
- ldr r2, [sp, 0x30]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x38
- ldr r2, [sp, 0x1C]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x39
- ldr r2, [sp, 0x18]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3A
- ldr r2, [sp, 0x24]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3B
- ldr r2, [sp, 0x4]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3C
- ldr r2, [sp, 0x8]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3D
- ldr r2, [sp, 0xC]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3E
- ldr r2, [sp, 0x10]
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3F
- ldr r2, [sp, 0x14]
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037130: .4byte gEnemyParty
-_08037134:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803714C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0xB
- bl SetMonData
- b _08037774
- .align 2, 0
-_0803714C: .4byte gEnemyParty
-_08037150:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037168 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0xC
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037168: .4byte gEnemyParty
-_0803716C:
- movs r0, 0
- mov r8, r0
- movs r0, 0xC
- adds r0, r4
- mov r9, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _080371BC @ =gEnemyParty
- adds r7, r1, r0
- adds r6, r4, 0
- adds r6, 0x8
-_08037184:
- mov r1, r8
- adds r1, 0xD
- adds r0, r7, 0
- adds r2, r4, 0
- bl SetMonData
- mov r1, r8
- adds r1, 0x11
- adds r0, r7, 0
- adds r2, r6, 0
- bl SetMonData
- adds r6, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _08037184
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080371BC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- b _08037774
- .align 2, 0
-_080371BC: .4byte gEnemyParty
-_080371C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080371D8 @ =gEnemyParty
- adds r0, r1
- ldr r3, _080371DC @ =gBattleBufferA
- ldrb r2, [r6]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x9
- b _0803725E
- .align 2, 0
-_080371D8: .4byte gEnemyParty
-_080371DC: .4byte gBattleBufferA
-_080371E0:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08037244 @ =gEnemyParty
- adds r4, r0
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- adds r0, r4, 0
- movs r1, 0x11
- str r3, [sp, 0x34]
- bl SetMonData
- ldrb r2, [r6]
- lsls r2, 9
- ldr r3, [sp, 0x34]
- adds r0, r3, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x12
- bl SetMonData
- ldrb r2, [r6]
- lsls r2, 9
- ldr r3, [sp, 0x34]
- adds r0, r3, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x13
- bl SetMonData
- ldrb r2, [r6]
- lsls r2, 9
- ldr r3, [sp, 0x34]
- adds r0, r3, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x14
- bl SetMonData
- ldrb r2, [r6]
- lsls r2, 9
- ldr r3, [sp, 0x34]
- adds r0, r3, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037244: .4byte gEnemyParty
-_08037248:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037268 @ =gEnemyParty
- adds r0, r1
- ldr r3, _0803726C @ =gBattleBufferA
- ldrb r2, [r6]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x8
-_0803725E:
- adds r3, 0x3
- adds r2, r3
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037268: .4byte gEnemyParty
-_0803726C: .4byte gBattleBufferA
-_08037270:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037288 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037288: .4byte gEnemyParty
-_0803728C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080372A4 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x19
- bl SetMonData
- b _08037774
- .align 2, 0
-_080372A4: .4byte gEnemyParty
-_080372A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080372C0 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1A
- bl SetMonData
- b _08037774
- .align 2, 0
-_080372C0: .4byte gEnemyParty
-_080372C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080372DC @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1B
- bl SetMonData
- b _08037774
- .align 2, 0
-_080372DC: .4byte gEnemyParty
-_080372E0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080372F8 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1C
- bl SetMonData
- b _08037774
- .align 2, 0
-_080372F8: .4byte gEnemyParty
-_080372FC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037314 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1D
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037314: .4byte gEnemyParty
-_08037318:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037330 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1E
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037330: .4byte gEnemyParty
-_08037334:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803734C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1F
- bl SetMonData
- b _08037774
- .align 2, 0
-_0803734C: .4byte gEnemyParty
-_08037350:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037368 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x20
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037368: .4byte gEnemyParty
-_0803736C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037384 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x22
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037384: .4byte gEnemyParty
-_08037388:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080373A0 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x23
- bl SetMonData
- b _08037774
- .align 2, 0
-_080373A0: .4byte gEnemyParty
-_080373A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080373BC @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x24
- bl SetMonData
- b _08037774
- .align 2, 0
-_080373BC: .4byte gEnemyParty
-_080373C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080373D8 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x25
- bl SetMonData
- b _08037774
- .align 2, 0
-_080373D8: .4byte gEnemyParty
-_080373DC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080373F4 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x26
- bl SetMonData
- b _08037774
- .align 2, 0
-_080373F4: .4byte gEnemyParty
-_080373F8:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08037468 @ =gEnemyParty
- adds r4, r0
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- adds r0, r4, 0
- movs r1, 0x27
- str r3, [sp, 0x34]
- bl SetMonData
- ldrb r2, [r6]
- lsls r2, 9
- ldr r3, [sp, 0x34]
- adds r0, r3, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x28
- bl SetMonData
- ldrb r2, [r6]
- lsls r2, 9
- ldr r3, [sp, 0x34]
- adds r0, r3, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x29
- bl SetMonData
- ldrb r2, [r6]
- lsls r2, 9
- ldr r3, [sp, 0x34]
- adds r0, r3, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2A
- bl SetMonData
- ldrb r2, [r6]
- lsls r2, 9
- ldr r3, [sp, 0x34]
- adds r0, r3, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2B
- bl SetMonData
- ldrb r2, [r6]
- lsls r2, 9
- ldr r3, [sp, 0x34]
- adds r0, r3, 0x5
- adds r2, r0
- adds r0, r4, 0
- b _08037506
- .align 2, 0
-_08037468: .4byte gEnemyParty
-_0803746C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037484 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x27
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037484: .4byte gEnemyParty
-_08037488:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080374A0 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x28
- bl SetMonData
- b _08037774
- .align 2, 0
-_080374A0: .4byte gEnemyParty
-_080374A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080374BC @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x29
- bl SetMonData
- b _08037774
- .align 2, 0
-_080374BC: .4byte gEnemyParty
-_080374C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080374D8 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x2A
- bl SetMonData
- b _08037774
- .align 2, 0
-_080374D8: .4byte gEnemyParty
-_080374DC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080374F4 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x2B
- bl SetMonData
- b _08037774
- .align 2, 0
-_080374F4: .4byte gEnemyParty
-_080374F8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037510 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
-_08037506:
- movs r1, 0x2C
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037510: .4byte gEnemyParty
-_08037514:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803752C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0
- bl SetMonData
- b _08037774
- .align 2, 0
-_0803752C: .4byte gEnemyParty
-_08037530:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037548 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x9
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037548: .4byte gEnemyParty
-_0803754C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037564 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x37
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037564: .4byte gEnemyParty
-_08037568:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037580 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x38
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037580: .4byte gEnemyParty
-_08037584:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803759C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x39
- bl SetMonData
- b _08037774
- .align 2, 0
-_0803759C: .4byte gEnemyParty
-_080375A0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080375B8 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3A
- bl SetMonData
- b _08037774
- .align 2, 0
-_080375B8: .4byte gEnemyParty
-_080375BC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080375D4 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3B
- bl SetMonData
- b _08037774
- .align 2, 0
-_080375D4: .4byte gEnemyParty
-_080375D8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080375F0 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3C
- bl SetMonData
- b _08037774
- .align 2, 0
-_080375F0: .4byte gEnemyParty
-_080375F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803760C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3D
- bl SetMonData
- b _08037774
- .align 2, 0
-_0803760C: .4byte gEnemyParty
-_08037610:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037628 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3E
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037628: .4byte gEnemyParty
-_0803762C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037644 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3F
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037644: .4byte gEnemyParty
-_08037648:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037660 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x16
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037660: .4byte gEnemyParty
-_08037664:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803767C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x17
- bl SetMonData
- b _08037774
- .align 2, 0
-_0803767C: .4byte gEnemyParty
-_08037680:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037698 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x18
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037698: .4byte gEnemyParty
-_0803769C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080376B4 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x21
- bl SetMonData
- b _08037774
- .align 2, 0
-_080376B4: .4byte gEnemyParty
-_080376B8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080376D0 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x2F
- bl SetMonData
- b _08037774
- .align 2, 0
-_080376D0: .4byte gEnemyParty
-_080376D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080376EC @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x30
- bl SetMonData
- b _08037774
- .align 2, 0
-_080376EC: .4byte gEnemyParty
-_080376F0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037708 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x32
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037708: .4byte gEnemyParty
-_0803770C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037724 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x33
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037724: .4byte gEnemyParty
-_08037728:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037740 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x34
- bl SetMonData
- b _08037774
- .align 2, 0
-_08037740: .4byte gEnemyParty
-_08037744:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803775C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x35
- bl SetMonData
- b _08037774
- .align 2, 0
-_0803775C: .4byte gEnemyParty
-_08037760:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08037784 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x36
- bl SetMonData
-_08037774:
- add sp, 0x38
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08037784: .4byte gEnemyParty
- thumb_func_end sub_8036E68
-
- thumb_func_start OpponentHandlecmd3
-OpponentHandlecmd3: @ 8037788
- push {r4-r7,lr}
- ldr r1, _080377EC @ =gBattlerPartyIndexes
- ldr r7, _080377F0 @ =gActiveBattler
- ldrb r2, [r7]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- adds r3, r1, 0
- muls r3, r0
- ldr r4, _080377F4 @ =gBattleBufferA
- lsls r2, 9
- adds r0, r4, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- ldr r1, _080377F8 @ =gEnemyParty
- adds r0, r1
- adds r5, r3, r0
- movs r3, 0
- adds r0, r4, 0x2
- adds r2, r0
- ldrb r2, [r2]
- cmp r3, r2
- bcs _080377E0
- adds r6, r4, 0
- adds r2, r7, 0
- adds r4, r0, 0
-_080377BE:
- adds r1, r5, r3
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, 0x3
- adds r0, r3, r0
- adds r0, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r0, [r2]
- lsls r0, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r3, r0
- bcc _080377BE
-_080377E0:
- bl OpponentBufferExecCompleted
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080377EC: .4byte gBattlerPartyIndexes
-_080377F0: .4byte gActiveBattler
-_080377F4: .4byte gBattleBufferA
-_080377F8: .4byte gEnemyParty
- thumb_func_end OpponentHandlecmd3
-
- thumb_func_start sub_80377FC
-sub_80377FC: @ 80377FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _0803787C @ =gBattlerPartyIndexes
- ldr r4, _08037880 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r6, _08037884 @ =gEnemyParty
- adds r0, r6
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _08037888 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _08037890
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r6
- bl DecompressGhostFrontPic
- ldrb r0, [r4]
- bl GetGhostSpriteDefault_Y
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r3, _0803788C @ =gBattleSpritesDataPtr
- ldr r0, [r3]
- ldrb r1, [r4]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
- ldr r0, [r3]
- ldrb r1, [r4]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x1]
- b _080378AA
- .align 2, 0
-_0803787C: .4byte gBattlerPartyIndexes
-_08037880: .4byte gActiveBattler
-_08037884: .4byte gEnemyParty
-_08037888: .4byte gBattleTypeFlags
-_0803788C: .4byte gBattleSpritesDataPtr
-_08037890:
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r6
- bl BattleLoadOpponentMonSpriteGfx
- ldrb r0, [r4]
- bl GetBattlerSpriteDefault_Y
- lsls r0, 24
- lsrs r5, r0, 24
-_080378AA:
- ldr r7, _0803799C @ =gActiveBattler
- ldrb r0, [r7]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r6, _080379A0 @ =gMultiuseSpriteTemplate
- ldrb r0, [r7]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r7]
- bl GetBattlerSpriteSubpriority
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl CreateSprite
- ldr r4, _080379A4 @ =gBattlerSpriteIds
- ldrb r1, [r7]
- adds r1, r4
- strb r0, [r1]
- ldr r5, _080379A8 @ =gSprites
- ldrb r0, [r7]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _080379AC @ =0x0000ff10
- strh r1, [r0, 0x24]
- ldrb r2, [r7]
- 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, [r7]
- 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, [r7]
- 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, [r7]
- adds r4, r2, r4
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _080379B0 @ =gBattleMonForms
- adds r2, r1
- ldrb r1, [r2]
- bl StartSpriteAnim
- ldr r0, _080379B4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- bne _08037986
- ldrb r4, [r7]
- ldr r1, _080379B8 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080379BC @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBattlerShadowSpriteCallback
-_08037986:
- ldr r0, _080379C0 @ =gBattlerControllerFuncs
- ldrb r1, [r7]
- lsls r1, 2
- adds r1, r0
- ldr r0, _080379C4 @ =sub_8035FE8
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803799C: .4byte gActiveBattler
-_080379A0: .4byte gMultiuseSpriteTemplate
-_080379A4: .4byte gBattlerSpriteIds
-_080379A8: .4byte gSprites
-_080379AC: .4byte 0x0000ff10
-_080379B0: .4byte gBattleMonForms
-_080379B4: .4byte gBattleTypeFlags
-_080379B8: .4byte gBattlerPartyIndexes
-_080379BC: .4byte gEnemyParty
-_080379C0: .4byte gBattlerControllerFuncs
-_080379C4: .4byte sub_8035FE8
- thumb_func_end sub_80377FC
-
- thumb_func_start OpponentHandleSwitchInAnim
-OpponentHandleSwitchInAnim: @ 80379C8
- push {r4,lr}
- ldr r4, _08037A10 @ =gActiveBattler
- ldrb r0, [r4]
- ldr r1, _08037A14 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x5C
- movs r1, 0x6
- strb r1, [r0]
- ldr r1, _08037A18 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r2, r0, 1
- adds r2, r1
- ldr r3, _08037A1C @ =gBattleBufferA
- lsls r0, 9
- adds r1, r3, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strh r0, [r2]
- ldrb r0, [r4]
- lsls r1, r0, 9
- adds r3, 0x2
- adds r1, r3
- ldrb r1, [r1]
- bl sub_8037A28
- ldr r1, _08037A20 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037A24 @ =sub_8036408
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08037A10: .4byte gActiveBattler
-_08037A14: .4byte gBattleStruct
-_08037A18: .4byte gBattlerPartyIndexes
-_08037A1C: .4byte gBattleBufferA
-_08037A20: .4byte gBattlerControllerFuncs
-_08037A24: .4byte sub_8036408
- thumb_func_end OpponentHandleSwitchInAnim
-
- thumb_func_start sub_8037A28
-sub_8037A28: @ 8037A28
- 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
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl ClearTemporarySpeciesSpriteData
- ldr r0, _08037B84 @ =gBattlerPartyIndexes
- lsls r4, r6, 1
- adds r4, r0
- ldr r0, _08037B88 @ =gBattleBufferA
- lsls r1, r6, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- strh r0, [r4]
- ldrh r0, [r4]
- movs r1, 0x64
- mov r9, r1
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- ldr r5, _08037B8C @ =gEnemyParty
- adds r0, r5
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _08037B90 @ =sub_8033E3C
- bl CreateInvisibleSpriteWithCallback
- ldr r1, _08037B94 @ =gUnknown_3004FFC
- mov r10, r1
- add r10, r6
- mov r1, r10
- strb r0, [r1]
- ldrh r0, [r4]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- adds r0, r5
- adds r1, r6, 0
- bl BattleLoadOpponentMonSpriteGfx
- adds r0, r6, 0
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _08037B98 @ =gMultiuseSpriteTemplate
- mov r9, 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, r9
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, _08037B9C @ =gBattlerSpriteIds
- adds r4, r6, r4
- strb r0, [r4]
- ldr r5, _08037BA0 @ =gSprites
- 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]
- mov r0, r10
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r4]
- strh r1, [r0, 0x30]
- 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, _08037BA4 @ =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, _08037BA8 @ =SpriteCallbackDummy
- str r1, [r0]
- movs r0, 0
- movs r1, 0xFE
- bl DoPokeballSendOutAnimation
- mov r1, r10
- 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
-_08037B84: .4byte gBattlerPartyIndexes
-_08037B88: .4byte gBattleBufferA
-_08037B8C: .4byte gEnemyParty
-_08037B90: .4byte sub_8033E3C
-_08037B94: .4byte gUnknown_3004FFC
-_08037B98: .4byte gMultiuseSpriteTemplate
-_08037B9C: .4byte gBattlerSpriteIds
-_08037BA0: .4byte gSprites
-_08037BA4: .4byte gBattleMonForms
-_08037BA8: .4byte SpriteCallbackDummy
- thumb_func_end sub_8037A28
-
- thumb_func_start sub_8037BAC
-sub_8037BAC: @ 8037BAC
- push {r4-r6,lr}
- ldr r1, _08037BE0 @ =gBattleBufferA
- ldr r6, _08037BE4 @ =gActiveBattler
- ldrb r2, [r6]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r3, [r0]
- cmp r3, 0
- bne _08037BF4
- ldr r0, _08037BE8 @ =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- strb r3, [r0, 0x4]
- ldr r1, _08037BEC @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037BF0 @ =sub_8037C44
- str r1, [r0]
- b _08037C30
- .align 2, 0
-_08037BE0: .4byte gBattleBufferA
-_08037BE4: .4byte gActiveBattler
-_08037BE8: .4byte gBattleSpritesDataPtr
-_08037BEC: .4byte gBattlerControllerFuncs
-_08037BF0: .4byte sub_8037C44
-_08037BF4:
- ldr r5, _08037C38 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08037C3C @ =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
- ldrb r0, [r6]
- bl HideBattlerShadowSprite
- ldr r1, _08037C40 @ =gHealthboxSpriteIds
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl OpponentBufferExecCompleted
-_08037C30:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08037C38: .4byte gBattlerSpriteIds
-_08037C3C: .4byte gSprites
-_08037C40: .4byte gHealthboxSpriteIds
- thumb_func_end sub_8037BAC
-
- thumb_func_start sub_8037C44
-sub_8037C44: @ 8037C44
- push {r4-r6,lr}
- ldr r6, _08037C64 @ =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, _08037C68 @ =gActiveBattler
- ldrb r2, [r5]
- ldr r1, [r4, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3, 0x4]
- cmp r0, 0
- beq _08037C6C
- cmp r0, 0x1
- beq _08037C9A
- b _08037CC2
- .align 2, 0
-_08037C64: .4byte gBattleSpritesDataPtr
-_08037C68: .4byte gActiveBattler
-_08037C6C:
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08037C86
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_08037C86:
- ldr r0, [r6]
- ldrb r1, [r5]
- 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 _08037CC2
-_08037C9A:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08037CC2
- strb r0, [r3, 0x4]
- ldrb r2, [r5]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x2
- bl InitAndLaunchSpecialAnimation
- ldr r1, _08037CC8 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037CCC @ =sub_8036170
- str r1, [r0]
-_08037CC2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08037CC8: .4byte gBattlerControllerFuncs
-_08037CCC: .4byte sub_8036170
- thumb_func_end sub_8037C44
-
- thumb_func_start sub_8037CD0
-sub_8037CD0: @ 8037CD0
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- ldr r3, _08037CEC @ =gTrainerBattleOpponent_A
- ldrh r1, [r3]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _08037CF0
- bl GetSecretBaseTrainerPicIndex
- b _08037D26
- .align 2, 0
-_08037CEC: .4byte gTrainerBattleOpponent_A
-_08037CF0:
- ldr r0, _08037D04 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08037D08
- bl sub_80E6078
- b _08037D26
- .align 2, 0
-_08037D04: .4byte gBattleTypeFlags
-_08037D08:
- movs r0, 0x80
- lsls r0, 12
- ands r0, r1
- cmp r0, 0
- beq _08037D18
- bl sub_815DA3C
- b _08037D26
-_08037D18:
- movs r0, 0x80
- lsls r0, 4
- ands r1, r0
- cmp r1, 0
- beq _08037D2C
- bl GetEreaderTrainerFrontSpriteId
-_08037D26:
- lsls r0, 24
- lsrs r0, 24
- b _08037D3A
-_08037D2C:
- ldr r2, _08037E6C @ =gTrainers
- ldrh r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r0, [r0, 0x3]
-_08037D3A:
- mov r9, r0
- ldr r0, _08037E70 @ =gActiveBattler
- mov r8, r0
- ldrb r1, [r0]
- mov r0, r9
- bl DecompressTrainerFrontPic
- mov r1, r8
- ldrb r0, [r1]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r9
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r5, _08037E74 @ =gMultiuseSpriteTemplate
- ldr r1, _08037E78 @ =gUnknown_823932C
- mov r2, r9
- lsls r0, r2, 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
- mov r1, r8
- ldrb r0, [r1]
- 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, _08037E7C @ =gBattlerSpriteIds
- mov r2, r8
- ldrb r1, [r2]
- adds r1, r5
- strb r0, [r1]
- ldr r4, _08037E80 @ =gSprites
- ldrb r0, [r2]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _08037E84 @ =0x0000ff10
- strh r1, [r0, 0x24]
- ldrb r0, [r2]
- 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, _08037E88 @ =gTrainerFrontPicPaletteTable
- mov r1, r9
- lsls r6, r1, 3
- adds r0, r6, r0
- ldrh r0, [r0, 0x4]
- bl IndexOfSpritePaletteTag
- mov r2, r8
- ldrb r1, [r2]
- 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]
- mov r1, r8
- ldrb r0, [r1]
- 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, _08037E8C @ =gTrainerFrontPicTable
- adds r6, r0
- ldrh r0, [r6, 0x6]
- bl GetSpriteTileStartByTag
- mov r2, r8
- ldrb r1, [r2]
- adds r1, r5
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldr r2, _08037E90 @ =0x000003ff
- ands r2, r0
- ldrh r3, [r1, 0x4]
- ldr r0, _08037E94 @ =0xfffffc00
- ands r0, r3
- orrs r0, r2
- strh r0, [r1, 0x4]
- mov r1, r8
- ldrb r0, [r1]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- mov r2, r9
- strh r2, [r0, 0x6]
- mov r1, r8
- ldrb r0, [r1]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _08037E98 @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _08037E9C @ =gBattlerControllerFuncs
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037EA0 @ =sub_8035AE8
- str r1, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08037E6C: .4byte gTrainers
-_08037E70: .4byte gActiveBattler
-_08037E74: .4byte gMultiuseSpriteTemplate
-_08037E78: .4byte gUnknown_823932C
-_08037E7C: .4byte gBattlerSpriteIds
-_08037E80: .4byte gSprites
-_08037E84: .4byte 0x0000ff10
-_08037E88: .4byte gTrainerFrontPicPaletteTable
-_08037E8C: .4byte gTrainerFrontPicTable
-_08037E90: .4byte 0x000003ff
-_08037E94: .4byte 0xfffffc00
-_08037E98: .4byte sub_8033EEC
-_08037E9C: .4byte gBattlerControllerFuncs
-_08037EA0: .4byte sub_8035AE8
- thumb_func_end sub_8037CD0
-
- thumb_func_start sub_8037EA4
-sub_8037EA4: @ 8037EA4
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- ldr r3, _08037EC0 @ =gTrainerBattleOpponent_A
- ldrh r1, [r3]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _08037EC4
- bl GetSecretBaseTrainerPicIndex
- b _08037EFA
- .align 2, 0
-_08037EC0: .4byte gTrainerBattleOpponent_A
-_08037EC4:
- ldr r0, _08037ED8 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08037EDC
- bl sub_80E6078
- b _08037EFA
- .align 2, 0
-_08037ED8: .4byte gBattleTypeFlags
-_08037EDC:
- movs r0, 0x80
- lsls r0, 12
- ands r0, r1
- cmp r0, 0
- beq _08037EEC
- bl sub_815DA3C
- b _08037EFA
-_08037EEC:
- movs r0, 0x80
- lsls r0, 4
- ands r1, r0
- cmp r1, 0
- beq _08037F00
- bl GetEreaderTrainerFrontSpriteId
-_08037EFA:
- lsls r0, 24
- lsrs r0, 24
- b _08037F0E
-_08037F00:
- ldr r2, _08038040 @ =gTrainers
- ldrh r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r0, [r0, 0x3]
-_08037F0E:
- mov r9, r0
- ldr r0, _08038044 @ =gActiveBattler
- mov r8, r0
- ldrb r1, [r0]
- mov r0, r9
- bl DecompressTrainerFrontPic
- mov r1, r8
- ldrb r0, [r1]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r9
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r0, _08038048 @ =gMultiuseSpriteTemplate
- ldr r2, _0803804C @ =gUnknown_823932C
- mov r3, r9
- lsls r1, r3, 2
- adds r1, r2
- ldrb r1, [r1]
- movs r2, 0x8
- subs r2, r1
- lsls r2, 18
- movs r1, 0xA0
- lsls r1, 14
- adds r2, r1
- asrs r2, 16
- movs r1, 0xB0
- movs r3, 0x1E
- bl CreateSprite
- ldr r5, _08038050 @ =gBattlerSpriteIds
- mov r2, r8
- ldrb r1, [r2]
- adds r1, r5
- strb r0, [r1]
- ldr r4, _08038054 @ =gSprites
- ldrb r0, [r2]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x60
- strh r1, [r0, 0x24]
- ldrb r0, [r2]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x20]
- adds r1, 0x20
- strh r1, [r0, 0x20]
- ldrb r0, [r2]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _08038058 @ =0x0000fffe
- strh r1, [r0, 0x2E]
- ldr r0, _0803805C @ =gTrainerFrontPicPaletteTable
- mov r3, r9
- lsls r6, r3, 3
- adds r0, r6, r0
- ldrh r0, [r0, 0x4]
- bl IndexOfSpritePaletteTag
- mov r2, r8
- ldrb r1, [r2]
- 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]
- mov r3, r8
- ldrb r0, [r3]
- 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, _08038060 @ =gTrainerFrontPicTable
- adds r6, r0
- ldrh r0, [r6, 0x6]
- bl GetSpriteTileStartByTag
- mov r2, r8
- ldrb r1, [r2]
- adds r1, r5
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldr r2, _08038064 @ =0x000003ff
- ands r2, r0
- ldrh r3, [r1, 0x4]
- ldr r0, _08038068 @ =0xfffffc00
- ands r0, r3
- orrs r0, r2
- strh r0, [r1, 0x4]
- mov r3, r8
- ldrb r0, [r3]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- mov r1, r9
- strh r1, [r0, 0x6]
- ldrb r0, [r3]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _0803806C @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _08038070 @ =gBattlerControllerFuncs
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038074 @ =sub_8035B20
- str r1, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08038040: .4byte gTrainers
-_08038044: .4byte gActiveBattler
-_08038048: .4byte gMultiuseSpriteTemplate
-_0803804C: .4byte gUnknown_823932C
-_08038050: .4byte gBattlerSpriteIds
-_08038054: .4byte gSprites
-_08038058: .4byte 0x0000fffe
-_0803805C: .4byte gTrainerFrontPicPaletteTable
-_08038060: .4byte gTrainerFrontPicTable
-_08038064: .4byte 0x000003ff
-_08038068: .4byte 0xfffffc00
-_0803806C: .4byte sub_8033EEC
-_08038070: .4byte gBattlerControllerFuncs
-_08038074: .4byte sub_8035B20
- thumb_func_end sub_8037EA4
-
- thumb_func_start sub_8038078
-sub_8038078: @ 8038078
- push {r4-r6,lr}
- ldr r6, _08038108 @ =gBattlerSpriteIds
- ldr r4, _0803810C @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _08038110 @ =gSprites
- adds r0, r5
- bl oamt_add_pos2_onto_pos1
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x23
- strh r1, [r0, 0x2E]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x8C
- lsls r1, 1
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- 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, [r4]
- 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, _08038114 @ =sub_8075590
- str r1, [r0]
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08038118 @ =SpriteCallbackDummy
- bl StoreSpriteCallbackInData6
- ldr r1, _0803811C @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038120 @ =sub_8035B58
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08038108: .4byte gBattlerSpriteIds
-_0803810C: .4byte gActiveBattler
-_08038110: .4byte gSprites
-_08038114: .4byte sub_8075590
-_08038118: .4byte SpriteCallbackDummy
-_0803811C: .4byte gBattlerControllerFuncs
-_08038120: .4byte sub_8035B58
- thumb_func_end sub_8038078
-
- thumb_func_start sub_8038124
-sub_8038124: @ 8038124
- push {r4-r6,lr}
- ldr r6, _08038170 @ =gBattleSpritesDataPtr
- ldr r4, [r6]
- ldr r5, _08038174 @ =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 _08038178
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08038158
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_08038158:
- 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 _080381B4
- .align 2, 0
-_08038170: .4byte gBattleSpritesDataPtr
-_08038174: .4byte gActiveBattler
-_08038178:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080381B4
- strb r0, [r3, 0x4]
- movs r0, 0x10
- movs r1, 0x3F
- bl PlaySE12WithPanning
- ldr r2, _080381BC @ =gSprites
- ldr r1, _080381C0 @ =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, _080381C4 @ =sub_8011EA0
- str r1, [r0]
- ldr r1, _080381C8 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080381CC @ =sub_803612C
- str r1, [r0]
-_080381B4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080381BC: .4byte gSprites
-_080381C0: .4byte gBattlerSpriteIds
-_080381C4: .4byte sub_8011EA0
-_080381C8: .4byte gBattlerControllerFuncs
-_080381CC: .4byte sub_803612C
- thumb_func_end sub_8038124
-
- thumb_func_start sub_80381D0
-sub_80381D0: @ 80381D0
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80381D0
-
- thumb_func_start sub_80381DC
-sub_80381DC: @ 80381DC
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80381DC
-
- thumb_func_start sub_80381E8
-sub_80381E8: @ 80381E8
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80381E8
-
- thumb_func_start sub_80381F4
-sub_80381F4: @ 80381F4
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80381F4
-
- thumb_func_start sub_8038200
-sub_8038200: @ 8038200
- push {r4-r6,lr}
- ldr r6, _080382E4 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- beq _08038212
- b _08038326
-_08038212:
- ldr r0, _080382E8 @ =gBattleBufferA
- mov r12, r0
- 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, _080382EC @ =gAnimMoveTurn
- mov r1, r12
- adds r1, 0x3
- adds r2, r1
- ldrb r1, [r2]
- strb r1, [r5]
- ldr r4, _080382F0 @ =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, _080382F4 @ =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, _080382F8 @ =gUnknown_2037EFE
- ldrb r1, [r6]
- lsls r1, 9
- mov r2, r12
- adds r2, 0xA
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r3]
- ldr r4, _080382FC @ =gUnknown_2037F00
- 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, _08038300 @ =gAnimDisableStructPtr
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x10
- adds r2, r1
- str r2, [r3]
- ldr r3, _08038304 @ =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 _08038308
- bl OpponentBufferExecCompleted
- b _08038326
- .align 2, 0
-_080382E4: .4byte gActiveBattler
-_080382E8: .4byte gBattleBufferA
-_080382EC: .4byte gAnimMoveTurn
-_080382F0: .4byte gAnimMovePower
-_080382F4: .4byte gAnimMoveDmg
-_080382F8: .4byte gUnknown_2037EFE
-_080382FC: .4byte gUnknown_2037F00
-_08038300: .4byte gAnimDisableStructPtr
-_08038304: .4byte gTransformedPersonalities
-_08038308:
- ldr r0, _0803832C @ =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, _08038330 @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038334 @ =sub_8038338
- str r1, [r0]
-_08038326:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803832C: .4byte gBattleSpritesDataPtr
-_08038330: .4byte gBattlerControllerFuncs
-_08038334: .4byte sub_8038338
- thumb_func_end sub_8038200
-
- thumb_func_start sub_8038338
-sub_8038338: @ 8038338
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, _08038384 @ =gBattleBufferA
- ldr r6, _08038388 @ =gActiveBattler
- ldrb r3, [r6]
- lsls r1, r3, 9
- adds r0, r2, 0x1
- mov r10, r0
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, r2, 0x2
- mov r9, r5
- adds r0, r1, r5
- ldrb r0, [r0]
- lsls r0, 8
- orrs r4, r0
- adds r2, 0xB
- adds r1, r2
- ldrb r1, [r1]
- mov r8, r1
- ldr r7, _0803838C @ =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 _080383D0
- cmp r2, 0x1
- bgt _08038390
- cmp r2, 0
- beq _0803839A
- b _080384AC
- .align 2, 0
-_08038384: .4byte gBattleBufferA
-_08038388: .4byte gActiveBattler
-_0803838C: .4byte gBattleSpritesDataPtr
-_08038390:
- cmp r2, 0x2
- beq _080383FA
- cmp r2, 0x3
- beq _08038470
- b _080384AC
-_0803839A:
- ldr r1, [r5]
- lsls r0, r3, 2
- adds r1, r0, r1
- ldrb r2, [r1]
- movs r0, 0xC
- ands r0, r2
- cmp r0, 0x4
- bne _080383BC
- movs r0, 0x8
- orrs r0, r2
- strb r0, [r1]
- ldrb r2, [r6]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_080383BC:
- 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 _080384AC
-_080383D0:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _080384AC
- 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 _080384AC
-_080383FA:
- ldr r0, _08038460 @ =gAnimScriptCallback
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _08038464 @ =gAnimScriptActive
- ldrb r0, [r0]
- cmp r0, 0
- bne _080384AC
- 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 _08038448
- mov r0, r8
- cmp r0, 0x1
- bhi _08038448
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl InitAndLaunchSpecialAnimation
- ldr r0, [r7]
- ldrb r1, [r6]
- ldr r0, [r0]
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_08038448:
- ldr r0, _08038468 @ =gBattleSpritesDataPtr
- ldr r2, [r0]
- ldr r0, _0803846C @ =gActiveBattler
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strb r1, [r0, 0x4]
- b _080384AC
- .align 2, 0
-_08038460: .4byte gAnimScriptCallback
-_08038464: .4byte gAnimScriptActive
-_08038468: .4byte gBattleSpritesDataPtr
-_0803846C: .4byte gActiveBattler
-_08038470:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080384AC
- bl CopyAllBattleSpritesInvisibilities
- ldrb r0, [r6]
- lsls r2, r0, 9
- mov r3, r10
- adds r1, r2, r3
- ldrb r1, [r1]
- add r2, r9
- 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 OpponentBufferExecCompleted
-_080384AC:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8038338
-
- thumb_func_start sub_80384BC
-sub_80384BC: @ 80384BC
- push {r4,lr}
- ldr r0, _080384F0 @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080384F4 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _080384F8 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- ldr r1, _080384FC @ =gUnknown_2022BC6
- adds r4, r0, r1
- ldrh r0, [r4]
- bl BufferStringBattle
- ldrh r0, [r4]
- bl sub_80D89B0
- lsls r0, 24
- cmp r0, 0
- beq _08038504
- ldr r0, _08038500 @ =gDisplayedStringBattle
- movs r1, 0x40
- bl BattlePutTextOnWindow
- b _0803850C
- .align 2, 0
-_080384F0: .4byte gBattle_BG0_X
-_080384F4: .4byte gBattle_BG0_Y
-_080384F8: .4byte gActiveBattler
-_080384FC: .4byte gUnknown_2022BC6
-_08038500: .4byte gDisplayedStringBattle
-_08038504:
- ldr r0, _08038534 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
-_0803850C:
- ldr r0, _08038538 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08038568
- ldrh r1, [r4]
- cmp r1, 0xE3
- beq _0803854C
- ldr r0, _0803853C @ =0x0000017f
- cmp r1, r0
- bne _08038568
- ldr r1, _08038540 @ =gBattlerControllerFuncs
- ldr r0, _08038544 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038548 @ =sub_80E85C0
- b _08038574
- .align 2, 0
-_08038534: .4byte gDisplayedStringBattle
-_08038538: .4byte gBattleTypeFlags
-_0803853C: .4byte 0x0000017f
-_08038540: .4byte gBattlerControllerFuncs
-_08038544: .4byte gActiveBattler
-_08038548: .4byte sub_80E85C0
-_0803854C:
- ldr r1, _0803855C @ =gBattlerControllerFuncs
- ldr r0, _08038560 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038564 @ =sub_80E8598
- b _08038574
- .align 2, 0
-_0803855C: .4byte gBattlerControllerFuncs
-_08038560: .4byte gActiveBattler
-_08038564: .4byte sub_80E8598
-_08038568:
- ldr r1, _0803857C @ =gBattlerControllerFuncs
- ldr r0, _08038580 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038584 @ =sub_80361E4
-_08038574:
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803857C: .4byte gBattlerControllerFuncs
-_08038580: .4byte gActiveBattler
-_08038584: .4byte sub_80361E4
- thumb_func_end sub_80384BC
-
- thumb_func_start sub_8038588
-sub_8038588: @ 8038588
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038588
-
- thumb_func_start sub_8038594
-sub_8038594: @ 8038594
- push {lr}
- bl sub_8039C84
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038594
-
- thumb_func_start sub_80385A4
-sub_80385A4: @ 80385A4
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80385A4
-
- thumb_func_start sub_80385B0
-sub_80385B0: @ 80385B0
- push {r4-r6,lr}
- ldr r6, _080385E4 @ =gActiveBattler
- ldrb r0, [r6]
- lsls r0, 9
- ldr r1, _080385E8 @ =gUnknown_2022BC8
- adds r5, r0, r1
- ldr r0, _080385EC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x93
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- beq _08038680
- bl BattleAI_SetupAIData
- bl BattleAI_GetAIActionToUse
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x4
- beq _080385F0
- cmp r4, 0x5
- bne _080385FC
- movs r0, 0x1
- movs r1, 0x4
- b _080385F4
- .align 2, 0
-_080385E4: .4byte gActiveBattler
-_080385E8: .4byte gUnknown_2022BC8
-_080385EC: .4byte gBattleTypeFlags
-_080385F0:
- movs r0, 0x1
- movs r1, 0x3
-_080385F4:
- movs r2, 0
- bl BtlController_EmitTwoReturnValues
- b _08038668
-_080385FC:
- ldr r3, _08038670 @ =gBattleMoves
- lsls r0, r4, 1
- adds r2, r5, r0
- ldrh r1, [r2]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x6]
- movs r0, 0x12
- ands r0, r1
- cmp r0, 0
- beq _0803861C
- ldr r1, _08038674 @ =gBattlerTarget
- ldrb r0, [r6]
- strb r0, [r1]
-_0803861C:
- ldrh r1, [r2]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x6]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08038656
- movs r0, 0
- bl GetBattlerAtPosition
- ldr r5, _08038674 @ =gBattlerTarget
- strb r0, [r5]
- ldr r0, _08038678 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0803867C @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08038656
- movs r0, 0x2
- bl GetBattlerAtPosition
- strb r0, [r5]
-_08038656:
- ldr r0, _08038674 @ =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 8
- orrs r4, r0
- movs r0, 0x1
- movs r1, 0xA
- adds r2, r4, 0
- bl BtlController_EmitTwoReturnValues
-_08038668:
- bl OpponentBufferExecCompleted
- b _08038712
- .align 2, 0
-_08038670: .4byte gBattleMoves
-_08038674: .4byte gBattlerTarget
-_08038678: .4byte gAbsentBattlerFlags
-_0803867C: .4byte gBitTable
-_08038680:
- movs r6, 0x3
-_08038682:
- bl Random
- adds r4, r0, 0
- ands r4, r6
- lsls r0, r4, 1
- adds r0, r5, r0
- ldrh r2, [r0]
- cmp r2, 0
- beq _08038682
- ldr r1, _080386BC @ =gBattleMoves
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x6]
- movs r0, 0x12
- ands r0, r1
- cmp r0, 0
- beq _080386C4
- ldr r0, _080386C0 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 8
- orrs r4, r0
- movs r0, 0x1
- movs r1, 0xA
- adds r2, r4, 0
- bl BtlController_EmitTwoReturnValues
- b _0803870E
- .align 2, 0
-_080386BC: .4byte gBattleMoves
-_080386C0: .4byte gActiveBattler
-_080386C4:
- ldr r0, _080386F4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080386F8
- bl Random
- movs r1, 0x2
- ands r1, r0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r1, 0
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 16
- orrs r2, r4
- movs r0, 0x1
- movs r1, 0xA
- bl BtlController_EmitTwoReturnValues
- b _0803870E
- .align 2, 0
-_080386F4: .4byte gBattleTypeFlags
-_080386F8:
- movs r0, 0
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 16
- orrs r2, r4
- movs r0, 0x1
- movs r1, 0xA
- bl BtlController_EmitTwoReturnValues
-_0803870E:
- bl OpponentBufferExecCompleted
-_08038712:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80385B0
-
- thumb_func_start sub_8038718
-sub_8038718: @ 8038718
- push {lr}
- ldr r0, _0803873C @ =gActiveBattler
- ldrb r0, [r0]
- lsrs r0, 1
- ldr r1, _08038740 @ =gBattleStruct
- ldr r1, [r1]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC0
- ldrb r1, [r0]
- movs r0, 0x1
- bl BtlController_EmitOneReturnValue
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803873C: .4byte gActiveBattler
-_08038740: .4byte gBattleStruct
- thumb_func_end sub_8038718
-
- thumb_func_start sub_8038744
-sub_8038744: @ 8038744
- push {r4-r6,lr}
- ldr r6, _08038788 @ =gActiveBattler
- ldrb r0, [r6]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r5, _0803878C @ =gBattleStruct
- ldr r1, [r5]
- adds r0, r1
- adds r0, 0x92
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _080387E4
- bl sub_8039E3C
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x6
- bne _0803880A
- ldr r0, _08038790 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08038794
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- b _080387A8
- .align 2, 0
-_08038788: .4byte gActiveBattler
-_0803878C: .4byte gBattleStruct
-_08038790: .4byte gBattleTypeFlags
-_08038794:
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0x3
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r5, r0, 24
-_080387A8:
- movs r4, 0
- b _080387AE
-_080387AC:
- adds r4, 0x1
-_080387AE:
- cmp r4, 0x5
- bgt _0803880A
- movs r0, 0x64
- muls r0, r4
- ldr r1, _080387DC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080387AC
- ldr r1, _080387E0 @ =gBattlerPartyIndexes
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- beq _080387AC
- lsls r0, r5, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- beq _080387AC
- b _0803880A
- .align 2, 0
-_080387DC: .4byte gEnemyParty
-_080387E0: .4byte gBattlerPartyIndexes
-_080387E4:
- ldrb r0, [r6]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r1, [r5]
- adds r0, r1
- adds r0, 0x92
- ldrb r4, [r0]
- ldrb r0, [r6]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r1, [r5]
- adds r0, r1
- adds r0, 0x92
- movs r1, 0x6
- strb r1, [r0]
-_0803880A:
- ldr r0, _08038830 @ =gActiveBattler
- ldrb r0, [r0]
- ldr r1, _08038834 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x5C
- strb r4, [r0]
- lsls r1, r4, 24
- lsrs r1, 24
- movs r0, 0x1
- movs r2, 0
- bl BtlController_EmitChosenMonReturnValue
- bl OpponentBufferExecCompleted
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08038830: .4byte gActiveBattler
-_08038834: .4byte gBattleStruct
- thumb_func_end sub_8038744
-
- thumb_func_start sub_8038838
-sub_8038838: @ 8038838
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038838
-
- thumb_func_start sub_8038844
-sub_8038844: @ 8038844
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r0, 0
- bl LoadBattleBarGfx
- ldr r3, _080388BC @ =gBattleBufferA
- ldr r0, _080388C0 @ =gActiveBattler
- mov r9, r0
- ldrb r4, [r0]
- lsls r2, r4, 9
- adds r0, r3, 0x3
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r1, 8
- adds r3, 0x2
- adds r2, r3
- ldrb r0, [r2]
- orrs r0, r1
- lsls r0, 16
- asrs r7, r0, 16
- ldr r0, _080388C4 @ =0x00007fff
- cmp r7, r0
- beq _080388D4
- ldr r6, _080388C8 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r6
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _080388CC @ =gEnemyParty
- adds r0, r4
- movs r1, 0x3A
- bl GetMonData
- mov r8, r0
- mov r1, r9
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r4
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, _080388D0 @ =gHealthboxSpriteIds
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- mov r2, r8
- bl SetBattleBarStruct
- b _080388FE
- .align 2, 0
-_080388BC: .4byte gBattleBufferA
-_080388C0: .4byte gActiveBattler
-_080388C4: .4byte 0x00007fff
-_080388C8: .4byte gBattlerPartyIndexes
-_080388CC: .4byte gEnemyParty
-_080388D0: .4byte gHealthboxSpriteIds
-_080388D4:
- ldr r1, _0803891C @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08038920 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, _08038924 @ =gHealthboxSpriteIds
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- movs r3, 0
- bl SetBattleBarStruct
-_080388FE:
- ldr r1, _08038928 @ =gBattlerControllerFuncs
- ldr r0, _0803892C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038930 @ =sub_80360A0
- str r1, [r0]
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803891C: .4byte gBattlerPartyIndexes
-_08038920: .4byte gEnemyParty
-_08038924: .4byte gHealthboxSpriteIds
-_08038928: .4byte gBattlerControllerFuncs
-_0803892C: .4byte gActiveBattler
-_08038930: .4byte sub_80360A0
- thumb_func_end sub_8038844
-
- thumb_func_start sub_8038934
-sub_8038934: @ 8038934
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038934
-
- thumb_func_start sub_8038940
-sub_8038940: @ 8038940
- push {r4,lr}
- ldr r4, _0803899C @ =gActiveBattler
- ldrb r0, [r4]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _08038994
- ldr r0, _080389A0 @ =gHealthboxSpriteIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _080389A4 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _080389A8 @ =gEnemyParty
- adds r1, r2
- movs r2, 0x9
- bl UpdateHealthboxAttribute
- ldrb r2, [r4]
- ldr r0, _080389AC @ =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, _080389B0 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080389B4 @ =sub_80364D0
- str r1, [r0]
-_08038994:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803899C: .4byte gActiveBattler
-_080389A0: .4byte gHealthboxSpriteIds
-_080389A4: .4byte gBattlerPartyIndexes
-_080389A8: .4byte gEnemyParty
-_080389AC: .4byte gBattleSpritesDataPtr
-_080389B0: .4byte gBattlerControllerFuncs
-_080389B4: .4byte sub_80364D0
- thumb_func_end sub_8038940
-
- thumb_func_start sub_80389B8
-sub_80389B8: @ 80389B8
- push {r4,r5,lr}
- ldr r5, _08038A10 @ =gActiveBattler
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _08038A08
- ldr r4, _08038A14 @ =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, _08038A18 @ =gBattlerControllerFuncs
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038A1C @ =sub_80364D0
- str r1, [r0]
-_08038A08:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08038A10: .4byte gActiveBattler
-_08038A14: .4byte gBattleBufferA
-_08038A18: .4byte gBattlerControllerFuncs
-_08038A1C: .4byte sub_80364D0
- thumb_func_end sub_80389B8
-
- thumb_func_start sub_8038A20
-sub_8038A20: @ 8038A20
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038A20
-
- thumb_func_start sub_8038A2C
-sub_8038A2C: @ 8038A2C
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038A2C
-
- thumb_func_start sub_8038A38
-sub_8038A38: @ 8038A38
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038A38
-
- thumb_func_start sub_8038A44
-sub_8038A44: @ 8038A44
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038A44
-
- thumb_func_start sub_8038A50
-sub_8038A50: @ 8038A50
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038A50
-
- thumb_func_start sub_8038A5C
-sub_8038A5C: @ 8038A5C
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038A5C
-
- thumb_func_start sub_8038A68
-sub_8038A68: @ 8038A68
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038A68
-
- thumb_func_start sub_8038A74
-sub_8038A74: @ 8038A74
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038A74
-
- thumb_func_start sub_8038A80
-sub_8038A80: @ 8038A80
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038A80
-
- thumb_func_start OpponentHandlecmd37
-OpponentHandlecmd37: @ 8038A8C
- push {lr}
- ldr r2, _08038AA4 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x80
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08038AA4: .4byte gUnknown_2022870
- thumb_func_end OpponentHandlecmd37
-
- thumb_func_start OpponentHandlecmd38
-OpponentHandlecmd38: @ 8038AA8
- push {lr}
- ldr r3, _08038AD4 @ =gUnknown_2022870
- ldr r1, _08038AD8 @ =gBattleBufferA
- ldr r0, _08038ADC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0x7F
- ands r1, r0
- ldrb r2, [r3]
- movs r0, 0x80
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08038AD4: .4byte gUnknown_2022870
-_08038AD8: .4byte gBattleBufferA
-_08038ADC: .4byte gActiveBattler
- thumb_func_end OpponentHandlecmd38
-
- thumb_func_start OpponentHandlecmd39
-OpponentHandlecmd39: @ 8038AE0
- push {lr}
- ldr r2, _08038AF4 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08038AF4: .4byte gUnknown_2022870
- thumb_func_end OpponentHandlecmd39
-
- thumb_func_start OpponentHandlecmd40
-OpponentHandlecmd40: @ 8038AF8
- push {lr}
- ldr r3, _08038B1C @ =gUnknown_2022870
- ldr r1, [r3]
- lsls r1, 24
- lsrs r1, 31
- movs r0, 0x1
- eors r1, r0
- lsls r1, 7
- ldrb r2, [r3]
- movs r0, 0x7F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08038B1C: .4byte gUnknown_2022870
- thumb_func_end OpponentHandlecmd40
-
- thumb_func_start OpponentHandleHitAnimation
-OpponentHandleHitAnimation: @ 8038B20
- push {r4,lr}
- ldr r3, _08038B48 @ =gSprites
- ldr r2, _08038B4C @ =gBattlerSpriteIds
- ldr r4, _08038B50 @ =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 _08038B54
- bl OpponentBufferExecCompleted
- b _08038B7E
- .align 2, 0
-_08038B48: .4byte gSprites
-_08038B4C: .4byte gBattlerSpriteIds
-_08038B50: .4byte gActiveBattler
-_08038B54:
- ldr r1, _08038B84 @ =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, _08038B88 @ =gBattlerControllerFuncs
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038B8C @ =sub_80361FC
- str r1, [r0]
-_08038B7E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08038B84: .4byte gDoingBattleAnim
-_08038B88: .4byte gBattlerControllerFuncs
-_08038B8C: .4byte sub_80361FC
- thumb_func_end OpponentHandleHitAnimation
-
- thumb_func_start sub_8038B90
-sub_8038B90: @ 8038B90
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8038B90
-
- thumb_func_start OpponentHandleEffectivenessSound
-OpponentHandleEffectivenessSound: @ 8038B9C
- push {r4,lr}
- ldr r4, _08038BD8 @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _08038BB0
- movs r3, 0xC0
-_08038BB0:
- ldr r2, _08038BDC @ =gBattleBufferA
- ldrb r1, [r4]
- 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
- lsls r1, r3, 24
- asrs r1, 24
- bl PlaySE12WithPanning
- bl OpponentBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08038BD8: .4byte gActiveBattler
-_08038BDC: .4byte gBattleBufferA
- thumb_func_end OpponentHandleEffectivenessSound
-
- thumb_func_start OpponentHandlecmd44
-OpponentHandlecmd44: @ 8038BE0
- push {lr}
- ldr r2, _08038C08 @ =gBattleBufferA
- ldr r0, _08038C0C @ =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 OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08038C08: .4byte gBattleBufferA
-_08038C0C: .4byte gActiveBattler
- thumb_func_end OpponentHandlecmd44
-
- thumb_func_start OpponentHandleFaintingCry
-OpponentHandleFaintingCry: @ 8038C10
- push {lr}
- ldr r1, _08038C40 @ =gBattlerPartyIndexes
- ldr r0, _08038C44 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08038C48 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- movs r2, 0x5
- bl PlayCry3
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08038C40: .4byte gBattlerPartyIndexes
-_08038C44: .4byte gActiveBattler
-_08038C48: .4byte gEnemyParty
- thumb_func_end OpponentHandleFaintingCry
-
- thumb_func_start OpponentHandleIntroSlide
-OpponentHandleIntroSlide: @ 8038C4C
- push {lr}
- ldr r1, _08038C74 @ =gBattleBufferA
- ldr r0, _08038C78 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl HandleIntroSlide
- ldr r2, _08038C7C @ =gIntroSlideFlags
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08038C74: .4byte gBattleBufferA
-_08038C78: .4byte gActiveBattler
-_08038C7C: .4byte gIntroSlideFlags
- thumb_func_end OpponentHandleIntroSlide
-
- thumb_func_start sub_8038C80
-sub_8038C80: @ 8038C80
- push {r4-r6,lr}
- ldr r5, _08038D60 @ =gBattlerSpriteIds
- ldr r6, _08038D64 @ =gActiveBattler
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08038D68 @ =gSprites
- adds r0, r4
- bl oamt_add_pos2_onto_pos1
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x23
- strh r1, [r0, 0x2E]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x8C
- lsls r1, 1
- strh r1, [r0, 0x32]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _08038D6C @ =sub_8075590
- str r1, [r0]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _08038D70 @ =sub_8038D90
- bl StoreSpriteCallbackInData6
- ldr r0, _08038D74 @ =sub_8038DC4
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08038D78 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- ldrb r0, [r6]
- strh r0, [r1, 0x8]
- ldr r3, _08038D7C @ =gBattleSpritesDataPtr
- ldr r0, [r3]
- 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, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08038D42
- ldr r0, _08038D80 @ =gUnknown_2024000
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- ldr r1, _08038D84 @ =sub_80491B0
- str r1, [r0]
-_08038D42:
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r0, [r2, 0x9]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _08038D88 @ =gBattlerControllerFuncs
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038D8C @ =nullsub_17
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08038D60: .4byte gBattlerSpriteIds
-_08038D64: .4byte gActiveBattler
-_08038D68: .4byte gSprites
-_08038D6C: .4byte sub_8075590
-_08038D70: .4byte sub_8038D90
-_08038D74: .4byte sub_8038DC4
-_08038D78: .4byte gTasks
-_08038D7C: .4byte gBattleSpritesDataPtr
-_08038D80: .4byte gUnknown_2024000
-_08038D84: .4byte sub_80491B0
-_08038D88: .4byte gBattlerControllerFuncs
-_08038D8C: .4byte nullsub_17
- thumb_func_end sub_8038C80
-
- thumb_func_start sub_8038D90
-sub_8038D90: @ 8038D90
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x6]
- bl FreeTrainerFrontPicPaletteAndTile
- ldrh r0, [r4, 0x38]
- ldr r1, _08038DBC @ =0x000003ff
- ands r1, r0
- ldrh r2, [r4, 0x4]
- ldr r0, _08038DC0 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r4, 0x4]
- adds r0, r4, 0
- bl FreeSpriteOamMatrix
- adds r0, r4, 0
- bl DestroySprite
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08038DBC: .4byte 0x000003ff
-_08038DC0: .4byte 0xfffffc00
- thumb_func_end sub_8038D90
-
- thumb_func_start sub_8038DC4
-sub_8038DC4: @ 8038DC4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r7, _08038E1C @ =gActiveBattler
- ldrb r0, [r7]
- mov r9, r0
- ldr r1, _08038E20 @ =gTasks
- mov r2, r8
- lsls r0, r2, 2
- add r0, r8
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x8]
- strb r0, [r7]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08038DFE
- ldr r0, _08038E24 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08038E30
-_08038DFE:
- ldr r0, _08038E28 @ =gBattleBufferA
- ldrb r1, [r7]
- lsls r2, r1, 9
- adds r0, 0x1
- adds r2, r0
- ldr r0, _08038E2C @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- strb r0, [r2]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_8037A28
- b _08038E70
- .align 2, 0
-_08038E1C: .4byte gActiveBattler
-_08038E20: .4byte gTasks
-_08038E24: .4byte gBattleTypeFlags
-_08038E28: .4byte gBattleBufferA
-_08038E2C: .4byte gBattlerPartyIndexes
-_08038E30:
- ldr r4, _08038E94 @ =gBattleBufferA
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r4, 0x1
- adds r1, r4
- ldr r6, _08038E98 @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_8037A28
- ldrb r0, [r7]
- movs r5, 0x2
- eors r0, r5
- strb r0, [r7]
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r1, r4
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_8037A28
- ldrb r0, [r7]
- eors r0, r5
- strb r0, [r7]
-_08038E70:
- ldr r1, _08038E9C @ =gBattlerControllerFuncs
- ldr r2, _08038EA0 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08038EA4 @ =sub_8035DF0
- str r1, [r0]
- mov r0, r9
- strb r0, [r2]
- mov r0, r8
- bl DestroyTask
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08038E94: .4byte gBattleBufferA
-_08038E98: .4byte gBattlerPartyIndexes
-_08038E9C: .4byte gBattlerControllerFuncs
-_08038EA0: .4byte gActiveBattler
-_08038EA4: .4byte sub_8035DF0
- thumb_func_end sub_8038DC4
-
- thumb_func_start sub_8038EA8
-sub_8038EA8: @ 8038EA8
- push {r4-r7,lr}
- ldr r1, _08038ED0 @ =gBattleBufferA
- ldr r0, _08038ED4 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08038ED8
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08038ED8
- bl OpponentBufferExecCompleted
- b _08038FA2
- .align 2, 0
-_08038ED0: .4byte gBattleBufferA
-_08038ED4: .4byte gActiveBattler
-_08038ED8:
- ldr r4, _08038F30 @ =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r3, _08038F34 @ =gActiveBattler
- ldrb r1, [r3]
- 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]
- ldr r1, _08038F38 @ =gBattleBufferA
- ldrb r2, [r3]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r0, r1
- ldrb r0, [r0]
- adds r7, r3, 0
- cmp r0, 0
- beq _08038F44
- ldr r0, [r4]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrb r2, [r3, 0x1]
- lsls r1, r2, 26
- lsrs r0, r1, 27
- cmp r0, 0x1
- bhi _08038F3C
- adds r0, 0x1
- movs r1, 0x1F
- ands r0, r1
- lsls r0, 1
- movs r1, 0x3F
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x1]
- b _08038FA2
- .align 2, 0
-_08038F30: .4byte gBattleSpritesDataPtr
-_08038F34: .4byte gActiveBattler
-_08038F38: .4byte gBattleBufferA
-_08038F3C:
- movs r0, 0x3F
- negs r0, r0
- ands r0, r2
- strb r0, [r3, 0x1]
-_08038F44:
- adds r5, r7, 0
- ldrb r0, [r5]
- lsls r3, r0, 9
- ldr r4, _08038FA8 @ =gUnknown_2022BC8
- adds r1, r3, r4
- subs r2, r4, 0x3
- adds r2, r3, r2
- ldrb r2, [r2]
- subs r4, 0x2
- adds r3, r4
- ldrb r3, [r3]
- bl sub_8048D14
- ldr r2, _08038FAC @ =gUnknown_2024000
- ldrb r1, [r5]
- adds r1, r2
- movs r3, 0
- strb r0, [r1]
- ldr r6, _08038FB0 @ =gBattleSpritesDataPtr
- ldr r0, [r6]
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r3, [r0, 0x5]
- ldrb r2, [r5]
- lsls r0, r2, 9
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _08038F96
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x5D
- strb r1, [r0, 0x5]
-_08038F96:
- ldr r0, _08038FB4 @ =gBattlerControllerFuncs
- ldrb r1, [r7]
- lsls r1, 2
- adds r1, r0
- ldr r0, _08038FB8 @ =sub_8038FBC
- str r0, [r1]
-_08038FA2:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08038FA8: .4byte gUnknown_2022BC8
-_08038FAC: .4byte gUnknown_2024000
-_08038FB0: .4byte gBattleSpritesDataPtr
-_08038FB4: .4byte gBattlerControllerFuncs
-_08038FB8: .4byte sub_8038FBC
- thumb_func_end sub_8038EA8
-
- thumb_func_start sub_8038FBC
-sub_8038FBC: @ 8038FBC
- push {r4,lr}
- ldr r4, _08038FFC @ =gBattleSpritesDataPtr
- ldr r0, [r4]
- ldr r3, _08039000 @ =gActiveBattler
- ldrb r1, [r3]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x5]
- adds r2, r1, 0x1
- strb r2, [r0, 0x5]
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x5C
- bls _08038FF4
- 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, 0x5]
- bl OpponentBufferExecCompleted
-_08038FF4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08038FFC: .4byte gBattleSpritesDataPtr
-_08039000: .4byte gActiveBattler
- thumb_func_end sub_8038FBC
-
- thumb_func_start sub_8039004
-sub_8039004: @ 8039004
- push {lr}
- ldr r0, _08039040 @ =gBattleSpritesDataPtr
- ldr r1, [r0]
- ldr r0, _08039044 @ =gActiveBattler
- ldrb r3, [r0]
- ldr r1, [r1, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08039036
- ldr r2, _08039048 @ =gTasks
- ldr r0, _0803904C @ =gUnknown_2024000
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, _08039050 @ =sub_80491B0
- str r1, [r0]
-_08039036:
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08039040: .4byte gBattleSpritesDataPtr
-_08039044: .4byte gActiveBattler
-_08039048: .4byte gTasks
-_0803904C: .4byte gUnknown_2024000
-_08039050: .4byte sub_80491B0
- thumb_func_end sub_8039004
-
- thumb_func_start sub_8039054
-sub_8039054: @ 8039054
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8039054
-
- thumb_func_start sub_8039060
-sub_8039060: @ 8039060
- push {r4,lr}
- ldr r4, _080390B0 @ =gActiveBattler
- ldrb r0, [r4]
- bl IsBattlerSpritePresent
- lsls r0, 24
- cmp r0, 0
- beq _080390A6
- ldr r3, _080390B4 @ =gSprites
- ldr r0, _080390B8 @ =gBattlerSpriteIds
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldr r0, _080390BC @ =gBattleBufferA
- lsls r1, 9
- adds r0, 0x1
- adds r1, r0
- adds r2, 0x3E
- movs r0, 0x1
- ldrb r1, [r1]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- bl CopyBattleSpriteInvisibility
-_080390A6:
- bl OpponentBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080390B0: .4byte gActiveBattler
-_080390B4: .4byte gSprites
-_080390B8: .4byte gBattlerSpriteIds
-_080390BC: .4byte gBattleBufferA
- thumb_func_end sub_8039060
-
- thumb_func_start sub_80390C0
-sub_80390C0: @ 80390C0
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, _08039104 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _08039118
- ldr r5, _08039108 @ =gBattleBufferA
- 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 _0803910C
- bl OpponentBufferExecCompleted
- b _08039118
- .align 2, 0
-_08039104: .4byte gActiveBattler
-_08039108: .4byte gBattleBufferA
-_0803910C:
- ldr r0, _08039120 @ =gBattlerControllerFuncs
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _08039124 @ =sub_8036500
- str r0, [r1]
-_08039118:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08039120: .4byte gBattlerControllerFuncs
-_08039124: .4byte sub_8036500
- thumb_func_end sub_80390C0
-
- thumb_func_start sub_8039128
-sub_8039128: @ 8039128
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8039128
-
- thumb_func_start sub_8039134
-sub_8039134: @ 8039134
- push {lr}
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8039134
-
- thumb_func_start OpponentHandleCmd55
-OpponentHandleCmd55: @ 8039140
- push {lr}
- ldr r0, _08039174 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x6
- ands r0, r1
- cmp r0, 0x2
- bne _0803916A
- ldr r2, _08039178 @ =gMain
- ldr r0, _0803917C @ =0x00000439
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _08039180 @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_0803916A:
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08039174: .4byte gBattleTypeFlags
-_08039178: .4byte gMain
-_0803917C: .4byte 0x00000439
-_08039180: .4byte gPreBattleCallback1
- thumb_func_end OpponentHandleCmd55
-
- thumb_func_start nullsub_18
-nullsub_18: @ 8039184
- bx lr
- thumb_func_end nullsub_18
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_player.s b/asm/battle_controller_player.s
index 385b0d44e..4db2fedb2 100644
--- a/asm/battle_controller_player.s
+++ b/asm/battle_controller_player.s
@@ -3317,7 +3317,7 @@ CompleteOnHealthbarDone: @ 802FE24
ldrb r1, [r1]
movs r2, 0
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -3335,7 +3335,7 @@ CompleteOnHealthbarDone: @ 802FE24
adds r0, r6
ldrb r0, [r0]
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
b _0802FE86
.align 2, 0
_0802FE64: .4byte gActiveBattler
@@ -3691,7 +3691,7 @@ _08030124:
adds r0, r7, 0
movs r2, 0x1
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -8084,7 +8084,7 @@ PlayerHandleTrainerSlideBack: @ 8032590
lsls r0, 2
ldr r4, _08032638 @ =gSprites
adds r0, r4
- bl oamt_add_pos2_onto_pos1
+ bl SetSpritePrimaryCoordsFromSecondaryCoords
ldrb r0, [r6]
adds r0, r5
ldrb r1, [r0]
@@ -8121,7 +8121,7 @@ PlayerHandleTrainerSlideBack: @ 8032590
adds r1, r4, 0
adds r1, 0x1C
adds r0, r1
- ldr r1, _08032640 @ =sub_8075590
+ ldr r1, _08032640 @ =StartAnimLinearTranslation
str r1, [r0]
ldrb r0, [r6]
adds r0, r5
@@ -8155,7 +8155,7 @@ _08032630: .4byte gBattlerSpriteIds
_08032634: .4byte gActiveBattler
_08032638: .4byte gSprites
_0803263C: .4byte 0x0000ffd8
-_08032640: .4byte sub_8075590
+_08032640: .4byte StartAnimLinearTranslation
_08032644: .4byte SpriteCallbackDummy
_08032648: .4byte gBattlerControllerFuncs
_0803264C: .4byte sub_802F7A0
@@ -8474,7 +8474,7 @@ _08032852:
lsls r1, 24
orrs r3, r1
str r3, [r4]
- ldr r3, _08032938 @ =gUnknown_2037EFE
+ ldr r3, _08032938 @ =gAnimFriendship
ldrb r1, [r6]
lsls r1, 9
mov r2, r12
@@ -8482,7 +8482,7 @@ _08032852:
adds r1, r2
ldrb r1, [r1]
strb r1, [r3]
- ldr r4, _0803293C @ =gUnknown_2037F00
+ ldr r4, _0803293C @ =gWeatherMoveAnim
ldrb r2, [r6]
lsls r2, 9
mov r1, r12
@@ -8523,8 +8523,8 @@ _08032928: .4byte gBattleBufferA
_0803292C: .4byte gAnimMoveTurn
_08032930: .4byte gAnimMovePower
_08032934: .4byte gAnimMoveDmg
-_08032938: .4byte gUnknown_2037EFE
-_0803293C: .4byte gUnknown_2037F00
+_08032938: .4byte gAnimFriendship
+_0803293C: .4byte gWeatherMoveAnim
_08032940: .4byte gAnimDisableStructPtr
_08032944: .4byte gTransformedPersonalities
_08032948:
@@ -9238,7 +9238,7 @@ _08032EDC:
ldrb r0, [r0]
movs r1, 0
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
_08032F16:
ldr r1, _08032F40 @ =gBattlerControllerFuncs
ldr r0, _08032F44 @ =gActiveBattler
@@ -9940,7 +9940,7 @@ PlayerHandleIntroTrainerBallThrow: @ 8033478
lsls r0, 2
ldr r5, _080335C0 @ =gSprites
adds r0, r5
- bl oamt_add_pos2_onto_pos1
+ bl SetSpritePrimaryCoordsFromSecondaryCoords
ldrb r0, [r7]
adds r0, r6
ldrb r1, [r0]
@@ -10059,14 +10059,14 @@ PlayerHandleIntroTrainerBallThrow: @ 8033478
ands r0, r1
cmp r0, 0
beq _0803359A
- ldr r0, _080335E8 @ =gUnknown_2024000
+ ldr r0, _080335E8 @ =gBattlerStatusSummaryTaskId
adds r0, r2, r0
ldrb r1, [r0]
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
adds r0, r4
- ldr r1, _080335EC @ =sub_80491B0
+ ldr r1, _080335EC @ =Task_HidePartyStatusSummary
str r1, [r0]
_0803359A:
ldr r0, [r3]
@@ -10097,8 +10097,8 @@ _080335D8: .4byte gSaveBlock2Ptr
_080335DC: .4byte task05_08033660
_080335E0: .4byte gTasks
_080335E4: .4byte gBattleSpritesDataPtr
-_080335E8: .4byte gUnknown_2024000
-_080335EC: .4byte sub_80491B0
+_080335E8: .4byte gBattlerStatusSummaryTaskId
+_080335EC: .4byte Task_HidePartyStatusSummary
_080335F0: .4byte gBattlerControllerFuncs
_080335F4: .4byte nullsub_13
thumb_func_end PlayerHandleIntroTrainerBallThrow
@@ -10323,8 +10323,8 @@ _0803379C:
subs r4, 0x2
adds r3, r4
ldrb r3, [r3]
- bl sub_8048D14
- ldr r2, _08033824 @ =gUnknown_2024000
+ bl CreatePartyStatusSummarySprites
+ ldr r2, _08033824 @ =gBattlerStatusSummaryTaskId
ldrb r1, [r5]
adds r1, r2
movs r3, 0
@@ -10366,7 +10366,7 @@ _08033810:
_08033818: .4byte gBattleSpritesDataPtr
_0803381C: .4byte gActiveBattler
_08033820: .4byte gUnknown_2022BC8
-_08033824: .4byte gUnknown_2024000
+_08033824: .4byte gBattlerStatusSummaryTaskId
_08033828: .4byte gBattlerControllerFuncs
_0803382C: .4byte sub_8033830
thumb_func_end PlayerHandleDrawPartyStatusSummary
@@ -10427,14 +10427,14 @@ PlayerHandleCmd49: @ 8033878
cmp r0, 0
beq _080338AA
ldr r2, _080338BC @ =gTasks
- ldr r0, _080338C0 @ =gUnknown_2024000
+ ldr r0, _080338C0 @ =gBattlerStatusSummaryTaskId
adds r0, r3, r0
ldrb r1, [r0]
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
adds r0, r2
- ldr r1, _080338C4 @ =sub_80491B0
+ ldr r1, _080338C4 @ =Task_HidePartyStatusSummary
str r1, [r0]
_080338AA:
bl PlayerBufferExecCompleted
@@ -10444,8 +10444,8 @@ _080338AA:
_080338B4: .4byte gBattleSpritesDataPtr
_080338B8: .4byte gActiveBattler
_080338BC: .4byte gTasks
-_080338C0: .4byte gUnknown_2024000
-_080338C4: .4byte sub_80491B0
+_080338C0: .4byte gBattlerStatusSummaryTaskId
+_080338C4: .4byte Task_HidePartyStatusSummary
thumb_func_end PlayerHandleCmd49
thumb_func_start sub_80338C8
diff --git a/asm/battle_controller_pokedude.s b/asm/battle_controller_pokedude.s
index 4bff9be01..35684558a 100644
--- a/asm/battle_controller_pokedude.s
+++ b/asm/battle_controller_pokedude.s
@@ -1338,7 +1338,7 @@ _08156B54:
adds r0, r7, 0
movs r2, 0x1
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -1714,7 +1714,7 @@ sub_8156E78: @ 8156E78
ldrb r1, [r1]
movs r2, 0
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -1732,7 +1732,7 @@ sub_8156E78: @ 8156E78
adds r0, r6
ldrb r0, [r0]
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
b _08156EDA
.align 2, 0
_08156EB8: .4byte gActiveBattler
@@ -4258,7 +4258,7 @@ _081583F0:
movs r0, 0x84
bl SetMultiuseSpriteTemplateToTrainerBack
ldr r5, _08158510 @ =gMultiuseSpriteTemplate
- ldr r0, _08158514 @ =gUnknown_823932C
+ ldr r0, _08158514 @ =gTrainerFrontPicCoords
movs r1, 0x84
mov r8, r1
movs r1, 0x84
@@ -4386,7 +4386,7 @@ _081584E2:
bx r0
.align 2, 0
_08158510: .4byte gMultiuseSpriteTemplate
-_08158514: .4byte gUnknown_823932C
+_08158514: .4byte gTrainerFrontPicCoords
_08158518: .4byte gBattlerSpriteIds
_0815851C: .4byte gSprites
_08158520: .4byte 0x0000ff10
@@ -4622,7 +4622,7 @@ _081586FC:
lsls r0, 2
adds r2, 0x1C
adds r0, r2
- ldr r1, _08158738 @ =sub_8011EA0
+ ldr r1, _08158738 @ =SpriteCB_FaintOpponentMon
_0815871A:
str r1, [r0]
ldr r1, _0815873C @ =gBattlerControllerFuncs
@@ -4639,7 +4639,7 @@ _0815872A:
.align 2, 0
_08158730: .4byte gSprites
_08158734: .4byte gBattlerSpriteIds
-_08158738: .4byte sub_8011EA0
+_08158738: .4byte SpriteCB_FaintOpponentMon
_0815873C: .4byte gBattlerControllerFuncs
_08158740: .4byte gActiveBattler
_08158744: .4byte sub_8156DCC
@@ -4808,7 +4808,7 @@ sub_8158814: @ 8158814
lsls r1, 24
orrs r3, r1
str r3, [r4]
- ldr r3, _081588FC @ =gUnknown_2037EFE
+ ldr r3, _081588FC @ =gAnimFriendship
ldrb r1, [r6]
lsls r1, 9
mov r2, r12
@@ -4816,7 +4816,7 @@ sub_8158814: @ 8158814
adds r1, r2
ldrb r1, [r1]
strb r1, [r3]
- ldr r4, _08158900 @ =gUnknown_2037F00
+ ldr r4, _08158900 @ =gWeatherMoveAnim
ldrb r2, [r6]
lsls r2, 9
mov r1, r12
@@ -4857,8 +4857,8 @@ _081588EC: .4byte gActiveBattler
_081588F0: .4byte gAnimMoveTurn
_081588F4: .4byte gAnimMovePower
_081588F8: .4byte gAnimMoveDmg
-_081588FC: .4byte gUnknown_2037EFE
-_08158900: .4byte gUnknown_2037F00
+_081588FC: .4byte gAnimFriendship
+_08158900: .4byte gWeatherMoveAnim
_08158904: .4byte gAnimDisableStructPtr
_08158908: .4byte gTransformedPersonalities
_0815890C:
@@ -5550,7 +5550,7 @@ _08158E80:
ldrb r0, [r0]
movs r1, 0
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
_08158EA8:
ldr r1, _08158EC4 @ =gBattlerControllerFuncs
ldr r0, _08158EC8 @ =gActiveBattler
@@ -6129,7 +6129,7 @@ sub_8159304: @ 8159304
lsls r0, 2
ldr r5, _08159444 @ =gSprites
adds r0, r5
- bl oamt_add_pos2_onto_pos1
+ bl SetSpritePrimaryCoordsFromSecondaryCoords
ldrb r0, [r7]
adds r0, r6
ldrb r1, [r0]
@@ -6166,7 +6166,7 @@ sub_8159304: @ 8159304
adds r1, r5, 0
adds r1, 0x1C
adds r0, r1
- ldr r1, _0815944C @ =sub_8075590
+ ldr r1, _0815944C @ =StartAnimLinearTranslation
str r1, [r0]
ldrb r2, [r7]
adds r0, r2, r6
@@ -6243,14 +6243,14 @@ sub_8159304: @ 8159304
ands r0, r1
cmp r0, 0
beq _0815941C
- ldr r0, _08159468 @ =gUnknown_2024000
+ 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 @ =sub_80491B0
+ ldr r1, _0815946C @ =Task_HidePartyStatusSummary
str r1, [r0]
_0815941C:
ldr r0, [r3]
@@ -6273,15 +6273,15 @@ _0815943C: .4byte gBattlerSpriteIds
_08159440: .4byte gActiveBattler
_08159444: .4byte gSprites
_08159448: .4byte 0x0000ffd8
-_0815944C: .4byte sub_8075590
+_0815944C: .4byte StartAnimLinearTranslation
_08159450: .4byte sub_80335F8
_08159454: .4byte 0x0000d6f8
_08159458: .4byte gUnknown_8239FD4
_0815945C: .4byte sub_81595EC
_08159460: .4byte gTasks
_08159464: .4byte gBattleSpritesDataPtr
-_08159468: .4byte gUnknown_2024000
-_0815946C: .4byte sub_80491B0
+_08159468: .4byte gBattlerStatusSummaryTaskId
+_0815946C: .4byte Task_HidePartyStatusSummary
_08159470: .4byte gBattlerControllerFuncs
_08159474: .4byte nullsub_99
thumb_func_end sub_8159304
@@ -6560,8 +6560,8 @@ _08159690:
subs r3, 0x2
adds r4, r3
ldrb r3, [r4]
- bl sub_8048D14
- ldr r2, _081596E0 @ =gUnknown_2024000
+ bl CreatePartyStatusSummarySprites
+ ldr r2, _081596E0 @ =gBattlerStatusSummaryTaskId
ldrb r1, [r5]
adds r1, r2
strb r0, [r1]
@@ -6574,7 +6574,7 @@ _081596CE:
_081596D4: .4byte gBattleSpritesDataPtr
_081596D8: .4byte gActiveBattler
_081596DC: .4byte gUnknown_2022BC8
-_081596E0: .4byte gUnknown_2024000
+_081596E0: .4byte gBattlerStatusSummaryTaskId
thumb_func_end sub_8159660
thumb_func_start sub_81596E4
diff --git a/asm/battle_interface.s b/asm/battle_interface.s
index 8f6361bb4..3e8044d2a 100644
--- a/asm/battle_interface.s
+++ b/asm/battle_interface.s
@@ -1201,8 +1201,8 @@ _08048424:
_0804843C: .4byte 0x06010400
thumb_func_end UpdateLvlInHealthbox
- thumb_func_start sub_8048440
-sub_8048440: @ 8048440
+ thumb_func_start UpdateHpTextInHealthbox
+UpdateHpTextInHealthbox: @ 8048440
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -1425,7 +1425,7 @@ _08048608: .4byte gMonSpritesGfxPtr
_0804860C: .4byte gSprites
_08048610: .4byte 0x06010000
_08048614: .4byte 0x04000008
- thumb_func_end sub_8048440
+ thumb_func_end UpdateHpTextInHealthbox
thumb_func_start sub_8048618
sub_8048618: @ 8048618
@@ -2279,8 +2279,8 @@ _08048D0C: .4byte gHealthboxSpriteIds
_08048D10: .4byte gBattlersCount
thumb_func_end sub_8048A4C
- thumb_func_start sub_8048D14
-sub_8048D14: @ 8048D14
+ thumb_func_start CreatePartyStatusSummarySprites
+CreatePartyStatusSummarySprites: @ 8048D14
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -2866,10 +2866,10 @@ _08049172:
.align 2, 0
_080491A8: .4byte TaskDummy
_080491AC: .4byte gTasks
- thumb_func_end sub_8048D14
+ thumb_func_end CreatePartyStatusSummarySprites
- thumb_func_start sub_80491B0
-sub_80491B0: @ 80491B0
+ thumb_func_start Task_HidePartyStatusSummary
+Task_HidePartyStatusSummary: @ 80491B0
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -3099,7 +3099,7 @@ _0804936E:
.align 2, 0
_08049380: .4byte gTasks
_08049384: .4byte sub_804948C
- thumb_func_end sub_80491B0
+ thumb_func_end Task_HidePartyStatusSummary
thumb_func_start sub_8049388
sub_8049388: @ 8049388
@@ -4426,7 +4426,7 @@ _08049E0C:
asrs r1, 16
adds r0, r6, 0
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
_08049E26:
cmp r7, 0x2
beq _08049E2E
@@ -4441,7 +4441,7 @@ _08049E2E:
asrs r1, 16
adds r0, r6, 0
movs r2, 0x1
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
_08049E44:
cmp r7, 0x5
beq _08049E4C
@@ -4468,7 +4468,7 @@ _08049E4C:
adds r1, r6, 0
movs r2, 0
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
_08049E80:
bl IsDoubleBattle
lsls r0, 24
@@ -4530,7 +4530,7 @@ _08049E96:
adds r1, r6, 0
movs r2, 0x1
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
_08049F06:
cmp r7, 0x4
beq _08049F0E
@@ -4607,7 +4607,7 @@ _08049F74:
adds r1, r6, 0
movs r2, 0
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
_08049FA8:
cmp r7, 0x4
beq _08049FB0
@@ -4636,8 +4636,8 @@ _08049FC6:
bx r0
thumb_func_end UpdateHealthboxAttribute
- thumb_func_start sub_8049FD8
-sub_8049FD8: @ 8049FD8
+ thumb_func_start MoveBattleBar
+MoveBattleBar: @ 8049FD8
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -4765,7 +4765,7 @@ _0804A0BE:
bx r1
.align 2, 0
_0804A0D0: .4byte gBattleSpritesDataPtr
- thumb_func_end sub_8049FD8
+ thumb_func_end MoveBattleBar
thumb_func_start sub_804A0D4
sub_804A0D4: @ 804A0D4
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index ee6856130..abb47aba9 100644
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -929,8 +929,8 @@ _080E6062:
_080E6074: .4byte gSaveBlock2Ptr
thumb_func_end sub_80E5E7C
- thumb_func_start sub_80E6078
-sub_80E6078: @ 80E6078
+ thumb_func_start GetBattleTowerTrainerFrontSpriteId
+GetBattleTowerTrainerFrontSpriteId: @ 80E6078
push {lr}
ldr r0, _080E6094 @ =gSaveBlock2Ptr
ldr r3, [r0]
@@ -983,7 +983,7 @@ _080E60D6:
.align 2, 0
_080E60DC: .4byte gFacilityClassToPicIndex
_080E60E0: .4byte gUnknown_83FFAC4
- thumb_func_end sub_80E6078
+ thumb_func_end GetBattleTowerTrainerFrontSpriteId
thumb_func_start sub_80E60E4
sub_80E60E4: @ 80E60E4
diff --git a/asm/bug.s b/asm/bug.s
index 27c66e10f..de99118a2 100644
--- a/asm/bug.s
+++ b/asm/bug.s
@@ -86,7 +86,7 @@ _080B4008:
ldrh r4, [r4, 0x6]
adds r0, r4
strh r0, [r6, 0x36]
- ldr r0, _080B4074 @ =sub_8075590
+ ldr r0, _080B4074 @ =StartAnimLinearTranslation
str r0, [r6, 0x1C]
ldr r1, _080B4078 @ =DestroyAnimSprite
adds r0, r6, 0
@@ -97,7 +97,7 @@ _080B4008:
.align 2, 0
_080B406C: .4byte gBattleAnimTarget
_080B4070: .4byte gBattleAnimArgs
-_080B4074: .4byte sub_8075590
+_080B4074: .4byte StartAnimLinearTranslation
_080B4078: .4byte DestroyAnimSprite
thumb_func_end sub_80B3FAC
@@ -166,7 +166,7 @@ _080B40BC:
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x36]
- ldr r0, _080B4120 @ =sub_8075590
+ ldr r0, _080B4120 @ =StartAnimLinearTranslation
str r0, [r6, 0x1C]
ldr r1, _080B4124 @ =DestroyAnimSprite
adds r0, r6, 0
@@ -177,7 +177,7 @@ _080B40BC:
.align 2, 0
_080B4118: .4byte gBattleAnimTarget
_080B411C: .4byte gBattleAnimArgs
-_080B4120: .4byte sub_8075590
+_080B4120: .4byte StartAnimLinearTranslation
_080B4124: .4byte DestroyAnimSprite
thumb_func_end sub_80B407C
@@ -603,7 +603,7 @@ _080B43F6:
strh r0, [r7, 0x2E]
strh r4, [r7, 0x32]
strh r5, [r7, 0x36]
- ldr r0, _080B448C @ =sub_8075590
+ ldr r0, _080B448C @ =StartAnimLinearTranslation
str r0, [r7, 0x1C]
ldr r1, _080B4490 @ =DestroyAnimSprite
adds r0, r7, 0
@@ -616,7 +616,7 @@ _080B43F6:
_080B4480: .4byte gBattleAnimAttacker
_080B4484: .4byte gBattleAnimArgs
_080B4488: .4byte gBattleAnimTarget
-_080B448C: .4byte sub_8075590
+_080B448C: .4byte StartAnimLinearTranslation
_080B4490: .4byte DestroyAnimSprite
thumb_func_end sub_80B4364
diff --git a/asm/dragon.s b/asm/dragon.s
index 5f86b5eca..bd01691f1 100644
--- a/asm/dragon.s
+++ b/asm/dragon.s
@@ -152,7 +152,7 @@ _080B7386:
ldr r0, _080B73A0 @ =gBattleAnimArgs
ldrh r0, [r0, 0x8]
strh r0, [r5, 0x2E]
- ldr r0, _080B73A4 @ =sub_8075590
+ ldr r0, _080B73A4 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080B73A8 @ =move_anim_8074EE0
adds r0, r5, 0
@@ -162,7 +162,7 @@ _080B7386:
bx r0
.align 2, 0
_080B73A0: .4byte gBattleAnimArgs
-_080B73A4: .4byte sub_8075590
+_080B73A4: .4byte StartAnimLinearTranslation
_080B73A8: .4byte move_anim_8074EE0
thumb_func_end sub_80B72F8
diff --git a/asm/fighting.s b/asm/fighting.s
index b933e88e6..81785b16b 100644
--- a/asm/fighting.s
+++ b/asm/fighting.s
@@ -399,7 +399,7 @@ _080B0BB6:
ldrh r0, [r4, 0x22]
subs r0, 0x14
strh r0, [r4, 0x36]
- ldr r0, _080B0BD0 @ =sub_8075590
+ ldr r0, _080B0BD0 @ =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, _080B0BD4 @ =sub_80B0BD8
adds r0, r4, 0
@@ -408,7 +408,7 @@ _080B0BB6:
pop {r0}
bx r0
.align 2, 0
-_080B0BD0: .4byte sub_8075590
+_080B0BD0: .4byte StartAnimLinearTranslation
_080B0BD4: .4byte sub_80B0BD8
thumb_func_end sub_80B0B80
@@ -440,7 +440,7 @@ sub_80B0BD8: @ 80B0BD8
strh r1, [r5, 0x22]
strh r6, [r5, 0x26]
strh r6, [r5, 0x24]
- ldr r0, _080B0C20 @ =sub_8075590
+ ldr r0, _080B0C20 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080B0C24 @ =DestroyAnimSprite
adds r0, r5, 0
@@ -450,7 +450,7 @@ _080B0C18:
pop {r0}
bx r0
.align 2, 0
-_080B0C20: .4byte sub_8075590
+_080B0C20: .4byte StartAnimLinearTranslation
_080B0C24: .4byte DestroyAnimSprite
thumb_func_end sub_80B0BD8
@@ -654,7 +654,7 @@ sub_80B0D7C: @ 80B0D7C
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
- ldr r0, _080B0DCC @ =sub_8075590
+ ldr r0, _080B0DCC @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080B0DD0 @ =sub_80B0DD4
adds r0, r5, 0
@@ -665,7 +665,7 @@ _080B0DC0:
bx r0
.align 2, 0
_080B0DC8: .4byte gBattleAnimTarget
-_080B0DCC: .4byte sub_8075590
+_080B0DCC: .4byte StartAnimLinearTranslation
_080B0DD0: .4byte sub_80B0DD4
thumb_func_end sub_80B0D7C
diff --git a/asm/fire.s b/asm/fire.s
index 0e014a48d..d838039ac 100644
--- a/asm/fire.s
+++ b/asm/fire.s
@@ -367,14 +367,14 @@ sub_80ACBB0: @ 80ACBB0
strh r1, [r0, 0x32]
movs r1, 0x50
strh r1, [r0, 0x36]
- ldr r1, _080ACBD4 @ =sub_8075590
+ ldr r1, _080ACBD4 @ =StartAnimLinearTranslation
str r1, [r0, 0x1C]
ldr r1, _080ACBD8 @ =DestroyAnimSprite
bl StoreSpriteCallbackInData6
pop {r0}
bx r0
.align 2, 0
-_080ACBD4: .4byte sub_8075590
+_080ACBD4: .4byte StartAnimLinearTranslation
_080ACBD8: .4byte DestroyAnimSprite
thumb_func_end sub_80ACBB0
diff --git a/asm/flying.s b/asm/flying.s
index 23fe4371d..a776b54cb 100644
--- a/asm/flying.s
+++ b/asm/flying.s
@@ -376,7 +376,7 @@ _080B1B72:
ldrh r3, [r5, 0x36]
adds r0, r3
strh r0, [r5, 0x36]
- ldr r0, _080B1BA8 @ =sub_8075590
+ ldr r0, _080B1BA8 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080B1BAC @ =DestroyAnimSprite
adds r0, r5, 0
@@ -390,7 +390,7 @@ _080B1B72:
.align 2, 0
_080B1BA0: .4byte gBattleAnimTarget
_080B1BA4: .4byte gBattleAnimArgs
-_080B1BA8: .4byte sub_8075590
+_080B1BA8: .4byte StartAnimLinearTranslation
_080B1BAC: .4byte DestroyAnimSprite
thumb_func_end sub_80B1AB8
diff --git a/asm/ground.s b/asm/ground.s
index d9cc47ed2..3df01daf8 100644
--- a/asm/ground.s
+++ b/asm/ground.s
@@ -155,7 +155,7 @@ _080B8C74:
ldrh r4, [r4, 0x6]
adds r0, r4
strh r0, [r6, 0x36]
- ldr r0, _080B8CC0 @ =sub_8075590
+ ldr r0, _080B8CC0 @ =StartAnimLinearTranslation
str r0, [r6, 0x1C]
ldr r1, _080B8CC4 @ =DestroyAnimSprite
adds r0, r6, 0
@@ -167,7 +167,7 @@ _080B8C74:
_080B8CB4: .4byte gBattleAnimAttacker
_080B8CB8: .4byte gBattleAnimArgs
_080B8CBC: .4byte gBattleAnimTarget
-_080B8CC0: .4byte sub_8075590
+_080B8CC0: .4byte StartAnimLinearTranslation
_080B8CC4: .4byte DestroyAnimSprite
thumb_func_end sub_80B8C54
@@ -222,7 +222,7 @@ _080B8D20:
strh r0, [r6, 0x32]
adds r0, r7, r4
strh r0, [r6, 0x36]
- ldr r0, _080B8D50 @ =sub_8075590
+ ldr r0, _080B8D50 @ =StartAnimLinearTranslation
str r0, [r6, 0x1C]
ldr r1, _080B8D54 @ =move_anim_8074EE0
adds r0, r6, 0
@@ -235,7 +235,7 @@ _080B8D20:
.align 2, 0
_080B8D48: .4byte gBattleAnimTarget
_080B8D4C: .4byte gBattleAnimArgs
-_080B8D50: .4byte sub_8075590
+_080B8D50: .4byte StartAnimLinearTranslation
_080B8D54: .4byte move_anim_8074EE0
thumb_func_end sub_80B8CC8
diff --git a/asm/ice.s b/asm/ice.s
index ddc0370f7..ab26d23e5 100644
--- a/asm/ice.s
+++ b/asm/ice.s
@@ -429,7 +429,7 @@ _080AF37A:
ldr r1, _080AF3B0 @ =DestroyAnimSprite
adds r0, r4, 0
bl StoreSpriteCallbackInData6
- ldr r0, _080AF3B4 @ =sub_8075590
+ ldr r0, _080AF3B4 @ =StartAnimLinearTranslation
str r0, [r4, 0x1C]
pop {r4}
pop {r0}
@@ -438,7 +438,7 @@ _080AF37A:
_080AF3A8: .4byte gBattleAnimArgs
_080AF3AC: .4byte gBattleAnimTarget
_080AF3B0: .4byte DestroyAnimSprite
-_080AF3B4: .4byte sub_8075590
+_080AF3B4: .4byte StartAnimLinearTranslation
thumb_func_end sub_80AF330
thumb_func_start sub_80AF3B8
diff --git a/asm/poison.s b/asm/poison.s
index 111ad544a..770941be8 100644
--- a/asm/poison.s
+++ b/asm/poison.s
@@ -253,7 +253,7 @@ _080B17F0:
strh r2, [r4, 0x32]
adds r1, r3
strh r1, [r4, 0x36]
- ldr r0, _080B1830 @ =sub_8075590
+ ldr r0, _080B1830 @ =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, _080B1834 @ =DestroyAnimSprite
adds r0, r4, 0
@@ -265,7 +265,7 @@ _080B17F0:
_080B1824: .4byte gBattleAnimTarget
_080B1828: .4byte gBattleAnimAttacker
_080B182C: .4byte gBattleAnimArgs
-_080B1830: .4byte sub_8075590
+_080B1830: .4byte StartAnimLinearTranslation
_080B1834: .4byte DestroyAnimSprite
thumb_func_end sub_80B17C4
diff --git a/asm/rock.s b/asm/rock.s
index cef182f32..c0da2bcfa 100644
--- a/asm/rock.s
+++ b/asm/rock.s
@@ -682,7 +682,7 @@ sub_80B4B8C: @ 80B4B8C
ldrh r1, [r4, 0x22]
adds r0, r1
strh r0, [r4, 0x36]
- ldr r0, _080B4BC8 @ =sub_8075590
+ ldr r0, _080B4BC8 @ =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, _080B4BCC @ =DestroyAnimSprite
adds r0, r4, 0
@@ -692,7 +692,7 @@ sub_80B4B8C: @ 80B4B8C
bx r0
.align 2, 0
_080B4BC4: .4byte gBattleAnimArgs
-_080B4BC8: .4byte sub_8075590
+_080B4BC8: .4byte StartAnimLinearTranslation
_080B4BCC: .4byte DestroyAnimSprite
thumb_func_end sub_80B4B8C
diff --git a/asm/water.s b/asm/water.s
index 6904e65d2..d40e8f594 100644
--- a/asm/water.s
+++ b/asm/water.s
@@ -891,7 +891,7 @@ _080AB27A:
ldrh r5, [r5, 0x6]
adds r0, r5
strh r0, [r6, 0x36]
- ldr r0, _080AB2C4 @ =sub_8075590
+ ldr r0, _080AB2C4 @ =StartAnimLinearTranslation
str r0, [r6, 0x1C]
ldr r1, _080AB2C8 @ =DestroyAnimSprite
adds r0, r6, 0
@@ -903,7 +903,7 @@ _080AB27A:
_080AB2B8: .4byte gBattleAnimAttacker
_080AB2BC: .4byte gBattleAnimTarget
_080AB2C0: .4byte gBattleAnimArgs
-_080AB2C4: .4byte sub_8075590
+_080AB2C4: .4byte StartAnimLinearTranslation
_080AB2C8: .4byte DestroyAnimSprite
thumb_func_end sub_80AB1F8
@@ -923,7 +923,7 @@ sub_80AB2CC: @ 80AB2CC
ldrh r0, [r4, 0x22]
adds r1, r0
strh r1, [r4, 0x36]
- ldr r0, _080AB300 @ =sub_8075590
+ ldr r0, _080AB300 @ =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, _080AB304 @ =DestroyAnimSprite
adds r0, r4, 0
@@ -933,7 +933,7 @@ sub_80AB2CC: @ 80AB2CC
bx r0
.align 2, 0
_080AB2FC: .4byte gBattleAnimArgs
-_080AB300: .4byte sub_8075590
+_080AB300: .4byte StartAnimLinearTranslation
_080AB304: .4byte DestroyAnimSprite
thumb_func_end sub_80AB2CC
diff --git a/data/data.s b/data/data.s
index 8b3e66bdc..0a2298a65 100644
--- a/data/data.s
+++ b/data/data.s
@@ -145,7 +145,7 @@ gMonShinyPaletteTable:: @ 82380CC
gTrainerFrontAnimsPtrTable:: @ 82390DC
.incbin "baserom.gba", 0x2390DC, 0x250
-gUnknown_823932C:: @ 823932C
+gTrainerFrontPicCoords:: @ 823932C
.incbin "baserom.gba", 0x23932C, 0x250
gTrainerFrontPicTable:: @ 823957C
@@ -350,8 +350,7 @@ gSpriteSheet_EnemyShadow:: @ 8250A0C
gSpriteTemplate_EnemyShadow:: @ 8250A1C
.incbin "baserom.gba", 0x250A1C, 0x18
-gUnknown_8250A34:: @ 8250A34
- .incbin "baserom.gba", 0x250A34, 0xEC
+ .section .rodata.8250B20
gUnknown_8250B20:: @ 8250B20
.incbin "baserom.gba", 0x250B20, 0xE4
diff --git a/include/battle.h b/include/battle.h
index 1e50a5dc1..445902b39 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -2,8 +2,6 @@
#define GUARD_BATTLE_H
#include "global.h"
-
-// should they be included here or included individually by every file?
#include "constants/battle.h"
#include "battle_util.h"
#include "battle_script_commands.h"
@@ -19,8 +17,6 @@
0x2 bit is responsible for the id of sent out pokemon. 0 means it's the first sent out pokemon, 1 it's the second one. (Triple battle didn't exist at the time yet.)
*/
-#define BATTLE_BANKS_COUNT 4
-
#define IDENTITY_PLAYER_MON1 0
#define IDENTITY_OPPONENT_MON1 1
#define IDENTITY_PLAYER_MON2 2
@@ -209,10 +205,10 @@ struct TrainerMonItemCustomMoves
union TrainerMonPtr
{
- struct TrainerMonNoItemDefaultMoves* NoItemDefaultMoves;
- struct TrainerMonNoItemCustomMoves* NoItemCustomMoves;
- struct TrainerMonItemDefaultMoves* ItemDefaultMoves;
- struct TrainerMonItemCustomMoves* ItemCustomMoves;
+ struct TrainerMonNoItemDefaultMoves *NoItemDefaultMoves;
+ struct TrainerMonNoItemCustomMoves *NoItemCustomMoves;
+ struct TrainerMonItemDefaultMoves *ItemDefaultMoves;
+ struct TrainerMonItemCustomMoves *ItemCustomMoves;
};
struct Trainer
@@ -278,7 +274,7 @@ struct DisableStruct
/*0x1A*/ u8 unk1A[2];
};
-extern struct DisableStruct gDisableStructs[BATTLE_BANKS_COUNT];
+extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
struct ProtectStruct
{
@@ -318,7 +314,7 @@ struct ProtectStruct
/* field_E */ u16 fieldE;
};
-extern struct ProtectStruct gProtectStructs[BATTLE_BANKS_COUNT];
+extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
struct SpecialStatus
{
@@ -340,7 +336,7 @@ struct SpecialStatus
u8 field13;
};
-extern struct SpecialStatus gSpecialStatuses[BATTLE_BANKS_COUNT];
+extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
struct SideTimer
{
@@ -463,7 +459,7 @@ struct BattleResources
struct BattleScriptsStack *AI_ScriptsStack;
};
-extern struct BattleResources* gBattleResources;
+extern struct BattleResources *gBattleResources;
#define BATTLESCRIPTS_STACK (gBattleResources->battleScriptsStack)
#define BATTLE_CALLBACKS_STACK (gBattleResources->battleCallbackStack)
@@ -546,15 +542,12 @@ struct BattleStruct
u8 field_8C;
u8 field_8D;
u8 stringMoveType;
- u8 expGetterBank;
+ u8 expGetterBattlerId;
u8 field_90;
u8 field_91;
- u8 field_92;
- u8 field_93;
- u8 wallyBattleState;
- u8 wallyMovesState;
- u8 wallyWaitFrames;
- u8 wallyMoveFrames;
+ u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
+ u8 field_96;
+ u8 field_97;
u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // ask gamefreak why they declared it that way
u16 hpOnSwitchout[2];
u8 abilityPreventingSwitchout;
@@ -569,7 +562,6 @@ struct BattleStruct
u8 field_B5;
u8 field_B6;
u8 atkCancellerTracker;
- // void (*savedCallback)(void);
u16 usedHeldItems[MAX_BATTLERS_COUNT];
u8 chosenItem[4]; // why is this an u8?
u8 AI_itemType[2];
@@ -859,8 +851,7 @@ struct BattleHealthboxInfo
u8 specialAnimActive : 1; //x40
u8 flag_x80 : 1;
u8 field_1_x1 : 1;
- u8 field_1_x1E : 4;
- u8 field_1_x20 : 1;
+ u8 field_1_x1E : 5;
u8 field_1_x40 : 1;
u8 field_1_x80 : 1;
u8 healthboxBounceSpriteId;
@@ -879,7 +870,7 @@ struct BattleBarInfo
{
u8 healthboxSpriteId;
s32 maxValue;
- s32 currentValue;
+ s32 oldValue;
s32 receivedValue;
s32 currValue;
};
@@ -930,11 +921,11 @@ extern u16 gBattle_WIN0H;
extern u16 gBattle_WIN0V;
extern u16 gBattle_WIN1H;
extern u16 gBattle_WIN1V;
-extern struct BattleSpritesGfx* gMonSpritesGfx;
+extern struct BattleSpritesGfx *gMonSpritesGfx;
extern u8 gBattleOutcome;
extern u16 gLastUsedItem;
extern u32 gBattleTypeFlags;
-extern struct MonSpritesGfx* gMonSpritesGfxPtr;
+extern struct MonSpritesGfx *gMonSpritesGfxPtr;
extern u16 gTrainerBattleOpponent_A;
extern u16 gMoveToLearn;
extern u16 gBattleMovePower;
@@ -991,5 +982,7 @@ extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
extern u8 gCurrentActionFuncId;
extern u8 gCurrMovePos;
extern u8 gChosenMovePos;
+extern u8 gUnknown_3004FFC[MAX_BATTLERS_COUNT];
+extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
#endif // GUARD_BATTLE_H
diff --git a/include/battle_2.h b/include/battle_2.h
index cf20bcd25..e3caeee3d 100644
--- a/include/battle_2.h
+++ b/include/battle_2.h
@@ -10,7 +10,6 @@ void CB2_QuitRecordedBattle(void);
void sub_8038528(struct Sprite* sprite);
void sub_8038A04(void); // unused
void VBlankCB_Battle(void);
-void nullsub_17(void);
void sub_8038B74(struct Sprite *sprite);
void sub_8038D64(void);
u32 sub_80391E0(u8 arrayId, u8 caseId);
@@ -48,6 +47,7 @@ void sub_800FD9C(void);
void sub_80120C4(struct Sprite *);
void sub_8012100(struct Sprite *);
void nullsub_12(void);
+void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
diff --git a/include/battle_ai_script_commands.h b/include/battle_ai_script_commands.h
index 12df776be..aa51838e5 100644
--- a/include/battle_ai_script_commands.h
+++ b/include/battle_ai_script_commands.h
@@ -3,13 +3,19 @@
#include "global.h"
+// return values for BattleAI_ChooseMoveOrAction
+// 0 - 3 are move idx
+#define AI_CHOICE_FLEE 4
+#define AI_CHOICE_WATCH 5
+
void BattleAI_HandleItemUseBeforeAISetup(void);
-void BattleAI_SetupAIData(u8 defaultScoreMoves);
+void BattleAI_SetupAIData(void);
u8 BattleAI_ChooseMoveOrAction(void);
void ClearBankMoveHistory(u8 bank);
void RecordAbilityBattle(u8 bank, u8 abilityId);
void ClearBankAbilityHistory(u8 bank);
void RecordItemEffectBattle(u8 bank, u8 itemEffect);
void ClearBankItemEffectHistory(u8 bank);
+u8 BattleAI_GetAIActionToUse(void);
#endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 8e4f2a7ea..ef179cdd1 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -96,6 +96,9 @@ void sub_80A6B90(struct BattleAnimBgData *, u32 arg1);
u8 sub_80A82E4(u8 bank);
bool8 AnimateBallThrow(struct Sprite *sprite);
+// battle_anim_special
+void sub_80F1720(u8 battler, struct Pokemon *mon);
+
enum
{
BATTLER_COORD_X,
@@ -125,7 +128,7 @@ bool8 IsDoubleBattle(void);
u8 sub_80A6D94(void);
u8 sub_80A8364(u8);
void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
-void oamt_add_pos2_onto_pos1(struct Sprite *sprite);
+void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite);
u8 GetBattlerSpriteDefault_Y(u8 bank);
u8 sub_80A82E4(u8 bank);
u8 GetSubstituteSpriteDefault_Y(u8 bank);
@@ -150,6 +153,7 @@ bool8 IsContest(void);
void sub_80759DC(u8 spriteId);
bool8 IsBattlerSpritePresent(u8 battlerId);
u8 GetBattlerSpriteSubpriority(u8 battlerId);
+void StartAnimLinearTranslation(struct Sprite *sprite);
// battle_anim_mon_movement.c
void AnimTask_ShakeMon(u8 taskId);
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 758a6e52f..e49911cf1 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -174,6 +174,7 @@ enum
CONTROLLER_CMDS_COUNT
};
+extern struct UnusedControllerStruct gUnknown_2022870;
// general functions
void HandleLinkBattleSetup(void);
@@ -243,6 +244,7 @@ void SetControllerToRecordedPlayer(void);
// opponent controller
void SetControllerToOpponent(void);
+void OpponentBufferExecCompleted(void);
// player partner controller
void SetControllerToPlayerPartner(void);
@@ -255,6 +257,11 @@ void SetControllerToPokedude(void);
// oak controller
void SetControllerToOakOrOldman(void);
+bool8 sub_80EB2E0(u8);
+void sub_80EB2F4(u8);
+void sub_80E8570(void);
+void sub_80E85C0(void);
+void sub_80E8598(void);
// link opponent
void SetControllerToLinkOpponent(void);
diff --git a/include/battle_interface.h b/include/battle_interface.h
index bdcb4d80e..162faa8cb 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -61,6 +61,7 @@ enum
HEALTHBOX_SAFARI_BALLS_TEXT
};
+void Task_HidePartyStatusSummary(u8 taskId);
u8 CreateBattlerHealthboxSprites(u8 bank);
u8 CreateSafariPlayerHealthboxSprites(void);
void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue);
@@ -80,5 +81,6 @@ u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp);
void sub_80496C0(u8 spriteId, struct Pokemon *mon);
void sub_804981C(u8 spriteId, u8);
+s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
#endif // GUARD_BATTLE_INTERFACE_H
diff --git a/include/battle_tower.h b/include/battle_tower.h
index ec00d1f96..78e3f8e43 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -6,5 +6,7 @@
u16 sub_8164FCC(u8, u8);
void sub_80E7524(u32 *);
void ValidateEReaderTrainer(void);
+u8 GetBattleTowerTrainerFrontSpriteId(void);
+u8 GetEreaderTrainerFrontSpriteId(void);
#endif //GUARD_BATTLE_TOWER_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 6c20b967d..d3a7522c9 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -50,7 +50,7 @@
#define MON_DATA_SPATK_IV 43
#define MON_DATA_SPDEF_IV 44
#define MON_DATA_IS_EGG 45
-#define MON_DATA_ALT_ABILITY 46
+#define MON_DATA_ABILITY_NUM 46
#define MON_DATA_TOUGH 47
#define MON_DATA_SHEEN 48
#define MON_DATA_OT_GENDER 49
@@ -244,7 +244,7 @@ struct PokemonSubstruct3
/* 0x05 */ u32 spAttackIV:5;
/* 0x06 */ u32 spDefenseIV:5;
/* 0x07 */ u32 isEgg:1;
- /* 0x07 */ u32 altAbility:1;
+ /* 0x07 */ u32 abilityNum:1;
/* 0x08 */ u32 coolRibbon:3;
/* 0x08 */ u32 beautyRibbon:3;
@@ -342,7 +342,7 @@ struct BattleTowerPokemon
u32 spAttackIV:5;
u32 spDefenseIV:5;
u32 gap:1;
- u32 altAbility:1;
+ u32 abilityNum:1;
/*0x1C*/ u32 personality;
/*0x20*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
/*0x2B*/ u8 friendship;
@@ -366,7 +366,7 @@ struct BattlePokemon
/*0x16*/ u32 spAttackIV:5;
/*0x17*/ u32 spDefenseIV:5;
/*0x17*/ u32 isEgg:1;
- /*0x17*/ u32 altAbility:1;
+ /*0x17*/ u32 abilityNum:1;
/*0x18*/ s8 statStages[BATTLE_STATS_NO];
/*0x20*/ u8 ability;
/*0x21*/ u8 type1;
@@ -598,7 +598,7 @@ u8 GiveMonToPlayer(struct Pokemon *mon);
u8 CalculatePlayerPartyCount(void);
u8 CalculateEnemyPartyCount(void);
u8 GetMonsStateToDoubles(void);
-u8 GetAbilityBySpecies(u16 species, bool8 altAbility);
+u8 GetAbilityBySpecies(u16 species, bool8 abilityNum);
u8 GetMonAbility(struct Pokemon *mon);
u8 GetSecretBaseTrainerPicIndex(void);
u8 GetSecretBaseTrainerNameIndex(void);
diff --git a/include/trainer_tower.h b/include/trainer_tower.h
index 5e7a90208..9cca2ea76 100644
--- a/include/trainer_tower.h
+++ b/include/trainer_tower.h
@@ -4,5 +4,6 @@
void PrintTrainerTowerRecords(void);
void InitTrainerTowerBattleStruct(void);
void FreeTrainerTowerBattleStruct(void);
+u8 GetTrainerTowerTrainerFrontSpriteId(void);
#endif //GUARD_TRAINER_TOWER_H
diff --git a/ld_script.txt b/ld_script.txt
index 9254128fa..35b80253b 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -72,7 +72,7 @@ SECTIONS {
src/battle_util2.o(.text);
asm/battle_controller_player.o(.text);
src/battle_gfx_sfx_util.o(.text);
- asm/battle_controller_opponent.o(.text);
+ src/battle_controller_opponent.o(.text);
asm/battle_ai_switch_items.o(.text);
asm/battle_controller_link_opponent.o(.text);
src/pokemon.o(.text);
@@ -382,6 +382,8 @@ SECTIONS {
data/data.o(.rodata);
src/battle_util.o(.rodata);
data/data.o(.rodata.825011C);
+ src/battle_controller_opponent.o(.rodata);
+ data/data.o(.rodata.8250B20);
src/pokemon.o(.rodata);
src/trig.o(.rodata);
src/util.o(.rodata);
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
new file mode 100644
index 000000000..25c6ffcb9
--- /dev/null
+++ b/src/battle_controller_opponent.c
@@ -0,0 +1,1788 @@
+#include "global.h"
+#include "bg.h"
+#include "data2.h"
+#include "item.h"
+#include "link.h"
+#include "main.h"
+#include "m4a.h"
+#include "task.h"
+#include "text.h"
+#include "util.h"
+#include "window.h"
+#include "palette.h"
+#include "pokeball.h"
+#include "pokemon.h"
+#include "random.h"
+#include "sound.h"
+#include "string_util.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "battle_interface.h"
+#include "battle_setup.h"
+#include "battle_tower.h"
+#include "battle_gfx_sfx_util.h"
+#include "battle_ai_script_commands.h"
+#include "battle_ai_switch_items.h"
+#include "trainer_tower.h"
+#include "reshow_battle_screen.h"
+#include "constants/battle_anim.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/songs.h"
+
+static void OpponentHandleGetMonData(void);
+static void OpponentHandleGetRawMonData(void);
+static void OpponentHandleSetMonData(void);
+static void OpponentHandleSetRawMonData(void);
+static void OpponentHandleLoadMonSprite(void);
+static void OpponentHandleSwitchInAnim(void);
+static void OpponentHandleReturnMonToBall(void);
+static void OpponentHandleDrawTrainerPic(void);
+static void OpponentHandleTrainerSlide(void);
+static void OpponentHandleTrainerSlideBack(void);
+static void OpponentHandleFaintAnimation(void);
+static void OpponentHandlePaletteFade(void);
+static void OpponentHandleSuccessBallThrowAnim(void);
+static void OpponentHandleBallThrow(void);
+static void OpponentHandlePause(void);
+static void OpponentHandleMoveAnimation(void);
+static void OpponentHandlePrintString(void);
+static void OpponentHandlePrintSelectionString(void);
+static void OpponentHandleChooseAction(void);
+static void OpponentHandleUnknownYesNoBox(void);
+static void OpponentHandleChooseMove(void);
+static void OpponentHandleChooseItem(void);
+static void OpponentHandleChoosePokemon(void);
+static void OpponentHandleCmd23(void);
+static void OpponentHandleHealthBarUpdate(void);
+static void OpponentHandleExpUpdate(void);
+static void OpponentHandleStatusIconUpdate(void);
+static void OpponentHandleStatusAnimation(void);
+static void OpponentHandleStatusXor(void);
+static void OpponentHandleDataTransfer(void);
+static void OpponentHandleDMA3Transfer(void);
+static void OpponentHandlePlayBGM(void);
+static void OpponentHandleCmd32(void);
+static void OpponentHandleTwoReturnValues(void);
+static void OpponentHandleChosenMonReturnValue(void);
+static void OpponentHandleOneReturnValue(void);
+static void OpponentHandleOneReturnValue_Duplicate(void);
+static void OpponentHandleCmd37(void);
+static void OpponentHandleCmd38(void);
+static void OpponentHandleCmd39(void);
+static void OpponentHandleCmd40(void);
+static void OpponentHandleHitAnimation(void);
+static void OpponentHandleCmd42(void);
+static void OpponentHandlePlaySE(void);
+static void OpponentHandlePlayFanfare(void);
+static void OpponentHandleFaintingCry(void);
+static void OpponentHandleIntroSlide(void);
+static void OpponentHandleIntroTrainerBallThrow(void);
+static void OpponentHandleDrawPartyStatusSummary(void);
+static void OpponentHandleHidePartyStatusSummary(void);
+static void OpponentHandleEndBounceEffect(void);
+static void OpponentHandleSpriteInvisibility(void);
+static void OpponentHandleBattleAnimation(void);
+static void OpponentHandleLinkStandbyMsg(void);
+static void OpponentHandleResetActionMoveSelection(void);
+static void OpponentHandleCmd55(void);
+static void OpponentCmdEnd(void);
+
+static void OpponentBufferRunCommand(void);
+static u32 GetOpponentMonData(u8 monId, u8 *dst);
+static void SetOpponentMonData(u8 monId);
+static void DoSwitchOutAnimation(void);
+static void OpponentDoMoveAnimation(void);
+static void sub_80362E8(void);
+static void sub_8037A28(u8 battlerId, bool8 dontClearSubstituteBit);
+static void sub_8038DC4(u8 taskId);
+static void sub_8038D90(struct Sprite *sprite);
+static void sub_8038FBC(void);
+
+static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
+{
+ OpponentHandleGetMonData,
+ OpponentHandleGetRawMonData,
+ OpponentHandleSetMonData,
+ OpponentHandleSetRawMonData,
+ OpponentHandleLoadMonSprite,
+ OpponentHandleSwitchInAnim,
+ OpponentHandleReturnMonToBall,
+ OpponentHandleDrawTrainerPic,
+ OpponentHandleTrainerSlide,
+ OpponentHandleTrainerSlideBack,
+ OpponentHandleFaintAnimation,
+ OpponentHandlePaletteFade,
+ OpponentHandleSuccessBallThrowAnim,
+ OpponentHandleBallThrow,
+ OpponentHandlePause,
+ OpponentHandleMoveAnimation,
+ OpponentHandlePrintString,
+ OpponentHandlePrintSelectionString,
+ OpponentHandleChooseAction,
+ OpponentHandleUnknownYesNoBox,
+ OpponentHandleChooseMove,
+ OpponentHandleChooseItem,
+ OpponentHandleChoosePokemon,
+ OpponentHandleCmd23,
+ OpponentHandleHealthBarUpdate,
+ OpponentHandleExpUpdate,
+ OpponentHandleStatusIconUpdate,
+ OpponentHandleStatusAnimation,
+ OpponentHandleStatusXor,
+ OpponentHandleDataTransfer,
+ OpponentHandleDMA3Transfer,
+ OpponentHandlePlayBGM,
+ OpponentHandleCmd32,
+ OpponentHandleTwoReturnValues,
+ OpponentHandleChosenMonReturnValue,
+ OpponentHandleOneReturnValue,
+ OpponentHandleOneReturnValue_Duplicate,
+ OpponentHandleCmd37,
+ OpponentHandleCmd38,
+ OpponentHandleCmd39,
+ OpponentHandleCmd40,
+ OpponentHandleHitAnimation,
+ OpponentHandleCmd42,
+ OpponentHandlePlaySE,
+ OpponentHandlePlayFanfare,
+ OpponentHandleFaintingCry,
+ OpponentHandleIntroSlide,
+ OpponentHandleIntroTrainerBallThrow,
+ OpponentHandleDrawPartyStatusSummary,
+ OpponentHandleHidePartyStatusSummary,
+ OpponentHandleEndBounceEffect,
+ OpponentHandleSpriteInvisibility,
+ OpponentHandleBattleAnimation,
+ OpponentHandleLinkStandbyMsg,
+ OpponentHandleResetActionMoveSelection,
+ OpponentHandleCmd55,
+ OpponentCmdEnd
+};
+
+// not used
+static const u8 gUnknown_8250B18[] = { 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20 };
+
+static void nullsub_17(void)
+{
+}
+
+void SetControllerToOpponent(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = OpponentBufferRunCommand;
+}
+
+static void OpponentBufferRunCommand(void)
+{
+ if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
+ {
+ if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sOpponentBufferCommands))
+ sOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ else
+ OpponentBufferExecCompleted();
+ }
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ OpponentBufferExecCompleted();
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy2(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ OpponentBufferExecCompleted();
+}
+
+static void sub_8035B58(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ {
+ FreeTrainerFrontPicPaletteAndTile(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = gSprites[gBattlerSpriteIds[gActiveBattler]].data[5];
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+static void sub_8035BE8(void)
+{
+ if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
+ OpponentBufferExecCompleted();
+ }
+}
+
+static void sub_8035C30(void)
+{
+ bool8 var = FALSE;
+
+ if (!IsDoubleBattle() || ((IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))))
+ {
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ var = TRUE;
+ }
+ else if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == gSprites[gHealthboxSpriteIds[gActiveBattler]].callback)
+ {
+ var = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ var = FALSE;
+ if (var && 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);
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ m4aMPlayContinue(&gMPlayInfo_BGM);
+ else
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3;
+ gBattlerControllerFuncs[gActiveBattler] = sub_8035BE8;
+ }
+}
+
+static void sub_8035DF0(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ sub_80F1720(gActiveBattler ^ BIT_FLANK, &gEnemyParty[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],
+ &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler ^ BIT_FLANK);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
+ SetBattlerShadowSpriteCallback(gActiveBattler ^ BIT_FLANK, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], MON_DATA_SPECIES));
+ }
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
+ &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 0;
+ gBattlerControllerFuncs[gActiveBattler] = sub_8035C30;
+ }
+}
+
+static void sub_8035FE8(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);
+ OpponentBufferExecCompleted();
+ }
+ }
+}
+
+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
+ {
+ if (!sub_80EB2E0(1) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE))
+ {
+ sub_80EB2F4(1);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80E8570;
+ }
+ else
+ {
+ OpponentBufferExecCompleted();
+ }
+ }
+}
+
+static void sub_803612C(void)
+{
+ if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse)
+ {
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+static void sub_8036170(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ HideBattlerShadowSprite(gActiveBattler);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ OpponentBufferExecCompleted();
+}
+
+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;
+ OpponentBufferExecCompleted();
+ }
+ else
+ {
+ if ((gSprites[spriteId].data[1] % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ ++gSprites[spriteId].data[1];
+ }
+}
+
+static void sub_8036278(void)
+{
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ {
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80362E8;
+ }
+}
+
+static void sub_80362E8(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive && !IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
+ OpponentBufferExecCompleted();
+ }
+}
+
+static void sub_8036334(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = sub_8036278;
+ }
+}
+
+static void sub_8036408(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ {
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
+ gBattlerControllerFuncs[gActiveBattler] = sub_8036334;
+ }
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive)
+ OpponentBufferExecCompleted();
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive)
+ OpponentBufferExecCompleted();
+}
+
+void OpponentBufferExecCompleted(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = OpponentBufferRunCommand;
+ gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
+}
+
+static void OpponentHandleGetMonData(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])
+ {
+ size += GetOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ size += GetOpponentMonData(i, monData + size);
+ monToCheck >>= 1;
+ }
+ }
+ BtlController_EmitDataTransfer(1, size, monData);
+ OpponentBufferExecCompleted();
+}
+
+static u32 GetOpponentMonData(u8 monId, u8 *dst)
+{
+ struct BattlePokemon battleMon;
+ struct MovePpInfo moveData;
+ u8 nickname[20];
+ u8 *src;
+ s16 data16;
+ u32 data32;
+ s32 size = 0;
+
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES);
+ battleMon.item = GetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM);
+ for (size = 0; size < MAX_MON_MOVES; ++size)
+ {
+ battleMon.moves[size] = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + size);
+ battleMon.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
+ }
+ battleMon.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES);
+ battleMon.friendship = GetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP);
+ battleMon.experience = GetMonData(&gEnemyParty[monId], MON_DATA_EXP);
+ battleMon.hpIV = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV);
+ battleMon.attackIV = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV);
+ battleMon.defenseIV = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV);
+ battleMon.speedIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV);
+ battleMon.spAttackIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV);
+ battleMon.spDefenseIV = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV);
+ battleMon.personality = GetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY);
+ battleMon.status1 = GetMonData(&gEnemyParty[monId], MON_DATA_STATUS);
+ battleMon.level = GetMonData(&gEnemyParty[monId], MON_DATA_LEVEL);
+ battleMon.hp = GetMonData(&gEnemyParty[monId], MON_DATA_HP);
+ battleMon.maxHP = GetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP);
+ battleMon.attack = GetMonData(&gEnemyParty[monId], MON_DATA_ATK);
+ battleMon.defense = GetMonData(&gEnemyParty[monId], MON_DATA_DEF);
+ battleMon.speed = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED);
+ battleMon.spAttack = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK);
+ battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF);
+ battleMon.isEgg = GetMonData(&gEnemyParty[monId], MON_DATA_IS_EGG);
+ battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM);
+ battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID);
+ GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battleMon.nickname, nickname);
+ GetMonData(&gEnemyParty[monId], 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(&gEnemyParty[monId], MON_DATA_SPECIES);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ data16 = GetMonData(&gEnemyParty[monId], 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(&gEnemyParty[monId], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gEnemyParty[monId], 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(&gEnemyParty[monId], 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(&gEnemyParty[monId], MON_DATA_PP1 + size);
+ dst[size] = GetMonData(&gEnemyParty[monId], 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(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ size = 1;
+ break;
+ case REQUEST_OTID_BATTLE:
+ data32 = GetMonData(&gEnemyParty[monId], 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(&gEnemyParty[monId], 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(&gEnemyParty[monId], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV);
+ dst[1] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV);
+ dst[2] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV);
+ dst[3] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV);
+ dst[4] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV);
+ dst[5] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ data32 = GetMonData(&gEnemyParty[monId], 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(&gEnemyParty[monId], MON_DATA_CHECKSUM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_STATUS_BATTLE:
+ data32 = GetMonData(&gEnemyParty[monId], 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(&gEnemyParty[monId], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_HP_BATTLE:
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_ATK_BATTLE:
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_ATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_DEF_BATTLE:
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_DEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPEED_BATTLE:
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPEED);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPATK_BATTLE:
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_COOL_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_COOL);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case REQUEST_CUTE_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case REQUEST_SMART_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SMART);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+ return size;
+}
+
+static void OpponentHandleGetRawMonData(void)
+{
+ struct BattlePokemon battleMon;
+ u8 *src = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBattler][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
+ dst[i] = src[i];
+ BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst);
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleSetMonData(void)
+{
+ u8 monToCheck;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBattler][2] == 0)
+ {
+ SetOpponentMonData(gBattlerPartyIndexes[gActiveBattler]);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ SetOpponentMonData(i);
+ monToCheck >>= 1;
+ }
+ }
+ OpponentBufferExecCompleted();
+}
+
+static void SetOpponentMonData(u8 monId)
+{
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ s32 i;
+
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case REQUEST_ALL_BATTLE:
+ {
+ u8 iv;
+
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
+ }
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses);
+ SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship);
+ SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &iv);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality);
+ SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &battlePokemon->status1);
+ SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &battlePokemon->level);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP, &battlePokemon->hp);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &battlePokemon->attack);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &battlePokemon->defense);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &battlePokemon->speed);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense);
+ }
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
+ }
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &moveData->ppBonuses);
+ break;
+ case REQUEST_MOVE1_BATTLE:
+ case REQUEST_MOVE2_BATTLE:
+ case REQUEST_MOVE3_BATTLE:
+ case REQUEST_MOVE4_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(&gEnemyParty[monId], 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(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_OTID_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_EXP_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_STATUS_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ }
+}
+
+static void OpponentHandleSetRawMonData(void)
+{
+ u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
+ dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleLoadMonSprite(void)
+{
+ u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
+ u32 y;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_GHOST)
+ {
+ DecompressGhostFrontPic(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ y = GetGhostSpriteDefault_Y(gActiveBattler);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 1;
+ }
+ else
+ {
+ 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]);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_GHOST))
+ SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
+ gBattlerControllerFuncs[gActiveBattler] = sub_8035FE8;
+}
+
+static void OpponentHandleSwitchInAnim(void)
+{
+ *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6;
+ gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ sub_8037A28(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerControllerFuncs[gActiveBattler] = sub_8036408;
+}
+
+static void sub_8037A28(u8 battlerId, bool8 dontClearSubstituteBit)
+{
+ u16 species;
+
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C);
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ GetBattlerSpriteSubpriority(battlerId));
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ 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_OPPONENT_SENDOUT);
+}
+
+static void OpponentHandleReturnMonToBall(void)
+{
+ if (!gBattleBufferA[gActiveBattler][1])
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ HideBattlerShadowSprite(gActiveBattler);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+static void DoSwitchOutAnimation(void)
+{
+ 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)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_OPPONENT_MON);
+ gBattlerControllerFuncs[gActiveBattler] = sub_8036170;
+ }
+ break;
+ }
+}
+
+static void OpponentHandleDrawTrainerPic(void)
+{
+ u32 trainerPicId;
+
+ if (gTrainerBattleOpponent_A == 0x400)
+ trainerPicId = GetSecretBaseTrainerPicIndex();
+ else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
+ trainerPicId = GetBattleTowerTrainerFrontSpriteId();
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
+ trainerPicId = GetTrainerTowerTrainerFrontSpriteId();
+ else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
+ trainerPicId = GetEreaderTrainerFrontSpriteId();
+ else
+ trainerPicId = gTrainers[gTrainerBattleOpponent_A].trainerPic;
+ DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ 176,
+ (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40,
+ GetBattlerSpriteSubpriority(gActiveBattler));
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
+}
+
+static void OpponentHandleTrainerSlide(void)
+{
+ u32 trainerPicId;
+
+ if (gTrainerBattleOpponent_A == 0x400)
+ trainerPicId = GetSecretBaseTrainerPicIndex();
+ else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
+ trainerPicId = GetBattleTowerTrainerFrontSpriteId();
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
+ trainerPicId = GetTrainerTowerTrainerFrontSpriteId();
+ else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
+ trainerPicId = GetEreaderTrainerFrontSpriteId();
+ else
+ trainerPicId = gTrainers[gTrainerBattleOpponent_A].trainerPic;
+ DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ 176,
+ (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40,
+ 30);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 96;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.x += 32;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2;
+}
+
+static void OpponentHandleTrainerSlideBack(void)
+{
+ SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
+ gBattlerControllerFuncs[gActiveBattler] = sub_8035B58;
+}
+
+static void OpponentHandleFaintAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
+ {
+ 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;
+ PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_TARGET);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
+ gBattlerControllerFuncs[gActiveBattler] = sub_803612C;
+ }
+ }
+}
+
+static void OpponentHandlePaletteFade(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleSuccessBallThrowAnim(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleBallThrow(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandlePause(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleMoveAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ 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
+ {
+ OpponentBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = OpponentDoMoveAnimation;
+ }
+ }
+}
+
+static void OpponentDoMoveAnimation(void)
+{
+ u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u8 multihit = gBattleBufferA[gActiveBattler][11];
+
+ switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute
+ && !gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8)
+ {
+ gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 1;
+ 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 && multihit < 2)
+ {
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattleSpritesDataPtr->battlerData[gActiveBattler].flag_x8 = 0;
+ }
+ 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;
+ OpponentBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+static void OpponentHandlePrintString(void)
+{
+ u16 *stringId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
+ BufferStringBattle(*stringId);
+ if (sub_80D89B0(*stringId))
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0x40);
+ else
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
+ {
+ switch (*stringId)
+ {
+ case 0x17F:
+ gBattlerControllerFuncs[gActiveBattler] = sub_80E85C0;
+ return;
+ case 0xE3:
+ gBattlerControllerFuncs[gActiveBattler] = sub_80E8598;
+ return;
+ }
+ }
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
+}
+
+static void OpponentHandlePrintSelectionString(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleChooseAction(void)
+{
+ AI_TrySwitchOrUseItem();
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleUnknownYesNoBox(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleChooseMove(void)
+{
+ u8 chosenMoveId;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+
+ if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER))
+ {
+
+ BattleAI_SetupAIData();
+ chosenMoveId = BattleAI_GetAIActionToUse();
+
+ switch (chosenMoveId)
+ {
+ case AI_CHOICE_WATCH:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_WATCH_CAREFULLY, 0);
+ break;
+ case AI_CHOICE_FLEE:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_RUN, 0);
+ break;
+ default:
+ if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
+ gBattlerTarget = gActiveBattler;
+ if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH)
+ {
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ }
+ BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (gBattlerTarget << 8));
+ break;
+ }
+ OpponentBufferExecCompleted();
+ }
+ else
+ {
+ u16 move;
+
+ do
+ {
+ chosenMoveId = Random() & 3;
+ move = moveInfo->moves[chosenMoveId];
+ }
+ while (move == MOVE_NONE);
+ if (gBattleMoves[move].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
+ BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (gActiveBattler << 8));
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (GetBattlerAtPosition(Random() & 2) << 8));
+ else
+ BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8));
+
+ OpponentBufferExecCompleted();
+ }
+}
+
+static void OpponentHandleChooseItem(void)
+{
+ BtlController_EmitOneReturnValue(1, *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2));
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleChoosePokemon(void)
+{
+ s32 chosenMonId;
+
+ if (*(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) == PARTY_SIZE)
+ {
+ chosenMonId = GetMostSuitableMonToSwitchInto();
+
+ if (chosenMonId == PARTY_SIZE)
+ {
+ s32 battler1, battler2;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ battler2 = battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ }
+ else
+ {
+ battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ battler2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ }
+ for (chosenMonId = 0; chosenMonId < 6; ++chosenMonId)
+ if (GetMonData(&gEnemyParty[chosenMonId], MON_DATA_HP) != 0
+ && chosenMonId != gBattlerPartyIndexes[battler1]
+ && chosenMonId != gBattlerPartyIndexes[battler2])
+ break;
+ }
+ }
+ else
+ {
+ chosenMonId = *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1));
+ *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) = PARTY_SIZE;
+ }
+ *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId;
+ BtlController_EmitChosenMonReturnValue(1, chosenMonId, NULL);
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleCmd23(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleHealthBarUpdate(void)
+{
+ s16 hpVal;
+
+ LoadBattleBarGfx(0);
+ hpVal = (gBattleBufferA[gActiveBattler][3] << 8) | gBattleBufferA[gActiveBattler][2];
+
+ if (hpVal != INSTANT_HP_BAR_DROP)
+ {
+ u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
+ }
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
+}
+
+static void OpponentHandleExpUpdate(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ u8 battlerId;
+
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void OpponentHandleStatusAnimation(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 OpponentHandleStatusXor(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleDataTransfer(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleDMA3Transfer(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandlePlayBGM(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleCmd32(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleTwoReturnValues(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleChosenMonReturnValue(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleOneReturnValue(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleOneReturnValue_Duplicate(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleCmd37(void)
+{
+ gUnknown_2022870.field_0 = 0;
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleCmd38(void)
+{
+ gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1];
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleCmd39(void)
+{
+ gUnknown_2022870.flag_x80 = 0;
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleCmd40(void)
+{
+ gUnknown_2022870.flag_x80 ^= 1;
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleHitAnimation(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
+ {
+ OpponentBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = TRUE;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ DoHitAnimHealthboxEffect(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect;
+ }
+}
+
+static void OpponentHandleCmd42(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandlePlaySE(void)
+{
+ s8 pan;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ pan = SOUND_PAN_ATTACKER;
+ else
+ pan = SOUND_PAN_TARGET;
+ PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandlePlayFanfare(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
+
+ PlayCry3(species, 25, 5);
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ gIntroSlideFlags |= 1;
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleIntroTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+
+ SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_8038D90);
+ taskId = CreateTask(sub_8038DC4, 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_17;
+}
+
+static void sub_8038D90(struct Sprite *sprite)
+{
+ FreeTrainerFrontPicPaletteAndTile(sprite->oam.affineParam);
+ sprite->oam.tileNum = sprite->data[5];
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+}
+
+static void sub_8038DC4(u8 taskId)
+{
+ u8 savedActiveBattler = gActiveBattler;
+
+ gActiveBattler = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_8037A28(gActiveBattler, FALSE);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_8037A28(gActiveBattler, FALSE);
+ gActiveBattler ^= BIT_FLANK;
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_8037A28(gActiveBattler, FALSE);
+ gActiveBattler ^= BIT_FLANK;
+ }
+ gBattlerControllerFuncs[gActiveBattler] = sub_8035DF0;
+ gActiveBattler = savedActiveBattler;
+ DestroyTask(taskId);
+}
+
+static void OpponentHandleDrawPartyStatusSummary(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ OpponentBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
+ if (gBattleBufferA[gActiveBattler][2])
+ {
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E <= 1)
+ {
+ ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E;
+ return;
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E = 0;
+ }
+ }
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler,
+ (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4],
+ gBattleBufferA[gActiveBattler][1],
+ gBattleBufferA[gActiveBattler][2]);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
+ if (gBattleBufferA[gActiveBattler][2])
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0x5D;
+ gBattlerControllerFuncs[gActiveBattler] = sub_8038FBC;
+ }
+}
+
+static void sub_8038FBC(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
+ OpponentBufferExecCompleted();
+ }
+}
+
+static void OpponentHandleHidePartyStatusSummary(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleEndBounceEffect(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleSpriteInvisibility(void)
+{
+ if (IsBattlerSpritePresent(gActiveBattler))
+ {
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ }
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleBattleAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ u8 animationId = gBattleBufferA[gActiveBattler][1];
+ u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+
+ if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
+ OpponentBufferExecCompleted();
+ else
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
+ }
+}
+
+static void OpponentHandleLinkStandbyMsg(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleResetActionMoveSelection(void)
+{
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentHandleCmd55(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK && !(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER))
+ {
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+ OpponentBufferExecCompleted();
+}
+
+static void OpponentCmdEnd(void)
+{
+}
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
index 1e2fe6ee0..2246f17bb 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle_controller_safari.c
@@ -260,7 +260,7 @@ static void sub_80DD7B0(void)
}
}
-static void CompleteOnSpecialAnimDone_0(void)
+static void CompleteOnSpecialAnimDone(void)
{
if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
SafariBufferExecCompleted();
@@ -281,7 +281,7 @@ static void CompleteWhenChosePokeblock(void)
}
}
-static void CompleteOnFinishedBattleAnimation_3(void)
+static void CompleteOnFinishedBattleAnimation(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive)
SafariBufferExecCompleted();
@@ -304,7 +304,7 @@ static void SafariBufferExecCompleted(void)
}
// not used
-static void CompleteOnFinishedStatusAnimation_3(void)
+static void CompleteOnFinishedStatusAnimation(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive)
SafariBufferExecCompleted();
@@ -385,7 +385,7 @@ static void SafariHandleSuccessBallThrowAnim(void)
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
gDoingBattleAnim = TRUE;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone_0;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
static void SafariHandleBallThrowAnim(void)
@@ -395,7 +395,7 @@ static void SafariHandleBallThrowAnim(void)
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
gDoingBattleAnim = TRUE;
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone_0;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
static void SafariHandlePause(void)
@@ -649,7 +649,7 @@ static void SafariHandleBattleAnimation(void)
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
SafariBufferExecCompleted();
else
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation_3;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
}
static void SafariHandleLinkStandbyMsg(void)
diff --git a/src/pokemon.c b/src/pokemon.c
index ec90f6cd4..5f26881ab 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -1791,7 +1791,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
if (gBaseStats[species].abilities[1])
{
value = personality & 1;
- SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, &value);
+ SetBoxMonData(boxMon, MON_DATA_ABILITY_NUM, &value);
}
GiveBoxMonInitialMoveset(boxMon);
@@ -1940,8 +1940,8 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src)
SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV);
SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV);
SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV);
- value = src->altAbility;
- SetMonData(mon, MON_DATA_ALT_ABILITY, &value);
+ value = src->abilityNum;
+ SetMonData(mon, MON_DATA_ABILITY_NUM, &value);
value = src->hpIV;
SetMonData(mon, MON_DATA_HP_IV, &value);
value = src->attackIV;
@@ -1997,7 +1997,7 @@ void sub_803E23C(struct Pokemon *mon, struct BattleTowerPokemon *dest)
dest->speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL);
dest->spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL);
dest->spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL);
- dest->altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL);
+ dest->abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL);
dest->personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
GetMonData(mon, MON_DATA_NICKNAME, dest->nickname);
}
@@ -3099,8 +3099,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
case MON_DATA_IS_EGG:
retVal = substruct3->isEgg;
break;
- case MON_DATA_ALT_ABILITY:
- retVal = substruct3->altAbility;
+ case MON_DATA_ABILITY_NUM:
+ retVal = substruct3->abilityNum;
break;
case MON_DATA_COOL_RIBBON:
retVal = substruct3->coolRibbon;
@@ -3502,8 +3502,8 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
else
boxMon->isEgg = 0;
break;
- case MON_DATA_ALT_ABILITY:
- SET8(substruct3->altAbility);
+ case MON_DATA_ABILITY_NUM:
+ SET8(substruct3->abilityNum);
break;
case MON_DATA_COOL_RIBBON:
SET8(substruct3->coolRibbon);
@@ -3698,9 +3698,9 @@ u8 GetMonsStateToDoubles(void)
return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON;
}
-u8 GetAbilityBySpecies(u16 species, bool8 altAbility)
+u8 GetAbilityBySpecies(u16 species, bool8 abilityNum)
{
- if (altAbility)
+ if (abilityNum)
gLastUsedAbility = gBaseStats[species].abilities[1];
else
gLastUsedAbility = gBaseStats[species].abilities[0];
@@ -3711,8 +3711,8 @@ u8 GetAbilityBySpecies(u16 species, bool8 altAbility)
u8 GetMonAbility(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
- u8 altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL);
- return GetAbilityBySpecies(species, altAbility);
+ u8 abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL);
+ return GetAbilityBySpecies(species, abilityNum);
}
static void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord)
@@ -3858,11 +3858,11 @@ static void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
gBattleMons[battlerId].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL);
gBattleMons[battlerId].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL);
gBattleMons[battlerId].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL);
- gBattleMons[battlerId].altAbility = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ALT_ABILITY, NULL);
+ gBattleMons[battlerId].abilityNum = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ABILITY_NUM, NULL);
gBattleMons[battlerId].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL);
gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1;
gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2;
- gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].altAbility);
+ gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].abilityNum);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname);
StringCopy10(gBattleMons[battlerId].nickname, nickname);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battlerId].otName);
diff --git a/src/trainer_tower.c b/src/trainer_tower.c
index 0415990c6..a1eedf2ac 100644
--- a/src/trainer_tower.c
+++ b/src/trainer_tower.c
@@ -626,7 +626,7 @@ void sub_815DA28(u8 * dest)
StringCopyN(dest, gUnknown_203F45C->unk_00, 11);
}
-u8 sub_815DA3C(void)
+u8 GetTrainerTowerTrainerFrontSpriteId(void)
{
return gFacilityClassToPicIndex[gUnknown_203F45C->unk_3D];
}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 9ce1e58a3..871551522 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -405,7 +405,7 @@ gActionSelectionCursor: @ 2023FF8
gMoveSelectionCursor: @ 2023FFC
.space 0x4
-gUnknown_2024000: @ 2024000
+gBattlerStatusSummaryTaskId: @ 2024000
.space 0x4
gBattlerInMenuId: @ 2024004
@@ -717,10 +717,10 @@ gAnimMovePower: @ 2037EEC
gUnknown_2037EEE: @ 2037EEE
.space 0x10
-gUnknown_2037EFE: @ 2037EFE
+gAnimFriendship: @ 2037EFE
.space 0x2
-gUnknown_2037F00: @ 2037F00
+gWeatherMoveAnim: @ 2037F00
.space 0x2
gBattleAnimArgs: @ 2037F02