summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2019-09-25 13:56:50 -0400
committerGitHub <noreply@github.com>2019-09-25 13:56:50 -0400
commit1d4234bd7e295c553485b7d676d42c838e4762c4 (patch)
tree67ac4179d9978baf4e989ef55245e4be0d777c04
parent7f6d86a8bf2afe349135d502debc2237bafafff5 (diff)
parent931bf4ce4b4fd7ea63d00f36adfd2bf720831a80 (diff)
Merge branch 'master' into PIE2
-rw-r--r--asm/battle_1.s38
-rw-r--r--asm/battle_2.s1904
-rw-r--r--asm/battle_ai_switch_items.s2654
-rw-r--r--asm/battle_anim.s108
-rw-r--r--asm/battle_anim_effects_1.s280
-rw-r--r--asm/battle_anim_effects_2.s202
-rw-r--r--asm/battle_anim_effects_3.s250
-rw-r--r--asm/battle_anim_mons.s312
-rw-r--r--asm/battle_anim_sound_tasks.s4
-rw-r--r--asm/battle_anim_special.s178
-rw-r--r--asm/battle_anim_status_effects.s24
-rw-r--r--asm/battle_anim_utility_funcs.s94
-rw-r--r--asm/battle_controller_link_opponent.s6260
-rw-r--r--asm/battle_controller_link_partner.s5929
-rw-r--r--asm/battle_controller_oak.s618
-rw-r--r--asm/battle_controller_opponent.s6736
-rw-r--r--asm/battle_controller_player.s11027
-rw-r--r--asm/battle_controller_pokedude.s650
-rw-r--r--asm/battle_controller_safari.s1534
-rw-r--r--asm/battle_controllers.s3392
-rw-r--r--asm/battle_gfx_sfx_util.s3606
-rw-r--r--asm/battle_interface.s152
-rw-r--r--asm/battle_message.s80
-rw-r--r--asm/battle_script_commands.s33196
-rw-r--r--asm/battle_setup.s4
-rw-r--r--asm/battle_tower.s6
-rw-r--r--asm/battle_util.s12796
-rw-r--r--asm/battle_util2.s333
-rw-r--r--asm/berry_crush_2.s36
-rw-r--r--asm/berry_crush_3.s6
-rw-r--r--asm/bug.s46
-rw-r--r--asm/cable_club.s16
-rw-r--r--asm/credits.s2222
-rw-r--r--asm/dark.s40
-rw-r--r--asm/dodrio_berry_picking.s20
-rw-r--r--asm/dragon.s28
-rw-r--r--asm/electric.s76
-rw-r--r--asm/evolution_scene.s164
-rw-r--r--asm/field_effect.s2
-rw-r--r--asm/field_fadetransition.s12
-rw-r--r--asm/field_map_obj.s2
-rw-r--r--asm/field_weather.s12
-rw-r--r--asm/fighting.s76
-rw-r--r--asm/fire.s24
-rw-r--r--asm/fldeff_flash.s2
-rw-r--r--asm/flying.s70
-rw-r--r--asm/ghost.s54
-rw-r--r--asm/ground.s46
-rw-r--r--asm/hall_of_fame.s10
-rw-r--r--asm/ice.s88
-rw-r--r--asm/item_menu.s16
-rw-r--r--asm/learn_move.s2
-rw-r--r--asm/link.s28
-rw-r--r--asm/link_rfu_2.s18
-rw-r--r--asm/link_rfu_3.s58
-rw-r--r--asm/macros/battle_script.inc2
-rw-r--r--asm/normal.s6
-rw-r--r--asm/overworld.s44
-rw-r--r--asm/party_menu.s60
-rw-r--r--asm/poison.s10
-rw-r--r--asm/pokeball.s70
-rw-r--r--asm/pokedex_screen.s2
-rw-r--r--asm/pokemon_jump_2.s8
-rw-r--r--asm/pokemon_special_anim.s22
-rw-r--r--asm/pokemon_storage_system.s2
-rw-r--r--asm/pokemon_summary_screen.s16
-rw-r--r--asm/post_battle_event_funcs.s6
-rw-r--r--asm/psychic.s66
-rw-r--r--asm/reshow_battle_screen.s1190
-rw-r--r--asm/rock.s28
-rw-r--r--asm/script_pokemon_util_80BF8FC.s2
-rw-r--r--asm/trade.s44
-rw-r--r--asm/trainer_card.s4
-rw-r--r--asm/union_room_chat.s22
-rw-r--r--asm/water.s68
-rw-r--r--baserom.ipsbin2055522 -> 2014788 bytes
-rw-r--r--data/battle_ai_scripts.s2
-rw-r--r--data/battle_anim_scripts.s4
-rw-r--r--data/battle_scripts_1.s347
-rw-r--r--data/battle_scripts_2.s8
-rw-r--r--data/credits/unk_840C630.pal19
-rw-r--r--data/credits/unk_840C650.pngbin0 -> 1499 bytes
-rw-r--r--data/credits/unk_840CA54.binbin0 -> 1024 bytes
-rw-r--r--data/credits/unk_840CB8C.binbin0 -> 3200 bytes
-rw-r--r--data/credits/unk_840D228.binbin0 -> 4992 bytes
-rw-r--r--data/credits/unk_840DC0C.binbin0 -> 2048 bytes
-rw-r--r--data/credits/unk_840E158.binbin0 -> 3200 bytes
-rw-r--r--data/credits/unk_840E904.binbin0 -> 3840 bytes
-rw-r--r--data/credits/unk_840F240.binbin0 -> 3200 bytes
-rw-r--r--data/credits/unk_840F944.binbin0 -> 3840 bytes
-rw-r--r--data/credits/unk_8410198.binbin0 -> 3200 bytes
-rw-r--r--data/credits/unk_84105B4.binbin0 -> 4608 bytes
-rw-r--r--data/credits/unk_8410B20.binbin0 -> 2048 bytes
-rw-r--r--data/credits/unk_8410B20.pngbin0 -> 218 bytes
-rw-r--r--data/credits/unk_8410E10.pal19
-rw-r--r--data/credits/unk_8410E30.pngbin0 -> 2105 bytes
-rw-r--r--data/credits/unk_8411BF8.pal19
-rw-r--r--data/credits/unk_8411C18.pngbin0 -> 2083 bytes
-rw-r--r--data/credits/unk_84129A0.pal19
-rw-r--r--data/credits/unk_84129C0.pngbin0 -> 1162 bytes
-rw-r--r--data/credits/unk_8413318.pal19
-rw-r--r--data/credits/unk_8413338.pngbin0 -> 624 bytes
-rw-r--r--data/credits/unk_8413854.pal19
-rw-r--r--data/credits/unk_8413874.pngbin0 -> 632 bytes
-rw-r--r--data/credits/unk_8413D98.pal19
-rw-r--r--data/credits/unk_8413DB8.pngbin0 -> 786 bytes
-rw-r--r--data/data.s137
-rw-r--r--data/data_83F5738.s22
-rw-r--r--data/data_83FECCC.s125
-rw-r--r--data/graphics.s56
-rw-r--r--data/maps/IndigoPlateau_Exterior/scripts.inc2
-rw-r--r--data/maps/PokemonLeague_HallOfFame/scripts.inc2
-rw-r--r--data/smokescreen.s17
-rw-r--r--data/specials.inc4
-rw-r--r--data/strings.s383
-rw-r--r--graphics/battle_interface/unk_battlebox.pal19
-rw-r--r--graphics/battle_interface/unk_battlebox.pngbin0 -> 170 bytes
-rw-r--r--graphics/credits/blastoise.pal19
-rw-r--r--graphics/credits/charizard.pal19
-rw-r--r--graphics/credits/pikachu.pal19
-rw-r--r--graphics/credits/unk_8EAAB98.pngbin0 -> 1217 bytes
-rw-r--r--graphics/credits/unk_8EAB30C.binbin0 -> 1280 bytes
-rw-r--r--graphics/credits/unk_8EAE548.binbin0 -> 2048 bytes
-rw-r--r--graphics/credits/unk_8EAE548.pngbin0 -> 908 bytes
-rw-r--r--graphics/credits/venusaur.pal19
-rw-r--r--graphics_file_rules.mk4
-rw-r--r--include/battle.h466
-rw-r--r--include/battle_ai_script_commands.h10
-rw-r--r--include/battle_anim.h111
-rw-r--r--include/battle_bg.h6
-rw-r--r--include/battle_controllers.h136
-rw-r--r--include/battle_gfx_sfx_util.h63
-rw-r--r--include/battle_interface.h14
-rw-r--r--include/battle_main.h (renamed from include/battle_2.h)71
-rw-r--r--include/battle_message.h18
-rw-r--r--include/battle_script_commands.h35
-rw-r--r--include/battle_scripts.h89
-rw-r--r--include/battle_tower.h2
-rw-r--r--include/battle_util.h98
-rw-r--r--include/battle_util2.h2
-rw-r--r--include/cable_club.h13
-rw-r--r--include/constants/battle.h26
-rw-r--r--include/constants/battle_anim.h443
-rw-r--r--include/constants/battle_script_commands.h127
-rw-r--r--include/constants/pokemon.h6
-rw-r--r--include/constants/trainers.h12
-rw-r--r--include/data.h (renamed from include/data2.h)23
-rw-r--r--include/field_specials.h1
-rw-r--r--include/field_weather.h2
-rw-r--r--include/gba/defines.h5
-rw-r--r--include/graphics.h24
-rw-r--r--include/link.h16
-rw-r--r--include/link_rfu.h1
-rw-r--r--include/overworld.h25
-rw-r--r--include/party_menu.h23
-rw-r--r--include/pokeball.h1
-rw-r--r--include/pokedex.h2
-rw-r--r--include/pokemon.h21
-rw-r--r--include/pokemon_special_anim.h12
-rw-r--r--include/pokemon_summary_screen.h36
-rw-r--r--include/reshow_battle_screen.h2
-rw-r--r--include/strings.h109
-rw-r--r--include/text.h48
-rw-r--r--include/trainer_pokemon_sprites.h2
-rw-r--r--include/trainer_tower.h3
-rw-r--r--include/window.h2
-rw-r--r--ld_script.txt41
-rw-r--r--src/battle_ai_script_commands.c239
-rw-r--r--src/battle_ai_switch_items.c676
-rw-r--r--src/battle_anim_mon_movement.c366
-rw-r--r--src/battle_controller_link_opponent.c1686
-rw-r--r--src/battle_controller_link_partner.c1599
-rw-r--r--src/battle_controller_opponent.c1788
-rw-r--r--src/battle_controller_player.c2969
-rw-r--r--src/battle_controller_safari.c677
-rw-r--r--src/battle_controllers.c1170
-rw-r--r--src/battle_gfx_sfx_util.c1056
-rw-r--r--src/battle_script_commands.c9824
-rw-r--r--src/battle_util.c3200
-rw-r--r--src/battle_util2.c96
-rw-r--r--src/braille_text.c86
-rw-r--r--src/credits.c2167
-rw-r--r--src/data/items.json2
-rw-r--r--src/item_pc.c2
-rw-r--r--src/menu2.c323
-rw-r--r--src/mevent.c8
-rw-r--r--src/mevent_server_helpers.c6
-rw-r--r--src/pokemon.c85
-rw-r--r--src/quest_log.c6
-rw-r--r--src/quest_log_battle.c2
-rw-r--r--src/reshow_battle_screen.c322
-rw-r--r--src/save.c8
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/sound.c4
-rw-r--r--src/teachy_tv.c2
-rw-r--r--src/text.c1184
-rw-r--r--src/text_printer.c62
-rw-r--r--src/tm_case.c2
-rw-r--r--src/trainer_pokemon_sprites.c6
-rw-r--r--src/trainer_tower.c10
-rw-r--r--src/window.c2
-rw-r--r--sym_common.txt14
-rw-r--r--sym_ewram.txt136
203 files changed, 33659 insertions, 96829 deletions
diff --git a/asm/battle_1.s b/asm/battle_1.s
index 310d1a791..0b8ad7365 100644
--- a/asm/battle_1.s
+++ b/asm/battle_1.s
@@ -523,7 +523,7 @@ sub_800F5CC: @ 800F5CC
bne _0800F5E8
ldr r0, _0800F5E4 @ =gUnknown_83FE883
movs r1, 0x15
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _0800F6F0
.align 2, 0
_0800F5E0: .4byte gBattleOutcome
@@ -609,10 +609,10 @@ _0800F666:
_0800F682:
ldr r0, _0800F69C @ =gUnknown_83FE874
movs r1, 0x17
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _0800F6A0 @ =gUnknown_83FE87B
movs r1, 0x16
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _0800F6F0
.align 2, 0
_0800F694: .4byte gLinkPlayers
@@ -635,10 +635,10 @@ _0800F6A4:
_0800F6BC:
ldr r0, _0800F6D8 @ =gUnknown_83FE874
movs r1, 0x16
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _0800F6DC @ =gUnknown_83FE87B
movs r1, 0x17
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _0800F6F0
.align 2, 0
_0800F6D0: .4byte gLinkPlayers
@@ -648,10 +648,10 @@ _0800F6DC: .4byte gUnknown_83FE87B
_0800F6E0:
ldr r0, _0800F6F4 @ =gUnknown_83FE874
movs r1, 0x17
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _0800F6F8 @ =gUnknown_83FE87B
movs r1, 0x16
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
_0800F6F0:
pop {r0}
bx r0
@@ -727,14 +727,14 @@ _0800F764:
_0800F76E:
adds r0, r1, 0
movs r1, 0x11
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldrb r1, [r4, 0x18]
movs r0, 0x4
b _0800F79C
_0800F77C:
adds r0, r1, 0
movs r1, 0x12
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldrb r1, [r4, 0x18]
movs r0, 0x4
str r0, [sp]
@@ -744,7 +744,7 @@ _0800F77C:
_0800F790:
adds r0, r1, 0
movs r1, 0x13
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldrb r1, [r4, 0x18]
movs r0, 0x8
_0800F79C:
@@ -758,7 +758,7 @@ _0800F7A2:
_0800F7AA:
adds r0, r1, 0
movs r1, 0x14
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldrb r1, [r4, 0x18]
movs r0, 0x8
str r0, [sp]
@@ -799,14 +799,14 @@ _0800F7F0:
adds r1, r0, r4
adds r0, r1, 0
movs r1, 0xF
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
lsls r0, r6, 3
subs r0, r6
lsls r0, 2
adds r1, r0, r4
adds r0, r1, 0
movs r1, 0x10
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
movs r4, 0x7
str r4, [sp]
adds r0, r7, 0
@@ -1274,12 +1274,12 @@ _0800FC08:
lsls r0, 24
cmp r0, 0
bne _0800FC20
- ldr r0, _0800FC1C @ =gUnknown_2022B50
+ ldr r0, _0800FC1C @ =gBattleTerrain
ldrb r0, [r0]
bl sub_800F2AC
b _0800FC26
.align 2, 0
-_0800FC1C: .4byte gUnknown_2022B50
+_0800FC1C: .4byte gBattleTerrain
_0800FC20:
movs r0, 0x8
bl sub_800F2AC
@@ -1309,12 +1309,12 @@ _0800FC48:
ands r0, r1
cmp r0, 0
beq _0800FC60
- ldr r0, _0800FC5C @ =gUnknown_2022B50
+ ldr r0, _0800FC5C @ =gBattleTerrain
strb r2, [r0]
movs r0, 0
b _0800FCAA
.align 2, 0
-_0800FC5C: .4byte gUnknown_2022B50
+_0800FC5C: .4byte gBattleTerrain
_0800FC60:
movs r0, 0x8
ands r1, r0
@@ -1351,13 +1351,13 @@ _0800FC90:
lsrs r0, 24
b _0800FCAA
_0800FCA6:
- ldr r0, _0800FCB0 @ =gUnknown_2022B50
+ ldr r0, _0800FCB0 @ =gBattleTerrain
ldrb r0, [r0]
_0800FCAA:
pop {r1}
bx r1
.align 2, 0
-_0800FCB0: .4byte gUnknown_2022B50
+_0800FCB0: .4byte gBattleTerrain
thumb_func_end sub_800FC2C
thumb_func_start sub_800FCB4
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 3fdaeca33..344325ff4 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -9,7 +9,7 @@
sub_800FD9C: @ 800FD9C
push {r4,lr}
bl MoveSaveBlocks_ResetHeap
- bl sub_802E03C
+ bl AllocateBattleResources
bl AllocateBattleSpritesData
bl AllocateMonSpritesGfx
ldr r4, _0800FDCC @ =gBattleTypeFlags
@@ -18,17 +18,17 @@ sub_800FD9C: @ 800FD9C
ands r0, r1
cmp r0, 0
beq _0800FDD8
- bl sub_800D230
+ bl HandleLinkBattleSetup
ldr r0, _0800FDD0 @ =sub_80109C8
bl SetMainCallback2
- ldr r1, _0800FDD4 @ =gUnknown_2023E82
+ ldr r1, _0800FDD4 @ =gBattleCommunication
movs r0, 0
strb r0, [r1]
b _0800FE1C
.align 2, 0
_0800FDCC: .4byte gBattleTypeFlags
_0800FDD0: .4byte sub_80109C8
-_0800FDD4: .4byte gUnknown_2023E82
+_0800FDD4: .4byte gBattleCommunication
_0800FDD8:
bl sub_800FE24
ldr r1, [r4]
@@ -158,7 +158,7 @@ _0800FEA6:
ldr r0, _0800FF60 @ =gBattle_BG3_Y
strh r1, [r0]
bl sub_807FC5C
- ldr r1, _0800FF64 @ =gUnknown_2022B50
+ ldr r1, _0800FF64 @ =gBattleTerrain
strb r0, [r1]
bl sub_800F34C
bl LoadBattleTextboxAndBackground
@@ -169,9 +169,9 @@ _0800FEA6:
ldr r1, _0800FF68 @ =gReservedSpritePaletteCount
movs r0, 0x4
strb r0, [r1]
- ldr r0, _0800FF6C @ =sub_80116F4
+ ldr r0, _0800FF6C @ =VBlankCB_Battle
bl SetVBlankCallback
- bl sub_800D278
+ bl SetUpBattleVars
ldr r0, _0800FF70 @ =gBattleTypeFlags
ldr r0, [r0]
movs r1, 0x40
@@ -197,9 +197,9 @@ _0800FF54: .4byte gBattle_BG2_X
_0800FF58: .4byte gBattle_BG2_Y
_0800FF5C: .4byte gBattle_BG3_X
_0800FF60: .4byte gBattle_BG3_Y
-_0800FF64: .4byte gUnknown_2022B50
+_0800FF64: .4byte gBattleTerrain
_0800FF68: .4byte gReservedSpritePaletteCount
-_0800FF6C: .4byte sub_80116F4
+_0800FF6C: .4byte VBlankCB_Battle
_0800FF70: .4byte gBattleTypeFlags
_0800FF74: .4byte sub_8010BA0
_0800FF78:
@@ -237,7 +237,7 @@ _0800FFAE:
cmp r4, r5
ble _0800FFAE
movs r1, 0
- ldr r0, _0800FFE8 @ =gUnknown_2023E82
+ ldr r0, _0800FFE8 @ =gBattleCommunication
strb r1, [r0]
add sp, 0x4
pop {r4,r5}
@@ -251,7 +251,7 @@ _0800FFD8: .4byte gTrainerBattleOpponent_A
_0800FFDC: .4byte gMain
_0800FFE0: .4byte 0x00000439
_0800FFE4: .4byte gPlayerParty
-_0800FFE8: .4byte gUnknown_2023E82
+_0800FFE8: .4byte gBattleCommunication
thumb_func_end sub_800FE24
thumb_func_start sub_800FFEC
@@ -952,7 +952,7 @@ sub_8010508: @ 8010508
movs r0, 0x1
adds r5, r4, 0
eors r5, r0
- ldr r0, _08010544 @ =gUnknown_2023E82
+ ldr r0, _08010544 @ =gBattleCommunication
ldrb r0, [r0]
cmp r0, 0x10
bls _08010536
@@ -965,7 +965,7 @@ _08010536:
mov pc, r0
.align 2, 0
_08010540: .4byte gBattleStruct
-_08010544: .4byte gUnknown_2023E82
+_08010544: .4byte gBattleCommunication
_08010548: .4byte _0801054C
.align 2, 0
_0801054C:
@@ -1000,7 +1000,7 @@ _08010590:
movs r0, 0x3
bl ShowBg
bl sub_80357C8
- ldr r1, _080105CC @ =gUnknown_2023E82
+ ldr r1, _080105CC @ =gBattleCommunication
movs r0, 0x1
strb r0, [r1]
_080105BC:
@@ -1010,10 +1010,10 @@ _080105BC:
bne _080105C6
b _080108B8
_080105C6:
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
b _080108B8
.align 2, 0
-_080105CC: .4byte gUnknown_2023E82
+_080105CC: .4byte gBattleCommunication
_080105D0: .4byte gWirelessCommType
_080105D4:
ldr r2, _08010640 @ =gBattleTypeFlags
@@ -1029,7 +1029,7 @@ _080105D4:
bne _080105EC
b _080108B8
_080105EC:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0801062A
@@ -1053,7 +1053,7 @@ _080105EC:
adds r1, r5
movs r2, 0x20
bl SendBlock
- ldr r0, _08010650 @ =gUnknown_2023E82
+ ldr r0, _08010650 @ =gBattleCommunication
strb r6, [r0]
_0801062A:
ldr r0, _08010654 @ =gWirelessCommType
@@ -1064,26 +1064,26 @@ _0801062A:
_08010634:
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
b _080108B8
.align 2, 0
_08010640: .4byte gBattleTypeFlags
_08010644: .4byte gReceivedRemoteLinkPlayers
_08010648: .4byte gBattleStruct
_0801064C: .4byte 0x00000185
-_08010650: .4byte gUnknown_2023E82
+_08010650: .4byte gBattleCommunication
_08010654: .4byte gWirelessCommType
_08010658:
movs r0, 0x4
orrs r1, r0
str r1, [r2]
- ldr r1, _0801066C @ =gUnknown_2023E82
+ ldr r1, _0801066C @ =gBattleCommunication
movs r0, 0xF
strb r0, [r1]
bl sub_801017C
b _080108B8
.align 2, 0
-_0801066C: .4byte gUnknown_2023E82
+_0801066C: .4byte gBattleCommunication
_08010670:
bl GetBlockReceivedStatus
movs r1, 0x3
@@ -1133,16 +1133,16 @@ _0801067E:
ldrh r0, [r1]
strh r0, [r2, 0x10]
bl SetDeoxysStats
- ldr r1, _080106F0 @ =gUnknown_2023E82
+ ldr r1, _080106F0 @ =gBattleCommunication
b _080108B2
.align 2, 0
_080106E0: .4byte sub_800F6FC
_080106E4: .4byte gTasks
_080106E8: .4byte gBattleStruct
_080106EC: .4byte gBlockRecvBuffer
-_080106F0: .4byte gUnknown_2023E82
+_080106F0: .4byte gBattleCommunication
_080106F4:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _08010700
@@ -1154,11 +1154,11 @@ _08010700:
ldr r1, _08010714 @ =gPlayerParty
movs r2, 0xC8
bl SendBlock
- ldr r1, _08010718 @ =gUnknown_2023E82
+ ldr r1, _08010718 @ =gBattleCommunication
b _080108B2
.align 2, 0
_08010714: .4byte gPlayerParty
-_08010718: .4byte gUnknown_2023E82
+_08010718: .4byte gBattleCommunication
_0801071C:
bl GetBlockReceivedStatus
movs r1, 0x3
@@ -1174,14 +1174,14 @@ _0801072A:
adds r1, r2
movs r2, 0xC8
bl memcpy
- ldr r1, _08010748 @ =gUnknown_2023E82
+ ldr r1, _08010748 @ =gBattleCommunication
b _080108B2
.align 2, 0
_08010740: .4byte gEnemyParty
_08010744: .4byte gBlockRecvBuffer
-_08010748: .4byte gUnknown_2023E82
+_08010748: .4byte gBattleCommunication
_0801074C:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _08010758
@@ -1193,11 +1193,11 @@ _08010758:
ldr r1, _0801076C @ =gUnknown_202434C
movs r2, 0xC8
bl SendBlock
- ldr r1, _08010770 @ =gUnknown_2023E82
+ ldr r1, _08010770 @ =gBattleCommunication
b _080108B2
.align 2, 0
_0801076C: .4byte gUnknown_202434C
-_08010770: .4byte gUnknown_2023E82
+_08010770: .4byte gBattleCommunication
_08010774:
bl GetBlockReceivedStatus
movs r1, 0x3
@@ -1213,14 +1213,14 @@ _08010782:
adds r1, r2
movs r2, 0xC8
bl memcpy
- ldr r1, _080107A0 @ =gUnknown_2023E82
+ ldr r1, _080107A0 @ =gBattleCommunication
b _080108B2
.align 2, 0
_08010798: .4byte gUnknown_20240F4
_0801079C: .4byte gBlockRecvBuffer
-_080107A0: .4byte gUnknown_2023E82
+_080107A0: .4byte gBattleCommunication
_080107A4:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _080107B0
@@ -1232,11 +1232,11 @@ _080107B0:
ldr r1, _080107C4 @ =gUnknown_2024414
movs r2, 0xC8
bl SendBlock
- ldr r1, _080107C8 @ =gUnknown_2023E82
+ ldr r1, _080107C8 @ =gBattleCommunication
b _080108B2
.align 2, 0
_080107C4: .4byte gUnknown_2024414
-_080107C8: .4byte gUnknown_2023E82
+_080107C8: .4byte gBattleCommunication
_080107CC:
bl GetBlockReceivedStatus
movs r1, 0x3
@@ -1268,17 +1268,17 @@ _080107CC:
adds r0, r4, 0
adds r0, 0x64
bl sub_8011D0C
- ldr r1, _08010830 @ =gUnknown_2023E82
+ ldr r1, _08010830 @ =gBattleCommunication
b _080108B2
.align 2, 0
_08010820: .4byte gUnknown_20241BC
_08010824: .4byte gBlockRecvBuffer
_08010828: .4byte 0xfffffe70
_0801082C: .4byte 0xfffffed4
-_08010830: .4byte gUnknown_2023E82
+_08010830: .4byte gBattleCommunication
_08010834:
bl sub_800D30C
- ldr r0, _08010848 @ =gUnknown_2023E82
+ ldr r0, _08010848 @ =gBattleCommunication
ldrb r1, [r0]
adds r1, 0x1
movs r2, 0
@@ -1287,7 +1287,7 @@ _08010834:
strb r2, [r0, 0x2]
b _080108B8
.align 2, 0
-_08010848: .4byte gUnknown_2023E82
+_08010848: .4byte gBattleCommunication
_0801084C:
ldr r0, _08010880 @ =gUnknown_2023E83
adds r1, r0, 0x1
@@ -1295,13 +1295,13 @@ _0801084C:
lsls r0, 24
cmp r0, 0
beq _080108B8
- ldr r2, _08010884 @ =gUnknown_3004F80
+ ldr r2, _08010884 @ =gPreBattleCallback1
ldr r1, _08010888 @ =gMain
ldr r0, [r1]
str r0, [r2]
ldr r0, _0801088C @ =sub_80123E4
str r0, [r1]
- ldr r0, _08010890 @ =sub_8011100
+ ldr r0, _08010890 @ =BattleMainCB2
bl SetMainCallback2
ldr r2, _08010894 @ =gBattleTypeFlags
ldr r1, [r2]
@@ -1315,20 +1315,20 @@ _0801084C:
b _080108B8
.align 2, 0
_08010880: .4byte gUnknown_2023E83
-_08010884: .4byte gUnknown_3004F80
+_08010884: .4byte gPreBattleCallback1
_08010888: .4byte gMain
_0801088C: .4byte sub_80123E4
-_08010890: .4byte sub_8011100
+_08010890: .4byte BattleMainCB2
_08010894: .4byte gBattleTypeFlags
_08010898:
- ldr r0, _080108C0 @ =gUnknown_2023E82
+ ldr r0, _080108C0 @ =gBattleCommunication
ldrb r1, [r0]
adds r1, 0x1
strb r1, [r0]
movs r1, 0x1
strb r1, [r0, 0x1]
_080108A4:
- ldr r1, _080108C0 @ =gUnknown_2023E82
+ ldr r1, _080108C0 @ =gBattleCommunication
ldrb r0, [r1, 0x1]
subs r0, 0x1
strb r0, [r1, 0x1]
@@ -1344,7 +1344,7 @@ _080108B8:
pop {r0}
bx r0
.align 2, 0
-_080108C0: .4byte gUnknown_2023E82
+_080108C0: .4byte gBattleCommunication
thumb_func_end sub_8010508
thumb_func_start sub_80108C4
@@ -1494,7 +1494,7 @@ sub_80109C8: @ 80109C8
bl RunTasks
bl AnimateSprites
bl BuildOamBuffer
- ldr r5, _08010A10 @ =gUnknown_2023E82
+ ldr r5, _08010A10 @ =gBattleCommunication
ldrb r0, [r5]
cmp r0, 0x1
beq _08010A5C
@@ -1505,7 +1505,7 @@ sub_80109C8: @ 80109C8
b _08010B82
.align 2, 0
_08010A0C: .4byte gBattleStruct
-_08010A10: .4byte gUnknown_2023E82
+_08010A10: .4byte gBattleCommunication
_08010A14:
cmp r0, 0x2
beq _08010AFC
@@ -1521,7 +1521,7 @@ _08010A20:
bne _08010A2A
b _08010B82
_08010A2A:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _08010A36
@@ -1596,7 +1596,7 @@ _08010ABA:
adds r4, 0x1
cmp r4, 0x3
ble _08010A78
- ldr r1, _08010AEC @ =gUnknown_2023E82
+ ldr r1, _08010AEC @ =gBattleCommunication
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
@@ -1615,7 +1615,7 @@ _08010ABA:
.align 2, 0
_08010AE4: .4byte gBlockRecvBuffer
_08010AE8: .4byte gUnknown_2022B58
-_08010AEC: .4byte gUnknown_2023E82
+_08010AEC: .4byte gBattleCommunication
_08010AF0: .4byte gMain
_08010AF4: .4byte gBattleTypeFlags
_08010AF8: .4byte sub_80109C8
@@ -1709,7 +1709,7 @@ sub_8010BA0: @ 8010BA0
bl RunTasks
bl AnimateSprites
bl BuildOamBuffer
- ldr r0, _08010BDC @ =gUnknown_2023E82
+ ldr r0, _08010BDC @ =gBattleCommunication
ldrb r0, [r0]
cmp r0, 0xC
bls _08010BCC
@@ -1722,7 +1722,7 @@ _08010BCC:
mov pc, r0
.align 2, 0
_08010BD8: .4byte gBattleStruct
-_08010BDC: .4byte gUnknown_2023E82
+_08010BDC: .4byte gBattleCommunication
_08010BE0: .4byte _08010BE4
.align 2, 0
_08010BE4:
@@ -1753,7 +1753,7 @@ _08010C18:
movs r0, 0x3
bl ShowBg
bl sub_80357C8
- ldr r1, _08010C54 @ =gUnknown_2023E82
+ ldr r1, _08010C54 @ =gBattleCommunication
movs r0, 0x1
strb r0, [r1]
_08010C44:
@@ -1763,10 +1763,10 @@ _08010C44:
bne _08010C4E
b _080110F0
_08010C4E:
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
b _080110F0
.align 2, 0
-_08010C54: .4byte gUnknown_2023E82
+_08010C54: .4byte gBattleCommunication
_08010C58: .4byte gWirelessCommType
_08010C5C:
ldr r0, _08010CC0 @ =gReceivedRemoteLinkPlayers
@@ -1775,7 +1775,7 @@ _08010C5C:
bne _08010C66
b _080110F0
_08010C66:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08010CAA
@@ -1800,7 +1800,7 @@ _08010C66:
adds r1, r5
movs r2, 0x20
bl SendBlock
- ldr r1, _08010CCC @ =gUnknown_2023E82
+ ldr r1, _08010CCC @ =gBattleCommunication
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
@@ -1813,13 +1813,13 @@ _08010CAA:
_08010CB4:
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
b _080110F0
.align 2, 0
_08010CC0: .4byte gReceivedRemoteLinkPlayers
_08010CC4: .4byte gBattleStruct
_08010CC8: .4byte 0x00000185
-_08010CCC: .4byte gUnknown_2023E82
+_08010CCC: .4byte gBattleCommunication
_08010CD0: .4byte gWirelessCommType
_08010CD4:
bl GetBlockReceivedStatus
@@ -1926,12 +1926,12 @@ _08010D9C:
bge _08010D3A
bl ZeroPlayerPartyMons
bl ZeroEnemyPartyMons
- ldr r1, _08010DD8 @ =gUnknown_2023E82
+ ldr r1, _08010DD8 @ =gBattleCommunication
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
_08010DB6:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _08010DC2
@@ -1943,10 +1943,10 @@ _08010DC2:
ldr r1, _08010DDC @ =gDecompressionBuffer
movs r2, 0xC8
bl SendBlock
- ldr r1, _08010DD8 @ =gUnknown_2023E82
+ ldr r1, _08010DD8 @ =gBattleCommunication
b _080110EA
.align 2, 0
-_08010DD8: .4byte gUnknown_2023E82
+_08010DD8: .4byte gBattleCommunication
_08010DDC: .4byte gDecompressionBuffer
_08010DE0:
bl GetBlockReceivedStatus
@@ -2078,13 +2078,13 @@ _08010EBE:
adds r6, 0x1
cmp r6, 0x3
ble _08010E00
- ldr r1, _08010ED4 @ =gUnknown_2023E82
+ ldr r1, _08010ED4 @ =gBattleCommunication
b _080110EA
.align 2, 0
_08010ED0: .4byte gUnknown_2024158
-_08010ED4: .4byte gUnknown_2023E82
+_08010ED4: .4byte gBattleCommunication
_08010ED8:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _08010EE4
@@ -2096,11 +2096,11 @@ _08010EE4:
ldr r1, _08010EF8 @ =gDecompressionBuffer + 0x0C8
movs r2, 0x64
bl SendBlock
- ldr r1, _08010EFC @ =gUnknown_2023E82
+ ldr r1, _08010EFC @ =gBattleCommunication
b _080110EA
.align 2, 0
_08010EF8: .4byte gDecompressionBuffer + 0x0C8
-_08010EFC: .4byte gUnknown_2023E82
+_08010EFC: .4byte gBattleCommunication
_08010F00:
bl GetBlockReceivedStatus
movs r1, 0xF
@@ -2273,16 +2273,16 @@ _08010FDE:
lsls r2, 1
adds r0, r4, r2
bl sub_8011D0C
- ldr r1, _08011068 @ =gUnknown_2023E82
+ ldr r1, _08011068 @ =gBattleCommunication
b _080110EA
.align 2, 0
_0801105C: .4byte gUnknown_2024220
_08011060: .4byte gPlayerParty
_08011064: .4byte gEnemyParty
-_08011068: .4byte gUnknown_2023E82
+_08011068: .4byte gBattleCommunication
_0801106C:
bl sub_800D30C
- ldr r0, _08011080 @ =gUnknown_2023E82
+ ldr r0, _08011080 @ =gBattleCommunication
ldrb r1, [r0]
adds r1, 0x1
movs r2, 0
@@ -2291,7 +2291,7 @@ _0801106C:
strb r2, [r0, 0x2]
b _080110F0
.align 2, 0
-_08011080: .4byte gUnknown_2023E82
+_08011080: .4byte gBattleCommunication
_08011084:
ldr r0, _080110B8 @ =gUnknown_2023E83
adds r1, r0, 0x1
@@ -2299,13 +2299,13 @@ _08011084:
lsls r0, 24
cmp r0, 0
beq _080110F0
- ldr r2, _080110BC @ =gUnknown_3004F80
+ ldr r2, _080110BC @ =gPreBattleCallback1
ldr r1, _080110C0 @ =gMain
ldr r0, [r1]
str r0, [r2]
ldr r0, _080110C4 @ =sub_80123E4
str r0, [r1]
- ldr r0, _080110C8 @ =sub_8011100
+ ldr r0, _080110C8 @ =BattleMainCB2
bl SetMainCallback2
ldr r2, _080110CC @ =gBattleTypeFlags
ldr r1, [r2]
@@ -2319,20 +2319,20 @@ _08011084:
b _080110F0
.align 2, 0
_080110B8: .4byte gUnknown_2023E83
-_080110BC: .4byte gUnknown_3004F80
+_080110BC: .4byte gPreBattleCallback1
_080110C0: .4byte gMain
_080110C4: .4byte sub_80123E4
-_080110C8: .4byte sub_8011100
+_080110C8: .4byte BattleMainCB2
_080110CC: .4byte gBattleTypeFlags
_080110D0:
- ldr r0, _080110FC @ =gUnknown_2023E82
+ ldr r0, _080110FC @ =gBattleCommunication
ldrb r1, [r0]
adds r1, 0x1
strb r1, [r0]
movs r1, 0x1
strb r1, [r0, 0x1]
_080110DC:
- ldr r1, _080110FC @ =gUnknown_2023E82
+ ldr r1, _080110FC @ =gBattleCommunication
ldrb r0, [r1, 0x1]
subs r0, 0x1
strb r0, [r1, 0x1]
@@ -2350,11 +2350,11 @@ _080110F0:
pop {r0}
bx r0
.align 2, 0
-_080110FC: .4byte gUnknown_2023E82
+_080110FC: .4byte gBattleCommunication
thumb_func_end sub_8010BA0
- thumb_func_start sub_8011100
-sub_8011100: @ 8011100
+ thumb_func_start BattleMainCB2
+BattleMainCB2: @ 8011100
push {lr}
sub sp, 0x4
bl AnimateSprites
@@ -2401,13 +2401,13 @@ _08011164: .4byte gBattleTypeFlags
_08011168: .4byte gSpecialVar_Result
_0801116C: .4byte gBattleOutcome
_08011170: .4byte CB2_QuitRecordedBattle
- thumb_func_end sub_8011100
+ thumb_func_end BattleMainCB2
thumb_func_start FreeRestoreBattleData
FreeRestoreBattleData: @ 8011174
push {lr}
ldr r1, _080111AC @ =gMain
- ldr r0, _080111B0 @ =gUnknown_3004F80
+ ldr r0, _080111B0 @ =gPreBattleCallback1
ldr r0, [r0]
str r0, [r1]
ldr r2, _080111B4 @ =gScanlineEffect
@@ -2425,12 +2425,12 @@ FreeRestoreBattleData: @ 8011174
bl m4aSongNumStop
bl FreeMonSpritesGfx
bl FreeBattleSpritesData
- bl sub_802E138
+ bl FreeBattleResources
pop {r0}
bx r0
.align 2, 0
_080111AC: .4byte gMain
-_080111B0: .4byte gUnknown_3004F80
+_080111B0: .4byte gPreBattleCallback1
_080111B4: .4byte gScanlineEffect
_080111B8: .4byte 0x00000439
thumb_func_end FreeRestoreBattleData
@@ -3121,8 +3121,8 @@ _080116EC: .4byte 0x04000006
_080116F0: .4byte 0x04000008
thumb_func_end sub_80116CC
- thumb_func_start sub_80116F4
-sub_80116F4: @ 80116F4
+ thumb_func_start VBlankCB_Battle
+VBlankCB_Battle: @ 80116F4
push {lr}
bl Random
ldr r0, _08011788 @ =gBattle_BG0_X
@@ -3192,7 +3192,7 @@ _080117A8: .4byte gUnknown_2022984
_080117AC: .4byte gUnknown_2022986
_080117B0: .4byte gUnknown_2022988
_080117B4: .4byte gUnknown_202298A
- thumb_func_end sub_80116F4
+ thumb_func_end VBlankCB_Battle
thumb_func_start nullsub_9
nullsub_9: @ 80117B8
@@ -3612,7 +3612,7 @@ _08011A9C:
ldr r1, _08011B7C @ =gReservedSpritePaletteCount
movs r0, 0x4
strb r0, [r1]
- ldr r0, _08011B80 @ =sub_80116F4
+ ldr r0, _08011B80 @ =VBlankCB_Battle
bl SetVBlankCallback
ldr r0, _08011B84 @ =sub_800F6FC
movs r1, 0
@@ -3634,7 +3634,7 @@ _08011A9C:
bl sub_801184C
ldr r0, _08011B8C @ =sub_8011B94
bl SetMainCallback2
- ldr r0, _08011B90 @ =gUnknown_2023E82
+ ldr r0, _08011B90 @ =gBattleCommunication
strb r4, [r0]
add sp, 0x4
pop {r4}
@@ -3657,11 +3657,11 @@ _08011B70: .4byte gBattle_BG3_X
_08011B74: .4byte gBattle_BG3_Y
_08011B78: .4byte gBattleTextboxPalette
_08011B7C: .4byte gReservedSpritePaletteCount
-_08011B80: .4byte sub_80116F4
+_08011B80: .4byte VBlankCB_Battle
_08011B84: .4byte sub_800F6FC
_08011B88: .4byte gTasks
_08011B8C: .4byte sub_8011B94
-_08011B90: .4byte gUnknown_2023E82
+_08011B90: .4byte gBattleCommunication
thumb_func_end sub_8011A1C
thumb_func_start sub_8011B94
@@ -3680,7 +3680,7 @@ sub_8011B94: @ 8011B94
sub_8011BB0: @ 8011BB0
push {r4,lr}
sub sp, 0x4
- ldr r4, _08011BC8 @ =gUnknown_2023E82
+ ldr r4, _08011BC8 @ =gBattleCommunication
ldrb r0, [r4]
cmp r0, 0x1
beq _08011BEA
@@ -3690,7 +3690,7 @@ sub_8011BB0: @ 8011BB0
beq _08011BD2
b _08011C34
.align 2, 0
-_08011BC8: .4byte gUnknown_2023E82
+_08011BC8: .4byte gBattleCommunication
_08011BCC:
cmp r0, 0x2
beq _08011C10
@@ -3738,7 +3738,7 @@ _08011C10:
bl sub_812C224
bl FreeMonSpritesGfx
bl FreeBattleSpritesData
- bl sub_802E138
+ bl FreeBattleResources
_08011C34:
add sp, 0x4
pop {r4}
@@ -3920,7 +3920,7 @@ _08011D90: .4byte 0x00002108
sub_8011D94: @ 8011D94
push {lr}
adds r2, r0, 0
- ldr r0, _08011DC0 @ =gUnknown_2023F4C
+ ldr r0, _08011DC0 @ =gIntroSlideFlags
ldrh r1, [r0]
movs r0, 0x1
ands r0, r1
@@ -3941,7 +3941,7 @@ _08011DBC:
pop {r0}
bx r0
.align 2, 0
-_08011DC0: .4byte gUnknown_2023F4C
+_08011DC0: .4byte gIntroSlideFlags
_08011DC4: .4byte sub_8011DC8
thumb_func_end sub_8011D94
@@ -3960,7 +3960,7 @@ sub_8011DC8: @ 8011DC8
lsls r0, 24
lsrs r0, 24
bl sub_804BD94
- ldr r1, _08011E18 @ =gUnknown_3004FF0
+ ldr r1, _08011E18 @ =gHealthboxSpriteIds
movs r2, 0x2E
ldrsh r0, [r4, r2]
adds r0, r1
@@ -3985,7 +3985,7 @@ _08011E10:
pop {r0}
bx r0
.align 2, 0
-_08011E18: .4byte gUnknown_3004FF0
+_08011E18: .4byte gHealthboxSpriteIds
_08011E1C: .4byte nullsub_10
_08011E20: .4byte 0x00002108
thumb_func_end sub_8011DC8
@@ -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
@@ -4071,7 +4071,7 @@ sub_8011EA0: @ 8011EA0
ldrh r0, [r0, 0x2E]
lsls r0, 24
lsrs r6, r0, 24
- ldr r0, _08011EC4 @ =gUnknown_2024018
+ ldr r0, _08011EC4 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r6, 2
@@ -4082,7 +4082,7 @@ sub_8011EA0: @ 8011EA0
adds r4, r0, 0
b _08011ECC
.align 2, 0
-_08011EC4: .4byte gUnknown_2024018
+_08011EC4: .4byte gBattleSpritesDataPtr
_08011EC8:
mov r0, r9
ldrh r4, [r0, 0x32]
@@ -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
@@ -4364,7 +4364,7 @@ _080120CC: .4byte oac_poke_ally_
oac_poke_ally_: @ 80120D0
push {lr}
adds r2, r0, 0
- ldr r0, _080120F8 @ =gUnknown_2023F4C
+ ldr r0, _080120F8 @ =gIntroSlideFlags
ldrh r1, [r0]
movs r0, 0x1
ands r0, r1
@@ -4384,7 +4384,7 @@ _080120F4:
pop {r0}
bx r0
.align 2, 0
-_080120F8: .4byte gUnknown_2023F4C
+_080120F8: .4byte gIntroSlideFlags
_080120FC: .4byte nullsub_11
thumb_func_end oac_poke_ally_
@@ -4406,7 +4406,7 @@ nullsub_11: @ 801210C
sub_8012110: @ 8012110
push {lr}
adds r2, r0, 0
- ldr r0, _08012134 @ =gUnknown_2023F4C
+ ldr r0, _08012134 @ =gIntroSlideFlags
ldrh r1, [r0]
movs r0, 0x1
ands r0, r1
@@ -4424,11 +4424,11 @@ _08012130:
pop {r0}
bx r0
.align 2, 0
-_08012134: .4byte gUnknown_2023F4C
+_08012134: .4byte gIntroSlideFlags
thumb_func_end sub_8012110
- thumb_func_start dp11b_obj_instanciate
-dp11b_obj_instanciate: @ 8012138
+ thumb_func_start DoBounceEffect
+DoBounceEffect: @ 8012138
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -4447,7 +4447,7 @@ dp11b_obj_instanciate: @ 8012138
mov r10, r3
cmp r1, 0
beq _08012174
- ldr r0, _08012170 @ =gUnknown_2024018
+ ldr r0, _08012170 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x4]
lsls r2, r4, 1
@@ -4458,9 +4458,9 @@ dp11b_obj_instanciate: @ 8012138
movs r0, 0x2
b _08012186
.align 2, 0
-_08012170: .4byte gUnknown_2024018
+_08012170: .4byte gBattleSpritesDataPtr
_08012174:
- ldr r0, _080121D0 @ =gUnknown_2024018
+ ldr r0, _080121D0 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x4]
lsls r2, r4, 1
@@ -4481,10 +4481,10 @@ _08012186:
mov r0, r8
cmp r0, 0x1
bne _080121E0
- ldr r0, _080121D8 @ =gUnknown_3004FF0
+ ldr r0, _080121D8 @ =gHealthboxSpriteIds
adds r0, r4, r0
ldrb r7, [r0]
- ldr r2, _080121D0 @ =gUnknown_2024018
+ ldr r2, _080121D0 @ =gBattleSpritesDataPtr
ldr r0, [r2]
ldr r0, [r0, 0x4]
adds r1, r6, r4
@@ -4506,15 +4506,15 @@ _08012186:
movs r1, 0x80
b _0801220E
.align 2, 0
-_080121D0: .4byte gUnknown_2024018
+_080121D0: .4byte gBattleSpritesDataPtr
_080121D4: .4byte SpriteCB_HealthBoxBounce
-_080121D8: .4byte gUnknown_3004FF0
+_080121D8: .4byte gHealthboxSpriteIds
_080121DC: .4byte gSprites
_080121E0:
ldr r0, _0801224C @ =gBattlerSpriteIds
adds r0, r4, r0
ldrb r7, [r0]
- ldr r2, _08012250 @ =gUnknown_2024018
+ ldr r2, _08012250 @ =gBattleSpritesDataPtr
ldr r0, [r2]
ldr r0, [r0, 0x4]
adds r1, r6, r4
@@ -4568,12 +4568,12 @@ _0801223C:
bx r0
.align 2, 0
_0801224C: .4byte gBattlerSpriteIds
-_08012250: .4byte gUnknown_2024018
+_08012250: .4byte gBattleSpritesDataPtr
_08012254: .4byte gSprites
- thumb_func_end dp11b_obj_instanciate
+ thumb_func_end DoBounceEffect
- thumb_func_start dp11b_obj_free
-dp11b_obj_free: @ 8012258
+ thumb_func_start EndBounceEffect
+EndBounceEffect: @ 8012258
push {r4-r6,lr}
lsls r0, 24
lsrs r2, r0, 24
@@ -4581,7 +4581,7 @@ dp11b_obj_free: @ 8012258
lsrs r1, 24
cmp r1, 0x1
bne _080122AC
- ldr r6, _080122A4 @ =gUnknown_2024018
+ ldr r6, _080122A4 @ =gBattleSpritesDataPtr
ldr r0, [r6]
ldr r1, [r0, 0x4]
lsls r0, r2, 1
@@ -4611,10 +4611,10 @@ dp11b_obj_free: @ 8012258
negs r0, r0
b _080122E6
.align 2, 0
-_080122A4: .4byte gUnknown_2024018
+_080122A4: .4byte gBattleSpritesDataPtr
_080122A8: .4byte gSprites
_080122AC:
- ldr r6, _08012300 @ =gUnknown_2024018
+ ldr r6, _08012300 @ =gBattleSpritesDataPtr
ldr r0, [r6]
ldr r1, [r0, 0x4]
lsls r0, r2, 1
@@ -4658,9 +4658,9 @@ _080122FA:
pop {r0}
bx r0
.align 2, 0
-_08012300: .4byte gUnknown_2024018
+_08012300: .4byte gBattleSpritesDataPtr
_08012304: .4byte gSprites
- thumb_func_end dp11b_obj_free
+ thumb_func_end EndBounceEffect
thumb_func_start SpriteCB_HealthBoxBounce
SpriteCB_HealthBoxBounce: @ 8012308
@@ -4772,28 +4772,28 @@ nullsub_12: @ 80123BC
bx lr
thumb_func_end nullsub_12
- thumb_func_start sub_80123C0
-sub_80123C0: @ 80123C0
+ thumb_func_start BeginBattleIntro
+BeginBattleIntro: @ 80123C0
push {lr}
bl sub_8012434
- ldr r1, _080123D8 @ =gUnknown_2023E82
+ ldr r1, _080123D8 @ =gBattleCommunication
movs r0, 0
strb r0, [r1, 0x1]
- ldr r1, _080123DC @ =gUnknown_3004F84
+ ldr r1, _080123DC @ =gBattleMainFunc
ldr r0, _080123E0 @ =BattleIntroGetMonsData
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
-_080123D8: .4byte gUnknown_2023E82
-_080123DC: .4byte gUnknown_3004F84
+_080123D8: .4byte gBattleCommunication
+_080123DC: .4byte gBattleMainFunc
_080123E0: .4byte BattleIntroGetMonsData
- thumb_func_end sub_80123C0
+ thumb_func_end BeginBattleIntro
thumb_func_start sub_80123E4
sub_80123E4: @ 80123E4
push {r4,r5,lr}
- ldr r0, _08012424 @ =gUnknown_3004F84
+ ldr r0, _08012424 @ =gBattleMainFunc
ldr r0, [r0]
bl _call_via_r0
ldr r1, _08012428 @ =gActiveBattler
@@ -4803,7 +4803,7 @@ sub_80123E4: @ 80123E4
ldrb r0, [r0]
cmp r0, 0
beq _0801241E
- ldr r5, _08012430 @ =gUnknown_3004FE0
+ ldr r5, _08012430 @ =gBattlerControllerFuncs
adds r4, r1, 0
_08012400:
ldrb r0, [r4]
@@ -4825,10 +4825,10 @@ _0801241E:
pop {r0}
bx r0
.align 2, 0
-_08012424: .4byte gUnknown_3004F84
+_08012424: .4byte gBattleMainFunc
_08012428: .4byte gActiveBattler
_0801242C: .4byte gBattlersCount
-_08012430: .4byte gUnknown_3004FE0
+_08012430: .4byte gBattlerControllerFuncs
thumb_func_end sub_80123E4
thumb_func_start sub_8012434
@@ -4843,18 +4843,18 @@ sub_8012434: @ 8012434
bl SpecialStatusesClear
movs r2, 0
movs r3, 0
- ldr r0, _080126CC @ =gUnknown_2023DB0
+ ldr r0, _080126CC @ =gLastResultingMoves
mov r10, r0
- ldr r1, _080126D0 @ =gUnknown_2023DA8
+ ldr r1, _080126D0 @ =gLastHitByType
mov r12, r1
- ldr r0, _080126D4 @ =gUnknown_2023DA0
+ ldr r0, _080126D4 @ =gLastLandedMoves
mov r9, r0
- ldr r1, _080126D8 @ =gLastUsedMove
+ ldr r1, _080126D8 @ =gLastMoves
mov r8, r1
ldr r4, _080126DC @ =gDisableStructs
movs r5, 0
- ldr r7, _080126E0 @ =gUnknown_2023D90
- ldr r6, _080126E4 @ =gUnknown_2023DB8
+ ldr r7, _080126E0 @ =gLastPrintedMoves
+ ldr r6, _080126E4 @ =gLockedMoves
_08012464:
ldr r0, _080126E8 @ =gStatuses3
adds r0, r5, r0
@@ -4879,7 +4879,7 @@ _0801246C:
strh r3, [r0]
mov r1, r10
strh r3, [r1]
- ldr r0, _080126F0 @ =gUnknown_2023DC0
+ ldr r0, _080126F0 @ =gLastHitBy
adds r1, r2, r0
movs r0, 0xFF
strb r0, [r1]
@@ -4904,7 +4904,7 @@ _0801246C:
ble _08012464
movs r5, 0
ldr r3, _080126F8 @ =gSideTimers
- ldr r4, _080126FC @ =gSideAffecting
+ ldr r4, _080126FC @ =gSideStatuses
movs r2, 0x1
_080124C6:
strh r5, [r4]
@@ -4921,13 +4921,13 @@ _080124CA:
cmp r2, 0
bge _080124C6
movs r1, 0
- ldr r2, _08012700 @ =sBattler_AI
+ ldr r2, _08012700 @ =gBattlerAttacker
strb r1, [r2]
ldr r0, _08012704 @ =gBattlerTarget
strb r1, [r0]
ldr r2, _08012708 @ =gBattleWeather
strh r1, [r2]
- ldr r1, _0801270C @ =gUnknown_2023F20
+ ldr r1, _0801270C @ =gWishFutureKnock
movs r2, 0
movs r3, 0
_080124F2:
@@ -4937,7 +4937,7 @@ _080124F2:
cmp r2, 0x2B
bls _080124F2
movs r0, 0
- ldr r1, _08012710 @ =gUnknown_2023DD0
+ ldr r1, _08012710 @ =gHitMarker
str r0, [r1]
ldr r2, _08012714 @ =gBattleTypeFlags
ldr r0, [r2]
@@ -4953,7 +4953,7 @@ _080124F2:
cmp r0, 0
beq _08012522
movs r0, 0x80
- ldr r2, _08012710 @ =gUnknown_2023DD0
+ ldr r2, _08012710 @ =gHitMarker
str r0, [r2]
_08012522:
ldr r1, _0801271C @ =gSaveBlock2Ptr
@@ -4964,14 +4964,14 @@ _08012522:
movs r1, 0
ldr r2, _08012720 @ =gBattleScripting
strb r0, [r2, 0x1D]
- ldr r0, _08012724 @ =gUnknown_2023D72
+ ldr r0, _08012724 @ =gMultiHitCounter
strb r1, [r0]
ldr r2, _08012728 @ =gBattleOutcome
strb r1, [r2]
- ldr r0, _0801272C @ =gUnknown_2023BC8
+ ldr r0, _0801272C @ =gBattleControllerExecFlags
str r1, [r0]
movs r2, 0
- ldr r0, _08012730 @ =gUnknown_2023E7E
+ ldr r0, _08012730 @ =gPaydayMoney
strh r1, [r0]
ldr r1, _080126F4 @ =gBattleResources
ldr r0, [r1]
@@ -4982,7 +4982,7 @@ _08012522:
ldr r0, [r0, 0xC]
adds r0, 0x20
strb r2, [r0]
- ldr r1, _08012734 @ =gUnknown_2023E82
+ ldr r1, _08012734 @ =gBattleCommunication
movs r2, 0
adds r0, r1, 0x7
_0801255C:
@@ -4992,18 +4992,18 @@ _0801255C:
bge _0801255C
movs r2, 0
mov r9, r2
- ldr r0, _08012738 @ =gUnknown_2023E7C
+ ldr r0, _08012738 @ =gPauseCounterBattle
strh r2, [r0]
movs r0, 0
ldr r1, _0801273C @ =gBattleMoveDamage
str r0, [r1]
- ldr r2, _08012740 @ =gUnknown_2023F4C
+ ldr r2, _08012740 @ =gIntroSlideFlags
strh r0, [r2]
mov r1, r9
ldr r0, _08012720 @ =gBattleScripting
strb r1, [r0, 0x18]
strb r1, [r0, 0x19]
- ldr r2, _08012744 @ =gUnknown_3004FD4
+ ldr r2, _08012744 @ =gLeveledUpInBattle
strb r1, [r2]
ldr r0, _08012748 @ =gAbsentBattlerFlags
strb r1, [r0]
@@ -5171,37 +5171,37 @@ _080126AE:
pop {r0}
bx r0
.align 2, 0
-_080126CC: .4byte gUnknown_2023DB0
-_080126D0: .4byte gUnknown_2023DA8
-_080126D4: .4byte gUnknown_2023DA0
-_080126D8: .4byte gLastUsedMove
+_080126CC: .4byte gLastResultingMoves
+_080126D0: .4byte gLastHitByType
+_080126D4: .4byte gLastLandedMoves
+_080126D8: .4byte gLastMoves
_080126DC: .4byte gDisableStructs
-_080126E0: .4byte gUnknown_2023D90
-_080126E4: .4byte gUnknown_2023DB8
+_080126E0: .4byte gLastPrintedMoves
+_080126E4: .4byte gLockedMoves
_080126E8: .4byte gStatuses3
_080126EC: .4byte gUnknown_2023DD4
-_080126F0: .4byte gUnknown_2023DC0
+_080126F0: .4byte gLastHitBy
_080126F4: .4byte gBattleResources
_080126F8: .4byte gSideTimers
-_080126FC: .4byte gSideAffecting
-_08012700: .4byte sBattler_AI
+_080126FC: .4byte gSideStatuses
+_08012700: .4byte gBattlerAttacker
_08012704: .4byte gBattlerTarget
_08012708: .4byte gBattleWeather
-_0801270C: .4byte gUnknown_2023F20
-_08012710: .4byte gUnknown_2023DD0
+_0801270C: .4byte gWishFutureKnock
+_08012710: .4byte gHitMarker
_08012714: .4byte gBattleTypeFlags
_08012718: .4byte 0x00010002
_0801271C: .4byte gSaveBlock2Ptr
_08012720: .4byte gBattleScripting
-_08012724: .4byte gUnknown_2023D72
+_08012724: .4byte gMultiHitCounter
_08012728: .4byte gBattleOutcome
-_0801272C: .4byte gUnknown_2023BC8
-_08012730: .4byte gUnknown_2023E7E
-_08012734: .4byte gUnknown_2023E82
-_08012738: .4byte gUnknown_2023E7C
+_0801272C: .4byte gBattleControllerExecFlags
+_08012730: .4byte gPaydayMoney
+_08012734: .4byte gBattleCommunication
+_08012738: .4byte gPauseCounterBattle
_0801273C: .4byte gBattleMoveDamage
-_08012740: .4byte gUnknown_2023F4C
-_08012744: .4byte gUnknown_3004FD4
+_08012740: .4byte gIntroSlideFlags
+_08012744: .4byte gLeveledUpInBattle
_08012748: .4byte gAbsentBattlerFlags
_0801274C: .4byte gBattleStruct
_08012750: .4byte gEnemyParty
@@ -5210,8 +5210,8 @@ _08012758: .4byte 0x000004fb
_0801275C: .4byte gBattleResults
thumb_func_end sub_8012434
- thumb_func_start sub_8012760
-sub_8012760: @ 8012760
+ thumb_func_start SwitchInClearSetData
+SwitchInClearSetData: @ 8012760
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -5425,7 +5425,7 @@ _080128F0:
_0801290C:
movs r5, 0
ldr r7, _08012B80 @ =gBattleStruct
- ldr r3, _08012B84 @ =gUnknown_2023FF8
+ ldr r3, _08012B84 @ =gActionSelectionCursor
mov r10, r3
ldr r6, _08012B88 @ =gBattlersCount
ldrb r6, [r6]
@@ -5481,7 +5481,7 @@ _0801296C:
movs r1, 0
strb r1, [r0]
ldrb r0, [r6]
- ldr r2, _08012B9C @ =gUnknown_2023FFC
+ ldr r2, _08012B9C @ =gMoveSelectionCursor
adds r0, r2
strb r1, [r0]
ldrb r1, [r6]
@@ -5579,34 +5579,34 @@ _08012A1A:
mov r1, r12
ldrb r0, [r1]
lsls r0, 1
- ldr r3, _08012BAC @ =gLastUsedMove
+ ldr r3, _08012BAC @ =gLastMoves
adds r0, r3
movs r3, 0
strh r2, [r0]
ldrb r0, [r1]
lsls r0, 1
- ldr r6, _08012BB0 @ =gUnknown_2023DA0
+ ldr r6, _08012BB0 @ =gLastLandedMoves
adds r0, r6
strh r2, [r0]
ldrb r0, [r1]
lsls r0, 1
- ldr r1, _08012BB4 @ =gUnknown_2023DA8
+ ldr r1, _08012BB4 @ =gLastHitByType
adds r0, r1
strh r2, [r0]
mov r6, r12
ldrb r0, [r6]
lsls r0, 1
- ldr r1, _08012BB8 @ =gUnknown_2023DB0
+ ldr r1, _08012BB8 @ =gLastResultingMoves
adds r0, r1
strh r2, [r0]
ldrb r0, [r6]
lsls r0, 1
- ldr r6, _08012BBC @ =gUnknown_2023D90
+ ldr r6, _08012BBC @ =gLastPrintedMoves
adds r0, r6
strh r2, [r0]
mov r1, r12
ldrb r0, [r1]
- ldr r2, _08012BC0 @ =gUnknown_2023DC0
+ ldr r2, _08012BC0 @ =gLastHitBy
adds r0, r2
movs r1, 0xFF
strb r1, [r0]
@@ -5747,27 +5747,27 @@ _08012B3C:
.align 2, 0
_08012B7C: .4byte gBattleMons
_08012B80: .4byte gBattleStruct
-_08012B84: .4byte gUnknown_2023FF8
+_08012B84: .4byte gActionSelectionCursor
_08012B88: .4byte gBattlersCount
_08012B8C: .4byte gUnknown_2023C34
_08012B90: .4byte gBitTable
_08012B94: .4byte gActiveBattler
_08012B98: .4byte 0xffff1fff
-_08012B9C: .4byte gUnknown_2023FFC
+_08012B9C: .4byte gMoveSelectionCursor
_08012BA0: .4byte gCurrentMove
_08012BA4: .4byte gBattleMoves
_08012BA8: .4byte gMoveResultFlags
-_08012BAC: .4byte gLastUsedMove
-_08012BB0: .4byte gUnknown_2023DA0
-_08012BB4: .4byte gUnknown_2023DA8
-_08012BB8: .4byte gUnknown_2023DB0
-_08012BBC: .4byte gUnknown_2023D90
-_08012BC0: .4byte gUnknown_2023DC0
+_08012BAC: .4byte gLastMoves
+_08012BB0: .4byte gLastLandedMoves
+_08012BB4: .4byte gLastHitByType
+_08012BB8: .4byte gLastResultingMoves
+_08012BBC: .4byte gLastPrintedMoves
+_08012BC0: .4byte gLastHitBy
_08012BC4: .4byte gBattleResources
- thumb_func_end sub_8012760
+ thumb_func_end SwitchInClearSetData
- thumb_func_start sub_8012BC8
-sub_8012BC8: @ 8012BC8
+ thumb_func_start FaintClearSetData
+FaintClearSetData: @ 8012BC8
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -5776,11 +5776,11 @@ sub_8012BC8: @ 8012BC8
movs r3, 0
ldr r7, _08012F5C @ =gActiveBattler
ldr r6, _08012F60 @ =gStatuses3
- ldr r0, _08012F64 @ =gUnknown_2023FF8
+ ldr r0, _08012F64 @ =gActionSelectionCursor
mov r8, r0
- ldr r1, _08012F68 @ =gUnknown_2023FFC
+ ldr r1, _08012F68 @ =gMoveSelectionCursor
mov r9, r1
- ldr r2, _08012F6C @ =gUnknown_2023E8C
+ ldr r2, _08012F6C @ =gProtectStructs
mov r12, r2
adds r5, r7, 0
movs r4, 0x58
@@ -6047,32 +6047,32 @@ _08012CA8:
strb r1, [r0, 0x16]
ldrb r0, [r7]
lsls r0, 1
- ldr r1, _08012F8C @ =gLastUsedMove
+ ldr r1, _08012F8C @ =gLastMoves
adds r0, r1
movs r3, 0
strh r2, [r0]
ldrb r0, [r7]
lsls r0, 1
- ldr r1, _08012F90 @ =gUnknown_2023DA0
+ ldr r1, _08012F90 @ =gLastLandedMoves
adds r0, r1
strh r2, [r0]
ldrb r0, [r7]
lsls r0, 1
- ldr r1, _08012F94 @ =gUnknown_2023DA8
+ ldr r1, _08012F94 @ =gLastHitByType
adds r0, r1
strh r2, [r0]
ldrb r0, [r7]
lsls r0, 1
- ldr r1, _08012F98 @ =gUnknown_2023DB0
+ ldr r1, _08012F98 @ =gLastResultingMoves
adds r0, r1
strh r2, [r0]
ldrb r0, [r7]
lsls r0, 1
- ldr r1, _08012F9C @ =gUnknown_2023D90
+ ldr r1, _08012F9C @ =gLastPrintedMoves
adds r0, r1
strh r2, [r0]
ldrb r0, [r7]
- ldr r2, _08012FA0 @ =gUnknown_2023DC0
+ ldr r2, _08012FA0 @ =gLastHitBy
adds r0, r2
movs r1, 0xFF
strb r1, [r0]
@@ -6239,9 +6239,9 @@ _08012F04:
.align 2, 0
_08012F5C: .4byte gActiveBattler
_08012F60: .4byte gStatuses3
-_08012F64: .4byte gUnknown_2023FF8
-_08012F68: .4byte gUnknown_2023FFC
-_08012F6C: .4byte gUnknown_2023E8C
+_08012F64: .4byte gActionSelectionCursor
+_08012F68: .4byte gMoveSelectionCursor
+_08012F6C: .4byte gProtectStructs
_08012F70: .4byte gBattleMons
_08012F74: .4byte gBattlersCount
_08012F78: .4byte gBitTable
@@ -6249,20 +6249,20 @@ _08012F7C: .4byte gDisableStructs
_08012F80: .4byte 0xfbffffff
_08012F84: .4byte gBattleStruct
_08012F88: .4byte 0xffff1fff
-_08012F8C: .4byte gLastUsedMove
-_08012F90: .4byte gUnknown_2023DA0
-_08012F94: .4byte gUnknown_2023DA8
-_08012F98: .4byte gUnknown_2023DB0
-_08012F9C: .4byte gUnknown_2023D90
-_08012FA0: .4byte gUnknown_2023DC0
+_08012F8C: .4byte gLastMoves
+_08012F90: .4byte gLastLandedMoves
+_08012F94: .4byte gLastHitByType
+_08012F98: .4byte gLastResultingMoves
+_08012F9C: .4byte gLastPrintedMoves
+_08012FA0: .4byte gLastHitBy
_08012FA4: .4byte gBattleResources
_08012FA8: .4byte gBaseStats
- thumb_func_end sub_8012BC8
+ thumb_func_end FaintClearSetData
thumb_func_start BattleIntroGetMonsData
BattleIntroGetMonsData: @ 8012FAC
push {r4,r5,lr}
- ldr r5, _08012FBC @ =gUnknown_2023E82
+ ldr r5, _08012FBC @ =gBattleCommunication
ldrb r0, [r5]
cmp r0, 0
beq _08012FC0
@@ -6270,7 +6270,7 @@ BattleIntroGetMonsData: @ 8012FAC
beq _08012FE4
b _0801301A
.align 2, 0
-_08012FBC: .4byte gUnknown_2023E82
+_08012FBC: .4byte gBattleCommunication
_08012FC0:
ldr r4, _08012FE0 @ =gActiveBattler
ldrb r0, [r5, 0x1]
@@ -6280,7 +6280,7 @@ _08012FC0:
movs r2, 0
bl BtlController_EmitGetMonData
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
ldrb r0, [r5]
adds r0, 0x1
strb r0, [r5]
@@ -6288,7 +6288,7 @@ _08012FC0:
.align 2, 0
_08012FE0: .4byte gActiveBattler
_08012FE4:
- ldr r0, _08013008 @ =gUnknown_2023BC8
+ ldr r0, _08013008 @ =gBattleControllerExecFlags
ldr r2, [r0]
cmp r2, 0
bne _0801301A
@@ -6301,14 +6301,14 @@ _08012FE4:
ldrb r1, [r1]
cmp r0, r1
bne _08013018
- ldr r1, _08013010 @ =gUnknown_3004F84
+ ldr r1, _08013010 @ =gBattleMainFunc
ldr r0, _08013014 @ =BattleIntroPrepareBackgroundSlide
str r0, [r1]
b _0801301A
.align 2, 0
-_08013008: .4byte gUnknown_2023BC8
+_08013008: .4byte gBattleControllerExecFlags
_0801300C: .4byte gBattlersCount
-_08013010: .4byte gUnknown_3004F84
+_08013010: .4byte gBattleMainFunc
_08013014: .4byte BattleIntroPrepareBackgroundSlide
_08013018:
strb r2, [r5]
@@ -6321,7 +6321,7 @@ _0801301A:
thumb_func_start BattleIntroPrepareBackgroundSlide
BattleIntroPrepareBackgroundSlide: @ 8013020
push {r4,r5,lr}
- ldr r0, _08013058 @ =gUnknown_2023BC8
+ ldr r0, _08013058 @ =gBattleControllerExecFlags
ldr r5, [r0]
cmp r5, 0
bne _08013050
@@ -6329,16 +6329,16 @@ BattleIntroPrepareBackgroundSlide: @ 8013020
bl GetBattlerAtPosition
ldr r4, _0801305C @ =gActiveBattler
strb r0, [r4]
- ldr r0, _08013060 @ =gUnknown_2022B50
+ ldr r0, _08013060 @ =gBattleTerrain
ldrb r1, [r0]
movs r0, 0
- bl EmitIntroSlide
+ bl BtlController_EmitIntroSlide
ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _08013064 @ =gUnknown_3004F84
+ bl MarkBattlerForControllerExec
+ ldr r1, _08013064 @ =gBattleMainFunc
ldr r0, _08013068 @ =sub_8013070
str r0, [r1]
- ldr r0, _0801306C @ =gUnknown_2023E82
+ ldr r0, _0801306C @ =gBattleCommunication
strb r5, [r0]
strb r5, [r0, 0x1]
_08013050:
@@ -6346,12 +6346,12 @@ _08013050:
pop {r0}
bx r0
.align 2, 0
-_08013058: .4byte gUnknown_2023BC8
+_08013058: .4byte gBattleControllerExecFlags
_0801305C: .4byte gActiveBattler
-_08013060: .4byte gUnknown_2022B50
-_08013064: .4byte gUnknown_3004F84
+_08013060: .4byte gBattleTerrain
+_08013064: .4byte gBattleMainFunc
_08013068: .4byte sub_8013070
-_0801306C: .4byte gUnknown_2023E82
+_0801306C: .4byte gBattleCommunication
thumb_func_end BattleIntroPrepareBackgroundSlide
thumb_func_start sub_8013070
@@ -6361,7 +6361,7 @@ sub_8013070: @ 8013070
mov r6, r9
mov r5, r8
push {r5-r7}
- ldr r0, _080130D4 @ =gUnknown_2023BC8
+ ldr r0, _080130D4 @ =gBattleControllerExecFlags
ldr r1, [r0]
cmp r1, 0
beq _08013084
@@ -6409,7 +6409,7 @@ _080130C6:
bls _080130C6
b _080131B6
.align 2, 0
-_080130D4: .4byte gUnknown_2023BC8
+_080130D4: .4byte gBattleControllerExecFlags
_080130D8: .4byte gActiveBattler
_080130DC: .4byte gBattlersCount
_080130E0: .4byte gBattleMons
@@ -6422,7 +6422,7 @@ _080130E8:
adds r3, r0, r2
movs r2, 0
ldr r6, _08013230 @ =gBaseStats
- ldr r5, _08013234 @ =gUnknown_20233C4
+ ldr r5, _08013234 @ =gBattleBufferB
ldr r4, _08013238 @ =gActiveBattler
_080130FA:
adds r0, r3, r2
@@ -6526,9 +6526,9 @@ _080131B6:
cmp r0, 0
bne _080131D0
movs r0, 0
- bl EmitDrawTrainerPic
+ bl BtlController_EmitDrawTrainerPic
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
_080131D0:
ldr r5, _08013244 @ =gBattleTypeFlags
ldr r0, [r5]
@@ -6543,9 +6543,9 @@ _080131D0:
cmp r0, 0x1
bne _080131F6
movs r0, 0
- bl EmitDrawTrainerPic
+ bl BtlController_EmitDrawTrainerPic
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
_080131F6:
ldrb r0, [r4]
bl GetBattlerSide
@@ -6574,7 +6574,7 @@ _080131F6:
b _080132C2
.align 2, 0
_08013230: .4byte gBaseStats
-_08013234: .4byte gUnknown_20233C4
+_08013234: .4byte gBattleBufferB
_08013238: .4byte gActiveBattler
_0801323C: .4byte gBattleStruct
_08013240: .4byte gUnknown_2023BFC
@@ -6631,10 +6631,10 @@ _0801328E:
bl HandleSetPokedexFlag
_080132B4:
movs r0, 0
- bl EmitLoadMonSprite
+ bl BtlController_EmitLoadMonSprite
mov r1, r9
ldrb r0, [r1]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
_080132C2:
ldr r0, _08013328 @ =gBattleTypeFlags
ldr r0, [r0]
@@ -6657,9 +6657,9 @@ _080132C2:
bne _080132F8
_080132EC:
movs r0, 0
- bl EmitDrawTrainerPic
+ bl BtlController_EmitDrawTrainerPic
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
_080132F8:
mov r2, r9
ldrb r0, [r2]
@@ -6673,7 +6673,7 @@ _080132F8:
bcs _0801330E
b _080130A0
_0801330E:
- ldr r1, _08013334 @ =gUnknown_3004F84
+ ldr r1, _08013334 @ =gBattleMainFunc
ldr r0, _08013338 @ =BattleIntroDrawPartySummaryScreens
str r0, [r1]
_08013314:
@@ -6689,7 +6689,7 @@ _08013324: .4byte 0x0001aa02
_08013328: .4byte gBattleTypeFlags
_0801332C: .4byte gActiveBattler
_08013330: .4byte gBattlersCount
-_08013334: .4byte gUnknown_3004F84
+_08013334: .4byte gBattleMainFunc
_08013338: .4byte BattleIntroDrawPartySummaryScreens
thumb_func_end sub_8013070
@@ -6699,7 +6699,7 @@ BattleIntroDrawPartySummaryScreens: @ 801333C
mov r7, r8
push {r7}
sub sp, 0x30
- ldr r0, _08013394 @ =gUnknown_2023BC8
+ ldr r0, _08013394 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
beq _0801334E
@@ -6742,7 +6742,7 @@ _0801338C:
movs r0, 0
b _080133B6
.align 2, 0
-_08013394: .4byte gUnknown_2023BC8
+_08013394: .4byte gBattleControllerExecFlags
_08013398: .4byte gBattleTypeFlags
_0801339C: .4byte gEnemyParty
_080133A0: .4byte 0x0000ffff
@@ -6768,9 +6768,9 @@ _080133B6:
movs r0, 0
mov r1, sp
movs r2, 0x80
- bl EmitDrawPartyStatusSummary
+ bl BtlController_EmitDrawPartyStatusSummary
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
movs r7, 0
mov r6, r8
mov r5, sp
@@ -6823,15 +6823,15 @@ _0801342E:
movs r0, 0
mov r1, sp
movs r2, 0x80
- bl EmitDrawPartyStatusSummary
+ bl BtlController_EmitDrawPartyStatusSummary
ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _08013460 @ =gUnknown_3004F84
+ bl MarkBattlerForControllerExec
+ ldr r1, _08013460 @ =gBattleMainFunc
ldr r0, _08013464 @ =BattleIntroPrintTrainerWantsToBattle
b _080134C6
.align 2, 0
_0801345C: .4byte gActiveBattler
-_08013460: .4byte gUnknown_3004F84
+_08013460: .4byte gBattleMainFunc
_08013464: .4byte BattleIntroPrintTrainerWantsToBattle
_08013468:
movs r7, 0
@@ -6878,7 +6878,7 @@ _080134B6:
adds r7, 0x1
cmp r7, 0x5
ble _0801346E
- ldr r1, _080134D4 @ =gUnknown_3004F84
+ ldr r1, _080134D4 @ =gBattleMainFunc
ldr r0, _080134D8 @ =sub_8013514
_080134C6:
str r0, [r1]
@@ -6890,14 +6890,14 @@ _080134C8:
pop {r0}
bx r0
.align 2, 0
-_080134D4: .4byte gUnknown_3004F84
+_080134D4: .4byte gBattleMainFunc
_080134D8: .4byte sub_8013514
thumb_func_end BattleIntroDrawPartySummaryScreens
thumb_func_start BattleIntroPrintTrainerWantsToBattle
BattleIntroPrintTrainerWantsToBattle: @ 80134DC
push {lr}
- ldr r0, _08013504 @ =gUnknown_2023BC8
+ ldr r0, _08013504 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
bne _080134FE
@@ -6908,27 +6908,27 @@ BattleIntroPrintTrainerWantsToBattle: @ 80134DC
ldrb r1, [r1]
movs r0, 0
bl PrepareStringBattle
- ldr r1, _0801350C @ =gUnknown_3004F84
+ ldr r1, _0801350C @ =gBattleMainFunc
ldr r0, _08013510 @ =sub_8013568
str r0, [r1]
_080134FE:
pop {r0}
bx r0
.align 2, 0
-_08013504: .4byte gUnknown_2023BC8
+_08013504: .4byte gBattleControllerExecFlags
_08013508: .4byte gActiveBattler
-_0801350C: .4byte gUnknown_3004F84
+_0801350C: .4byte gBattleMainFunc
_08013510: .4byte sub_8013568
thumb_func_end BattleIntroPrintTrainerWantsToBattle
thumb_func_start sub_8013514
sub_8013514: @ 8013514
push {lr}
- ldr r0, _08013550 @ =gUnknown_2023BC8
+ ldr r0, _08013550 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
bne _0801354A
- ldr r1, _08013554 @ =gUnknown_3004F84
+ ldr r1, _08013554 @ =gBattleMainFunc
ldr r0, _08013558 @ =sub_80136E4
str r0, [r1]
movs r0, 0
@@ -6951,8 +6951,8 @@ _0801354A:
pop {r0}
bx r0
.align 2, 0
-_08013550: .4byte gUnknown_2023BC8
-_08013554: .4byte gUnknown_3004F84
+_08013550: .4byte gBattleControllerExecFlags
+_08013554: .4byte gBattleMainFunc
_08013558: .4byte sub_80136E4
_0801355C: .4byte gBattleTypeFlags
_08013560: .4byte gBattleScripting
@@ -6962,7 +6962,7 @@ _08013564: .4byte gUnknown_81D91A1
thumb_func_start sub_8013568
sub_8013568: @ 8013568
push {lr}
- ldr r0, _08013590 @ =gUnknown_2023BC8
+ ldr r0, _08013590 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
bne _0801358A
@@ -6973,22 +6973,22 @@ sub_8013568: @ 8013568
lsrs r1, 24
movs r0, 0x1
bl PrepareStringBattle
- ldr r1, _08013594 @ =gUnknown_3004F84
+ ldr r1, _08013594 @ =gBattleMainFunc
ldr r0, _08013598 @ =sub_801359C
str r0, [r1]
_0801358A:
pop {r0}
bx r0
.align 2, 0
-_08013590: .4byte gUnknown_2023BC8
-_08013594: .4byte gUnknown_3004F84
+_08013590: .4byte gBattleControllerExecFlags
+_08013594: .4byte gBattleMainFunc
_08013598: .4byte sub_801359C
thumb_func_end sub_8013568
thumb_func_start sub_801359C
sub_801359C: @ 801359C
push {r4,lr}
- ldr r0, _08013614 @ =gUnknown_2023BC8
+ ldr r0, _08013614 @ =gBattleControllerExecFlags
ldr r1, [r0]
cmp r1, 0
bne _0801360C
@@ -7007,9 +7007,9 @@ _080135B4:
cmp r0, 0x1
bne _080135CE
movs r0, 0
- bl EmitIntroTrainerBallThrow
+ bl BtlController_EmitIntroTrainerBallThrow
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
_080135CE:
ldr r0, _08013620 @ =gBattleTypeFlags
ldr r0, [r0]
@@ -7024,9 +7024,9 @@ _080135CE:
cmp r0, 0x3
bne _080135F4
movs r0, 0
- bl EmitIntroTrainerBallThrow
+ bl BtlController_EmitIntroTrainerBallThrow
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
_080135F4:
ldrb r0, [r4]
adds r0, 0x1
@@ -7038,7 +7038,7 @@ _080135F4:
cmp r0, r1
bcc _080135B4
_08013606:
- ldr r1, _08013624 @ =gUnknown_3004F84
+ ldr r1, _08013624 @ =gBattleMainFunc
ldr r0, _08013628 @ =sub_801362C
str r0, [r1]
_0801360C:
@@ -7046,18 +7046,18 @@ _0801360C:
pop {r0}
bx r0
.align 2, 0
-_08013614: .4byte gUnknown_2023BC8
+_08013614: .4byte gBattleControllerExecFlags
_08013618: .4byte gActiveBattler
_0801361C: .4byte gBattlersCount
_08013620: .4byte gBattleTypeFlags
-_08013624: .4byte gUnknown_3004F84
+_08013624: .4byte gBattleMainFunc
_08013628: .4byte sub_801362C
thumb_func_end sub_801359C
thumb_func_start sub_801362C
sub_801362C: @ 801362C
push {r4-r7,lr}
- ldr r0, _080136A4 @ =gUnknown_2023BC8
+ ldr r0, _080136A4 @ =gBattleControllerExecFlags
ldr r1, [r0]
cmp r1, 0
bne _0801369C
@@ -7109,7 +7109,7 @@ _08013684:
cmp r0, r1
bcc _0801364C
_08013696:
- ldr r1, _080136BC @ =gUnknown_3004F84
+ ldr r1, _080136BC @ =gBattleMainFunc
ldr r0, _080136C0 @ =sub_80136E4
str r0, [r1]
_0801369C:
@@ -7117,39 +7117,39 @@ _0801369C:
pop {r0}
bx r0
.align 2, 0
-_080136A4: .4byte gUnknown_2023BC8
+_080136A4: .4byte gBattleControllerExecFlags
_080136A8: .4byte gActiveBattler
_080136AC: .4byte gBattlersCount
_080136B0: .4byte gBattleMons
_080136B4: .4byte gBattleTypeFlags
_080136B8: .4byte 0x0001aa02
-_080136BC: .4byte gUnknown_3004F84
+_080136BC: .4byte gBattleMainFunc
_080136C0: .4byte sub_80136E4
thumb_func_end sub_801362C
thumb_func_start sub_80136C4
sub_80136C4: @ 80136C4
push {lr}
- ldr r0, _080136D8 @ =gUnknown_2023BC8
+ ldr r0, _080136D8 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
bne _080136D4
- ldr r1, _080136DC @ =gUnknown_3004F84
+ ldr r1, _080136DC @ =gBattleMainFunc
ldr r0, _080136E0 @ =sub_80136E4
str r0, [r1]
_080136D4:
pop {r0}
bx r0
.align 2, 0
-_080136D8: .4byte gUnknown_2023BC8
-_080136DC: .4byte gUnknown_3004F84
+_080136D8: .4byte gBattleControllerExecFlags
+_080136DC: .4byte gBattleMainFunc
_080136E0: .4byte sub_80136E4
thumb_func_end sub_80136C4
thumb_func_start sub_80136E4
sub_80136E4: @ 80136E4
push {lr}
- ldr r0, _08013718 @ =gUnknown_2023BC8
+ ldr r0, _08013718 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
bne _08013712
@@ -7167,23 +7167,23 @@ sub_80136E4: @ 80136E4
movs r0, 0x1
bl PrepareStringBattle
_0801370C:
- ldr r1, _08013720 @ =gUnknown_3004F84
+ ldr r1, _08013720 @ =gBattleMainFunc
ldr r0, _08013724 @ =sub_8013728
str r0, [r1]
_08013712:
pop {r0}
bx r0
.align 2, 0
-_08013718: .4byte gUnknown_2023BC8
+_08013718: .4byte gBattleControllerExecFlags
_0801371C: .4byte gBattleTypeFlags
-_08013720: .4byte gUnknown_3004F84
+_08013720: .4byte gBattleMainFunc
_08013724: .4byte sub_8013728
thumb_func_end sub_80136E4
thumb_func_start sub_8013728
sub_8013728: @ 8013728
push {r4,lr}
- ldr r0, _080137B4 @ =gUnknown_2023BC8
+ ldr r0, _080137B4 @ =gBattleControllerExecFlags
ldr r1, [r0]
cmp r1, 0
bne _080137AC
@@ -7201,9 +7201,9 @@ _08013740:
cmp r0, 0
bne _08013758
movs r0, 0
- bl EmitIntroTrainerBallThrow
+ bl BtlController_EmitIntroTrainerBallThrow
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
_08013758:
ldr r0, _080137C0 @ =gBattleTypeFlags
ldr r0, [r0]
@@ -7218,9 +7218,9 @@ _08013758:
cmp r0, 0x2
bne _0801377E
movs r0, 0
- bl EmitIntroTrainerBallThrow
+ bl BtlController_EmitIntroTrainerBallThrow
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
_0801377E:
ldrb r0, [r4]
adds r0, 0x1
@@ -7243,7 +7243,7 @@ _08013790:
ldr r0, [r2]
adds r0, 0xB6
strb r1, [r0]
- ldr r1, _080137C8 @ =gUnknown_3004F84
+ ldr r1, _080137C8 @ =gBattleMainFunc
ldr r0, _080137CC @ =sub_801385C
str r0, [r1]
_080137AC:
@@ -7251,19 +7251,19 @@ _080137AC:
pop {r0}
bx r0
.align 2, 0
-_080137B4: .4byte gUnknown_2023BC8
+_080137B4: .4byte gBattleControllerExecFlags
_080137B8: .4byte gActiveBattler
_080137BC: .4byte gBattlersCount
_080137C0: .4byte gBattleTypeFlags
_080137C4: .4byte gBattleStruct
-_080137C8: .4byte gUnknown_3004F84
+_080137C8: .4byte gBattleMainFunc
_080137CC: .4byte sub_801385C
thumb_func_end sub_8013728
thumb_func_start sub_80137D0
sub_80137D0: @ 80137D0
push {r4,r5,lr}
- ldr r0, _08013840 @ =gUnknown_2023BC8
+ ldr r0, _08013840 @ =gBattleControllerExecFlags
ldr r1, [r0]
cmp r1, 0
bne _0801383A
@@ -7287,9 +7287,9 @@ _080137EA:
ldrb r1, [r0]
movs r0, 0
movs r2, 0
- bl EmitSwitchInAnim
+ bl BtlController_EmitSwitchInAnim
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
_0801380C:
ldrb r0, [r4]
adds r0, 0x1
@@ -7312,7 +7312,7 @@ _0801381E:
ldr r0, [r2]
adds r0, 0xB6
strb r1, [r0]
- ldr r1, _08013854 @ =gUnknown_3004F84
+ ldr r1, _08013854 @ =gBattleMainFunc
ldr r0, _08013858 @ =sub_801385C
str r0, [r1]
_0801383A:
@@ -7320,12 +7320,12 @@ _0801383A:
pop {r0}
bx r0
.align 2, 0
-_08013840: .4byte gUnknown_2023BC8
+_08013840: .4byte gBattleControllerExecFlags
_08013844: .4byte gActiveBattler
_08013848: .4byte gBattlersCount
_0801384C: .4byte gBattlerPartyIndexes
_08013850: .4byte gBattleStruct
-_08013854: .4byte gUnknown_3004F84
+_08013854: .4byte gBattleMainFunc
_08013858: .4byte sub_801385C
thumb_func_end sub_80137D0
@@ -7338,7 +7338,7 @@ sub_801385C: @ 801385C
sub sp, 0x8
movs r0, 0
mov r9, r0
- ldr r0, _080138A0 @ =gUnknown_2023BC8
+ ldr r0, _080138A0 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
beq _08013874
@@ -7356,7 +7356,7 @@ _08013874:
ldrb r0, [r1]
cmp r5, r0
bge _0801389A
- ldr r2, _080138AC @ =gUnknown_2023BDE
+ ldr r2, _080138AC @ =gBattlerByTurnOrder
_0801388E:
adds r0, r5, r2
strb r5, [r0]
@@ -7368,17 +7368,17 @@ _0801389A:
movs r5, 0
b _080138F0
.align 2, 0
-_080138A0: .4byte gUnknown_2023BC8
+_080138A0: .4byte gBattleControllerExecFlags
_080138A4: .4byte gBattleStruct
_080138A8: .4byte gBattlersCount
-_080138AC: .4byte gUnknown_2023BDE
+_080138AC: .4byte gBattlerByTurnOrder
_080138B0:
adds r4, r5, 0x1
mov r8, r4
ldrb r1, [r1]
cmp r8, r1
bge _080138EE
- ldr r6, _08013924 @ =gUnknown_2023BDE
+ ldr r6, _08013924 @ =gBattlerByTurnOrder
ldr r3, _08013928 @ =gBattlersCount
lsls r7, r5, 24
_080138C0:
@@ -7434,7 +7434,7 @@ _080138FA:
strb r1, [r0]
b _08013ADA
.align 2, 0
-_08013924: .4byte gUnknown_2023BDE
+_08013924: .4byte gBattlerByTurnOrder
_08013928: .4byte gBattlersCount
_0801392C: .4byte gBattleStruct
_08013930:
@@ -7446,7 +7446,7 @@ _08013930:
ldrb r1, [r1]
cmp r0, r1
bcs _0801398A
- ldr r5, _08013AF0 @ =gUnknown_2023BDE
+ ldr r5, _08013AF0 @ =gBattlerByTurnOrder
adds r4, r2, 0
_08013944:
ldr r0, [r4]
@@ -7519,7 +7519,7 @@ _080139BA:
ldrb r1, [r3]
cmp r0, r1
bcs _08013A14
- ldr r5, _08013AF0 @ =gUnknown_2023BDE
+ ldr r5, _08013AF0 @ =gBattlerByTurnOrder
adds r4, r2, 0
_080139D0:
ldr r0, [r4]
@@ -7530,7 +7530,7 @@ _080139D0:
movs r0, 0
movs r2, 0
str r3, [sp, 0x4]
- bl sub_801BC68
+ bl ItemBattleEffects
lsls r0, 24
ldr r3, [sp, 0x4]
cmp r0, 0
@@ -7570,8 +7570,8 @@ _08013A22:
ldr r1, _08013AE8 @ =gBattleStruct
mov r8, r1
movs r7, 0x6
- ldr r6, _08013AF4 @ =gUnknown_2023D7C
- ldr r2, _08013AF8 @ =gUnknown_2023DC4
+ ldr r6, _08013AF4 @ =gChosenActionByBattler
+ ldr r2, _08013AF8 @ =gChosenMoveByBattler
movs r4, 0xFF
movs r3, 0
_08013A32:
@@ -7598,11 +7598,11 @@ _08013A32:
ldr r1, _08013AFC @ =gAbsentBattlerFlags
ldrb r1, [r1]
strb r1, [r0]
- ldr r1, _08013B00 @ =gUnknown_3004F84
+ ldr r1, _08013B00 @ =gBattleMainFunc
ldr r0, _08013B04 @ =sub_8014040
str r0, [r1]
bl ResetSentPokesToOpponentValue
- ldr r1, _08013B08 @ =gUnknown_2023E82
+ ldr r1, _08013B08 @ =gBattleCommunication
movs r2, 0
adds r0, r1, 0x7
_08013A74:
@@ -7669,13 +7669,13 @@ _08013ADA:
.align 2, 0
_08013AE8: .4byte gBattleStruct
_08013AEC: .4byte gBattlersCount
-_08013AF0: .4byte gUnknown_2023BDE
-_08013AF4: .4byte gUnknown_2023D7C
-_08013AF8: .4byte gUnknown_2023DC4
+_08013AF0: .4byte gBattlerByTurnOrder
+_08013AF4: .4byte gChosenActionByBattler
+_08013AF8: .4byte gChosenMoveByBattler
_08013AFC: .4byte gAbsentBattlerFlags
-_08013B00: .4byte gUnknown_3004F84
+_08013B00: .4byte gBattleMainFunc
_08013B04: .4byte sub_8014040
-_08013B08: .4byte gUnknown_2023E82
+_08013B08: .4byte gBattleCommunication
_08013B0C: .4byte gBattleScripting
_08013B10: .4byte gMoveResultFlags
_08013B14: .4byte gBattleMons
@@ -7685,15 +7685,15 @@ _08013B18: .4byte gUnknown_2023E80
thumb_func_start sub_8013B1C
sub_8013B1C: @ 8013B1C
push {r4-r6,lr}
- ldr r0, _08013BB4 @ =gUnknown_2023BC8
+ ldr r0, _08013BB4 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
bne _08013BAC
- ldr r1, _08013BB8 @ =gUnknown_3004F84
- ldr r0, _08013BBC @ =sub_8013BD4
+ ldr r1, _08013BB8 @ =gBattleMainFunc
+ ldr r0, _08013BBC @ =BattleTurnPassed
str r0, [r1]
ldr r3, _08013BC0 @ =gBattlersCount
- ldr r1, _08013BC4 @ =gUnknown_2023E82
+ ldr r1, _08013BC4 @ =gBattleCommunication
movs r2, 0
adds r0, r1, 0x7
_08013B34:
@@ -7764,18 +7764,18 @@ _08013BAC:
pop {r0}
bx r0
.align 2, 0
-_08013BB4: .4byte gUnknown_2023BC8
-_08013BB8: .4byte gUnknown_3004F84
-_08013BBC: .4byte sub_8013BD4
+_08013BB4: .4byte gBattleControllerExecFlags
+_08013BB8: .4byte gBattleMainFunc
+_08013BBC: .4byte BattleTurnPassed
_08013BC0: .4byte gBattlersCount
-_08013BC4: .4byte gUnknown_2023E82
+_08013BC4: .4byte gBattleCommunication
_08013BC8: .4byte gBattleMons
_08013BCC: .4byte gBattleStruct
_08013BD0: .4byte gMoveResultFlags
thumb_func_end sub_8013B1C
- thumb_func_start sub_8013BD4
-sub_8013BD4: @ 8013BD4
+ thumb_func_start BattleTurnPassed
+BattleTurnPassed: @ 8013BD4
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -7787,13 +7787,13 @@ sub_8013BD4: @ 8013BD4
ldrb r0, [r0]
cmp r0, 0
bne _08013C04
- bl UpdateTurnCounters
+ bl DoFieldEndTurnEffects
lsls r0, 24
cmp r0, 0
beq _08013BF8
b _08013D20
_08013BF8:
- bl TurnBasedEffects
+ bl DoBattlerEndTurnEffects
lsls r0, 24
cmp r0, 0
beq _08013C04
@@ -7810,14 +7810,14 @@ _08013C12:
ldr r0, [r0]
adds r0, 0x4D
strb r1, [r0]
- bl sub_8018C98
+ bl HandleWishPerishSongOnTurnEnd
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0
bne _08013D20
movs r0, 0
bl TurnValuesCleanUp
- ldr r2, _08013C80 @ =gUnknown_2023DD0
+ ldr r2, _08013C80 @ =gHitMarker
ldr r0, [r2]
ldr r1, _08013C84 @ =0xfffffdff
ands r0, r1
@@ -7836,7 +7836,7 @@ _08013C12:
str r4, [r0]
ldr r0, _08013C9C @ =gMoveResultFlags
strb r4, [r0]
- ldr r1, _08013CA0 @ =gUnknown_2023E82
+ ldr r1, _08013CA0 @ =gBattleCommunication
movs r2, 0
adds r0, r1, 0x4
_08013C58:
@@ -7848,17 +7848,17 @@ _08013C58:
ldrb r0, [r0]
cmp r0, 0
beq _08013CB0
- ldr r1, _08013CA4 @ =gUnknown_2023BE3
+ ldr r1, _08013CA4 @ =gCurrentActionFuncId
movs r0, 0xC
strb r0, [r1]
- ldr r1, _08013CA8 @ =gUnknown_3004F84
+ ldr r1, _08013CA8 @ =gBattleMainFunc
ldr r0, _08013CAC @ =RunTurnActionsFunctions
str r0, [r1]
b _08013D20
.align 2, 0
_08013C78: .4byte gBattleOutcome
_08013C7C: .4byte gBattleStruct
-_08013C80: .4byte gUnknown_2023DD0
+_08013C80: .4byte gHitMarker
_08013C84: .4byte 0xfffffdff
_08013C88: .4byte 0xfff7ffff
_08013C8C: .4byte 0xffbfffff
@@ -7866,9 +7866,9 @@ _08013C90: .4byte 0xffefffff
_08013C94: .4byte gBattleScripting
_08013C98: .4byte gBattleMoveDamage
_08013C9C: .4byte gMoveResultFlags
-_08013CA0: .4byte gUnknown_2023E82
-_08013CA4: .4byte gUnknown_2023BE3
-_08013CA8: .4byte gUnknown_3004F84
+_08013CA0: .4byte gBattleCommunication
+_08013CA4: .4byte gCurrentActionFuncId
+_08013CA8: .4byte gBattleMainFunc
_08013CAC: .4byte RunTurnActionsFunctions
_08013CB0:
ldr r1, _08013D30 @ =gBattleResults
@@ -7882,7 +7882,7 @@ _08013CBC:
ldr r4, _08013D34 @ =gBattlersCount
ldr r0, _08013D38 @ =gBattleStruct
mov r8, r0
- ldr r1, _08013D3C @ =gUnknown_3004F84
+ ldr r1, _08013D3C @ =gBattleMainFunc
mov r10, r1
ldr r0, _08013D40 @ =gAbsentBattlerFlags
mov r12, r0
@@ -7891,10 +7891,10 @@ _08013CBC:
ldrb r0, [r4]
cmp r2, r0
bge _08013CF2
- ldr r7, _08013D48 @ =gUnknown_2023D7C
+ ldr r7, _08013D48 @ =gChosenActionByBattler
movs r6, 0xFF
movs r5, 0
- ldr r3, _08013D4C @ =gUnknown_2023DC4
+ ldr r3, _08013D4C @ =gChosenMoveByBattler
_08013CDE:
adds r1, r2, r7
ldrb r0, [r1]
@@ -7942,13 +7942,13 @@ _08013D20:
_08013D30: .4byte gBattleResults
_08013D34: .4byte gBattlersCount
_08013D38: .4byte gBattleStruct
-_08013D3C: .4byte gUnknown_3004F84
+_08013D3C: .4byte gBattleMainFunc
_08013D40: .4byte gAbsentBattlerFlags
_08013D44: .4byte sub_8014040
-_08013D48: .4byte gUnknown_2023D7C
-_08013D4C: .4byte gUnknown_2023DC4
+_08013D48: .4byte gChosenActionByBattler
+_08013D4C: .4byte gChosenMoveByBattler
_08013D50: .4byte gUnknown_2023E80
- thumb_func_end sub_8013BD4
+ thumb_func_end BattleTurnPassed
thumb_func_start IsRunningFromBattleImpossible
IsRunningFromBattleImpossible: @ 8013D54
@@ -8120,7 +8120,7 @@ _08013E8A:
adds r0, 0x20
ldrb r0, [r0]
strb r0, [r2]
- ldr r1, _08013EC0 @ =gUnknown_2023E82
+ ldr r1, _08013EC0 @ =gBattleCommunication
movs r0, 0x2
b _08013F5C
.align 2, 0
@@ -8131,7 +8131,7 @@ _08013EB0: .4byte gBattleMons
_08013EB4: .4byte gBattlersCount
_08013EB8: .4byte gBattleScripting
_08013EBC: .4byte gLastUsedAbility
-_08013EC0: .4byte gUnknown_2023E82
+_08013EC0: .4byte gBattleCommunication
_08013EC4:
ldr r1, _08013EF8 @ =gBattleMons
ldr r0, _08013EFC @ =gActiveBattler
@@ -8155,7 +8155,7 @@ _08013EC4:
cmp r0, 0
beq _08013F0C
_08013EEE:
- ldr r1, _08013F08 @ =gUnknown_2023E82
+ ldr r1, _08013F08 @ =gBattleCommunication
movs r0, 0
strb r0, [r1, 0x5]
movs r0, 0x1
@@ -8165,7 +8165,7 @@ _08013EF8: .4byte gBattleMons
_08013EFC: .4byte gActiveBattler
_08013F00: .4byte 0x0400e000
_08013F04: .4byte gStatuses3
-_08013F08: .4byte gUnknown_2023E82
+_08013F08: .4byte gBattleCommunication
_08013F0C:
ldr r0, _08013F1C @ =gBattleTypeFlags
ldr r0, [r0]
@@ -8184,28 +8184,28 @@ _08013F20:
ldr r1, _08013F34 @ =gLastUsedAbility
ldrb r0, [r2]
strb r0, [r1]
- ldr r1, _08013F38 @ =gUnknown_2023E82
+ ldr r1, _08013F38 @ =gBattleCommunication
movs r0, 0x2
b _08013F5C
.align 2, 0
_08013F30: .4byte gBattleScripting
_08013F34: .4byte gLastUsedAbility
-_08013F38: .4byte gUnknown_2023E82
+_08013F38: .4byte gBattleCommunication
_08013F3C:
ldr r0, _08013F4C @ =gBattleScripting
strb r5, [r0, 0x17]
ldr r1, _08013F50 @ =gLastUsedAbility
ldrb r0, [r2]
strb r0, [r1]
- ldr r1, _08013F54 @ =gUnknown_2023E82
+ ldr r1, _08013F54 @ =gBattleCommunication
movs r0, 0x2
b _08013F5C
.align 2, 0
_08013F4C: .4byte gBattleScripting
_08013F50: .4byte gLastUsedAbility
-_08013F54: .4byte gUnknown_2023E82
+_08013F54: .4byte gBattleCommunication
_08013F58:
- ldr r1, _08013F68 @ =gUnknown_2023E82
+ ldr r1, _08013F68 @ =gBattleCommunication
movs r0, 0x1
_08013F5C:
strb r0, [r1, 0x5]
@@ -8215,7 +8215,7 @@ _08013F5E:
pop {r1}
bx r1
.align 2, 0
-_08013F68: .4byte gUnknown_2023E82
+_08013F68: .4byte gBattleCommunication
thumb_func_end IsRunningFromBattleImpossible
thumb_func_start sub_8013F6C
@@ -8335,7 +8335,7 @@ sub_8014040: @ 8014040
mov r5, r8
push {r5-r7}
sub sp, 0x1C
- ldr r0, _0801408C @ =gUnknown_2023E82
+ ldr r0, _0801408C @ =gBattleCommunication
movs r1, 0
strb r1, [r0, 0x4]
ldr r0, _08014090 @ =gActiveBattler
@@ -8352,7 +8352,7 @@ _08014064:
bl GetBattlerPosition
lsls r0, 24
lsrs r5, r0, 24
- ldr r1, _0801408C @ =gUnknown_2023E82
+ ldr r1, _0801408C @ =gBattleCommunication
ldrb r0, [r4]
adds r0, r1
ldrb r0, [r0]
@@ -8366,7 +8366,7 @@ _08014080:
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_0801408C: .4byte gUnknown_2023E82
+_0801408C: .4byte gBattleCommunication
_08014090: .4byte gActiveBattler
_08014094: .4byte gBattlersCount
_08014098: .4byte _0801409C
@@ -8413,7 +8413,7 @@ _080140B8:
ands r1, r0
cmp r1, 0
bne _08014114
- ldr r4, _08014160 @ =gUnknown_2023E82
+ ldr r4, _08014160 @ =gBattleCommunication
adds r0, r5, 0
bl GetBattlerAtPosition
lsls r0, 24
@@ -8437,7 +8437,7 @@ _08014114:
ands r3, r0
cmp r3, 0
beq _0801417C
- ldr r0, _08014164 @ =gUnknown_2023D7C
+ ldr r0, _08014164 @ =gChosenActionByBattler
adds r0, r2, r0
movs r1, 0xD
strb r1, [r0]
@@ -8447,7 +8447,7 @@ _08014114:
ands r0, r1
cmp r0, 0
bne _08014168
- ldr r0, _08014160 @ =gUnknown_2023E82
+ ldr r0, _08014160 @ =gBattleCommunication
ldrb r1, [r4]
adds r1, r0
movs r0, 0x4
@@ -8458,17 +8458,17 @@ _08014150: .4byte gActiveBattler
_08014154: .4byte gBattleStruct
_08014158: .4byte gBattleTypeFlags
_0801415C: .4byte gBitTable
-_08014160: .4byte gUnknown_2023E82
-_08014164: .4byte gUnknown_2023D7C
+_08014160: .4byte gBattleCommunication
+_08014164: .4byte gChosenActionByBattler
_08014168:
- ldr r0, _08014178 @ =gUnknown_2023E82
+ ldr r0, _08014178 @ =gBattleCommunication
ldrb r1, [r4]
adds r1, r0
movs r0, 0x3
strb r0, [r1]
bl _08014C4E
.align 2, 0
-_08014178: .4byte gUnknown_2023E82
+_08014178: .4byte gBattleCommunication
_0801417C:
ldr r1, _080141B0 @ =gBattleMons
movs r0, 0x58
@@ -8487,10 +8487,10 @@ _0801417C:
cmp r1, 0
beq _080141BC
_0801419C:
- ldr r0, _080141B4 @ =gUnknown_2023D7C
+ ldr r0, _080141B4 @ =gChosenActionByBattler
adds r0, r2, r0
strb r3, [r0]
- ldr r1, _080141B8 @ =gUnknown_2023E82
+ ldr r1, _080141B8 @ =gBattleCommunication
ldrb r0, [r4]
adds r0, r1
movs r1, 0x3
@@ -8498,24 +8498,24 @@ _0801419C:
bl _08014C4E
.align 2, 0
_080141B0: .4byte gBattleMons
-_080141B4: .4byte gUnknown_2023D7C
-_080141B8: .4byte gUnknown_2023E82
+_080141B4: .4byte gChosenActionByBattler
+_080141B8: .4byte gBattleCommunication
_080141BC:
- ldr r0, _080141D4 @ =gUnknown_2023D7C
+ ldr r0, _080141D4 @ =gChosenActionByBattler
ldrb r1, [r0]
- ldr r0, _080141D8 @ =gUnknown_20233C4
+ ldr r0, _080141D8 @ =gBattleBufferB
ldrb r2, [r0, 0x1]
ldrb r0, [r0, 0x2]
lsls r0, 8
orrs r2, r0
movs r0, 0
- bl EmitChooseAction
+ bl BtlController_EmitChooseAction
bl _08014B26
.align 2, 0
-_080141D4: .4byte gUnknown_2023D7C
-_080141D8: .4byte gUnknown_20233C4
+_080141D4: .4byte gChosenActionByBattler
+_080141D8: .4byte gBattleBufferB
_080141DC:
- ldr r4, _08014234 @ =gUnknown_2023BC8
+ ldr r4, _08014234 @ =gBattleControllerExecFlags
ldr r1, _08014238 @ =gBitTable
ldr r3, _0801423C @ =gActiveBattler
ldrb r5, [r3]
@@ -8538,9 +8538,9 @@ _080141DC:
beq _0801420A
bl _08014C4E
_0801420A:
- ldr r2, _08014240 @ =gUnknown_2023D7C
+ ldr r2, _08014240 @ =gChosenActionByBattler
adds r2, r5, r2
- ldr r1, _08014244 @ =gUnknown_20233C4
+ ldr r1, _08014244 @ =gBattleBufferB
lsls r0, r5, 9
adds r1, 0x1
adds r0, r1
@@ -8560,11 +8560,11 @@ _08014228:
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_08014234: .4byte gUnknown_2023BC8
+_08014234: .4byte gBattleControllerExecFlags
_08014238: .4byte gBitTable
_0801423C: .4byte gActiveBattler
-_08014240: .4byte gUnknown_2023D7C
-_08014244: .4byte gUnknown_20233C4
+_08014240: .4byte gChosenActionByBattler
+_08014244: .4byte gBattleBufferB
_08014248: .4byte _0801424C
.align 2, 0
_0801424C:
@@ -8582,11 +8582,11 @@ _0801424C:
.4byte _080146AC
.4byte _08014670
_08014280:
- bl sub_8017998
+ bl AreAllMovesUnusable
lsls r0, 24
cmp r0, 0
beq _080142D8
- ldr r0, _080142C8 @ =gUnknown_2023E82
+ ldr r0, _080142C8 @ =gBattleCommunication
ldr r3, _080142CC @ =gActiveBattler
ldrb r1, [r3]
adds r1, r0
@@ -8608,7 +8608,7 @@ _08014280:
ldrb r1, [r3]
ldr r2, [r2]
adds r2, r1, r2
- ldr r0, _080142D4 @ =gUnknown_20233C4
+ ldr r0, _080142D4 @ =gBattleBufferB
lsls r1, 9
adds r0, 0x3
adds r1, r0
@@ -8616,10 +8616,10 @@ _08014280:
strb r0, [r2, 0xC]
bl _08014C78
.align 2, 0
-_080142C8: .4byte gUnknown_2023E82
+_080142C8: .4byte gBattleCommunication
_080142CC: .4byte gActiveBattler
_080142D0: .4byte gBattleStruct
-_080142D4: .4byte gUnknown_20233C4
+_080142D4: .4byte gBattleBufferB
_080142D8:
ldr r3, _08014318 @ =gDisableStructs
ldr r5, _0801431C @ =gActiveBattler
@@ -8631,7 +8631,7 @@ _080142D8:
ldrh r2, [r0, 0x6]
cmp r2, 0
beq _0801432C
- ldr r1, _08014320 @ =gUnknown_2023DC4
+ ldr r1, _08014320 @ =gChosenMoveByBattler
lsls r0, r4, 1
adds r0, r1
strh r2, [r0]
@@ -8646,7 +8646,7 @@ _080142D8:
adds r0, r3
ldrb r0, [r0, 0xC]
strb r0, [r1]
- ldr r1, _08014328 @ =gUnknown_2023E82
+ ldr r1, _08014328 @ =gBattleCommunication
ldrb r0, [r5]
adds r0, r1
movs r1, 0x3
@@ -8655,9 +8655,9 @@ _080142D8:
.align 2, 0
_08014318: .4byte gDisableStructs
_0801431C: .4byte gActiveBattler
-_08014320: .4byte gUnknown_2023DC4
+_08014320: .4byte gChosenMoveByBattler
_08014324: .4byte gBattleStruct
-_08014328: .4byte gUnknown_2023E82
+_08014328: .4byte gBattleCommunication
_0801432C:
add r2, sp, 0x4
ldr r3, _080143CC @ =gBattleMons
@@ -8736,7 +8736,7 @@ _0801436E:
movs r0, 0
movs r2, 0
add r3, sp, 0x4
- bl EmitChooseMove
+ bl BtlController_EmitChooseMove
b _0801460E
.align 2, 0
_080143CC: .4byte gBattleMons
@@ -8748,14 +8748,14 @@ _080143D4:
ands r0, r1
cmp r0, 0
beq _08014428
- ldr r1, _08014418 @ =gUnknown_2023D80
+ ldr r1, _08014418 @ =gSelectionBattleScripts
mov r3, r8
ldrb r0, [r3]
lsls r0, 2
adds r0, r1
ldr r1, _0801441C @ =gUnknown_81D96A4
str r1, [r0]
- ldr r0, _08014420 @ =gUnknown_2023E82
+ ldr r0, _08014420 @ =gBattleCommunication
ldrb r1, [r3]
adds r1, r0
movs r3, 0
@@ -8774,9 +8774,9 @@ _080143D4:
.align 2, 0
_08014410: .4byte gBattleTypeFlags
_08014414: .4byte 0x00000902
-_08014418: .4byte gUnknown_2023D80
+_08014418: .4byte gSelectionBattleScripts
_0801441C: .4byte gUnknown_81D96A4
-_08014420: .4byte gUnknown_2023E82
+_08014420: .4byte gBattleCommunication
_08014424: .4byte gBattleStruct
_08014428:
ldr r2, _08014448 @ =gBattleStruct
@@ -8788,9 +8788,9 @@ _08014428:
ldr r1, [r2]
adds r1, r0
movs r0, 0
- bl EmitChooseItem
+ bl BtlController_EmitChooseItem
ldrb r0, [r4]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
b _080146AC
.align 2, 0
_08014448: .4byte gBattleStruct
@@ -8934,7 +8934,7 @@ _08014548:
str r0, [sp]
movs r0, 0
movs r2, 0x6
- bl EmitChoosePokemon
+ bl BtlController_EmitChoosePokemon
b _0801460E
.align 2, 0
_08014574: .4byte gActiveBattler
@@ -8947,7 +8947,7 @@ _08014584:
mov r8, r0
cmp r1, 0x2
bne _080145B4
- ldr r0, _080145AC @ =gUnknown_2023D7C
+ ldr r0, _080145AC @ =gChosenActionByBattler
ldrb r0, [r0]
cmp r0, 0x2
bne _080145B4
@@ -8961,14 +8961,14 @@ _08014584:
b _080145D0
.align 2, 0
_080145A8: .4byte gActiveBattler
-_080145AC: .4byte gUnknown_2023D7C
+_080145AC: .4byte gChosenActionByBattler
_080145B0: .4byte gBattleStruct
_080145B4:
mov r1, r8
ldrb r0, [r1]
cmp r0, 0x3
bne _080145F0
- ldr r0, _080145E8 @ =gUnknown_2023D7C
+ ldr r0, _080145E8 @ =gChosenActionByBattler
ldrb r0, [r0, 0x1]
cmp r0, 0x2
bne _080145F0
@@ -8988,10 +8988,10 @@ _080145D0:
movs r1, 0
_080145DE:
movs r3, 0
- bl EmitChoosePokemon
+ bl BtlController_EmitChoosePokemon
b _0801460E
.align 2, 0
-_080145E8: .4byte gUnknown_2023D7C
+_080145E8: .4byte gChosenActionByBattler
_080145EC: .4byte gBattleStruct
_080145F0:
ldr r2, _08014618 @ =gBattleStruct
@@ -9007,11 +9007,11 @@ _080145F0:
movs r1, 0
movs r2, 0x6
movs r3, 0
- bl EmitChoosePokemon
+ bl BtlController_EmitChoosePokemon
_0801460E:
ldr r0, _0801461C @ =gActiveBattler
ldrb r0, [r0]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
b _080146AC
.align 2, 0
_08014618: .4byte gBattleStruct
@@ -9021,14 +9021,14 @@ _08014620:
lsls r0, 24
cmp r0, 0
beq _080146AC
- ldr r1, _0801465C @ =gUnknown_2023D80
+ ldr r1, _0801465C @ =gSelectionBattleScripts
ldr r3, _08014660 @ =gActiveBattler
ldrb r0, [r3]
lsls r0, 2
adds r0, r1
ldr r1, _08014664 @ =gUnknown_81D8949
str r1, [r0]
- ldr r0, _08014668 @ =gUnknown_2023E82
+ ldr r0, _08014668 @ =gBattleCommunication
ldrb r1, [r3]
adds r1, r0
movs r4, 0
@@ -9047,13 +9047,13 @@ _08014620:
strb r4, [r0]
b _08014C78
.align 2, 0
-_0801465C: .4byte gUnknown_2023D80
+_0801465C: .4byte gSelectionBattleScripts
_08014660: .4byte gActiveBattler
_08014664: .4byte gUnknown_81D8949
-_08014668: .4byte gUnknown_2023E82
+_08014668: .4byte gBattleCommunication
_0801466C: .4byte gBattleStruct
_08014670:
- ldr r4, _080146A8 @ =gUnknown_2023E82
+ ldr r4, _080146A8 @ =gBattleCommunication
mov r2, r8
ldrb r1, [r2]
adds r1, r4
@@ -9072,13 +9072,13 @@ _08014670:
adds r0, r4
strb r5, [r0]
movs r0, 0
- bl EmitCmd50
+ bl BtlController_EmitEndBounceEffect
mov r3, r8
ldrb r0, [r3]
- bl MarkBufferBankForExecution
+ bl MarkBattlerForControllerExec
b _08014C78
.align 2, 0
-_080146A8: .4byte gUnknown_2023E82
+_080146A8: .4byte gBattleCommunication
_080146AC:
ldr r0, _080146D8 @ =gBattleTypeFlags
ldr r0, [r0]
@@ -9086,7 +9086,7 @@ _080146AC:
ands r0, r1
cmp r0, 0x8
bne _080146EC
- ldr r0, _080146DC @ =gUnknown_20233C4
+ ldr r0, _080146DC @ =gBattleBufferB
ldr r4, _080146E0 @ =gActiveBattler
ldrb r1, [r4]
lsls r1, 9
@@ -9097,22 +9097,22 @@ _080146AC:
bne _080146EC
ldr r0, _080146E4 @ =gUnknown_81D8924
bl BattleScriptExecute
- ldr r1, _080146E8 @ =gUnknown_2023E82
+ ldr r1, _080146E8 @ =gBattleCommunication
ldrb r0, [r4]
adds r0, r1
b _08014926
.align 2, 0
_080146D8: .4byte gBattleTypeFlags
-_080146DC: .4byte gUnknown_20233C4
+_080146DC: .4byte gBattleBufferB
_080146E0: .4byte gActiveBattler
_080146E4: .4byte gUnknown_81D8924
-_080146E8: .4byte gUnknown_2023E82
+_080146E8: .4byte gBattleCommunication
_080146EC:
bl IsRunningFromBattleImpossible
lsls r0, 24
cmp r0, 0
beq _08014750
- ldr r0, _08014738 @ =gUnknown_20233C4
+ ldr r0, _08014738 @ =gBattleBufferB
ldr r4, _0801473C @ =gActiveBattler
ldrb r2, [r4]
lsls r1, r2, 9
@@ -9121,12 +9121,12 @@ _080146EC:
ldrb r0, [r1]
cmp r0, 0x3
bne _08014750
- ldr r1, _08014740 @ =gUnknown_2023D80
+ ldr r1, _08014740 @ =gSelectionBattleScripts
lsls r0, r2, 2
adds r0, r1
ldr r1, _08014744 @ =gUnknown_81D8943
str r1, [r0]
- ldr r0, _08014748 @ =gUnknown_2023E82
+ ldr r0, _08014748 @ =gBattleCommunication
ldrb r1, [r4]
adds r1, r0
movs r3, 0
@@ -9146,23 +9146,23 @@ _0801472C:
strb r3, [r0]
b _08014C78
.align 2, 0
-_08014738: .4byte gUnknown_20233C4
+_08014738: .4byte gBattleBufferB
_0801473C: .4byte gActiveBattler
-_08014740: .4byte gUnknown_2023D80
+_08014740: .4byte gSelectionBattleScripts
_08014744: .4byte gUnknown_81D8943
-_08014748: .4byte gUnknown_2023E82
+_08014748: .4byte gBattleCommunication
_0801474C: .4byte gBattleStruct
_08014750:
- ldr r2, _0801475C @ =gUnknown_2023E82
+ ldr r2, _0801475C @ =gBattleCommunication
ldr r0, _08014760 @ =gActiveBattler
ldrb r1, [r0]
adds r1, r2
b _08014B32
.align 2, 0
-_0801475C: .4byte gUnknown_2023E82
+_0801475C: .4byte gBattleCommunication
_08014760: .4byte gActiveBattler
_08014764:
- ldr r4, _080147A8 @ =gUnknown_2023BC8
+ ldr r4, _080147A8 @ =gBattleControllerExecFlags
ldr r1, _080147AC @ =gBitTable
ldr r3, _080147B0 @ =gActiveBattler
ldrb r5, [r3]
@@ -9185,7 +9185,7 @@ _08014764:
beq _08014790
b _08014C4E
_08014790:
- ldr r1, _080147B4 @ =gUnknown_2023D7C
+ ldr r1, _080147B4 @ =gChosenActionByBattler
adds r0, r5, r1
ldrb r0, [r0]
adds r3, r1, 0
@@ -9199,10 +9199,10 @@ _0801479E:
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_080147A8: .4byte gUnknown_2023BC8
+_080147A8: .4byte gBattleControllerExecFlags
_080147AC: .4byte gBitTable
_080147B0: .4byte gActiveBattler
-_080147B4: .4byte gUnknown_2023D7C
+_080147B4: .4byte gChosenActionByBattler
_080147B8: .4byte _080147BC
.align 2, 0
_080147BC:
@@ -9217,7 +9217,7 @@ _080147BC:
.4byte _08014A68
.4byte _08014A8C
_080147E4:
- ldr r0, _08014804 @ =gUnknown_20233C4
+ ldr r0, _08014804 @ =gBattleBufferB
mov r1, r8
ldrb r4, [r1]
lsls r1, r4, 9
@@ -9233,7 +9233,7 @@ _080147E4:
strb r1, [r0]
b _08014C78
.align 2, 0
-_08014804: .4byte gUnknown_20233C4
+_08014804: .4byte gBattleBufferB
_08014808:
adds r3, r7, 0
mov r5, r8
@@ -9251,18 +9251,18 @@ _08014808:
ldr r0, _08014830 @ =0x0000ffff
cmp r2, r0
bne _08014838
- ldr r0, _08014834 @ =gUnknown_2023E82
+ ldr r0, _08014834 @ =gBattleCommunication
adds r0, r4, r0
b _08014926
.align 2, 0
_08014830: .4byte 0x0000ffff
-_08014834: .4byte gUnknown_2023E82
+_08014834: .4byte gBattleCommunication
_08014838:
- bl sub_8017594
+ bl TrySetCantSelectMoveBattleScript
lsls r0, 24
cmp r0, 0
beq _0801487C
- ldr r0, _08014874 @ =gUnknown_2023E82
+ ldr r0, _08014874 @ =gBattleCommunication
ldrb r1, [r5]
adds r1, r0
movs r3, 0
@@ -9287,7 +9287,7 @@ _08014838:
strb r0, [r1]
b _08014C78
.align 2, 0
-_08014874: .4byte gUnknown_2023E82
+_08014874: .4byte gBattleCommunication
_08014878: .4byte gBattleStruct
_0801487C:
mov r2, r8
@@ -9300,7 +9300,7 @@ _0801487C:
adds r0, r6
ldrb r0, [r0]
strb r0, [r1]
- ldr r0, _080148CC @ =gUnknown_2023DC4
+ ldr r0, _080148CC @ =gChosenMoveByBattler
ldrb r2, [r2]
lsls r5, r2, 1
adds r5, r0
@@ -9324,16 +9324,16 @@ _0801487C:
add r0, r9
ldrb r0, [r0]
strb r0, [r4, 0xC]
- ldr r0, _080148D4 @ =gUnknown_2023E82
+ ldr r0, _080148D4 @ =gBattleCommunication
ldrb r1, [r3]
b _08014B30
.align 2, 0
_080148C8: .4byte gBattleStruct
-_080148CC: .4byte gUnknown_2023DC4
+_080148CC: .4byte gChosenMoveByBattler
_080148D0: .4byte gBattleMons
-_080148D4: .4byte gUnknown_2023E82
+_080148D4: .4byte gBattleCommunication
_080148D8:
- ldr r2, _08014900 @ =gUnknown_20233C4
+ ldr r2, _08014900 @ =gBattleBufferB
ldr r5, _08014904 @ =gActiveBattler
ldrb r4, [r5]
lsls r1, r4, 9
@@ -9349,18 +9349,18 @@ _080148D8:
bne _080148F6
b _08014C48
_080148F6:
- ldr r0, _08014908 @ =gUnknown_2023D68
+ ldr r0, _08014908 @ =gLastUsedItem
strh r3, [r0]
- ldr r0, _0801490C @ =gUnknown_2023E82
+ ldr r0, _0801490C @ =gBattleCommunication
ldrb r1, [r5]
b _08014B30
.align 2, 0
-_08014900: .4byte gUnknown_20233C4
+_08014900: .4byte gBattleBufferB
_08014904: .4byte gActiveBattler
-_08014908: .4byte gUnknown_2023D68
-_0801490C: .4byte gUnknown_2023E82
+_08014908: .4byte gLastUsedItem
+_0801490C: .4byte gBattleCommunication
_08014910:
- ldr r6, _0801492C @ =gUnknown_20233C4
+ ldr r6, _0801492C @ =gBattleBufferB
ldr r7, _08014930 @ =gActiveBattler
ldrb r2, [r7]
lsls r0, r2, 9
@@ -9369,16 +9369,16 @@ _08014910:
ldrb r1, [r0]
cmp r1, 0x6
bne _08014938
- ldr r0, _08014934 @ =gUnknown_2023E82
+ ldr r0, _08014934 @ =gBattleCommunication
adds r0, r2, r0
_08014926:
movs r1, 0
strb r1, [r0]
b _08014C4E
.align 2, 0
-_0801492C: .4byte gUnknown_20233C4
+_0801492C: .4byte gBattleBufferB
_08014930: .4byte gActiveBattler
-_08014934: .4byte gUnknown_2023E82
+_08014934: .4byte gBattleCommunication
_08014938:
ldr r0, _080149FC @ =gBattleStruct
mov r12, r0
@@ -9476,83 +9476,83 @@ _08014938:
ldrb r0, [r0]
strb r0, [r1]
_080149F6:
- ldr r0, _08014A04 @ =gUnknown_2023E82
+ ldr r0, _08014A04 @ =gBattleCommunication
ldrb r1, [r7]
b _08014B30
.align 2, 0
_080149FC: .4byte gBattleStruct
_08014A00: .4byte gBattleTypeFlags
-_08014A04: .4byte gUnknown_2023E82
+_08014A04: .4byte gBattleCommunication
_08014A08:
- ldr r2, _08014A20 @ =gUnknown_2023DD0
+ ldr r2, _08014A20 @ =gHitMarker
ldr r0, [r2]
movs r1, 0x80
lsls r1, 8
orrs r0, r1
str r0, [r2]
- ldr r2, _08014A24 @ =gUnknown_2023E82
+ ldr r2, _08014A24 @ =gBattleCommunication
ldr r0, _08014A28 @ =gActiveBattler
ldrb r1, [r0]
adds r1, r2
b _08014B32
.align 2, 0
-_08014A20: .4byte gUnknown_2023DD0
-_08014A24: .4byte gUnknown_2023E82
+_08014A20: .4byte gHitMarker
+_08014A24: .4byte gBattleCommunication
_08014A28: .4byte gActiveBattler
_08014A2C:
- ldr r2, _08014A38 @ =gUnknown_2023E82
+ ldr r2, _08014A38 @ =gBattleCommunication
ldr r0, _08014A3C @ =gActiveBattler
ldrb r1, [r0]
adds r1, r2
b _08014B32
.align 2, 0
-_08014A38: .4byte gUnknown_2023E82
+_08014A38: .4byte gBattleCommunication
_08014A3C: .4byte gActiveBattler
_08014A40:
- ldr r2, _08014A4C @ =gUnknown_2023E82
+ ldr r2, _08014A4C @ =gBattleCommunication
ldr r0, _08014A50 @ =gActiveBattler
ldrb r1, [r0]
adds r1, r2
b _08014B32
.align 2, 0
-_08014A4C: .4byte gUnknown_2023E82
+_08014A4C: .4byte gBattleCommunication
_08014A50: .4byte gActiveBattler
_08014A54:
- ldr r2, _08014A60 @ =gUnknown_2023E82
+ ldr r2, _08014A60 @ =gBattleCommunication
ldr r0, _08014A64 @ =gActiveBattler
ldrb r1, [r0]
adds r1, r2
b _08014B32
.align 2, 0
-_08014A60: .4byte gUnknown_2023E82
+_08014A60: .4byte gBattleCommunication
_08014A64: .4byte gActiveBattler
_08014A68:
- ldr r2, _08014A80 @ =gUnknown_2023DD0
+ ldr r2, _08014A80 @ =gHitMarker
ldr r0, [r2]
movs r1, 0x80
lsls r1, 8
orrs r0, r1
str r0, [r2]
- ldr r2, _08014A84 @ =gUnknown_2023E82
+ ldr r2, _08014A84 @ =gBattleCommunication
ldr r0, _08014A88 @ =gActiveBattler
ldrb r1, [r0]
adds r1, r2
b _08014B32
.align 2, 0
-_08014A80: .4byte gUnknown_2023DD0
-_08014A84: .4byte gUnknown_2023E82
+_08014A80: .4byte gHitMarker
+_08014A84: .4byte gBattleCommunication
_08014A88: .4byte gActiveBattler
_08014A8C:
- ldr r2, _08014A98 @ =gUnknown_2023E82
+ ldr r2, _08014A98 @ =gBattleCommunication
ldr r0, _08014A9C @ =gActiveBattler
ldrb r1, [r0]
adds r1, r2
b _08014B32
.align 2, 0
-_08014A98: .4byte gUnknown_2023E82
+_08014A98: .4byte gBattleCommunication
_08014A9C: .4byte gActiveBattler
_08014AA0:
- ldr r3, _08014B08 @ =gUnknown_2023BC8
+ ldr r3, _08014B08 @ =gBattleControllerExecFlags
ldr r4, _08014B0C @ =gBitTable
ldr r0, _08014B10 @ =gActiveBattler
ldrb r0, [r0]
@@ -9602,10 +9602,10 @@ _08014ACA:
_08014AFE:
movs r0, 0
movs r1, 0
- bl EmitLinkStandbyMsg
+ bl BtlController_EmitLinkStandbyMsg
b _08014B24
.align 2, 0
-_08014B08: .4byte gUnknown_2023BC8
+_08014B08: .4byte gBattleControllerExecFlags
_08014B0C: .4byte gBitTable
_08014B10: .4byte gActiveBattler
_08014B14: .4byte gBattleTypeFlags
@@ -9613,13 +9613,13 @@ _08014B18: .4byte gBattleStruct
_08014B1C:
movs r0, 0
movs r1, 0x1
- bl EmitLinkStandbyMsg
+ bl BtlController_EmitLinkStandbyMsg
_08014B24:
ldr r4, _08014B3C @ =gActiveBattler
_08014B26:
ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, _08014B40 @ =gUnknown_2023E82
+ bl MarkBattlerForControllerExec
+ ldr r0, _08014B40 @ =gBattleCommunication
ldrb r1, [r4]
_08014B30:
adds r1, r0
@@ -9630,9 +9630,9 @@ _08014B32:
b _08014C4E
.align 2, 0
_08014B3C: .4byte gActiveBattler
-_08014B40: .4byte gUnknown_2023E82
+_08014B40: .4byte gBattleCommunication
_08014B44:
- ldr r3, _08014B78 @ =gUnknown_2023BC8
+ ldr r3, _08014B78 @ =gBattleControllerExecFlags
ldr r1, _08014B7C @ =gBitTable
ldr r0, _08014B80 @ =gActiveBattler
ldrb r0, [r0]
@@ -9652,16 +9652,16 @@ _08014B44:
ands r0, r1
cmp r0, 0
bne _08014C4E
- ldr r1, _08014B84 @ =gUnknown_2023E82
+ ldr r1, _08014B84 @ =gBattleCommunication
ldrb r0, [r1, 0x4]
adds r0, 0x1
strb r0, [r1, 0x4]
b _08014C4E
.align 2, 0
-_08014B78: .4byte gUnknown_2023BC8
+_08014B78: .4byte gBattleControllerExecFlags
_08014B7C: .4byte gBitTable
_08014B80: .4byte gActiveBattler
-_08014B84: .4byte gUnknown_2023E82
+_08014B84: .4byte gBattleCommunication
_08014B88:
ldr r5, _08014BA8 @ =gActiveBattler
ldrb r2, [r5]
@@ -9673,7 +9673,7 @@ _08014B88:
ldrb r0, [r0]
cmp r0, 0
beq _08014BB4
- ldr r0, _08014BB0 @ =gUnknown_2023E82
+ ldr r0, _08014BB0 @ =gBattleCommunication
adds r0, r2, r0
adds r1, 0x84
ldrb r1, [r1]
@@ -9682,18 +9682,18 @@ _08014B88:
.align 2, 0
_08014BA8: .4byte gActiveBattler
_08014BAC: .4byte gBattleStruct
-_08014BB0: .4byte gUnknown_2023E82
+_08014BB0: .4byte gBattleCommunication
_08014BB4:
- ldr r0, _08014C08 @ =sBattler_AI
+ ldr r0, _08014C08 @ =gBattlerAttacker
strb r2, [r0]
- ldr r7, _08014C0C @ =gUnknown_2023D74
- ldr r6, _08014C10 @ =gUnknown_2023D80
+ ldr r7, _08014C0C @ =gBattlescriptCurrInstr
+ ldr r6, _08014C10 @ =gSelectionBattleScripts
ldrb r0, [r5]
lsls r0, 2
adds r0, r6
ldr r4, [r0]
str r4, [r7]
- ldr r3, _08014C14 @ =gUnknown_2023BC8
+ ldr r3, _08014C14 @ =gBattleControllerExecFlags
ldr r1, _08014C18 @ =gBitTable
ldrb r0, [r5]
lsls r0, 2
@@ -9712,7 +9712,7 @@ _08014BB4:
ands r0, r1
cmp r0, 0
bne _08014BFA
- ldr r0, _08014C1C @ =gUnknown_825011C
+ ldr r0, _08014C1C @ =gBattleScriptingCommandsTable
ldrb r1, [r4]
lsls r1, 2
adds r1, r0
@@ -9726,14 +9726,14 @@ _08014BFA:
str r1, [r0]
b _08014C4E
.align 2, 0
-_08014C08: .4byte sBattler_AI
-_08014C0C: .4byte gUnknown_2023D74
-_08014C10: .4byte gUnknown_2023D80
-_08014C14: .4byte gUnknown_2023BC8
+_08014C08: .4byte gBattlerAttacker
+_08014C0C: .4byte gBattlescriptCurrInstr
+_08014C10: .4byte gSelectionBattleScripts
+_08014C14: .4byte gBattleControllerExecFlags
_08014C18: .4byte gBitTable
-_08014C1C: .4byte gUnknown_825011C
+_08014C1C: .4byte gBattleScriptingCommandsTable
_08014C20:
- ldr r3, _08014C88 @ =gUnknown_2023BC8
+ ldr r3, _08014C88 @ =gBattleControllerExecFlags
ldr r1, _08014C8C @ =gBitTable
ldr r0, _08014C90 @ =gActiveBattler
ldrb r4, [r0]
@@ -9754,7 +9754,7 @@ _08014C20:
cmp r3, 0
bne _08014C4E
_08014C48:
- ldr r0, _08014C94 @ =gUnknown_2023E82
+ ldr r0, _08014C94 @ =gBattleCommunication
adds r0, r4, r0
strb r3, [r0]
_08014C4E:
@@ -9771,12 +9771,12 @@ _08014C4E:
bcs _08014C68
bl _08014064
_08014C68:
- ldr r0, _08014C94 @ =gUnknown_2023E82
+ ldr r0, _08014C94 @ =gBattleCommunication
ldrb r0, [r0, 0x4]
ldrb r2, [r2]
cmp r0, r2
bne _08014C78
- ldr r1, _08014C9C @ =gUnknown_3004F84
+ ldr r1, _08014C9C @ =gBattleMainFunc
ldr r0, _08014CA0 @ =sub_80150A8
str r0, [r1]
_08014C78:
@@ -9789,12 +9789,12 @@ _08014C78:
pop {r0}
bx r0
.align 2, 0
-_08014C88: .4byte gUnknown_2023BC8
+_08014C88: .4byte gBattleControllerExecFlags
_08014C8C: .4byte gBitTable
_08014C90: .4byte gActiveBattler
-_08014C94: .4byte gUnknown_2023E82
+_08014C94: .4byte gBattleCommunication
_08014C98: .4byte gBattlersCount
-_08014C9C: .4byte gUnknown_3004F84
+_08014C9C: .4byte gBattleMainFunc
_08014CA0: .4byte sub_80150A8
thumb_func_end sub_8014040
@@ -9805,14 +9805,14 @@ SwapTurnOrder: @ 8014CA4
lsrs r0, 24
lsls r1, 24
lsrs r1, 24
- ldr r2, _08014CD0 @ =gUnknown_2023BDA
+ ldr r2, _08014CD0 @ =gActionsByTurnOrder
adds r4, r0, r2
ldrb r5, [r4]
adds r2, r1, r2
ldrb r3, [r2]
strb r3, [r4]
strb r5, [r2]
- ldr r2, _08014CD4 @ =gUnknown_2023BDE
+ ldr r2, _08014CD4 @ =gBattlerByTurnOrder
adds r0, r2
ldrb r5, [r0]
adds r1, r2
@@ -9823,8 +9823,8 @@ SwapTurnOrder: @ 8014CA4
pop {r0}
bx r0
.align 2, 0
-_08014CD0: .4byte gUnknown_2023BDA
-_08014CD4: .4byte gUnknown_2023BDE
+_08014CD0: .4byte gActionsByTurnOrder
+_08014CD4: .4byte gBattlerByTurnOrder
thumb_func_end SwapTurnOrder
thumb_func_start GetWhoStrikesFirst
@@ -10156,14 +10156,14 @@ _08014F6C: .4byte 0x00000822
_08014F70: .4byte gBattleMons
_08014F74: .4byte gUnknown_2023E80
_08014F78:
- ldr r0, _08014F98 @ =gUnknown_2023D7C
+ ldr r0, _08014F98 @ =gChosenActionByBattler
mov r3, r9
adds r1, r3, r0
ldrb r1, [r1]
adds r2, r0, 0
cmp r1, 0
bne _08014FC8
- ldr r0, _08014F9C @ =gUnknown_2023E8C
+ ldr r0, _08014F9C @ =gProtectStructs
lsls r1, r3, 4
adds r1, r0
ldrb r0, [r1]
@@ -10173,8 +10173,8 @@ _08014F78:
movs r3, 0xA5
b _08014FCA
.align 2, 0
-_08014F98: .4byte gUnknown_2023D7C
-_08014F9C: .4byte gUnknown_2023E8C
+_08014F98: .4byte gChosenActionByBattler
+_08014F9C: .4byte gProtectStructs
_08014FA0:
ldr r0, _08014FC0 @ =gBattleStruct
ldr r0, [r0]
@@ -10203,7 +10203,7 @@ _08014FCA:
ldrb r0, [r0]
cmp r0, 0
bne _08015014
- ldr r0, _08014FE8 @ =gUnknown_2023E8C
+ ldr r0, _08014FE8 @ =gProtectStructs
lsls r1, 4
adds r1, r0
ldrb r0, [r1]
@@ -10213,7 +10213,7 @@ _08014FCA:
movs r2, 0xA5
b _08015016
.align 2, 0
-_08014FE8: .4byte gUnknown_2023E8C
+_08014FE8: .4byte gProtectStructs
_08014FEC:
ldr r0, _0801500C @ =gBattleStruct
ldr r0, [r0]
@@ -10339,10 +10339,10 @@ sub_80150A8: @ 80150A8
bcc _080150D0
b _080152FA
_080150D0:
- ldr r7, _08015108 @ =gUnknown_2023BDA
- ldr r6, _0801510C @ =gUnknown_2023D7C
+ ldr r7, _08015108 @ =gActionsByTurnOrder
+ ldr r6, _0801510C @ =gChosenActionByBattler
mov r2, r8
- ldr r5, _08015110 @ =gUnknown_2023BDE
+ ldr r5, _08015110 @ =gBattlerByTurnOrder
_080150D8:
adds r1, r3, r7
ldrb r0, [r2]
@@ -10366,9 +10366,9 @@ _080150D8:
_080150FC: .4byte gBattleTypeFlags
_08015100: .4byte gActiveBattler
_08015104: .4byte gBattlersCount
-_08015108: .4byte gUnknown_2023BDA
-_0801510C: .4byte gUnknown_2023D7C
-_08015110: .4byte gUnknown_2023BDE
+_08015108: .4byte gActionsByTurnOrder
+_0801510C: .4byte gChosenActionByBattler
+_08015110: .4byte gBattlerByTurnOrder
_08015114:
movs r0, 0x2
ands r1, r0
@@ -10382,7 +10382,7 @@ _08015114:
ldrb r2, [r2]
cmp r3, r2
bcs _08015174
- ldr r0, _08015160 @ =gUnknown_2023D7C
+ ldr r0, _08015160 @ =gChosenActionByBattler
ldrb r1, [r0]
adds r4, r0, 0
cmp r1, 0x3
@@ -10407,9 +10407,9 @@ _08015136:
.align 2, 0
_08015158: .4byte gActiveBattler
_0801515C: .4byte gBattlersCount
-_08015160: .4byte gUnknown_2023D7C
+_08015160: .4byte gChosenActionByBattler
_08015164:
- ldr r0, _080151D8 @ =gUnknown_2023D7C
+ ldr r0, _080151D8 @ =gChosenActionByBattler
ldrb r0, [r0]
ldr r2, _080151DC @ =gActiveBattler
mov r8, r2
@@ -10421,20 +10421,20 @@ _08015172:
_08015174:
cmp r3, 0x5
bne _080151F8
- ldr r6, _080151E0 @ =gUnknown_2023BDA
- ldr r1, _080151D8 @ =gUnknown_2023D7C
+ ldr r6, _080151E0 @ =gActionsByTurnOrder
+ ldr r1, _080151D8 @ =gChosenActionByBattler
mov r3, r8
ldrb r0, [r3]
adds r0, r1
ldrb r0, [r0]
strb r0, [r6]
- ldr r2, _080151E4 @ =gUnknown_2023BDE
+ ldr r2, _080151E4 @ =gBattlerByTurnOrder
ldrb r0, [r3]
strb r0, [r2]
movs r3, 0x1
movs r5, 0
adds r4, r1, 0
- ldr r7, _080151E8 @ =gUnknown_3004F84
+ ldr r7, _080151E8 @ =gBattleMainFunc
mov r10, r7
ldr r0, _080151EC @ =CheckFocusPunch_ClearVarsBeforeTurnStarts
mov r12, r0
@@ -10473,11 +10473,11 @@ _080151CC:
ldr r0, [r7]
b _08015304
.align 2, 0
-_080151D8: .4byte gUnknown_2023D7C
+_080151D8: .4byte gChosenActionByBattler
_080151DC: .4byte gActiveBattler
-_080151E0: .4byte gUnknown_2023BDA
-_080151E4: .4byte gUnknown_2023BDE
-_080151E8: .4byte gUnknown_3004F84
+_080151E0: .4byte gActionsByTurnOrder
+_080151E4: .4byte gBattlerByTurnOrder
+_080151E8: .4byte gBattleMainFunc
_080151EC: .4byte CheckFocusPunch_ClearVarsBeforeTurnStarts
_080151F0: .4byte gBattleStruct
_080151F4: .4byte gBattlersCount
@@ -10489,10 +10489,10 @@ _080151F8:
ldrb r0, [r2]
cmp r0, 0
beq _0801523E
- ldr r6, _0801528C @ =gUnknown_2023D7C
+ ldr r6, _0801528C @ =gChosenActionByBattler
mov r2, r8
- ldr r5, _08015290 @ =gUnknown_2023BDA
- ldr r4, _08015294 @ =gUnknown_2023BDE
+ ldr r5, _08015290 @ =gActionsByTurnOrder
+ ldr r4, _08015294 @ =gBattlerByTurnOrder
_0801520E:
ldrb r0, [r2]
adds r0, r6
@@ -10527,9 +10527,9 @@ _0801523E:
ldrb r0, [r7]
cmp r0, 0
beq _08015282
- ldr r6, _0801528C @ =gUnknown_2023D7C
- ldr r5, _08015290 @ =gUnknown_2023BDA
- ldr r4, _08015294 @ =gUnknown_2023BDE
+ ldr r6, _0801528C @ =gChosenActionByBattler
+ ldr r5, _08015290 @ =gActionsByTurnOrder
+ ldr r4, _08015294 @ =gBattlerByTurnOrder
_08015252:
ldrb r0, [r2]
adds r0, r6
@@ -10561,20 +10561,20 @@ _08015282:
b _080152F0
.align 2, 0
_08015288: .4byte gBattlersCount
-_0801528C: .4byte gUnknown_2023D7C
-_08015290: .4byte gUnknown_2023BDA
-_08015294: .4byte gUnknown_2023BDE
+_0801528C: .4byte gChosenActionByBattler
+_08015290: .4byte gActionsByTurnOrder
+_08015294: .4byte gBattlerByTurnOrder
_08015298:
adds r4, r5, 0x1
adds r7, r4, 0
ldrb r1, [r1]
cmp r7, r1
bge _080152EE
- ldr r6, _08015318 @ =gUnknown_2023BDA
+ ldr r6, _08015318 @ =gActionsByTurnOrder
lsls r2, r5, 24
mov r8, r2
_080152A8:
- ldr r0, _0801531C @ =gUnknown_2023BDE
+ ldr r0, _0801531C @ =gBattlerByTurnOrder
adds r1, r5, r0
ldrb r3, [r1]
adds r0, r4, r0
@@ -10617,7 +10617,7 @@ _080152F0:
cmp r5, r0
blt _08015298
_080152FA:
- ldr r1, _08015324 @ =gUnknown_3004F84
+ ldr r1, _08015324 @ =gBattleMainFunc
ldr r0, _08015328 @ =CheckFocusPunch_ClearVarsBeforeTurnStarts
str r0, [r1]
ldr r0, _0801532C @ =gBattleStruct
@@ -10634,10 +10634,10 @@ _08015304:
pop {r0}
bx r0
.align 2, 0
-_08015318: .4byte gUnknown_2023BDA
-_0801531C: .4byte gUnknown_2023BDE
+_08015318: .4byte gActionsByTurnOrder
+_0801531C: .4byte gBattlerByTurnOrder
_08015320: .4byte gBattlersCount
-_08015324: .4byte gUnknown_3004F84
+_08015324: .4byte gBattleMainFunc
_08015328: .4byte CheckFocusPunch_ClearVarsBeforeTurnStarts
_0801532C: .4byte gBattleStruct
thumb_func_end sub_80150A8
@@ -10660,7 +10660,7 @@ TurnValuesCleanUp: @ 8015330
adds r5, r1, 0
cmp r2, 0
beq _08015428
- ldr r7, _08015390 @ =gUnknown_2023E8C
+ ldr r7, _08015390 @ =gProtectStructs
adds r6, r5, 0
ldr r0, _08015394 @ =gUnknown_2023C34
mov r12, r0
@@ -10691,7 +10691,7 @@ _0801535E:
.align 2, 0
_08015388: .4byte gActiveBattler
_0801538C: .4byte gBattlersCount
-_08015390: .4byte gUnknown_2023E8C
+_08015390: .4byte gProtectStructs
_08015394: .4byte gUnknown_2023C34
_08015398: .4byte gDisableStructs
_0801539C:
@@ -10801,7 +10801,7 @@ SpecialStatusesClear: @ 8015450
beq _0801548E
adds r3, r2, 0
movs r4, 0
- ldr r5, _0801549C @ =gUnknown_2023ECC
+ ldr r5, _0801549C @ =gSpecialStatuses
_08015468:
ldrb r1, [r3]
lsls r0, r1, 2
@@ -10830,13 +10830,13 @@ _0801548E:
.align 2, 0
_08015494: .4byte gActiveBattler
_08015498: .4byte gBattlersCount
-_0801549C: .4byte gUnknown_2023ECC
+_0801549C: .4byte gSpecialStatuses
thumb_func_end SpecialStatusesClear
thumb_func_start CheckFocusPunch_ClearVarsBeforeTurnStarts
CheckFocusPunch_ClearVarsBeforeTurnStarts: @ 80154A0
push {r4-r7,lr}
- ldr r0, _08015528 @ =gUnknown_2023DD0
+ ldr r0, _08015528 @ =gHitMarker
ldr r0, [r0]
movs r1, 0x80
lsls r1, 8
@@ -10854,7 +10854,7 @@ CheckFocusPunch_ClearVarsBeforeTurnStarts: @ 80154A0
cmp r0, r1
bcs _0801555E
ldr r5, _08015534 @ =gActiveBattler
- ldr r4, _08015538 @ =sBattler_AI
+ ldr r4, _08015538 @ =gBattlerAttacker
movs r7, 0x84
lsls r7, 1
_080154CC:
@@ -10866,7 +10866,7 @@ _080154CC:
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
- ldr r1, _0801553C @ =gUnknown_2023DC4
+ ldr r1, _0801553C @ =gChosenMoveByBattler
ldrb r3, [r5]
lsls r0, r3, 1
adds r0, r1
@@ -10893,7 +10893,7 @@ _080154CC:
lsls r0, 31
cmp r0, 0
bne _08015550
- ldr r0, _08015548 @ =gUnknown_2023E8C
+ ldr r0, _08015548 @ =gProtectStructs
lsls r1, r3, 4
adds r1, r0
ldrb r0, [r1]
@@ -10904,15 +10904,15 @@ _080154CC:
bl BattleScriptExecute
b _08015598
.align 2, 0
-_08015528: .4byte gUnknown_2023DD0
+_08015528: .4byte gHitMarker
_0801552C: .4byte gBattleStruct
_08015530: .4byte gBattlersCount
_08015534: .4byte gActiveBattler
-_08015538: .4byte sBattler_AI
-_0801553C: .4byte gUnknown_2023DC4
+_08015538: .4byte gBattlerAttacker
+_0801553C: .4byte gChosenMoveByBattler
_08015540: .4byte gBattleMons
_08015544: .4byte gDisableStructs
-_08015548: .4byte gUnknown_2023E8C
+_08015548: .4byte gProtectStructs
_0801554C: .4byte gUnknown_81D9015
_08015550:
mov r2, r12
@@ -10924,11 +10924,11 @@ _08015550:
bcc _080154CC
_0801555E:
bl TryClearRageStatuses
- ldr r1, _080155A0 @ =gUnknown_2023BE2
+ ldr r1, _080155A0 @ =gCurrentTurnActionNumber
movs r0, 0
strb r0, [r1]
- ldr r1, _080155A4 @ =gUnknown_2023BE3
- ldr r0, _080155A8 @ =gUnknown_2023BDA
+ ldr r1, _080155A4 @ =gCurrentActionFuncId
+ ldr r0, _080155A8 @ =gActionsByTurnOrder
movs r3, 0
ldrb r0, [r0]
strb r0, [r1]
@@ -10938,10 +10938,10 @@ _0801555E:
ldr r0, _080155B0 @ =gBattleStruct
ldr r0, [r0]
strb r2, [r0, 0x13]
- ldr r1, _080155B4 @ =gUnknown_3004F84
+ ldr r1, _080155B4 @ =gBattleMainFunc
ldr r0, _080155B8 @ =RunTurnActionsFunctions
str r0, [r1]
- ldr r0, _080155BC @ =gUnknown_2023E82
+ ldr r0, _080155BC @ =gBattleCommunication
strb r2, [r0, 0x3]
strb r2, [r0, 0x4]
ldr r0, _080155C0 @ =gBattleScripting
@@ -10956,14 +10956,14 @@ _08015598:
pop {r0}
bx r0
.align 2, 0
-_080155A0: .4byte gUnknown_2023BE2
-_080155A4: .4byte gUnknown_2023BE3
-_080155A8: .4byte gUnknown_2023BDA
+_080155A0: .4byte gCurrentTurnActionNumber
+_080155A4: .4byte gCurrentActionFuncId
+_080155A8: .4byte gActionsByTurnOrder
_080155AC: .4byte gDynamicBasePower
_080155B0: .4byte gBattleStruct
-_080155B4: .4byte gUnknown_3004F84
+_080155B4: .4byte gBattleMainFunc
_080155B8: .4byte RunTurnActionsFunctions
-_080155BC: .4byte gUnknown_2023E82
+_080155BC: .4byte gBattleCommunication
_080155C0: .4byte gBattleScripting
_080155C4: .4byte gBattleResources
thumb_func_end CheckFocusPunch_ClearVarsBeforeTurnStarts
@@ -10973,7 +10973,7 @@ RunTurnActionsFunctions: @ 80155C8
push {r4-r6,lr}
ldr r6, _0801561C @ =gBattleOutcome
ldrb r0, [r6]
- ldr r2, _08015620 @ =gUnknown_2023BE3
+ ldr r2, _08015620 @ =gCurrentActionFuncId
cmp r0, 0
beq _080155D8
movs r0, 0xC
@@ -10982,7 +10982,7 @@ _080155D8:
ldr r5, _08015624 @ =gBattleStruct
ldr r0, [r5]
adds r0, 0x4B
- ldr r4, _08015628 @ =gUnknown_2023BE2
+ ldr r4, _08015628 @ =gCurrentTurnActionNumber
ldrb r1, [r4]
strb r1, [r0]
ldr r1, _0801562C @ =gUnknown_8250038
@@ -10996,12 +10996,12 @@ _080155D8:
ldrb r0, [r0]
cmp r1, r0
bcc _08015644
- ldr r2, _08015634 @ =gUnknown_2023DD0
+ ldr r2, _08015634 @ =gHitMarker
ldr r0, [r2]
ldr r1, _08015638 @ =0xffefffff
ands r0, r1
str r0, [r2]
- ldr r3, _0801563C @ =gUnknown_3004F84
+ ldr r3, _0801563C @ =gBattleMainFunc
ldr r2, _08015640 @ =gUnknown_8250070
ldrb r1, [r6]
movs r0, 0x7F
@@ -11013,14 +11013,14 @@ _080155D8:
b _0801565C
.align 2, 0
_0801561C: .4byte gBattleOutcome
-_08015620: .4byte gUnknown_2023BE3
+_08015620: .4byte gCurrentActionFuncId
_08015624: .4byte gBattleStruct
-_08015628: .4byte gUnknown_2023BE2
+_08015628: .4byte gCurrentTurnActionNumber
_0801562C: .4byte gUnknown_8250038
_08015630: .4byte gBattlersCount
-_08015634: .4byte gUnknown_2023DD0
+_08015634: .4byte gHitMarker
_08015638: .4byte 0xffefffff
-_0801563C: .4byte gUnknown_3004F84
+_0801563C: .4byte gBattleMainFunc
_08015640: .4byte gUnknown_8250070
_08015644:
ldr r0, [r5]
@@ -11028,7 +11028,7 @@ _08015644:
ldrb r0, [r0]
cmp r0, r1
beq _0801565C
- ldr r2, _08015664 @ =gUnknown_2023DD0
+ ldr r2, _08015664 @ =gHitMarker
ldr r0, [r2]
ldr r1, _08015668 @ =0xfffffdff
ands r0, r1
@@ -11040,7 +11040,7 @@ _0801565C:
pop {r0}
bx r0
.align 2, 0
-_08015664: .4byte gUnknown_2023DD0
+_08015664: .4byte gHitMarker
_08015668: .4byte 0xfffffdff
_0801566C: .4byte 0xfff7ffff
thumb_func_end RunTurnActionsFunctions
@@ -11048,7 +11048,7 @@ _0801566C: .4byte 0xfff7ffff
thumb_func_start sub_8015670
sub_8015670: @ 8015670
push {r4,lr}
- ldr r1, _080156A8 @ =gUnknown_2023BE3
+ ldr r1, _080156A8 @ =gCurrentActionFuncId
movs r0, 0
strb r0, [r1]
ldr r0, _080156AC @ =gBattleTypeFlags
@@ -11063,9 +11063,9 @@ sub_8015670: @ 8015670
strb r0, [r1]
movs r0, 0
bl GetBattlerAtPosition
- ldr r1, _080156B8 @ =sBattler_AI
+ ldr r1, _080156B8 @ =gBattlerAttacker
strb r0, [r1]
- ldr r1, _080156BC @ =gUnknown_2023D74
+ ldr r1, _080156BC @ =gBattlescriptCurrInstr
ldr r0, _080156C0 @ =gUnknown_81D88CC
str r0, [r1]
ldrb r1, [r4]
@@ -11074,12 +11074,12 @@ sub_8015670: @ 8015670
strb r0, [r4]
b _0801576E
.align 2, 0
-_080156A8: .4byte gUnknown_2023BE3
+_080156A8: .4byte gCurrentActionFuncId
_080156AC: .4byte gBattleTypeFlags
_080156B0: .4byte gBattleTextBuff1
_080156B4: .4byte gBattleOutcome
-_080156B8: .4byte sBattler_AI
-_080156BC: .4byte gUnknown_2023D74
+_080156B8: .4byte gBattlerAttacker
+_080156BC: .4byte gBattlescriptCurrInstr
_080156C0: .4byte gUnknown_81D88CC
_080156C4:
ldr r0, _080156E0 @ =0x00080900
@@ -11090,12 +11090,12 @@ _080156C4:
movs r0, 0x9B
lsls r0, 1
bl PlayBGM
- ldr r1, _080156E4 @ =gUnknown_2023D74
+ ldr r1, _080156E4 @ =gBattlescriptCurrInstr
ldr r0, _080156E8 @ =gUnknown_81D88D7
b _0801576C
.align 2, 0
_080156E0: .4byte 0x00080900
-_080156E4: .4byte gUnknown_2023D74
+_080156E4: .4byte gBattlescriptCurrInstr
_080156E8: .4byte gUnknown_81D88D7
_080156EC:
movs r0, 0xA
@@ -11103,7 +11103,7 @@ _080156EC:
cmp r1, 0x8
bne _08015768
bl BattleStopLowHpSound
- ldr r1, _08015720 @ =gUnknown_2023D74
+ ldr r1, _08015720 @ =gBattlescriptCurrInstr
ldr r0, _08015724 @ =gUnknown_81D87EF
str r0, [r1]
ldr r2, _08015728 @ =gTrainers
@@ -11123,7 +11123,7 @@ _080156EC:
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_08015720: .4byte gUnknown_2023D74
+_08015720: .4byte gBattlescriptCurrInstr
_08015724: .4byte gUnknown_81D87EF
_08015728: .4byte gTrainers
_0801572C: .4byte gTrainerBattleOpponent_A
@@ -11149,28 +11149,28 @@ _0801575E:
bl PlayBGM
b _0801576E
_08015768:
- ldr r1, _0801577C @ =gUnknown_2023D74
+ ldr r1, _0801577C @ =gBattlescriptCurrInstr
ldr r0, _08015780 @ =gUnknown_81D8803
_0801576C:
str r0, [r1]
_0801576E:
- ldr r1, _08015784 @ =gUnknown_3004F84
+ ldr r1, _08015784 @ =gBattleMainFunc
ldr r0, _08015788 @ =sub_8015910
str r0, [r1]
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_0801577C: .4byte gUnknown_2023D74
+_0801577C: .4byte gBattlescriptCurrInstr
_08015780: .4byte gUnknown_81D8803
-_08015784: .4byte gUnknown_3004F84
+_08015784: .4byte gBattleMainFunc
_08015788: .4byte sub_8015910
thumb_func_end sub_8015670
thumb_func_start sub_801578C
sub_801578C: @ 801578C
push {r4,lr}
- ldr r1, _080157C4 @ =gUnknown_2023BE3
+ ldr r1, _080157C4 @ =gCurrentActionFuncId
movs r0, 0
strb r0, [r1]
ldr r0, _080157C8 @ =gBattleTypeFlags
@@ -11186,9 +11186,9 @@ sub_801578C: @ 801578C
strb r0, [r1]
movs r0, 0
bl GetBattlerAtPosition
- ldr r1, _080157D4 @ =sBattler_AI
+ ldr r1, _080157D4 @ =gBattlerAttacker
strb r0, [r1]
- ldr r1, _080157D8 @ =gUnknown_2023D74
+ ldr r1, _080157D8 @ =gBattlescriptCurrInstr
ldr r0, _080157DC @ =gUnknown_81D88CC
str r0, [r1]
ldrb r1, [r4]
@@ -11197,12 +11197,12 @@ sub_801578C: @ 801578C
strb r0, [r4]
b _08015830
.align 2, 0
-_080157C4: .4byte gUnknown_2023BE3
+_080157C4: .4byte gCurrentActionFuncId
_080157C8: .4byte gBattleTypeFlags
_080157CC: .4byte gBattleTextBuff1
_080157D0: .4byte gBattleOutcome
-_080157D4: .4byte sBattler_AI
-_080157D8: .4byte gUnknown_2023D74
+_080157D4: .4byte gBattlerAttacker
+_080157D8: .4byte gBattlescriptCurrInstr
_080157DC: .4byte gUnknown_81D88CC
_080157E0:
movs r0, 0x8
@@ -11219,55 +11219,55 @@ _080157E0:
ands r1, r0
cmp r1, 0
beq _0801580C
- ldr r1, _08015808 @ =gUnknown_2023E82
+ ldr r1, _08015808 @ =gBattleCommunication
movs r0, 0x1
strb r0, [r1, 0x5]
b _08015810
.align 2, 0
-_08015808: .4byte gUnknown_2023E82
+_08015808: .4byte gBattleCommunication
_0801580C:
- ldr r0, _0801581C @ =gUnknown_2023E82
+ ldr r0, _0801581C @ =gBattleCommunication
strb r4, [r0, 0x5]
_08015810:
movs r0, 0x1
bl GetBattlerAtPosition
- ldr r1, _08015820 @ =sBattler_AI
+ ldr r1, _08015820 @ =gBattlerAttacker
strb r0, [r1]
b _0801582A
.align 2, 0
-_0801581C: .4byte gUnknown_2023E82
-_08015820: .4byte sBattler_AI
+_0801581C: .4byte gBattleCommunication
+_08015820: .4byte gBattlerAttacker
_08015824:
- ldr r1, _0801583C @ =gUnknown_2023E82
+ ldr r1, _0801583C @ =gBattleCommunication
movs r0, 0
strb r0, [r1, 0x5]
_0801582A:
- ldr r1, _08015840 @ =gUnknown_2023D74
+ ldr r1, _08015840 @ =gBattlescriptCurrInstr
ldr r0, _08015844 @ =gUnknown_81D8806
str r0, [r1]
_08015830:
- ldr r1, _08015848 @ =gUnknown_3004F84
+ ldr r1, _08015848 @ =gBattleMainFunc
ldr r0, _0801584C @ =sub_8015910
str r0, [r1]
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_0801583C: .4byte gUnknown_2023E82
-_08015840: .4byte gUnknown_2023D74
+_0801583C: .4byte gBattleCommunication
+_08015840: .4byte gBattlescriptCurrInstr
_08015844: .4byte gUnknown_81D8806
-_08015848: .4byte gUnknown_3004F84
+_08015848: .4byte gBattleMainFunc
_0801584C: .4byte sub_8015910
thumb_func_end sub_801578C
thumb_func_start sub_8015850
sub_8015850: @ 8015850
push {lr}
- ldr r1, _08015878 @ =gUnknown_2023BE3
+ ldr r1, _08015878 @ =gCurrentActionFuncId
movs r0, 0
strb r0, [r1]
- ldr r1, _0801587C @ =gUnknown_2023E8C
- ldr r0, _08015880 @ =sBattler_AI
+ ldr r1, _0801587C @ =gProtectStructs
+ ldr r0, _08015880 @ =gBattlerAttacker
ldrb r0, [r0]
lsls r0, 4
adds r0, r1
@@ -11278,42 +11278,42 @@ sub_8015850: @ 8015850
beq _0801588C
cmp r0, 0x2
beq _0801589C
- ldr r1, _08015884 @ =gUnknown_2023D74
+ ldr r1, _08015884 @ =gBattlescriptCurrInstr
ldr r0, _08015888 @ =gUnknown_81D8916
b _080158A0
.align 2, 0
-_08015878: .4byte gUnknown_2023BE3
-_0801587C: .4byte gUnknown_2023E8C
-_08015880: .4byte sBattler_AI
-_08015884: .4byte gUnknown_2023D74
+_08015878: .4byte gCurrentActionFuncId
+_0801587C: .4byte gProtectStructs
+_08015880: .4byte gBattlerAttacker
+_08015884: .4byte gBattlescriptCurrInstr
_08015888: .4byte gUnknown_81D8916
_0801588C:
- ldr r1, _08015894 @ =gUnknown_2023D74
+ ldr r1, _08015894 @ =gBattlescriptCurrInstr
ldr r0, _08015898 @ =gUnknown_81D8901
b _080158A0
.align 2, 0
-_08015894: .4byte gUnknown_2023D74
+_08015894: .4byte gBattlescriptCurrInstr
_08015898: .4byte gUnknown_81D8901
_0801589C:
- ldr r1, _080158AC @ =gUnknown_2023D74
+ ldr r1, _080158AC @ =gBattlescriptCurrInstr
ldr r0, _080158B0 @ =gUnknown_81D890F
_080158A0:
str r0, [r1]
- ldr r1, _080158B4 @ =gUnknown_3004F84
+ ldr r1, _080158B4 @ =gBattleMainFunc
ldr r0, _080158B8 @ =sub_8015910
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
-_080158AC: .4byte gUnknown_2023D74
+_080158AC: .4byte gBattlescriptCurrInstr
_080158B0: .4byte gUnknown_81D890F
-_080158B4: .4byte gUnknown_3004F84
+_080158B4: .4byte gBattleMainFunc
_080158B8: .4byte sub_8015910
thumb_func_end sub_8015850
thumb_func_start sub_80158BC
sub_80158BC: @ 80158BC
- ldr r1, _080158F0 @ =gUnknown_2023BE3
+ ldr r1, _080158F0 @ =gCurrentActionFuncId
movs r0, 0
strb r0, [r1]
ldr r1, _080158F4 @ =gBattleTextBuff1
@@ -11321,7 +11321,7 @@ sub_80158BC: @ 80158BC
strb r0, [r1]
movs r0, 0x7
strb r0, [r1, 0x1]
- ldr r2, _080158F8 @ =sBattler_AI
+ ldr r2, _080158F8 @ =gBattlerAttacker
ldrb r0, [r2]
strb r0, [r1, 0x2]
ldr r3, _080158FC @ =gBattlerPartyIndexes
@@ -11332,28 +11332,28 @@ sub_80158BC: @ 80158BC
strb r0, [r1, 0x3]
movs r0, 0xFF
strb r0, [r1, 0x4]
- ldr r1, _08015900 @ =gUnknown_2023D74
+ ldr r1, _08015900 @ =gBattlescriptCurrInstr
ldr r0, _08015904 @ =gUnknown_81D891D
str r0, [r1]
- ldr r1, _08015908 @ =gUnknown_3004F84
+ ldr r1, _08015908 @ =gBattleMainFunc
ldr r0, _0801590C @ =sub_8015910
str r0, [r1]
bx lr
.align 2, 0
-_080158F0: .4byte gUnknown_2023BE3
+_080158F0: .4byte gCurrentActionFuncId
_080158F4: .4byte gBattleTextBuff1
-_080158F8: .4byte sBattler_AI
+_080158F8: .4byte gBattlerAttacker
_080158FC: .4byte gBattlerPartyIndexes
-_08015900: .4byte gUnknown_2023D74
+_08015900: .4byte gBattlescriptCurrInstr
_08015904: .4byte gUnknown_81D891D
-_08015908: .4byte gUnknown_3004F84
+_08015908: .4byte gBattleMainFunc
_0801590C: .4byte sub_8015910
thumb_func_end sub_80158BC
thumb_func_start sub_8015910
sub_8015910: @ 8015910
push {r4-r7,lr}
- ldr r0, _08015974 @ =gUnknown_2023BE3
+ ldr r0, _08015974 @ =gCurrentActionFuncId
ldrb r0, [r0]
subs r0, 0xB
lsls r0, 24
@@ -11401,7 +11401,7 @@ _08015942:
bl StringCopy
b _080159AA
.align 2, 0
-_08015974: .4byte gUnknown_2023BE3
+_08015974: .4byte gCurrentActionFuncId
_08015978: .4byte gBattleTypeFlags
_0801597C: .4byte 0x00080b92
_08015980: .4byte gActiveBattler
@@ -11445,27 +11445,27 @@ _080159D0:
bl BeginFastPaletteFade
movs r0, 0x5
bl FadeOutMapMusic
- ldr r1, _080159F4 @ =gUnknown_3004F84
+ ldr r1, _080159F4 @ =gBattleMainFunc
ldr r0, _080159F8 @ =sub_8015A30
str r0, [r1]
ldr r1, _080159FC @ =gUnknown_300537C
- ldr r0, _08015A00 @ =sub_8011100
+ ldr r0, _08015A00 @ =BattleMainCB2
str r0, [r1]
b _08015A1E
.align 2, 0
_080159EC: .4byte gBattlersCount
_080159F0: .4byte gBattleTypeFlags
-_080159F4: .4byte gUnknown_3004F84
+_080159F4: .4byte gBattleMainFunc
_080159F8: .4byte sub_8015A30
_080159FC: .4byte gUnknown_300537C
-_08015A00: .4byte sub_8011100
+_08015A00: .4byte BattleMainCB2
_08015A04:
- ldr r0, _08015A24 @ =gUnknown_2023BC8
+ ldr r0, _08015A24 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
bne _08015A1E
- ldr r1, _08015A28 @ =gUnknown_825011C
- ldr r0, _08015A2C @ =gUnknown_2023D74
+ ldr r1, _08015A28 @ =gBattleScriptingCommandsTable
+ ldr r0, _08015A2C @ =gBattlescriptCurrInstr
ldr r0, [r0]
ldrb r0, [r0]
lsls r0, 2
@@ -11477,9 +11477,9 @@ _08015A1E:
pop {r0}
bx r0
.align 2, 0
-_08015A24: .4byte gUnknown_2023BC8
-_08015A28: .4byte gUnknown_825011C
-_08015A2C: .4byte gUnknown_2023D74
+_08015A24: .4byte gBattleControllerExecFlags
+_08015A28: .4byte gBattleScriptingCommandsTable
+_08015A2C: .4byte gBattlescriptCurrInstr
thumb_func_end sub_8015910
thumb_func_start sub_8015A30
@@ -11492,7 +11492,7 @@ sub_8015A30: @ 8015A30
cmp r0, 0
bne _08015A8E
bl ResetSpriteData
- ldr r0, _08015A5C @ =gUnknown_3004FD4
+ ldr r0, _08015A5C @ =gLeveledUpInBattle
ldrb r0, [r0]
cmp r0, 0
beq _08015A52
@@ -11501,17 +11501,17 @@ sub_8015A30: @ 8015A30
cmp r0, 0x1
beq _08015A6C
_08015A52:
- ldr r1, _08015A64 @ =gUnknown_3004F84
+ ldr r1, _08015A64 @ =gBattleMainFunc
ldr r0, _08015A68 @ =ReturnFromBattleToOverworld
b _08015A70
.align 2, 0
_08015A58: .4byte gPaletteFade
-_08015A5C: .4byte gUnknown_3004FD4
+_08015A5C: .4byte gLeveledUpInBattle
_08015A60: .4byte gBattleOutcome
-_08015A64: .4byte gUnknown_3004F84
+_08015A64: .4byte gBattleMainFunc
_08015A68: .4byte ReturnFromBattleToOverworld
_08015A6C:
- ldr r1, _08015A94 @ =gUnknown_3004F84
+ ldr r1, _08015A94 @ =gBattleMainFunc
ldr r0, _08015A98 @ =sub_8015AA0
_08015A70:
str r0, [r1]
@@ -11524,12 +11524,12 @@ _08015A70:
bne _08015A8E
bl FreeMonSpritesGfx
bl FreeBattleSpritesData
- bl sub_802E138
+ bl FreeBattleResources
_08015A8E:
pop {r0}
bx r0
.align 2, 0
-_08015A94: .4byte gUnknown_3004F84
+_08015A94: .4byte gBattleMainFunc
_08015A98: .4byte sub_8015AA0
_08015A9C: .4byte gBattleTypeFlags
thumb_func_end sub_8015A30
@@ -11537,7 +11537,7 @@ _08015A9C: .4byte gBattleTypeFlags
thumb_func_start sub_8015AA0
sub_8015AA0: @ 8015AA0
push {r4,r5,lr}
- ldr r0, _08015AF4 @ =gUnknown_3004FD4
+ ldr r0, _08015AF4 @ =gLeveledUpInBattle
ldrb r1, [r0]
adds r3, r0, 0
cmp r1, 0
@@ -11568,7 +11568,7 @@ _08015AAE:
lsrs r2, r0, 16
cmp r2, 0
beq _08015B08
- ldr r0, _08015B00 @ =gUnknown_3004F84
+ ldr r0, _08015B00 @ =gBattleMainFunc
ldr r1, _08015B04 @ =sub_8015B30
str r1, [r0]
lsls r3, r5, 24
@@ -11579,21 +11579,21 @@ _08015AAE:
bl EvolutionScene
b _08015B1C
.align 2, 0
-_08015AF4: .4byte gUnknown_3004FD4
+_08015AF4: .4byte gLeveledUpInBattle
_08015AF8: .4byte gBitTable
_08015AFC: .4byte gPlayerParty
-_08015B00: .4byte gUnknown_3004F84
+_08015B00: .4byte gBattleMainFunc
_08015B04: .4byte sub_8015B30
_08015B08:
adds r5, 0x1
- ldr r3, _08015B24 @ =gUnknown_3004FD4
+ ldr r3, _08015B24 @ =gLeveledUpInBattle
cmp r5, 0x5
ble _08015AAE
ldrb r0, [r3]
cmp r0, 0
bne _08015AAC
_08015B16:
- ldr r1, _08015B28 @ =gUnknown_3004F84
+ ldr r1, _08015B28 @ =gBattleMainFunc
ldr r0, _08015B2C @ =ReturnFromBattleToOverworld
str r0, [r1]
_08015B1C:
@@ -11601,8 +11601,8 @@ _08015B1C:
pop {r0}
bx r0
.align 2, 0
-_08015B24: .4byte gUnknown_3004FD4
-_08015B28: .4byte gUnknown_3004F84
+_08015B24: .4byte gLeveledUpInBattle
+_08015B28: .4byte gBattleMainFunc
_08015B2C: .4byte ReturnFromBattleToOverworld
thumb_func_end sub_8015AA0
@@ -11611,10 +11611,10 @@ sub_8015B30: @ 8015B30
push {lr}
ldr r0, _08015B48 @ =gMain
ldr r1, [r0, 0x4]
- ldr r0, _08015B4C @ =sub_8011100
+ ldr r0, _08015B4C @ =BattleMainCB2
cmp r1, r0
bne _08015B42
- ldr r1, _08015B50 @ =gUnknown_3004F84
+ ldr r1, _08015B50 @ =gBattleMainFunc
ldr r0, _08015B54 @ =sub_8015AA0
str r0, [r1]
_08015B42:
@@ -11622,8 +11622,8 @@ _08015B42:
bx r0
.align 2, 0
_08015B48: .4byte gMain
-_08015B4C: .4byte sub_8011100
-_08015B50: .4byte gUnknown_3004F84
+_08015B4C: .4byte BattleMainCB2
+_08015B50: .4byte gBattleMainFunc
_08015B54: .4byte sub_8015AA0
thumb_func_end sub_8015B30
@@ -11664,7 +11664,7 @@ _08015B86:
negs r0, r0
ands r0, r1
strb r0, [r2]
- ldr r0, _08015BF8 @ =gUnknown_3004F80
+ ldr r0, _08015BF8 @ =gPreBattleCallback1
ldr r0, [r0]
str r0, [r3]
movs r0, 0x80
@@ -11701,14 +11701,14 @@ _08015BE8: .4byte gSpecialVar_Result
_08015BEC: .4byte gBattleOutcome
_08015BF0: .4byte gMain
_08015BF4: .4byte 0x00000439
-_08015BF8: .4byte gUnknown_3004F80
+_08015BF8: .4byte gPreBattleCallback1
_08015BFC: .4byte gEnemyParty
thumb_func_end ReturnFromBattleToOverworld
thumb_func_start RunBattleScriptCommands_PopCallbacksStack
RunBattleScriptCommands_PopCallbacksStack: @ 8015C00
push {lr}
- ldr r0, _08015C3C @ =gUnknown_2023BE3
+ ldr r0, _08015C3C @ =gCurrentActionFuncId
ldrb r0, [r0]
subs r0, 0xB
lsls r0, 24
@@ -11726,7 +11726,7 @@ RunBattleScriptCommands_PopCallbacksStack: @ 8015C00
subs r0, 0x1
strb r0, [r1]
_08015C24:
- ldr r2, _08015C44 @ =gUnknown_3004F84
+ ldr r2, _08015C44 @ =gBattleMainFunc
ldr r0, [r3]
ldr r1, [r0, 0xC]
adds r0, r1, 0
@@ -11738,16 +11738,16 @@ _08015C24:
str r0, [r2]
b _08015C62
.align 2, 0
-_08015C3C: .4byte gUnknown_2023BE3
+_08015C3C: .4byte gCurrentActionFuncId
_08015C40: .4byte gBattleResources
-_08015C44: .4byte gUnknown_3004F84
+_08015C44: .4byte gBattleMainFunc
_08015C48:
- ldr r0, _08015C68 @ =gUnknown_2023BC8
+ ldr r0, _08015C68 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
bne _08015C62
- ldr r1, _08015C6C @ =gUnknown_825011C
- ldr r0, _08015C70 @ =gUnknown_2023D74
+ ldr r1, _08015C6C @ =gBattleScriptingCommandsTable
+ ldr r0, _08015C70 @ =gBattlescriptCurrInstr
ldr r0, [r0]
ldrb r0, [r0]
lsls r0, 2
@@ -11758,20 +11758,20 @@ _08015C62:
pop {r0}
bx r0
.align 2, 0
-_08015C68: .4byte gUnknown_2023BC8
-_08015C6C: .4byte gUnknown_825011C
-_08015C70: .4byte gUnknown_2023D74
+_08015C68: .4byte gBattleControllerExecFlags
+_08015C6C: .4byte gBattleScriptingCommandsTable
+_08015C70: .4byte gBattlescriptCurrInstr
thumb_func_end RunBattleScriptCommands_PopCallbacksStack
- thumb_func_start sub_8015C74
-sub_8015C74: @ 8015C74
+ thumb_func_start RunBattleScriptCommands
+RunBattleScriptCommands: @ 8015C74
push {lr}
- ldr r0, _08015C94 @ =gUnknown_2023BC8
+ ldr r0, _08015C94 @ =gBattleControllerExecFlags
ldr r0, [r0]
cmp r0, 0
bne _08015C90
- ldr r1, _08015C98 @ =gUnknown_825011C
- ldr r0, _08015C9C @ =gUnknown_2023D74
+ ldr r1, _08015C98 @ =gBattleScriptingCommandsTable
+ ldr r0, _08015C9C @ =gBattlescriptCurrInstr
ldr r0, [r0]
ldrb r0, [r0]
lsls r0, 2
@@ -11782,10 +11782,10 @@ _08015C90:
pop {r0}
bx r0
.align 2, 0
-_08015C94: .4byte gUnknown_2023BC8
-_08015C98: .4byte gUnknown_825011C
-_08015C9C: .4byte gUnknown_2023D74
- thumb_func_end sub_8015C74
+_08015C94: .4byte gBattleControllerExecFlags
+_08015C98: .4byte gBattleScriptingCommandsTable
+_08015C9C: .4byte gBattlescriptCurrInstr
+ thumb_func_end RunBattleScriptCommands
thumb_func_start sub_8015CA0
sub_8015CA0: @ 8015CA0
@@ -11797,9 +11797,9 @@ sub_8015CA0: @ 8015CA0
sub sp, 0x8
movs r0, 0x4
str r0, [sp]
- ldr r6, _08015CE0 @ =sBattler_AI
- ldr r1, _08015CE4 @ =gUnknown_2023BDE
- ldr r0, _08015CE8 @ =gUnknown_2023BE2
+ ldr r6, _08015CE0 @ =gBattlerAttacker
+ ldr r1, _08015CE4 @ =gBattlerByTurnOrder
+ ldr r0, _08015CE8 @ =gCurrentTurnActionNumber
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
@@ -11817,16 +11817,16 @@ sub_8015CA0: @ 8015CA0
ands r2, r0
cmp r2, 0
beq _08015CF8
- ldr r1, _08015CF4 @ =gUnknown_2023BE3
+ ldr r1, _08015CF4 @ =gCurrentActionFuncId
movs r0, 0xC
b _0801634C
.align 2, 0
-_08015CE0: .4byte sBattler_AI
-_08015CE4: .4byte gUnknown_2023BDE
-_08015CE8: .4byte gUnknown_2023BE2
+_08015CE0: .4byte gBattlerAttacker
+_08015CE4: .4byte gBattlerByTurnOrder
+_08015CE8: .4byte gCurrentTurnActionNumber
_08015CEC: .4byte gBattleStruct
_08015CF0: .4byte gBitTable
-_08015CF4: .4byte gUnknown_2023BE3
+_08015CF4: .4byte gCurrentActionFuncId
_08015CF8:
ldr r1, _08015D6C @ =gCritMultiplier
movs r0, 0x1
@@ -11839,12 +11839,12 @@ _08015CF8:
strb r2, [r0]
ldr r0, _08015D74 @ =gMoveResultFlags
strb r2, [r0]
- ldr r0, _08015D78 @ =gUnknown_2023D72
+ ldr r0, _08015D78 @ =gMultiHitCounter
strb r2, [r0]
- ldr r0, _08015D7C @ =gUnknown_2023E82
+ ldr r0, _08015D7C @ =gBattleCommunication
strb r2, [r0, 0x6]
- ldr r2, _08015D80 @ =gUnknown_2023D48
- ldr r3, _08015D84 @ =gUnknown_2023D49
+ ldr r2, _08015D80 @ =gCurrMovePos
+ ldr r3, _08015D84 @ =gChosenMovePos
mov r9, r3
ldrb r0, [r6]
ldr r4, _08015D88 @ =gBattleStruct
@@ -11854,7 +11854,7 @@ _08015CF8:
ldrb r0, [r0]
strb r0, [r3]
strb r0, [r2]
- ldr r1, _08015D8C @ =gUnknown_2023E8C
+ ldr r1, _08015D8C @ =gProtectStructs
ldrb r4, [r6]
lsls r0, r4, 4
adds r3, r0, r1
@@ -11868,11 +11868,11 @@ _08015CF8:
ands r0, r1
strb r0, [r3]
ldr r2, _08015D90 @ =gCurrentMove
- ldr r1, _08015D94 @ =gUnknown_2023D4C
+ ldr r1, _08015D94 @ =gChosenMove
movs r0, 0xA5
strh r0, [r1]
strh r0, [r2]
- ldr r2, _08015D98 @ =gUnknown_2023DD0
+ ldr r2, _08015D98 @ =gHitMarker
ldr r0, [r2]
movs r1, 0x80
lsls r1, 4
@@ -11889,15 +11889,15 @@ _08015CF8:
_08015D6C: .4byte gCritMultiplier
_08015D70: .4byte gBattleScripting
_08015D74: .4byte gMoveResultFlags
-_08015D78: .4byte gUnknown_2023D72
-_08015D7C: .4byte gUnknown_2023E82
-_08015D80: .4byte gUnknown_2023D48
-_08015D84: .4byte gUnknown_2023D49
+_08015D78: .4byte gMultiHitCounter
+_08015D7C: .4byte gBattleCommunication
+_08015D80: .4byte gCurrMovePos
+_08015D84: .4byte gChosenMovePos
_08015D88: .4byte gBattleStruct
-_08015D8C: .4byte gUnknown_2023E8C
+_08015D8C: .4byte gProtectStructs
_08015D90: .4byte gCurrentMove
-_08015D94: .4byte gUnknown_2023D4C
-_08015D98: .4byte gUnknown_2023DD0
+_08015D94: .4byte gChosenMove
+_08015D98: .4byte gHitMarker
_08015D9C:
ldr r0, _08015DD4 @ =gBattleMons
movs r1, 0x58
@@ -11920,8 +11920,8 @@ _08015D9C:
beq _08015DE4
_08015DC2:
ldr r3, _08015DD8 @ =gCurrentMove
- ldr r2, _08015DDC @ =gUnknown_2023D4C
- ldr r1, _08015DE0 @ =gUnknown_2023DB8
+ ldr r2, _08015DDC @ =gChosenMove
+ ldr r1, _08015DE0 @ =gLockedMoves
lsls r0, r4, 1
adds r0, r1
ldrh r0, [r0]
@@ -11931,8 +11931,8 @@ _08015DC2:
.align 2, 0
_08015DD4: .4byte gBattleMons
_08015DD8: .4byte gCurrentMove
-_08015DDC: .4byte gUnknown_2023D4C
-_08015DE0: .4byte gUnknown_2023DB8
+_08015DDC: .4byte gChosenMove
+_08015DE0: .4byte gLockedMoves
_08015DE4:
ldr r3, _08015E38 @ =gDisableStructs
mov r12, r3
@@ -11954,7 +11954,7 @@ _08015DE4:
cmp r2, r1
bne _08015E48
ldr r2, _08015E3C @ =gCurrentMove
- ldr r0, _08015E40 @ =gUnknown_2023D4C
+ ldr r0, _08015E40 @ =gChosenMove
strh r4, [r0]
strh r4, [r2]
ldrb r1, [r6]
@@ -11977,7 +11977,7 @@ _08015DE4:
.align 2, 0
_08015E38: .4byte gDisableStructs
_08015E3C: .4byte gCurrentMove
-_08015E40: .4byte gUnknown_2023D4C
+_08015E40: .4byte gChosenMove
_08015E44: .4byte gBattleStruct
_08015E48:
cmp r2, 0
@@ -11989,7 +11989,7 @@ _08015E48:
mov r0, r8
strb r3, [r0]
ldr r3, _08015EB0 @ =gCurrentMove
- ldr r2, _08015EB4 @ =gUnknown_2023D4C
+ ldr r2, _08015EB4 @ =gChosenMove
ldrb r0, [r0]
lsls r0, 1
ldrb r1, [r6]
@@ -12032,13 +12032,13 @@ _08015E48:
b _08015EF6
.align 2, 0
_08015EB0: .4byte gCurrentMove
-_08015EB4: .4byte gUnknown_2023D4C
+_08015EB4: .4byte gChosenMove
_08015EB8: .4byte gBattleStruct
_08015EBC:
mov r4, r8
ldrb r0, [r4]
lsls r0, 1
- ldr r4, _08015EFC @ =sBattler_AI
+ ldr r4, _08015EFC @ =gBattlerAttacker
ldrb r2, [r4]
movs r1, 0x58
muls r1, r2
@@ -12046,7 +12046,7 @@ _08015EBC:
mov r1, r10
adds r1, 0xC
adds r0, r1
- ldr r1, _08015F00 @ =gUnknown_2023DC4
+ ldr r1, _08015F00 @ =gChosenMoveByBattler
lsls r2, 1
adds r2, r1
ldrh r3, [r0]
@@ -12054,7 +12054,7 @@ _08015EBC:
cmp r3, r2
beq _08015F10
ldr r1, _08015F04 @ =gCurrentMove
- ldr r0, _08015F08 @ =gUnknown_2023D4C
+ ldr r0, _08015F08 @ =gChosenMove
strh r3, [r0]
strh r3, [r1]
ldrh r0, [r1]
@@ -12068,18 +12068,18 @@ _08015EF6:
strb r0, [r1, 0xC]
b _08015F18
.align 2, 0
-_08015EFC: .4byte sBattler_AI
-_08015F00: .4byte gUnknown_2023DC4
+_08015EFC: .4byte gBattlerAttacker
+_08015F00: .4byte gChosenMoveByBattler
_08015F04: .4byte gCurrentMove
-_08015F08: .4byte gUnknown_2023D4C
+_08015F08: .4byte gChosenMove
_08015F0C: .4byte gBattleStruct
_08015F10:
ldr r1, _08015F30 @ =gCurrentMove
- ldr r0, _08015F34 @ =gUnknown_2023D4C
+ ldr r0, _08015F34 @ =gChosenMove
strh r3, [r0]
strh r3, [r1]
_08015F18:
- ldr r0, _08015F38 @ =sBattler_AI
+ ldr r0, _08015F38 @ =gBattlerAttacker
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
@@ -12092,8 +12092,8 @@ _08015F18:
b _08015F48
.align 2, 0
_08015F30: .4byte gCurrentMove
-_08015F34: .4byte gUnknown_2023D4C
-_08015F38: .4byte sBattler_AI
+_08015F34: .4byte gChosenMove
+_08015F38: .4byte gBattlerAttacker
_08015F3C: .4byte gBattleResults
_08015F40:
ldr r0, _08015FAC @ =gBattleResults
@@ -12101,7 +12101,7 @@ _08015F40:
ldrh r1, [r1]
strh r1, [r0, 0x24]
_08015F48:
- ldr r4, _08015FB4 @ =sBattler_AI
+ ldr r4, _08015FB4 @ =gBattlerAttacker
ldrb r0, [r4]
bl GetBattlerSide
movs r1, 0x1
@@ -12150,7 +12150,7 @@ _08015F48:
.align 2, 0
_08015FAC: .4byte gBattleResults
_08015FB0: .4byte gCurrentMove
-_08015FB4: .4byte sBattler_AI
+_08015FB4: .4byte gBattlerAttacker
_08015FB8: .4byte gSideTimers
_08015FBC: .4byte gBattleMoves
_08015FC0: .4byte gBattleMons
@@ -12160,7 +12160,7 @@ _08015FC8:
ldr r1, [r2]
movs r0, 0x1
ands r1, r0
- ldr r3, _080160E8 @ =sBattler_AI
+ ldr r3, _080160E8 @ =gBattlerAttacker
adds r7, r2, 0
cmp r1, 0
bne _08015FDA
@@ -12192,7 +12192,7 @@ _08015FEC:
b _080161F8
_08016008:
ldr r3, _080160F8 @ =gBattleMons
- ldr r2, _080160E8 @ =sBattler_AI
+ ldr r2, _080160E8 @ =gBattlerAttacker
ldrb r6, [r2]
ldr r0, _080160FC @ =gBattleStruct
ldr r0, [r0]
@@ -12231,7 +12231,7 @@ _08016048:
lsrs r0, 24
cmp r6, r0
beq _08016096
- ldr r0, _080160E8 @ =sBattler_AI
+ ldr r0, _080160E8 @ =gBattlerAttacker
ldrb r1, [r0]
ldr r0, _080160FC @ =gBattleStruct
ldr r0, [r0]
@@ -12250,14 +12250,14 @@ _08016048:
cmp r0, 0x1F
bne _08016096
adds r0, r2, 0
- bl BankGetTurnOrder
+ bl GetBattlerTurnOrderNum
lsls r0, 24
lsrs r0, 24
ldr r3, [sp]
cmp r0, r3
bcs _08016096
ldrb r0, [r4]
- bl BankGetTurnOrder
+ bl GetBattlerTurnOrderNum
lsls r0, 24
lsrs r0, 24
str r0, [sp]
@@ -12278,7 +12278,7 @@ _080160A8:
b _080161AA
_080160B0:
ldr r2, _080160F0 @ =gBattleMoves
- ldr r0, _08016108 @ =gUnknown_2023D4C
+ ldr r0, _08016108 @ =gChosenMove
ldrh r1, [r0]
lsls r0, r1, 1
adds r0, r1
@@ -12288,7 +12288,7 @@ _080160B0:
ands r4, r0
cmp r4, 0
beq _08016130
- ldr r0, _080160E8 @ =sBattler_AI
+ ldr r0, _080160E8 @ =gBattlerAttacker
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
@@ -12303,7 +12303,7 @@ _080160B0:
b _08016122
.align 2, 0
_080160E4: .4byte gBattleTypeFlags
-_080160E8: .4byte sBattler_AI
+_080160E8: .4byte gBattlerAttacker
_080160EC: .4byte gSideTimers
_080160F0: .4byte gBattleMoves
_080160F4: .4byte gCurrentMove
@@ -12311,7 +12311,7 @@ _080160F8: .4byte gBattleMons
_080160FC: .4byte gBattleStruct
_08016100: .4byte gActiveBattler
_08016104: .4byte gBattlersCount
-_08016108: .4byte gUnknown_2023D4C
+_08016108: .4byte gChosenMove
_0801610C:
movs r0, 0x3
b _08016122
@@ -12334,7 +12334,7 @@ _08016122:
_0801612C: .4byte gBattlerTarget
_08016130:
ldr r2, _08016178 @ =gBattlerTarget
- ldr r0, _0801617C @ =sBattler_AI
+ ldr r0, _0801617C @ =gBattlerAttacker
ldrb r0, [r0]
ldr r1, _08016180 @ =gBattleStruct
ldr r1, [r1]
@@ -12356,7 +12356,7 @@ _08016140:
bne _0801615A
b _0801632C
_0801615A:
- ldr r6, _0801617C @ =sBattler_AI
+ ldr r6, _0801617C @ =gBattlerAttacker
ldrb r0, [r6]
bl GetBattlerSide
adds r4, r0, 0
@@ -12370,7 +12370,7 @@ _0801615A:
b _0801631A
.align 2, 0
_08016178: .4byte gBattlerTarget
-_0801617C: .4byte sBattler_AI
+_0801617C: .4byte gBattlerAttacker
_08016180: .4byte gBattleStruct
_08016184: .4byte gAbsentBattlerFlags
_08016188: .4byte gBitTable
@@ -12390,7 +12390,7 @@ _0801618C:
b _08016310
_080161AA:
ldr r4, _080161E4 @ =gActiveBattler
- ldr r0, _080161E8 @ =gUnknown_2023BDE
+ ldr r0, _080161E8 @ =gBattlerByTurnOrder
ldr r3, [sp]
adds r0, r3, r0
ldrb r0, [r0]
@@ -12402,8 +12402,8 @@ _080161AA:
adds r1, r2
adds r1, 0x20
ldrb r1, [r1]
- bl sub_80C71D0
- ldr r2, _080161F0 @ =gUnknown_2023ECC
+ bl RecordAbilityBattle
+ ldr r2, _080161F0 @ =gSpecialStatuses
ldrb r1, [r4]
lsls r0, r1, 2
adds r0, r1
@@ -12419,9 +12419,9 @@ _080161AA:
b _0801632C
.align 2, 0
_080161E4: .4byte gActiveBattler
-_080161E8: .4byte gUnknown_2023BDE
+_080161E8: .4byte gBattlerByTurnOrder
_080161EC: .4byte gBattleMons
-_080161F0: .4byte gUnknown_2023ECC
+_080161F0: .4byte gSpecialStatuses
_080161F4: .4byte gBattlerTarget
_080161F8:
ldr r0, [r7]
@@ -12430,7 +12430,7 @@ _080161F8:
cmp r0, 0
beq _080162A0
ldr r2, _08016238 @ =gBattleMoves
- ldr r0, _0801623C @ =gUnknown_2023D4C
+ ldr r0, _0801623C @ =gChosenMove
ldrh r1, [r0]
lsls r0, r1, 1
adds r0, r1
@@ -12455,7 +12455,7 @@ _080161F8:
b _08016256
.align 2, 0
_08016238: .4byte gBattleMoves
-_0801623C: .4byte gUnknown_2023D4C
+_0801623C: .4byte gChosenMove
_08016240:
movs r0, 0x3
b _08016256
@@ -12484,7 +12484,7 @@ _08016256:
ands r1, r0
cmp r1, 0
beq _0801632C
- ldr r0, _0801629C @ =sBattler_AI
+ ldr r0, _0801629C @ =gBattlerAttacker
ldrb r0, [r0]
bl GetBattlerSide
adds r4, r0, 0
@@ -12500,7 +12500,7 @@ _08016256:
_08016290: .4byte gBattlerTarget
_08016294: .4byte gAbsentBattlerFlags
_08016298: .4byte gBitTable
-_0801629C: .4byte sBattler_AI
+_0801629C: .4byte gBattlerAttacker
_080162A0:
ldr r5, _080162E4 @ =gBattlerTarget
adds r2, r3, 0
@@ -12566,8 +12566,8 @@ _0801631A:
bl GetBattlerAtPosition
strb r0, [r5]
_0801632C:
- ldr r4, _08016360 @ =gUnknown_2023D74
- ldr r3, _08016364 @ =gUnknown_81D65A8
+ ldr r4, _08016360 @ =gBattlescriptCurrInstr
+ ldr r3, _08016364 @ =gBattleScriptsForMoveEffects
ldr r2, _08016368 @ =gBattleMoves
ldr r0, _0801636C @ =gCurrentMove
ldrh r1, [r0]
@@ -12580,7 +12580,7 @@ _0801632C:
adds r0, r3
ldr r0, [r0]
str r0, [r4]
- ldr r1, _08016370 @ =gUnknown_2023BE3
+ ldr r1, _08016370 @ =gCurrentActionFuncId
movs r0, 0xA
_0801634C:
strb r0, [r1]
@@ -12593,19 +12593,19 @@ _0801634C:
pop {r0}
bx r0
.align 2, 0
-_08016360: .4byte gUnknown_2023D74
-_08016364: .4byte gUnknown_81D65A8
+_08016360: .4byte gBattlescriptCurrInstr
+_08016364: .4byte gBattleScriptsForMoveEffects
_08016368: .4byte gBattleMoves
_0801636C: .4byte gCurrentMove
-_08016370: .4byte gUnknown_2023BE3
+_08016370: .4byte gCurrentActionFuncId
thumb_func_end sub_8015CA0
thumb_func_start sub_8016374
sub_8016374: @ 8016374
push {r4,lr}
- ldr r3, _080163E0 @ =sBattler_AI
- ldr r1, _080163E4 @ =gUnknown_2023BDE
- ldr r0, _080163E8 @ =gUnknown_2023BE2
+ ldr r3, _080163E0 @ =gBattlerAttacker
+ ldr r1, _080163E4 @ =gBattlerByTurnOrder
+ ldr r0, _080163E8 @ =gCurrentTurnActionNumber
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
@@ -12615,11 +12615,11 @@ sub_8016374: @ 8016374
strh r2, [r0]
ldr r0, _080163F0 @ =gBattle_BG0_Y
strh r2, [r0]
- ldr r1, _080163F4 @ =gUnknown_2023FF8
+ ldr r1, _080163F4 @ =gActionSelectionCursor
ldrb r0, [r3]
adds r0, r1
strb r2, [r0]
- ldr r1, _080163F8 @ =gUnknown_2023FFC
+ ldr r1, _080163F8 @ =gMoveSelectionCursor
ldrb r0, [r3]
adds r0, r1
strb r2, [r0]
@@ -12641,10 +12641,10 @@ sub_8016374: @ 8016374
strb r0, [r2, 0x4]
ldr r0, _08016404 @ =gBattleScripting
strb r4, [r0, 0x17]
- ldr r1, _08016408 @ =gUnknown_2023D74
+ ldr r1, _08016408 @ =gBattlescriptCurrInstr
ldr r0, _0801640C @ =gUnknown_81D894D
str r0, [r1]
- ldr r1, _08016410 @ =gUnknown_2023BE3
+ ldr r1, _08016410 @ =gCurrentActionFuncId
movs r0, 0xA
strb r0, [r1]
ldr r1, _08016414 @ =gBattleResults
@@ -12658,19 +12658,19 @@ _080163DA:
pop {r0}
bx r0
.align 2, 0
-_080163E0: .4byte sBattler_AI
-_080163E4: .4byte gUnknown_2023BDE
-_080163E8: .4byte gUnknown_2023BE2
+_080163E0: .4byte gBattlerAttacker
+_080163E4: .4byte gBattlerByTurnOrder
+_080163E8: .4byte gCurrentTurnActionNumber
_080163EC: .4byte gBattle_BG0_X
_080163F0: .4byte gBattle_BG0_Y
-_080163F4: .4byte gUnknown_2023FF8
-_080163F8: .4byte gUnknown_2023FFC
+_080163F4: .4byte gActionSelectionCursor
+_080163F8: .4byte gMoveSelectionCursor
_080163FC: .4byte gBattleTextBuff1
_08016400: .4byte gBattleStruct
_08016404: .4byte gBattleScripting
-_08016408: .4byte gUnknown_2023D74
+_08016408: .4byte gBattlescriptCurrInstr
_0801640C: .4byte gUnknown_81D894D
-_08016410: .4byte gUnknown_2023BE3
+_08016410: .4byte gCurrentActionFuncId
_08016414: .4byte gBattleResults
thumb_func_end sub_8016374
@@ -12681,10 +12681,10 @@ sub_8016418: @ 8016418
mov r6, r9
mov r5, r8
push {r5-r7}
- ldr r4, _08016474 @ =sBattler_AI
+ ldr r4, _08016474 @ =gBattlerAttacker
ldr r2, _08016478 @ =gBattlerTarget
- ldr r1, _0801647C @ =gUnknown_2023BDE
- ldr r0, _08016480 @ =gUnknown_2023BE2
+ ldr r1, _0801647C @ =gBattlerByTurnOrder
+ ldr r0, _08016480 @ =gCurrentTurnActionNumber
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
@@ -12697,8 +12697,8 @@ sub_8016418: @ 8016418
strh r1, [r0]
ldrb r0, [r4]
bl ClearFuryCutterDestinyBondGrudge
- ldr r5, _0801648C @ =gUnknown_2023D68
- ldr r2, _08016490 @ =gUnknown_20233C4
+ ldr r5, _0801648C @ =gLastUsedItem
+ ldr r2, _08016490 @ =gBattleBufferB
ldrb r1, [r4]
lsls r1, 9
adds r0, r2, 0x1
@@ -12713,7 +12713,7 @@ sub_8016418: @ 8016418
adds r1, r3, 0
cmp r1, 0xC
bhi _0801649C
- ldr r2, _08016494 @ =gUnknown_2023D74
+ ldr r2, _08016494 @ =gBattlescriptCurrInstr
ldr r1, _08016498 @ =gUnknown_81D99B0
ldrh r0, [r5]
lsls r0, 2
@@ -12722,15 +12722,15 @@ sub_8016418: @ 8016418
str r0, [r2]
b _080164FC
.align 2, 0
-_08016474: .4byte sBattler_AI
+_08016474: .4byte gBattlerAttacker
_08016478: .4byte gBattlerTarget
-_0801647C: .4byte gUnknown_2023BDE
-_08016480: .4byte gUnknown_2023BE2
+_0801647C: .4byte gBattlerByTurnOrder
+_08016480: .4byte gCurrentTurnActionNumber
_08016484: .4byte gBattle_BG0_X
_08016488: .4byte gBattle_BG0_Y
-_0801648C: .4byte gUnknown_2023D68
-_08016490: .4byte gUnknown_20233C4
-_08016494: .4byte gUnknown_2023D74
+_0801648C: .4byte gLastUsedItem
+_08016490: .4byte gBattleBufferB
+_08016494: .4byte gBattlescriptCurrInstr
_08016498: .4byte gUnknown_81D99B0
_0801649C:
adds r0, r3, 0
@@ -12739,51 +12739,51 @@ _0801649C:
lsrs r0, 16
cmp r0, 0x1
bhi _080164C4
- ldr r0, _080164B8 @ =gUnknown_2023D74
+ ldr r0, _080164B8 @ =gBattlescriptCurrInstr
ldr r1, _080164BC @ =gUnknown_81D99FC
ldr r1, [r1]
str r1, [r0]
- ldr r1, _080164C0 @ =gUnknown_2023BE3
+ ldr r1, _080164C0 @ =gCurrentActionFuncId
mov r10, r1
b _0801671E
.align 2, 0
-_080164B8: .4byte gUnknown_2023D74
+_080164B8: .4byte gBattlescriptCurrInstr
_080164BC: .4byte gUnknown_81D99FC
-_080164C0: .4byte gUnknown_2023BE3
+_080164C0: .4byte gCurrentActionFuncId
_080164C4:
movs r0, 0xAF
lsls r0, 1
cmp r1, r0
bne _080164E8
- ldr r0, _080164DC @ =gUnknown_2023D74
+ ldr r0, _080164DC @ =gBattlescriptCurrInstr
ldr r1, _080164E0 @ =gUnknown_81D99FC
ldr r1, [r1, 0x4]
str r1, [r0]
- ldr r2, _080164E4 @ =gUnknown_2023BE3
+ ldr r2, _080164E4 @ =gCurrentActionFuncId
mov r10, r2
b _0801671E
.align 2, 0
-_080164DC: .4byte gUnknown_2023D74
+_080164DC: .4byte gBattlescriptCurrInstr
_080164E0: .4byte gUnknown_81D99FC
-_080164E4: .4byte gUnknown_2023BE3
+_080164E4: .4byte gCurrentActionFuncId
_080164E8:
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
bne _08016510
- ldr r0, _08016504 @ =gUnknown_2023D74
+ ldr r0, _08016504 @ =gBattlescriptCurrInstr
ldr r1, _08016508 @ =gUnknown_81D99E4
ldr r1, [r1]
str r1, [r0]
_080164FC:
- ldr r0, _0801650C @ =gUnknown_2023BE3
+ ldr r0, _0801650C @ =gCurrentActionFuncId
mov r10, r0
b _0801671E
.align 2, 0
-_08016504: .4byte gUnknown_2023D74
+_08016504: .4byte gBattlescriptCurrInstr
_08016508: .4byte gUnknown_81D99E4
-_0801650C: .4byte gUnknown_2023BE3
+_0801650C: .4byte gCurrentActionFuncId
_08016510:
ldr r3, _08016548 @ =gBattleScripting
ldrb r0, [r4]
@@ -12797,12 +12797,12 @@ _08016510:
ldrb r0, [r0]
subs r0, 0x1
mov r8, r4
- ldr r1, _08016550 @ =gUnknown_2023D74
+ ldr r1, _08016550 @ =gBattlescriptCurrInstr
mov r9, r1
ldr r6, _08016554 @ =gUnknown_81D99E4
mov r12, r3
adds r7, r2, 0
- ldr r2, _08016558 @ =gUnknown_2023BE3
+ ldr r2, _08016558 @ =gCurrentActionFuncId
mov r10, r2
cmp r0, 0x4
bls _0801653C
@@ -12816,9 +12816,9 @@ _0801653C:
.align 2, 0
_08016548: .4byte gBattleScripting
_0801654C: .4byte gBattleStruct
-_08016550: .4byte gUnknown_2023D74
+_08016550: .4byte gBattlescriptCurrInstr
_08016554: .4byte gUnknown_81D99E4
-_08016558: .4byte gUnknown_2023BE3
+_08016558: .4byte gCurrentActionFuncId
_0801655C: .4byte _08016560
.align 2, 0
_08016560:
@@ -12828,10 +12828,10 @@ _08016560:
.4byte _08016608
.4byte _080166D8
_08016574:
- ldr r5, _080165AC @ =gUnknown_2023E82
+ ldr r5, _080165AC @ =gBattleCommunication
movs r0, 0
strb r0, [r5, 0x5]
- ldr r2, _080165B0 @ =sBattler_AI
+ ldr r2, _080165B0 @ =gBattlerAttacker
ldrb r0, [r2]
lsrs r0, 1
ldr r1, [r7]
@@ -12845,10 +12845,10 @@ _08016574:
beq _080165C0
movs r0, 0x3E
ands r0, r1
- ldr r1, _080165B4 @ =gUnknown_2023D74
+ ldr r1, _080165B4 @ =gBattlescriptCurrInstr
mov r9, r1
ldr r6, _080165B8 @ =gUnknown_81D99E4
- ldr r2, _080165BC @ =gUnknown_2023BE3
+ ldr r2, _080165BC @ =gCurrentActionFuncId
mov r10, r2
cmp r0, 0
bne _080165A6
@@ -12858,16 +12858,16 @@ _080165A6:
strb r0, [r5, 0x5]
b _08016706
.align 2, 0
-_080165AC: .4byte gUnknown_2023E82
-_080165B0: .4byte sBattler_AI
-_080165B4: .4byte gUnknown_2023D74
+_080165AC: .4byte gBattleCommunication
+_080165B0: .4byte gBattlerAttacker
+_080165B4: .4byte gBattlescriptCurrInstr
_080165B8: .4byte gUnknown_81D99E4
-_080165BC: .4byte gUnknown_2023BE3
+_080165BC: .4byte gCurrentActionFuncId
_080165C0:
- ldr r0, _080165FC @ =gUnknown_2023D74
+ ldr r0, _080165FC @ =gBattlescriptCurrInstr
mov r9, r0
ldr r6, _08016600 @ =gUnknown_81D99E4
- ldr r1, _08016604 @ =gUnknown_2023BE3
+ ldr r1, _08016604 @ =gCurrentActionFuncId
mov r10, r1
mov r4, r8
adds r3, r7, 0
@@ -12896,14 +12896,14 @@ _080165D0:
beq _080165D0
b _08016706
.align 2, 0
-_080165FC: .4byte gUnknown_2023D74
+_080165FC: .4byte gBattlescriptCurrInstr
_08016600: .4byte gUnknown_81D99E4
-_08016604: .4byte gUnknown_2023BE3
+_08016604: .4byte gCurrentActionFuncId
_08016608:
- ldr r3, _0801663C @ =gUnknown_2023E82
+ ldr r3, _0801663C @ =gBattleCommunication
movs r0, 0x4
strb r0, [r3, 0x5]
- ldr r2, _08016640 @ =sBattler_AI
+ ldr r2, _08016640 @ =gBattlerAttacker
ldrb r0, [r2]
lsrs r0, 1
ldr r1, [r7]
@@ -12920,18 +12920,18 @@ _08016608:
beq _08016650
movs r0, 0x5
strb r0, [r3, 0x5]
- ldr r2, _08016644 @ =gUnknown_2023D74
+ ldr r2, _08016644 @ =gBattlescriptCurrInstr
mov r9, r2
ldr r6, _08016648 @ =gUnknown_81D99E4
- ldr r0, _0801664C @ =gUnknown_2023BE3
+ ldr r0, _0801664C @ =gCurrentActionFuncId
mov r10, r0
b _08016706
.align 2, 0
-_0801663C: .4byte gUnknown_2023E82
-_08016640: .4byte sBattler_AI
-_08016644: .4byte gUnknown_2023D74
+_0801663C: .4byte gBattleCommunication
+_08016640: .4byte gBattlerAttacker
+_08016644: .4byte gBattlescriptCurrInstr
_08016648: .4byte gUnknown_81D99E4
-_0801664C: .4byte gUnknown_2023BE3
+_0801664C: .4byte gCurrentActionFuncId
_08016650:
ldr r3, _080166C4 @ =gBattleTextBuff1
movs r4, 0xFD
@@ -12952,10 +12952,10 @@ _08016650:
strb r0, [r1, 0x4]
ldrb r0, [r6]
ands r2, r0
- ldr r1, _080166CC @ =gUnknown_2023D74
+ ldr r1, _080166CC @ =gBattlescriptCurrInstr
mov r9, r1
ldr r6, _080166D0 @ =gUnknown_81D99E4
- ldr r0, _080166D4 @ =gUnknown_2023BE3
+ ldr r0, _080166D4 @ =gCurrentActionFuncId
mov r10, r0
cmp r2, 0
bne _080166B4
@@ -12995,9 +12995,9 @@ _080166B4:
.align 2, 0
_080166C4: .4byte gBattleTextBuff1
_080166C8: .4byte gBattleTextBuff2
-_080166CC: .4byte gUnknown_2023D74
+_080166CC: .4byte gBattlescriptCurrInstr
_080166D0: .4byte gUnknown_81D99E4
-_080166D4: .4byte gUnknown_2023BE3
+_080166D4: .4byte gCurrentActionFuncId
_080166D8:
ldr r0, _080166EC @ =gBattleTypeFlags
ldr r1, [r0]
@@ -13005,23 +13005,23 @@ _080166D8:
ands r1, r0
cmp r1, 0
beq _080166F4
- ldr r1, _080166F0 @ =gUnknown_2023E82
+ ldr r1, _080166F0 @ =gBattleCommunication
movs r0, 0x2
strb r0, [r1, 0x5]
b _080166F8
.align 2, 0
_080166EC: .4byte gBattleTypeFlags
-_080166F0: .4byte gUnknown_2023E82
+_080166F0: .4byte gBattleCommunication
_080166F4:
- ldr r0, _08016734 @ =gUnknown_2023E82
+ ldr r0, _08016734 @ =gBattleCommunication
strb r1, [r0, 0x5]
_080166F8:
- ldr r0, _08016738 @ =sBattler_AI
+ ldr r0, _08016738 @ =gBattlerAttacker
mov r8, r0
- ldr r1, _0801673C @ =gUnknown_2023D74
+ ldr r1, _0801673C @ =gBattlescriptCurrInstr
mov r9, r1
ldr r6, _08016740 @ =gUnknown_81D99E4
- ldr r2, _08016744 @ =gUnknown_2023BE3
+ ldr r2, _08016744 @ =gCurrentActionFuncId
mov r10, r2
_08016706:
mov r1, r8
@@ -13048,15 +13048,15 @@ _0801671E:
pop {r0}
bx r0
.align 2, 0
-_08016734: .4byte gUnknown_2023E82
-_08016738: .4byte sBattler_AI
-_0801673C: .4byte gUnknown_2023D74
+_08016734: .4byte gBattleCommunication
+_08016738: .4byte gBattlerAttacker
+_0801673C: .4byte gBattlescriptCurrInstr
_08016740: .4byte gUnknown_81D99E4
-_08016744: .4byte gUnknown_2023BE3
+_08016744: .4byte gCurrentActionFuncId
thumb_func_end sub_8016418
- thumb_func_start sub_8016748
-sub_8016748: @ 8016748
+ thumb_func_start TryRunFromBattle
+TryRunFromBattle: @ 8016748
push {r4-r7,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -13088,14 +13088,14 @@ _0801677E:
strb r4, [r0]
cmp r1, 0x25
bne _080167BC
- ldr r2, _080167B0 @ =gUnknown_2023D68
+ ldr r2, _080167B0 @ =gLastUsedItem
ldr r1, _080167B4 @ =gBattleMons
movs r0, 0x58
muls r0, r4
adds r0, r1
ldrh r0, [r0, 0x2E]
strh r0, [r2]
- ldr r0, _080167B8 @ =gUnknown_2023E8C
+ ldr r0, _080167B8 @ =gProtectStructs
lsls r2, r4, 4
adds r2, r0
ldrb r1, [r2, 0x1]
@@ -13108,9 +13108,9 @@ _0801677E:
b _08016816
.align 2, 0
_080167AC: .4byte gPotentialItemEffectBattler
-_080167B0: .4byte gUnknown_2023D68
+_080167B0: .4byte gLastUsedItem
_080167B4: .4byte gBattleMons
-_080167B8: .4byte gUnknown_2023E8C
+_080167B8: .4byte gProtectStructs
_080167BC:
ldr r7, _080167EC @ =gBattleMons
movs r2, 0x58
@@ -13124,7 +13124,7 @@ _080167BC:
bne _080167F8
ldr r0, _080167F0 @ =gLastUsedAbility
strb r1, [r0]
- ldr r0, _080167F4 @ =gUnknown_2023E8C
+ ldr r0, _080167F4 @ =gProtectStructs
lsls r2, r4, 4
adds r2, r0
ldrb r1, [r2, 0x1]
@@ -13138,7 +13138,7 @@ _080167BC:
.align 2, 0
_080167EC: .4byte gBattleMons
_080167F0: .4byte gLastUsedAbility
-_080167F4: .4byte gUnknown_2023E8C
+_080167F4: .4byte gProtectStructs
_080167F8:
ldr r0, _08016820 @ =gBattleTypeFlags
ldr r3, [r0]
@@ -13208,7 +13208,7 @@ _0801686E:
_0801687A:
cmp r6, 0
beq _0801688C
- ldr r1, _08016898 @ =gUnknown_2023BE2
+ ldr r1, _08016898 @ =gCurrentTurnActionNumber
ldr r0, _0801689C @ =gBattlersCount
ldrb r0, [r0]
strb r0, [r1]
@@ -13222,17 +13222,17 @@ _0801688C:
bx r1
.align 2, 0
_08016894: .4byte gBattleStruct
-_08016898: .4byte gUnknown_2023BE2
+_08016898: .4byte gCurrentTurnActionNumber
_0801689C: .4byte gBattlersCount
_080168A0: .4byte gBattleOutcome
- thumb_func_end sub_8016748
+ thumb_func_end TryRunFromBattle
thumb_func_start sub_80168A4
sub_80168A4: @ 80168A4
push {r4-r6,lr}
- ldr r4, _080168F4 @ =sBattler_AI
- ldr r1, _080168F8 @ =gUnknown_2023BDE
- ldr r5, _080168FC @ =gUnknown_2023BE2
+ ldr r4, _080168F4 @ =gBattlerAttacker
+ ldr r1, _080168F8 @ =gBattlerByTurnOrder
+ ldr r5, _080168FC @ =gCurrentTurnActionNumber
ldrb r0, [r5]
adds r0, r1
ldrb r0, [r0]
@@ -13253,7 +13253,7 @@ sub_80168A4: @ 80168A4
cmp r1, 0
beq _08016938
adds r4, r2, 0
- ldr r6, _0801690C @ =gUnknown_2023D7C
+ ldr r6, _0801690C @ =gChosenActionByBattler
ldr r5, _08016910 @ =gBattleOutcome
_080168D8:
ldrb r0, [r4]
@@ -13270,13 +13270,13 @@ _080168D8:
movs r1, 0x2
b _08016922
.align 2, 0
-_080168F4: .4byte sBattler_AI
-_080168F8: .4byte gUnknown_2023BDE
-_080168FC: .4byte gUnknown_2023BE2
+_080168F4: .4byte gBattlerAttacker
+_080168F8: .4byte gBattlerByTurnOrder
+_080168FC: .4byte gCurrentTurnActionNumber
_08016900: .4byte gBattleTypeFlags
_08016904: .4byte gBattlersCount
_08016908: .4byte gActiveBattler
-_0801690C: .4byte gUnknown_2023D7C
+_0801690C: .4byte gChosenActionByBattler
_08016910: .4byte gBattleOutcome
_08016914:
ldrb r0, [r4]
@@ -13316,26 +13316,26 @@ _0801694C:
cmp r0, 0
bne _0801698C
ldrb r0, [r4]
- bl sub_8016748
+ bl TryRunFromBattle
lsls r0, 24
cmp r0, 0
bne _080169D8
ldrb r0, [r4]
bl ClearFuryCutterDestinyBondGrudge
- ldr r1, _0801697C @ =gUnknown_2023E82
+ ldr r1, _0801697C @ =gBattleCommunication
movs r0, 0x3
strb r0, [r1, 0x5]
- ldr r1, _08016980 @ =gUnknown_2023D74
+ ldr r1, _08016980 @ =gBattlescriptCurrInstr
ldr r0, _08016984 @ =gUnknown_81D893A
str r0, [r1]
- ldr r1, _08016988 @ =gUnknown_2023BE3
+ ldr r1, _08016988 @ =gCurrentActionFuncId
movs r0, 0xA
b _080169D6
.align 2, 0
-_0801697C: .4byte gUnknown_2023E82
-_08016980: .4byte gUnknown_2023D74
+_0801697C: .4byte gBattleCommunication
+_08016980: .4byte gBattlescriptCurrInstr
_08016984: .4byte gUnknown_81D893A
-_08016988: .4byte gUnknown_2023BE3
+_08016988: .4byte gCurrentActionFuncId
_0801698C:
ldr r1, _080169B4 @ =gBattleMons
ldrb r2, [r4]
@@ -13348,22 +13348,22 @@ _0801698C:
ands r0, r1
cmp r0, 0
beq _080169CC
- ldr r1, _080169BC @ =gUnknown_2023E82
+ ldr r1, _080169BC @ =gBattleCommunication
movs r0, 0x4
strb r0, [r1, 0x5]
- ldr r1, _080169C0 @ =gUnknown_2023D74
+ ldr r1, _080169C0 @ =gBattlescriptCurrInstr
ldr r0, _080169C4 @ =gUnknown_81D893A
str r0, [r1]
- ldr r1, _080169C8 @ =gUnknown_2023BE3
+ ldr r1, _080169C8 @ =gCurrentActionFuncId
movs r0, 0xA
b _080169D6
.align 2, 0
_080169B4: .4byte gBattleMons
_080169B8: .4byte 0x0400e000
-_080169BC: .4byte gUnknown_2023E82
-_080169C0: .4byte gUnknown_2023D74
+_080169BC: .4byte gBattleCommunication
+_080169C0: .4byte gBattlescriptCurrInstr
_080169C4: .4byte gUnknown_81D893A
-_080169C8: .4byte gUnknown_2023BE3
+_080169C8: .4byte gCurrentActionFuncId
_080169CC:
ldr r0, _080169E0 @ =gBattlersCount
ldrb r0, [r0]
@@ -13384,9 +13384,9 @@ _080169E4: .4byte gBattleOutcome
thumb_func_start sub_80169E8
sub_80169E8: @ 80169E8
push {r4,r5,lr}
- ldr r2, _08016A44 @ =sBattler_AI
- ldr r1, _08016A48 @ =gUnknown_2023BDE
- ldr r0, _08016A4C @ =gUnknown_2023BE2
+ ldr r2, _08016A44 @ =gBattlerAttacker
+ ldr r1, _08016A48 @ =gBattlerByTurnOrder
+ ldr r0, _08016A4C @ =gCurrentTurnActionNumber
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
@@ -13428,9 +13428,9 @@ sub_80169E8: @ 80169E8
strb r0, [r4]
b _08016A98
.align 2, 0
-_08016A44: .4byte sBattler_AI
-_08016A48: .4byte gUnknown_2023BDE
-_08016A4C: .4byte gUnknown_2023BE2
+_08016A44: .4byte gBattlerAttacker
+_08016A48: .4byte gBattlerByTurnOrder
+_08016A4C: .4byte gCurrentTurnActionNumber
_08016A50: .4byte gBattle_BG0_X
_08016A54: .4byte gBattle_BG0_Y
_08016A58: .4byte gBattleStruct
@@ -13438,12 +13438,12 @@ _08016A5C: .4byte gEnemyParty
_08016A60: .4byte gBaseStats
_08016A64: .4byte 0x000004fb
_08016A68:
- ldr r1, _08016A70 @ =gUnknown_2023E82
+ ldr r1, _08016A70 @ =gBattleCommunication
movs r0, 0x1
strb r0, [r1, 0x5]
b _08016A9C
.align 2, 0
-_08016A70: .4byte gUnknown_2023E82
+_08016A70: .4byte gBattleCommunication
_08016A74:
adds r1, 0x7A
ldrb r0, [r1]
@@ -13456,38 +13456,38 @@ _08016A74:
ldrb r0, [r0]
cmp r0, 0
beq _08016A98
- ldr r1, _08016A94 @ =gUnknown_2023E82
+ ldr r1, _08016A94 @ =gBattleCommunication
movs r0, 0x2
strb r0, [r1, 0x5]
b _08016A9C
.align 2, 0
-_08016A94: .4byte gUnknown_2023E82
+_08016A94: .4byte gBattleCommunication
_08016A98:
- ldr r0, _08016AB0 @ =gUnknown_2023E82
+ ldr r0, _08016AB0 @ =gBattleCommunication
strb r5, [r0, 0x5]
_08016A9C:
- ldr r1, _08016AB4 @ =gUnknown_2023D74
+ ldr r1, _08016AB4 @ =gBattlescriptCurrInstr
ldr r0, _08016AB8 @ =gUnknown_81D9A04
ldr r0, [r0]
str r0, [r1]
- ldr r1, _08016ABC @ =gUnknown_2023BE3
+ ldr r1, _08016ABC @ =gCurrentActionFuncId
movs r0, 0xA
strb r0, [r1]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
-_08016AB0: .4byte gUnknown_2023E82
-_08016AB4: .4byte gUnknown_2023D74
+_08016AB0: .4byte gBattleCommunication
+_08016AB4: .4byte gBattlescriptCurrInstr
_08016AB8: .4byte gUnknown_81D9A04
-_08016ABC: .4byte gUnknown_2023BE3
+_08016ABC: .4byte gCurrentActionFuncId
thumb_func_end sub_80169E8
thumb_func_start sub_8016AC0
sub_8016AC0: @ 8016AC0
- ldr r2, _08016AF8 @ =sBattler_AI
- ldr r1, _08016AFC @ =gUnknown_2023BDE
- ldr r0, _08016B00 @ =gUnknown_2023BE2
+ ldr r2, _08016AF8 @ =gBattlerAttacker
+ ldr r1, _08016AFC @ =gBattlerByTurnOrder
+ ldr r0, _08016B00 @ =gCurrentTurnActionNumber
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
@@ -13501,36 +13501,36 @@ sub_8016AC0: @ 8016AC0
ldrb r0, [r1]
subs r0, 0x1
strb r0, [r1]
- ldr r1, _08016B10 @ =gUnknown_2023D68
+ ldr r1, _08016B10 @ =gLastUsedItem
movs r0, 0x5
strh r0, [r1]
- ldr r1, _08016B14 @ =gUnknown_2023D74
+ ldr r1, _08016B14 @ =gBattlescriptCurrInstr
ldr r0, _08016B18 @ =gUnknown_81D99B0
ldr r0, [r0, 0x14]
str r0, [r1]
- ldr r1, _08016B1C @ =gUnknown_2023BE3
+ ldr r1, _08016B1C @ =gCurrentActionFuncId
movs r0, 0xA
strb r0, [r1]
bx lr
.align 2, 0
-_08016AF8: .4byte sBattler_AI
-_08016AFC: .4byte gUnknown_2023BDE
-_08016B00: .4byte gUnknown_2023BE2
+_08016AF8: .4byte gBattlerAttacker
+_08016AFC: .4byte gBattlerByTurnOrder
+_08016B00: .4byte gCurrentTurnActionNumber
_08016B04: .4byte gBattle_BG0_X
_08016B08: .4byte gBattle_BG0_Y
_08016B0C: .4byte gNumSafariBalls
-_08016B10: .4byte gUnknown_2023D68
-_08016B14: .4byte gUnknown_2023D74
+_08016B10: .4byte gLastUsedItem
+_08016B14: .4byte gBattlescriptCurrInstr
_08016B18: .4byte gUnknown_81D99B0
-_08016B1C: .4byte gUnknown_2023BE3
+_08016B1C: .4byte gCurrentActionFuncId
thumb_func_end sub_8016AC0
thumb_func_start sub_8016B20
sub_8016B20: @ 8016B20
push {r4-r7,lr}
- ldr r2, _08016B9C @ =sBattler_AI
- ldr r1, _08016BA0 @ =gUnknown_2023BDE
- ldr r0, _08016BA4 @ =gUnknown_2023BE2
+ ldr r2, _08016B9C @ =gBattlerAttacker
+ ldr r1, _08016BA0 @ =gBattlerByTurnOrder
+ ldr r0, _08016BA4 @ =gCurrentTurnActionNumber
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
@@ -13578,34 +13578,34 @@ _08016B66:
movs r0, 0x3
strb r0, [r1]
_08016B86:
- ldr r1, _08016BB4 @ =gUnknown_2023D74
+ ldr r1, _08016BB4 @ =gBattlescriptCurrInstr
ldr r0, _08016BB8 @ =gUnknown_81D9A04
ldr r0, [r0, 0x8]
str r0, [r1]
- ldr r1, _08016BBC @ =gUnknown_2023BE3
+ ldr r1, _08016BBC @ =gCurrentActionFuncId
movs r0, 0xA
strb r0, [r1]
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
-_08016B9C: .4byte sBattler_AI
-_08016BA0: .4byte gUnknown_2023BDE
-_08016BA4: .4byte gUnknown_2023BE2
+_08016B9C: .4byte gBattlerAttacker
+_08016BA0: .4byte gBattlerByTurnOrder
+_08016BA4: .4byte gCurrentTurnActionNumber
_08016BA8: .4byte gBattle_BG0_X
_08016BAC: .4byte gBattle_BG0_Y
_08016BB0: .4byte gBattleStruct
-_08016BB4: .4byte gUnknown_2023D74
+_08016BB4: .4byte gBattlescriptCurrInstr
_08016BB8: .4byte gUnknown_81D9A04
-_08016BBC: .4byte gUnknown_2023BE3
+_08016BBC: .4byte gCurrentActionFuncId
thumb_func_end sub_8016B20
thumb_func_start sub_8016BC0
sub_8016BC0: @ 8016BC0
push {r4-r7,lr}
- ldr r2, _08016C3C @ =sBattler_AI
- ldr r1, _08016C40 @ =gUnknown_2023BDE
- ldr r0, _08016C44 @ =gUnknown_2023BE2
+ ldr r2, _08016C3C @ =gBattlerAttacker
+ ldr r1, _08016C40 @ =gBattlerByTurnOrder
+ ldr r0, _08016C44 @ =gCurrentTurnActionNumber
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
@@ -13653,34 +13653,34 @@ _08016C06:
movs r0, 0x14
strb r0, [r1]
_08016C26:
- ldr r1, _08016C54 @ =gUnknown_2023D74
+ ldr r1, _08016C54 @ =gBattlescriptCurrInstr
ldr r0, _08016C58 @ =gUnknown_81D9A04
ldr r0, [r0, 0x4]
str r0, [r1]
- ldr r1, _08016C5C @ =gUnknown_2023BE3
+ ldr r1, _08016C5C @ =gCurrentActionFuncId
movs r0, 0xA
strb r0, [r1]
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
-_08016C3C: .4byte sBattler_AI
-_08016C40: .4byte gUnknown_2023BDE
-_08016C44: .4byte gUnknown_2023BE2
+_08016C3C: .4byte gBattlerAttacker
+_08016C40: .4byte gBattlerByTurnOrder
+_08016C44: .4byte gCurrentTurnActionNumber
_08016C48: .4byte gBattle_BG0_X
_08016C4C: .4byte gBattle_BG0_Y
_08016C50: .4byte gBattleStruct
-_08016C54: .4byte gUnknown_2023D74
+_08016C54: .4byte gBattlescriptCurrInstr
_08016C58: .4byte gUnknown_81D9A04
-_08016C5C: .4byte gUnknown_2023BE3
+_08016C5C: .4byte gCurrentActionFuncId
thumb_func_end sub_8016BC0
thumb_func_start HandleAction_SafriZoneRun
HandleAction_SafriZoneRun: @ 8016C60
push {r4,lr}
- ldr r2, _08016C88 @ =sBattler_AI
- ldr r1, _08016C8C @ =gUnknown_2023BDE
- ldr r4, _08016C90 @ =gUnknown_2023BE2
+ ldr r2, _08016C88 @ =gBattlerAttacker
+ ldr r1, _08016C8C @ =gBattlerByTurnOrder
+ ldr r4, _08016C90 @ =gCurrentTurnActionNumber
ldrb r0, [r4]
adds r0, r1
ldrb r0, [r0]
@@ -13697,18 +13697,18 @@ HandleAction_SafriZoneRun: @ 8016C60
pop {r0}
bx r0
.align 2, 0
-_08016C88: .4byte sBattler_AI
-_08016C8C: .4byte gUnknown_2023BDE
-_08016C90: .4byte gUnknown_2023BE2
+_08016C88: .4byte gBattlerAttacker
+_08016C8C: .4byte gBattlerByTurnOrder
+_08016C90: .4byte gCurrentTurnActionNumber
_08016C94: .4byte gBattlersCount
_08016C98: .4byte gBattleOutcome
thumb_func_end HandleAction_SafriZoneRun
thumb_func_start HandleAction_Action9
HandleAction_Action9: @ 8016C9C
- ldr r3, _08016CE8 @ =sBattler_AI
- ldr r1, _08016CEC @ =gUnknown_2023BDE
- ldr r0, _08016CF0 @ =gUnknown_2023BE2
+ ldr r3, _08016CE8 @ =gBattlerAttacker
+ ldr r1, _08016CEC @ =gBattlerByTurnOrder
+ ldr r0, _08016CF0 @ =gCurrentTurnActionNumber
ldrb r0, [r0]
adds r0, r1
ldrb r2, [r0]
@@ -13732,29 +13732,29 @@ HandleAction_Action9: @ 8016C9C
strb r0, [r1, 0x3]
movs r0, 0xFF
strb r0, [r1, 0x4]
- ldr r1, _08016D04 @ =gUnknown_2023D74
+ ldr r1, _08016D04 @ =gBattlescriptCurrInstr
ldr r0, _08016D08 @ =gUnknown_81D9A04
ldr r0, [r0, 0xC]
str r0, [r1]
- ldr r1, _08016D0C @ =gUnknown_2023BE3
+ ldr r1, _08016D0C @ =gCurrentActionFuncId
movs r0, 0xA
strb r0, [r1]
- ldr r1, _08016D10 @ =gUnknown_2023BDA
+ ldr r1, _08016D10 @ =gActionsByTurnOrder
movs r0, 0xC
strb r0, [r1, 0x1]
bx lr
.align 2, 0
-_08016CE8: .4byte sBattler_AI
-_08016CEC: .4byte gUnknown_2023BDE
-_08016CF0: .4byte gUnknown_2023BE2
+_08016CE8: .4byte gBattlerAttacker
+_08016CEC: .4byte gBattlerByTurnOrder
+_08016CF0: .4byte gCurrentTurnActionNumber
_08016CF4: .4byte gBattle_BG0_X
_08016CF8: .4byte gBattle_BG0_Y
_08016CFC: .4byte gBattleTextBuff1
_08016D00: .4byte gBattlerPartyIndexes
-_08016D04: .4byte gUnknown_2023D74
+_08016D04: .4byte gBattlescriptCurrInstr
_08016D08: .4byte gUnknown_81D9A04
-_08016D0C: .4byte gUnknown_2023BE3
-_08016D10: .4byte gUnknown_2023BDA
+_08016D0C: .4byte gCurrentActionFuncId
+_08016D10: .4byte gActionsByTurnOrder
thumb_func_end HandleAction_Action9
thumb_func_start HandleAction_Action11
@@ -13769,7 +13769,7 @@ HandleAction_Action11: @ 8016D14
ldr r0, [r0]
adds r0, 0x4D
strb r1, [r0]
- ldr r1, _08016D38 @ =gUnknown_2023BE3
+ ldr r1, _08016D38 @ =gCurrentActionFuncId
movs r0, 0xC
strb r0, [r1]
_08016D30:
@@ -13777,50 +13777,50 @@ _08016D30:
bx r0
.align 2, 0
_08016D34: .4byte gBattleStruct
-_08016D38: .4byte gUnknown_2023BE3
+_08016D38: .4byte gCurrentActionFuncId
thumb_func_end HandleAction_Action11
thumb_func_start HandleAction_NothingIsFainted
HandleAction_NothingIsFainted: @ 8016D3C
- ldr r1, _08016D5C @ =gUnknown_2023BE2
+ ldr r1, _08016D5C @ =gCurrentTurnActionNumber
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
- ldr r3, _08016D60 @ =gUnknown_2023BE3
- ldr r2, _08016D64 @ =gUnknown_2023BDA
+ ldr r3, _08016D60 @ =gCurrentActionFuncId
+ ldr r2, _08016D64 @ =gActionsByTurnOrder
ldrb r0, [r1]
adds r0, r2
ldrb r0, [r0]
strb r0, [r3]
- ldr r2, _08016D68 @ =gUnknown_2023DD0
+ ldr r2, _08016D68 @ =gHitMarker
ldr r0, [r2]
ldr r1, _08016D6C @ =0xf1e892af
ands r0, r1
str r0, [r2]
bx lr
.align 2, 0
-_08016D5C: .4byte gUnknown_2023BE2
-_08016D60: .4byte gUnknown_2023BE3
-_08016D64: .4byte gUnknown_2023BDA
-_08016D68: .4byte gUnknown_2023DD0
+_08016D5C: .4byte gCurrentTurnActionNumber
+_08016D60: .4byte gCurrentActionFuncId
+_08016D64: .4byte gActionsByTurnOrder
+_08016D68: .4byte gHitMarker
_08016D6C: .4byte 0xf1e892af
thumb_func_end HandleAction_NothingIsFainted
thumb_func_start HandleAction_ActionFinished
HandleAction_ActionFinished: @ 8016D70
push {r4,r5,lr}
- ldr r1, _08016DE4 @ =gUnknown_2023BE2
+ ldr r1, _08016DE4 @ =gCurrentTurnActionNumber
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
- ldr r3, _08016DE8 @ =gUnknown_2023BE3
- ldr r2, _08016DEC @ =gUnknown_2023BDA
+ ldr r3, _08016DE8 @ =gCurrentActionFuncId
+ ldr r2, _08016DEC @ =gActionsByTurnOrder
ldrb r0, [r1]
adds r0, r2
ldrb r0, [r0]
strb r0, [r3]
bl SpecialStatusesClear
- ldr r2, _08016DF0 @ =gUnknown_2023DD0
+ ldr r2, _08016DF0 @ =gHitMarker
ldr r0, [r2]
ldr r1, _08016DF4 @ =0xf1e892af
ands r0, r1
@@ -13836,13 +13836,13 @@ HandleAction_ActionFinished: @ 8016D70
ldr r5, _08016E04 @ =gBattleScripting
strb r1, [r5, 0x18]
strb r1, [r5, 0x19]
- ldr r2, _08016E08 @ =gUnknown_2023DA0
- ldr r3, _08016E0C @ =sBattler_AI
+ ldr r2, _08016E08 @ =gLastLandedMoves
+ ldr r3, _08016E0C @ =gBattlerAttacker
ldrb r0, [r3]
lsls r0, 1
adds r0, r2
strh r4, [r0]
- ldr r2, _08016E10 @ =gUnknown_2023DA8
+ ldr r2, _08016E10 @ =gLastHitByType
ldrb r0, [r3]
lsls r0, 1
adds r0, r2
@@ -13853,7 +13853,7 @@ HandleAction_ActionFinished: @ 8016D70
ldr r0, _08016E18 @ =gDynamicBasePower
strh r4, [r0]
strb r1, [r5, 0x14]
- ldr r0, _08016E1C @ =gUnknown_2023E82
+ ldr r0, _08016E1C @ =gBattleCommunication
strb r1, [r0, 0x3]
strb r1, [r0, 0x4]
strb r1, [r5, 0x16]
@@ -13866,21 +13866,21 @@ HandleAction_ActionFinished: @ 8016D70
pop {r0}
bx r0
.align 2, 0
-_08016DE4: .4byte gUnknown_2023BE2
-_08016DE8: .4byte gUnknown_2023BE3
-_08016DEC: .4byte gUnknown_2023BDA
-_08016DF0: .4byte gUnknown_2023DD0
+_08016DE4: .4byte gCurrentTurnActionNumber
+_08016DE8: .4byte gCurrentActionFuncId
+_08016DEC: .4byte gActionsByTurnOrder
+_08016DF0: .4byte gHitMarker
_08016DF4: .4byte 0xf1e892af
_08016DF8: .4byte gCurrentMove
_08016DFC: .4byte gBattleMoveDamage
_08016E00: .4byte gMoveResultFlags
_08016E04: .4byte gBattleScripting
-_08016E08: .4byte gUnknown_2023DA0
-_08016E0C: .4byte sBattler_AI
-_08016E10: .4byte gUnknown_2023DA8
+_08016E08: .4byte gLastLandedMoves
+_08016E0C: .4byte gBattlerAttacker
+_08016E10: .4byte gLastHitByType
_08016E14: .4byte gBattleStruct
_08016E18: .4byte gDynamicBasePower
-_08016E1C: .4byte gUnknown_2023E82
+_08016E1C: .4byte gBattleCommunication
_08016E20: .4byte gBattleResources
thumb_func_end HandleAction_ActionFinished
diff --git a/asm/battle_ai_switch_items.s b/asm/battle_ai_switch_items.s
deleted file mode 100644
index bdc1283db..000000000
--- a/asm/battle_ai_switch_items.s
+++ /dev/null
@@ -1,2654 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ShouldSwitchIfPerishSong
-ShouldSwitchIfPerishSong: @ 8039188
- push {lr}
- ldr r1, _080391D4 @ =gStatuses3
- ldr r0, _080391D8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080391E4
- ldr r0, _080391DC @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xF]
- lsls r0, 28
- cmp r0, 0
- bne _080391E4
- adds r0, r2, 0
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r1, _080391E0 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x92
- movs r1, 0x6
- strb r1, [r0]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0
- bl EmitTwoReturnValues
- movs r0, 0x1
- b _080391E6
- .align 2, 0
-_080391D4: .4byte gStatuses3
-_080391D8: .4byte gActiveBattler
-_080391DC: .4byte gDisableStructs
-_080391E0: .4byte gBattleStruct
-_080391E4:
- movs r0, 0
-_080391E6:
- pop {r1}
- bx r1
- thumb_func_end ShouldSwitchIfPerishSong
-
- thumb_func_start sub_80391EC
-sub_80391EC: @ 80391EC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _08039204 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08039234
- b _0803935C
- .align 2, 0
-_08039204: .4byte gBattleTypeFlags
-_08039208:
- ldr r0, _0803922C @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r1, _08039230 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x92
- strb r6, [r0]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0
- bl EmitTwoReturnValues
- movs r0, 0x1
- b _0803935E
- .align 2, 0
-_0803922C: .4byte gActiveBattler
-_08039230: .4byte gBattleStruct
-_08039234:
- ldr r4, _0803936C @ =gBattleMons
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x58
- muls r0, r1
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x19
- beq _08039250
- b _0803935C
-_08039250:
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r2, r0, 24
- movs r6, 0
- adds r7, r4, 0
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r4, r0, r7
- movs r0, 0x20
- adds r0, r4
- mov r8, r0
-_0803926C:
- lsls r1, r6, 1
- ldr r0, _08039370 @ =gActiveBattler
- ldrb r0, [r0]
- muls r0, r5
- adds r1, r0
- adds r0, r7, 0
- adds r0, 0xC
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- beq _08039298
- ldrh r1, [r4]
- mov r3, r8
- ldrb r2, [r3]
- bl AI_TypeCalc
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0x2
- ands r1, r0
- cmp r1, 0
- bne _0803935C
-_08039298:
- adds r6, 0x1
- cmp r6, 0x3
- ble _0803926C
- movs r6, 0
- ldr r0, _08039374 @ =gEnemyParty
- mov r9, r0
-_080392A4:
- movs r0, 0x64
- adds r5, r6, 0
- muls r5, r0
- mov r3, r9
- adds r4, r5, r3
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08039356
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08039356
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _08039356
- ldr r1, _08039378 @ =gBattlerPartyIndexes
- ldr r0, _08039370 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- beq _08039356
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r2, r0, 24
- movs r4, 0
- mov r8, r5
- ldr r1, _0803936C @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r5, r0, r1
- adds r7, r5, 0
- adds r7, 0x20
-_08039310:
- adds r1, r4, 0
- adds r1, 0xD
- mov r0, r8
- add r0, r9
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _08039350
- ldrh r1, [r5]
- ldrb r2, [r7]
- bl AI_TypeCalc
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0x2
- ands r1, r0
- cmp r1, 0
- beq _08039350
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _08039350
- b _08039208
-_08039350:
- adds r4, 0x1
- cmp r4, 0x3
- ble _08039310
-_08039356:
- adds r6, 0x1
- cmp r6, 0x5
- ble _080392A4
-_0803935C:
- movs r0, 0
-_0803935E:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0803936C: .4byte gBattleMons
-_08039370: .4byte gActiveBattler
-_08039374: .4byte gEnemyParty
-_08039378: .4byte gBattlerPartyIndexes
- thumb_func_end sub_80391EC
-
- thumb_func_start sub_803937C
-sub_803937C: @ 803937C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0x1
- bl ai_has_super_effective_move_on_field
- lsls r0, 24
- cmp r0, 0
- beq _080393A8
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _080393A8
- b _08039588
-_080393A8:
- ldr r1, _08039410 @ =gUnknown_2023DA0
- ldr r5, _08039414 @ =gActiveBattler
- ldrb r3, [r5]
- lsls r0, r3, 1
- adds r4, r0, r1
- ldrh r1, [r4]
- cmp r1, 0
- bne _080393BA
- b _08039588
-_080393BA:
- ldr r0, _08039418 @ =0x0000ffff
- cmp r1, r0
- bne _080393C2
- b _08039588
-_080393C2:
- ldr r2, _0803941C @ =gBattleMoves
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _080393D6
- b _08039588
-_080393D6:
- ldr r0, _08039420 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08039442
- mov r8, r3
- mov r0, r8
- bl GetBattlerPosition
- movs r4, 0x2
- eors r0, r4
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r1, _08039424 @ =gAbsentBattlerFlags
- ldrb r1, [r1]
- ldr r2, _08039428 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0803942C
- ldrb r7, [r5]
- b _08039446
- .align 2, 0
-_08039410: .4byte gUnknown_2023DA0
-_08039414: .4byte gActiveBattler
-_08039418: .4byte 0x0000ffff
-_0803941C: .4byte gBattleMoves
-_08039420: .4byte gBattleTypeFlags
-_08039424: .4byte gAbsentBattlerFlags
-_08039428: .4byte gBitTable
-_0803942C:
- ldrb r0, [r5]
- bl GetBattlerPosition
- eors r0, r4
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- b _08039446
-_08039442:
- adds r7, r3, 0
- mov r8, r7
-_08039446:
- ldr r3, _08039468 @ =gBattleMoves
- ldr r1, _0803946C @ =gUnknown_2023DA0
- ldr r2, _08039470 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x2]
- adds r1, r2, 0
- cmp r0, 0xA
- bne _08039474
- movs r0, 0x12
- b _08039486
- .align 2, 0
-_08039468: .4byte gBattleMoves
-_0803946C: .4byte gUnknown_2023DA0
-_08039470: .4byte gActiveBattler
-_08039474:
- cmp r0, 0xB
- bne _0803947E
- movs r2, 0xB
- mov r10, r2
- b _08039488
-_0803947E:
- cmp r0, 0xD
- beq _08039484
- b _08039588
-_08039484:
- movs r0, 0xA
-_08039486:
- mov r10, r0
-_08039488:
- ldr r2, _0803949C @ =gBattleMons
- ldrb r1, [r1]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r10
- bne _080394CC
- b _08039588
- .align 2, 0
-_0803949C: .4byte gBattleMons
-_080394A0:
- ldr r0, _080394C4 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r1, _080394C8 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x92
- strb r6, [r0]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0
- bl EmitTwoReturnValues
- movs r0, 0x1
- b _0803958A
- .align 2, 0
-_080394C4: .4byte gActiveBattler
-_080394C8: .4byte gBattleStruct
-_080394CC:
- movs r6, 0
- ldr r2, _08039558 @ =gBaseStats
- mov r9, r2
-_080394D2:
- movs r0, 0x64
- adds r1, r6, 0
- muls r1, r0
- ldr r0, _0803955C @ =gEnemyParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08039582
- adds r0, r5, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08039582
- adds r0, r5, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _08039582
- ldr r1, _08039560 @ =gBattlerPartyIndexes
- mov r2, r8
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- beq _08039582
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- beq _08039582
- ldr r0, _08039564 @ =gBattleStruct
- ldr r1, [r0]
- adds r0, r2, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r6, r0
- beq _08039582
- adds r0, r7, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r6, r0
- beq _08039582
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r5, 0
- movs r1, 0x2E
- bl GetMonData
- cmp r0, 0
- beq _08039568
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- add r0, r9
- ldrb r0, [r0, 0x17]
- b _08039572
- .align 2, 0
-_08039558: .4byte gBaseStats
-_0803955C: .4byte gEnemyParty
-_08039560: .4byte gBattlerPartyIndexes
-_08039564: .4byte gBattleStruct
-_08039568:
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- add r0, r9
- ldrb r0, [r0, 0x16]
-_08039572:
- cmp r10, r0
- bne _08039582
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- bne _080394A0
-_08039582:
- adds r6, 0x1
- cmp r6, 0x5
- ble _080394D2
-_08039588:
- movs r0, 0
-_0803958A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_803937C
-
- thumb_func_start sub_8039598
-sub_8039598: @ 8039598
- push {r4,r5,lr}
- ldr r3, _080395F0 @ =gBattleMons
- ldr r5, _080395F4 @ =gActiveBattler
- ldrb r4, [r5]
- movs r0, 0x58
- adds r2, r4, 0
- muls r2, r0
- adds r0, r3, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08039660
- adds r1, r2, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1E
- bne _08039660
- ldrh r0, [r1, 0x2C]
- ldrh r1, [r1, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bcc _08039660
- ldr r1, _080395F8 @ =gUnknown_2023DA0
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- cmp r1, 0
- beq _080395DE
- ldr r0, _080395FC @ =0x0000ffff
- cmp r1, r0
- bne _08039600
-_080395DE:
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08039600
- ldrb r0, [r5]
- b _08039668
- .align 2, 0
-_080395F0: .4byte gBattleMons
-_080395F4: .4byte gActiveBattler
-_080395F8: .4byte gUnknown_2023DA0
-_080395FC: .4byte 0x0000ffff
-_08039600:
- ldr r2, _0803962C @ =gBattleMoves
- ldr r1, _08039630 @ =gUnknown_2023DA0
- ldr r4, _08039634 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _08039638
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08039638
- ldrb r0, [r4]
- b _08039668
- .align 2, 0
-_0803962C: .4byte gBattleMoves
-_08039630: .4byte gUnknown_2023DA0
-_08039634: .4byte gActiveBattler
-_08039638:
- movs r0, 0x8
- movs r1, 0x1
- bl sub_8039828
- lsls r0, 24
- cmp r0, 0
- bne _08039686
- movs r0, 0x4
- movs r1, 0x1
- bl sub_8039828
- lsls r0, 24
- cmp r0, 0
- bne _08039686
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- bne _08039664
-_08039660:
- movs r0, 0
- b _08039688
-_08039664:
- ldr r0, _08039690 @ =gActiveBattler
- ldrb r0, [r0]
-_08039668:
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r1, _08039694 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x92
- movs r1, 0x6
- strb r1, [r0]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0
- bl EmitTwoReturnValues
-_08039686:
- movs r0, 0x1
-_08039688:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08039690: .4byte gActiveBattler
-_08039694: .4byte gBattleStruct
- thumb_func_end sub_8039598
-
- thumb_func_start ai_has_super_effective_move_on_field
-ai_has_super_effective_move_on_field: @ 8039698
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _08039730 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08039734 @ =gBitTable
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08039720
- movs r4, 0
- ldr r6, _08039738 @ =gBattleMons
- movs r7, 0x58
- adds r0, r3, 0
- muls r0, r7
- adds r5, r0, r6
- movs r0, 0x20
- adds r0, r5
- mov r9, r0
-_080396D4:
- lsls r1, r4, 1
- ldr r0, _0803973C @ =gActiveBattler
- ldrb r0, [r0]
- muls r0, r7
- adds r1, r0
- adds r0, r6, 0
- adds r0, 0xC
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- beq _0803971A
- ldrh r1, [r5]
- mov r3, r9
- ldrb r2, [r3]
- bl AI_TypeCalc
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0x2
- ands r1, r0
- cmp r1, 0
- beq _0803971A
- mov r0, r8
- cmp r0, 0
- bne _08039744
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _08039744
-_0803971A:
- adds r4, 0x1
- cmp r4, 0x3
- ble _080396D4
-_08039720:
- ldr r0, _08039740 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08039748
- b _080397C2
- .align 2, 0
-_08039730: .4byte gAbsentBattlerFlags
-_08039734: .4byte gBitTable
-_08039738: .4byte gBattleMons
-_0803973C: .4byte gActiveBattler
-_08039740: .4byte gBattleTypeFlags
-_08039744:
- movs r0, 0x1
- b _080397C4
-_08039748:
- movs r0, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _080397D0 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _080397D4 @ =gBitTable
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080397C2
- movs r4, 0
- ldr r6, _080397D8 @ =gBattleMons
- movs r7, 0x58
- adds r0, r3, 0
- muls r0, r7
- adds r5, r0, r6
- movs r3, 0x20
- adds r3, r5
- mov r9, r3
-_08039776:
- lsls r1, r4, 1
- ldr r0, _080397DC @ =gActiveBattler
- ldrb r0, [r0]
- muls r0, r7
- adds r1, r0
- adds r0, r6, 0
- adds r0, 0xC
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- beq _080397BC
- ldrh r1, [r5]
- mov r3, r9
- ldrb r2, [r3]
- bl AI_TypeCalc
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0x2
- ands r1, r0
- cmp r1, 0
- beq _080397BC
- mov r0, r8
- cmp r0, 0
- bne _08039744
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _08039744
-_080397BC:
- adds r4, 0x1
- cmp r4, 0x3
- ble _08039776
-_080397C2:
- movs r0, 0
-_080397C4:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080397D0: .4byte gAbsentBattlerFlags
-_080397D4: .4byte gBitTable
-_080397D8: .4byte gBattleMons
-_080397DC: .4byte gActiveBattler
- thumb_func_end ai_has_super_effective_move_on_field
-
- thumb_func_start AI_AreStatsRaised
-AI_AreStatsRaised: @ 80397E0
- push {r4,lr}
- movs r4, 0
- ldr r1, _08039820 @ =gBattleMons
- ldr r0, _08039824 @ =gActiveBattler
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x18
- adds r2, r0, r1
- movs r3, 0x7
-_080397F4:
- ldrb r1, [r2]
- movs r0, 0
- ldrsb r0, [r2, r0]
- cmp r0, 0x6
- ble _0803980A
- subs r1, 0x6
- lsls r0, r4, 24
- asrs r0, 24
- adds r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
-_0803980A:
- adds r2, 0x1
- subs r3, 0x1
- cmp r3, 0
- bge _080397F4
- movs r0, 0
- cmp r4, 0x3
- bls _0803981A
- movs r0, 0x1
-_0803981A:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08039820: .4byte gBattleMons
-_08039824: .4byte gActiveBattler
- thumb_func_end AI_AreStatsRaised
-
- thumb_func_start sub_8039828
-sub_8039828: @ 8039828
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp, 0x4]
- ldr r1, _080398B4 @ =gUnknown_2023DA0
- ldr r5, _080398B8 @ =gActiveBattler
- ldrb r3, [r5]
- lsls r0, r3, 1
- adds r4, r0, r1
- ldrh r1, [r4]
- cmp r1, 0
- bne _08039852
- b _08039A54
-_08039852:
- ldr r0, _080398BC @ =0x0000ffff
- cmp r1, r0
- bne _0803985A
- b _08039A54
-_0803985A:
- ldr r0, _080398C0 @ =gUnknown_2023DC0
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08039866
- b _08039A54
-_08039866:
- ldr r2, _080398C4 @ =gBattleMoves
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _0803987A
- b _08039A54
-_0803987A:
- ldr r0, _080398C8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08039918
- mov r9, r3
- mov r0, r9
- bl GetBattlerPosition
- movs r4, 0x2
- eors r0, r4
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r1, _080398CC @ =gAbsentBattlerFlags
- ldrb r1, [r1]
- ldr r2, _080398D0 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _080398D4
- ldrb r5, [r5]
- mov r10, r5
- b _0803991C
- .align 2, 0
-_080398B4: .4byte gUnknown_2023DA0
-_080398B8: .4byte gActiveBattler
-_080398BC: .4byte 0x0000ffff
-_080398C0: .4byte gUnknown_2023DC0
-_080398C4: .4byte gBattleMoves
-_080398C8: .4byte gBattleTypeFlags
-_080398CC: .4byte gAbsentBattlerFlags
-_080398D0: .4byte gBitTable
-_080398D4:
- ldrb r0, [r5]
- bl GetBattlerPosition
- eors r0, r4
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- b _0803991C
-_080398EC:
- ldr r0, _08039910 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r1, _08039914 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x92
- strb r7, [r0]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0
- bl EmitTwoReturnValues
- movs r0, 0x1
- b _08039A56
- .align 2, 0
-_08039910: .4byte gActiveBattler
-_08039914: .4byte gBattleStruct
-_08039918:
- mov r9, r3
- mov r10, r9
-_0803991C:
- movs r7, 0
-_0803991E:
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _080399B0 @ =gEnemyParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _08039936
- b _08039A4C
-_08039936:
- adds r0, r5, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- bne _08039944
- b _08039A4C
-_08039944:
- adds r0, r5, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _08039A4C
- ldr r1, _080399B4 @ =gBattlerPartyIndexes
- mov r2, r9
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r7, r0
- beq _08039A4C
- mov r2, r10
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r7, r0
- beq _08039A4C
- ldr r0, _080399B8 @ =gBattleStruct
- ldr r1, [r0]
- mov r2, r9
- adds r0, r2, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r7, r0
- beq _08039A4C
- mov r2, r10
- adds r0, r2, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r7, r0
- beq _08039A4C
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r5, 0
- movs r1, 0x2E
- bl GetMonData
- cmp r0, 0
- beq _080399C0
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- ldr r1, _080399BC @ =gBaseStats
- adds r0, r1
- ldrb r2, [r0, 0x17]
- b _080399CC
- .align 2, 0
-_080399B0: .4byte gEnemyParty
-_080399B4: .4byte gBattlerPartyIndexes
-_080399B8: .4byte gBattleStruct
-_080399BC: .4byte gBaseStats
-_080399C0:
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- ldr r2, _08039A68 @ =gBaseStats
- adds r0, r2
- ldrb r2, [r0, 0x16]
-_080399CC:
- ldr r1, _08039A6C @ =gUnknown_2023DA0
- ldr r5, _08039A70 @ =gActiveBattler
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- adds r1, r4, 0
- bl AI_TypeCalc
- ldr r1, [sp]
- ands r1, r0
- cmp r1, 0
- beq _08039A4C
- ldr r1, _08039A74 @ =gUnknown_2023DC0
- ldrb r0, [r5]
- adds r0, r1
- ldrb r0, [r0]
- mov r9, r0
- movs r4, 0
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- mov r8, r1
- ldr r1, _08039A78 @ =gBattleMons
- movs r0, 0x58
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- adds r5, r0, r1
- adds r6, r5, 0
- adds r6, 0x20
-_08039A0A:
- ldr r0, _08039A7C @ =gEnemyParty
- adds r1, r4, 0
- adds r1, 0xD
- add r0, r8
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _08039A46
- ldrh r1, [r5]
- ldrb r2, [r6]
- bl AI_TypeCalc
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0x2
- ands r1, r0
- cmp r1, 0
- beq _08039A46
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp, 0x4]
- bl __modsi3
- cmp r0, 0
- bne _08039A46
- b _080398EC
-_08039A46:
- adds r4, 0x1
- cmp r4, 0x3
- ble _08039A0A
-_08039A4C:
- adds r7, 0x1
- cmp r7, 0x5
- bgt _08039A54
- b _0803991E
-_08039A54:
- movs r0, 0
-_08039A56:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08039A68: .4byte gBaseStats
-_08039A6C: .4byte gUnknown_2023DA0
-_08039A70: .4byte gActiveBattler
-_08039A74: .4byte gUnknown_2023DC0
-_08039A78: .4byte gBattleMons
-_08039A7C: .4byte gEnemyParty
- thumb_func_end sub_8039828
-
- thumb_func_start sub_8039A80
-sub_8039A80: @ 8039A80
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- ldr r6, _08039B5C @ =gBattleMons
- ldr r4, _08039B60 @ =gActiveBattler
- ldrb r2, [r4]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r6, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08039B64 @ =0x0400e000
- ands r0, r1
- cmp r0, 0
- beq _08039AA6
- b _08039C74
-_08039AA6:
- ldr r0, _08039B68 @ =gStatuses3
- lsls r1, r2, 2
- adds r1, r0
- ldr r1, [r1]
- movs r0, 0x80
- lsls r0, 3
- ands r1, r0
- cmp r1, 0
- beq _08039ABA
- b _08039C74
-_08039ABA:
- str r1, [sp]
- movs r0, 0xC
- adds r1, r2, 0
- movs r2, 0x17
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08039AD2
- b _08039C74
-_08039AD2:
- ldrb r1, [r4]
- str r0, [sp]
- movs r0, 0xC
- movs r2, 0x47
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08039AEA
- b _08039C74
-_08039AEA:
- str r0, [sp]
- movs r0, 0xE
- movs r1, 0
- movs r2, 0x2A
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08039B1C
- ldrb r0, [r4]
- muls r0, r5
- adds r1, r0, r6
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _08039B10
- b _08039C74
-_08039B10:
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _08039B1C
- b _08039C74
-_08039B1C:
- movs r0, 0
- mov r8, r0
- ldr r0, _08039B6C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08039B8E
- ldr r4, _08039B60 @ =gActiveBattler
- ldrb r7, [r4]
- adds r0, r7, 0
- bl GetBattlerPosition
- movs r5, 0x2
- eors r0, r5
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r1, _08039B70 @ =gAbsentBattlerFlags
- ldrb r1, [r1]
- ldr r2, _08039B74 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08039B78
- ldrb r6, [r4]
- b _08039B94
- .align 2, 0
-_08039B5C: .4byte gBattleMons
-_08039B60: .4byte gActiveBattler
-_08039B64: .4byte 0x0400e000
-_08039B68: .4byte gStatuses3
-_08039B6C: .4byte gBattleTypeFlags
-_08039B70: .4byte gAbsentBattlerFlags
-_08039B74: .4byte gBitTable
-_08039B78:
- ldrb r0, [r4]
- bl GetBattlerPosition
- eors r0, r5
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- b _08039B94
-_08039B8E:
- ldr r0, _08039C64 @ =gActiveBattler
- ldrb r6, [r0]
- adds r7, r6, 0
-_08039B94:
- movs r5, 0
-_08039B96:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08039C68 @ =gEnemyParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08039BFA
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08039BFA
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _08039BFA
- ldr r1, _08039C6C @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r5, r0
- beq _08039BFA
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r5, r0
- beq _08039BFA
- ldr r0, _08039C70 @ =gBattleStruct
- ldr r1, [r0]
- adds r0, r7, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r5, r0
- beq _08039BFA
- adds r0, r6, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r5, r0
- beq _08039BFA
- movs r0, 0x1
- add r8, r0
-_08039BFA:
- adds r5, 0x1
- cmp r5, 0x5
- ble _08039B96
- mov r0, r8
- cmp r0, 0
- beq _08039C74
- bl ShouldSwitchIfPerishSong
- lsls r0, 24
- cmp r0, 0
- bne _08039C60
- bl sub_80391EC
- lsls r0, 24
- cmp r0, 0
- bne _08039C60
- bl sub_803937C
- lsls r0, 24
- cmp r0, 0
- bne _08039C60
- bl sub_8039598
- lsls r0, 24
- cmp r0, 0
- bne _08039C60
- movs r0, 0
- bl ai_has_super_effective_move_on_field
- lsls r0, 24
- cmp r0, 0
- bne _08039C74
- bl AI_AreStatsRaised
- lsls r0, 24
- cmp r0, 0
- bne _08039C74
- movs r0, 0x8
- movs r1, 0x2
- bl sub_8039828
- lsls r0, 24
- cmp r0, 0
- bne _08039C60
- movs r0, 0x4
- movs r1, 0x3
- bl sub_8039828
- lsls r0, 24
- cmp r0, 0
- beq _08039C74
-_08039C60:
- movs r0, 0x1
- b _08039C76
- .align 2, 0
-_08039C64: .4byte gActiveBattler
-_08039C68: .4byte gEnemyParty
-_08039C6C: .4byte gBattlerPartyIndexes
-_08039C70: .4byte gBattleStruct
-_08039C74:
- movs r0, 0
-_08039C76:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8039A80
-
- thumb_func_start sub_8039C84
-sub_8039C84: @ 8039C84
- push {r4-r6,lr}
- ldr r5, _08039CDC @ =gBattleTypeFlags
- ldr r0, [r5]
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08039C94
- b _08039D96
-_08039C94:
- bl sub_8039A80
- lsls r0, 24
- cmp r0, 0
- beq _08039D8C
- ldr r0, _08039CE0 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r1, _08039CE4 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x92
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _08039D5A
- bl sub_8039E3C
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x6
- bne _08039D44
- ldr r0, [r5]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08039CE8
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- b _08039CFC
- .align 2, 0
-_08039CDC: .4byte gBattleTypeFlags
-_08039CE0: .4byte gActiveBattler
-_08039CE4: .4byte gBattleStruct
-_08039CE8:
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0x3
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r5, r0, 24
-_08039CFC:
- movs r4, 0
-_08039CFE:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _08039D7C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08039D3E
- ldr r1, _08039D80 @ =gBattlerPartyIndexes
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- beq _08039D3E
- lsls r0, r5, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- beq _08039D3E
- ldr r0, _08039D84 @ =gBattleStruct
- ldr r1, [r0]
- adds r0, r6, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r4, r0
- beq _08039D3E
- adds r0, r5, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r4, r0
- bne _08039D44
-_08039D3E:
- adds r4, 0x1
- cmp r4, 0x5
- ble _08039CFE
-_08039D44:
- ldr r0, _08039D88 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- ldr r1, _08039D84 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x92
- strb r4, [r0]
-_08039D5A:
- ldr r4, _08039D88 @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerPosition
- ldrb r2, [r4]
- ldr r1, _08039D84 @ =gBattleStruct
- ldr r1, [r1]
- adds r2, r1
- adds r2, 0x5C
- lsls r0, 24
- lsrs r0, 25
- adds r0, r1
- adds r0, 0x92
- ldrb r0, [r0]
- strb r0, [r2]
- b _08039DA8
- .align 2, 0
-_08039D7C: .4byte gEnemyParty
-_08039D80: .4byte gBattlerPartyIndexes
-_08039D84: .4byte gBattleStruct
-_08039D88: .4byte gActiveBattler
-_08039D8C:
- bl sub_803A1F4
- lsls r0, 24
- cmp r0, 0
- bne _08039DA8
-_08039D96:
- ldr r0, _08039DB0 @ =gActiveBattler
- ldrb r0, [r0]
- movs r2, 0x1
- eors r2, r0
- lsls r2, 8
- movs r0, 0x1
- movs r1, 0
- bl EmitTwoReturnValues
-_08039DA8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08039DB0: .4byte gActiveBattler
- thumb_func_end sub_8039C84
-
- thumb_func_start sub_8039DB4
-sub_8039DB4: @ 8039DB4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r6, r3, 0
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- movs r7, 0
- ldr r0, _08039E38 @ =gUnknown_824F050
- mov r10, r0
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _08039E26
- mov r5, r10
-_08039DE2:
- ldrb r0, [r5]
- cmp r0, 0xFE
- beq _08039E18
- ldr r1, [sp]
- cmp r0, r1
- bne _08039E18
- ldrb r4, [r5, 0x1]
- cmp r4, r9
- bne _08039E02
- ldrb r1, [r6]
- ldrb r0, [r5, 0x2]
- muls r0, r1
- movs r1, 0xA
- bl __divsi3
- strb r0, [r6]
-_08039E02:
- cmp r4, r8
- bne _08039E18
- cmp r9, r8
- beq _08039E18
- ldrb r1, [r6]
- ldrb r0, [r5, 0x2]
- muls r0, r1
- movs r1, 0xA
- bl __divsi3
- strb r0, [r6]
-_08039E18:
- adds r5, 0x3
- adds r7, 0x3
- mov r1, r10
- adds r0, r7, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08039DE2
-_08039E26:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08039E38: .4byte gUnknown_824F050
- thumb_func_end sub_8039DB4
-
- thumb_func_start sub_8039E3C
-sub_8039E3C: @ 8039E3C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- ldr r4, _08039E98 @ =gActiveBattler
- ldrb r2, [r4]
- ldr r0, _08039E9C @ =gBattleStruct
- ldr r0, [r0]
- adds r0, r2, r0
- adds r1, r0, 0
- adds r1, 0x5C
- ldrb r0, [r1]
- cmp r0, 0x6
- beq _08039E5E
- b _0803A160
-_08039E5E:
- ldr r0, _08039EA0 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08039EF8
- str r2, [sp, 0xC]
- adds r0, r2, 0
- bl GetBattlerPosition
- movs r5, 0x2
- eors r0, r5
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r1, _08039EA4 @ =gAbsentBattlerFlags
- ldrb r1, [r1]
- ldr r2, _08039EA8 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08039EAC
- ldrb r4, [r4]
- str r4, [sp, 0x10]
- b _08039EC2
- .align 2, 0
-_08039E98: .4byte gActiveBattler
-_08039E9C: .4byte gBattleStruct
-_08039EA0: .4byte gBattleTypeFlags
-_08039EA4: .4byte gAbsentBattlerFlags
-_08039EA8: .4byte gBitTable
-_08039EAC:
- ldrb r0, [r4]
- bl GetBattlerPosition
- eors r0, r5
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x10]
-_08039EC2:
- bl Random
- movs r3, 0x2
- ands r0, r3
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _08039EF0 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08039EF4 @ =gBitTable
- mov r4, r10
- lsls r0, r4, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08039F0A
- eors r4, r3
- lsls r0, r4, 24
- lsrs r0, 24
- mov r10, r0
- b _08039F0A
- .align 2, 0
-_08039EF0: .4byte gAbsentBattlerFlags
-_08039EF4: .4byte gBitTable
-_08039EF8:
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldrb r4, [r4]
- str r4, [sp, 0x10]
- str r4, [sp, 0xC]
-_08039F0A:
- movs r0, 0
- mov r9, r0
- mov r1, sp
- str r1, [sp, 0x14]
-_08039F12:
- movs r2, 0
- str r2, [sp, 0x4]
- movs r4, 0x6
- str r4, [sp, 0x8]
- movs r7, 0
- ldr r0, _08039FD8 @ =gBitTable
- mov r8, r0
-_08039F20:
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _08039FDC @ =gEnemyParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- beq _08039FF0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08039FF0
- mov r1, r8
- ldr r0, [r1]
- mov r2, r9
- ands r0, r2
- cmp r0, 0
- bne _08039FF0
- ldr r1, _08039FE0 @ =gBattlerPartyIndexes
- ldr r4, [sp, 0xC]
- lsls r0, r4, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r7
- beq _08039FF0
- ldr r2, [sp, 0x10]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r7
- beq _08039FF0
- ldr r0, _08039FE4 @ =gBattleStruct
- ldr r1, [r0]
- adds r0, r4, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r7, r0
- beq _08039FF0
- adds r0, r2, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r7, r0
- beq _08039FF0
- ldr r1, _08039FE8 @ =gBaseStats
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x6]
- ldrb r6, [r0, 0x7]
- movs r0, 0xA
- ldr r4, [sp, 0x14]
- strb r0, [r4]
- movs r0, 0x58
- mov r4, r10
- muls r4, r0
- ldr r0, _08039FEC @ =gBattleMons
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x21
- ldrb r0, [r0]
- adds r1, r5, 0
- adds r2, r6, 0
- mov r3, sp
- bl sub_8039DB4
- adds r4, 0x22
- ldrb r0, [r4]
- adds r1, r5, 0
- adds r2, r6, 0
- mov r3, sp
- bl sub_8039DB4
- ldr r2, [sp, 0x4]
- ldr r1, [sp, 0x14]
- ldrb r1, [r1]
- cmp r2, r1
- bcs _08039FFE
- ldr r2, [sp, 0x14]
- ldrb r2, [r2]
- str r2, [sp, 0x4]
- lsls r0, r7, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
- b _08039FFE
- .align 2, 0
-_08039FD8: .4byte gBitTable
-_08039FDC: .4byte gEnemyParty
-_08039FE0: .4byte gBattlerPartyIndexes
-_08039FE4: .4byte gBattleStruct
-_08039FE8: .4byte gBaseStats
-_08039FEC: .4byte gBattleMons
-_08039FF0:
- mov r4, r8
- ldr r0, [r4]
- mov r1, r9
- orrs r1, r0
- lsls r0, r1, 24
- lsrs r0, 24
- mov r9, r0
-_08039FFE:
- movs r2, 0x4
- add r8, r2
- adds r7, 0x1
- cmp r7, 0x5
- ble _08039F20
- ldr r4, [sp, 0x8]
- cmp r4, 0x6
- beq _0803A06C
- movs r7, 0
- movs r0, 0x64
- adds r5, r4, 0
- muls r5, r0
- ldr r6, _0803A060 @ =gEnemyParty
-_0803A018:
- adds r1, r7, 0
- adds r1, 0xD
- adds r0, r5, r6
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _0803A03E
- ldr r0, _0803A064 @ =gActiveBattler
- ldrb r1, [r0]
- adds r0, r4, 0
- mov r2, r10
- bl TypeCalc
- movs r1, 0x2
- ands r1, r0
- cmp r1, 0
- bne _0803A044
-_0803A03E:
- adds r7, 0x1
- cmp r7, 0x3
- ble _0803A018
-_0803A044:
- cmp r7, 0x4
- beq _0803A04A
- b _0803A15E
-_0803A04A:
- ldr r1, [sp, 0x8]
- lsls r0, r1, 2
- ldr r2, _0803A068 @ =gBitTable
- adds r0, r2
- ldr r0, [r0]
- mov r4, r9
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r0, 24
- b _0803A06E
- .align 2, 0
-_0803A060: .4byte gEnemyParty
-_0803A064: .4byte gActiveBattler
-_0803A068: .4byte gBitTable
-_0803A06C:
- movs r0, 0x3F
-_0803A06E:
- mov r9, r0
- mov r1, r9
- cmp r1, 0x3F
- beq _0803A078
- b _08039F12
-_0803A078:
- ldr r0, _0803A170 @ =gDynamicBasePower
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0803A174 @ =gBattleStruct
- ldr r0, [r0]
- strb r1, [r0, 0x13]
- ldr r0, _0803A178 @ =gBattleScripting
- movs r2, 0x1
- strb r2, [r0, 0xE]
- ldr r0, _0803A17C @ =gMoveResultFlags
- strb r1, [r0]
- ldr r0, _0803A180 @ =gCritMultiplier
- strb r2, [r0]
- movs r2, 0
- str r2, [sp, 0x4]
- movs r4, 0x6
- str r4, [sp, 0x8]
- movs r7, 0
-_0803A09C:
- movs r0, 0x64
- adds r6, r7, 0
- muls r6, r0
- ldr r0, _0803A184 @ =gEnemyParty
- adds r4, r6, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- adds r1, r7, 0x1
- str r1, [sp, 0x18]
- cmp r0, 0
- beq _0803A158
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0803A158
- ldr r1, _0803A188 @ =gBattlerPartyIndexes
- ldr r2, [sp, 0xC]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r7
- beq _0803A158
- ldr r4, [sp, 0x10]
- lsls r0, r4, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r7
- beq _0803A158
- ldr r0, _0803A174 @ =gBattleStruct
- ldr r1, [r0]
- adds r0, r2, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r7, r0
- beq _0803A158
- adds r0, r4, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r7, r0
- beq _0803A158
- movs r5, 0
- mov r9, r6
- ldr r0, _0803A18C @ =gBattleMoveDamage
- mov r8, r0
- ldr r6, _0803A190 @ =gActiveBattler
-_0803A100:
- adds r1, r5, 0
- adds r1, 0xD
- ldr r0, _0803A184 @ =gEnemyParty
- add r0, r9
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0
- mov r1, r8
- str r0, [r1]
- cmp r4, 0
- beq _0803A13C
- ldr r0, _0803A194 @ =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0x1
- beq _0803A13C
- ldrb r0, [r6]
- mov r1, r10
- bl AI_CalcDmg
- ldrb r1, [r6]
- adds r0, r4, 0
- mov r2, r10
- bl TypeCalc
-_0803A13C:
- mov r2, r8
- ldr r0, [r2]
- ldr r4, [sp, 0x4]
- cmp r4, r0
- bge _0803A152
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- lsls r0, r7, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
-_0803A152:
- adds r5, 0x1
- cmp r5, 0x3
- ble _0803A100
-_0803A158:
- ldr r7, [sp, 0x18]
- cmp r7, 0x5
- ble _0803A09C
-_0803A15E:
- ldr r0, [sp, 0x8]
-_0803A160:
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0803A170: .4byte gDynamicBasePower
-_0803A174: .4byte gBattleStruct
-_0803A178: .4byte gBattleScripting
-_0803A17C: .4byte gMoveResultFlags
-_0803A180: .4byte gCritMultiplier
-_0803A184: .4byte gEnemyParty
-_0803A188: .4byte gBattlerPartyIndexes
-_0803A18C: .4byte gBattleMoveDamage
-_0803A190: .4byte gActiveBattler
-_0803A194: .4byte gBattleMoves
- thumb_func_end sub_8039E3C
-
- thumb_func_start sub_803A198
-sub_803A198: @ 803A198
- push {r4,lr}
- adds r2, r1, 0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bne _0803A1A8
- movs r0, 0x1
- b _0803A1EE
-_0803A1A8:
- ldrb r1, [r2, 0x4]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0803A1B6
- movs r0, 0x2
- b _0803A1EE
-_0803A1B6:
- ldrb r4, [r2, 0x3]
- movs r3, 0x3F
- adds r0, r3, 0
- ands r0, r4
- cmp r0, 0
- beq _0803A1C6
- movs r0, 0x3
- b _0803A1EE
-_0803A1C6:
- ldrb r1, [r2]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0803A1DC
- ldrb r0, [r2, 0x1]
- cmp r0, 0
- bne _0803A1DC
- ldrb r0, [r2, 0x2]
- cmp r0, 0
- beq _0803A1E0
-_0803A1DC:
- movs r0, 0x4
- b _0803A1EE
-_0803A1E0:
- movs r0, 0x80
- ands r0, r4
- cmp r0, 0
- bne _0803A1EC
- movs r0, 0x6
- b _0803A1EE
-_0803A1EC:
- movs r0, 0x5
-_0803A1EE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_803A198
-
- thumb_func_start sub_803A1F4
-sub_803A1F4: @ 803A1F4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r0, 0
- mov r10, r0
- movs r7, 0
- movs r1, 0
- mov r8, r1
-_0803A20A:
- movs r0, 0x64
- mov r1, r8
- muls r1, r0
- ldr r0, _0803A2A8 @ =gEnemyParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0803A246
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _0803A246
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0803A246
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
-_0803A246:
- movs r2, 0x1
- add r8, r2
- mov r0, r8
- cmp r0, 0x5
- ble _0803A20A
- movs r1, 0
- mov r8, r1
-_0803A254:
- ldr r1, _0803A2AC @ =gBattleResources
- mov r2, r8
- cmp r2, 0
- beq _0803A26E
- ldr r0, [r1]
- ldr r0, [r0, 0x18]
- adds r0, 0x2C
- ldrb r0, [r0]
- subs r0, r2
- adds r0, 0x1
- cmp r10, r0
- ble _0803A26E
- b _0803A644
-_0803A26E:
- ldr r0, [r1]
- ldr r0, [r0, 0x18]
- mov r2, r8
- lsls r1, r2, 1
- adds r0, 0x24
- adds r0, r1
- ldrh r0, [r0]
- mov r9, r0
- str r1, [sp]
- cmp r0, 0
- bne _0803A286
- b _0803A644
-_0803A286:
- ldr r1, _0803A2B0 @ =gItemEffectTable
- subs r0, 0xD
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- cmp r1, 0
- bne _0803A296
- b _0803A644
-_0803A296:
- mov r0, r9
- cmp r0, 0xAF
- bne _0803A2BC
- ldr r0, _0803A2B4 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _0803A2B8 @ =0x00003108
- adds r5, r0, r1
- b _0803A2BE
- .align 2, 0
-_0803A2A8: .4byte gEnemyParty
-_0803A2AC: .4byte gBattleResources
-_0803A2B0: .4byte gItemEffectTable
-_0803A2B4: .4byte gSaveBlock1Ptr
-_0803A2B8: .4byte 0x00003108
-_0803A2BC:
- adds r5, r1, 0
-_0803A2BE:
- mov r2, r9
- lsls r0, r2, 24
- lsrs r0, 24
- adds r1, r5, 0
- bl sub_803A198
- ldr r4, _0803A2F8 @ =gActiveBattler
- ldrb r1, [r4]
- lsrs r1, 1
- ldr r3, _0803A2FC @ =gBattleStruct
- ldr r2, [r3]
- adds r1, r2
- adds r1, 0xC4
- strb r0, [r1]
- ldrb r0, [r4]
- lsrs r0, 1
- ldr r1, [r3]
- adds r0, r1
- adds r0, 0xC4
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r0, 0x5
- bls _0803A2EE
- b _0803A5F8
-_0803A2EE:
- lsls r0, 2
- ldr r1, _0803A300 @ =_0803A304
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0803A2F8: .4byte gActiveBattler
-_0803A2FC: .4byte gBattleStruct
-_0803A300: .4byte _0803A304
- .align 2, 0
-_0803A304:
- .4byte _0803A31C
- .4byte _0803A348
- .4byte _0803A390
- .4byte _0803A4E8
- .4byte _0803A5C8
- .4byte _0803A650
-_0803A31C:
- ldr r2, _0803A340 @ =gBattleMons
- ldr r0, _0803A344 @ =gActiveBattler
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r1, [r0, 0x2C]
- ldrh r0, [r0, 0x28]
- lsrs r1, 2
- cmp r0, r1
- bcc _0803A334
- b _0803A5F8
-_0803A334:
- cmp r0, 0
- bne _0803A33A
- b _0803A5F8
-_0803A33A:
- movs r7, 0x1
- b _0803A5FC
- .align 2, 0
-_0803A340: .4byte gBattleMons
-_0803A344: .4byte gActiveBattler
-_0803A348:
- mov r0, r9
- movs r1, 0x4
- movs r2, 0x4
- bl GetItemEffectParamOffset
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0803A35C
- b _0803A5F8
-_0803A35C:
- ldr r2, _0803A388 @ =gBattleMons
- ldr r0, _0803A38C @ =gActiveBattler
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- ldrh r2, [r1, 0x28]
- cmp r2, 0
- bne _0803A370
- b _0803A5F8
-_0803A370:
- ldrh r3, [r1, 0x2C]
- lsrs r0, r3, 2
- cmp r2, r0
- bcc _0803A33A
- adds r0, r2, 0
- subs r0, r3, r0
- adds r1, r5, r4
- ldrb r1, [r1]
- cmp r0, r1
- bgt _0803A386
- b _0803A5F8
-_0803A386:
- b _0803A33A
- .align 2, 0
-_0803A388: .4byte gBattleMons
-_0803A38C: .4byte gActiveBattler
-_0803A390:
- ldr r3, _0803A4DC @ =gActiveBattler
- ldrb r0, [r3]
- lsrs r0, 1
- ldr r2, _0803A4E0 @ =gBattleStruct
- ldr r1, [r2]
- adds r0, r1
- adds r0, 0xC6
- movs r1, 0
- strb r1, [r0]
- ldrb r1, [r5, 0x3]
- movs r6, 0x20
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0803A3D4
- ldr r1, _0803A4E4 @ =gBattleMons
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0803A3D4
- lsrs r1, r4, 1
- ldr r0, [r2]
- adds r1, r0
- adds r1, 0xC6
- ldrb r0, [r1]
- orrs r0, r6
- strb r0, [r1]
- movs r7, 0x1
-_0803A3D4:
- ldrb r1, [r5, 0x3]
- movs r6, 0x10
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0803A40E
- ldr r1, _0803A4E4 @ =gBattleMons
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, 0x4C
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0803A3FE
- movs r0, 0x80
- ands r1, r0
- cmp r1, 0
- beq _0803A40E
-_0803A3FE:
- lsrs r1, r4, 1
- ldr r0, [r2]
- adds r1, r0
- adds r1, 0xC6
- ldrb r0, [r1]
- orrs r0, r6
- strb r0, [r1]
- movs r7, 0x1
-_0803A40E:
- ldrb r1, [r5, 0x3]
- movs r6, 0x8
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0803A440
- ldr r1, _0803A4E4 @ =gBattleMons
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0803A440
- lsrs r1, r4, 1
- ldr r0, [r2]
- adds r1, r0
- adds r1, 0xC6
- ldrb r0, [r1]
- orrs r0, r6
- strb r0, [r1]
- movs r7, 0x1
-_0803A440:
- ldrb r1, [r5, 0x3]
- movs r6, 0x4
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0803A472
- ldr r1, _0803A4E4 @ =gBattleMons
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0803A472
- lsrs r1, r4, 1
- ldr r0, [r2]
- adds r1, r0
- adds r1, 0xC6
- ldrb r0, [r1]
- orrs r0, r6
- strb r0, [r1]
- movs r7, 0x1
-_0803A472:
- ldrb r1, [r5, 0x3]
- movs r6, 0x2
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803A4A4
- ldr r1, _0803A4E4 @ =gBattleMons
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0803A4A4
- lsrs r1, r4, 1
- ldr r0, [r2]
- adds r1, r0
- adds r1, 0xC6
- ldrb r0, [r1]
- orrs r0, r6
- strb r0, [r1]
- movs r7, 0x1
-_0803A4A4:
- ldrb r1, [r5, 0x3]
- movs r4, 0x1
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0803A4B2
- b _0803A5F8
-_0803A4B2:
- ldr r1, _0803A4E4 @ =gBattleMons
- ldrb r3, [r3]
- movs r0, 0x58
- muls r0, r3
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0803A4CA
- b _0803A5F8
-_0803A4CA:
- lsrs r1, r3, 1
- ldr r0, [r2]
- adds r1, r0
- adds r1, 0xC6
- ldrb r0, [r1]
- orrs r0, r4
- strb r0, [r1]
- b _0803A33A
- .align 2, 0
-_0803A4DC: .4byte gActiveBattler
-_0803A4E0: .4byte gBattleStruct
-_0803A4E4: .4byte gBattleMons
-_0803A4E8:
- ldr r4, _0803A5BC @ =gActiveBattler
- ldrb r0, [r4]
- lsrs r0, 1
- ldr r3, _0803A5C0 @ =gBattleStruct
- ldr r1, [r3]
- adds r0, r1
- adds r0, 0xC6
- movs r1, 0
- strb r1, [r0]
- ldr r1, _0803A5C4 @ =gDisableStructs
- ldrb r2, [r4]
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x16]
- cmp r0, 0
- beq _0803A5F8
- ldrb r1, [r5]
- movs r6, 0xF
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0803A528
- lsrs r2, 1
- ldr r0, [r3]
- adds r2, r0
- adds r2, 0xC6
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
-_0803A528:
- ldrb r1, [r5, 0x1]
- movs r7, 0xF0
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- beq _0803A546
- ldrb r0, [r4]
- lsrs r0, 1
- ldr r1, [r3]
- adds r0, r1
- adds r0, 0xC6
- ldrb r1, [r0]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0]
-_0803A546:
- ldrb r1, [r5, 0x1]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0803A562
- ldrb r0, [r4]
- lsrs r0, 1
- ldr r1, [r3]
- adds r0, r1
- adds r0, 0xC6
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_0803A562:
- ldrb r1, [r5, 0x2]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0803A57E
- ldrb r0, [r4]
- lsrs r0, 1
- ldr r1, [r3]
- adds r0, r1
- adds r0, 0xC6
- ldrb r1, [r0]
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0]
-_0803A57E:
- ldrb r1, [r5, 0x2]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- beq _0803A59A
- ldrb r0, [r4]
- lsrs r0, 1
- ldr r1, [r3]
- adds r0, r1
- adds r0, 0xC6
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
-_0803A59A:
- ldrb r1, [r5]
- movs r0, 0x30
- ands r0, r1
- cmp r0, 0
- bne _0803A5A6
- b _0803A33A
-_0803A5A6:
- ldrb r0, [r4]
- lsrs r0, 1
- ldr r1, [r3]
- adds r0, r1
- adds r0, 0xC6
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
- b _0803A33A
- .align 2, 0
-_0803A5BC: .4byte gActiveBattler
-_0803A5C0: .4byte gBattleStruct
-_0803A5C4: .4byte gDisableStructs
-_0803A5C8:
- ldr r4, _0803A630 @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r2, _0803A634 @ =gDisableStructs
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x16]
- cmp r0, 0
- beq _0803A5F8
- ldr r0, _0803A638 @ =gSideTimers
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- bne _0803A5F8
- b _0803A33A
-_0803A5F8:
- cmp r7, 0
- beq _0803A644
-_0803A5FC:
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0
- bl EmitTwoReturnValues
- ldr r0, _0803A630 @ =gActiveBattler
- ldrb r0, [r0]
- lsrs r0, 1
- ldr r1, _0803A63C @ =gBattleStruct
- ldr r1, [r1]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC0
- mov r1, r9
- strb r1, [r0]
- ldr r0, _0803A640 @ =gBattleResources
- ldr r0, [r0]
- ldr r0, [r0, 0x18]
- adds r0, 0x24
- ldr r2, [sp]
- adds r0, r2
- movs r1, 0
- strh r1, [r0]
- adds r0, r7, 0
- b _0803A652
- .align 2, 0
-_0803A630: .4byte gActiveBattler
-_0803A634: .4byte gDisableStructs
-_0803A638: .4byte gSideTimers
-_0803A63C: .4byte gBattleStruct
-_0803A640: .4byte gBattleResources
-_0803A644:
- movs r0, 0x1
- add r8, r0
- mov r1, r8
- cmp r1, 0x3
- bgt _0803A650
- b _0803A254
-_0803A650:
- movs r0, 0
-_0803A652:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_803A1F4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_anim.s b/asm/battle_anim.s
index 9aa80db64..9d16e91e1 100644
--- a/asm/battle_anim.s
+++ b/asm/battle_anim.s
@@ -14,7 +14,7 @@ ClearBattleAnimationVars: @ 80724C0
ldr r0, _08072554 @ =gUnknown_2037EE0
movs r1, 0
strb r1, [r0]
- ldr r0, _08072558 @ =gUnknown_2037EE1
+ ldr r0, _08072558 @ =gAnimScriptActive
strb r1, [r0]
ldr r0, _0807255C @ =gUnknown_2037EE2
strb r1, [r0]
@@ -23,12 +23,12 @@ ClearBattleAnimationVars: @ 80724C0
ldr r0, _08072564 @ =gAnimDisableStructPtr
movs r1, 0
str r1, [r0]
- ldr r0, _08072568 @ =gUnknown_2037EE8
+ ldr r0, _08072568 @ =gAnimMoveDmg
str r1, [r0]
- ldr r0, _0807256C @ =gUnknown_2037EEC
+ 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
@@ -85,13 +85,13 @@ _08072520:
bx r0
.align 2, 0
_08072554: .4byte gUnknown_2037EE0
-_08072558: .4byte gUnknown_2037EE1
+_08072558: .4byte gAnimScriptActive
_0807255C: .4byte gUnknown_2037EE2
_08072560: .4byte gUnknown_2037EE3
_08072564: .4byte gAnimDisableStructPtr
-_08072568: .4byte gUnknown_2037EE8
-_0807256C: .4byte gUnknown_2037EEC
-_08072570: .4byte gUnknown_2037EFE
+_08072568: .4byte gAnimMoveDmg
+_0807256C: .4byte gAnimMovePower
+_08072570: .4byte gAnimFriendship
_08072574: .4byte gUnknown_2037F14
_08072578: .4byte gAnimMoveTurn
_0807257C: .4byte gUnknown_2037F17
@@ -111,7 +111,7 @@ DoMoveAnim: @ 807259C
lsls r1, 16
lsrs r1, 16
ldr r2, _080725C0 @ =gBattleAnimAttacker
- ldr r0, _080725C4 @ =sBattler_AI
+ ldr r0, _080725C4 @ =gBattlerAttacker
ldrb r0, [r0]
strb r0, [r2]
ldr r2, _080725C8 @ =gBattleAnimTarget
@@ -120,19 +120,19 @@ DoMoveAnim: @ 807259C
strb r0, [r2]
ldr r0, _080725D0 @ =gUnknown_81C68F4
movs r2, 0x1
- bl sub_80725D4
+ bl LaunchBattleAnimation
pop {r0}
bx r0
.align 2, 0
_080725C0: .4byte gBattleAnimAttacker
-_080725C4: .4byte sBattler_AI
+_080725C4: .4byte gBattlerAttacker
_080725C8: .4byte gBattleAnimTarget
_080725CC: .4byte gBattlerTarget
_080725D0: .4byte gUnknown_81C68F4
thumb_func_end DoMoveAnim
- thumb_func_start sub_80725D4
-sub_80725D4: @ 80725D4
+ thumb_func_start LaunchBattleAnimation
+LaunchBattleAnimation: @ 80725D4
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -200,10 +200,10 @@ _08072658:
ldr r5, _080726C8 @ =gUnknown_2037ED4
mov r0, r8
lsls r3, r0, 2
- ldr r6, _080726CC @ =gUnknown_2037EE1
+ ldr r6, _080726CC @ =gAnimScriptActive
ldr r1, _080726D0 @ =gUnknown_2037EE0
mov r12, r1
- ldr r0, _080726D4 @ =gUnknown_2037EDC
+ ldr r0, _080726D4 @ =gAnimScriptCallback
mov r10, r0
ldr r7, _080726D8 @ =RunAnimScriptCommand
ldr r1, _080726DC @ =gBattleAnimArgs
@@ -253,9 +253,9 @@ _080726A6:
_080726C0: .4byte gUnknown_2037F18
_080726C4: .4byte gUnknown_2037F14
_080726C8: .4byte gUnknown_2037ED4
-_080726CC: .4byte gUnknown_2037EE1
+_080726CC: .4byte gAnimScriptActive
_080726D0: .4byte gUnknown_2037EE0
-_080726D4: .4byte gUnknown_2037EDC
+_080726D4: .4byte gAnimScriptCallback
_080726D8: .4byte RunAnimScriptCommand
_080726DC: .4byte gBattleAnimArgs
_080726E0: .4byte 0x0000ffff
@@ -300,7 +300,7 @@ _08072730: .4byte gUnknown_2022984
_08072734: .4byte gUnknown_2022986
_08072738: .4byte gUnknown_2022988
_0807273C: .4byte gUnknown_202298A
- thumb_func_end sub_80725D4
+ thumb_func_end LaunchBattleAnimation
thumb_func_start DestroyAnimSprite
DestroyAnimSprite: @ 8072740
@@ -419,14 +419,14 @@ WaitAnimFrameCount: @ 80727FC
ldrsb r0, [r2, r0]
cmp r0, 0
bgt _08072820
- ldr r0, _08072818 @ =gUnknown_2037EDC
+ ldr r0, _08072818 @ =gAnimScriptCallback
ldr r1, _0807281C @ =RunAnimScriptCommand
str r1, [r0]
movs r0, 0
b _08072822
.align 2, 0
_08072814: .4byte gUnknown_2037EE0
-_08072818: .4byte gUnknown_2037EDC
+_08072818: .4byte gAnimScriptCallback
_0807281C: .4byte RunAnimScriptCommand
_08072820:
subs r0, r1, 0x1
@@ -454,7 +454,7 @@ _0807282C:
asrs r0, 24
cmp r0, 0
bne _08072850
- ldr r0, _08072864 @ =gUnknown_2037EE1
+ ldr r0, _08072864 @ =gAnimScriptActive
ldrb r0, [r0]
cmp r0, 0
bne _0807282C
@@ -466,7 +466,7 @@ _08072850:
_08072858: .4byte gUnknown_83ADF5C
_0807285C: .4byte gUnknown_2037ED4
_08072860: .4byte gUnknown_2037EE0
-_08072864: .4byte gUnknown_2037EE1
+_08072864: .4byte gAnimScriptActive
thumb_func_end RunAnimScriptCommand
thumb_func_start ScriptCmd_loadspritegfx
@@ -500,7 +500,7 @@ ScriptCmd_loadspritegfx: @ 8072868
ldr r1, _080728C4 @ =gUnknown_2037EE0
movs r0, 0x1
strb r0, [r1]
- ldr r1, _080728C8 @ =gUnknown_2037EDC
+ ldr r1, _080728C8 @ =gAnimScriptCallback
ldr r0, _080728CC @ =WaitAnimFrameCount
str r0, [r1]
pop {r4-r6}
@@ -512,7 +512,7 @@ _080728B8: .4byte gUnknown_8399388
_080728BC: .4byte gUnknown_8399C90
_080728C0: .4byte 0xffffd8f0
_080728C4: .4byte gUnknown_2037EE0
-_080728C8: .4byte gUnknown_2037EDC
+_080728C8: .4byte gAnimScriptCallback
_080728CC: .4byte WaitAnimFrameCount
thumb_func_end ScriptCmd_loadspritegfx
@@ -634,7 +634,7 @@ _080729A8:
ldr r0, _08072A04 @ =gBattleAnimAttacker
_080729AE:
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
lsls r1, r4, 24
@@ -651,13 +651,13 @@ _080729CC:
ldr r5, _08072A08 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
@@ -762,7 +762,7 @@ ScriptCmd_delay: @ 8072A8C
_08072AAA:
adds r0, r2, 0x1
str r0, [r1]
- ldr r1, _08072AC4 @ =gUnknown_2037EDC
+ ldr r1, _08072AC4 @ =gAnimScriptCallback
ldr r0, _08072AC8 @ =WaitAnimFrameCount
str r0, [r1]
pop {r4}
@@ -771,7 +771,7 @@ _08072AAA:
.align 2, 0
_08072ABC: .4byte gUnknown_2037ED4
_08072AC0: .4byte gUnknown_2037EE0
-_08072AC4: .4byte gUnknown_2037EDC
+_08072AC4: .4byte gAnimScriptCallback
_08072AC8: .4byte WaitAnimFrameCount
thumb_func_end ScriptCmd_delay
@@ -913,7 +913,7 @@ _08072BB2:
bl sub_80767F0
movs r0, 0x1
bl UpdateOamPriorityInAllHealthboxes
- ldr r0, _08072C04 @ =gUnknown_2037EE1
+ ldr r0, _08072C04 @ =gAnimScriptActive
mov r1, r8
strb r1, [r0]
_08072BDC:
@@ -930,7 +930,7 @@ _08072BF4: .4byte 0x0000ffff
_08072BF8: .4byte gUnknown_83ACC08
_08072BFC: .4byte gUnknown_2037EEE
_08072C00: .4byte gMPlayInfo_BGM
-_08072C04: .4byte gUnknown_2037EE1
+_08072C04: .4byte gAnimScriptActive
thumb_func_end sub_8072B08
thumb_func_start sub_8072C08
@@ -989,7 +989,7 @@ _08072C60:
_08072C62:
ldrb r5, [r0]
adds r0, r5, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08072D12
@@ -1073,7 +1073,7 @@ _08072D12:
cmp r6, 0x1
bls _08072DCE
adds r0, r5, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08072DCE
@@ -1169,17 +1169,17 @@ _08072DE8: .4byte gUnknown_2037F14
_08072DEC: .4byte gUnknown_2037ED4
thumb_func_end sub_8072C30
- thumb_func_start sub_8072DF0
-sub_8072DF0: @ 8072DF0
+ thumb_func_start IsBattlerSpriteVisible
+IsBattlerSpriteVisible: @ 8072DF0
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
adds r0, r4, 0
- bl sub_8075224
+ bl IsBattlerSpritePresent
lsls r0, 24
cmp r0, 0
beq _08072E40
- ldr r0, _08072E34 @ =gUnknown_2024018
+ ldr r0, _08072E34 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r4, 2
@@ -1206,7 +1206,7 @@ _08072E30:
movs r0, 0x1
b _08072E42
.align 2, 0
-_08072E34: .4byte gUnknown_2024018
+_08072E34: .4byte gBattleSpritesDataPtr
_08072E38: .4byte gSprites
_08072E3C: .4byte gBattlerSpriteIds
_08072E40:
@@ -1215,7 +1215,7 @@ _08072E42:
pop {r4}
pop {r1}
bx r1
- thumb_func_end sub_8072DF0
+ thumb_func_end IsBattlerSpriteVisible
thumb_func_start sub_8072E48
sub_8072E48: @ 8072E48
@@ -1897,7 +1897,7 @@ _080733CC:
_080733CE:
ldrb r4, [r0]
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08073416
@@ -1935,7 +1935,7 @@ _08073416:
cmp r5, 0x1
bls _08073464
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08073464
@@ -2016,7 +2016,7 @@ _080734B4:
_080734B6:
ldrb r6, [r0]
adds r0, r6, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080734E0
@@ -2041,7 +2041,7 @@ _080734E0:
adds r4, r6, 0
eors r4, r0
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08073520
@@ -2127,7 +2127,7 @@ sub_8073558: @ 8073558
movs r7, 0
_08073598:
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080735AA
@@ -2141,7 +2141,7 @@ _080735AA:
movs r0, 0x2
eors r6, r0
adds r0, r6, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080735CC
@@ -2397,11 +2397,11 @@ ScriptCmd_jump: @ 8073764
_08073784: .4byte gUnknown_2037ED4
thumb_func_end ScriptCmd_jump
- thumb_func_start sub_8073788
-sub_8073788: @ 8073788
+ thumb_func_start IsContest
+IsContest: @ 8073788
movs r0, 0
bx lr
- thumb_func_end sub_8073788
+ thumb_func_end IsContest
thumb_func_start sub_807378C
sub_807378C: @ 807378C
@@ -2772,7 +2772,7 @@ sub_8073A44: @ 8073A44
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, _08073A78 @ =gUnknown_2024018
+ ldr r0, _08073A78 @ =gBattleSpritesDataPtr
ldr r1, [r0]
ldr r0, _08073A7C @ =gBattleAnimAttacker
ldrb r2, [r0]
@@ -2795,7 +2795,7 @@ sub_8073A44: @ 8073A44
movs r4, 0x3F
b _08073AE6
.align 2, 0
-_08073A78: .4byte gUnknown_2024018
+_08073A78: .4byte gBattleSpritesDataPtr
_08073A7C: .4byte gBattleAnimAttacker
_08073A80:
adds r0, r2, 0
@@ -2874,7 +2874,7 @@ sub_8073B08: @ 8073B08
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, _08073B3C @ =gUnknown_2024018
+ ldr r0, _08073B3C @ =gBattleSpritesDataPtr
ldr r1, [r0]
ldr r0, _08073B40 @ =gBattleAnimAttacker
ldrb r2, [r0]
@@ -2897,7 +2897,7 @@ sub_8073B08: @ 8073B08
movs r4, 0x3F
b _08073B56
.align 2, 0
-_08073B3C: .4byte gUnknown_2024018
+_08073B3C: .4byte gBattleSpritesDataPtr
_08073B40: .4byte gBattleAnimAttacker
_08073B44:
adds r0, r2, 0
@@ -3942,7 +3942,7 @@ sub_8074320: @ 8074320
ldrb r7, [r0, 0x1]
adds r0, 0x2
str r0, [r1]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _080743C2
@@ -4024,7 +4024,7 @@ sub_80743C8: @ 80743C8
ldrb r7, [r0, 0x1]
adds r0, 0x2
str r0, [r1]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _0807444C
diff --git a/asm/battle_anim_effects_1.s b/asm/battle_anim_effects_1.s
index 18289e193..2d436f3ef 100644
--- a/asm/battle_anim_effects_1.s
+++ b/asm/battle_anim_effects_1.s
@@ -103,17 +103,17 @@ sub_80A2388: @ 80A2388
ldr r5, _080A23CC @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
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
@@ -143,17 +143,17 @@ sub_80A23D8: @ 80A23D8
ldr r5, _080A2424 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
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
@@ -182,7 +182,7 @@ sub_80A2430: @ 80A2430
ldr r5, _080A2484 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
@@ -190,7 +190,7 @@ sub_80A2430: @ 80A2430
strh r0, [r4, 0x34]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
@@ -229,7 +229,7 @@ _080A24A2:
ble _080A24BC
ldr r0, _080A24B8 @ =gBattleAnimTarget
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r0, 0x1
b _080A24C6
.align 2, 0
@@ -237,7 +237,7 @@ _080A24B8: .4byte gBattleAnimTarget
_080A24BC:
ldr r0, _080A24FC @ =gBattleAnimTarget
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r0, 0x6
_080A24C6:
adds r1, r4, 0
@@ -306,7 +306,7 @@ sub_80A2500: @ 80A2500
ldr r4, _080A2578 @ =gUnknown_83E2A88
ldr r0, _080A257C @ =gBattleAnimTarget
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r3, r0, 0
adds r3, 0x1
lsls r3, 24
@@ -345,13 +345,13 @@ sub_80A2580: @ 80A2580
ldr r5, _080A25C8 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
@@ -401,13 +401,13 @@ sub_80A25EC: @ 80A25EC
ldr r4, _080A2634 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -438,7 +438,7 @@ _080A263C:
ldr r4, _080A269C @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
@@ -446,7 +446,7 @@ _080A263C:
strh r0, [r5, 0x34]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -538,7 +538,7 @@ _080A2710:
ldr r5, _080A2758 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
@@ -546,7 +546,7 @@ _080A2710:
strh r0, [r6, 0x32]
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x6]
@@ -756,11 +756,11 @@ sub_80A28C4: @ 80A28C4
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080A28DE
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _080A28E6
@@ -814,7 +814,7 @@ sub_80A2920: @ 80A2920
ldr r0, _080A296C @ =gBattleAnimAttacker
ldrb r0, [r0]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r5, [r5, 0x4]
@@ -868,7 +868,7 @@ sub_80A2974: @ 80A2974
bhi _080A29C0
ldr r0, _080A29BC @ =gBattleAnimAttacker
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
subs r0, 0x1
b _080A29CA
.align 2, 0
@@ -876,7 +876,7 @@ _080A29BC: .4byte gBattleAnimAttacker
_080A29C0:
ldr r0, _080A29DC @ =gBattleAnimAttacker
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r0, 0x1
_080A29CA:
adds r1, r4, 0
@@ -916,7 +916,7 @@ sub_80A29EC: @ 80A29EC
ldr r0, _080A2A38 @ =gBattleAnimAttacker
ldrb r0, [r0]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r5, [r5, 0x4]
@@ -1001,13 +1001,13 @@ sub_80A2AA4: @ 80A2AA4
ldr r5, _080A2AE0 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -1154,7 +1154,7 @@ _080A2BBC:
ldr r4, _080A2BF8 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x4]
@@ -1162,7 +1162,7 @@ _080A2BBC:
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r6, [r6, 0x6]
@@ -1320,11 +1320,11 @@ _080A2D08:
sub_80A2D10: @ 80A2D10
push {r4,lr}
adds r4, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080A2D3C
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1608,7 +1608,7 @@ _080A2F38: .4byte gSprites
_080A2F3C:
adds r0, r2, 0
movs r1, 0x1
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
ldr r1, _080A2F68 @ =gTasks
lsls r0, r4, 2
adds r0, r4
@@ -1680,7 +1680,7 @@ _080A2FBE:
adds r0, r6, 0
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
adds r0, r6, 0
bl sub_8076440
ldrh r0, [r4, 0xA]
@@ -1730,7 +1730,7 @@ sub_80A3004: @ 80A3004
lsls r4, 24
lsrs r4, 24
adds r0, r4, 0
- bl sub_8075980
+ bl ResetSpriteRotScale
ldr r1, _080A305C @ =gSprites
lsls r0, r4, 4
adds r0, r4
@@ -1805,7 +1805,7 @@ _080A30AA:
_080A30C2:
ldrb r0, [r6]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080A3100 @ =gBattleAnimArgs
lsrs r0, 24
@@ -1814,7 +1814,7 @@ _080A30C2:
strh r0, [r5, 0x20]
ldrb r0, [r6]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r4, [r4, 0x2]
@@ -1856,13 +1856,13 @@ _080A3104:
ldr r4, _080A315C @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -1892,13 +1892,13 @@ sub_80A3168: @ 80A3168
ldr r4, _080A31E0 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1958,13 +1958,13 @@ sub_80A31EC: @ 80A31EC
ldr r4, _080A32C8 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
mov r8, r0
mov r0, r8
lsls r0, 24
@@ -1973,13 +1973,13 @@ sub_80A31EC: @ 80A31EC
ldr r6, _080A32CC @ =gBattleAnimTarget
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldrb r0, [r6]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r2, r0, 0
lsls r2, 24
subs r4, r5
@@ -2117,7 +2117,7 @@ sub_80A3334: @ 80A3334
ldr r5, _080A33B0 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080A33B4 @ =gBattleAnimArgs
lsrs r0, 24
@@ -2126,7 +2126,7 @@ sub_80A3334: @ 80A3334
strh r0, [r6, 0x20]
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x2]
@@ -2374,12 +2374,12 @@ sub_80A3518: @ 80A3518
ldr r4, _080A3560 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r2, r0, 24
ldr r0, _080A3564 @ =gBattleAnimAttacker
@@ -2481,7 +2481,7 @@ sub_80A35F4: @ 80A35F4
ldr r4, _080A3630 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
ldrb r0, [r4]
@@ -2512,7 +2512,7 @@ _080A3638:
adds r0, r6, 0
adds r0, 0xA
strh r0, [r5, 0x3C]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A3650
@@ -2583,12 +2583,12 @@ sub_80A36B4: @ 80A36B4
ldr r4, _080A36FC @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r2, r0, 24
ldr r0, _080A3700 @ =gBattleAnimTarget
@@ -2712,7 +2712,7 @@ sub_80A37BC: @ 80A37BC
ldrsh r0, [r4, r1]
cmp r0, 0
bne _080A3850
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080A37E4
@@ -2908,7 +2908,7 @@ _080A3910:
movs r1, 0xFF
ands r0, r1
strh r0, [r4, 0x30]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080A395E
@@ -2995,20 +2995,20 @@ sub_80A39C0: @ 80A39C0
adds r5, r0, r1
ldr r4, _080A3B18 @ =gBattleAnimTarget
ldrb r0, [r4]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
subs r0, 0x1
strh r0, [r5, 0x10]
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x14]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x16]
@@ -3894,7 +3894,7 @@ _080A40CE:
_080A40D4:
adds r0, r6, 0
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r5, [r5]
@@ -3917,7 +3917,7 @@ _080A4100:
ldr r0, _080A4144 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r7, [r7]
@@ -4149,12 +4149,12 @@ _080A42C4:
_080A42C6:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r5, r0, 24
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r2, r0, 24
ldr r0, _080A4304 @ =gBattleAnimArgs
@@ -4224,7 +4224,7 @@ _080A4318:
bl sub_8075B30
lsls r0, 16
lsrs r4, r0, 16
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A437A
@@ -4428,13 +4428,13 @@ sub_80A44E0: @ 80A44E0
ldr r4, _080A4530 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -4531,7 +4531,7 @@ _080A45A8:
movs r4, 0x2
eors r0, r4
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r7, r0, 24
ldrb r0, [r5]
@@ -4544,12 +4544,12 @@ _080A45C8:
ldr r5, _080A4620 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r7, r0, 24
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r4, r0, 24
ldrb r0, [r5]
@@ -4557,7 +4557,7 @@ _080A45C8:
mov r8, r2
mov r1, r8
eors r0, r1
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080A463E
@@ -4565,7 +4565,7 @@ _080A45C8:
mov r2, r8
eors r0, r2
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r7
@@ -4574,7 +4574,7 @@ _080A45C8:
mov r1, r8
eors r0, r1
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r4
@@ -4586,13 +4586,13 @@ _080A4624:
ldr r4, _080A4670 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r7, r0, 24
ldrb r0, [r4]
_080A4634:
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r4, r0, 24
_080A463E:
@@ -4959,7 +4959,7 @@ _080A48E8:
sub_80A48F0: @ 80A48F0
push {r4-r6,lr}
adds r5, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A4906
@@ -4991,7 +4991,7 @@ _080A4906:
lsls r0, 24
cmp r0, 0
beq _080A4944
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A496C
@@ -5202,14 +5202,14 @@ sub_80A4ACC: @ 80A4ACC
ldr r6, _080A4B2C @ =gBattleAnimTarget
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r5, 0
strh r0, [r4, 0x20]
ldrb r0, [r6]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldr r1, _080A4B30 @ =0x0000ffe8
@@ -5551,14 +5551,14 @@ _080A4D78:
ldr r0, _080A4DBC @ =gBattleAnimTarget
_080A4D7A:
ldrb r6, [r0]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _080A4DC4
movs r1, 0x2
adds r0, r6, 0
eors r0, r1
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080A4DC4
@@ -5590,7 +5590,7 @@ _080A4DC4:
bne _080A4DE8
adds r0, r6, 0
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
@@ -5602,14 +5602,14 @@ _080A4DE4: .4byte gBattleAnimArgs
_080A4DE8:
adds r0, r6, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
adds r0, r6, 0
movs r1, 0x3
_080A4DFA:
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r4, [r4, 0x2]
@@ -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
@@ -6036,19 +6036,19 @@ _080A5118:
ldr r4, _080A5168 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r7
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
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
@@ -6388,7 +6388,7 @@ _080A53B6:
ldr r1, _080A53E0 @ =sub_80A53E8
adds r0, r4, 0
bl StoreSpriteCallbackInData6
- ldr r0, _080A53E4 @ =sub_8074DC4
+ ldr r0, _080A53E4 @ =TranslateMonSpriteLinear
str r0, [r4, 0x1C]
pop {r4,r5}
pop {r0}
@@ -6397,7 +6397,7 @@ _080A53B6:
_080A53D8: .4byte gBattleAnimAttacker
_080A53DC: .4byte gBattlerSpriteIds
_080A53E0: .4byte sub_80A53E8
-_080A53E4: .4byte sub_8074DC4
+_080A53E4: .4byte TranslateMonSpriteLinear
thumb_func_end sub_80A5398
thumb_func_start sub_80A53E8
@@ -6415,7 +6415,7 @@ sub_80A53E8: @ 80A53E8
ldrb r0, [r0]
strh r0, [r5, 0x34]
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
@@ -6443,7 +6443,7 @@ _080A5424:
lsls r2, 1
ldrh r3, [r5, 0x38]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r5, 0x34]
lsls r0, 24
lsrs r0, 24
@@ -6498,7 +6498,7 @@ _080A5492:
ldr r1, _080A54BC @ =sub_80A5584
adds r0, r4, 0
bl StoreSpriteCallbackInData6
- ldr r0, _080A54C0 @ =sub_8074DC4
+ ldr r0, _080A54C0 @ =TranslateMonSpriteLinear
str r0, [r4, 0x1C]
pop {r4,r5}
pop {r0}
@@ -6507,7 +6507,7 @@ _080A5492:
_080A54B4: .4byte gBattleAnimAttacker
_080A54B8: .4byte gBattlerSpriteIds
_080A54BC: .4byte sub_80A5584
-_080A54C0: .4byte sub_8074DC4
+_080A54C0: .4byte TranslateMonSpriteLinear
thumb_func_end sub_80A5474
thumb_func_start sub_80A54C4
@@ -6585,7 +6585,7 @@ _080A5538:
lsls r2, 1
ldrh r3, [r5, 0x38]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r5, 0x34]
lsls r0, 24
lsrs r0, 24
@@ -6600,7 +6600,7 @@ _080A5538:
ldrh r0, [r5, 0x34]
lsls r0, 24
lsrs r0, 24
- bl sub_8075980
+ bl ResetSpriteRotScale
ldr r0, _080A5580 @ =sub_80A5584
str r0, [r5, 0x1C]
_080A5578:
@@ -6674,7 +6674,7 @@ _080A55E4:
lsls r0, 24
lsrs r0, 24
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
ldrh r0, [r4, 0x2E]
adds r0, 0x1
strh r0, [r4, 0x2E]
@@ -6690,7 +6690,7 @@ _080A55FA:
lsls r2, 1
ldrh r3, [r4, 0x38]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r4, 0x32]
lsls r0, 24
lsrs r0, 24
@@ -6728,7 +6728,7 @@ _080A564C:
lsls r2, 1
ldrh r3, [r4, 0x38]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r4, 0x32]
lsls r0, 24
lsrs r0, 24
@@ -6743,7 +6743,7 @@ _080A564C:
ldrh r0, [r4, 0x32]
lsls r0, 24
lsrs r0, 24
- bl sub_8075980
+ bl ResetSpriteRotScale
adds r0, r4, 0
bl DestroyAnimSprite
_080A568E:
@@ -6888,7 +6888,7 @@ _080A5792:
strh r1, [r4, 0x12]
ldrb r0, [r4, 0x8]
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
b _080A58A8
_080A579E:
movs r3, 0xE
@@ -6904,7 +6904,7 @@ _080A579E:
lsls r2, 1
ldrh r3, [r4, 0x10]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrb r0, [r4, 0x8]
bl sub_80759DC
b _080A58D4
@@ -7095,7 +7095,7 @@ sub_80A58EC: @ 80A58EC
lsls r2, 1
ldrh r3, [r4, 0x10]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrb r0, [r4, 0x8]
bl sub_80759DC
ldrh r0, [r4, 0xE]
@@ -7106,7 +7106,7 @@ sub_80A58EC: @ 80A58EC
_080A5928: .4byte gTasks
_080A592C:
ldrb r0, [r4, 0x8]
- bl sub_8075980
+ bl ResetSpriteRotScale
adds r0, r5, 0
bl DestroyAnimVisualTask
_080A5938:
@@ -7134,7 +7134,7 @@ _080A595C:
_080A595E:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x2]
@@ -7142,7 +7142,7 @@ _080A595E:
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r6, [r6, 0x4]
@@ -7172,7 +7172,7 @@ sub_80A59A8: @ 80A59A8
ldr r5, _080A59E0 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldr r1, _080A59E4 @ =0x0000ffd0
@@ -7180,7 +7180,7 @@ sub_80A59A8: @ 80A59A8
strh r0, [r4, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -7206,7 +7206,7 @@ sub_80A59F0: @ 80A59F0
ldr r5, _080A5A34 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldr r1, _080A5A38 @ =gBattleAnimArgs
@@ -7218,7 +7218,7 @@ sub_80A59F0: @ 80A59F0
strh r0, [r4, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -7343,7 +7343,7 @@ _080A5AF4:
_080A5AF6:
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x2]
@@ -7351,7 +7351,7 @@ _080A5AF6:
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r6, [r6, 0x4]
@@ -7417,14 +7417,14 @@ sub_80A5B7C: @ 80A5B7C
ldr r6, _080A5BC4 @ =gBattleAnimAttacker
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r5, 0
strh r0, [r4, 0x20]
ldrb r0, [r6]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
subs r0, 0xC
@@ -7544,7 +7544,7 @@ sub_80A5C68: @ 80A5C68
ldr r4, _080A5CC8 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r5, _080A5CCC @ =gBattleAnimArgs
lsrs r0, 24
@@ -7553,13 +7553,13 @@ sub_80A5C68: @ 80A5C68
strh r0, [r6, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r5, [r5, 0x2]
adds r0, r5
strh r0, [r6, 0x22]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A5CAC
@@ -7701,17 +7701,17 @@ _080A5D90:
ldr r4, _080A5DD4 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
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
@@ -7781,7 +7781,7 @@ sub_80A5E34: @ 80A5E34
cmp r4, r0
bcs _080A5E90
ldr r6, _080A5EA0 @ =gBattleAnimArgs
- ldr r5, _080A5EA4 @ =gUnknown_3004FF0
+ ldr r5, _080A5EA4 @ =gHealthboxSpriteIds
_080A5E48:
movs r1, 0
ldrsh r0, [r6, r1]
@@ -7826,7 +7826,7 @@ _080A5E90:
.align 2, 0
_080A5E9C: .4byte gBattlersCount
_080A5EA0: .4byte gBattleAnimArgs
-_080A5EA4: .4byte gUnknown_3004FF0
+_080A5EA4: .4byte gHealthboxSpriteIds
thumb_func_end sub_80A5E34
thumb_func_start sub_80A5EA8
@@ -7837,7 +7837,7 @@ sub_80A5EA8: @ 80A5EA8
movs r4, 0
b _080A5EC2
_080A5EB2:
- ldr r0, _080A5ED8 @ =gUnknown_3004FF0
+ ldr r0, _080A5ED8 @ =gHealthboxSpriteIds
adds r0, r4, r0
ldrb r0, [r0]
bl SetHealthboxSpriteVisible
@@ -7855,7 +7855,7 @@ _080A5EC2:
pop {r0}
bx r0
.align 2, 0
-_080A5ED8: .4byte gUnknown_3004FF0
+_080A5ED8: .4byte gHealthboxSpriteIds
_080A5EDC: .4byte gBattlersCount
thumb_func_end sub_80A5EA8
@@ -7863,7 +7863,7 @@ _080A5EDC: .4byte gBattlersCount
sub_80A5EE0: @ 80A5EE0
push {r4,lr}
adds r4, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A5EF6
@@ -7920,7 +7920,7 @@ sub_80A5F40: @ 80A5F40
ldr r0, _080A5F78 @ =gBattleAnimAttacker
ldrb r0, [r0]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r2, _080A5F7C @ =gBattleAnimArgs
lsrs r0, 24
@@ -8333,7 +8333,7 @@ _080A6262:
ldr r4, _080A62CC @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6]
@@ -8341,7 +8341,7 @@ _080A6262:
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r6, [r6, 0x2]
@@ -8350,7 +8350,7 @@ _080A6262:
ldrh r1, [r5, 0x20]
strh r1, [r5, 0x3A]
strh r0, [r5, 0x3C]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A62D4
@@ -8934,7 +8934,7 @@ _080A6710:
strh r1, [r5, 0x32]
ldrh r0, [r4, 0x4]
strh r0, [r5, 0x34]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A6734
@@ -8948,12 +8948,12 @@ _080A6734:
ldr r4, _080A6784 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r3, r0, 24
_080A674E:
@@ -9161,7 +9161,7 @@ sub_80A68B0: @ 80A68B0
_080A68CE:
ldrb r0, [r7]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080A6938 @ =gBattleAnimArgs
lsrs r0, 24
@@ -9171,7 +9171,7 @@ _080A68CE:
strh r0, [r6, 0x20]
ldrb r0, [r7]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r2, [r4, 0x4]
@@ -9300,14 +9300,14 @@ _080A69DE:
ldr r4, _080A6A1C @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r6
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x8
@@ -9470,7 +9470,7 @@ _080A6B36:
strh r0, [r6, 0x20]
adds r0, r5, 0
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
adds r0, r5, 0
movs r1, 0
@@ -9654,7 +9654,7 @@ _080A6CA2:
ldrb r5, [r0]
adds r0, r5, 0
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r6, 0
diff --git a/asm/battle_anim_effects_2.s b/asm/battle_anim_effects_2.s
index 34bb0db27..722ff51ba 100644
--- a/asm/battle_anim_effects_2.s
+++ b/asm/battle_anim_effects_2.s
@@ -185,13 +185,13 @@ sub_80A6F8C: @ 80A6F8C
ldr r4, _080A6FD4 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -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
@@ -329,7 +329,7 @@ sub_80A70A0: @ 80A70A0
adds r0, r1
ldrb r0, [r0]
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
ldr r1, _080A70D4 @ =gTasks
lsls r0, r4, 2
adds r0, r4
@@ -389,7 +389,7 @@ _080A7126:
lsls r2, 1
adds r0, r4, 0
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldr r1, _080A7158 @ =gTasks
adds r0, r6, r5
lsls r0, 3
@@ -458,7 +458,7 @@ _080A71AA:
cmp r0, 0x2
bne _080A71CC
adds r0, r4, 0
- bl sub_8075980
+ bl ResetSpriteRotScale
adds r0, r5, 0
bl DestroyAnimVisualTask
b _080A71D0
@@ -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
@@ -604,7 +604,7 @@ sub_80A72C8: @ 80A72C8
push {r7}
sub sp, 0x4
adds r5, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A72EC
@@ -639,7 +639,7 @@ _080A730E:
ldr r4, _080A73BC @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r6, _080A73B8 @ =gBattleAnimArgs
lsrs r0, 24
@@ -650,7 +650,7 @@ _080A730E:
mov r8, r0
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r2, [r6, 0x6]
@@ -677,7 +677,7 @@ _080A730E:
lsls r1, 24
adds r0, r1
lsrs r4, r0, 16
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A7380
@@ -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
@@ -1158,7 +1158,7 @@ sub_80A76F0: @ 80A76F0
mov r4, sp
adds r4, 0x2
strh r1, [r4]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
mov r10, r4
cmp r0, 0
@@ -1194,7 +1194,7 @@ _080A7754:
strh r0, [r3, 0x4]
b _080A77B6
_080A775C:
- ldr r1, _080A77A0 @ =gUnknown_2023BD6
+ ldr r1, _080A77A0 @ =gBattlerPositions
ldr r0, _080A77A4 @ =gBattleAnimTarget
ldrb r0, [r0]
adds r0, r1
@@ -1228,7 +1228,7 @@ _080A775C:
ands r0, r1
b _080A77B4
.align 2, 0
-_080A77A0: .4byte gUnknown_2023BD6
+_080A77A0: .4byte gBattlerPositions
_080A77A4: .4byte gBattleAnimTarget
_080A77A8: .4byte gTasks
_080A77AC: .4byte gBattleAnimArgs
@@ -1241,7 +1241,7 @@ _080A77B6:
ldr r5, _080A7810 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
ldr r1, _080A7814 @ =gTasks
mov r3, r8
adds r4, r3, r7
@@ -1253,7 +1253,7 @@ _080A77B6:
adds r6, r0, 0
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x1C]
@@ -1268,7 +1268,7 @@ _080A77B6:
ldrb r1, [r4]
movs r0, 0x2
eors r0, r1
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080A7820
@@ -1288,13 +1288,13 @@ _080A7820:
ldr r4, _080A787C @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r1, r10
@@ -1430,7 +1430,7 @@ _080A7928:
ble _080A79A0
ldr r0, _080A7970 @ =gBattleAnimTarget
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
ldr r2, _080A7974 @ =0x0000ffc0
@@ -1451,7 +1451,7 @@ _080A7978:
ble _080A79A0
ldr r0, _080A7998 @ =gBattleAnimTarget
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
ldr r3, _080A799C @ =0x0000ffc0
@@ -1466,7 +1466,7 @@ _080A799C: .4byte 0x0000ffc0
_080A79A0:
ldr r0, _080A79DC @ =gBattleAnimTarget
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x8]
@@ -1596,12 +1596,12 @@ sub_80A7A88: @ 80A7A88
ldr r4, _080A7B28 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080A7B2C @ =gBattleAnimArgs
lsrs r0, 24
@@ -1754,17 +1754,17 @@ sub_80A7BC4: @ 80A7BC4
ldr r5, _080A7C10 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
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
@@ -1986,19 +1986,19 @@ _080A7D90:
ldr r4, _080A7DEC @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
add r0, r8
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
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
@@ -2079,7 +2079,7 @@ _080A7E48:
ldr r4, _080A7EB4 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
add r0, r9
@@ -2088,7 +2088,7 @@ _080A7E48:
strh r0, [r5, 0x34]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r6
@@ -2258,12 +2258,12 @@ sub_80A7FB0: @ 80A7FB0
lsrs r4, 24
adds r0, r4, 0
movs r1, 0x1
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
adds r0, r4, 0
movs r1, 0xD0
movs r2, 0xD0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldr r1, _080A8008 @ =gSprites
lsls r0, r4, 4
adds r0, r4
@@ -2317,7 +2317,7 @@ sub_80A8014: @ 80A8014
lsls r4, 24
lsrs r4, 24
adds r0, r4, 0
- bl sub_8075980
+ bl ResetSpriteRotScale
ldr r1, _080A8070 @ =gSprites
lsls r0, r4, 4
adds r0, r4
@@ -2356,7 +2356,7 @@ sub_80A8074: @ 80A8074
movs r5, 0
strh r0, [r4, 0x8]
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
strh r5, [r4, 0xA]
strh r5, [r4, 0xC]
strh r5, [r4, 0xE]
@@ -2367,7 +2367,7 @@ sub_80A8074: @ 80A8074
strh r5, [r4, 0x14]
ldr r0, _080A80C4 @ =gBattleAnimAttacker
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x16]
@@ -2439,7 +2439,7 @@ _080A8128:
ldrsh r2, [r4, r1]
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrb r0, [r4, 0x8]
bl sub_8076440
movs r2, 0xC
@@ -2471,7 +2471,7 @@ _080A816E:
ldrb r0, [r4, 0x8]
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrb r0, [r4, 0x8]
bl sub_8076440
movs r0, 0x2
@@ -2502,7 +2502,7 @@ _080A81A4:
ldrsh r2, [r4, r1]
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrb r0, [r4, 0x8]
bl sub_8076440
movs r2, 0xC
@@ -2519,7 +2519,7 @@ _080A81D0:
b _080A81F6
_080A81D8:
ldrb r0, [r4, 0x8]
- bl sub_8075980
+ bl ResetSpriteRotScale
ldr r2, _080A81FC @ =gSprites
movs r0, 0x26
ldrsh r1, [r4, r0]
@@ -2631,7 +2631,7 @@ _080A8244:
ldrsh r2, [r7, r1]
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrb r0, [r4, 0x1]
movs r3, 0x4
negs r3, r3
@@ -2959,7 +2959,7 @@ sub_80A851C: @ 80A851C
bl StartSpriteAnim
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x20
@@ -2974,7 +2974,7 @@ _080A8550:
bl StartSpriteAnim
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
subs r0, 0x20
@@ -2985,7 +2985,7 @@ _080A856A:
ldr r0, _080A85A0 @ =gBattleAnimAttacker
ldrb r0, [r0]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r1, 0
@@ -3042,7 +3042,7 @@ _080A85CA:
_080A85E4:
adds r0, r5, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080A862C @ =gBattleAnimArgs
lsrs r0, 24
@@ -3051,7 +3051,7 @@ _080A85E4:
strh r0, [r6, 0x20]
adds r0, r5, 0
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r4, [r4, 0x4]
@@ -3602,7 +3602,7 @@ sub_80A8A1C: @ 80A8A1C
ldr r6, _080A8A70 @ =gBattleAnimTarget
ldrb r0, [r6]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
subs r0, 0x10
@@ -3849,14 +3849,14 @@ _080A8BF2:
movs r0, 0x1
adds r4, r0, 0
eors r4, r1
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _080A8C6A
movs r1, 0x2
adds r0, r5, 0
eors r0, r1
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080A8C6A
@@ -3876,7 +3876,7 @@ _080A8C30:
adds r0, r5, 0
movs r1, 0x2
_080A8C34:
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r4, r0, 24
adds r0, r5, 0
@@ -3995,7 +3995,7 @@ _080A8D10:
beq _080A8D6C
adds r0, r7, 0
mov r1, r10
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r1, _080A8D50 @ =gBattleAnimArgs
lsrs r0, 24
@@ -4008,7 +4008,7 @@ _080A8D10:
mov r4, r8
eors r4, r0
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080A8D5C
@@ -4031,7 +4031,7 @@ _080A8D68: .4byte gBattlerSpriteIds
_080A8D6C:
adds r0, r7, 0
mov r1, r10
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldr r1, _080A8DD4 @ =gBattleAnimArgs
@@ -4040,7 +4040,7 @@ _080A8D6C:
lsls r0, 16
lsrs r0, 16
mov r9, r0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080A8DE4
@@ -4048,7 +4048,7 @@ _080A8D6C:
adds r4, r7, 0
eors r4, r0
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080A8DE4
@@ -4104,7 +4104,7 @@ _080A8DFA:
strb r0, [r1]
adds r0, r7, 0
ldr r1, [sp, 0x4]
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080A8E48 @ =gBattleAnimArgs
lsrs r0, 24
@@ -4112,14 +4112,14 @@ _080A8DFA:
adds r0, r1
lsls r0, 16
lsrs r6, r0, 16
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080A8E4C
movs r1, 0x2
mov r0, r8
eors r0, r1
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080A8E4C
@@ -4138,13 +4138,13 @@ _080A8E4C:
mov r4, sp
mov r0, r8
mov r1, r10
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4]
mov r0, r8
ldr r1, [sp, 0x4]
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r2, sp
@@ -5007,13 +5007,13 @@ sub_80A94AC: @ 80A94AC
ldr r5, _080A9500 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x24]
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x26]
@@ -5428,7 +5428,7 @@ _080A9808:
strh r0, [r5, 0x2E]
ldrb r0, [r6]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
@@ -5436,13 +5436,13 @@ _080A9808:
strh r0, [r5, 0x32]
ldrb r0, [r6]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
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
@@ -5509,7 +5509,7 @@ sub_80A98B0: @ 80A98B0
push {r4-r7,lr}
lsls r0, 24
lsrs r7, r0, 24
- bl sub_8073788
+ bl IsContest
lsls r0, 24
movs r6, 0xF0
cmp r0, 0
@@ -5830,7 +5830,7 @@ sub_80A9B40: @ 80A9B40
ldr r5, _080A9B84 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
@@ -5838,7 +5838,7 @@ sub_80A9B40: @ 80A9B40
strh r0, [r4, 0x34]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
@@ -6057,7 +6057,7 @@ sub_80A9CE8: @ 80A9CE8
movs r1, 0
movs r2, 0
bl SetAnimBgAttribute
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080A9D2A
@@ -6095,7 +6095,7 @@ _080A9D2A:
lsls r1, 4
movs r2, 0x20
bl LoadCompressedPalette
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A9D88
@@ -6265,7 +6265,7 @@ _080A9EAE:
.align 2, 0
_080A9ED0: .4byte gTasks
_080A9ED4:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080A9EE8
@@ -6314,7 +6314,7 @@ sub_80A9F10: @ 80A9F10
movs r1, 0
movs r2, 0
bl SetAnimBgAttribute
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080A9F52
@@ -6336,7 +6336,7 @@ _080A9F52:
bl SetGpuReg
mov r0, sp
bl sub_80752A0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A9F98
@@ -6383,7 +6383,7 @@ _080A9FC6:
lsls r1, 4
movs r2, 0x20
bl LoadCompressedPalette
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080A9FFA
@@ -6548,7 +6548,7 @@ _080AA112:
adds r0, 0x1
strh r0, [r1, 0x20]
_080AA134:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AA148
@@ -6585,13 +6585,13 @@ sub_80AA174: @ 80AA174
ldr r5, _080AA1C8 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -6607,7 +6607,7 @@ sub_80AA174: @ 80AA174
ldrh r0, [r1, 0x2]
strh r0, [r4, 0x30]
ldrb r0, [r5]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x3C]
@@ -6743,13 +6743,13 @@ sub_80AA2B0: @ 80AA2B0
ldr r4, _080AA2F8 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -6851,13 +6851,13 @@ sub_80AA37C: @ 80AA37C
ldr r4, _080AA3C8 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -7142,7 +7142,7 @@ sub_80AA58C: @ 80AA58C
bl StartSpriteAnim
ldr r0, _080AA68C @ =gBattleAnimTarget
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
subs r0, 0x1
adds r1, r4, 0
adds r1, 0x43
@@ -7345,13 +7345,13 @@ _080AA734:
_080AA736:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -7508,7 +7508,7 @@ _080AA856:
_080AA870:
adds r0, r6, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r7, _080AA8F0 @ =gBattleAnimArgs
lsrs r0, 24
@@ -7518,7 +7518,7 @@ _080AA870:
strh r0, [r5, 0x20]
adds r0, r6, 0
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r7, 0x4]
@@ -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]
@@ -7847,7 +7847,7 @@ sub_80AAAE4: @ 80AAAE4
ldrb r1, [r4]
movs r0, 0x2
eors r0, r1
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080AAB30
@@ -7872,13 +7872,13 @@ _080AAB30:
ldr r4, _080AAB70 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x28
@@ -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 74f6ef9fc..d1356c619 100644
--- a/asm/battle_anim_effects_3.s
+++ b/asm/battle_anim_effects_3.s
@@ -92,7 +92,7 @@ sub_80DE34C: @ 80DE34C
ldr r6, _080DE398 @ =gBattleAnimTarget
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
lsrs r4, 8
@@ -102,7 +102,7 @@ sub_80DE34C: @ 80DE34C
asrs r4, 16
ldrb r0, [r6]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r1, r0, 0
lsls r1, 24
lsrs r1, 8
@@ -216,13 +216,13 @@ sub_80DE440: @ 80DE440
ldr r4, _080DE4CC @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r7, r0, 0
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r6, r0, 0
@@ -243,7 +243,7 @@ sub_80DE440: @ 80DE440
lsls r1, 23
adds r0, r1
lsrs r4, r0, 16
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080DE49E
@@ -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
@@ -957,7 +957,7 @@ sub_80DE9D8: @ 80DE9D8
ldrsh r1, [r5, r2]
adds r0, r4, 0
bl sub_8074FF8
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080DEA2C
@@ -1093,7 +1093,7 @@ sub_80DEAF0: @ 80DEAF0
push {lr}
lsls r0, 24
lsrs r2, r0, 24
- ldr r0, _080DEB04 @ =gUnknown_2037EE8
+ ldr r0, _080DEB04 @ =gAnimMoveDmg
ldr r0, [r0]
cmp r0, 0
ble _080DEB0C
@@ -1101,7 +1101,7 @@ sub_80DEAF0: @ 80DEAF0
movs r0, 0
b _080DEB10
.align 2, 0
-_080DEB04: .4byte gUnknown_2037EE8
+_080DEB04: .4byte gAnimMoveDmg
_080DEB08: .4byte gBattleAnimArgs
_080DEB0C:
ldr r1, _080DEB1C @ =gBattleAnimArgs
@@ -1311,13 +1311,13 @@ sub_80DEC90: @ 80DEC90
ldr r4, _080DED08 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1474,7 +1474,7 @@ sub_80DEDD8: @ 80DEDD8
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080DEE2C
@@ -1551,7 +1551,7 @@ sub_80DEE78: @ 80DEE78
strh r1, [r0]
ldr r0, _080DEEB8 @ =gUnknown_202298A
strh r1, [r0]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080DEEA4
@@ -1590,7 +1590,7 @@ _080DEED8:
_080DEEDA:
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r6, [r6, 0x2]
@@ -1598,7 +1598,7 @@ _080DEEDA:
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -2005,13 +2005,13 @@ sub_80DF1DC: @ 80DF1DC
ldr r6, _080DF234 @ =gBattleAnimAttacker
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0xC]
ldrb r0, [r6]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0xE]
@@ -2394,17 +2394,17 @@ _080DF4C4:
ldr r4, _080DF51C @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
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
@@ -2491,19 +2491,19 @@ _080DF5AA:
ldr r4, _080DF5DC @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
adds r0, r6, 0
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
movs r0, 0x80
lsls r0, 1
strh r0, [r5, 0x30]
@@ -2524,7 +2524,7 @@ _080DF5E0:
ldrsh r2, [r5, r0]
adds r0, r6, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r5, 0x34]
adds r0, 0x1
strh r0, [r5, 0x34]
@@ -2548,7 +2548,7 @@ _080DF610:
ldrsh r2, [r5, r0]
adds r0, r6, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r5, 0x34]
adds r0, 0x1
strh r0, [r5, 0x34]
@@ -2569,7 +2569,7 @@ _080DF610:
orrs r1, r2
strb r1, [r0]
adds r0, r6, 0
- bl sub_8075980
+ bl ResetSpriteRotScale
_080DF658:
ldrh r0, [r5, 0x2E]
adds r0, 0x1
@@ -2950,7 +2950,7 @@ _080DF90A:
ldr r0, _080DF930 @ =gBattleAnimAttacker
ldrb r0, [r0]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
@@ -3140,11 +3140,11 @@ _080DFA86:
lsls r2, 3
adds r2, r3
ldrb r2, [r2, 0x1C]
- bl sub_8034BF4
+ bl HandleSpeciesGfxDataChange
ldrb r1, [r6]
mov r0, sp
bl sub_8075300
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080DFABC
@@ -3252,7 +3252,7 @@ _080DFB80:
movs r2, 0
bl SetAnimBgAttribute
_080DFB8A:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080DFBC8
@@ -3273,13 +3273,13 @@ _080DFB8A:
cmp r0, 0
bne _080DFBC8
ldrb r0, [r4]
- ldr r1, _080DFBE0 @ =gUnknown_2024018
+ ldr r1, _080DFBE0 @ =gBattleSpritesDataPtr
ldr r1, [r1]
ldr r2, [r1]
lsls r1, r0, 2
adds r1, r2
ldrh r1, [r1, 0x2]
- bl SetBankEnemyShadowSpriteCallback
+ bl SetBattlerShadowSpriteCallback
_080DFBC8:
adds r0, r5, 0
bl DestroyAnimVisualTask
@@ -3291,7 +3291,7 @@ _080DFBCE:
.align 2, 0
_080DFBD8: .4byte gBattleAnimAttacker
_080DFBDC: .4byte gTasks
-_080DFBE0: .4byte gUnknown_2024018
+_080DFBE0: .4byte gBattleSpritesDataPtr
thumb_func_end sub_80DF9BC
thumb_func_start c3_80DFBE4
@@ -3337,7 +3337,7 @@ sub_80DFC24: @ 80DFC24
ldr r1, _080DFC4C @ =gBattleAnimTarget
ldrb r1, [r1]
movs r2, 0x1
- bl sub_8034BF4
+ bl HandleSpeciesGfxDataChange
adds r0, r4, 0
bl DestroyAnimVisualTask
pop {r4}
@@ -3397,7 +3397,7 @@ _080DFC94:
movs r1, 0x4
movs r2, 0x1
bl SetAnimBgAttribute
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080DFCCE
@@ -3424,7 +3424,7 @@ _080DFCCE:
lsls r1, 4
movs r2, 0x20
bl LoadCompressedPalette
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080DFD30
@@ -3616,7 +3616,7 @@ _080DFE7E:
mov r0, sp
ldrb r0, [r0, 0x9]
bl sub_8075358
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080DFEA0
@@ -3678,14 +3678,14 @@ _080DFF06:
ldr r4, _080E0000 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r5
strh r0, [r7, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x20
@@ -4039,7 +4039,7 @@ _080E01C4:
movs r1, 0x4
movs r2, 0x1
bl SetAnimBgAttribute
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080E01FC
@@ -4066,7 +4066,7 @@ _080E01FC:
lsls r1, 4
movs r2, 0x20
bl LoadCompressedPalette
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080E0264
@@ -4094,7 +4094,7 @@ _080E0264:
bl GetBattlerPosition
lsls r0, 24
lsrs r4, r0, 24
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -4319,7 +4319,7 @@ _080E042A:
mov r0, sp
ldrb r0, [r0, 0x9]
bl sub_8075358
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080E044C
@@ -4557,7 +4557,7 @@ _080E0608:
lsls r0, 24
lsrs r0, 24
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
ldr r0, _080E0624 @ =sub_80E0628
str r0, [r4]
_080E0618:
@@ -4621,7 +4621,7 @@ _080E065C:
lsls r2, 1
ldrh r3, [r4, 0xC]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
@@ -4662,7 +4662,7 @@ _080E06B0:
lsls r2, 1
ldrh r3, [r4, 0xC]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
@@ -4706,7 +4706,7 @@ _080E0708:
lsls r2, 1
ldrh r3, [r4, 0xC]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
@@ -4741,7 +4741,7 @@ _080E0778:
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
- bl sub_8075980
+ bl ResetSpriteRotScale
adds r0, r5, 0
bl DestroyAnimVisualTask
_080E0788:
@@ -4879,7 +4879,7 @@ sub_80E0850: @ 80E0850
lsrs r0, 24
strh r0, [r4, 0x26]
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
ldr r0, _080E08A0 @ =sub_80E08A4
str r0, [r4]
pop {r4}
@@ -5028,7 +5028,7 @@ _080E09A8:
ldrh r0, [r7, 0x26]
lsls r0, 24
lsrs r0, 24
- bl sub_8075980
+ bl ResetSpriteRotScale
adds r0, r4, 0
bl DestroyAnimVisualTask
b _080E0A30
@@ -5040,7 +5040,7 @@ _080E09BA:
lsls r2, 1
ldrh r3, [r7, 0xC]
adds r1, r2, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r7, 0x26]
lsls r0, 24
lsrs r0, 24
@@ -5116,13 +5116,13 @@ sub_80E0A3C: @ 80E0A3C
ldr r4, _080E0A98 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -5248,7 +5248,7 @@ _080E0B3E:
strh r5, [r6, 0x1C]
adds r0, r5, 0
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
mov r2, r8
movs r3, 0x2
ldrsh r0, [r2, r3]
@@ -5274,7 +5274,7 @@ _080E0B88:
adds r0, r5, 0
movs r1, 0xE0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
adds r0, r5, 0
bl sub_8076440
lsls r2, r5, 4
@@ -5293,10 +5293,10 @@ _080E0BAA:
_080E0BB2:
adds r0, r5, 0
movs r1, 0xD0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
adds r0, r5, 0
bl sub_8076440
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080E0BD8
@@ -5361,7 +5361,7 @@ _080E0C30:
cmp r0, 0xD
bne _080E0C58
adds r0, r5, 0
- bl sub_8075980
+ bl ResetSpriteRotScale
ldr r1, _080E0C64 @ =gSprites
lsls r0, r5, 4
adds r0, r5
@@ -5675,13 +5675,13 @@ sub_80E0E94: @ 80E0E94
ldr r5, _080E0ED0 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -5735,7 +5735,7 @@ sub_80E0EDC: @ 80E0EDC
_080E0F16:
ldr r0, _080E0F24 @ =gBattleAnimAttacker
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
subs r0, 0x1
b _080E0F32
.align 2, 0
@@ -5743,7 +5743,7 @@ _080E0F24: .4byte gBattleAnimAttacker
_080E0F28:
ldr r0, _080E0F74 @ =gBattleAnimAttacker
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r0, 0x1
_080E0F32:
adds r1, r4, 0
@@ -5856,7 +5856,7 @@ sub_80E0FB8: @ 80E0FB8
movs r1, 0x1
bl GetMonData
mov r9, r0
- ldr r0, _080E1050 @ =gUnknown_2024018
+ ldr r0, _080E1050 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldrb r2, [r4]
ldr r1, [r0]
@@ -5882,7 +5882,7 @@ _080E1040: .4byte gBattleAnimAttacker
_080E1044: .4byte gBattlerPartyIndexes
_080E1048: .4byte gBattleAnimTarget
_080E104C: .4byte gPlayerParty
-_080E1050: .4byte gUnknown_2024018
+_080E1050: .4byte gBattleSpritesDataPtr
_080E1054:
ldrb r0, [r4]
lsls r0, 1
@@ -5930,7 +5930,7 @@ _080E107C:
movs r1, 0x1
bl GetMonData
mov r9, r0
- ldr r0, _080E10EC @ =gUnknown_2024018
+ ldr r0, _080E10EC @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldrb r2, [r4]
ldr r1, [r0]
@@ -5956,7 +5956,7 @@ _080E107C:
_080E10E0: .4byte gBattlerPartyIndexes
_080E10E4: .4byte gBattleAnimTarget
_080E10E8: .4byte gEnemyParty
-_080E10EC: .4byte gUnknown_2024018
+_080E10EC: .4byte gBattleSpritesDataPtr
_080E10F0: .4byte gPlayerParty
_080E10F4:
ldrb r0, [r4]
@@ -5985,13 +5985,13 @@ _080E1112:
ldr r5, _080E1200 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
mov r2, r8
lsls r1, r2, 16
@@ -7031,7 +7031,7 @@ _080E194E:
ldr r4, _080E1988 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x2]
@@ -7039,7 +7039,7 @@ _080E194E:
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r6, [r6, 0x4]
@@ -7602,18 +7602,18 @@ _080E1DA2:
ldrb r4, [r0]
adds r0, r4, 0
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x10]
adds r0, r4, 0
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x12]
adds r0, r4, 0
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x14]
@@ -8031,7 +8031,7 @@ sub_80E20D4: @ 80E20D4
_080E20F0:
ldrb r0, [r6]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080E2130 @ =gBattleAnimArgs
lsrs r0, 24
@@ -8040,7 +8040,7 @@ _080E20F0:
strh r0, [r5, 0x20]
ldrb r0, [r6]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x2]
@@ -8164,7 +8164,7 @@ sub_80E21CC: @ 80E21CC
bne _080E2224
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
ldrb r0, [r5]
movs r1, 0
@@ -8186,7 +8186,7 @@ _080E2220: .4byte gBattleAnimAttacker
_080E2224:
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
ldrb r0, [r5]
movs r1, 0
@@ -8206,7 +8206,7 @@ _080E2248:
ldr r5, _080E229C @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
ldrb r0, [r5]
movs r1, 0
@@ -8225,13 +8225,13 @@ _080E226C:
ldr r4, _080E22A0 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x22]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x24]
@@ -8595,14 +8595,14 @@ sub_80E2518: @ 80E2518
mov r10, r0
ldrb r0, [r0]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r7, 0x1E]
mov r1, r10
ldrb r0, [r1]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r7, 0x20]
@@ -8610,14 +8610,14 @@ sub_80E2518: @ 80E2518
mov r8, r0
ldrb r0, [r0]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r7, 0x22]
mov r1, r8
ldrb r0, [r1]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
mov r1, r8
ldrb r0, [r1]
@@ -8641,7 +8641,7 @@ _080E258A:
ldrsh r6, [r7, r1]
mov r1, r8
ldrb r0, [r1]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r3, r0, 0
subs r3, 0x5
lsls r3, 24
@@ -8918,7 +8918,7 @@ _080E27C0:
strh r1, [r4, 0x3C]
adds r0, r5, 0
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -9225,7 +9225,7 @@ _080E2A0C:
_080E2A0E:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
@@ -9617,7 +9617,7 @@ sub_80E2CE4: @ 80E2CE4
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x26]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r7, r0, 24
cmp r7, 0x1
@@ -9625,7 +9625,7 @@ sub_80E2CE4: @ 80E2CE4
ldr r5, _080E2D38 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -9633,7 +9633,7 @@ sub_80E2CE4: @ 80E2CE4
movs r0, 0x2
eors r0, r1
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
cmp r4, r0
@@ -10074,14 +10074,14 @@ _080E307C:
lsls r0, 24
lsrs r0, 24
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r5, r0, 24
ldrh r0, [r4, 0x3C]
lsls r0, 24
lsrs r0, 24
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r1, r0, 24
_080E309C:
@@ -10298,10 +10298,10 @@ sub_80E321C: @ 80E321C
ldr r4, _080E3250 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
@@ -10378,7 +10378,7 @@ sub_80E3294: @ 80E3294
bne _080E32DC
adds r0, r5, 0
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
movs r0, 0x80
lsls r0, 1
strh r0, [r4, 0xA]
@@ -10401,7 +10401,7 @@ _080E32DC:
ldrsh r2, [r4, r0]
adds r0, r5, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r4, 0xE]
adds r0, 0x1
strh r0, [r4, 0xE]
@@ -10412,7 +10412,7 @@ _080E32DC:
movs r0, 0
strh r0, [r4, 0xE]
adds r0, r5, 0
- bl sub_8075980
+ bl ResetSpriteRotScale
ldr r1, _080E3330 @ =gSprites
lsls r0, r5, 4
adds r0, r5
@@ -10654,7 +10654,7 @@ sub_80E34D0: @ 80E34D0
cmp r0, 0
bne _080E34FC
ldrb r0, [r4]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
subs r0, 0x2
adds r1, r5, 0
adds r1, 0x43
@@ -10666,7 +10666,7 @@ _080E34F4: .4byte gBattleAnimTarget
_080E34F8: .4byte 0x0000ff70
_080E34FC:
ldrb r0, [r4]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r0, 0x2
adds r1, r5, 0
adds r1, 0x43
@@ -10676,7 +10676,7 @@ _080E350C:
ldr r0, _080E352C @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -10927,7 +10927,7 @@ _080E36B4:
adds r0, r2
movs r1, 0x2
strh r1, [r0, 0x8]
- ldr r0, _080E3750 @ =gUnknown_2024018
+ ldr r0, _080E3750 @ =gBattleSpritesDataPtr
ldr r1, [r0]
ldr r0, _080E3754 @ =gBattleAnimTarget
ldrb r0, [r0]
@@ -10960,7 +10960,7 @@ _080E36B4:
_080E3744: .4byte gSprites
_080E3748: .4byte 0x0000fff0
_080E374C: .4byte gTasks
-_080E3750: .4byte gUnknown_2024018
+_080E3750: .4byte gBattleSpritesDataPtr
_080E3754: .4byte gBattleAnimTarget
_080E3758:
adds r1, r5, 0
@@ -11063,7 +11063,7 @@ sub_80E37FC: @ 80E37FC
ble _080E3846
movs r0, 0
strh r0, [r4, 0x30]
- ldr r0, _080E3870 @ =gUnknown_2024018
+ ldr r0, _080E3870 @ =gBattleSpritesDataPtr
ldr r1, [r0]
ldr r0, _080E3874 @ =gBattleAnimTarget
ldrb r0, [r0]
@@ -11111,7 +11111,7 @@ _080E3846:
beq _080E3890
b _080E38CE
.align 2, 0
-_080E3870: .4byte gUnknown_2024018
+_080E3870: .4byte gBattleSpritesDataPtr
_080E3874: .4byte gBattleAnimTarget
_080E3878:
ldrh r0, [r4, 0x32]
@@ -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
@@ -11364,7 +11364,7 @@ _080E3A2C:
movs r1, 0x1
bl GetMonData
mov r9, r0
- ldr r0, _080E3A9C @ =gUnknown_2024018
+ ldr r0, _080E3A9C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldrb r2, [r4]
ldr r1, [r0]
@@ -11387,7 +11387,7 @@ _080E3A2C:
_080E3A90: .4byte gBattleAnimAttacker
_080E3A94: .4byte gBattlerPartyIndexes
_080E3A98: .4byte gPlayerParty
-_080E3A9C: .4byte gUnknown_2024018
+_080E3A9C: .4byte gBattleSpritesDataPtr
_080E3AA0:
ldrh r5, [r1, 0x2]
_080E3AA2:
@@ -11433,7 +11433,7 @@ _080E3ACC:
movs r1, 0x1
bl GetMonData
mov r9, r0
- ldr r0, _080E3B2C @ =gUnknown_2024018
+ ldr r0, _080E3B2C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldrb r2, [r4]
ldr r1, [r0]
@@ -11455,7 +11455,7 @@ _080E3ACC:
.align 2, 0
_080E3B24: .4byte gBattlerPartyIndexes
_080E3B28: .4byte gEnemyParty
-_080E3B2C: .4byte gUnknown_2024018
+_080E3B2C: .4byte gBattleSpritesDataPtr
_080E3B30:
ldrh r5, [r1, 0x2]
_080E3B32:
@@ -11479,7 +11479,7 @@ _080E3B54:
ldr r0, _080E3BD8 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
lsls r3, r6, 16
@@ -11501,7 +11501,7 @@ _080E3B54:
bl sub_80768D0
lsls r0, 24
lsrs r5, r0, 24
- ldr r0, _080E3BE0 @ =gUnknown_2024018
+ ldr r0, _080E3BE0 @ =gBattleSpritesDataPtr
ldr r1, [r0]
ldrb r0, [r4]
ldr r1, [r1]
@@ -11540,7 +11540,7 @@ _080E3BD0: .4byte gSprites
_080E3BD4: .4byte 0x0000ffe0
_080E3BD8: .4byte gBattleAnimTarget
_080E3BDC: .4byte gBattleAnimAttacker
-_080E3BE0: .4byte gUnknown_2024018
+_080E3BE0: .4byte gBattleSpritesDataPtr
_080E3BE4: .4byte 0x00007fff
_080E3BE8: .4byte gTasks
_080E3BEC:
@@ -11627,7 +11627,7 @@ _080E3C5A:
ldr r0, _080E3CB4 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
cmp r4, r0
@@ -11644,7 +11644,7 @@ _080E3CB8:
ldr r0, _080E3CFC @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
cmp r4, r0
@@ -11790,7 +11790,7 @@ _080E3D90:
mov r1, r10
ldrb r0, [r1]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r3, r5, 0
@@ -11823,7 +11823,7 @@ _080E3E10:
mov r2, r10
ldrb r0, [r2]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r3, r5, 0
@@ -11892,7 +11892,7 @@ _080E3E96:
ldr r0, _080E3F18 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x10
@@ -12054,14 +12054,14 @@ _080E4004:
ldr r0, _080E4048 @ =gBattleAnimAttacker
ldrb r0, [r0]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r5, r0, 0
ldr r0, _080E404C @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r2, r0, 0
@@ -12526,7 +12526,7 @@ sub_80E43A4: @ 80E43A4
ldr r4, _080E43E8 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
@@ -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 aded063d4..ddb5d6977 100644
--- a/asm/battle_anim_mons.s
+++ b/asm/battle_anim_mons.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_8074480
-sub_8074480: @ 8074480
+ thumb_func_start GetBattlerSpriteCoord
+GetBattlerSpriteCoord: @ 8074480
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
@@ -70,7 +70,7 @@ _08074500:
lsls r0, 24
cmp r0, 0
beq _08074538
- ldr r0, _0807452C @ =gUnknown_2024018
+ ldr r0, _0807452C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r5, 2
@@ -87,11 +87,11 @@ _08074500:
ldr r1, _08074534 @ =gEnemyParty
b _08074556
.align 2, 0
-_0807452C: .4byte gUnknown_2024018
+_0807452C: .4byte gBattleSpritesDataPtr
_08074530: .4byte gBattlerPartyIndexes
_08074534: .4byte gEnemyParty
_08074538:
- ldr r0, _08074564 @ =gUnknown_2024018
+ ldr r0, _08074564 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r5, 2
@@ -114,7 +114,7 @@ _08074556:
lsrs r1, r0, 16
b _08074572
.align 2, 0
-_08074564: .4byte gUnknown_2024018
+_08074564: .4byte gBattleSpritesDataPtr
_08074568: .4byte gBattlerPartyIndexes
_0807456C: .4byte gPlayerParty
_08074570:
@@ -136,7 +136,7 @@ _08074588:
pop {r4,r5}
pop {r1}
bx r1
- thumb_func_end sub_8074480
+ thumb_func_end GetBattlerSpriteCoord
thumb_func_start sub_8074590
sub_8074590: @ 8074590
@@ -154,7 +154,7 @@ sub_8074590: @ 8074590
bne _08074674
cmp r4, 0xC9
bne _08074638
- ldr r0, _080745D8 @ =gUnknown_2024018
+ ldr r0, _080745D8 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0]
lsls r1, r5, 2
@@ -175,11 +175,11 @@ sub_8074590: @ 8074590
adds r2, r0, 0
b _080745EA
.align 2, 0
-_080745D8: .4byte gUnknown_2024018
+_080745D8: .4byte gBattleSpritesDataPtr
_080745DC: .4byte gBattlerPartyIndexes
_080745E0: .4byte gPlayerParty
_080745E4:
- ldr r0, _08074620 @ =gUnknown_2024008
+ ldr r0, _08074620 @ =gTransformedPersonalities
adds r0, r1, r0
ldr r2, [r0]
_080745EA:
@@ -209,7 +209,7 @@ _080745EA:
adds r0, r7, 0
b _0807462E
.align 2, 0
-_08074620: .4byte gUnknown_2024008
+_08074620: .4byte gTransformedPersonalities
_08074624:
movs r1, 0xCE
lsls r1, 1
@@ -255,7 +255,7 @@ _08074670: .4byte gUnknown_8235E6C
_08074674:
cmp r4, 0xC9
bne _08074704
- ldr r0, _080746A4 @ =gUnknown_2024018
+ ldr r0, _080746A4 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0]
lsls r1, r5, 2
@@ -276,11 +276,11 @@ _08074674:
adds r2, r0, 0
b _080746B6
.align 2, 0
-_080746A4: .4byte gUnknown_2024018
+_080746A4: .4byte gBattleSpritesDataPtr
_080746A8: .4byte gBattlerPartyIndexes
_080746AC: .4byte gEnemyParty
_080746B0:
- ldr r0, _080746EC @ =gUnknown_2024008
+ ldr r0, _080746EC @ =gTransformedPersonalities
adds r0, r1, r0
ldr r2, [r0]
_080746B6:
@@ -310,7 +310,7 @@ _080746B6:
adds r0, r7, 0
b _080746FA
.align 2, 0
-_080746EC: .4byte gUnknown_2024008
+_080746EC: .4byte gTransformedPersonalities
_080746F0:
movs r1, 0xCE
lsls r1, 1
@@ -397,12 +397,12 @@ _08074788:
lsls r0, 1
cmp r4, r0
bls _08074798
- ldr r0, _08074794 @ =gUnknown_823A004
+ ldr r0, _08074794 @ =gEnemyMonElevation
b _0807479C
.align 2, 0
-_08074794: .4byte gUnknown_823A004
+_08074794: .4byte gEnemyMonElevation
_08074798:
- ldr r0, _080747A8 @ =gUnknown_823A004
+ ldr r0, _080747A8 @ =gEnemyMonElevation
adds r0, r7, r0
_0807479C:
ldrb r5, [r0]
@@ -412,7 +412,7 @@ _0807479E:
pop {r1}
bx r1
.align 2, 0
-_080747A8: .4byte gUnknown_823A004
+_080747A8: .4byte gEnemyMonElevation
thumb_func_end sub_807474C
thumb_func_start sub_80747AC
@@ -504,7 +504,7 @@ sub_8074844: @ 8074844
lsrs r1, 24
cmp r1, 0x1
bhi _08074896
- ldr r0, _08074874 @ =gUnknown_2024018
+ ldr r0, _08074874 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r2, 2
@@ -518,7 +518,7 @@ sub_8074844: @ 8074844
ldrh r1, [r0]
b _0807487E
.align 2, 0
-_08074874: .4byte gUnknown_2024018
+_08074874: .4byte gBattleSpritesDataPtr
_08074878: .4byte gUnknown_2037F1C
_0807487C:
ldrh r1, [r1, 0x2]
@@ -537,7 +537,7 @@ _0807488C:
_08074896:
adds r0, r2, 0
adds r1, r3, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
_0807489E:
lsls r0, 24
lsrs r0, 24
@@ -545,18 +545,18 @@ _0807489E:
bx r1
thumb_func_end sub_8074844
- thumb_func_start GetBankSpriteDefault_Y
-GetBankSpriteDefault_Y: @ 80748A8
+ thumb_func_start GetBattlerSpriteDefault_Y
+GetBattlerSpriteDefault_Y: @ 80748A8
push {lr}
lsls r0, 24
lsrs r0, 24
movs r1, 0x4
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
- thumb_func_end GetBankSpriteDefault_Y
+ thumb_func_end GetBattlerSpriteDefault_Y
thumb_func_start GetSubstituteSpriteDefault_Y
GetSubstituteSpriteDefault_Y: @ 80748BC
@@ -570,7 +570,7 @@ GetSubstituteSpriteDefault_Y: @ 80748BC
beq _080748E0
adds r0, r4, 0
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 8
movs r1, 0x80
@@ -579,7 +579,7 @@ GetSubstituteSpriteDefault_Y: @ 80748BC
_080748E0:
adds r0, r4, 0
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 8
movs r1, 0x88
@@ -594,8 +594,8 @@ _080748F0:
bx r1
thumb_func_end GetSubstituteSpriteDefault_Y
- thumb_func_start sub_8074900
-sub_8074900: @ 8074900
+ thumb_func_start GetGhostSpriteDefault_Y
+GetGhostSpriteDefault_Y: @ 8074900
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -612,13 +612,13 @@ _0807491A:
adds r0, r4, 0
movs r1, 0x4
_0807491E:
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
pop {r4}
pop {r1}
bx r1
- thumb_func_end sub_8074900
+ thumb_func_end GetGhostSpriteDefault_Y
thumb_func_start sub_807492C
sub_807492C: @ 807492C
@@ -627,7 +627,7 @@ sub_807492C: @ 807492C
lsrs r5, r0, 24
adds r0, r5, 0
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
adds r0, r5, 0
@@ -635,7 +635,7 @@ sub_807492C: @ 807492C
lsls r0, 24
cmp r0, 0
beq _08074978
- ldr r0, _0807496C @ =gUnknown_2024018
+ ldr r0, _0807496C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r5, 2
@@ -652,11 +652,11 @@ sub_807492C: @ 807492C
ldr r1, _08074974 @ =gEnemyParty
b _08074996
.align 2, 0
-_0807496C: .4byte gUnknown_2024018
+_0807496C: .4byte gBattleSpritesDataPtr
_08074970: .4byte gBattlerPartyIndexes
_08074974: .4byte gEnemyParty
_08074978:
- ldr r0, _080749A4 @ =gUnknown_2024018
+ ldr r0, _080749A4 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r5, 2
@@ -679,7 +679,7 @@ _08074996:
lsrs r4, r0, 16
b _080749B2
.align 2, 0
-_080749A4: .4byte gUnknown_2024018
+_080749A4: .4byte gBattleSpritesDataPtr
_080749A8: .4byte gBattlerPartyIndexes
_080749AC: .4byte gPlayerParty
_080749B0:
@@ -713,7 +713,7 @@ GetAnimBankSpriteId: @ 80749D4
bne _080749FC
ldr r4, _080749F4 @ =gBattleAnimAttacker
ldrb r0, [r4]
- bl sub_8075224
+ bl IsBattlerSpritePresent
lsls r0, 24
cmp r0, 0
beq _08074A4A
@@ -728,7 +728,7 @@ _080749FC:
bne _08074A1C
ldr r4, _08074A14 @ =gBattleAnimTarget
ldrb r0, [r4]
- bl sub_8075224
+ bl IsBattlerSpritePresent
lsls r0, 24
cmp r0, 0
beq _08074A4A
@@ -745,7 +745,7 @@ _08074A1C:
ldrb r0, [r5]
movs r4, 0x2
eors r0, r4
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08074A4A
@@ -757,7 +757,7 @@ _08074A38:
ldrb r0, [r5]
movs r4, 0x2
eors r0, r4
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
bne _08074A54
@@ -1245,13 +1245,13 @@ sub_8074D80: @ 8074D80
ldr r5, _08074DBC @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
@@ -1265,8 +1265,8 @@ _08074DBC: .4byte gBattleAnimTarget
_08074DC0: .4byte sub_8074C64
thumb_func_end sub_8074D80
- thumb_func_start sub_8074DC4
-sub_8074DC4: @ 8074DC4
+ thumb_func_start TranslateMonSpriteLinear
+TranslateMonSpriteLinear: @ 8074DC4
push {r4,lr}
adds r3, r0, 0
ldrh r1, [r3, 0x2E]
@@ -1307,10 +1307,10 @@ _08074E0E:
pop {r4}
pop {r0}
bx r0
- thumb_func_end sub_8074DC4
+ thumb_func_end TranslateMonSpriteLinear
- thumb_func_start sub_8074E14
-sub_8074E14: @ 8074E14
+ thumb_func_start TranslateMonSpriteLinearFixedPoint
+TranslateMonSpriteLinearFixedPoint: @ 8074E14
push {r4,lr}
adds r4, r0, 0
ldrh r1, [r4, 0x2E]
@@ -1358,7 +1358,7 @@ _08074E6A:
pop {r4}
pop {r0}
bx r0
- thumb_func_end sub_8074E14
+ thumb_func_end TranslateMonSpriteLinearFixedPoint
thumb_func_start sub_8074E70
sub_8074E70: @ 8074E70
@@ -1446,13 +1446,13 @@ sub_8074EF4: @ 8074EF4
ldr r5, _08074F30 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
@@ -1556,13 +1556,13 @@ sub_8074FCC: @ 8074FCC
ldr r4, _08074FF4 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1585,13 +1585,13 @@ sub_8074FF8: @ 8074FF8
ldr r7, _08075030 @ =gBattleAnimAttacker
ldrb r0, [r7]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
ldr r0, _08075034 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
cmp r6, r0
@@ -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
@@ -1824,26 +1824,26 @@ _080751C0: .4byte gBattleAnimArgs
GetBattlerSide: @ 80751C4
lsls r0, 24
lsrs r0, 24
- ldr r1, _080751D4 @ =gUnknown_2023BD6
+ ldr r1, _080751D4 @ =gBattlerPositions
adds r0, r1
ldrb r1, [r0]
movs r0, 0x1
ands r0, r1
bx lr
.align 2, 0
-_080751D4: .4byte gUnknown_2023BD6
+_080751D4: .4byte gBattlerPositions
thumb_func_end GetBattlerSide
thumb_func_start GetBattlerPosition
GetBattlerPosition: @ 80751D8
lsls r0, 24
lsrs r0, 24
- ldr r1, _080751E4 @ =gUnknown_2023BD6
+ ldr r1, _080751E4 @ =gBattlerPositions
adds r0, r1
ldrb r0, [r0]
bx lr
.align 2, 0
-_080751E4: .4byte gUnknown_2023BD6
+_080751E4: .4byte gBattlerPositions
thumb_func_end GetBattlerPosition
thumb_func_start GetBattlerAtPosition
@@ -1856,7 +1856,7 @@ GetBattlerAtPosition: @ 80751E8
ldrb r2, [r0]
cmp r1, r2
bcs _08075212
- ldr r4, _08075220 @ =gUnknown_2023BD6
+ ldr r4, _08075220 @ =gBattlerPositions
ldrb r0, [r4]
cmp r0, r3
beq _08075212
@@ -1877,16 +1877,16 @@ _08075212:
bx r1
.align 2, 0
_0807521C: .4byte gBattlersCount
-_08075220: .4byte gUnknown_2023BD6
+_08075220: .4byte gBattlerPositions
thumb_func_end GetBattlerAtPosition
- thumb_func_start sub_8075224
-sub_8075224: @ 8075224
+ thumb_func_start IsBattlerSpritePresent
+IsBattlerSpritePresent: @ 8075224
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
adds r5, r4, 0
- ldr r0, _08075254 @ =gUnknown_2023BD6
+ ldr r0, _08075254 @ =gBattlerPositions
adds r0, r4, r0
ldrb r0, [r0]
cmp r0, 0xFF
@@ -1905,7 +1905,7 @@ sub_8075224: @ 8075224
ldr r1, _0807525C @ =gEnemyParty
b _0807526E
.align 2, 0
-_08075254: .4byte gUnknown_2023BD6
+_08075254: .4byte gBattlerPositions
_08075258: .4byte gBattlerPartyIndexes
_0807525C: .4byte gEnemyParty
_08075260:
@@ -1933,10 +1933,10 @@ _0807528A:
pop {r4,r5}
pop {r1}
bx r1
- thumb_func_end sub_8075224
+ thumb_func_end IsBattlerSpritePresent
- thumb_func_start sub_8075290
-sub_8075290: @ 8075290
+ thumb_func_start IsDoubleBattle
+IsDoubleBattle: @ 8075290
ldr r0, _0807529C @ =gBattleTypeFlags
ldr r0, [r0]
movs r1, 0x1
@@ -1944,7 +1944,7 @@ sub_8075290: @ 8075290
bx lr
.align 2, 0
_0807529C: .4byte gBattleTypeFlags
- thumb_func_end sub_8075290
+ thumb_func_end IsDoubleBattle
thumb_func_start sub_80752A0
sub_80752A0: @ 80752A0
@@ -2219,7 +2219,7 @@ sub_8075490: @ 8075490
ldrh r0, [r4, 0x22]
strh r0, [r4, 0x34]
adds r0, r4, 0
- bl sub_80754B8
+ bl InitSpriteDataForLinearTranslation
ldr r1, _080754B4 @ =sub_8074D3C
str r1, [r4, 0x1C]
adds r0, r4, 0
@@ -2231,8 +2231,8 @@ sub_8075490: @ 8075490
_080754B4: .4byte sub_8074D3C
thumb_func_end sub_8075490
- thumb_func_start sub_80754B8
-sub_80754B8: @ 80754B8
+ thumb_func_start InitSpriteDataForLinearTranslation
+InitSpriteDataForLinearTranslation: @ 80754B8
push {r4-r6,lr}
adds r5, r0, 0
ldrh r0, [r5, 0x32]
@@ -2262,7 +2262,7 @@ sub_80754B8: @ 80754B8
pop {r4-r6}
pop {r0}
bx r0
- thumb_func_end sub_80754B8
+ thumb_func_end InitSpriteDataForLinearTranslation
thumb_func_start obj_translate_based_on_private_1_2_3_4
obj_translate_based_on_private_1_2_3_4: @ 80754F8
@@ -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
@@ -2745,8 +2745,8 @@ sub_8075830: @ 8075830
_08075854: .4byte sub_80757E8
thumb_func_end sub_8075830
- thumb_func_start obj_id_set_rotscale
-obj_id_set_rotscale: @ 8075858
+ thumb_func_start SetSpriteRotScale
+SetSpriteRotScale: @ 8075858
push {r4,r5,lr}
sub sp, 0x10
lsls r0, 24
@@ -2810,7 +2810,7 @@ _08075894:
_080758D0: .4byte 0xffff0000
_080758D4: .4byte gSprites
_080758D8: .4byte gOamMatrices
- thumb_func_end obj_id_set_rotscale
+ thumb_func_end SetSpriteRotScale
thumb_func_start sub_80758DC
sub_80758DC: @ 80758DC
@@ -2818,8 +2818,8 @@ sub_80758DC: @ 80758DC
bx lr
thumb_func_end sub_80758DC
- thumb_func_start sub_80758E0
-sub_80758E0: @ 80758E0
+ thumb_func_start PrepareBattlerSpriteForRotScale
+PrepareBattlerSpriteForRotScale: @ 80758E0
push {r4-r7,lr}
lsls r0, 24
lsrs r0, 24
@@ -2834,7 +2834,7 @@ sub_80758E0: @ 80758E0
lsls r0, 24
lsrs r0, 24
adds r6, r0, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08075914
@@ -2865,7 +2865,7 @@ _08075914:
lsls r0, 30
cmp r0, 0
bne _0807595C
- ldr r0, _0807597C @ =gUnknown_2024018
+ ldr r0, _0807597C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x4]
lsls r0, r6, 1
@@ -2898,11 +2898,11 @@ _0807595C:
bx r0
.align 2, 0
_08075978: .4byte gSprites
-_0807597C: .4byte gUnknown_2024018
- thumb_func_end sub_80758E0
+_0807597C: .4byte gBattleSpritesDataPtr
+ thumb_func_end PrepareBattlerSpriteForRotScale
- thumb_func_start sub_8075980
-sub_8075980: @ 8075980
+ thumb_func_start ResetSpriteRotScale
+ResetSpriteRotScale: @ 8075980
push {r4,lr}
adds r4, r0, 0
lsls r4, 24
@@ -2912,7 +2912,7 @@ sub_8075980: @ 8075980
adds r0, r4, 0
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldr r1, _080759D8 @ =gSprites
lsls r0, r4, 4
adds r0, r4
@@ -2946,7 +2946,7 @@ sub_8075980: @ 8075980
bx r0
.align 2, 0
_080759D8: .4byte gSprites
- thumb_func_end sub_8075980
+ thumb_func_end ResetSpriteRotScale
thumb_func_start sub_80759DC
sub_80759DC: @ 80759DC
@@ -3276,7 +3276,7 @@ _08075C40:
ldrb r0, [r6]
movs r5, 0x2
eors r0, r5
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08075C64
@@ -3294,7 +3294,7 @@ _08075C64:
ldrb r0, [r6]
movs r5, 0x2
eors r0, r5
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08075C88
@@ -3349,7 +3349,7 @@ sub_8075CB8: @ 8075CB8
bl GetBattlerAtPosition
lsls r0, 24
lsrs r0, 24
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08075CF2
@@ -3367,7 +3367,7 @@ _08075CF2:
bl GetBattlerAtPosition
lsls r0, 24
lsrs r0, 24
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08075D1E
@@ -3387,7 +3387,7 @@ _08075D1E:
bl GetBattlerAtPosition
lsls r0, 24
lsrs r0, 24
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08075D4A
@@ -3407,7 +3407,7 @@ _08075D4A:
bl GetBattlerAtPosition
lsls r0, 24
lsrs r0, 24
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08075D76
@@ -3533,7 +3533,7 @@ _08075E30:
ldr r4, _08075E74 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x4]
@@ -3541,13 +3541,13 @@ _08075E30:
strh r0, [r5, 0x32]
ldrb r0, [r4]
adds r1, r7, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
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
@@ -3586,7 +3586,7 @@ _08075EA0:
ldr r5, _08075EE8 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
@@ -3594,7 +3594,7 @@ _08075EA0:
strh r0, [r6, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x6]
@@ -3687,7 +3687,7 @@ _08075F62:
strh r0, [r5, 0x2E]
adds r0, r6, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r2, [r4, 0x4]
@@ -3695,13 +3695,13 @@ _08075F62:
strh r0, [r5, 0x32]
adds r0, r6, 0
adds r1, r7, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
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
@@ -4155,7 +4155,7 @@ sub_80762D0: @ 80762D0
bl sub_80765C0
adds r0, r4, 0
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
pop {r4}
pop {r0}
bx r0
@@ -4223,7 +4223,7 @@ _08076356:
movs r3, 0x1E
ldrsh r2, [r4, r3]
ldrh r3, [r4, 0x20]
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
@@ -4309,7 +4309,7 @@ _08076410:
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
- bl sub_8075980
+ bl ResetSpriteRotScale
movs r0, 0
b _08076438
.align 2, 0
@@ -4441,7 +4441,7 @@ _08076508:
lsls r0, 24
cmp r0, 0
bne _08076568
- ldr r0, _08076554 @ =gUnknown_2024018
+ ldr r0, _08076554 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r5, 2
@@ -4465,7 +4465,7 @@ _08076508:
_08076548: .4byte gSprites
_0807654C: .4byte gBattlerSpriteIds
_08076550: .4byte gBattlerPartyIndexes
-_08076554: .4byte gUnknown_2024018
+_08076554: .4byte gBattleSpritesDataPtr
_08076558: .4byte gPlayerParty
_0807655C:
ldrh r1, [r1, 0x2]
@@ -4475,7 +4475,7 @@ _0807655E:
.align 2, 0
_08076564: .4byte gUnknown_8235E6C
_08076568:
- ldr r0, _08076594 @ =gUnknown_2024018
+ ldr r0, _08076594 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r5, 2
@@ -4496,7 +4496,7 @@ _08076568:
lsrs r1, r0, 16
b _0807659E
.align 2, 0
-_08076594: .4byte gUnknown_2024018
+_08076594: .4byte gBattleSpritesDataPtr
_08076598: .4byte gEnemyParty
_0807659C:
ldrh r1, [r1, 0x2]
@@ -4633,7 +4633,7 @@ _08076672:
movs r3, 0x1C
ldrsh r2, [r4, r3]
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
movs r0, 0x18
ldrsh r3, [r4, r0]
cmp r3, 0
@@ -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
@@ -4701,7 +4701,7 @@ sub_80766EC: @ 80766EC
adds r7, r4, 0
ldr r6, _080767E0 @ =gBattleAnimTarget
ldrb r0, [r6]
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _0807672C
@@ -4728,7 +4728,7 @@ _0807672C:
ldr r0, _080767EC @ =gBattleAnimAttacker
mov r8, r0
ldrb r0, [r0]
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08076764
@@ -4756,7 +4756,7 @@ _08076764:
ldrb r0, [r6]
movs r5, 0x2
eors r0, r5
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _0807679C
@@ -4784,7 +4784,7 @@ _0807679C:
mov r1, r8
ldrb r0, [r1]
eors r0, r5
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080767D4
@@ -4834,12 +4834,12 @@ _080767FE:
lsls r0, r5, 24
lsrs r4, r0, 24
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _08076840
adds r0, r4, 0
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
ldr r3, _08076858 @ =gBattlerSpriteIds
adds r3, r5, r3
ldrb r2, [r3]
@@ -4878,8 +4878,8 @@ _08076854: .4byte gSprites
_08076858: .4byte gBattlerSpriteIds
thumb_func_end sub_80767F0
- thumb_func_start sub_807685C
-sub_807685C: @ 807685C
+ thumb_func_start GetBattlerSpriteSubpriority
+GetBattlerSpriteSubpriority: @ 807685C
push {lr}
lsls r0, 24
lsrs r0, 24
@@ -4900,7 +4900,7 @@ _0807687E:
adds r0, r1, 0
pop {r1}
bx r1
- thumb_func_end sub_807685C
+ thumb_func_end GetBattlerSpriteSubpriority
thumb_func_start sub_8076884
sub_8076884: @ 8076884
@@ -5019,7 +5019,7 @@ _0807694E:
adds r0, r6, 0
ldr r1, [sp, 0x3C]
mov r2, r8
- bl GetFrontSpritePalFromSpeciesAndPersonality
+ bl GetMonSpritePalFromSpeciesAndPersonality
lsls r1, r5, 20
movs r2, 0x80
lsls r2, 17
@@ -5039,7 +5039,7 @@ _0807694E:
lsrs r0, 24
cmp r0, 0x1
beq _0807699A
- ldr r0, _080769BC @ =gUnknown_2024018
+ ldr r0, _080769BC @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
ldr r2, [sp, 0x40]
@@ -5064,7 +5064,7 @@ _0807699A:
_080769B0: .4byte gUnknown_83AE084
_080769B4: .4byte gUnknown_83AE054
_080769B8: .4byte gMonSpritesGfxPtr
-_080769BC: .4byte gUnknown_2024018
+_080769BC: .4byte gBattleSpritesDataPtr
_080769C0: .4byte gMonFrontPicTable
_080769C4:
lsls r0, r6, 3
@@ -5089,7 +5089,7 @@ _080769EC:
adds r0, r6, 0
ldr r1, [sp, 0x3C]
mov r2, r8
- bl GetFrontSpritePalFromSpeciesAndPersonality
+ bl GetMonSpritePalFromSpeciesAndPersonality
lsls r1, r5, 20
movs r3, 0x80
lsls r3, 17
@@ -5109,7 +5109,7 @@ _080769EC:
lsrs r0, 24
cmp r0, 0x1
beq _08076A32
- ldr r0, _08076A54 @ =gUnknown_2024018
+ ldr r0, _08076A54 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
ldr r3, [sp, 0x40]
@@ -5136,7 +5136,7 @@ _08076A46:
bl LoadSpecialPokePic_DontHandleDeoxys
b _08076A7C
.align 2, 0
-_08076A54: .4byte gUnknown_2024018
+_08076A54: .4byte gBattleSpritesDataPtr
_08076A58: .4byte gMonBackPicTable
_08076A5C: .4byte gMonSpritesGfxPtr
_08076A60:
@@ -5254,7 +5254,7 @@ sub_8076B2C: @ 8076B2C
lsls r0, 24
cmp r0, 0
bne _08076C08
- ldr r0, _08076B88 @ =gUnknown_2024018
+ ldr r0, _08076B88 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0]
mov r1, r8
@@ -5284,12 +5284,12 @@ sub_8076B2C: @ 8076B2C
adds r2, r0, 0
b _08076B9C
.align 2, 0
-_08076B88: .4byte gUnknown_2024018
+_08076B88: .4byte gBattleSpritesDataPtr
_08076B8C: .4byte gBattlerPartyIndexes
_08076B90: .4byte gPlayerParty
_08076B94:
ldrh r7, [r1, 0x2]
- ldr r0, _08076BD4 @ =gUnknown_2024008
+ ldr r0, _08076BD4 @ =gTransformedPersonalities
adds r0, r2, r0
ldr r2, [r0]
_08076B9C:
@@ -5321,7 +5321,7 @@ _08076B9C:
movs r0, 0xC9
b _08076BE2
.align 2, 0
-_08076BD4: .4byte gUnknown_2024008
+_08076BD4: .4byte gTransformedPersonalities
_08076BD8:
movs r1, 0xCE
lsls r1, 1
@@ -5350,7 +5350,7 @@ _08076BFC:
.align 2, 0
_08076C04: .4byte gUnknown_8235E6C
_08076C08:
- ldr r0, _08076C48 @ =gUnknown_2024018
+ ldr r0, _08076C48 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0]
mov r1, r8
@@ -5380,12 +5380,12 @@ _08076C08:
adds r2, r0, 0
b _08076C5C
.align 2, 0
-_08076C48: .4byte gUnknown_2024018
+_08076C48: .4byte gBattleSpritesDataPtr
_08076C4C: .4byte gBattlerPartyIndexes
_08076C50: .4byte gEnemyParty
_08076C54:
ldrh r7, [r1, 0x2]
- ldr r0, _08076C94 @ =gUnknown_2024008
+ ldr r0, _08076C94 @ =gTransformedPersonalities
adds r0, r2, r0
ldr r2, [r0]
_08076C5C:
@@ -5417,7 +5417,7 @@ _08076C5C:
movs r0, 0xC9
b _08076CA2
.align 2, 0
-_08076C94: .4byte gUnknown_2024008
+_08076C94: .4byte gTransformedPersonalities
_08076C98:
movs r1, 0xCE
lsls r1, 1
@@ -5492,7 +5492,7 @@ _08076D1E:
_08076D26:
mov r0, r8
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrb r1, [r4]
@@ -5501,7 +5501,7 @@ _08076D26:
_08076D38:
mov r0, r8
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrb r1, [r4]
@@ -5510,7 +5510,7 @@ _08076D38:
_08076D4A:
mov r0, r8
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrb r2, [r4]
@@ -5523,7 +5523,7 @@ _08076D5C:
_08076D62:
mov r0, r8
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrb r2, [r4]
@@ -5536,7 +5536,7 @@ _08076D74:
_08076D7A:
mov r0, r8
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x1F
@@ -5577,16 +5577,16 @@ _08076DBA:
_08076DBE:
adds r0, r4, 0
adds r1, r5, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r8, r0
adds r0, r4, 0
adds r1, r6, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r7, r0, 24
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _08076E06
@@ -5594,12 +5594,12 @@ _08076DBE:
eors r4, r0
adds r0, r4, 0
adds r1, r5, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r5, r0, 24
adds r0, r4, 0
adds r1, r6, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r3, r0, 24
mov r0, r8
@@ -5946,7 +5946,7 @@ _08077064:
adds r0, 0x10
lsls r4, r0, 4
ldrb r0, [r7]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x14]
@@ -6201,13 +6201,13 @@ sub_807729C: @ 807729C
ldr r4, _080772D0 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -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_anim_sound_tasks.s b/asm/battle_anim_sound_tasks.s
index 954878daa..dc5517ca0 100644
--- a/asm/battle_anim_sound_tasks.s
+++ b/asm/battle_anim_sound_tasks.s
@@ -363,7 +363,7 @@ _080DD0BE:
bne _080DD0E8
_080DD0CC:
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
bne _080DD0E8
@@ -475,7 +475,7 @@ _080DD19A:
bne _080DD1C4
_080DD1A8:
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
bne _080DD1C4
diff --git a/asm/battle_anim_special.s b/asm/battle_anim_special.s
index 02a1216c6..c95a1099e 100644
--- a/asm/battle_anim_special.s
+++ b/asm/battle_anim_special.s
@@ -56,7 +56,7 @@ sub_80EEC0C: @ 80EEC0C
movs r1, 0x3
movs r2, 0x1
bl SetAnimBgAttribute
- ldr r0, _080EEDCC @ =gUnknown_3004FF0
+ ldr r0, _080EEDCC @ =gHealthboxSpriteIds
adds r4, r0
ldrb r0, [r4]
ldr r1, _080EEDD0 @ =gSprites
@@ -209,7 +209,7 @@ _080EEDBC: .4byte gUnknown_2022986
_080EEDC0: .4byte 0x00003f3f
_080EEDC4: .4byte 0x00003f3d
_080EEDC8: .4byte 0x00003f42
-_080EEDCC: .4byte gUnknown_3004FF0
+_080EEDCC: .4byte gHealthboxSpriteIds
_080EEDD0: .4byte gSprites
_080EEDD4: .4byte SpriteCallbackDummy
_080EEDD8: .4byte gFile_graphics_battle_anims_masks_unknown_D2EC24_tilemap
@@ -347,7 +347,7 @@ _080EEE9C:
movs r0, 0x4A
adds r1, r4, 0
bl SetGpuReg
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080EEF00
@@ -392,7 +392,7 @@ _080EEF00:
movs r1, 0x1
movs r2, 0
bl SetAnimBgAttribute
- ldr r0, _080EEFC4 @ =gUnknown_3004FF0
+ ldr r0, _080EEFC4 @ =gHealthboxSpriteIds
add r0, r8
ldrb r0, [r0]
lsls r1, r0, 4
@@ -443,7 +443,7 @@ _080EEFB4: .4byte gUnknown_2022984
_080EEFB8: .4byte gUnknown_2022986
_080EEFBC: .4byte 0x00003f3f
_080EEFC0: .4byte gSprites
-_080EEFC4: .4byte gUnknown_3004FF0
+_080EEFC4: .4byte gHealthboxSpriteIds
thumb_func_end sub_80EEDF4
thumb_func_start sub_80EEFC8
@@ -458,7 +458,7 @@ sub_80EEFC8: @ 80EEFC8
adds r7, r1, 0
lsls r2, 24
lsrs r2, 24
- ldr r0, _080EF0A0 @ =gUnknown_3004FF0
+ ldr r0, _080EF0A0 @ =gHealthboxSpriteIds
adds r2, r0
ldrb r0, [r2]
lsls r5, r0, 4
@@ -553,7 +553,7 @@ sub_80EEFC8: @ 80EEFC8
pop {r0}
bx r0
.align 2, 0
-_080EF0A0: .4byte gUnknown_3004FF0
+_080EF0A0: .4byte gHealthboxSpriteIds
_080EF0A4: .4byte gSprites
_080EF0A8: .4byte 0x0000d709
_080EF0AC: .4byte 0x0000d70a
@@ -591,7 +591,7 @@ sub_80EF0E0: @ 80EF0E0
push {r5,r6}
lsls r0, 24
lsrs r0, 24
- ldr r1, _080EF168 @ =gUnknown_3004FF0
+ ldr r1, _080EF168 @ =gHealthboxSpriteIds
adds r0, r1
ldrb r0, [r0]
ldr r1, _080EF16C @ =gSprites
@@ -650,7 +650,7 @@ sub_80EF0E0: @ 80EF0E0
pop {r0}
bx r0
.align 2, 0
-_080EF168: .4byte gUnknown_3004FF0
+_080EF168: .4byte gHealthboxSpriteIds
_080EF16C: .4byte gSprites
_080EF170: .4byte 0x0000d709
_080EF174: .4byte 0x0000d70a
@@ -839,7 +839,7 @@ _080EF2D0:
_080EF2D6:
adds r0, r5, 0
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
movs r0, 0x80
lsls r0, 1
strh r0, [r4, 0x1C]
@@ -853,7 +853,7 @@ _080EF2E6:
adds r0, r5, 0
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
adds r0, r5, 0
bl sub_8076440
movs r0, 0x1C
@@ -870,7 +870,7 @@ _080EF30A:
_080EF314: .4byte 0x000002cf
_080EF318:
adds r0, r5, 0
- bl sub_8075980
+ bl ResetSpriteRotScale
ldr r1, _080EF340 @ =gSprites
lsls r0, r5, 4
adds r0, r5
@@ -963,13 +963,13 @@ _080EF3D8:
ldr r5, _080EF450 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r1, r0, 0
lsls r1, 24
ldr r2, _080EF454 @ =gSprites
@@ -1054,7 +1054,7 @@ sub_80EF490: @ 80EF490
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
- ldr r0, _080EF4B4 @ =gUnknown_2023D68
+ ldr r0, _080EF4B4 @ =gLastUsedItem
ldrh r0, [r0]
bl ItemIdToBallId
lsls r0, 24
@@ -1066,7 +1066,7 @@ sub_80EF490: @ 80EF490
pop {r0}
bx r0
.align 2, 0
-_080EF4B4: .4byte gUnknown_2023D68
+_080EF4B4: .4byte gLastUsedItem
thumb_func_end sub_80EF490
thumb_func_start sub_80EF4B8
@@ -1075,7 +1075,7 @@ sub_80EF4B8: @ 80EF4B8
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
- ldr r0, _080EF4DC @ =gUnknown_2023D68
+ ldr r0, _080EF4DC @ =gLastUsedItem
ldrh r0, [r0]
bl ItemIdToBallId
lsls r0, 24
@@ -1087,7 +1087,7 @@ sub_80EF4B8: @ 80EF4B8
pop {r0}
bx r0
.align 2, 0
-_080EF4DC: .4byte gUnknown_2023D68
+_080EF4DC: .4byte gLastUsedItem
thumb_func_end sub_80EF4B8
thumb_func_start sub_80EF4E0
@@ -1095,7 +1095,7 @@ sub_80EF4E0: @ 80EF4E0
push {lr}
lsls r0, 24
lsrs r2, r0, 24
- ldr r0, _080EF4FC @ =gUnknown_2024018
+ ldr r0, _080EF4FC @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r0, [r0, 0x8]
@@ -1107,7 +1107,7 @@ sub_80EF4E0: @ 80EF4E0
movs r0, 0
b _080EF518
.align 2, 0
-_080EF4FC: .4byte gUnknown_2024018
+_080EF4FC: .4byte gBattleSpritesDataPtr
_080EF500: .4byte gBattleAnimArgs
_080EF504:
ldr r1, _080EF50C @ =gBattleAnimArgs
@@ -1210,7 +1210,7 @@ sub_80EF5AC: @ 80EF5AC
lsls r0, 24
lsrs r0, 24
mov r10, r0
- ldr r0, _080EF674 @ =gUnknown_2023D68
+ ldr r0, _080EF674 @ =gLastUsedItem
ldrh r0, [r0]
bl ItemIdToBallId
adds r1, r0, 0
@@ -1240,14 +1240,14 @@ sub_80EF5AC: @ 80EF5AC
mov r8, r2
ldrb r0, [r2]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x30]
mov r1, r8
ldrb r0, [r1]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
subs r0, 0x10
@@ -1257,7 +1257,7 @@ sub_80EF5AC: @ 80EF5AC
adds r4, r0
ldr r0, _080EF684 @ =sub_80EF8C0
str r0, [r4]
- ldr r0, _080EF688 @ =gUnknown_2024018
+ ldr r0, _080EF688 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r3, [r0, 0x8]
ldr r1, _080EF68C @ =gBattlerSpriteIds
@@ -1297,12 +1297,12 @@ sub_80EF5AC: @ 80EF5AC
pop {r0}
bx r0
.align 2, 0
-_080EF674: .4byte gUnknown_2023D68
+_080EF674: .4byte gLastUsedItem
_080EF678: .4byte gUnknown_82606F4
_080EF67C: .4byte gSprites
_080EF680: .4byte gBattleAnimTarget
_080EF684: .4byte sub_80EF8C0
-_080EF688: .4byte gUnknown_2024018
+_080EF688: .4byte gBattleSpritesDataPtr
_080EF68C: .4byte gBattlerSpriteIds
_080EF690: .4byte gTasks
_080EF694: .4byte sub_80EF698
@@ -1369,7 +1369,7 @@ _080EF6F8:
bne _080EF708
movs r6, 0xD
_080EF708:
- ldr r0, _080EF7C8 @ =gUnknown_2023D68
+ ldr r0, _080EF7C8 @ =gLastUsedItem
ldrh r0, [r0]
bl ItemIdToBallId
adds r4, r0, 0
@@ -1379,7 +1379,7 @@ _080EF708:
bl GetBattlerAtPosition
lsls r0, 24
lsrs r0, 24
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r3, r0, 0
adds r3, 0x1
lsls r3, 24
@@ -1411,14 +1411,14 @@ _080EF708:
mov r8, r1
ldrb r0, [r1]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x30]
mov r1, r8
ldrb r0, [r1]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
subs r0, 0x10
@@ -1457,7 +1457,7 @@ _080EF708:
bx r0
.align 2, 0
_080EF7C4: .4byte gSaveBlock2Ptr
-_080EF7C8: .4byte gUnknown_2023D68
+_080EF7C8: .4byte gLastUsedItem
_080EF7CC: .4byte gUnknown_82606F4
_080EF7D0: .4byte gSprites
_080EF7D4: .4byte gBattleAnimTarget
@@ -1605,7 +1605,7 @@ sub_80EF8F0: @ 80EF8F0
lsls r0, 24
cmp r0, 0
beq _080EF99E
- ldr r0, _080EF914 @ =gUnknown_2024018
+ ldr r0, _080EF914 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r0, [r0, 0x8]
@@ -1615,7 +1615,7 @@ sub_80EF8F0: @ 80EF8F0
str r0, [r4, 0x1C]
b _080EF99E
.align 2, 0
-_080EF914: .4byte gUnknown_2024018
+_080EF914: .4byte gBattleSpritesDataPtr
_080EF918: .4byte sub_80F0478
_080EF91C:
cmp r0, 0x6
@@ -1654,7 +1654,7 @@ _080EF954:
strh r0, [r4, 0x38]
ldr r0, _080EF9A8 @ =sub_80EF9B4
str r0, [r4, 0x1C]
- ldr r0, _080EF9AC @ =gUnknown_2023D68
+ ldr r0, _080EF9AC @ =gLastUsedItem
ldrh r0, [r0]
bl ItemIdToBallId
lsls r0, 24
@@ -1687,7 +1687,7 @@ _080EF99E:
bx r0
.align 2, 0
_080EF9A8: .4byte sub_80EF9B4
-_080EF9AC: .4byte gUnknown_2023D68
+_080EF9AC: .4byte gLastUsedItem
_080EF9B0: .4byte gBattleAnimTarget
thumb_func_end sub_80EF8F0
@@ -1781,7 +1781,7 @@ _080EFA5C:
_080EFA62:
adds r0, r4, 0
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
movs r0, 0x80
lsls r0, 1
strh r0, [r5, 0x1C]
@@ -1824,7 +1824,7 @@ _080EFAB4:
adds r0, r4, 0
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r5, 0xC]
ldrh r1, [r5, 0xE]
adds r0, r1
@@ -1850,7 +1850,7 @@ _080EFAF0: .4byte gSprites
_080EFAF4: .4byte 0x0000047f
_080EFAF8:
adds r0, r4, 0
- bl sub_8075980
+ bl ResetSpriteRotScale
ldr r1, _080EFB1C @ =gSprites
lsls r0, r4, 4
adds r0, r4
@@ -2040,7 +2040,7 @@ _080EFC52:
adds r0, r1
strh r0, [r4, 0x22]
strh r5, [r4, 0x26]
- ldr r0, _080EFC84 @ =gUnknown_2024018
+ ldr r0, _080EFC84 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r0, [r0, 0x8]
@@ -2052,7 +2052,7 @@ _080EFC52:
b _080EFC96
.align 2, 0
_080EFC80: .4byte 0xffffff00
-_080EFC84: .4byte gUnknown_2024018
+_080EFC84: .4byte gBattleSpritesDataPtr
_080EFC88: .4byte sub_80EFF80
_080EFC8C:
ldr r0, _080EFC9C @ =sub_80EFCA0
@@ -2090,7 +2090,7 @@ sub_80EFCA0: @ 80EFCA0
adds r0, r4, 0
movs r1, 0x1
bl StartSpriteAffineAnim
- ldr r0, _080EFCE4 @ =gUnknown_2024018
+ ldr r0, _080EFCE4 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
strh r5, [r0, 0xC]
@@ -2103,7 +2103,7 @@ _080EFCDC:
pop {r0}
bx r0
.align 2, 0
-_080EFCE4: .4byte gUnknown_2024018
+_080EFCE4: .4byte gBattleSpritesDataPtr
_080EFCE8: .4byte sub_80EFCEC
thumb_func_end sub_80EFCA0
@@ -2135,7 +2135,7 @@ _080EFD0C:
.4byte _080EFED4
.4byte _080EFF34
_080EFD28:
- ldr r1, _080EFD4C @ =gUnknown_2024018
+ ldr r1, _080EFD4C @ =gBattleSpritesDataPtr
ldr r5, [r1]
ldr r2, [r5, 0x8]
ldrh r3, [r2, 0xC]
@@ -2153,7 +2153,7 @@ _080EFD28:
strh r0, [r1, 0xC]
b _080EFD56
.align 2, 0
-_080EFD4C: .4byte gUnknown_2024018
+_080EFD4C: .4byte gBattleSpritesDataPtr
_080EFD50:
adds r0, r3, 0
adds r0, 0xB0
@@ -2214,7 +2214,7 @@ _080EFDB6:
bl ChangeSpriteAffineAnim
b _080EFF7A
_080EFDC0:
- ldr r1, _080EFDE4 @ =gUnknown_2024018
+ ldr r1, _080EFDE4 @ =gBattleSpritesDataPtr
ldr r5, [r1]
ldr r2, [r5, 0x8]
ldrh r3, [r2, 0xC]
@@ -2232,7 +2232,7 @@ _080EFDC0:
strh r0, [r1, 0xC]
b _080EFDEE
.align 2, 0
-_080EFDE4: .4byte gUnknown_2024018
+_080EFDE4: .4byte gBattleSpritesDataPtr
_080EFDE8:
adds r0, r3, 0
adds r0, 0xB0
@@ -2307,7 +2307,7 @@ _080EFE68:
movs r1, 0x1
bl ChangeSpriteAffineAnim
_080EFE70:
- ldr r1, _080EFE94 @ =gUnknown_2024018
+ ldr r1, _080EFE94 @ =gBattleSpritesDataPtr
ldr r5, [r1]
ldr r2, [r5, 0x8]
ldrh r3, [r2, 0xC]
@@ -2325,7 +2325,7 @@ _080EFE70:
strh r0, [r1, 0xC]
b _080EFE9E
.align 2, 0
-_080EFE94: .4byte gUnknown_2024018
+_080EFE94: .4byte gBattleSpritesDataPtr
_080EFE98:
adds r0, r3, 0
adds r0, 0xB0
@@ -2367,7 +2367,7 @@ _080EFED4:
strh r0, [r4, 0x34]
lsls r0, 16
asrs r1, r0, 24
- ldr r0, _080EFF04 @ =gUnknown_2024018
+ ldr r0, _080EFF04 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r0, [r0, 0x8]
@@ -2383,7 +2383,7 @@ _080EFED4:
str r0, [r4, 0x1C]
b _080EFF7A
.align 2, 0
-_080EFF04: .4byte gUnknown_2024018
+_080EFF04: .4byte gBattleSpritesDataPtr
_080EFF08: .4byte sub_80EFF80
_080EFF0C:
cmp r0, 0x4
@@ -2538,7 +2538,7 @@ _080F0008:
_080F0026:
cmp r1, 0x5F
bne _080F004C
- ldr r0, _080F0044 @ =gUnknown_2024005
+ ldr r0, _080F0044 @ =gDoingBattleAnim
movs r1, 0
strb r1, [r0]
movs r0, 0x1
@@ -2548,7 +2548,7 @@ _080F0026:
bl PlaySE
b _080F0088
.align 2, 0
-_080F0044: .4byte gUnknown_2024005
+_080F0044: .4byte gDoingBattleAnim
_080F0048: .4byte 0x0000013f
_080F004C:
ldr r0, _080F0094 @ =0x0000013b
@@ -2873,7 +2873,7 @@ sub_80F02B0: @ 80F02B0
bl StartSpriteAffineAnim
ldr r0, _080F0364 @ =sub_80F0378
str r0, [r4, 0x1C]
- ldr r0, _080F0368 @ =gUnknown_2023D68
+ ldr r0, _080F0368 @ =gLastUsedItem
ldrh r0, [r0]
bl ItemIdToBallId
lsls r0, 24
@@ -2949,7 +2949,7 @@ _080F0302:
bx r0
.align 2, 0
_080F0364: .4byte sub_80F0378
-_080F0368: .4byte gUnknown_2023D68
+_080F0368: .4byte gLastUsedItem
_080F036C: .4byte gBattleAnimTarget
_080F0370: .4byte gSprites
_080F0374: .4byte gBattlerSpriteIds
@@ -3045,7 +3045,7 @@ _080F03F0:
adds r2, r0
lsls r2, 2
adds r2, r4
- ldr r0, _080F046C @ =gUnknown_2024018
+ ldr r0, _080F046C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r1, [r0, 0x9]
@@ -3062,7 +3062,7 @@ _080F03F0:
strh r5, [r7, 0x2E]
ldr r0, _080F0470 @ =sub_80F018C
str r0, [r7, 0x1C]
- ldr r0, _080F0474 @ =gUnknown_2024005
+ ldr r0, _080F0474 @ =gDoingBattleAnim
strb r6, [r0]
movs r0, 0x1
bl UpdateOamPriorityInAllHealthboxes
@@ -3075,9 +3075,9 @@ _080F045C: .4byte 0xfffffee0
_080F0460: .4byte gSprites
_080F0464: .4byte gBattlerSpriteIds
_080F0468: .4byte gBattleAnimTarget
-_080F046C: .4byte gUnknown_2024018
+_080F046C: .4byte gBattleSpritesDataPtr
_080F0470: .4byte sub_80F018C
-_080F0474: .4byte gUnknown_2024005
+_080F0474: .4byte gDoingBattleAnim
thumb_func_end sub_80F0378
thumb_func_start sub_80F0478
@@ -3164,7 +3164,7 @@ _080F050A:
strh r0, [r4, 0x2E]
ldr r0, _080F0524 @ =sub_80F018C
str r0, [r4, 0x1C]
- ldr r1, _080F0528 @ =gUnknown_2024005
+ ldr r1, _080F0528 @ =gDoingBattleAnim
movs r0, 0
strb r0, [r1]
movs r0, 0x1
@@ -3175,7 +3175,7 @@ _080F051E:
bx r0
.align 2, 0
_080F0524: .4byte sub_80F018C
-_080F0528: .4byte gUnknown_2024005
+_080F0528: .4byte gDoingBattleAnim
thumb_func_end sub_80F04B4
thumb_func_start sub_80F052C
@@ -3237,7 +3237,7 @@ _080F0590:
strh r0, [r4, 0x2E]
ldr r0, _080F05AC @ =sub_80F018C
str r0, [r4, 0x1C]
- ldr r0, _080F05B0 @ =gUnknown_2024005
+ ldr r0, _080F05B0 @ =gDoingBattleAnim
strb r1, [r0]
movs r0, 0x1
bl UpdateOamPriorityInAllHealthboxes
@@ -3247,7 +3247,7 @@ _080F05A4:
bx r0
.align 2, 0
_080F05AC: .4byte sub_80F018C
-_080F05B0: .4byte gUnknown_2024005
+_080F05B0: .4byte gDoingBattleAnim
thumb_func_end sub_80F0574
thumb_func_start sub_80F05B4
@@ -3356,7 +3356,7 @@ sub_80F0674: @ 80F0674
ands r0, r1
cmp r0, 0
beq _080F0692
- ldr r0, _080F06A0 @ =gUnknown_2024018
+ ldr r0, _080F06A0 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x8]
ldrb r0, [r1, 0xA]
@@ -3368,7 +3368,7 @@ _080F0692:
.align 2, 0
_080F0698: .4byte gMain
_080F069C: .4byte 0x00000439
-_080F06A0: .4byte gUnknown_2024018
+_080F06A0: .4byte gBattleSpritesDataPtr
thumb_func_end sub_80F0674
thumb_func_start sub_80F06A4
@@ -4771,7 +4771,7 @@ sub_80F1198: @ 80F1198
_080F11BC: .4byte gMain
_080F11C0: .4byte 0x00000439
_080F11C4:
- ldr r2, _080F1200 @ =gUnknown_2024018
+ ldr r2, _080F1200 @ =gBattleSpritesDataPtr
ldr r0, [r2]
ldr r1, [r0, 0x8]
ldrb r0, [r1, 0xA]
@@ -4800,7 +4800,7 @@ _080F11F6:
bl DestroySprite
b _080F1212
.align 2, 0
-_080F1200: .4byte gUnknown_2024018
+_080F1200: .4byte gBattleSpritesDataPtr
_080F1204: .4byte gUnknown_840BF48
_080F1208: .4byte gUnknown_840BFA8
_080F120C:
@@ -5420,7 +5420,7 @@ sub_80F16CC: @ 80F16CC
lsls r0, 24
lsrs r0, 24
ldr r3, _080F16F4 @ =gBattleAnimArgs
- ldr r1, _080F16F8 @ =gUnknown_2024018
+ ldr r1, _080F16F8 @ =gBattleSpritesDataPtr
ldr r2, [r1]
ldr r1, _080F16FC @ =gBattleAnimAttacker
ldrb r1, [r1]
@@ -5436,7 +5436,7 @@ sub_80F16CC: @ 80F16CC
bx r0
.align 2, 0
_080F16F4: .4byte gBattleAnimArgs
-_080F16F8: .4byte gUnknown_2024018
+_080F16F8: .4byte gBattleSpritesDataPtr
_080F16FC: .4byte gBattleAnimAttacker
thumb_func_end sub_80F16CC
@@ -5446,7 +5446,7 @@ sub_80F1700: @ 80F1700
lsls r0, 24
lsrs r0, 24
ldr r2, _080F1718 @ =gBattleAnimTarget
- ldr r1, _080F171C @ =gUnknown_2023D6E
+ ldr r1, _080F171C @ =gEffectBattler
ldrb r1, [r1]
strb r1, [r2]
bl DestroyAnimVisualTask
@@ -5454,7 +5454,7 @@ sub_80F1700: @ 80F1700
bx r0
.align 2, 0
_080F1718: .4byte gBattleAnimTarget
-_080F171C: .4byte gUnknown_2023D6E
+_080F171C: .4byte gEffectBattler
thumb_func_end sub_80F1700
thumb_func_start sub_80F1720
@@ -5467,7 +5467,7 @@ sub_80F1720: @ 80F1720
lsrs r6, r0, 24
movs r0, 0
mov r8, r0
- ldr r0, _080F17DC @ =gUnknown_2024018
+ ldr r0, _080F17DC @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x4]
lsls r0, r6, 1
@@ -5487,7 +5487,7 @@ sub_80F1720: @ 80F1720
bl GetMonData
adds r4, r0, 0
adds r0, r6, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080F17F8
@@ -5547,7 +5547,7 @@ _080F179E:
strh r0, [r1, 0xA]
b _080F180E
.align 2, 0
-_080F17DC: .4byte gUnknown_2024018
+_080F17DC: .4byte gBattleSpritesDataPtr
_080F17E0: .4byte 0x0000ffff
_080F17E4: .4byte 0x000027f9
_080F17E8: .4byte gUnknown_83AD350
@@ -5555,7 +5555,7 @@ _080F17EC: .4byte gUnknown_83ADC58
_080F17F0: .4byte sub_80F181C
_080F17F4: .4byte gTasks
_080F17F8:
- ldr r0, _080F1818 @ =gUnknown_2024018
+ ldr r0, _080F1818 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x4]
lsls r0, r6, 1
@@ -5573,7 +5573,7 @@ _080F180E:
pop {r0}
bx r0
.align 2, 0
-_080F1818: .4byte gUnknown_2024018
+_080F1818: .4byte gBattleSpritesDataPtr
thumb_func_end sub_80F1720
thumb_func_start sub_80F181C
@@ -5600,7 +5600,7 @@ sub_80F181C: @ 80F181C
.align 2, 0
_080F1844: .4byte gTasks
_080F1848:
- ldr r0, _080F189C @ =gUnknown_2024018
+ ldr r0, _080F189C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r0, [r0, 0xA]
@@ -5622,12 +5622,12 @@ _080F186A:
ldrb r0, [r4, 0x8]
mov r8, r0
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r5, r0, 24
mov r0, r8
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r2, r0, 24
movs r1, 0x1E
@@ -5642,7 +5642,7 @@ _080F186A:
lsrs r5, r0, 24
b _080F1906
.align 2, 0
-_080F189C: .4byte gUnknown_2024018
+_080F189C: .4byte gBattleSpritesDataPtr
_080F18A0: .4byte gUnknown_83FF168
_080F18A4:
cmp r0, 0
@@ -5817,7 +5817,7 @@ sub_80F19E0: @ 80F19E0
cmp r0, 0x1
bne _080F1A1A
ldrb r1, [r1, 0x8]
- ldr r0, _080F1A28 @ =gUnknown_2024018
+ ldr r0, _080F1A28 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r2, [r0, 0x4]
lsls r0, r1, 1
@@ -5836,7 +5836,7 @@ _080F1A20:
bx r0
.align 2, 0
_080F1A24: .4byte gTasks
-_080F1A28: .4byte gUnknown_2024018
+_080F1A28: .4byte gBattleSpritesDataPtr
thumb_func_end sub_80F19E0
thumb_func_start sub_80F1A2C
@@ -5990,7 +5990,7 @@ sub_80F1B3C: @ 80F1B3C
lsls r0, 24
lsrs r0, 24
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r5, _080F1BB0 @ =gBattleAnimArgs
lsrs r0, 24
@@ -6002,7 +6002,7 @@ sub_80F1B3C: @ 80F1B3C
lsls r0, 24
lsrs r0, 24
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r5, [r5, 0x6]
@@ -6192,7 +6192,7 @@ sub_80F1CE4: @ 80F1CE4
push {lr}
lsls r0, 24
lsrs r3, r0, 24
- ldr r2, _080F1CF8 @ =gUnknown_2023E82
+ ldr r2, _080F1CF8 @ =gBattleCommunication
ldrb r0, [r2, 0x5]
cmp r0, 0x2
bls _080F1D00
@@ -6200,7 +6200,7 @@ sub_80F1CE4: @ 80F1CE4
movs r0, 0
b _080F1D04
.align 2, 0
-_080F1CF8: .4byte gUnknown_2023E82
+_080F1CF8: .4byte gBattleCommunication
_080F1CFC: .4byte gBattleAnimArgs
_080F1D00:
ldr r1, _080F1D10 @ =gBattleAnimArgs
@@ -6220,7 +6220,7 @@ sub_80F1D14: @ 80F1D14
push {lr}
lsls r0, 24
lsrs r2, r0, 24
- ldr r0, _080F1D2C @ =gUnknown_2024018
+ ldr r0, _080F1D2C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrh r1, [r0]
@@ -6230,7 +6230,7 @@ sub_80F1D14: @ 80F1D14
movs r0, 0x1
b _080F1D6C
.align 2, 0
-_080F1D2C: .4byte gUnknown_2024018
+_080F1D2C: .4byte gBattleSpritesDataPtr
_080F1D30: .4byte gBattleAnimArgs
_080F1D34:
cmp r1, 0xFA
@@ -6277,7 +6277,7 @@ sub_80F1D7C: @ 80F1D7C
lsls r0, 24
lsrs r0, 24
ldr r3, _080F1DA0 @ =gBattleAnimAttacker
- ldr r1, _080F1DA4 @ =gUnknown_2024018
+ ldr r1, _080F1DA4 @ =gBattleSpritesDataPtr
ldr r2, [r1]
ldr r1, [r2, 0x8]
ldrh r1, [r1]
@@ -6292,7 +6292,7 @@ sub_80F1D7C: @ 80F1D7C
bx r0
.align 2, 0
_080F1DA0: .4byte gBattleAnimAttacker
-_080F1DA4: .4byte gUnknown_2024018
+_080F1DA4: .4byte gBattleSpritesDataPtr
_080F1DA8: .4byte gBattleAnimTarget
thumb_func_end sub_80F1D7C
diff --git a/asm/battle_anim_status_effects.s b/asm/battle_anim_status_effects.s
index b1da74298..c70d88cef 100644
--- a/asm/battle_anim_status_effects.s
+++ b/asm/battle_anim_status_effects.s
@@ -344,7 +344,7 @@ sub_80783FC: @ 80783FC
ldr r4, _080784AC @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 8
ldr r1, _080784B0 @ =0xffe00000
@@ -352,13 +352,13 @@ sub_80783FC: @ 80783FC
lsrs r5, r0, 16
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 8
ldr r1, _080784B4 @ =0xffdc0000
adds r0, r1
lsrs r4, r0, 16
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _0807843A
@@ -662,7 +662,7 @@ sub_8078694: @ 8078694
lsls r0, 24
lsrs r4, r0, 24
movs r3, 0
- ldr r0, _080786B8 @ =gUnknown_2024018
+ ldr r0, _080786B8 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrh r0, [r0]
@@ -677,7 +677,7 @@ _080786AC:
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_080786B8: .4byte gUnknown_2024018
+_080786B8: .4byte gBattleSpritesDataPtr
_080786BC: .4byte _080786C0
.align 2, 0
_080786C0:
@@ -907,7 +907,7 @@ LaunchStatusAnimation: @ 807886C
strb r4, [r0]
ldr r0, _080788B0 @ =gUnknown_81C6E84
movs r2, 0
- bl sub_80725D4
+ bl LaunchBattleAnimation
ldr r0, _080788B4 @ =task0A_80788BC
movs r1, 0xA
bl CreateTask
@@ -935,14 +935,14 @@ task0A_80788BC: @ 80788BC
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, _08078904 @ =gUnknown_2037EDC
+ ldr r0, _08078904 @ =gAnimScriptCallback
ldr r0, [r0]
bl _call_via_r0
- ldr r0, _08078908 @ =gUnknown_2037EE1
+ ldr r0, _08078908 @ =gAnimScriptActive
ldrb r0, [r0]
cmp r0, 0
bne _080788FE
- ldr r0, _0807890C @ =gUnknown_2024018
+ ldr r0, _0807890C @ =gBattleSpritesDataPtr
ldr r2, [r0]
ldr r1, _08078910 @ =gTasks
lsls r0, r4, 2
@@ -968,9 +968,9 @@ _080788FE:
pop {r0}
bx r0
.align 2, 0
-_08078904: .4byte gUnknown_2037EDC
-_08078908: .4byte gUnknown_2037EE1
-_0807890C: .4byte gUnknown_2024018
+_08078904: .4byte gAnimScriptCallback
+_08078908: .4byte gAnimScriptActive
+_0807890C: .4byte gBattleSpritesDataPtr
_08078910: .4byte gTasks
thumb_func_end task0A_80788BC
diff --git a/asm/battle_anim_utility_funcs.s b/asm/battle_anim_utility_funcs.s
index d33f51842..f447bdf45 100644
--- a/asm/battle_anim_utility_funcs.s
+++ b/asm/battle_anim_utility_funcs.s
@@ -137,7 +137,7 @@ _080BA8EA:
cmp r4, r0
beq _080BA914
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080BA914
@@ -176,7 +176,7 @@ sub_80BA934: @ 80BA934
ldrsh r0, [r0, r1]
bl sub_80B9A14
adds r2, r0, 0
- ldr r0, _080BA95C @ =gUnknown_2022B50
+ ldr r0, _080BA95C @ =gBattleTerrain
ldrb r0, [r0]
cmp r0, 0x9
bhi _080BAA0A
@@ -187,7 +187,7 @@ sub_80BA934: @ 80BA934
mov pc, r0
.align 2, 0
_080BA958: .4byte gBattleAnimArgs
-_080BA95C: .4byte gUnknown_2022B50
+_080BA95C: .4byte gBattleTerrain
_080BA960: .4byte _080BA964
.align 2, 0
_080BA964:
@@ -707,7 +707,7 @@ sub_80BACEC: @ 80BACEC
ldrh r1, [r4]
movs r0, 0xA
bl SetGpuReg
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BAD7A
@@ -722,11 +722,11 @@ sub_80BACEC: @ 80BACEC
movs r0, 0xA
bl SetGpuReg
_080BAD7A:
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _080BADFE
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BADFE
@@ -746,7 +746,7 @@ _080BADAA:
ldrb r0, [r5]
movs r6, 0x2
eors r0, r6
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -844,7 +844,7 @@ _080BAE5C:
ldrb r0, [r0, 0x9]
ldr r1, _080BAF18 @ =gFile_graphics_battle_anims_masks_curse_tilemap
bl sub_807543C
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080BAEAC
@@ -967,7 +967,7 @@ sub_80BAF38: @ 80BAF38
movs r0, 0x4A
adds r1, r4, 0
bl SetGpuReg
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BAFCA
@@ -1134,7 +1134,7 @@ _080BB0FA:
movs r1, 0x2
eors r0, r1
strb r0, [r2, 0x1]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BB12A
@@ -1144,7 +1144,7 @@ _080BB0FA:
cmp r0, 0
beq _080BB130
ldrb r0, [r1, 0x1]
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
bne _080BB130
@@ -1183,7 +1183,7 @@ _080BB130:
movs r1, 0
movs r2, 0
bl SetAnimBgAttribute
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BB18E
@@ -1192,7 +1192,7 @@ _080BB130:
movs r2, 0x1
bl SetAnimBgAttribute
_080BB18E:
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _080BB20A
@@ -1217,7 +1217,7 @@ _080BB18E:
_080BB1C0:
ldr r0, [r4]
ldrb r0, [r0, 0x1]
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x1
@@ -1369,7 +1369,7 @@ _080BB30C:
ldr r1, _080BB354 @ =gFile_graphics_battle_anims_masks_stat_tilemap_2_tilemap
bl sub_807543C
_080BB316:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080BB32E
@@ -1692,7 +1692,7 @@ _080BB582:
movs r0, 0x4A
adds r1, r4, 0
bl SetGpuReg
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BB5B2
@@ -2234,7 +2234,7 @@ _080BB9BA:
beq _080BB9F8
lsls r0, r4, 24
lsrs r0, 24
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080BB9F8
@@ -2313,7 +2313,7 @@ sub_80BBA20: @ 80BBA20
movs r0, 0x2
adds r6, r7, 0
eors r6, r0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BBA82
@@ -2321,7 +2321,7 @@ sub_80BBA20: @ 80BBA20
cmp r1, 0
beq _080BBA86
adds r0, r6, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
bne _080BBA86
@@ -2370,7 +2370,7 @@ _080BBA86:
movs r1, 0x20
orrs r0, r1
strb r0, [r2]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BBAFC
@@ -2446,7 +2446,7 @@ _080BBB80:
ldrb r0, [r0, 0x9]
ldr r1, [sp, 0x58]
bl sub_807543C
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080BBBA8
@@ -2669,7 +2669,7 @@ _080BBD00:
movs r0, 0x4A
adds r1, r4, 0
bl SetGpuReg
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BBD7E
@@ -2745,7 +2745,7 @@ sub_80BBDF0: @ 80BBDF0
lsls r0, 24
lsrs r0, 24
ldr r2, _080BBE08 @ =gBattleAnimArgs
- ldr r1, _080BBE0C @ =gUnknown_2022B50
+ ldr r1, _080BBE0C @ =gBattleTerrain
ldrb r1, [r1]
strh r1, [r2]
bl DestroyAnimVisualTask
@@ -2753,7 +2753,7 @@ sub_80BBDF0: @ 80BBDF0
bx r0
.align 2, 0
_080BBE08: .4byte gBattleAnimArgs
-_080BBE0C: .4byte gUnknown_2022B50
+_080BBE0C: .4byte gBattleTerrain
thumb_func_end sub_80BBDF0
thumb_func_start sub_80BBE10
@@ -3044,7 +3044,7 @@ sub_80BC02C: @ 80BC02C
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl sub_8073788
+ bl IsContest
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
@@ -3078,7 +3078,7 @@ sub_80BC060: @ 80BC060
ldrb r1, [r1]
strb r1, [r2]
ldr r2, _080BC088 @ =gBattleAnimTarget
- ldr r1, _080BC08C @ =gUnknown_2023D6E
+ ldr r1, _080BC08C @ =gEffectBattler
ldrb r1, [r1]
strb r1, [r2]
bl DestroyAnimVisualTask
@@ -3088,7 +3088,7 @@ sub_80BC060: @ 80BC060
_080BC080: .4byte gBattleAnimAttacker
_080BC084: .4byte gBattlerTarget
_080BC088: .4byte gBattleAnimTarget
-_080BC08C: .4byte gUnknown_2023D6E
+_080BC08C: .4byte gEffectBattler
thumb_func_end sub_80BC060
thumb_func_start sub_80BC090
@@ -3151,11 +3151,11 @@ sub_80BC0FC: @ 80BC0FC
lsls r0, 24
lsrs r0, 24
ldr r2, _080BC11C @ =gBattleAnimAttacker
- ldr r1, _080BC120 @ =sBattler_AI
+ ldr r1, _080BC120 @ =gBattlerAttacker
ldrb r1, [r1]
strb r1, [r2]
ldr r2, _080BC124 @ =gBattleAnimTarget
- ldr r1, _080BC128 @ =gUnknown_2023D6E
+ ldr r1, _080BC128 @ =gEffectBattler
ldrb r1, [r1]
strb r1, [r2]
bl DestroyAnimVisualTask
@@ -3163,9 +3163,9 @@ sub_80BC0FC: @ 80BC0FC
bx r0
.align 2, 0
_080BC11C: .4byte gBattleAnimAttacker
-_080BC120: .4byte sBattler_AI
+_080BC120: .4byte gBattlerAttacker
_080BC124: .4byte gBattleAnimTarget
-_080BC128: .4byte gUnknown_2023D6E
+_080BC128: .4byte gEffectBattler
thumb_func_end sub_80BC0FC
thumb_func_start sub_80BC12C
@@ -3173,7 +3173,7 @@ sub_80BC12C: @ 80BC12C
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080BC144
@@ -3186,7 +3186,7 @@ _080BC144:
adds r3, r4
lsls r3, 3
adds r3, r0
- ldr r0, _080BC18C @ =gUnknown_2024018
+ ldr r0, _080BC18C @ =gBattleSpritesDataPtr
ldr r4, [r0]
ldr r2, _080BC190 @ =gBattleAnimAttacker
ldrb r0, [r2]
@@ -3217,7 +3217,7 @@ _080BC180:
bx r0
.align 2, 0
_080BC188: .4byte gTasks
-_080BC18C: .4byte gUnknown_2024018
+_080BC18C: .4byte gBattleSpritesDataPtr
_080BC190: .4byte gBattleAnimAttacker
_080BC194: .4byte sub_80BC19C
_080BC198: .4byte gUnknown_2037EE2
@@ -3235,7 +3235,7 @@ sub_80BC19C: @ 80BC19C
lsls r0, 5
cmp r1, r0
bne _080BC1E0
- ldr r0, _080BC1EC @ =gUnknown_2024018
+ ldr r0, _080BC1EC @ =gBattleSpritesDataPtr
ldr r1, [r0]
ldr r0, _080BC1F0 @ =gBattleAnimAttacker
ldrb r3, [r0]
@@ -3264,7 +3264,7 @@ _080BC1E0:
bx r0
.align 2, 0
_080BC1E8: .4byte gBattleAnimArgs
-_080BC1EC: .4byte gUnknown_2024018
+_080BC1EC: .4byte gBattleSpritesDataPtr
_080BC1F0: .4byte gBattleAnimAttacker
_080BC1F4: .4byte gTasks
thumb_func_end sub_80BC19C
@@ -3488,8 +3488,8 @@ _080BC396:
bx r1
thumb_func_end sub_80BC30C
- thumb_func_start sub_80BC3A0
-sub_80BC3A0: @ 80BC3A0
+ thumb_func_start HandleIntroSlide
+HandleIntroSlide: @ 80BC3A0
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -3549,7 +3549,7 @@ _080BC3E8:
.align 2, 0
_080BC414: .4byte gUnknown_83E7CD4
_080BC418: .4byte gTasks
- thumb_func_end sub_80BC3A0
+ thumb_func_end HandleIntroSlide
thumb_func_start sub_80BC41C
sub_80BC41C: @ 80BC41C
@@ -3707,7 +3707,7 @@ _080BC544:
strh r0, [r1, 0xC]
movs r0, 0x20
strh r0, [r1, 0xE]
- ldr r2, _080BC56C @ =gUnknown_2023F4C
+ ldr r2, _080BC56C @ =gIntroSlideFlags
ldrh r1, [r2]
ldr r0, _080BC570 @ =0x0000fffe
ands r0, r1
@@ -3715,7 +3715,7 @@ _080BC544:
b _080BC6BA
.align 2, 0
_080BC568: .4byte gUnknown_2022986
-_080BC56C: .4byte gUnknown_2023F4C
+_080BC56C: .4byte gIntroSlideFlags
_080BC570: .4byte 0x0000fffe
_080BC574:
lsls r0, r4, 2
@@ -4075,7 +4075,7 @@ _080BC820:
strh r0, [r1, 0xE]
movs r0, 0x1
strh r0, [r1, 0x12]
- ldr r2, _080BC850 @ =gUnknown_2023F4C
+ ldr r2, _080BC850 @ =gIntroSlideFlags
ldrh r1, [r2]
ldr r0, _080BC854 @ =0x0000fffe
ands r0, r1
@@ -4084,7 +4084,7 @@ _080BC820:
.align 2, 0
_080BC848: .4byte gUnknown_2022986
_080BC84C: .4byte gTasks
-_080BC850: .4byte gUnknown_2023F4C
+_080BC850: .4byte gIntroSlideFlags
_080BC854: .4byte 0x0000fffe
_080BC858:
ldr r0, _080BC890 @ =gTasks
@@ -4398,7 +4398,7 @@ _080BCAC0:
strh r0, [r1, 0xE]
movs r0, 0x1
strh r0, [r1, 0x12]
- ldr r2, _080BCAF0 @ =gUnknown_2023F4C
+ ldr r2, _080BCAF0 @ =gIntroSlideFlags
ldrh r1, [r2]
ldr r0, _080BCAF4 @ =0x0000fffe
ands r0, r1
@@ -4407,7 +4407,7 @@ _080BCAC0:
.align 2, 0
_080BCAE8: .4byte gUnknown_2022986
_080BCAEC: .4byte gTasks
-_080BCAF0: .4byte gUnknown_2023F4C
+_080BCAF0: .4byte gIntroSlideFlags
_080BCAF4: .4byte 0x0000fffe
_080BCAF8:
lsls r0, r5, 2
@@ -4782,7 +4782,7 @@ _080BCDDC:
strh r0, [r1, 0xC]
movs r0, 0x20
strh r0, [r1, 0xE]
- ldr r2, _080BCE00 @ =gUnknown_2023F4C
+ ldr r2, _080BCE00 @ =gIntroSlideFlags
ldrh r1, [r2]
ldr r0, _080BCE04 @ =0x0000fffe
ands r0, r1
@@ -4790,7 +4790,7 @@ _080BCDDC:
b _080BCEE6
.align 2, 0
_080BCDFC: .4byte gUnknown_2022986
-_080BCE00: .4byte gUnknown_2023F4C
+_080BCE00: .4byte gIntroSlideFlags
_080BCE04: .4byte 0x0000fffe
_080BCE08:
ldr r2, _080BCECC @ =gUnknown_2022986
diff --git a/asm/battle_controller_link_opponent.s b/asm/battle_controller_link_opponent.s
deleted file mode 100644
index 873fa088c..000000000
--- a/asm/battle_controller_link_opponent.s
+++ /dev/null
@@ -1,6260 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_19
-nullsub_19: @ 803A664
- bx lr
- thumb_func_end nullsub_19
-
- thumb_func_start sub_803A668
-sub_803A668: @ 803A668
- ldr r1, _0803A678 @ =gUnknown_3004FE0
- ldr r0, _0803A67C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803A680 @ =sub_803A684
- str r1, [r0]
- bx lr
- .align 2, 0
-_0803A678: .4byte gUnknown_3004FE0
-_0803A67C: .4byte gActiveBattler
-_0803A680: .4byte sub_803A684
- thumb_func_end sub_803A668
-
- thumb_func_start sub_803A684
-sub_803A684: @ 803A684
- push {lr}
- ldr r2, _0803A6B8 @ =gUnknown_2023BC8
- ldr r1, _0803A6BC @ =gBitTable
- ldr r0, _0803A6C0 @ =gActiveBattler
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0803A6D0
- ldr r0, _0803A6C4 @ =gUnknown_2022BC4
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _0803A6CC
- ldr r0, _0803A6C8 @ =gUnknown_8250B20
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _0803A6D0
- .align 2, 0
-_0803A6B8: .4byte gUnknown_2023BC8
-_0803A6BC: .4byte gBitTable
-_0803A6C0: .4byte gActiveBattler
-_0803A6C4: .4byte gUnknown_2022BC4
-_0803A6C8: .4byte gUnknown_8250B20
-_0803A6CC:
- bl RecordedOpponentBufferExecCompleted
-_0803A6D0:
- pop {r0}
- bx r0
- thumb_func_end sub_803A684
-
- thumb_func_start sub_803A6D4
-sub_803A6D4: @ 803A6D4
- push {lr}
- ldr r2, _0803A6FC @ =gSprites
- ldr r1, _0803A700 @ =gBattlerSpriteIds
- ldr r0, _0803A704 @ =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, _0803A708 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0803A6F8
- bl RecordedOpponentBufferExecCompleted
-_0803A6F8:
- pop {r0}
- bx r0
- .align 2, 0
-_0803A6FC: .4byte gSprites
-_0803A700: .4byte gBattlerSpriteIds
-_0803A704: .4byte gActiveBattler
-_0803A708: .4byte SpriteCallbackDummy
- thumb_func_end sub_803A6D4
-
- thumb_func_start sub_803A70C
-sub_803A70C: @ 803A70C
- push {r4-r6,lr}
- ldr r4, _0803A784 @ =gSprites
- ldr r6, _0803A788 @ =gBattlerSpriteIds
- ldr r5, _0803A78C @ =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, _0803A790 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0803A77C
- adds r0, r2, r4
- ldrh r0, [r0, 0x6]
- bl sub_803477C
- 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, _0803A794 @ =0x000003ff
- ands r2, r0
- ldrh r3, [r1, 0x4]
- ldr r0, _0803A798 @ =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 RecordedOpponentBufferExecCompleted
-_0803A77C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803A784: .4byte gSprites
-_0803A788: .4byte gBattlerSpriteIds
-_0803A78C: .4byte gActiveBattler
-_0803A790: .4byte SpriteCallbackDummy
-_0803A794: .4byte 0x000003ff
-_0803A798: .4byte 0xfffffc00
- thumb_func_end sub_803A70C
-
- thumb_func_start sub_803A79C
-sub_803A79C: @ 803A79C
- push {r4,lr}
- ldr r4, _0803A7DC @ =gUnknown_2024018
- ldr r1, [r4]
- ldr r3, _0803A7E0 @ =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 _0803A7D4
- 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 RecordedOpponentBufferExecCompleted
-_0803A7D4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803A7DC: .4byte gUnknown_2024018
-_0803A7E0: .4byte gActiveBattler
- thumb_func_end sub_803A79C
-
- thumb_func_start sub_803A7E4
-sub_803A7E4: @ 803A7E4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0803A80C
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0803A840
- ldr r0, _0803A82C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0803A840
-_0803A80C:
- ldr r2, _0803A830 @ =gSprites
- ldr r1, _0803A834 @ =gUnknown_3004FF0
- ldr r0, _0803A838 @ =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, _0803A83C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0803A876
- b _0803A874
- .align 2, 0
-_0803A82C: .4byte gBattleTypeFlags
-_0803A830: .4byte gSprites
-_0803A834: .4byte gUnknown_3004FF0
-_0803A838: .4byte gActiveBattler
-_0803A83C: .4byte SpriteCallbackDummy
-_0803A840:
- ldr r2, _0803A95C @ =gSprites
- ldr r5, _0803A960 @ =gUnknown_3004FF0
- ldr r0, _0803A964 @ =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, _0803A968 @ =SpriteCallbackDummy
- cmp r4, r0
- bne _0803A876
- 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 _0803A876
-_0803A874:
- movs r6, 0x1
-_0803A876:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _0803A882
- movs r6, 0
-_0803A882:
- cmp r6, 0
- bne _0803A888
- b _0803A9AA
-_0803A888:
- ldr r0, _0803A964 @ =gActiveBattler
- mov r8, r0
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1
- bne _0803A936
- ldr r7, _0803A96C @ =gUnknown_2024018
- ldr r0, [r7]
- mov r1, r8
- ldrb r2, [r1]
- ldr r5, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0, r5
- ldrb r1, [r4, 0x1]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0803A9AA
- movs r6, 0x2
- adds r1, r6, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0803A9AA
- ldrb r1, [r4]
- movs r3, 0x7F
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- ldr r0, [r7]
- mov r1, r8
- ldrb r2, [r1]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r2, [r7]
- mov r1, r8
- ldrb r0, [r1]
- adds r1, r6, 0
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- ldr r2, [r7]
- mov r1, r8
- ldrb r0, [r1]
- adds r1, r6, 0
- eors r1, r0
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- ands r4, r1
- strb r4, [r0, 0x1]
- ldr r4, _0803A970 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
-_0803A936:
- ldr r0, _0803A974 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0803A97C
- mov r1, r8
- ldrb r0, [r1]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0803A988
- ldr r0, _0803A978 @ =gMPlayInfo_BGM
- bl m4aMPlayContinue
- b _0803A988
- .align 2, 0
-_0803A95C: .4byte gSprites
-_0803A960: .4byte gUnknown_3004FF0
-_0803A964: .4byte gActiveBattler
-_0803A968: .4byte SpriteCallbackDummy
-_0803A96C: .4byte gUnknown_2024018
-_0803A970: .4byte 0x000027f9
-_0803A974: .4byte gBattleTypeFlags
-_0803A978: .4byte gMPlayInfo_BGM
-_0803A97C:
- ldr r0, _0803A9B4 @ =gMPlayInfo_BGM
- ldr r1, _0803A9B8 @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_0803A988:
- ldr r0, _0803A9BC @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r3, _0803A9C0 @ =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, _0803A9C4 @ =gUnknown_3004FE0
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803A9C8 @ =sub_803A79C
- str r1, [r0]
-_0803A9AA:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803A9B4: .4byte gMPlayInfo_BGM
-_0803A9B8: .4byte 0x0000ffff
-_0803A9BC: .4byte gUnknown_2024018
-_0803A9C0: .4byte gActiveBattler
-_0803A9C4: .4byte gUnknown_3004FE0
-_0803A9C8: .4byte sub_803A79C
- thumb_func_end sub_803A7E4
-
- thumb_func_start sub_803A9CC
-sub_803A9CC: @ 803A9CC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0803ABEC @ =gUnknown_2024018
- mov r8, r0
- ldr r0, [r0]
- ldr r7, _0803ABF0 @ =gActiveBattler
- ldrb r2, [r7]
- ldr r3, [r0, 0x4]
- lsls r5, r2, 1
- adds r0, r5, r2
- lsls r0, 2
- adds r0, r3
- ldrb r4, [r0]
- movs r6, 0x8
- adds r0, r6, 0
- ands r0, r4
- cmp r0, 0
- beq _0803A9F8
- b _0803ABDC
-_0803A9F8:
- movs r1, 0x2
- mov r9, r1
- adds r1, r2, 0
- mov r0, r9
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r6, 0
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- cmp r0, 0
- beq _0803AA1C
- b _0803ABDC
-_0803AA1C:
- movs r6, 0x80
- adds r0, r6, 0
- ands r0, r4
- cmp r0, 0
- bne _0803AA3A
- ldr r0, _0803ABF4 @ =gBattlerPartyIndexes
- adds r0, r5, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0803ABF8 @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0803AA3A:
- mov r2, r8
- ldr r1, [r2]
- ldrb r0, [r7]
- mov r2, r9
- 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, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _0803AA6C
- ldr r0, _0803ABF4 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0803ABF8 @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0803AA6C:
- ldr r0, _0803ABFC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0803AABA
- ldrb r0, [r7]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0803AABA
- mov r1, r8
- ldr r0, [r1]
- ldrb r2, [r7]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x9]
- adds r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0803AAA6
- b _0803ABDC
-_0803AAA6:
- mov r2, r8
- ldr r0, [r2]
- ldrb r1, [r7]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- mov r1, r10
- strb r1, [r0, 0x9]
-_0803AABA:
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0803AB50
- ldr r0, _0803ABFC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0803AB50
- ldr r1, _0803AC00 @ =gUnknown_3004FFC
- ldr r5, _0803ABF0 @ =gActiveBattler
- ldrb r0, [r5]
- movs r4, 0x2
- eors r0, r4
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0803AC04 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r2, _0803AC08 @ =gUnknown_3004FF0
- mov r8, r2
- ldrb r0, [r5]
- adds r1, r4, 0
- eors r1, r0
- adds r0, r1, r2
- ldrb r0, [r0]
- ldr r2, _0803ABF4 @ =gBattlerPartyIndexes
- mov r10, r2
- lsls r1, 1
- add r1, r10
- ldrh r1, [r1]
- movs r2, 0x64
- mov r9, r2
- mov r2, r9
- muls r2, r1
- adds r1, r2, 0
- ldr r6, _0803ABF8 @ =gEnemyParty
- adds r1, r6
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r5]
- eors r0, r4
- bl sub_804BD94
- ldrb r0, [r5]
- eors r0, r4
- add r0, r8
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldrb r0, [r5]
- eors r4, r0
- lsls r0, r4, 1
- add r0, r10
- ldrh r0, [r0]
- mov r1, r9
- 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 SetBankEnemyShadowSpriteCallback
-_0803AB50:
- ldr r1, _0803AC00 @ =gUnknown_3004FFC
- ldr r5, _0803ABF0 @ =gActiveBattler
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0803AC04 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r4, _0803AC08 @ =gUnknown_3004FF0
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _0803ABF4 @ =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, _0803ABF8 @ =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 SetBankEnemyShadowSpriteCallback
- ldr r0, _0803ABEC @ =gUnknown_2024018
- 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, _0803AC0C @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803AC10 @ =sub_803A7E4
- str r1, [r0]
-_0803ABDC:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803ABEC: .4byte gUnknown_2024018
-_0803ABF0: .4byte gActiveBattler
-_0803ABF4: .4byte gBattlerPartyIndexes
-_0803ABF8: .4byte gEnemyParty
-_0803ABFC: .4byte gBattleTypeFlags
-_0803AC00: .4byte gUnknown_3004FFC
-_0803AC04: .4byte gSprites
-_0803AC08: .4byte gUnknown_3004FF0
-_0803AC0C: .4byte gUnknown_3004FE0
-_0803AC10: .4byte sub_803A7E4
- thumb_func_end sub_803A9CC
-
- thumb_func_start sub_803AC14
-sub_803AC14: @ 803AC14
- push {r4-r7,lr}
- ldr r2, _0803AC70 @ =gSprites
- ldr r0, _0803AC74 @ =gBattlerSpriteIds
- ldr r7, _0803AC78 @ =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 _0803ACC0
- movs r4, 0x24
- ldrsh r0, [r1, r4]
- cmp r0, 0
- bne _0803ACC0
- ldr r6, _0803AC7C @ =gUnknown_2024018
- 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 _0803AC88
- ldr r0, _0803AC80 @ =gBattlerPartyIndexes
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0803AC84 @ =gEnemyParty
- adds r1, r0
- adds r0, r3, 0
- bl sub_80F1720
- b _0803ACC0
- .align 2, 0
-_0803AC70: .4byte gSprites
-_0803AC74: .4byte gBattlerSpriteIds
-_0803AC78: .4byte gActiveBattler
-_0803AC7C: .4byte gUnknown_2024018
-_0803AC80: .4byte gBattlerPartyIndexes
-_0803AC84: .4byte gEnemyParty
-_0803AC88:
- ldrb r0, [r1, 0x1]
- ands r2, r0
- cmp r2, 0
- beq _0803ACC0
- 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, _0803ACC8 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- bl RecordedOpponentBufferExecCompleted
-_0803ACC0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803ACC8: .4byte 0x000027f9
- thumb_func_end sub_803AC14
-
- thumb_func_start CompleteOnHealthbarDone_4
-CompleteOnHealthbarDone_4: @ 803ACCC
- push {r4-r6,lr}
- ldr r6, _0803AD0C @ =gActiveBattler
- ldrb r0, [r6]
- ldr r5, _0803AD10 @ =gUnknown_3004FF0
- 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 _0803AD14
- ldrb r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- movs r2, 0
- bl sub_8048440
- b _0803AD18
- .align 2, 0
-_0803AD0C: .4byte gActiveBattler
-_0803AD10: .4byte gUnknown_3004FF0
-_0803AD14:
- bl RecordedOpponentBufferExecCompleted
-_0803AD18:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end CompleteOnHealthbarDone_4
-
- thumb_func_start sub_803AD20
-sub_803AD20: @ 803AD20
- push {lr}
- ldr r2, _0803AD54 @ =gSprites
- ldr r0, _0803AD58 @ =gBattlerSpriteIds
- ldr r1, _0803AD5C @ =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 _0803AD4E
- ldr r0, _0803AD60 @ =gUnknown_3004FF0
- adds r0, r3, r0
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl RecordedOpponentBufferExecCompleted
-_0803AD4E:
- pop {r0}
- bx r0
- .align 2, 0
-_0803AD54: .4byte gSprites
-_0803AD58: .4byte gBattlerSpriteIds
-_0803AD5C: .4byte gActiveBattler
-_0803AD60: .4byte gUnknown_3004FF0
- thumb_func_end sub_803AD20
-
- thumb_func_start sub_803AD64
-sub_803AD64: @ 803AD64
- push {r4-r6,lr}
- ldr r0, _0803ADC4 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r6, _0803ADC8 @ =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 _0803ADBE
- ldr r5, _0803ADCC @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0803ADD0 @ =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 EnemyShadowCallbackToSetInvisible
- ldr r1, _0803ADD4 @ =gUnknown_3004FF0
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl RecordedOpponentBufferExecCompleted
-_0803ADBE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803ADC4: .4byte gUnknown_2024018
-_0803ADC8: .4byte gActiveBattler
-_0803ADCC: .4byte gBattlerSpriteIds
-_0803ADD0: .4byte gSprites
-_0803ADD4: .4byte gUnknown_3004FF0
- thumb_func_end sub_803AD64
-
- thumb_func_start CompleteOnInactiveTextPrinter_5
-CompleteOnInactiveTextPrinter_5: @ 803ADD8
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0803ADEA
- bl RecordedOpponentBufferExecCompleted
-_0803ADEA:
- pop {r0}
- bx r0
- thumb_func_end CompleteOnInactiveTextPrinter_5
-
- thumb_func_start DoHitAnimBlinkSpriteEffect_4
-DoHitAnimBlinkSpriteEffect_4: @ 803ADF0
- push {r4,lr}
- ldr r1, _0803AE2C @ =gBattlerSpriteIds
- ldr r0, _0803AE30 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, _0803AE34 @ =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 _0803AE3C
- 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, _0803AE38 @ =gUnknown_2024005
- strb r3, [r0]
- bl RecordedOpponentBufferExecCompleted
- b _0803AE66
- .align 2, 0
-_0803AE2C: .4byte gBattlerSpriteIds
-_0803AE30: .4byte gActiveBattler
-_0803AE34: .4byte gSprites
-_0803AE38: .4byte gUnknown_2024005
-_0803AE3C:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _0803AE60
- 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]
-_0803AE60:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_0803AE66:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end DoHitAnimBlinkSpriteEffect_4
-
- thumb_func_start sub_803AE6C
-sub_803AE6C: @ 803AE6C
- push {r4,lr}
- ldr r2, _0803AEC0 @ =gSprites
- ldr r0, _0803AEC4 @ =gUnknown_3004FF0
- ldr r4, _0803AEC8 @ =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, _0803AECC @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0803AEB8
- ldr r0, _0803AED0 @ =gUnknown_2024018
- 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 _0803AEAC
- adds r0, r3, 0
- adds r1, r3, 0
- adds r2, r3, 0
- movs r3, 0x6
- bl InitAndLaunchSpecialAnimation
-_0803AEAC:
- ldr r0, _0803AED4 @ =gUnknown_3004FE0
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0803AED8 @ =sub_803AEDC
- str r0, [r1]
-_0803AEB8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803AEC0: .4byte gSprites
-_0803AEC4: .4byte gUnknown_3004FF0
-_0803AEC8: .4byte gActiveBattler
-_0803AECC: .4byte SpriteCallbackDummy
-_0803AED0: .4byte gUnknown_2024018
-_0803AED4: .4byte gUnknown_3004FE0
-_0803AED8: .4byte sub_803AEDC
- thumb_func_end sub_803AE6C
-
- thumb_func_start sub_803AEDC
-sub_803AEDC: @ 803AEDC
- push {lr}
- ldr r0, _0803AF18 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _0803AF1C @ =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 _0803AF14
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _0803AF14
- ldr r0, _0803AF20 @ =gMPlayInfo_BGM
- ldr r1, _0803AF24 @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- bl RecordedOpponentBufferExecCompleted
-_0803AF14:
- pop {r0}
- bx r0
- .align 2, 0
-_0803AF18: .4byte gUnknown_2024018
-_0803AF1C: .4byte gActiveBattler
-_0803AF20: .4byte gMPlayInfo_BGM
-_0803AF24: .4byte 0x0000ffff
- thumb_func_end sub_803AEDC
-
- thumb_func_start sub_803AF28
-sub_803AF28: @ 803AF28
- push {r4,r5,lr}
- ldr r3, _0803AFD4 @ =gUnknown_2024018
- ldr r0, [r3]
- ldr r5, _0803AFD8 @ =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 _0803AFCC
- 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, _0803AFDC @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r1, _0803AFE0 @ =gBattlerSpriteIds
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0803AFE4 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- ldr r4, _0803AFE8 @ =gUnknown_3004FF0
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _0803AFEC @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0803AFF0 @ =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, _0803AFF4 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803AFF8 @ =sub_803AE6C
- str r1, [r0]
-_0803AFCC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0803AFD4: .4byte gUnknown_2024018
-_0803AFD8: .4byte gActiveBattler
-_0803AFDC: .4byte 0x000027f9
-_0803AFE0: .4byte gBattlerSpriteIds
-_0803AFE4: .4byte gSprites
-_0803AFE8: .4byte gUnknown_3004FF0
-_0803AFEC: .4byte gBattlerPartyIndexes
-_0803AFF0: .4byte gEnemyParty
-_0803AFF4: .4byte gUnknown_3004FE0
-_0803AFF8: .4byte sub_803AE6C
- thumb_func_end sub_803AF28
-
- thumb_func_start sub_803AFFC
-sub_803AFFC: @ 803AFFC
- push {r4-r6,lr}
- ldr r6, _0803B0A0 @ =gUnknown_2024018
- ldr r0, [r6]
- ldr r5, _0803B0A4 @ =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 _0803B02E
- ldr r0, _0803B0A8 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0803B0AC @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0803B02E:
- ldr r4, _0803B0B0 @ =gSprites
- ldr r0, _0803B0B4 @ =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, _0803B0B8 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0803B098
- 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 _0803B098
- adds r0, r3, r4
- bl DestroySprite
- ldrb r4, [r5]
- ldr r1, _0803B0A8 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0803B0AC @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBankEnemyShadowSpriteCallback
- ldr r1, _0803B0BC @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803B0C0 @ =sub_803AF28
- str r1, [r0]
-_0803B098:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803B0A0: .4byte gUnknown_2024018
-_0803B0A4: .4byte gActiveBattler
-_0803B0A8: .4byte gBattlerPartyIndexes
-_0803B0AC: .4byte gEnemyParty
-_0803B0B0: .4byte gSprites
-_0803B0B4: .4byte gUnknown_3004FFC
-_0803B0B8: .4byte SpriteCallbackDummy
-_0803B0BC: .4byte gUnknown_3004FE0
-_0803B0C0: .4byte sub_803AF28
- thumb_func_end sub_803AFFC
-
- thumb_func_start CompleteOnFinishedStatusAnimation_5
-CompleteOnFinishedStatusAnimation_5: @ 803B0C4
- push {lr}
- ldr r0, _0803B0EC @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _0803B0F0 @ =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 _0803B0E6
- bl RecordedOpponentBufferExecCompleted
-_0803B0E6:
- pop {r0}
- bx r0
- .align 2, 0
-_0803B0EC: .4byte gUnknown_2024018
-_0803B0F0: .4byte gActiveBattler
- thumb_func_end CompleteOnFinishedStatusAnimation_5
-
- thumb_func_start CompleteOnFinishedBattleAnimation_5
-CompleteOnFinishedBattleAnimation_5: @ 803B0F4
- push {lr}
- ldr r0, _0803B11C @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _0803B120 @ =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 _0803B116
- bl RecordedOpponentBufferExecCompleted
-_0803B116:
- pop {r0}
- bx r0
- .align 2, 0
-_0803B11C: .4byte gUnknown_2024018
-_0803B120: .4byte gActiveBattler
- thumb_func_end CompleteOnFinishedBattleAnimation_5
-
- thumb_func_start RecordedOpponentBufferExecCompleted
-RecordedOpponentBufferExecCompleted: @ 803B124
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _0803B164 @ =gUnknown_3004FE0
- ldr r4, _0803B168 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803B16C @ =sub_803A684
- str r1, [r0]
- ldr r0, _0803B170 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803B178
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, _0803B174 @ =gUnknown_2022BC4
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0803B18A
- .align 2, 0
-_0803B164: .4byte gUnknown_3004FE0
-_0803B168: .4byte gActiveBattler
-_0803B16C: .4byte sub_803A684
-_0803B170: .4byte gBattleTypeFlags
-_0803B174: .4byte gUnknown_2022BC4
-_0803B178:
- ldr r2, _0803B194 @ =gUnknown_2023BC8
- ldr r1, _0803B198 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0803B18A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803B194: .4byte gUnknown_2023BC8
-_0803B198: .4byte gBitTable
- thumb_func_end RecordedOpponentBufferExecCompleted
-
- thumb_func_start RecordedOpponentHandleGetMonData
-RecordedOpponentHandleGetMonData: @ 803B19C
- push {r4-r6,lr}
- sub sp, 0x100
- movs r6, 0
- ldr r1, _0803B1C8 @ =gUnknown_2022BC4
- ldr r0, _0803B1CC @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _0803B1D4
- ldr r0, _0803B1D0 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- mov r1, sp
- bl CopyRecordedOpponentMonData
- adds r6, r0, 0
- b _0803B1F6
- .align 2, 0
-_0803B1C8: .4byte gUnknown_2022BC4
-_0803B1CC: .4byte gActiveBattler
-_0803B1D0: .4byte gBattlerPartyIndexes
-_0803B1D4:
- ldrb r4, [r1]
- movs r5, 0
-_0803B1D8:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0803B1EE
- lsls r0, r5, 24
- lsrs r0, 24
- mov r2, sp
- adds r1, r2, r6
- bl CopyRecordedOpponentMonData
- adds r6, r0
-_0803B1EE:
- lsrs r4, 1
- adds r5, 0x1
- cmp r5, 0x5
- ble _0803B1D8
-_0803B1F6:
- lsls r1, r6, 16
- lsrs r1, 16
- movs r0, 0x1
- mov r2, sp
- bl EmitDataTransfer
- bl RecordedOpponentBufferExecCompleted
- add sp, 0x100
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end RecordedOpponentHandleGetMonData
-
- thumb_func_start CopyRecordedOpponentMonData
-CopyRecordedOpponentMonData: @ 803B210
- 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, _0803B244 @ =gUnknown_2022BC4
- ldr r3, _0803B248 @ =gActiveBattler
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, r2, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x3B
- bls _0803B23A
- bl _0803B9A6
-_0803B23A:
- lsls r0, 2
- ldr r1, _0803B24C @ =_0803B250
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0803B244: .4byte gUnknown_2022BC4
-_0803B248: .4byte gActiveBattler
-_0803B24C: .4byte _0803B250
- .align 2, 0
-_0803B250:
- .4byte _0803B340
- .4byte _0803B564
- .4byte _0803B574
- .4byte _0803B584
- .4byte _0803B5EC
- .4byte _0803B5EC
- .4byte _0803B5EC
- .4byte _0803B5EC
- .4byte _0803B608
- .4byte _0803B644
- .4byte _0803B644
- .4byte _0803B644
- .4byte _0803B644
- .4byte _0803B9A6
- .4byte _0803B9A6
- .4byte _0803B9A6
- .4byte _0803B9A6
- .4byte _0803B660
- .4byte _0803B670
- .4byte _0803B6A0
- .4byte _0803B6B0
- .4byte _0803B6C0
- .4byte _0803B6D0
- .4byte _0803B6E0
- .4byte _0803B6F0
- .4byte _0803B700
- .4byte _0803B710
- .4byte _0803B720
- .4byte _0803B730
- .4byte _0803B740
- .4byte _0803B750
- .4byte _0803B760
- .4byte _0803B7B0
- .4byte _0803B7C0
- .4byte _0803B7D0
- .4byte _0803B7E0
- .4byte _0803B7F0
- .4byte _0803B800
- .4byte _0803B810
- .4byte _0803B820
- .4byte _0803B830
- .4byte _0803B864
- .4byte _0803B874
- .4byte _0803B884
- .4byte _0803B894
- .4byte _0803B8A4
- .4byte _0803B8B4
- .4byte _0803B8C4
- .4byte _0803B8D4
- .4byte _0803B8F4
- .4byte _0803B904
- .4byte _0803B914
- .4byte _0803B924
- .4byte _0803B934
- .4byte _0803B944
- .4byte _0803B954
- .4byte _0803B964
- .4byte _0803B974
- .4byte _0803B984
- .4byte _0803B994
-_0803B340:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _0803B554 @ =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
-_0803B38C:
- 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 _0803B38C
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _0803B554 @ =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, _0803B558 @ =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, _0803B55C @ =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, _0803B560 @ =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
-_0803B544:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0x57
- bls _0803B544
- b _0803B9A6
- .align 2, 0
-_0803B554: .4byte gEnemyParty
-_0803B558: .4byte 0xfffffc1f
-_0803B55C: .4byte 0xfff07fff
-_0803B560: .4byte 0xfffffe0f
-_0803B564:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B570 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- b _0803B8DE
- .align 2, 0
-_0803B570: .4byte gEnemyParty
-_0803B574:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B580 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xC
- b _0803B8DE
- .align 2, 0
-_0803B580: .4byte gEnemyParty
-_0803B584:
- 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, _0803B5E8 @ =gEnemyParty
- adds r4, r1, r0
- mov r8, r9
-_0803B59A:
- 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 _0803B59A
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B5E8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- mov r1, r9
- strb r0, [r1, 0xC]
- mov r2, r9
- movs r6, 0
-_0803B5D8:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0xF
- bls _0803B5D8
- b _0803B9A6
- .align 2, 0
-_0803B5E8: .4byte gEnemyParty
-_0803B5EC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B604 @ =gEnemyParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x9
- b _0803B8DE
- .align 2, 0
-_0803B604: .4byte gEnemyParty
-_0803B608:
- movs r6, 0
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r2, _0803B640 @ =gEnemyParty
- mov r8, r2
-_0803B614:
- 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 _0803B614
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B640 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- b _0803B9A6
- .align 2, 0
-_0803B640: .4byte gEnemyParty
-_0803B644:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B65C @ =gEnemyParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x8
- b _0803B99E
- .align 2, 0
-_0803B65C: .4byte gEnemyParty
-_0803B660:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B66C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1
- b _0803B67A
- .align 2, 0
-_0803B66C: .4byte gEnemyParty
-_0803B670:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B69C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x19
-_0803B67A:
- 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 _0803B9A6
- .align 2, 0
-_0803B69C: .4byte gEnemyParty
-_0803B6A0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B6AC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1A
- b _0803B99E
- .align 2, 0
-_0803B6AC: .4byte gEnemyParty
-_0803B6B0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B6BC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1B
- b _0803B99E
- .align 2, 0
-_0803B6BC: .4byte gEnemyParty
-_0803B6C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B6CC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1C
- b _0803B99E
- .align 2, 0
-_0803B6CC: .4byte gEnemyParty
-_0803B6D0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B6DC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1D
- b _0803B99E
- .align 2, 0
-_0803B6DC: .4byte gEnemyParty
-_0803B6E0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B6EC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1E
- b _0803B99E
- .align 2, 0
-_0803B6EC: .4byte gEnemyParty
-_0803B6F0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B6FC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x1F
- b _0803B99E
- .align 2, 0
-_0803B6FC: .4byte gEnemyParty
-_0803B700:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B70C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x20
- b _0803B99E
- .align 2, 0
-_0803B70C: .4byte gEnemyParty
-_0803B710:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B71C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x22
- b _0803B99E
- .align 2, 0
-_0803B71C: .4byte gEnemyParty
-_0803B720:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B72C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x23
- b _0803B99E
- .align 2, 0
-_0803B72C: .4byte gEnemyParty
-_0803B730:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B73C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x24
- b _0803B99E
- .align 2, 0
-_0803B73C: .4byte gEnemyParty
-_0803B740:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B74C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x25
- b _0803B99E
- .align 2, 0
-_0803B74C: .4byte gEnemyParty
-_0803B750:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B75C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x26
- b _0803B99E
- .align 2, 0
-_0803B75C: .4byte gEnemyParty
-_0803B760:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _0803B7AC @ =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 _0803B9A6
- .align 2, 0
-_0803B7AC: .4byte gEnemyParty
-_0803B7B0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B7BC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x27
- b _0803B99E
- .align 2, 0
-_0803B7BC: .4byte gEnemyParty
-_0803B7C0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B7CC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x28
- b _0803B99E
- .align 2, 0
-_0803B7CC: .4byte gEnemyParty
-_0803B7D0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B7DC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x29
- b _0803B99E
- .align 2, 0
-_0803B7DC: .4byte gEnemyParty
-_0803B7E0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B7EC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2A
- b _0803B99E
- .align 2, 0
-_0803B7EC: .4byte gEnemyParty
-_0803B7F0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B7FC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2B
- b _0803B99E
- .align 2, 0
-_0803B7FC: .4byte gEnemyParty
-_0803B800:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B80C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2C
- b _0803B99E
- .align 2, 0
-_0803B80C: .4byte gEnemyParty
-_0803B810:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B81C @ =gEnemyParty
- adds r0, r1
- movs r1, 0
- b _0803B83A
- .align 2, 0
-_0803B81C: .4byte gEnemyParty
-_0803B820:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B82C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x9
- b _0803B8DE
- .align 2, 0
-_0803B82C: .4byte gEnemyParty
-_0803B830:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B860 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x37
-_0803B83A:
- 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 _0803B9A6
- .align 2, 0
-_0803B860: .4byte gEnemyParty
-_0803B864:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B870 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x38
- b _0803B99E
- .align 2, 0
-_0803B870: .4byte gEnemyParty
-_0803B874:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B880 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x39
- b _0803B8DE
- .align 2, 0
-_0803B880: .4byte gEnemyParty
-_0803B884:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B890 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3A
- b _0803B8DE
- .align 2, 0
-_0803B890: .4byte gEnemyParty
-_0803B894:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B8A0 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3B
- b _0803B8DE
- .align 2, 0
-_0803B8A0: .4byte gEnemyParty
-_0803B8A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B8B0 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3C
- b _0803B8DE
- .align 2, 0
-_0803B8B0: .4byte gEnemyParty
-_0803B8B4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B8C0 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3D
- b _0803B8DE
- .align 2, 0
-_0803B8C0: .4byte gEnemyParty
-_0803B8C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B8D0 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3E
- b _0803B8DE
- .align 2, 0
-_0803B8D0: .4byte gEnemyParty
-_0803B8D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B8F0 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3F
-_0803B8DE:
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- strb r0, [r7]
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r6, 0x2
- b _0803B9A6
- .align 2, 0
-_0803B8F0: .4byte gEnemyParty
-_0803B8F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B900 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x16
- b _0803B99E
- .align 2, 0
-_0803B900: .4byte gEnemyParty
-_0803B904:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B910 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x17
- b _0803B99E
- .align 2, 0
-_0803B910: .4byte gEnemyParty
-_0803B914:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B920 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x18
- b _0803B99E
- .align 2, 0
-_0803B920: .4byte gEnemyParty
-_0803B924:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B930 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x21
- b _0803B99E
- .align 2, 0
-_0803B930: .4byte gEnemyParty
-_0803B934:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B940 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2F
- b _0803B99E
- .align 2, 0
-_0803B940: .4byte gEnemyParty
-_0803B944:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B950 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x30
- b _0803B99E
- .align 2, 0
-_0803B950: .4byte gEnemyParty
-_0803B954:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B960 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x32
- b _0803B99E
- .align 2, 0
-_0803B960: .4byte gEnemyParty
-_0803B964:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B970 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x33
- b _0803B99E
- .align 2, 0
-_0803B970: .4byte gEnemyParty
-_0803B974:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B980 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x34
- b _0803B99E
- .align 2, 0
-_0803B980: .4byte gEnemyParty
-_0803B984:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B990 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x35
- b _0803B99E
- .align 2, 0
-_0803B990: .4byte gEnemyParty
-_0803B994:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803B9B8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x36
-_0803B99E:
- bl GetMonData
- strb r0, [r7]
- movs r6, 0x1
-_0803B9A6:
- 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
-_0803B9B8: .4byte gEnemyParty
- thumb_func_end CopyRecordedOpponentMonData
-
- thumb_func_start sub_803B9BC
-sub_803B9BC: @ 803B9BC
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803B9BC
-
- thumb_func_start RecordedOpponentHandleSetMonData
-RecordedOpponentHandleSetMonData: @ 803B9C8
- push {r4,r5,lr}
- ldr r1, _0803B9EC @ =gUnknown_2022BC4
- ldr r0, _0803B9F0 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _0803B9F8
- ldr r0, _0803B9F4 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- bl SetRecordedOpponentMonData
- b _0803BA16
- .align 2, 0
-_0803B9EC: .4byte gUnknown_2022BC4
-_0803B9F0: .4byte gActiveBattler
-_0803B9F4: .4byte gBattlerPartyIndexes
-_0803B9F8:
- ldrb r4, [r1]
- movs r5, 0
-_0803B9FC:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0803BA0A
- adds r0, r5, 0
- bl SetRecordedOpponentMonData
-_0803BA0A:
- lsrs r4, 1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _0803B9FC
-_0803BA16:
- bl RecordedOpponentBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end RecordedOpponentHandleSetMonData
-
- thumb_func_start SetRecordedOpponentMonData
-SetRecordedOpponentMonData: @ 803BA20
- 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, _0803BA58 @ =gActiveBattler
- ldrb r0, [r3]
- lsls r0, 9
- ldr r2, _0803BA5C @ =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 _0803BA4E
- bl _0803C32C
-_0803BA4E:
- lsls r0, 2
- ldr r1, _0803BA60 @ =_0803BA64
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0803BA58: .4byte gActiveBattler
-_0803BA5C: .4byte gUnknown_2022BC7
-_0803BA60: .4byte _0803BA64
- .align 2, 0
-_0803BA64:
- .4byte _0803BB54
- .4byte _0803BCEC
- .4byte _0803BD08
- .4byte _0803BD24
- .4byte _0803BD78
- .4byte _0803BD78
- .4byte _0803BD78
- .4byte _0803BD78
- .4byte _0803BD98
- .4byte _0803BE00
- .4byte _0803BE00
- .4byte _0803BE00
- .4byte _0803BE00
- .4byte _0803C32C
- .4byte _0803C32C
- .4byte _0803C32C
- .4byte _0803C32C
- .4byte _0803BE28
- .4byte _0803BE44
- .4byte _0803BE60
- .4byte _0803BE7C
- .4byte _0803BE98
- .4byte _0803BEB4
- .4byte _0803BED0
- .4byte _0803BEEC
- .4byte _0803BF08
- .4byte _0803BF24
- .4byte _0803BF40
- .4byte _0803BF5C
- .4byte _0803BF78
- .4byte _0803BF94
- .4byte _0803BFB0
- .4byte _0803C024
- .4byte _0803C040
- .4byte _0803C05C
- .4byte _0803C078
- .4byte _0803C094
- .4byte _0803C0B0
- .4byte _0803C0CC
- .4byte _0803C0E8
- .4byte _0803C104
- .4byte _0803C120
- .4byte _0803C13C
- .4byte _0803C158
- .4byte _0803C174
- .4byte _0803C190
- .4byte _0803C1AC
- .4byte _0803C1C8
- .4byte _0803C1E4
- .4byte _0803C200
- .4byte _0803C21C
- .4byte _0803C238
- .4byte _0803C254
- .4byte _0803C270
- .4byte _0803C28C
- .4byte _0803C2A8
- .4byte _0803C2C4
- .4byte _0803C2E0
- .4byte _0803C2FC
- .4byte _0803C318
-_0803BB54:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _0803BCE8 @ =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
-_0803BBBA:
- 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 _0803BBBA
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _0803BCE8 @ =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 _0803C32C
- .align 2, 0
-_0803BCE8: .4byte gEnemyParty
-_0803BCEC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BD04 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0xB
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BD04: .4byte gEnemyParty
-_0803BD08:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BD20 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0xC
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BD20: .4byte gEnemyParty
-_0803BD24:
- 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, _0803BD74 @ =gEnemyParty
- adds r7, r1, r0
- adds r6, r4, 0
- adds r6, 0x8
-_0803BD3C:
- 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 _0803BD3C
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BD74 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BD74: .4byte gEnemyParty
-_0803BD78:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BD90 @ =gEnemyParty
- adds r0, r1
- ldr r3, _0803BD94 @ =gUnknown_2022BC4
- ldrb r2, [r6]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x9
- b _0803BE16
- .align 2, 0
-_0803BD90: .4byte gEnemyParty
-_0803BD94: .4byte gUnknown_2022BC4
-_0803BD98:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _0803BDFC @ =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 _0803C32C
- .align 2, 0
-_0803BDFC: .4byte gEnemyParty
-_0803BE00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BE20 @ =gEnemyParty
- adds r0, r1
- ldr r3, _0803BE24 @ =gUnknown_2022BC4
- ldrb r2, [r6]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x8
-_0803BE16:
- adds r3, 0x3
- adds r2, r3
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BE20: .4byte gEnemyParty
-_0803BE24: .4byte gUnknown_2022BC4
-_0803BE28:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BE40 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BE40: .4byte gEnemyParty
-_0803BE44:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BE5C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x19
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BE5C: .4byte gEnemyParty
-_0803BE60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BE78 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1A
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BE78: .4byte gEnemyParty
-_0803BE7C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BE94 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1B
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BE94: .4byte gEnemyParty
-_0803BE98:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BEB0 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1C
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BEB0: .4byte gEnemyParty
-_0803BEB4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BECC @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1D
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BECC: .4byte gEnemyParty
-_0803BED0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BEE8 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1E
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BEE8: .4byte gEnemyParty
-_0803BEEC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BF04 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x1F
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BF04: .4byte gEnemyParty
-_0803BF08:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BF20 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x20
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BF20: .4byte gEnemyParty
-_0803BF24:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BF3C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x22
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BF3C: .4byte gEnemyParty
-_0803BF40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BF58 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x23
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BF58: .4byte gEnemyParty
-_0803BF5C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BF74 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x24
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BF74: .4byte gEnemyParty
-_0803BF78:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BF90 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x25
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BF90: .4byte gEnemyParty
-_0803BF94:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803BFAC @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x26
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803BFAC: .4byte gEnemyParty
-_0803BFB0:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _0803C020 @ =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 _0803C0BE
- .align 2, 0
-_0803C020: .4byte gEnemyParty
-_0803C024:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C03C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x27
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C03C: .4byte gEnemyParty
-_0803C040:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C058 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x28
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C058: .4byte gEnemyParty
-_0803C05C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C074 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x29
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C074: .4byte gEnemyParty
-_0803C078:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C090 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x2A
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C090: .4byte gEnemyParty
-_0803C094:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C0AC @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x2B
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C0AC: .4byte gEnemyParty
-_0803C0B0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C0C8 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
-_0803C0BE:
- movs r1, 0x2C
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C0C8: .4byte gEnemyParty
-_0803C0CC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C0E4 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C0E4: .4byte gEnemyParty
-_0803C0E8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C100 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x9
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C100: .4byte gEnemyParty
-_0803C104:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C11C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x37
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C11C: .4byte gEnemyParty
-_0803C120:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C138 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x38
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C138: .4byte gEnemyParty
-_0803C13C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C154 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x39
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C154: .4byte gEnemyParty
-_0803C158:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C170 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3A
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C170: .4byte gEnemyParty
-_0803C174:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C18C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3B
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C18C: .4byte gEnemyParty
-_0803C190:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C1A8 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3C
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C1A8: .4byte gEnemyParty
-_0803C1AC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C1C4 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3D
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C1C4: .4byte gEnemyParty
-_0803C1C8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C1E0 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3E
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C1E0: .4byte gEnemyParty
-_0803C1E4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C1FC @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x3F
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C1FC: .4byte gEnemyParty
-_0803C200:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C218 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x16
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C218: .4byte gEnemyParty
-_0803C21C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C234 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x17
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C234: .4byte gEnemyParty
-_0803C238:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C250 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x18
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C250: .4byte gEnemyParty
-_0803C254:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C26C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x21
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C26C: .4byte gEnemyParty
-_0803C270:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C288 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x2F
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C288: .4byte gEnemyParty
-_0803C28C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C2A4 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x30
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C2A4: .4byte gEnemyParty
-_0803C2A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C2C0 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x32
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C2C0: .4byte gEnemyParty
-_0803C2C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C2DC @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x33
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C2DC: .4byte gEnemyParty
-_0803C2E0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C2F8 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x34
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C2F8: .4byte gEnemyParty
-_0803C2FC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C314 @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x35
- bl SetMonData
- b _0803C32C
- .align 2, 0
-_0803C314: .4byte gEnemyParty
-_0803C318:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0803C33C @ =gEnemyParty
- adds r0, r1
- ldrb r2, [r6]
- lsls r2, 9
- adds r2, r3
- movs r1, 0x36
- bl SetMonData
-_0803C32C:
- 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
-_0803C33C: .4byte gEnemyParty
- thumb_func_end SetRecordedOpponentMonData
-
- thumb_func_start RecordedOpponentHandleSetRawMonData
-RecordedOpponentHandleSetRawMonData: @ 803C340
- push {r4-r7,lr}
- ldr r1, _0803C3A4 @ =gBattlerPartyIndexes
- ldr r7, _0803C3A8 @ =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, _0803C3AC @ =gUnknown_2022BC4
- lsls r2, 9
- adds r0, r4, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- ldr r1, _0803C3B0 @ =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 _0803C398
- adds r6, r4, 0
- adds r2, r7, 0
- adds r4, r0, 0
-_0803C376:
- 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 _0803C376
-_0803C398:
- bl RecordedOpponentBufferExecCompleted
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803C3A4: .4byte gBattlerPartyIndexes
-_0803C3A8: .4byte gActiveBattler
-_0803C3AC: .4byte gUnknown_2022BC4
-_0803C3B0: .4byte gEnemyParty
- thumb_func_end RecordedOpponentHandleSetRawMonData
-
- thumb_func_start LinkOpponentHandleLoadPokeSprite
-LinkOpponentHandleLoadPokeSprite: @ 803C3B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r7, _0803C4DC @ =gBattlerPartyIndexes
- ldr r6, _0803C4E0 @ =gActiveBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r1, 0x64
- mov r10, r1
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- ldr r1, _0803C4E4 @ =gEnemyParty
- mov r9, r1
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r1, [r6]
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- add r0, r9
- bl BattleLoadOpponentMonSpriteGfx
- ldrb r0, [r6]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _0803C4E8 @ =gMultiuseSpriteTemplate
- mov r8, r0
- ldrb r0, [r6]
- movs r1, 0x2
- bl sub_8074480
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldrb r0, [r6]
- bl GetBankSpriteDefault_Y
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r6]
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r8
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, _0803C4EC @ =gBattlerSpriteIds
- ldrb r1, [r6]
- adds r1, r4
- strb r0, [r1]
- ldr r5, _0803C4F0 @ =gSprites
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _0803C4F4 @ =0x0000ff10
- strh r1, [r0, 0x24]
- ldrb r2, [r6]
- adds r0, r2, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x2E]
- ldrb r3, [r6]
- adds r0, r3, r4
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r2, [r6]
- adds r4, r2, r4
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _0803C4F8 @ =gBattleMonForms
- adds r2, r1
- ldrb r1, [r2]
- bl StartSpriteAnim
- ldrb r4, [r6]
- lsls r0, r4, 1
- adds r0, r7
- ldrh r0, [r0]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBankEnemyShadowSpriteCallback
- ldr r1, _0803C4FC @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803C500 @ =sub_803AC14
- str r1, [r0]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803C4DC: .4byte gBattlerPartyIndexes
-_0803C4E0: .4byte gActiveBattler
-_0803C4E4: .4byte gEnemyParty
-_0803C4E8: .4byte gMultiuseSpriteTemplate
-_0803C4EC: .4byte gBattlerSpriteIds
-_0803C4F0: .4byte gSprites
-_0803C4F4: .4byte 0x0000ff10
-_0803C4F8: .4byte gBattleMonForms
-_0803C4FC: .4byte gUnknown_3004FE0
-_0803C500: .4byte sub_803AC14
- thumb_func_end LinkOpponentHandleLoadPokeSprite
-
- thumb_func_start LinkOpponentHandleSendOutPoke
-LinkOpponentHandleSendOutPoke: @ 803C504
- push {r4,lr}
- ldr r1, _0803C53C @ =gBattlerPartyIndexes
- ldr r4, _0803C540 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r2, r0, 1
- adds r2, r1
- ldr r3, _0803C544 @ =gUnknown_2022BC4
- 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_803C550
- ldr r1, _0803C548 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803C54C @ =sub_803AFFC
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803C53C: .4byte gBattlerPartyIndexes
-_0803C540: .4byte gActiveBattler
-_0803C544: .4byte gUnknown_2022BC4
-_0803C548: .4byte gUnknown_3004FE0
-_0803C54C: .4byte sub_803AFFC
- thumb_func_end LinkOpponentHandleSendOutPoke
-
- thumb_func_start sub_803C550
-sub_803C550: @ 803C550
- 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, _0803C6AC @ =gBattlerPartyIndexes
- lsls r4, r6, 1
- adds r4, r0
- ldr r0, _0803C6B0 @ =gUnknown_2022BC4
- 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, _0803C6B4 @ =gEnemyParty
- adds r0, r5
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _0803C6B8 @ =sub_8033E3C
- bl CreateInvisibleSpriteWithCallback
- ldr r1, _0803C6BC @ =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, _0803C6C0 @ =gMultiuseSpriteTemplate
- mov r9, r0
- adds r0, r6, 0
- movs r1, 0x2
- bl sub_8074480
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- bl GetBankSpriteDefault_Y
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl sub_807685C
- 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, _0803C6C4 @ =gBattlerSpriteIds
- adds r4, r6, r4
- strb r0, [r4]
- ldr r5, _0803C6C8 @ =gSprites
- 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 r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x2E]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r6, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _0803C6CC @ =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, _0803C6D0 @ =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
-_0803C6AC: .4byte gBattlerPartyIndexes
-_0803C6B0: .4byte gUnknown_2022BC4
-_0803C6B4: .4byte gEnemyParty
-_0803C6B8: .4byte sub_8033E3C
-_0803C6BC: .4byte gUnknown_3004FFC
-_0803C6C0: .4byte gMultiuseSpriteTemplate
-_0803C6C4: .4byte gBattlerSpriteIds
-_0803C6C8: .4byte gSprites
-_0803C6CC: .4byte gBattleMonForms
-_0803C6D0: .4byte SpriteCallbackDummy
- thumb_func_end sub_803C550
-
- thumb_func_start LinkOpponentHandleReturnPokeToBall
-LinkOpponentHandleReturnPokeToBall: @ 803C6D4
- push {r4-r6,lr}
- ldr r1, _0803C708 @ =gUnknown_2022BC4
- ldr r6, _0803C70C @ =gActiveBattler
- ldrb r2, [r6]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r3, [r0]
- cmp r3, 0
- bne _0803C71C
- ldr r0, _0803C710 @ =gUnknown_2024018
- 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, _0803C714 @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803C718 @ =sub_803C76C
- str r1, [r0]
- b _0803C758
- .align 2, 0
-_0803C708: .4byte gUnknown_2022BC4
-_0803C70C: .4byte gActiveBattler
-_0803C710: .4byte gUnknown_2024018
-_0803C714: .4byte gUnknown_3004FE0
-_0803C718: .4byte sub_803C76C
-_0803C71C:
- ldr r5, _0803C760 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0803C764 @ =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 EnemyShadowCallbackToSetInvisible
- ldr r1, _0803C768 @ =gUnknown_3004FF0
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl RecordedOpponentBufferExecCompleted
-_0803C758:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803C760: .4byte gBattlerSpriteIds
-_0803C764: .4byte gSprites
-_0803C768: .4byte gUnknown_3004FF0
- thumb_func_end LinkOpponentHandleReturnPokeToBall
-
- thumb_func_start sub_803C76C
-sub_803C76C: @ 803C76C
- push {r4-r6,lr}
- ldr r6, _0803C78C @ =gUnknown_2024018
- ldr r4, [r6]
- ldr r5, _0803C790 @ =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 _0803C794
- cmp r0, 0x1
- beq _0803C7C2
- b _0803C7EA
- .align 2, 0
-_0803C78C: .4byte gUnknown_2024018
-_0803C790: .4byte gActiveBattler
-_0803C794:
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0803C7AE
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_0803C7AE:
- 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 _0803C7EA
-_0803C7C2:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0803C7EA
- strb r0, [r3, 0x4]
- ldrb r2, [r5]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x2
- bl InitAndLaunchSpecialAnimation
- ldr r1, _0803C7F0 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803C7F4 @ =sub_803AD64
- str r1, [r0]
-_0803C7EA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803C7F0: .4byte gUnknown_3004FE0
-_0803C7F4: .4byte sub_803AD64
- thumb_func_end sub_803C76C
-
- thumb_func_start sub_803C7F8
-sub_803C7F8: @ 803C7F8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _0803C884 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0803C8C0
- ldr r6, _0803C888 @ =gActiveBattler
- ldrb r0, [r6]
- bl GetBattlerPosition
- movs r1, 0x2
- ands r1, r0
- movs r7, 0xC8
- cmp r1, 0
- beq _0803C820
- movs r7, 0x98
-_0803C820:
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- ldr r5, _0803C88C @ =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- movs r4, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _0803C866
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x1
- beq _0803C866
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1]
- ands r4, r0
- cmp r4, 0x3
- bne _0803C8A0
-_0803C866:
- ldr r4, _0803C88C @ =gLinkPlayers
- ldr r0, _0803C888 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- beq _0803C894
- ldr r0, _0803C890 @ =gFacilityClassToPicIndex
- adds r0, 0x3D
- b _0803C990
- .align 2, 0
-_0803C884: .4byte gBattleTypeFlags
-_0803C888: .4byte gActiveBattler
-_0803C88C: .4byte gLinkPlayers
-_0803C890: .4byte gFacilityClassToPicIndex
-_0803C894:
- ldr r0, _0803C89C @ =gFacilityClassToPicIndex
- adds r0, 0x3A
- b _0803C990
- .align 2, 0
-_0803C89C: .4byte gFacilityClassToPicIndex
-_0803C8A0:
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- beq _0803C98C
- ldr r0, _0803C8BC @ =gFacilityClassToPicIndex
- adds r0, 0x87
- b _0803C990
- .align 2, 0
-_0803C8BC: .4byte gFacilityClassToPicIndex
-_0803C8C0:
- movs r7, 0xB0
- ldr r0, _0803C8D8 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0xC0
- lsls r0, 4
- cmp r1, r0
- bne _0803C8DC
- bl sub_80447AC
- lsls r0, 16
- lsrs r0, 16
- b _0803C992
- .align 2, 0
-_0803C8D8: .4byte gTrainerBattleOpponent_A
-_0803C8DC:
- bl GetMultiplayerId
- ldr r6, _0803C954 @ =gLinkPlayers
- movs r5, 0x1
- eors r0, r5
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r6
- movs r4, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _0803C930
- bl GetMultiplayerId
- eors r0, r5
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r6
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x1
- beq _0803C930
- bl GetMultiplayerId
- eors r0, r5
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r6
- ldrh r0, [r1]
- ands r4, r0
- cmp r4, 0x3
- bne _0803C968
-_0803C930:
- ldr r4, _0803C954 @ =gLinkPlayers
- bl GetMultiplayerId
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- beq _0803C95C
- ldr r0, _0803C958 @ =gFacilityClassToPicIndex
- adds r0, 0x3D
- b _0803C990
- .align 2, 0
-_0803C954: .4byte gLinkPlayers
-_0803C958: .4byte gFacilityClassToPicIndex
-_0803C95C:
- ldr r0, _0803C964 @ =gFacilityClassToPicIndex
- adds r0, 0x3A
- b _0803C990
- .align 2, 0
-_0803C964: .4byte gFacilityClassToPicIndex
-_0803C968:
- bl GetMultiplayerId
- eors r0, r5
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- beq _0803C98C
- ldr r0, _0803C988 @ =gFacilityClassToPicIndex
- adds r0, 0x87
- b _0803C990
- .align 2, 0
-_0803C988: .4byte gFacilityClassToPicIndex
-_0803C98C:
- ldr r0, _0803CAC8 @ =gFacilityClassToPicIndex
- adds r0, 0x86
-_0803C990:
- ldrb r0, [r0]
-_0803C992:
- mov r9, r0
- ldr r0, _0803CACC @ =gActiveBattler
- mov r8, r0
- ldrb r1, [r0]
- mov r0, r9
- bl sub_80346C4
- 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, _0803CAD0 @ =gMultiuseSpriteTemplate
- adds r6, r7, 0
- ldr r1, _0803CAD4 @ =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 sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r5, _0803CAD8 @ =gBattlerSpriteIds
- mov r2, r8
- ldrb r1, [r2]
- adds r1, r5
- strb r0, [r1]
- ldr r4, _0803CADC @ =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, _0803CAE0 @ =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, _0803CAE4 @ =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, _0803CAE8 @ =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, _0803CAEC @ =0x000003ff
- ands r2, r0
- ldrh r3, [r1, 0x4]
- ldr r0, _0803CAF0 @ =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, _0803CAF4 @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _0803CAF8 @ =gUnknown_3004FE0
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803CAFC @ =sub_803A6D4
- str r1, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803CAC8: .4byte gFacilityClassToPicIndex
-_0803CACC: .4byte gActiveBattler
-_0803CAD0: .4byte gMultiuseSpriteTemplate
-_0803CAD4: .4byte gUnknown_823932C
-_0803CAD8: .4byte gBattlerSpriteIds
-_0803CADC: .4byte gSprites
-_0803CAE0: .4byte 0x0000ff10
-_0803CAE4: .4byte gTrainerFrontPicPaletteTable
-_0803CAE8: .4byte gTrainerFrontPicTable
-_0803CAEC: .4byte 0x000003ff
-_0803CAF0: .4byte 0xfffffc00
-_0803CAF4: .4byte sub_8033EEC
-_0803CAF8: .4byte gUnknown_3004FE0
-_0803CAFC: .4byte sub_803A6D4
- thumb_func_end sub_803C7F8
-
- thumb_func_start sub_803CB00
-sub_803CB00: @ 803CB00
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CB00
-
- thumb_func_start sub_803CB0C
-sub_803CB0C: @ 803CB0C
- push {r4-r6,lr}
- ldr r6, _0803CB9C @ =gBattlerSpriteIds
- ldr r4, _0803CBA0 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _0803CBA4 @ =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, _0803CBA8 @ =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, _0803CBAC @ =SpriteCallbackDummy
- bl StoreSpriteCallbackInData6
- ldr r1, _0803CBB0 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803CBB4 @ =sub_803A70C
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803CB9C: .4byte gBattlerSpriteIds
-_0803CBA0: .4byte gActiveBattler
-_0803CBA4: .4byte gSprites
-_0803CBA8: .4byte sub_8075590
-_0803CBAC: .4byte SpriteCallbackDummy
-_0803CBB0: .4byte gUnknown_3004FE0
-_0803CBB4: .4byte sub_803A70C
- thumb_func_end sub_803CB0C
-
- thumb_func_start sub_803CBB8
-sub_803CBB8: @ 803CBB8
- push {r4-r6,lr}
- ldr r6, _0803CC04 @ =gUnknown_2024018
- ldr r4, [r6]
- ldr r5, _0803CC08 @ =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 _0803CC0C
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0803CBEC
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_0803CBEC:
- 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 _0803CC48
- .align 2, 0
-_0803CC04: .4byte gUnknown_2024018
-_0803CC08: .4byte gActiveBattler
-_0803CC0C:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0803CC48
- strb r0, [r3, 0x4]
- movs r0, 0x10
- movs r1, 0x3F
- bl PlaySE12WithPanning
- ldr r2, _0803CC50 @ =gSprites
- ldr r1, _0803CC54 @ =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, _0803CC58 @ =sub_8011EA0
- str r1, [r0]
- ldr r1, _0803CC5C @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803CC60 @ =sub_803AD20
- str r1, [r0]
-_0803CC48:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803CC50: .4byte gSprites
-_0803CC54: .4byte gBattlerSpriteIds
-_0803CC58: .4byte sub_8011EA0
-_0803CC5C: .4byte gUnknown_3004FE0
-_0803CC60: .4byte sub_803AD20
- thumb_func_end sub_803CBB8
-
- thumb_func_start sub_803CC64
-sub_803CC64: @ 803CC64
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CC64
-
- thumb_func_start sub_803CC70
-sub_803CC70: @ 803CC70
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CC70
-
- thumb_func_start sub_803CC7C
-sub_803CC7C: @ 803CC7C
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CC7C
-
- thumb_func_start sub_803CC88
-sub_803CC88: @ 803CC88
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CC88
-
- thumb_func_start RecordedOpponentHandleMoveAnimation
-RecordedOpponentHandleMoveAnimation: @ 803CC94
- push {r4-r6,lr}
- ldr r6, _0803CD78 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- beq _0803CCA6
- b _0803CDBA
-_0803CCA6:
- ldr r0, _0803CD7C @ =gUnknown_2022BC4
- 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, _0803CD80 @ =gAnimMoveTurn
- mov r1, r12
- adds r1, 0x3
- adds r2, r1
- ldrb r1, [r2]
- strb r1, [r5]
- ldr r4, _0803CD84 @ =gUnknown_2037EEC
- 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, _0803CD88 @ =gUnknown_2037EE8
- 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, _0803CD8C @ =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, _0803CD90 @ =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, _0803CD94 @ =gAnimDisableStructPtr
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x10
- adds r2, r1
- str r2, [r3]
- ldr r3, _0803CD98 @ =gUnknown_2024008
- 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 _0803CD9C
- bl RecordedOpponentBufferExecCompleted
- b _0803CDBA
- .align 2, 0
-_0803CD78: .4byte gActiveBattler
-_0803CD7C: .4byte gUnknown_2022BC4
-_0803CD80: .4byte gAnimMoveTurn
-_0803CD84: .4byte gUnknown_2037EEC
-_0803CD88: .4byte gUnknown_2037EE8
-_0803CD8C: .4byte gUnknown_2037EFE
-_0803CD90: .4byte gUnknown_2037F00
-_0803CD94: .4byte gAnimDisableStructPtr
-_0803CD98: .4byte gUnknown_2024008
-_0803CD9C:
- ldr r0, _0803CDC0 @ =gUnknown_2024018
- 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, _0803CDC4 @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803CDC8 @ =RecordedOpponentDoMoveAnimation
- str r1, [r0]
-_0803CDBA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803CDC0: .4byte gUnknown_2024018
-_0803CDC4: .4byte gUnknown_3004FE0
-_0803CDC8: .4byte RecordedOpponentDoMoveAnimation
- thumb_func_end RecordedOpponentHandleMoveAnimation
-
- thumb_func_start RecordedOpponentDoMoveAnimation
-RecordedOpponentDoMoveAnimation: @ 803CDCC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, _0803CE18 @ =gUnknown_2022BC4
- ldr r6, _0803CE1C @ =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, _0803CE20 @ =gUnknown_2024018
- 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 _0803CE64
- cmp r2, 0x1
- bgt _0803CE24
- cmp r2, 0
- beq _0803CE2E
- b _0803CF40
- .align 2, 0
-_0803CE18: .4byte gUnknown_2022BC4
-_0803CE1C: .4byte gActiveBattler
-_0803CE20: .4byte gUnknown_2024018
-_0803CE24:
- cmp r2, 0x2
- beq _0803CE8E
- cmp r2, 0x3
- beq _0803CF04
- b _0803CF40
-_0803CE2E:
- ldr r1, [r5]
- lsls r0, r3, 2
- adds r1, r0, r1
- ldrb r2, [r1]
- movs r0, 0xC
- ands r0, r2
- cmp r0, 0x4
- bne _0803CE50
- 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
-_0803CE50:
- 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 _0803CF40
-_0803CE64:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0803CF40
- 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 _0803CF40
-_0803CE8E:
- ldr r0, _0803CEF4 @ =gUnknown_2037EDC
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _0803CEF8 @ =gUnknown_2037EE1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0803CF40
- 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 _0803CEDC
- mov r0, r8
- cmp r0, 0x1
- bhi _0803CEDC
- 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]
-_0803CEDC:
- ldr r0, _0803CEFC @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _0803CF00 @ =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 _0803CF40
- .align 2, 0
-_0803CEF4: .4byte gUnknown_2037EDC
-_0803CEF8: .4byte gUnknown_2037EE1
-_0803CEFC: .4byte gUnknown_2024018
-_0803CF00: .4byte gActiveBattler
-_0803CF04:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0803CF40
- 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 RecordedOpponentBufferExecCompleted
-_0803CF40:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end RecordedOpponentDoMoveAnimation
-
- thumb_func_start sub_803CF50
-sub_803CF50: @ 803CF50
- push {r4,lr}
- ldr r0, _0803CF84 @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0803CF88 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _0803CF8C @ =gActiveBattler
- ldrb r4, [r0]
- lsls r4, 9
- ldr r0, _0803CF90 @ =gUnknown_2022BC6
- adds r4, r0
- ldrh r0, [r4]
- bl sub_80D7274
- ldrh r0, [r4]
- bl sub_80D89B0
- lsls r0, 24
- cmp r0, 0
- beq _0803CF98
- ldr r0, _0803CF94 @ =gDisplayedStringBattle
- movs r1, 0x40
- bl sub_80D87BC
- b _0803CFA0
- .align 2, 0
-_0803CF84: .4byte gBattle_BG0_X
-_0803CF88: .4byte gBattle_BG0_Y
-_0803CF8C: .4byte gActiveBattler
-_0803CF90: .4byte gUnknown_2022BC6
-_0803CF94: .4byte gDisplayedStringBattle
-_0803CF98:
- ldr r0, _0803CFB4 @ =gDisplayedStringBattle
- movs r1, 0
- bl sub_80D87BC
-_0803CFA0:
- ldr r1, _0803CFB8 @ =gUnknown_3004FE0
- ldr r0, _0803CFBC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803CFC0 @ =CompleteOnInactiveTextPrinter_5
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803CFB4: .4byte gDisplayedStringBattle
-_0803CFB8: .4byte gUnknown_3004FE0
-_0803CFBC: .4byte gActiveBattler
-_0803CFC0: .4byte CompleteOnInactiveTextPrinter_5
- thumb_func_end sub_803CF50
-
- thumb_func_start sub_803CFC4
-sub_803CFC4: @ 803CFC4
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CFC4
-
- thumb_func_start sub_803CFD0
-sub_803CFD0: @ 803CFD0
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CFD0
-
- thumb_func_start sub_803CFDC
-sub_803CFDC: @ 803CFDC
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CFDC
-
- thumb_func_start sub_803CFE8
-sub_803CFE8: @ 803CFE8
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CFE8
-
- thumb_func_start sub_803CFF4
-sub_803CFF4: @ 803CFF4
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803CFF4
-
- thumb_func_start sub_803D000
-sub_803D000: @ 803D000
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D000
-
- thumb_func_start sub_803D00C
-sub_803D00C: @ 803D00C
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D00C
-
- thumb_func_start sub_803D018
-sub_803D018: @ 803D018
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r0, 0
- bl LoadBattleBarGfx
- ldr r3, _0803D090 @ =gUnknown_2022BC4
- ldr r0, _0803D094 @ =gActiveBattler
- mov r9, r0
- ldrb r4, [r0]
- lsls r2, r4, 9
- adds r0, r3, 0x2
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r3, 0x3
- adds r2, r3
- ldrb r0, [r2]
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- asrs r7, r1, 16
- ldr r0, _0803D098 @ =0x00007fff
- cmp r7, r0
- beq _0803D0A8
- ldr r6, _0803D09C @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r6
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _0803D0A0 @ =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, _0803D0A4 @ =gUnknown_3004FF0
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- mov r2, r8
- bl SetBattleBarStruct
- b _0803D0D2
- .align 2, 0
-_0803D090: .4byte gUnknown_2022BC4
-_0803D094: .4byte gActiveBattler
-_0803D098: .4byte 0x00007fff
-_0803D09C: .4byte gBattlerPartyIndexes
-_0803D0A0: .4byte gEnemyParty
-_0803D0A4: .4byte gUnknown_3004FF0
-_0803D0A8:
- ldr r1, _0803D0F0 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0803D0F4 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, _0803D0F8 @ =gUnknown_3004FF0
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- movs r3, 0
- bl SetBattleBarStruct
-_0803D0D2:
- ldr r1, _0803D0FC @ =gUnknown_3004FE0
- ldr r0, _0803D100 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803D104 @ =CompleteOnHealthbarDone_4
- 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
-_0803D0F0: .4byte gBattlerPartyIndexes
-_0803D0F4: .4byte gEnemyParty
-_0803D0F8: .4byte gUnknown_3004FF0
-_0803D0FC: .4byte gUnknown_3004FE0
-_0803D100: .4byte gActiveBattler
-_0803D104: .4byte CompleteOnHealthbarDone_4
- thumb_func_end sub_803D018
-
- thumb_func_start sub_803D108
-sub_803D108: @ 803D108
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D108
-
- thumb_func_start sub_803D114
-sub_803D114: @ 803D114
- push {r4,lr}
- ldr r4, _0803D170 @ =gActiveBattler
- ldrb r0, [r4]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0803D168
- ldr r0, _0803D174 @ =gUnknown_3004FF0
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _0803D178 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0803D17C @ =gEnemyParty
- adds r1, r2
- movs r2, 0x9
- bl UpdateHealthboxAttribute
- ldrb r2, [r4]
- ldr r0, _0803D180 @ =gUnknown_2024018
- 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, _0803D184 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803D188 @ =CompleteOnFinishedStatusAnimation_5
- str r1, [r0]
-_0803D168:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D170: .4byte gActiveBattler
-_0803D174: .4byte gUnknown_3004FF0
-_0803D178: .4byte gBattlerPartyIndexes
-_0803D17C: .4byte gEnemyParty
-_0803D180: .4byte gUnknown_2024018
-_0803D184: .4byte gUnknown_3004FE0
-_0803D188: .4byte CompleteOnFinishedStatusAnimation_5
- thumb_func_end sub_803D114
-
- thumb_func_start sub_803D18C
-sub_803D18C: @ 803D18C
- push {r4,r5,lr}
- ldr r5, _0803D1E4 @ =gActiveBattler
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0803D1DC
- ldr r4, _0803D1E8 @ =gUnknown_2022BC4
- 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, _0803D1EC @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803D1F0 @ =CompleteOnFinishedStatusAnimation_5
- str r1, [r0]
-_0803D1DC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D1E4: .4byte gActiveBattler
-_0803D1E8: .4byte gUnknown_2022BC4
-_0803D1EC: .4byte gUnknown_3004FE0
-_0803D1F0: .4byte CompleteOnFinishedStatusAnimation_5
- thumb_func_end sub_803D18C
-
- thumb_func_start sub_803D1F4
-sub_803D1F4: @ 803D1F4
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D1F4
-
- thumb_func_start sub_803D200
-sub_803D200: @ 803D200
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D200
-
- thumb_func_start sub_803D20C
-sub_803D20C: @ 803D20C
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D20C
-
- thumb_func_start sub_803D218
-sub_803D218: @ 803D218
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D218
-
- thumb_func_start sub_803D224
-sub_803D224: @ 803D224
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D224
-
- thumb_func_start sub_803D230
-sub_803D230: @ 803D230
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D230
-
- thumb_func_start sub_803D23C
-sub_803D23C: @ 803D23C
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D23C
-
- thumb_func_start sub_803D248
-sub_803D248: @ 803D248
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D248
-
- thumb_func_start sub_803D254
-sub_803D254: @ 803D254
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D254
-
- thumb_func_start RecordedOpponentHandleCmd37
-RecordedOpponentHandleCmd37: @ 803D260
- push {lr}
- ldr r2, _0803D278 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x80
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803D278: .4byte gUnknown_2022870
- thumb_func_end RecordedOpponentHandleCmd37
-
- thumb_func_start RecordedOpponentHandleCmd38
-RecordedOpponentHandleCmd38: @ 803D27C
- push {lr}
- ldr r3, _0803D2A8 @ =gUnknown_2022870
- ldr r1, _0803D2AC @ =gUnknown_2022BC4
- ldr r0, _0803D2B0 @ =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 RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803D2A8: .4byte gUnknown_2022870
-_0803D2AC: .4byte gUnknown_2022BC4
-_0803D2B0: .4byte gActiveBattler
- thumb_func_end RecordedOpponentHandleCmd38
-
- thumb_func_start RecordedOpponentHandleCmd39
-RecordedOpponentHandleCmd39: @ 803D2B4
- push {lr}
- ldr r2, _0803D2C8 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803D2C8: .4byte gUnknown_2022870
- thumb_func_end RecordedOpponentHandleCmd39
-
- thumb_func_start RecordedOpponentHandleCmd40
-RecordedOpponentHandleCmd40: @ 803D2CC
- push {lr}
- ldr r3, _0803D2F0 @ =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 RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803D2F0: .4byte gUnknown_2022870
- thumb_func_end RecordedOpponentHandleCmd40
-
- thumb_func_start RecordedOpponentHandleHitAnimation
-RecordedOpponentHandleHitAnimation: @ 803D2F4
- push {r4,lr}
- ldr r3, _0803D31C @ =gSprites
- ldr r2, _0803D320 @ =gBattlerSpriteIds
- ldr r4, _0803D324 @ =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 _0803D328
- bl RecordedOpponentBufferExecCompleted
- b _0803D352
- .align 2, 0
-_0803D31C: .4byte gSprites
-_0803D320: .4byte gBattlerSpriteIds
-_0803D324: .4byte gActiveBattler
-_0803D328:
- ldr r1, _0803D358 @ =gUnknown_2024005
- 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, _0803D35C @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803D360 @ =DoHitAnimBlinkSpriteEffect_4
- str r1, [r0]
-_0803D352:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D358: .4byte gUnknown_2024005
-_0803D35C: .4byte gUnknown_3004FE0
-_0803D360: .4byte DoHitAnimBlinkSpriteEffect_4
- thumb_func_end RecordedOpponentHandleHitAnimation
-
- thumb_func_start sub_803D364
-sub_803D364: @ 803D364
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D364
-
- thumb_func_start RecordedOpponentHandlePlaySE
-RecordedOpponentHandlePlaySE: @ 803D370
- push {r4,lr}
- ldr r4, _0803D3AC @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _0803D384
- movs r3, 0xC0
-_0803D384:
- ldr r2, _0803D3B0 @ =gUnknown_2022BC4
- 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 RecordedOpponentBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D3AC: .4byte gActiveBattler
-_0803D3B0: .4byte gUnknown_2022BC4
- thumb_func_end RecordedOpponentHandlePlaySE
-
- thumb_func_start LinkOpponentHandlecmd44
-LinkOpponentHandlecmd44: @ 803D3B4
- push {lr}
- ldr r2, _0803D3DC @ =gUnknown_2022BC4
- ldr r0, _0803D3E0 @ =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 RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803D3DC: .4byte gUnknown_2022BC4
-_0803D3E0: .4byte gActiveBattler
- thumb_func_end LinkOpponentHandlecmd44
-
- thumb_func_start RecordedOpponentHandleFaintingCry
-RecordedOpponentHandleFaintingCry: @ 803D3E4
- push {lr}
- ldr r1, _0803D414 @ =gBattlerPartyIndexes
- ldr r0, _0803D418 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0803D41C @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- movs r2, 0x5
- bl PlayCry3
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803D414: .4byte gBattlerPartyIndexes
-_0803D418: .4byte gActiveBattler
-_0803D41C: .4byte gEnemyParty
- thumb_func_end RecordedOpponentHandleFaintingCry
-
- thumb_func_start RecordedOpponentHandleIntroSlide
-RecordedOpponentHandleIntroSlide: @ 803D420
- push {lr}
- ldr r1, _0803D448 @ =gUnknown_2022BC4
- ldr r0, _0803D44C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80BC3A0
- ldr r2, _0803D450 @ =gUnknown_2023F4C
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803D448: .4byte gUnknown_2022BC4
-_0803D44C: .4byte gActiveBattler
-_0803D450: .4byte gUnknown_2023F4C
- thumb_func_end RecordedOpponentHandleIntroSlide
-
- thumb_func_start sub_803D454
-sub_803D454: @ 803D454
- push {r4-r6,lr}
- ldr r5, _0803D534 @ =gBattlerSpriteIds
- ldr r6, _0803D538 @ =gActiveBattler
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0803D53C @ =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, _0803D540 @ =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, _0803D544 @ =sub_803D648
- bl StoreSpriteCallbackInData6
- ldr r0, _0803D548 @ =sub_803D564
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _0803D54C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- ldrb r0, [r6]
- strh r0, [r1, 0x8]
- ldr r3, _0803D550 @ =gUnknown_2024018
- 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 _0803D516
- ldr r0, _0803D554 @ =gUnknown_2024000
- 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
- str r1, [r0]
-_0803D516:
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r0, [r2, 0x9]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _0803D55C @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803D560 @ =nullsub_19
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D534: .4byte gBattlerSpriteIds
-_0803D538: .4byte gActiveBattler
-_0803D53C: .4byte gSprites
-_0803D540: .4byte sub_8075590
-_0803D544: .4byte sub_803D648
-_0803D548: .4byte sub_803D564
-_0803D54C: .4byte gTasks
-_0803D550: .4byte gUnknown_2024018
-_0803D554: .4byte gUnknown_2024000
-_0803D558: .4byte sub_80491B0
-_0803D55C: .4byte gUnknown_3004FE0
-_0803D560: .4byte nullsub_19
- thumb_func_end sub_803D454
-
- thumb_func_start sub_803D564
-sub_803D564: @ 803D564
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r7, _0803D5BC @ =gActiveBattler
- ldrb r0, [r7]
- mov r9, r0
- ldr r1, _0803D5C0 @ =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 sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0803D59E
- ldr r0, _0803D5C4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0803D5D0
-_0803D59E:
- ldr r0, _0803D5C8 @ =gUnknown_2022BC4
- ldrb r1, [r7]
- lsls r2, r1, 9
- adds r0, 0x1
- adds r2, r0
- ldr r0, _0803D5CC @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- strb r0, [r2]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_803C550
- b _0803D610
- .align 2, 0
-_0803D5BC: .4byte gActiveBattler
-_0803D5C0: .4byte gTasks
-_0803D5C4: .4byte gBattleTypeFlags
-_0803D5C8: .4byte gUnknown_2022BC4
-_0803D5CC: .4byte gBattlerPartyIndexes
-_0803D5D0:
- ldr r4, _0803D634 @ =gUnknown_2022BC4
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r4, 0x1
- adds r1, r4
- ldr r6, _0803D638 @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_803C550
- 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_803C550
- ldrb r0, [r7]
- eors r0, r5
- strb r0, [r7]
-_0803D610:
- ldr r1, _0803D63C @ =gUnknown_3004FE0
- ldr r2, _0803D640 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803D644 @ =sub_803A9CC
- 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
-_0803D634: .4byte gUnknown_2022BC4
-_0803D638: .4byte gBattlerPartyIndexes
-_0803D63C: .4byte gUnknown_3004FE0
-_0803D640: .4byte gActiveBattler
-_0803D644: .4byte sub_803A9CC
- thumb_func_end sub_803D564
-
- thumb_func_start sub_803D648
-sub_803D648: @ 803D648
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x6]
- bl sub_803477C
- ldrh r0, [r4, 0x38]
- ldr r1, _0803D674 @ =0x000003ff
- ands r1, r0
- ldrh r2, [r4, 0x4]
- ldr r0, _0803D678 @ =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
-_0803D674: .4byte 0x000003ff
-_0803D678: .4byte 0xfffffc00
- thumb_func_end sub_803D648
-
- thumb_func_start RecordedOpponentHandleDrawPartyStatusSummary
-RecordedOpponentHandleDrawPartyStatusSummary: @ 803D67C
- push {r4-r7,lr}
- ldr r1, _0803D6A4 @ =gUnknown_2022BC4
- ldr r0, _0803D6A8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0803D6AC
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0803D6AC
- bl RecordedOpponentBufferExecCompleted
- b _0803D776
- .align 2, 0
-_0803D6A4: .4byte gUnknown_2022BC4
-_0803D6A8: .4byte gActiveBattler
-_0803D6AC:
- ldr r4, _0803D704 @ =gUnknown_2024018
- ldr r0, [r4]
- ldr r3, _0803D708 @ =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, _0803D70C @ =gUnknown_2022BC4
- ldrb r2, [r3]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r0, r1
- ldrb r0, [r0]
- adds r7, r3, 0
- cmp r0, 0
- beq _0803D718
- 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 _0803D710
- 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 _0803D776
- .align 2, 0
-_0803D704: .4byte gUnknown_2024018
-_0803D708: .4byte gActiveBattler
-_0803D70C: .4byte gUnknown_2022BC4
-_0803D710:
- movs r0, 0x3F
- negs r0, r0
- ands r0, r2
- strb r0, [r3, 0x1]
-_0803D718:
- adds r5, r7, 0
- ldrb r0, [r5]
- lsls r3, r0, 9
- ldr r4, _0803D77C @ =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, _0803D780 @ =gUnknown_2024000
- ldrb r1, [r5]
- adds r1, r2
- movs r3, 0
- strb r0, [r1]
- ldr r6, _0803D784 @ =gUnknown_2024018
- 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 _0803D76A
- 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]
-_0803D76A:
- ldr r0, _0803D788 @ =gUnknown_3004FE0
- ldrb r1, [r7]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0803D78C @ =sub_803D790
- str r0, [r1]
-_0803D776:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D77C: .4byte gUnknown_2022BC8
-_0803D780: .4byte gUnknown_2024000
-_0803D784: .4byte gUnknown_2024018
-_0803D788: .4byte gUnknown_3004FE0
-_0803D78C: .4byte sub_803D790
- thumb_func_end RecordedOpponentHandleDrawPartyStatusSummary
-
- thumb_func_start sub_803D790
-sub_803D790: @ 803D790
- push {r4,lr}
- ldr r4, _0803D7D0 @ =gUnknown_2024018
- ldr r0, [r4]
- ldr r3, _0803D7D4 @ =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 _0803D7C8
- 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 RecordedOpponentBufferExecCompleted
-_0803D7C8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D7D0: .4byte gUnknown_2024018
-_0803D7D4: .4byte gActiveBattler
- thumb_func_end sub_803D790
-
- thumb_func_start RecordedOpponentHandleCmd49
-RecordedOpponentHandleCmd49: @ 803D7D8
- push {lr}
- ldr r0, _0803D814 @ =gUnknown_2024018
- ldr r1, [r0]
- ldr r0, _0803D818 @ =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 _0803D80A
- ldr r2, _0803D81C @ =gTasks
- ldr r0, _0803D820 @ =gUnknown_2024000
- 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
- str r1, [r0]
-_0803D80A:
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803D814: .4byte gUnknown_2024018
-_0803D818: .4byte gActiveBattler
-_0803D81C: .4byte gTasks
-_0803D820: .4byte gUnknown_2024000
-_0803D824: .4byte sub_80491B0
- thumb_func_end RecordedOpponentHandleCmd49
-
- thumb_func_start sub_803D828
-sub_803D828: @ 803D828
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D828
-
- thumb_func_start RecordedOpponentHandleSpriteInvisibility
-RecordedOpponentHandleSpriteInvisibility: @ 803D834
- push {r4,lr}
- ldr r4, _0803D884 @ =gActiveBattler
- ldrb r0, [r4]
- bl sub_8075224
- lsls r0, 24
- cmp r0, 0
- beq _0803D87A
- ldr r3, _0803D888 @ =gSprites
- ldr r0, _0803D88C @ =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, _0803D890 @ =gUnknown_2022BC4
- 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
-_0803D87A:
- bl RecordedOpponentBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D884: .4byte gActiveBattler
-_0803D888: .4byte gSprites
-_0803D88C: .4byte gBattlerSpriteIds
-_0803D890: .4byte gUnknown_2022BC4
- thumb_func_end RecordedOpponentHandleSpriteInvisibility
-
- thumb_func_start RecordedOpponentHandleBattleAnimation
-RecordedOpponentHandleBattleAnimation: @ 803D894
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, _0803D8D8 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0803D8EC
- ldr r5, _0803D8DC @ =gUnknown_2022BC4
- 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 _0803D8E0
- bl RecordedOpponentBufferExecCompleted
- b _0803D8EC
- .align 2, 0
-_0803D8D8: .4byte gActiveBattler
-_0803D8DC: .4byte gUnknown_2022BC4
-_0803D8E0:
- ldr r0, _0803D8F4 @ =gUnknown_3004FE0
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0803D8F8 @ =CompleteOnFinishedBattleAnimation_5
- str r0, [r1]
-_0803D8EC:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D8F4: .4byte gUnknown_3004FE0
-_0803D8F8: .4byte CompleteOnFinishedBattleAnimation_5
- thumb_func_end RecordedOpponentHandleBattleAnimation
-
- thumb_func_start sub_803D8FC
-sub_803D8FC: @ 803D8FC
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D8FC
-
- thumb_func_start sub_803D908
-sub_803D908: @ 803D908
- push {lr}
- bl RecordedOpponentBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_803D908
-
- thumb_func_start RecordedOpponentHandleCmd55
-RecordedOpponentHandleCmd55: @ 803D914
- push {lr}
- ldr r1, _0803D930 @ =gUnknown_2022BC4
- ldr r0, _0803D934 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r2, [r0]
- cmp r2, 0x3
- bne _0803D93C
- ldr r0, _0803D938 @ =gBattleOutcome
- strb r2, [r0]
- b _0803D944
- .align 2, 0
-_0803D930: .4byte gUnknown_2022BC4
-_0803D934: .4byte gActiveBattler
-_0803D938: .4byte gBattleOutcome
-_0803D93C:
- ldr r0, _0803D968 @ =gBattleOutcome
- movs r1, 0x3
- eors r1, r2
- strb r1, [r0]
-_0803D944:
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl RecordedOpponentBufferExecCompleted
- ldr r1, _0803D96C @ =gUnknown_3004FE0
- ldr r0, _0803D970 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803D974 @ =sub_802F6A8
- str r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_0803D968: .4byte gBattleOutcome
-_0803D96C: .4byte gUnknown_3004FE0
-_0803D970: .4byte gActiveBattler
-_0803D974: .4byte sub_802F6A8
- thumb_func_end RecordedOpponentHandleCmd55
-
- thumb_func_start nullsub_20
-nullsub_20: @ 803D978
- bx lr
- thumb_func_end nullsub_20
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_link_partner.s b/asm/battle_controller_link_partner.s
deleted file mode 100644
index 8da94bdce..000000000
--- a/asm/battle_controller_link_partner.s
+++ /dev/null
@@ -1,5929 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_77
-nullsub_77: @ 80D4200
- bx lr
- thumb_func_end nullsub_77
-
- thumb_func_start sub_80D4204
-sub_80D4204: @ 80D4204
- ldr r1, _080D4214 @ =gUnknown_3004FE0
- ldr r0, _080D4218 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D421C @ =LinkPartnerBufferRunCommand
- str r1, [r0]
- bx lr
- .align 2, 0
-_080D4214: .4byte gUnknown_3004FE0
-_080D4218: .4byte gActiveBattler
-_080D421C: .4byte LinkPartnerBufferRunCommand
- thumb_func_end sub_80D4204
-
- thumb_func_start LinkPartnerBufferRunCommand
-LinkPartnerBufferRunCommand: @ 80D4220
- push {lr}
- ldr r2, _080D4254 @ =gUnknown_2023BC8
- ldr r1, _080D4258 @ =gBitTable
- ldr r0, _080D425C @ =gActiveBattler
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _080D426C
- ldr r0, _080D4260 @ =gUnknown_2022BC4
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _080D4268
- ldr r0, _080D4264 @ =gUnknown_83FB134
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _080D426C
- .align 2, 0
-_080D4254: .4byte gUnknown_2023BC8
-_080D4258: .4byte gBitTable
-_080D425C: .4byte gActiveBattler
-_080D4260: .4byte gUnknown_2022BC4
-_080D4264: .4byte gUnknown_83FB134
-_080D4268:
- bl sub_80D49E8
-_080D426C:
- pop {r0}
- bx r0
- thumb_func_end LinkPartnerBufferRunCommand
-
- thumb_func_start sub_80D4270
-sub_80D4270: @ 80D4270
- push {lr}
- ldr r2, _080D4298 @ =gSprites
- ldr r1, _080D429C @ =gBattlerSpriteIds
- ldr r0, _080D42A0 @ =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, _080D42A4 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080D4294
- bl sub_80D49E8
-_080D4294:
- pop {r0}
- bx r0
- .align 2, 0
-_080D4298: .4byte gSprites
-_080D429C: .4byte gBattlerSpriteIds
-_080D42A0: .4byte gActiveBattler
-_080D42A4: .4byte SpriteCallbackDummy
- thumb_func_end sub_80D4270
-
- thumb_func_start sub_80D42A8
-sub_80D42A8: @ 80D42A8
- push {r4-r6,lr}
- ldr r6, _080D4300 @ =gSprites
- ldr r5, _080D4304 @ =gBattlerSpriteIds
- ldr r4, _080D4308 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r6, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, [r0]
- ldr r0, _080D430C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080D42F8
- movs r0, 0
- bl nullsub_16
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl FreeSpriteOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- bl sub_80D49E8
-_080D42F8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4300: .4byte gSprites
-_080D4304: .4byte gBattlerSpriteIds
-_080D4308: .4byte gActiveBattler
-_080D430C: .4byte SpriteCallbackDummy
- thumb_func_end sub_80D42A8
-
- thumb_func_start sub_80D4310
-sub_80D4310: @ 80D4310
- push {r4,lr}
- ldr r4, _080D4350 @ =gUnknown_2024018
- ldr r1, [r4]
- ldr r3, _080D4354 @ =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 _080D4348
- 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 sub_80D49E8
-_080D4348:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4350: .4byte gUnknown_2024018
-_080D4354: .4byte gActiveBattler
- thumb_func_end sub_80D4310
-
- thumb_func_start sub_80D4358
-sub_80D4358: @ 80D4358
- push {r4-r6,lr}
- movs r6, 0
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _080D437C
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _080D43B0
- ldr r0, _080D439C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080D43B0
-_080D437C:
- ldr r2, _080D43A0 @ =gSprites
- ldr r1, _080D43A4 @ =gUnknown_3004FF0
- ldr r0, _080D43A8 @ =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, _080D43AC @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080D43E8
- b _080D43E6
- .align 2, 0
-_080D439C: .4byte gBattleTypeFlags
-_080D43A0: .4byte gSprites
-_080D43A4: .4byte gUnknown_3004FF0
-_080D43A8: .4byte gActiveBattler
-_080D43AC: .4byte SpriteCallbackDummy
-_080D43B0:
- ldr r2, _080D4420 @ =gSprites
- ldr r5, _080D4424 @ =gUnknown_3004FF0
- ldr r0, _080D4428 @ =gActiveBattler
- ldrb r3, [r0]
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r2, 0
- adds r4, 0x1C
- adds r0, r4
- ldr r2, [r0]
- ldr r0, _080D442C @ =SpriteCallbackDummy
- cmp r2, r0
- bne _080D43E8
- 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, r4
- ldr r0, [r0]
- cmp r0, r2
- bne _080D43E8
-_080D43E6:
- movs r6, 0x1
-_080D43E8:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _080D43F4
- movs r6, 0
-_080D43F4:
- cmp r6, 0
- beq _080D441A
- ldr r0, _080D4430 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r3, _080D4428 @ =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, _080D4434 @ =gUnknown_3004FE0
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D4438 @ =sub_80D4310
- str r1, [r0]
-_080D441A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4420: .4byte gSprites
-_080D4424: .4byte gUnknown_3004FF0
-_080D4428: .4byte gActiveBattler
-_080D442C: .4byte SpriteCallbackDummy
-_080D4430: .4byte gUnknown_2024018
-_080D4434: .4byte gUnknown_3004FE0
-_080D4438: .4byte sub_80D4310
- thumb_func_end sub_80D4358
-
- thumb_func_start sub_80D443C
-sub_80D443C: @ 80D443C
- push {r4-r7,lr}
- ldr r0, _080D4568 @ =gUnknown_2024018
- mov r12, r0
- ldr r0, [r0]
- ldr r6, _080D456C @ =gActiveBattler
- ldrb r2, [r6]
- ldr r4, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r4
- ldrb r1, [r3]
- movs r5, 0x8
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _080D4460
- b _080D4562
-_080D4460:
- movs r7, 0x2
- adds r1, r7, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- adds r0, r5, 0
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080D4562
- ldrb r0, [r3, 0x9]
- adds r0, 0x1
- strb r0, [r3, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080D4562
- mov r1, r12
- ldr r0, [r1]
- ldrb r1, [r6]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strb r4, [r0, 0x9]
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _080D4500
- ldr r0, _080D4570 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _080D4500
- ldr r1, _080D4574 @ =gUnknown_3004FFC
- ldrb r0, [r6]
- eors r0, r7
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080D4578 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r4, _080D457C @ =gUnknown_3004FF0
- ldrb r0, [r6]
- adds r1, r7, 0
- eors r1, r0
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _080D4580 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _080D4584 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r6]
- eors r0, r7
- bl sub_804BD94
- ldrb r0, [r6]
- eors r0, r7
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
-_080D4500:
- ldr r1, _080D4574 @ =gUnknown_3004FFC
- ldr r4, _080D456C @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080D4578 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r5, _080D457C @ =gUnknown_3004FF0
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _080D4580 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _080D4584 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r4]
- bl sub_804BD94
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r0, _080D4568 @ =gUnknown_2024018
- 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, _080D4588 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D458C @ =sub_80D4358
- str r1, [r0]
-_080D4562:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4568: .4byte gUnknown_2024018
-_080D456C: .4byte gActiveBattler
-_080D4570: .4byte gBattleTypeFlags
-_080D4574: .4byte gUnknown_3004FFC
-_080D4578: .4byte gSprites
-_080D457C: .4byte gUnknown_3004FF0
-_080D4580: .4byte gBattlerPartyIndexes
-_080D4584: .4byte gPlayerParty
-_080D4588: .4byte gUnknown_3004FE0
-_080D458C: .4byte sub_80D4358
- thumb_func_end sub_80D443C
-
- thumb_func_start sub_80D4590
-sub_80D4590: @ 80D4590
- push {lr}
- ldr r2, _080D45C4 @ =gSprites
- ldr r1, _080D45C8 @ =gBattlerSpriteIds
- ldr r0, _080D45CC @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- 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
- cmp r0, 0
- bge _080D45BE
- movs r2, 0x24
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080D45BE
- bl sub_80D49E8
-_080D45BE:
- pop {r0}
- bx r0
- .align 2, 0
-_080D45C4: .4byte gSprites
-_080D45C8: .4byte gBattlerSpriteIds
-_080D45CC: .4byte gActiveBattler
- thumb_func_end sub_80D4590
-
- thumb_func_start sub_80D45D0
-sub_80D45D0: @ 80D45D0
- push {r4-r6,lr}
- ldr r5, _080D4610 @ =gActiveBattler
- ldrb r0, [r5]
- ldr r6, _080D4614 @ =gUnknown_3004FF0
- adds r1, r0, r6
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8049FD8
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080D4618
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- movs r2, 0
- bl sub_8048440
- b _080D4632
- .align 2, 0
-_080D4610: .4byte gActiveBattler
-_080D4614: .4byte gUnknown_3004FF0
-_080D4618:
- ldr r2, _080D4638 @ =gBattlerPartyIndexes
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _080D463C @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- bl sub_80D49E8
-_080D4632:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4638: .4byte gBattlerPartyIndexes
-_080D463C: .4byte gPlayerParty
- thumb_func_end sub_80D45D0
-
- thumb_func_start sub_80D4640
-sub_80D4640: @ 80D4640
- push {r4-r6,lr}
- ldr r6, _080D4698 @ =gSprites
- ldr r5, _080D469C @ =gBattlerSpriteIds
- ldr r4, _080D46A0 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r6
- movs r1, 0x22
- ldrsh r0, [r2, r1]
- movs r3, 0x26
- ldrsh r1, [r2, r3]
- adds r0, r1
- cmp r0, 0xA0
- ble _080D4690
- ldrb r0, [r2, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- ldr r1, _080D46A4 @ =gUnknown_3004FF0
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl sub_80D49E8
-_080D4690:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4698: .4byte gSprites
-_080D469C: .4byte gBattlerSpriteIds
-_080D46A0: .4byte gActiveBattler
-_080D46A4: .4byte gUnknown_3004FF0
- thumb_func_end sub_80D4640
-
- thumb_func_start sub_80D46A8
-sub_80D46A8: @ 80D46A8
- push {r4-r6,lr}
- ldr r0, _080D4704 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r6, _080D4708 @ =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 _080D46FC
- ldr r5, _080D470C @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080D4710 @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, _080D4714 @ =gUnknown_3004FF0
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl sub_80D49E8
-_080D46FC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4704: .4byte gUnknown_2024018
-_080D4708: .4byte gActiveBattler
-_080D470C: .4byte gBattlerSpriteIds
-_080D4710: .4byte gSprites
-_080D4714: .4byte gUnknown_3004FF0
- thumb_func_end sub_80D46A8
-
- thumb_func_start sub_80D4718
-sub_80D4718: @ 80D4718
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080D472A
- bl sub_80D49E8
-_080D472A:
- pop {r0}
- bx r0
- thumb_func_end sub_80D4718
-
- thumb_func_start sub_80D4730
-sub_80D4730: @ 80D4730
- push {r4,lr}
- ldr r1, _080D476C @ =gBattlerSpriteIds
- ldr r0, _080D4770 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, _080D4774 @ =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 _080D477C
- 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, _080D4778 @ =gUnknown_2024005
- strb r3, [r0]
- bl sub_80D49E8
- b _080D47A6
- .align 2, 0
-_080D476C: .4byte gBattlerSpriteIds
-_080D4770: .4byte gActiveBattler
-_080D4774: .4byte gSprites
-_080D4778: .4byte gUnknown_2024005
-_080D477C:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _080D47A0
- 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]
-_080D47A0:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_080D47A6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D4730
-
- thumb_func_start sub_80D47AC
-sub_80D47AC: @ 80D47AC
- push {r4,lr}
- ldr r2, _080D4800 @ =gSprites
- ldr r0, _080D4804 @ =gUnknown_3004FF0
- ldr r4, _080D4808 @ =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, _080D480C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080D47F8
- ldr r0, _080D4810 @ =gUnknown_2024018
- 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 _080D47EC
- adds r0, r3, 0
- adds r1, r3, 0
- adds r2, r3, 0
- movs r3, 0x6
- bl InitAndLaunchSpecialAnimation
-_080D47EC:
- ldr r0, _080D4814 @ =gUnknown_3004FE0
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _080D4818 @ =sub_80D481C
- str r0, [r1]
-_080D47F8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4800: .4byte gSprites
-_080D4804: .4byte gUnknown_3004FF0
-_080D4808: .4byte gActiveBattler
-_080D480C: .4byte SpriteCallbackDummy
-_080D4810: .4byte gUnknown_2024018
-_080D4814: .4byte gUnknown_3004FE0
-_080D4818: .4byte sub_80D481C
- thumb_func_end sub_80D47AC
-
- thumb_func_start sub_80D481C
-sub_80D481C: @ 80D481C
- push {lr}
- ldr r0, _080D4844 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _080D4848 @ =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 _080D483E
- bl sub_80D49E8
-_080D483E:
- pop {r0}
- bx r0
- .align 2, 0
-_080D4844: .4byte gUnknown_2024018
-_080D4848: .4byte gActiveBattler
- thumb_func_end sub_80D481C
-
- thumb_func_start sub_80D484C
-sub_80D484C: @ 80D484C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r3, _080D4918 @ =gUnknown_2024018
- ldr r0, [r3]
- ldr r7, _080D491C @ =gActiveBattler
- ldrb r1, [r7]
- 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 _080D490E
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldr r0, [r3]
- 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, _080D4920 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, _080D4924 @ =c3_0802FDF4
- movs r1, 0xA
- bl CreateTask
- ldr r0, _080D4928 @ =gBattlerPartyIndexes
- mov r8, r0
- ldrb r1, [r7]
- lsls r0, r1, 1
- add r0, r8
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _080D492C @ =gPlayerParty
- adds r0, r5
- bl HandleLowHpMusicChange
- ldr r1, _080D4930 @ =gBattlerSpriteIds
- ldrb r0, [r7]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080D4934 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- ldr r4, _080D4938 @ =gUnknown_3004FF0
- ldrb r1, [r7]
- adds r0, r1, r4
- ldrb r0, [r0]
- lsls r1, 1
- add r1, r8
- ldrh r1, [r1]
- muls r1, r6
- adds r1, r5
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r7]
- bl sub_804BD94
- ldrb r0, [r7]
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldrb r0, [r7]
- bl CopyBattleSpriteInvisibility
- ldr r1, _080D493C @ =gUnknown_3004FE0
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D4940 @ =sub_80D47AC
- str r1, [r0]
-_080D490E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4918: .4byte gUnknown_2024018
-_080D491C: .4byte gActiveBattler
-_080D4920: .4byte 0x000027f9
-_080D4924: .4byte c3_0802FDF4
-_080D4928: .4byte gBattlerPartyIndexes
-_080D492C: .4byte gPlayerParty
-_080D4930: .4byte gBattlerSpriteIds
-_080D4934: .4byte gSprites
-_080D4938: .4byte gUnknown_3004FF0
-_080D493C: .4byte gUnknown_3004FE0
-_080D4940: .4byte sub_80D47AC
- thumb_func_end sub_80D484C
-
- thumb_func_start sub_80D4944
-sub_80D4944: @ 80D4944
- push {r4-r6,lr}
- ldr r6, _080D49C4 @ =gUnknown_2024018
- ldr r0, [r6]
- ldr r4, _080D49C8 @ =gActiveBattler
- ldrb r2, [r4]
- 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 _080D4976
- ldr r0, _080D49CC @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080D49D0 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_080D4976:
- ldr r5, _080D49D4 @ =gSprites
- ldr r0, _080D49D8 @ =gUnknown_3004FFC
- ldrb r2, [r4]
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r3, r0, 2
- adds r0, r5, 0
- adds r0, 0x1C
- adds r0, r3, r0
- ldr r1, [r0]
- ldr r0, _080D49DC @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080D49BC
- 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 _080D49BC
- adds r0, r3, r5
- bl DestroySprite
- ldr r1, _080D49E0 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D49E4 @ =sub_80D484C
- str r1, [r0]
-_080D49BC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D49C4: .4byte gUnknown_2024018
-_080D49C8: .4byte gActiveBattler
-_080D49CC: .4byte gBattlerPartyIndexes
-_080D49D0: .4byte gPlayerParty
-_080D49D4: .4byte gSprites
-_080D49D8: .4byte gUnknown_3004FFC
-_080D49DC: .4byte SpriteCallbackDummy
-_080D49E0: .4byte gUnknown_3004FE0
-_080D49E4: .4byte sub_80D484C
- thumb_func_end sub_80D4944
-
- thumb_func_start sub_80D49E8
-sub_80D49E8: @ 80D49E8
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _080D4A28 @ =gUnknown_3004FE0
- ldr r4, _080D4A2C @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D4A30 @ =LinkPartnerBufferRunCommand
- str r1, [r0]
- ldr r0, _080D4A34 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D4A3C
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, _080D4A38 @ =gUnknown_2022BC4
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _080D4A4E
- .align 2, 0
-_080D4A28: .4byte gUnknown_3004FE0
-_080D4A2C: .4byte gActiveBattler
-_080D4A30: .4byte LinkPartnerBufferRunCommand
-_080D4A34: .4byte gBattleTypeFlags
-_080D4A38: .4byte gUnknown_2022BC4
-_080D4A3C:
- ldr r2, _080D4A58 @ =gUnknown_2023BC8
- ldr r1, _080D4A5C @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_080D4A4E:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D4A58: .4byte gUnknown_2023BC8
-_080D4A5C: .4byte gBitTable
- thumb_func_end sub_80D49E8
-
- thumb_func_start sub_80D4A60
-sub_80D4A60: @ 80D4A60
- push {lr}
- ldr r0, _080D4A88 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _080D4A8C @ =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 _080D4A82
- bl sub_80D49E8
-_080D4A82:
- pop {r0}
- bx r0
- .align 2, 0
-_080D4A88: .4byte gUnknown_2024018
-_080D4A8C: .4byte gActiveBattler
- thumb_func_end sub_80D4A60
-
- thumb_func_start sub_80D4A90
-sub_80D4A90: @ 80D4A90
- push {lr}
- ldr r0, _080D4AB8 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _080D4ABC @ =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 _080D4AB2
- bl sub_80D49E8
-_080D4AB2:
- pop {r0}
- bx r0
- .align 2, 0
-_080D4AB8: .4byte gUnknown_2024018
-_080D4ABC: .4byte gActiveBattler
- thumb_func_end sub_80D4A90
-
- thumb_func_start LinkPartnerHandleGetAttributes
-LinkPartnerHandleGetAttributes: @ 80D4AC0
- push {r4-r6,lr}
- sub sp, 0x100
- movs r6, 0
- ldr r1, _080D4AEC @ =gUnknown_2022BC4
- ldr r0, _080D4AF0 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _080D4AF8
- ldr r0, _080D4AF4 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- mov r1, sp
- bl dp01_getattr_by_ch1_for_player_pokemon
- adds r6, r0, 0
- b _080D4B1A
- .align 2, 0
-_080D4AEC: .4byte gUnknown_2022BC4
-_080D4AF0: .4byte gActiveBattler
-_080D4AF4: .4byte gBattlerPartyIndexes
-_080D4AF8:
- ldrb r4, [r1]
- movs r5, 0
-_080D4AFC:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _080D4B12
- lsls r0, r5, 24
- lsrs r0, 24
- mov r2, sp
- adds r1, r2, r6
- bl dp01_getattr_by_ch1_for_player_pokemon
- adds r6, r0
-_080D4B12:
- lsrs r4, 1
- adds r5, 0x1
- cmp r5, 0x5
- ble _080D4AFC
-_080D4B1A:
- lsls r1, r6, 16
- lsrs r1, 16
- movs r0, 0x1
- mov r2, sp
- bl EmitDataTransfer
- bl sub_80D49E8
- add sp, 0x100
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end LinkPartnerHandleGetAttributes
-
- thumb_func_start dp01_getattr_by_ch1_for_player_pokemon
-dp01_getattr_by_ch1_for_player_pokemon: @ 80D4B34
- 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, _080D4B68 @ =gUnknown_2022BC4
- ldr r3, _080D4B6C @ =gActiveBattler
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, r2, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x3B
- bls _080D4B5E
- bl _080D52CA
-_080D4B5E:
- lsls r0, 2
- ldr r1, _080D4B70 @ =_080D4B74
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080D4B68: .4byte gUnknown_2022BC4
-_080D4B6C: .4byte gActiveBattler
-_080D4B70: .4byte _080D4B74
- .align 2, 0
-_080D4B74:
- .4byte _080D4C64
- .4byte _080D4E88
- .4byte _080D4E98
- .4byte _080D4EA8
- .4byte _080D4F10
- .4byte _080D4F10
- .4byte _080D4F10
- .4byte _080D4F10
- .4byte _080D4F2C
- .4byte _080D4F68
- .4byte _080D4F68
- .4byte _080D4F68
- .4byte _080D4F68
- .4byte _080D52CA
- .4byte _080D52CA
- .4byte _080D52CA
- .4byte _080D52CA
- .4byte _080D4F84
- .4byte _080D4F94
- .4byte _080D4FC4
- .4byte _080D4FD4
- .4byte _080D4FE4
- .4byte _080D4FF4
- .4byte _080D5004
- .4byte _080D5014
- .4byte _080D5024
- .4byte _080D5034
- .4byte _080D5044
- .4byte _080D5054
- .4byte _080D5064
- .4byte _080D5074
- .4byte _080D5084
- .4byte _080D50D4
- .4byte _080D50E4
- .4byte _080D50F4
- .4byte _080D5104
- .4byte _080D5114
- .4byte _080D5124
- .4byte _080D5134
- .4byte _080D5144
- .4byte _080D5154
- .4byte _080D5188
- .4byte _080D5198
- .4byte _080D51A8
- .4byte _080D51B8
- .4byte _080D51C8
- .4byte _080D51D8
- .4byte _080D51E8
- .4byte _080D51F8
- .4byte _080D5218
- .4byte _080D5228
- .4byte _080D5238
- .4byte _080D5248
- .4byte _080D5258
- .4byte _080D5268
- .4byte _080D5278
- .4byte _080D5288
- .4byte _080D5298
- .4byte _080D52A8
- .4byte _080D52B8
-_080D4C64:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _080D4E78 @ =gPlayerParty
- 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
-_080D4CB0:
- 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 _080D4CB0
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _080D4E78 @ =gPlayerParty
- 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, _080D4E7C @ =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, _080D4E80 @ =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, _080D4E84 @ =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
-_080D4E68:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0x57
- bls _080D4E68
- b _080D52CA
- .align 2, 0
-_080D4E78: .4byte gPlayerParty
-_080D4E7C: .4byte 0xfffffc1f
-_080D4E80: .4byte 0xfff07fff
-_080D4E84: .4byte 0xfffffe0f
-_080D4E88:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4E94 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- b _080D5202
- .align 2, 0
-_080D4E94: .4byte gPlayerParty
-_080D4E98:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4EA4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- b _080D5202
- .align 2, 0
-_080D4EA4: .4byte gPlayerParty
-_080D4EA8:
- 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, _080D4F0C @ =gPlayerParty
- adds r4, r1, r0
- mov r8, r9
-_080D4EBE:
- 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 _080D4EBE
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4F0C @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- mov r1, r9
- strb r0, [r1, 0xC]
- mov r2, r9
- movs r6, 0
-_080D4EFC:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0xF
- bls _080D4EFC
- b _080D52CA
- .align 2, 0
-_080D4F0C: .4byte gPlayerParty
-_080D4F10:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4F28 @ =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x9
- b _080D5202
- .align 2, 0
-_080D4F28: .4byte gPlayerParty
-_080D4F2C:
- movs r6, 0
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r2, _080D4F64 @ =gPlayerParty
- mov r8, r2
-_080D4F38:
- 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 _080D4F38
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4F64 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- b _080D52CA
- .align 2, 0
-_080D4F64: .4byte gPlayerParty
-_080D4F68:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4F80 @ =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x8
- b _080D52C2
- .align 2, 0
-_080D4F80: .4byte gPlayerParty
-_080D4F84:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4F90 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1
- b _080D4F9E
- .align 2, 0
-_080D4F90: .4byte gPlayerParty
-_080D4F94:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4FC0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x19
-_080D4F9E:
- 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 _080D52CA
- .align 2, 0
-_080D4FC0: .4byte gPlayerParty
-_080D4FC4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4FD0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1A
- b _080D52C2
- .align 2, 0
-_080D4FD0: .4byte gPlayerParty
-_080D4FD4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4FE0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1B
- b _080D52C2
- .align 2, 0
-_080D4FE0: .4byte gPlayerParty
-_080D4FE4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D4FF0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1C
- b _080D52C2
- .align 2, 0
-_080D4FF0: .4byte gPlayerParty
-_080D4FF4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5000 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1D
- b _080D52C2
- .align 2, 0
-_080D5000: .4byte gPlayerParty
-_080D5004:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5010 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1E
- b _080D52C2
- .align 2, 0
-_080D5010: .4byte gPlayerParty
-_080D5014:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5020 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1F
- b _080D52C2
- .align 2, 0
-_080D5020: .4byte gPlayerParty
-_080D5024:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5030 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x20
- b _080D52C2
- .align 2, 0
-_080D5030: .4byte gPlayerParty
-_080D5034:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5040 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x22
- b _080D52C2
- .align 2, 0
-_080D5040: .4byte gPlayerParty
-_080D5044:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5050 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x23
- b _080D52C2
- .align 2, 0
-_080D5050: .4byte gPlayerParty
-_080D5054:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5060 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x24
- b _080D52C2
- .align 2, 0
-_080D5060: .4byte gPlayerParty
-_080D5064:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5070 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x25
- b _080D52C2
- .align 2, 0
-_080D5070: .4byte gPlayerParty
-_080D5074:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5080 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x26
- b _080D52C2
- .align 2, 0
-_080D5080: .4byte gPlayerParty
-_080D5084:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _080D50D0 @ =gPlayerParty
- 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 _080D52CA
- .align 2, 0
-_080D50D0: .4byte gPlayerParty
-_080D50D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D50E0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x27
- b _080D52C2
- .align 2, 0
-_080D50E0: .4byte gPlayerParty
-_080D50E4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D50F0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x28
- b _080D52C2
- .align 2, 0
-_080D50F0: .4byte gPlayerParty
-_080D50F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5100 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x29
- b _080D52C2
- .align 2, 0
-_080D5100: .4byte gPlayerParty
-_080D5104:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5110 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2A
- b _080D52C2
- .align 2, 0
-_080D5110: .4byte gPlayerParty
-_080D5114:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5120 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2B
- b _080D52C2
- .align 2, 0
-_080D5120: .4byte gPlayerParty
-_080D5124:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5130 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2C
- b _080D52C2
- .align 2, 0
-_080D5130: .4byte gPlayerParty
-_080D5134:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5140 @ =gPlayerParty
- adds r0, r1
- movs r1, 0
- b _080D515E
- .align 2, 0
-_080D5140: .4byte gPlayerParty
-_080D5144:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5150 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x9
- b _080D5202
- .align 2, 0
-_080D5150: .4byte gPlayerParty
-_080D5154:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5184 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x37
-_080D515E:
- 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 _080D52CA
- .align 2, 0
-_080D5184: .4byte gPlayerParty
-_080D5188:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5194 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- b _080D52C2
- .align 2, 0
-_080D5194: .4byte gPlayerParty
-_080D5198:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D51A4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- b _080D5202
- .align 2, 0
-_080D51A4: .4byte gPlayerParty
-_080D51A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D51B4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- b _080D5202
- .align 2, 0
-_080D51B4: .4byte gPlayerParty
-_080D51B8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D51C4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3B
- b _080D5202
- .align 2, 0
-_080D51C4: .4byte gPlayerParty
-_080D51C8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D51D4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3C
- b _080D5202
- .align 2, 0
-_080D51D4: .4byte gPlayerParty
-_080D51D8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D51E4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3D
- b _080D5202
- .align 2, 0
-_080D51E4: .4byte gPlayerParty
-_080D51E8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D51F4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3E
- b _080D5202
- .align 2, 0
-_080D51F4: .4byte gPlayerParty
-_080D51F8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5214 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3F
-_080D5202:
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- strb r0, [r7]
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r6, 0x2
- b _080D52CA
- .align 2, 0
-_080D5214: .4byte gPlayerParty
-_080D5218:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5224 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x16
- b _080D52C2
- .align 2, 0
-_080D5224: .4byte gPlayerParty
-_080D5228:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5234 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x17
- b _080D52C2
- .align 2, 0
-_080D5234: .4byte gPlayerParty
-_080D5238:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5244 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x18
- b _080D52C2
- .align 2, 0
-_080D5244: .4byte gPlayerParty
-_080D5248:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5254 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x21
- b _080D52C2
- .align 2, 0
-_080D5254: .4byte gPlayerParty
-_080D5258:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5264 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2F
- b _080D52C2
- .align 2, 0
-_080D5264: .4byte gPlayerParty
-_080D5268:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5274 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x30
- b _080D52C2
- .align 2, 0
-_080D5274: .4byte gPlayerParty
-_080D5278:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5284 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x32
- b _080D52C2
- .align 2, 0
-_080D5284: .4byte gPlayerParty
-_080D5288:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5294 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x33
- b _080D52C2
- .align 2, 0
-_080D5294: .4byte gPlayerParty
-_080D5298:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D52A4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x34
- b _080D52C2
- .align 2, 0
-_080D52A4: .4byte gPlayerParty
-_080D52A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D52B4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x35
- b _080D52C2
- .align 2, 0
-_080D52B4: .4byte gPlayerParty
-_080D52B8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D52DC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x36
-_080D52C2:
- bl GetMonData
- strb r0, [r7]
- movs r6, 0x1
-_080D52CA:
- 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
-_080D52DC: .4byte gPlayerParty
- thumb_func_end dp01_getattr_by_ch1_for_player_pokemon
-
- thumb_func_start sub_80D52E0
-sub_80D52E0: @ 80D52E0
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D52E0
-
- thumb_func_start LinkPartnerHandleSetAttributes
-LinkPartnerHandleSetAttributes: @ 80D52EC
- push {r4,r5,lr}
- ldr r1, _080D5310 @ =gUnknown_2022BC4
- ldr r0, _080D5314 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _080D531C
- ldr r0, _080D5318 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- bl sub_80D5344
- b _080D533A
- .align 2, 0
-_080D5310: .4byte gUnknown_2022BC4
-_080D5314: .4byte gActiveBattler
-_080D5318: .4byte gBattlerPartyIndexes
-_080D531C:
- ldrb r4, [r1]
- movs r5, 0
-_080D5320:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _080D532E
- adds r0, r5, 0
- bl sub_80D5344
-_080D532E:
- lsrs r4, 1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _080D5320
-_080D533A:
- bl sub_80D49E8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end LinkPartnerHandleSetAttributes
-
- thumb_func_start sub_80D5344
-sub_80D5344: @ 80D5344
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080D537C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- ldr r2, _080D5380 @ =gUnknown_2022BC7
- adds r3, r0, r2
- adds r6, r3, 0
- subs r1, r2, 0x2
- adds r0, r1
- ldrb r0, [r0]
- adds r7, r2, 0
- cmp r0, 0x3B
- bls _080D5370
- bl _080D5D0A
-_080D5370:
- lsls r0, 2
- ldr r1, _080D5384 @ =_080D5388
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080D537C: .4byte gActiveBattler
-_080D5380: .4byte gUnknown_2022BC7
-_080D5384: .4byte _080D5388
- .align 2, 0
-_080D5388:
- .4byte _080D5478
- .4byte _080D5610
- .4byte _080D5630
- .4byte _080D5650
- .4byte _080D56A8
- .4byte _080D56A8
- .4byte _080D56A8
- .4byte _080D56A8
- .4byte _080D56D0
- .4byte _080D5734
- .4byte _080D5734
- .4byte _080D5734
- .4byte _080D5734
- .4byte _080D5D0A
- .4byte _080D5D0A
- .4byte _080D5D0A
- .4byte _080D5D0A
- .4byte _080D5764
- .4byte _080D5784
- .4byte _080D57A4
- .4byte _080D57C4
- .4byte _080D57E4
- .4byte _080D5804
- .4byte _080D5824
- .4byte _080D5844
- .4byte _080D5864
- .4byte _080D5884
- .4byte _080D58A4
- .4byte _080D58C4
- .4byte _080D58E4
- .4byte _080D5904
- .4byte _080D5924
- .4byte _080D5994
- .4byte _080D59B4
- .4byte _080D59D4
- .4byte _080D59F4
- .4byte _080D5A14
- .4byte _080D5A34
- .4byte _080D5A54
- .4byte _080D5A74
- .4byte _080D5A94
- .4byte _080D5AB4
- .4byte _080D5AD4
- .4byte _080D5AF4
- .4byte _080D5B14
- .4byte _080D5B34
- .4byte _080D5B54
- .4byte _080D5B74
- .4byte _080D5B94
- .4byte _080D5BB4
- .4byte _080D5BD4
- .4byte _080D5BF4
- .4byte _080D5C14
- .4byte _080D5C34
- .4byte _080D5C54
- .4byte _080D5C74
- .4byte _080D5C94
- .4byte _080D5CB4
- .4byte _080D5CD4
- .4byte _080D5CF4
-_080D5478:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _080D560C @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- adds r2, r6, 0
- bl SetMonData
- adds r2, r6, 0
- adds r2, 0x2E
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
- movs r0, 0
- mov r8, r0
- movs r0, 0x3B
- adds r0, r6
- mov r10, r0
- adds r0, r6, 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, r6, 0x2
- str r0, [sp, 0x4]
- adds r0, r6, 0x4
- str r0, [sp, 0x8]
- adds r0, r6, 0x6
- str r0, [sp, 0xC]
- adds r0, 0x2
- str r0, [sp, 0x10]
- adds r0, 0x2
- str r0, [sp, 0x14]
- mov r9, r4
- adds r7, r6, 0
- adds r7, 0x24
- adds r4, r6, 0
- adds r4, 0xC
-_080D54DE:
- 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, r7, 0
- bl SetMonData
- adds r7, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _080D54DE
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _080D560C @ =gPlayerParty
- 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, [r6, 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, [r6, 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, [r6, 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, [r6, 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, [r6, 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, [r6, 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 _080D5D0A
- .align 2, 0
-_080D560C: .4byte gPlayerParty
-_080D5610:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5628 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D562C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xB
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5628: .4byte gPlayerParty
-_080D562C: .4byte gActiveBattler
-_080D5630:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5648 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D564C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xC
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5648: .4byte gPlayerParty
-_080D564C: .4byte gActiveBattler
-_080D5650:
- movs r0, 0
- mov r8, r0
- movs r0, 0xC
- adds r0, r3
- mov r9, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _080D56A4 @ =gPlayerParty
- adds r7, r1, r0
- adds r6, r3, 0
- adds r6, 0x8
- adds r4, r3, 0
-_080D566A:
- 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 _080D566A
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D56A4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D56A4: .4byte gPlayerParty
-_080D56A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D56C4 @ =gPlayerParty
- adds r0, r1
- ldr r3, _080D56C8 @ =gUnknown_2022BC4
- ldr r1, _080D56CC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x9
- b _080D574C
- .align 2, 0
-_080D56C4: .4byte gPlayerParty
-_080D56C8: .4byte gUnknown_2022BC4
-_080D56CC: .4byte gActiveBattler
-_080D56D0:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _080D572C @ =gPlayerParty
- adds r4, r0
- ldr r5, _080D5730 @ =gActiveBattler
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x11
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x12
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x13
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x14
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D572C: .4byte gPlayerParty
-_080D5730: .4byte gActiveBattler
-_080D5734:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5758 @ =gPlayerParty
- adds r0, r1
- ldr r3, _080D575C @ =gUnknown_2022BC4
- ldr r1, _080D5760 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x8
-_080D574C:
- adds r3, 0x3
- adds r2, r3
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5758: .4byte gPlayerParty
-_080D575C: .4byte gUnknown_2022BC4
-_080D5760: .4byte gActiveBattler
-_080D5764:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D577C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5780 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D577C: .4byte gPlayerParty
-_080D5780: .4byte gActiveBattler
-_080D5784:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D579C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D57A0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x19
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D579C: .4byte gPlayerParty
-_080D57A0: .4byte gActiveBattler
-_080D57A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D57BC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D57C0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1A
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D57BC: .4byte gPlayerParty
-_080D57C0: .4byte gActiveBattler
-_080D57C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D57DC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D57E0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1B
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D57DC: .4byte gPlayerParty
-_080D57E0: .4byte gActiveBattler
-_080D57E4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D57FC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5800 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1C
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D57FC: .4byte gPlayerParty
-_080D5800: .4byte gActiveBattler
-_080D5804:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D581C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5820 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1D
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D581C: .4byte gPlayerParty
-_080D5820: .4byte gActiveBattler
-_080D5824:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D583C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5840 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1E
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D583C: .4byte gPlayerParty
-_080D5840: .4byte gActiveBattler
-_080D5844:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D585C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5860 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1F
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D585C: .4byte gPlayerParty
-_080D5860: .4byte gActiveBattler
-_080D5864:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D587C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5880 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x20
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D587C: .4byte gPlayerParty
-_080D5880: .4byte gActiveBattler
-_080D5884:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D589C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D58A0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x22
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D589C: .4byte gPlayerParty
-_080D58A0: .4byte gActiveBattler
-_080D58A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D58BC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D58C0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x23
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D58BC: .4byte gPlayerParty
-_080D58C0: .4byte gActiveBattler
-_080D58C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D58DC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D58E0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x24
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D58DC: .4byte gPlayerParty
-_080D58E0: .4byte gActiveBattler
-_080D58E4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D58FC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5900 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x25
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D58FC: .4byte gPlayerParty
-_080D5900: .4byte gActiveBattler
-_080D5904:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D591C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5920 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x26
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D591C: .4byte gPlayerParty
-_080D5920: .4byte gActiveBattler
-_080D5924:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _080D598C @ =gPlayerParty
- adds r4, r0
- ldr r5, _080D5990 @ =gActiveBattler
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x27
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x28
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x29
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2A
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2B
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x5
- adds r2, r0
- adds r0, r4, 0
- b _080D5A44
- .align 2, 0
-_080D598C: .4byte gPlayerParty
-_080D5990: .4byte gActiveBattler
-_080D5994:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D59AC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D59B0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x27
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D59AC: .4byte gPlayerParty
-_080D59B0: .4byte gActiveBattler
-_080D59B4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D59CC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D59D0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x28
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D59CC: .4byte gPlayerParty
-_080D59D0: .4byte gActiveBattler
-_080D59D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D59EC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D59F0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x29
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D59EC: .4byte gPlayerParty
-_080D59F0: .4byte gActiveBattler
-_080D59F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5A0C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5A10 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2A
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5A0C: .4byte gPlayerParty
-_080D5A10: .4byte gActiveBattler
-_080D5A14:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5A2C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5A30 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2B
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5A2C: .4byte gPlayerParty
-_080D5A30: .4byte gActiveBattler
-_080D5A34:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5A4C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5A50 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
-_080D5A44:
- movs r1, 0x2C
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5A4C: .4byte gPlayerParty
-_080D5A50: .4byte gActiveBattler
-_080D5A54:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5A6C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5A70 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5A6C: .4byte gPlayerParty
-_080D5A70: .4byte gActiveBattler
-_080D5A74:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5A8C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5A90 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x9
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5A8C: .4byte gPlayerParty
-_080D5A90: .4byte gActiveBattler
-_080D5A94:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5AAC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5AB0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x37
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5AAC: .4byte gPlayerParty
-_080D5AB0: .4byte gActiveBattler
-_080D5AB4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5ACC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5AD0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x38
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5ACC: .4byte gPlayerParty
-_080D5AD0: .4byte gActiveBattler
-_080D5AD4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5AEC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5AF0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x39
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5AEC: .4byte gPlayerParty
-_080D5AF0: .4byte gActiveBattler
-_080D5AF4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5B0C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5B10 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3A
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5B0C: .4byte gPlayerParty
-_080D5B10: .4byte gActiveBattler
-_080D5B14:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5B2C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5B30 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3B
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5B2C: .4byte gPlayerParty
-_080D5B30: .4byte gActiveBattler
-_080D5B34:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5B4C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5B50 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3C
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5B4C: .4byte gPlayerParty
-_080D5B50: .4byte gActiveBattler
-_080D5B54:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5B6C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5B70 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3D
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5B6C: .4byte gPlayerParty
-_080D5B70: .4byte gActiveBattler
-_080D5B74:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5B8C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5B90 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3E
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5B8C: .4byte gPlayerParty
-_080D5B90: .4byte gActiveBattler
-_080D5B94:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5BAC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5BB0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3F
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5BAC: .4byte gPlayerParty
-_080D5BB0: .4byte gActiveBattler
-_080D5BB4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5BCC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5BD0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x16
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5BCC: .4byte gPlayerParty
-_080D5BD0: .4byte gActiveBattler
-_080D5BD4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5BEC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5BF0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x17
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5BEC: .4byte gPlayerParty
-_080D5BF0: .4byte gActiveBattler
-_080D5BF4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5C0C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5C10 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x18
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5C0C: .4byte gPlayerParty
-_080D5C10: .4byte gActiveBattler
-_080D5C14:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5C2C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5C30 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x21
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5C2C: .4byte gPlayerParty
-_080D5C30: .4byte gActiveBattler
-_080D5C34:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5C4C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5C50 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2F
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5C4C: .4byte gPlayerParty
-_080D5C50: .4byte gActiveBattler
-_080D5C54:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5C6C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5C70 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x30
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5C6C: .4byte gPlayerParty
-_080D5C70: .4byte gActiveBattler
-_080D5C74:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5C8C @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5C90 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x32
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5C8C: .4byte gPlayerParty
-_080D5C90: .4byte gActiveBattler
-_080D5C94:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5CAC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5CB0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x33
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5CAC: .4byte gPlayerParty
-_080D5CB0: .4byte gActiveBattler
-_080D5CB4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5CCC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5CD0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x34
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5CCC: .4byte gPlayerParty
-_080D5CD0: .4byte gActiveBattler
-_080D5CD4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5CEC @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5CF0 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x35
- bl SetMonData
- b _080D5D0A
- .align 2, 0
-_080D5CEC: .4byte gPlayerParty
-_080D5CF0: .4byte gActiveBattler
-_080D5CF4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080D5D34 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080D5D38 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x36
- bl SetMonData
-_080D5D0A:
- ldr r2, _080D5D3C @ =gBattlerPartyIndexes
- ldr r0, _080D5D38 @ =gActiveBattler
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _080D5D34 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D5D34: .4byte gPlayerParty
-_080D5D38: .4byte gActiveBattler
-_080D5D3C: .4byte gBattlerPartyIndexes
- thumb_func_end sub_80D5344
-
- thumb_func_start LinkPartnerHandlecmd3
-LinkPartnerHandlecmd3: @ 80D5D40
- push {r4-r7,lr}
- ldr r1, _080D5DA4 @ =gBattlerPartyIndexes
- ldr r7, _080D5DA8 @ =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, _080D5DAC @ =gUnknown_2022BC4
- lsls r2, 9
- adds r0, r4, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- ldr r1, _080D5DB0 @ =gPlayerParty
- adds r0, r1
- adds r5, r3, r0
- movs r3, 0
- adds r0, r4, 0x2
- adds r2, r0
- ldrb r2, [r2]
- cmp r3, r2
- bcs _080D5D98
- adds r6, r4, 0
- adds r2, r7, 0
- adds r4, r0, 0
-_080D5D76:
- 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 _080D5D76
-_080D5D98:
- bl sub_80D49E8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D5DA4: .4byte gBattlerPartyIndexes
-_080D5DA8: .4byte gActiveBattler
-_080D5DAC: .4byte gUnknown_2022BC4
-_080D5DB0: .4byte gPlayerParty
- thumb_func_end LinkPartnerHandlecmd3
-
- thumb_func_start LinkPartnerHandleLoadPokeSprite
-LinkPartnerHandleLoadPokeSprite: @ 80D5DB4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r0, _080D5EA8 @ =gBattlerPartyIndexes
- mov r8, r0
- ldr r6, _080D5EAC @ =gActiveBattler
- ldrb r1, [r6]
- lsls r0, r1, 1
- add r0, r8
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _080D5EB0 @ =gPlayerParty
- adds r0, r4
- bl sub_8034498
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- muls r0, r5
- adds r0, r4
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080D5EB4 @ =gMultiuseSpriteTemplate
- mov r8, r0
- ldrb r0, [r6]
- movs r1, 0x2
- bl sub_8074480
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldrb r0, [r6]
- bl GetBankSpriteDefault_Y
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r6]
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r8
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, _080D5EB8 @ =gBattlerSpriteIds
- ldrb r1, [r6]
- adds r1, r4
- strb r0, [r1]
- ldr r5, _080D5EBC @ =gSprites
- ldrb r0, [r6]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _080D5EC0 @ =0x0000ff10
- strh r1, [r0, 0x24]
- ldrb r2, [r6]
- adds r0, r2, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x2E]
- ldrb r3, [r6]
- adds r0, r3, r4
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r2, [r6]
- adds r4, r2, r4
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _080D5EC4 @ =gBattleMonForms
- adds r2, r1
- ldrb r1, [r2]
- bl StartSpriteAnim
- ldr r1, _080D5EC8 @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D5ECC @ =sub_80D4590
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D5EA8: .4byte gBattlerPartyIndexes
-_080D5EAC: .4byte gActiveBattler
-_080D5EB0: .4byte gPlayerParty
-_080D5EB4: .4byte gMultiuseSpriteTemplate
-_080D5EB8: .4byte gBattlerSpriteIds
-_080D5EBC: .4byte gSprites
-_080D5EC0: .4byte 0x0000ff10
-_080D5EC4: .4byte gBattleMonForms
-_080D5EC8: .4byte gUnknown_3004FE0
-_080D5ECC: .4byte sub_80D4590
- thumb_func_end LinkPartnerHandleLoadPokeSprite
-
- thumb_func_start LinkPartnerHandleSendOutPoke
-LinkPartnerHandleSendOutPoke: @ 80D5ED0
- push {r4-r6,lr}
- ldr r5, _080D5F28 @ =gActiveBattler
- ldrb r0, [r5]
- ldr r4, _080D5F2C @ =gUnknown_2022BC4
- lsls r1, r0, 9
- adds r6, r4, 0x2
- adds r1, r6
- ldrb r1, [r1]
- bl ClearTemporarySpeciesSpriteData
- ldr r2, _080D5F30 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r2
- lsls r0, 9
- adds r4, 0x1
- adds r0, r4
- ldrb r0, [r0]
- strh r0, [r1]
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _080D5F34 @ =gPlayerParty
- adds r0, r2
- bl sub_8034498
- ldrb r0, [r5]
- lsls r1, r0, 9
- adds r1, r6
- ldrb r1, [r1]
- bl sub_80D5F40
- ldr r1, _080D5F38 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D5F3C @ =sub_80D4944
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D5F28: .4byte gActiveBattler
-_080D5F2C: .4byte gUnknown_2022BC4
-_080D5F30: .4byte gBattlerPartyIndexes
-_080D5F34: .4byte gPlayerParty
-_080D5F38: .4byte gUnknown_3004FE0
-_080D5F3C: .4byte sub_80D4944
- thumb_func_end LinkPartnerHandleSendOutPoke
-
- thumb_func_start sub_80D5F40
-sub_80D5F40: @ 80D5F40
- 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, _080D6084 @ =gBattlerPartyIndexes
- lsls r2, r6, 1
- adds r2, r0
- ldr r0, _080D6088 @ =gUnknown_2022BC4
- lsls r1, r6, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- strh r0, [r2]
- ldrh r1, [r2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D608C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _080D6090 @ =sub_8033E3C
- bl CreateInvisibleSpriteWithCallback
- ldr r1, _080D6094 @ =gUnknown_3004FFC
- mov r9, r1
- add r9, r6
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080D6098 @ =gMultiuseSpriteTemplate
- mov r10, r0
- adds r0, r6, 0
- movs r1, 0x2
- bl sub_8074480
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- bl GetBankSpriteDefault_Y
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r10
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, _080D609C @ =gBattlerSpriteIds
- adds r4, r6, r4
- strb r0, [r4]
- ldr r5, _080D60A0 @ =gSprites
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r4]
- strh r1, [r0, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x2E]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r6, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _080D60A4 @ =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, _080D60A8 @ =SpriteCallbackDummy
- str r1, [r0]
- movs r0, 0
- movs r1, 0xFF
- bl DoPokeballSendOutAnimation
- mov r1, r9
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x2E]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D6084: .4byte gBattlerPartyIndexes
-_080D6088: .4byte gUnknown_2022BC4
-_080D608C: .4byte gPlayerParty
-_080D6090: .4byte sub_8033E3C
-_080D6094: .4byte gUnknown_3004FFC
-_080D6098: .4byte gMultiuseSpriteTemplate
-_080D609C: .4byte gBattlerSpriteIds
-_080D60A0: .4byte gSprites
-_080D60A4: .4byte gBattleMonForms
-_080D60A8: .4byte SpriteCallbackDummy
- thumb_func_end sub_80D5F40
-
- thumb_func_start LinkPartnerHandleReturnPokeToBall
-LinkPartnerHandleReturnPokeToBall: @ 80D60AC
- push {r4-r6,lr}
- ldr r1, _080D60E0 @ =gUnknown_2022BC4
- ldr r6, _080D60E4 @ =gActiveBattler
- ldrb r2, [r6]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r3, [r0]
- cmp r3, 0
- bne _080D60F4
- ldr r0, _080D60E8 @ =gUnknown_2024018
- 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, _080D60EC @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D60F0 @ =sub_80D613C
- str r1, [r0]
- b _080D612A
- .align 2, 0
-_080D60E0: .4byte gUnknown_2022BC4
-_080D60E4: .4byte gActiveBattler
-_080D60E8: .4byte gUnknown_2024018
-_080D60EC: .4byte gUnknown_3004FE0
-_080D60F0: .4byte sub_80D613C
-_080D60F4:
- ldr r5, _080D6130 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080D6134 @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, _080D6138 @ =gUnknown_3004FF0
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl sub_80D49E8
-_080D612A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D6130: .4byte gBattlerSpriteIds
-_080D6134: .4byte gSprites
-_080D6138: .4byte gUnknown_3004FF0
- thumb_func_end LinkPartnerHandleReturnPokeToBall
-
- thumb_func_start sub_80D613C
-sub_80D613C: @ 80D613C
- push {r4-r6,lr}
- ldr r6, _080D615C @ =gUnknown_2024018
- ldr r4, [r6]
- ldr r5, _080D6160 @ =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 _080D6164
- cmp r0, 0x1
- beq _080D6192
- b _080D61BA
- .align 2, 0
-_080D615C: .4byte gUnknown_2024018
-_080D6160: .4byte gActiveBattler
-_080D6164:
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080D617E
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_080D617E:
- 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 _080D61BA
-_080D6192:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080D61BA
- strb r0, [r3, 0x4]
- ldrb r2, [r5]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x1
- bl InitAndLaunchSpecialAnimation
- ldr r1, _080D61C0 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D61C4 @ =sub_80D46A8
- str r1, [r0]
-_080D61BA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D61C0: .4byte gUnknown_3004FE0
-_080D61C4: .4byte sub_80D46A8
- thumb_func_end sub_80D613C
-
- thumb_func_start sub_80D61C8
-sub_80D61C8: @ 80D61C8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r6, _080D6240 @ =gActiveBattler
- ldrb r0, [r6]
- bl GetBattlerPosition
- movs r1, 0x2
- ands r1, r0
- movs r7, 0x20
- cmp r1, 0
- beq _080D61E2
- movs r7, 0x5A
-_080D61E2:
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- ldr r5, _080D6244 @ =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- movs r4, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _080D6228
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x1
- beq _080D6228
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1]
- ands r4, r0
- cmp r4, 0x3
- bne _080D6248
-_080D6228:
- ldr r0, _080D6240 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBankMultiplayerId
- ldr r2, _080D6244 @ =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x13]
- adds r4, r0, 0x2
- b _080D6258
- .align 2, 0
-_080D6240: .4byte gActiveBattler
-_080D6244: .4byte gLinkPlayers
-_080D6248:
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r4, [r1, 0x13]
-_080D6258:
- ldr r5, _080D6318 @ =gActiveBattler
- ldrb r1, [r5]
- adds r0, r4, 0
- bl sub_8034750
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r6, _080D631C @ =gMultiuseSpriteTemplate
- mov r8, r7
- ldr r0, _080D6320 @ =gUnknown_8239F8C
- lsls r4, 2
- adds r4, r0
- ldrb r0, [r4]
- movs r4, 0x8
- subs r4, r0
- lsls r4, 18
- movs r0, 0xA0
- lsls r0, 15
- adds r4, r0
- asrs r4, 16
- ldrb r0, [r5]
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r6, 0
- mov r1, r8
- adds r2, r4, 0
- bl CreateSprite
- ldr r6, _080D6324 @ =gBattlerSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, _080D6328 @ =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _080D632C @ =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _080D6330 @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _080D6334 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D6338 @ =sub_80D4270
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D6318: .4byte gActiveBattler
-_080D631C: .4byte gMultiuseSpriteTemplate
-_080D6320: .4byte gUnknown_8239F8C
-_080D6324: .4byte gBattlerSpriteIds
-_080D6328: .4byte gSprites
-_080D632C: .4byte 0x0000fffe
-_080D6330: .4byte sub_8033EEC
-_080D6334: .4byte gUnknown_3004FE0
-_080D6338: .4byte sub_80D4270
- thumb_func_end sub_80D61C8
-
- thumb_func_start sub_80D633C
-sub_80D633C: @ 80D633C
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D633C
-
- thumb_func_start sub_80D6348
-sub_80D6348: @ 80D6348
- push {r4-r6,lr}
- ldr r6, _080D63D4 @ =gBattlerSpriteIds
- ldr r4, _080D63D8 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _080D63DC @ =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
- ldr r1, _080D63E0 @ =0x0000ffd8
- 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, _080D63E4 @ =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, _080D63E8 @ =SpriteCallbackDummy
- bl StoreSpriteCallbackInData6
- ldr r1, _080D63EC @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D63F0 @ =sub_80D42A8
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D63D4: .4byte gBattlerSpriteIds
-_080D63D8: .4byte gActiveBattler
-_080D63DC: .4byte gSprites
-_080D63E0: .4byte 0x0000ffd8
-_080D63E4: .4byte sub_8075590
-_080D63E8: .4byte SpriteCallbackDummy
-_080D63EC: .4byte gUnknown_3004FE0
-_080D63F0: .4byte sub_80D42A8
- thumb_func_end sub_80D6348
-
- thumb_func_start sub_80D63F4
-sub_80D63F4: @ 80D63F4
- push {r4-r6,lr}
- ldr r6, _080D6440 @ =gUnknown_2024018
- ldr r4, [r6]
- ldr r5, _080D6444 @ =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 _080D6448
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080D6428
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_080D6428:
- 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 _080D64BE
- .align 2, 0
-_080D6440: .4byte gUnknown_2024018
-_080D6444: .4byte gActiveBattler
-_080D6448:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080D64BE
- strb r4, [r3, 0x4]
- ldr r2, _080D64C4 @ =gBattlerPartyIndexes
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _080D64C8 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- movs r1, 0x40
- negs r1, r1
- movs r0, 0x10
- bl PlaySE12WithPanning
- ldr r2, _080D64CC @ =gSprites
- ldr r3, _080D64D0 @ =gBattlerSpriteIds
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r4, [r0, 0x30]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strh r1, [r0, 0x32]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _080D64D4 @ =sub_8012110
- str r1, [r0]
- ldr r1, _080D64D8 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D64DC @ =sub_80D4640
- str r1, [r0]
-_080D64BE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D64C4: .4byte gBattlerPartyIndexes
-_080D64C8: .4byte gPlayerParty
-_080D64CC: .4byte gSprites
-_080D64D0: .4byte gBattlerSpriteIds
-_080D64D4: .4byte sub_8012110
-_080D64D8: .4byte gUnknown_3004FE0
-_080D64DC: .4byte sub_80D4640
- thumb_func_end sub_80D63F4
-
- thumb_func_start sub_80D64E0
-sub_80D64E0: @ 80D64E0
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D64E0
-
- thumb_func_start sub_80D64EC
-sub_80D64EC: @ 80D64EC
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D64EC
-
- thumb_func_start sub_80D64F8
-sub_80D64F8: @ 80D64F8
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D64F8
-
- thumb_func_start sub_80D6504
-sub_80D6504: @ 80D6504
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6504
-
- thumb_func_start sub_80D6510
-sub_80D6510: @ 80D6510
- push {r4-r6,lr}
- ldr r6, _080D65F4 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- beq _080D6522
- b _080D6636
-_080D6522:
- ldr r0, _080D65F8 @ =gUnknown_2022BC4
- 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, _080D65FC @ =gAnimMoveTurn
- mov r1, r12
- adds r1, 0x3
- adds r2, r1
- ldrb r1, [r2]
- strb r1, [r5]
- ldr r4, _080D6600 @ =gUnknown_2037EEC
- 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, _080D6604 @ =gUnknown_2037EE8
- 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, _080D6608 @ =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, _080D660C @ =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, _080D6610 @ =gAnimDisableStructPtr
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x10
- adds r2, r1
- str r2, [r3]
- ldr r3, _080D6614 @ =gUnknown_2024008
- 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 _080D6618
- bl sub_80D49E8
- b _080D6636
- .align 2, 0
-_080D65F4: .4byte gActiveBattler
-_080D65F8: .4byte gUnknown_2022BC4
-_080D65FC: .4byte gAnimMoveTurn
-_080D6600: .4byte gUnknown_2037EEC
-_080D6604: .4byte gUnknown_2037EE8
-_080D6608: .4byte gUnknown_2037EFE
-_080D660C: .4byte gUnknown_2037F00
-_080D6610: .4byte gAnimDisableStructPtr
-_080D6614: .4byte gUnknown_2024008
-_080D6618:
- ldr r0, _080D663C @ =gUnknown_2024018
- 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, _080D6640 @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D6644 @ =sub_80D6648
- str r1, [r0]
-_080D6636:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D663C: .4byte gUnknown_2024018
-_080D6640: .4byte gUnknown_3004FE0
-_080D6644: .4byte sub_80D6648
- thumb_func_end sub_80D6510
-
- thumb_func_start sub_80D6648
-sub_80D6648: @ 80D6648
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, _080D6694 @ =gUnknown_2022BC4
- ldr r6, _080D6698 @ =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, _080D669C @ =gUnknown_2024018
- 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 _080D66E0
- cmp r2, 0x1
- bgt _080D66A0
- cmp r2, 0
- beq _080D66AA
- b _080D67BC
- .align 2, 0
-_080D6694: .4byte gUnknown_2022BC4
-_080D6698: .4byte gActiveBattler
-_080D669C: .4byte gUnknown_2024018
-_080D66A0:
- cmp r2, 0x2
- beq _080D670A
- cmp r2, 0x3
- beq _080D6780
- b _080D67BC
-_080D66AA:
- ldr r1, [r5]
- lsls r0, r3, 2
- adds r1, r0, r1
- ldrb r2, [r1]
- movs r0, 0xC
- ands r0, r2
- cmp r0, 0x4
- bne _080D66CC
- 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
-_080D66CC:
- 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 _080D67BC
-_080D66E0:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _080D67BC
- 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 _080D67BC
-_080D670A:
- ldr r0, _080D6770 @ =gUnknown_2037EDC
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _080D6774 @ =gUnknown_2037EE1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080D67BC
- 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 _080D6758
- mov r0, r8
- cmp r0, 0x1
- bhi _080D6758
- 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]
-_080D6758:
- ldr r0, _080D6778 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _080D677C @ =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 _080D67BC
- .align 2, 0
-_080D6770: .4byte gUnknown_2037EDC
-_080D6774: .4byte gUnknown_2037EE1
-_080D6778: .4byte gUnknown_2024018
-_080D677C: .4byte gActiveBattler
-_080D6780:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080D67BC
- 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 sub_80D49E8
-_080D67BC:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80D6648
-
- thumb_func_start sub_80D67CC
-sub_80D67CC: @ 80D67CC
- push {r4,lr}
- ldr r0, _080D6800 @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080D6804 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _080D6808 @ =gActiveBattler
- ldrb r4, [r0]
- lsls r4, 9
- ldr r0, _080D680C @ =gUnknown_2022BC6
- adds r4, r0
- ldrh r0, [r4]
- bl sub_80D7274
- ldrh r0, [r4]
- bl sub_80D89B0
- lsls r0, 24
- cmp r0, 0
- beq _080D6814
- ldr r0, _080D6810 @ =gDisplayedStringBattle
- movs r1, 0x40
- bl sub_80D87BC
- b _080D681C
- .align 2, 0
-_080D6800: .4byte gBattle_BG0_X
-_080D6804: .4byte gBattle_BG0_Y
-_080D6808: .4byte gActiveBattler
-_080D680C: .4byte gUnknown_2022BC6
-_080D6810: .4byte gDisplayedStringBattle
-_080D6814:
- ldr r0, _080D6830 @ =gDisplayedStringBattle
- movs r1, 0
- bl sub_80D87BC
-_080D681C:
- ldr r1, _080D6834 @ =gUnknown_3004FE0
- ldr r0, _080D6838 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D683C @ =sub_80D4718
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D6830: .4byte gDisplayedStringBattle
-_080D6834: .4byte gUnknown_3004FE0
-_080D6838: .4byte gActiveBattler
-_080D683C: .4byte sub_80D4718
- thumb_func_end sub_80D67CC
-
- thumb_func_start sub_80D6840
-sub_80D6840: @ 80D6840
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6840
-
- thumb_func_start sub_80D684C
-sub_80D684C: @ 80D684C
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D684C
-
- thumb_func_start sub_80D6858
-sub_80D6858: @ 80D6858
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6858
-
- thumb_func_start sub_80D6864
-sub_80D6864: @ 80D6864
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6864
-
- thumb_func_start sub_80D6870
-sub_80D6870: @ 80D6870
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6870
-
- thumb_func_start sub_80D687C
-sub_80D687C: @ 80D687C
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D687C
-
- thumb_func_start sub_80D6888
-sub_80D6888: @ 80D6888
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6888
-
- thumb_func_start sub_80D6894
-sub_80D6894: @ 80D6894
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r0, 0
- bl LoadBattleBarGfx
- ldr r3, _080D690C @ =gUnknown_2022BC4
- ldr r0, _080D6910 @ =gActiveBattler
- mov r9, r0
- ldrb r4, [r0]
- lsls r2, r4, 9
- adds r0, r3, 0x2
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r3, 0x3
- adds r2, r3
- ldrb r0, [r2]
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- asrs r7, r1, 16
- ldr r0, _080D6914 @ =0x00007fff
- cmp r7, r0
- beq _080D6924
- ldr r6, _080D6918 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r6
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _080D691C @ =gPlayerParty
- 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, _080D6920 @ =gUnknown_3004FF0
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- mov r2, r8
- bl SetBattleBarStruct
- b _080D694E
- .align 2, 0
-_080D690C: .4byte gUnknown_2022BC4
-_080D6910: .4byte gActiveBattler
-_080D6914: .4byte 0x00007fff
-_080D6918: .4byte gBattlerPartyIndexes
-_080D691C: .4byte gPlayerParty
-_080D6920: .4byte gUnknown_3004FF0
-_080D6924:
- ldr r1, _080D696C @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D6970 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, _080D6974 @ =gUnknown_3004FF0
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- movs r3, 0
- bl SetBattleBarStruct
-_080D694E:
- ldr r1, _080D6978 @ =gUnknown_3004FE0
- ldr r0, _080D697C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D6980 @ =sub_80D45D0
- 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
-_080D696C: .4byte gBattlerPartyIndexes
-_080D6970: .4byte gPlayerParty
-_080D6974: .4byte gUnknown_3004FF0
-_080D6978: .4byte gUnknown_3004FE0
-_080D697C: .4byte gActiveBattler
-_080D6980: .4byte sub_80D45D0
- thumb_func_end sub_80D6894
-
- thumb_func_start sub_80D6984
-sub_80D6984: @ 80D6984
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6984
-
- thumb_func_start sub_80D6990
-sub_80D6990: @ 80D6990
- push {r4,lr}
- ldr r4, _080D69EC @ =gActiveBattler
- ldrb r0, [r4]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _080D69E4
- ldr r0, _080D69F0 @ =gUnknown_3004FF0
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _080D69F4 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _080D69F8 @ =gPlayerParty
- adds r1, r2
- movs r2, 0x9
- bl UpdateHealthboxAttribute
- ldrb r2, [r4]
- ldr r0, _080D69FC @ =gUnknown_2024018
- 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, _080D6A00 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D6A04 @ =sub_80D4A60
- str r1, [r0]
-_080D69E4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D69EC: .4byte gActiveBattler
-_080D69F0: .4byte gUnknown_3004FF0
-_080D69F4: .4byte gBattlerPartyIndexes
-_080D69F8: .4byte gPlayerParty
-_080D69FC: .4byte gUnknown_2024018
-_080D6A00: .4byte gUnknown_3004FE0
-_080D6A04: .4byte sub_80D4A60
- thumb_func_end sub_80D6990
-
- thumb_func_start sub_80D6A08
-sub_80D6A08: @ 80D6A08
- push {r4,r5,lr}
- ldr r5, _080D6A60 @ =gActiveBattler
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _080D6A58
- ldr r4, _080D6A64 @ =gUnknown_2022BC4
- 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, _080D6A68 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D6A6C @ =sub_80D4A60
- str r1, [r0]
-_080D6A58:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D6A60: .4byte gActiveBattler
-_080D6A64: .4byte gUnknown_2022BC4
-_080D6A68: .4byte gUnknown_3004FE0
-_080D6A6C: .4byte sub_80D4A60
- thumb_func_end sub_80D6A08
-
- thumb_func_start sub_80D6A70
-sub_80D6A70: @ 80D6A70
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6A70
-
- thumb_func_start sub_80D6A7C
-sub_80D6A7C: @ 80D6A7C
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6A7C
-
- thumb_func_start sub_80D6A88
-sub_80D6A88: @ 80D6A88
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6A88
-
- thumb_func_start sub_80D6A94
-sub_80D6A94: @ 80D6A94
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6A94
-
- thumb_func_start sub_80D6AA0
-sub_80D6AA0: @ 80D6AA0
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6AA0
-
- thumb_func_start sub_80D6AAC
-sub_80D6AAC: @ 80D6AAC
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6AAC
-
- thumb_func_start sub_80D6AB8
-sub_80D6AB8: @ 80D6AB8
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6AB8
-
- thumb_func_start sub_80D6AC4
-sub_80D6AC4: @ 80D6AC4
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6AC4
-
- thumb_func_start sub_80D6AD0
-sub_80D6AD0: @ 80D6AD0
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6AD0
-
- thumb_func_start LinkPartnerHandlecmd37
-LinkPartnerHandlecmd37: @ 80D6ADC
- push {lr}
- ldr r2, _080D6AF4 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x80
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl sub_80D49E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D6AF4: .4byte gUnknown_2022870
- thumb_func_end LinkPartnerHandlecmd37
-
- thumb_func_start LinkPartnerHandlecmd38
-LinkPartnerHandlecmd38: @ 80D6AF8
- push {lr}
- ldr r3, _080D6B24 @ =gUnknown_2022870
- ldr r1, _080D6B28 @ =gUnknown_2022BC4
- ldr r0, _080D6B2C @ =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 sub_80D49E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D6B24: .4byte gUnknown_2022870
-_080D6B28: .4byte gUnknown_2022BC4
-_080D6B2C: .4byte gActiveBattler
- thumb_func_end LinkPartnerHandlecmd38
-
- thumb_func_start LinkPartnerHandlecmd39
-LinkPartnerHandlecmd39: @ 80D6B30
- push {lr}
- ldr r2, _080D6B44 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- bl sub_80D49E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D6B44: .4byte gUnknown_2022870
- thumb_func_end LinkPartnerHandlecmd39
-
- thumb_func_start LinkPartnerHandlecmd40
-LinkPartnerHandlecmd40: @ 80D6B48
- push {lr}
- ldr r3, _080D6B6C @ =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 sub_80D49E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D6B6C: .4byte gUnknown_2022870
- thumb_func_end LinkPartnerHandlecmd40
-
- thumb_func_start LinkPartnerHandleHitAnimation
-LinkPartnerHandleHitAnimation: @ 80D6B70
- push {r4,lr}
- ldr r3, _080D6B98 @ =gSprites
- ldr r2, _080D6B9C @ =gBattlerSpriteIds
- ldr r4, _080D6BA0 @ =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 _080D6BA4
- bl sub_80D49E8
- b _080D6BCE
- .align 2, 0
-_080D6B98: .4byte gSprites
-_080D6B9C: .4byte gBattlerSpriteIds
-_080D6BA0: .4byte gActiveBattler
-_080D6BA4:
- ldr r1, _080D6BD4 @ =gUnknown_2024005
- 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, _080D6BD8 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D6BDC @ =sub_80D4730
- str r1, [r0]
-_080D6BCE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D6BD4: .4byte gUnknown_2024005
-_080D6BD8: .4byte gUnknown_3004FE0
-_080D6BDC: .4byte sub_80D4730
- thumb_func_end LinkPartnerHandleHitAnimation
-
- thumb_func_start sub_80D6BE0
-sub_80D6BE0: @ 80D6BE0
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D6BE0
-
- thumb_func_start LinkPartnerHandleEffectivenessSound
-LinkPartnerHandleEffectivenessSound: @ 80D6BEC
- push {r4,lr}
- ldr r4, _080D6C28 @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _080D6C00
- movs r3, 0xC0
-_080D6C00:
- ldr r2, _080D6C2C @ =gUnknown_2022BC4
- 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 sub_80D49E8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D6C28: .4byte gActiveBattler
-_080D6C2C: .4byte gUnknown_2022BC4
- thumb_func_end LinkPartnerHandleEffectivenessSound
-
- thumb_func_start LinkPartnerHandlecmd44
-LinkPartnerHandlecmd44: @ 80D6C30
- push {lr}
- ldr r2, _080D6C58 @ =gUnknown_2022BC4
- ldr r0, _080D6C5C @ =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 sub_80D49E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D6C58: .4byte gUnknown_2022BC4
-_080D6C5C: .4byte gActiveBattler
- thumb_func_end LinkPartnerHandlecmd44
-
- thumb_func_start LinkPartnerHandleFaintingCry
-LinkPartnerHandleFaintingCry: @ 80D6C60
- push {lr}
- ldr r1, _080D6C94 @ =gBattlerPartyIndexes
- ldr r0, _080D6C98 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D6C9C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- negs r1, r1
- movs r2, 0x5
- bl PlayCry3
- bl sub_80D49E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D6C94: .4byte gBattlerPartyIndexes
-_080D6C98: .4byte gActiveBattler
-_080D6C9C: .4byte gPlayerParty
- thumb_func_end LinkPartnerHandleFaintingCry
-
- thumb_func_start LinkPartnerHandleIntroSlide
-LinkPartnerHandleIntroSlide: @ 80D6CA0
- push {lr}
- ldr r1, _080D6CC8 @ =gUnknown_2022BC4
- ldr r0, _080D6CCC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80BC3A0
- ldr r2, _080D6CD0 @ =gUnknown_2023F4C
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl sub_80D49E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D6CC8: .4byte gUnknown_2022BC4
-_080D6CCC: .4byte gActiveBattler
-_080D6CD0: .4byte gUnknown_2023F4C
- thumb_func_end LinkPartnerHandleIntroSlide
-
- thumb_func_start sub_80D6CD4
-sub_80D6CD4: @ 80D6CD4
- push {r4-r7,lr}
- ldr r5, _080D6DDC @ =gBattlerSpriteIds
- ldr r6, _080D6DE0 @ =gActiveBattler
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080D6DE4 @ =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, 0x32
- 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
- ldr r1, _080D6DE8 @ =0x0000ffd8
- 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, _080D6DEC @ =sub_8075590
- str r1, [r0]
- ldrb r2, [r6]
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r2, [r0, 0x38]
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _080D6DF0 @ =sub_80335F8
- bl StoreSpriteCallbackInData6
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, _080D6DF4 @ =0x0000d6f9
- bl AllocSpritePalette
- lsls r0, 24
- lsrs r7, r0, 24
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- ldr r4, _080D6DF8 @ =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- movs r5, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _080D6DC2
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0x1
- beq _080D6DC2
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r1]
- ands r5, r0
- cmp r5, 0x3
- bne _080D6DFC
-_080D6DC2:
- ldr r0, _080D6DE0 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBankMultiplayerId
- ldr r2, _080D6DF8 @ =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x13]
- adds r0, 0x2
- b _080D6E0C
- .align 2, 0
-_080D6DDC: .4byte gBattlerSpriteIds
-_080D6DE0: .4byte gActiveBattler
-_080D6DE4: .4byte gSprites
-_080D6DE8: .4byte 0x0000ffd8
-_080D6DEC: .4byte sub_8075590
-_080D6DF0: .4byte sub_80335F8
-_080D6DF4: .4byte 0x0000d6f9
-_080D6DF8: .4byte gLinkPlayers
-_080D6DFC:
- ldrb r0, [r6]
- bl GetBankMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1, 0x13]
-_080D6E0C:
- ldr r1, _080D6EA4 @ =gUnknown_8239FD4
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0]
- lsls r4, r7, 4
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- movs r2, 0x20
- bl LoadCompressedPalette
- ldr r2, _080D6EA8 @ =gSprites
- ldr r1, _080D6EAC @ =gBattlerSpriteIds
- ldr r5, _080D6EB0 @ =gActiveBattler
- ldrb r0, [r5]
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x5]
- ldr r0, _080D6EB4 @ =sub_80D6ED0
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _080D6EB8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- ldrb r0, [r5]
- strh r0, [r1, 0x8]
- ldr r3, _080D6EBC @ =gUnknown_2024018
- ldr r0, [r3]
- ldrb r2, [r5]
- 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 _080D6E86
- ldr r0, _080D6EC0 @ =gUnknown_2024000
- 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
- str r1, [r0]
-_080D6E86:
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r0, [r2, 0x9]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _080D6EC8 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D6ECC @ =nullsub_77
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D6EA4: .4byte gUnknown_8239FD4
-_080D6EA8: .4byte gSprites
-_080D6EAC: .4byte gBattlerSpriteIds
-_080D6EB0: .4byte gActiveBattler
-_080D6EB4: .4byte sub_80D6ED0
-_080D6EB8: .4byte gTasks
-_080D6EBC: .4byte gUnknown_2024018
-_080D6EC0: .4byte gUnknown_2024000
-_080D6EC4: .4byte sub_80491B0
-_080D6EC8: .4byte gUnknown_3004FE0
-_080D6ECC: .4byte nullsub_77
- thumb_func_end sub_80D6CD4
-
- thumb_func_start sub_80D6ED0
-sub_80D6ED0: @ 80D6ED0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _080D6EF8 @ =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0xA]
- movs r3, 0xA
- ldrsh r0, [r1, r3]
- cmp r0, 0x17
- bgt _080D6EFC
- adds r0, r2, 0x1
- strh r0, [r1, 0xA]
- b _080D6FB8
- .align 2, 0
-_080D6EF8: .4byte gTasks
-_080D6EFC:
- ldr r7, _080D6F3C @ =gActiveBattler
- ldrb r0, [r7]
- mov r9, r0
- ldrh r0, [r1, 0x8]
- strb r0, [r7]
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _080D6F1C
- ldr r0, _080D6F40 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080D6F4C
-_080D6F1C:
- ldr r0, _080D6F44 @ =gUnknown_2022BC4
- ldrb r1, [r7]
- lsls r2, r1, 9
- adds r0, 0x1
- adds r2, r0
- ldr r0, _080D6F48 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- strb r0, [r2]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_80D5F40
- b _080D6FA0
- .align 2, 0
-_080D6F3C: .4byte gActiveBattler
-_080D6F40: .4byte gBattleTypeFlags
-_080D6F44: .4byte gUnknown_2022BC4
-_080D6F48: .4byte gBattlerPartyIndexes
-_080D6F4C:
- ldr r4, _080D6FC4 @ =gUnknown_2022BC4
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r4, 0x1
- adds r1, r4
- ldr r5, _080D6FC8 @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_80D5F40
- ldrb r0, [r7]
- movs r6, 0x2
- eors r0, r6
- strb r0, [r7]
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r1, r4
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r1, [r7]
- lsls r0, r1, 1
- adds r0, r5
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _080D6FCC @ =gPlayerParty
- adds r0, r2
- bl sub_8034498
- ldrb r0, [r7]
- movs r1, 0
- bl sub_80D5F40
- ldrb r0, [r7]
- eors r0, r6
- strb r0, [r7]
-_080D6FA0:
- ldr r1, _080D6FD0 @ =gUnknown_3004FE0
- ldr r2, _080D6FD4 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D6FD8 @ =sub_80D443C
- str r1, [r0]
- mov r3, r9
- strb r3, [r2]
- mov r0, r8
- bl DestroyTask
-_080D6FB8:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D6FC4: .4byte gUnknown_2022BC4
-_080D6FC8: .4byte gBattlerPartyIndexes
-_080D6FCC: .4byte gPlayerParty
-_080D6FD0: .4byte gUnknown_3004FE0
-_080D6FD4: .4byte gActiveBattler
-_080D6FD8: .4byte sub_80D443C
- thumb_func_end sub_80D6ED0
-
- thumb_func_start sub_80D6FDC
-sub_80D6FDC: @ 80D6FDC
- push {r4-r6,lr}
- ldr r1, _080D7004 @ =gUnknown_2022BC4
- ldr r0, _080D7008 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _080D700C
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080D700C
- bl sub_80D49E8
- b _080D7080
- .align 2, 0
-_080D7004: .4byte gUnknown_2022BC4
-_080D7008: .4byte gActiveBattler
-_080D700C:
- ldr r6, _080D7088 @ =gUnknown_2024018
- ldr r0, [r6]
- ldr r5, _080D708C @ =gActiveBattler
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- ldrb r0, [r5]
- lsls r3, r0, 9
- ldr r4, _080D7090 @ =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, _080D7094 @ =gUnknown_2024000
- ldrb r1, [r5]
- adds r1, r2
- movs r3, 0
- strb r0, [r1]
- 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 _080D7074
- 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]
-_080D7074:
- ldr r0, _080D7098 @ =gUnknown_3004FE0
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, _080D709C @ =sub_80D70A0
- str r0, [r1]
-_080D7080:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7088: .4byte gUnknown_2024018
-_080D708C: .4byte gActiveBattler
-_080D7090: .4byte gUnknown_2022BC8
-_080D7094: .4byte gUnknown_2024000
-_080D7098: .4byte gUnknown_3004FE0
-_080D709C: .4byte sub_80D70A0
- thumb_func_end sub_80D6FDC
-
- thumb_func_start sub_80D70A0
-sub_80D70A0: @ 80D70A0
- push {r4,lr}
- ldr r4, _080D70E0 @ =gUnknown_2024018
- ldr r0, [r4]
- ldr r3, _080D70E4 @ =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 _080D70D8
- 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 sub_80D49E8
-_080D70D8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D70E0: .4byte gUnknown_2024018
-_080D70E4: .4byte gActiveBattler
- thumb_func_end sub_80D70A0
-
- thumb_func_start sub_80D70E8
-sub_80D70E8: @ 80D70E8
- push {lr}
- ldr r0, _080D7124 @ =gUnknown_2024018
- ldr r1, [r0]
- ldr r0, _080D7128 @ =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 _080D711A
- ldr r2, _080D712C @ =gTasks
- ldr r0, _080D7130 @ =gUnknown_2024000
- 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
- str r1, [r0]
-_080D711A:
- bl sub_80D49E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D7124: .4byte gUnknown_2024018
-_080D7128: .4byte gActiveBattler
-_080D712C: .4byte gTasks
-_080D7130: .4byte gUnknown_2024000
-_080D7134: .4byte sub_80491B0
- thumb_func_end sub_80D70E8
-
- thumb_func_start sub_80D7138
-sub_80D7138: @ 80D7138
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D7138
-
- thumb_func_start LinkPartnerHandleSpriteInvisibility
-LinkPartnerHandleSpriteInvisibility: @ 80D7144
- push {r4,lr}
- ldr r4, _080D7194 @ =gActiveBattler
- ldrb r0, [r4]
- bl sub_8075224
- lsls r0, 24
- cmp r0, 0
- beq _080D718A
- ldr r3, _080D7198 @ =gSprites
- ldr r0, _080D719C @ =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, _080D71A0 @ =gUnknown_2022BC4
- 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
-_080D718A:
- bl sub_80D49E8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7194: .4byte gActiveBattler
-_080D7198: .4byte gSprites
-_080D719C: .4byte gBattlerSpriteIds
-_080D71A0: .4byte gUnknown_2022BC4
- thumb_func_end LinkPartnerHandleSpriteInvisibility
-
- thumb_func_start LinkPartnerHandleBattleAnimation
-LinkPartnerHandleBattleAnimation: @ 80D71A4
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, _080D71E8 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _080D71FC
- ldr r5, _080D71EC @ =gUnknown_2022BC4
- 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 _080D71F0
- bl sub_80D49E8
- b _080D71FC
- .align 2, 0
-_080D71E8: .4byte gActiveBattler
-_080D71EC: .4byte gUnknown_2022BC4
-_080D71F0:
- ldr r0, _080D7204 @ =gUnknown_3004FE0
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _080D7208 @ =sub_80D4A90
- str r0, [r1]
-_080D71FC:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D7204: .4byte gUnknown_3004FE0
-_080D7208: .4byte sub_80D4A90
- thumb_func_end LinkPartnerHandleBattleAnimation
-
- thumb_func_start sub_80D720C
-sub_80D720C: @ 80D720C
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D720C
-
- thumb_func_start sub_80D7218
-sub_80D7218: @ 80D7218
- push {lr}
- bl sub_80D49E8
- pop {r0}
- bx r0
- thumb_func_end sub_80D7218
-
- thumb_func_start LinkPartnerHandlecmd55
-LinkPartnerHandlecmd55: @ 80D7224
- push {r4,lr}
- ldr r2, _080D725C @ =gBattleOutcome
- ldr r1, _080D7260 @ =gUnknown_2022BC4
- ldr r4, _080D7264 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl sub_80D49E8
- ldr r1, _080D7268 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080D726C @ =sub_802F6A8
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D725C: .4byte gBattleOutcome
-_080D7260: .4byte gUnknown_2022BC4
-_080D7264: .4byte gActiveBattler
-_080D7268: .4byte gUnknown_3004FE0
-_080D726C: .4byte sub_802F6A8
- thumb_func_end LinkPartnerHandlecmd55
-
- thumb_func_start nullsub_78
-nullsub_78: @ 80D7270
- bx lr
- thumb_func_end nullsub_78
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_oak.s b/asm/battle_controller_oak.s
index 9f878733e..47230be60 100644
--- a/asm/battle_controller_oak.s
+++ b/asm/battle_controller_oak.s
@@ -10,9 +10,9 @@ nullsub_81: @ 80E75AC
bx lr
thumb_func_end nullsub_81
- thumb_func_start sub_80E75B0
-sub_80E75B0: @ 80E75B0
- ldr r1, _080E75DC @ =gUnknown_3004FE0
+ thumb_func_start SetControllerToOakOrOldman
+SetControllerToOakOrOldman: @ 80E75B0
+ ldr r1, _080E75DC @ =gBattlerControllerFuncs
ldr r0, _080E75E0 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -35,16 +35,16 @@ sub_80E75B0: @ 80E75B0
strb r1, [r0]
bx lr
.align 2, 0
-_080E75DC: .4byte gUnknown_3004FE0
+_080E75DC: .4byte gBattlerControllerFuncs
_080E75E0: .4byte gActiveBattler
_080E75E4: .4byte sub_80E75EC
_080E75E8: .4byte gBattleStruct
- thumb_func_end sub_80E75B0
+ thumb_func_end SetControllerToOakOrOldman
thumb_func_start sub_80E75EC
sub_80E75EC: @ 80E75EC
push {lr}
- ldr r2, _080E7620 @ =gUnknown_2023BC8
+ ldr r2, _080E7620 @ =gBattleControllerExecFlags
ldr r1, _080E7624 @ =gBitTable
ldr r0, _080E7628 @ =gActiveBattler
ldrb r3, [r0]
@@ -55,7 +55,7 @@ sub_80E75EC: @ 80E75EC
ands r1, r0
cmp r1, 0
beq _080E7638
- ldr r0, _080E762C @ =gUnknown_2022BC4
+ ldr r0, _080E762C @ =gBattleBufferA
lsls r1, r3, 9
adds r1, r0
ldrb r0, [r1]
@@ -69,10 +69,10 @@ sub_80E75EC: @ 80E75EC
bl _call_via_r0
b _080E7638
.align 2, 0
-_080E7620: .4byte gUnknown_2023BC8
+_080E7620: .4byte gBattleControllerExecFlags
_080E7624: .4byte gBitTable
_080E7628: .4byte gActiveBattler
-_080E762C: .4byte gUnknown_2022BC4
+_080E762C: .4byte gBattleBufferA
_080E7630: .4byte gUnknown_84020F8
_080E7634:
bl WallyBufferExecCompleted
@@ -86,7 +86,7 @@ sub_80E763C: @ 80E763C
push {r4-r7,lr}
mov r7, r8
push {r7}
- ldr r7, _080E769C @ =gUnknown_2022BC4
+ ldr r7, _080E769C @ =gBattleBufferA
ldr r4, _080E76A0 @ =gActiveBattler
ldrb r0, [r4]
lsls r2, r0, 9
@@ -101,12 +101,12 @@ sub_80E763C: @ 80E763C
movs r1, 0x1
movs r2, 0x7
movs r3, 0x1
- bl dp11b_obj_instanciate
+ bl DoBounceEffect
ldrb r0, [r4]
movs r1, 0
movs r2, 0x7
movs r3, 0x1
- bl dp11b_obj_instanciate
+ bl DoBounceEffect
ldr r0, _080E76A4 @ =gMain
ldrh r1, [r0, 0x2E]
movs r2, 0x1
@@ -116,7 +116,7 @@ sub_80E763C: @ 80E763C
beq _080E76D4
movs r0, 0x5
bl PlaySE
- ldr r1, _080E76A8 @ =gUnknown_2023FF8
+ ldr r1, _080E76A8 @ =gActionSelectionCursor
ldrb r0, [r4]
adds r0, r1
ldrb r0, [r0]
@@ -128,10 +128,10 @@ sub_80E763C: @ 80E763C
beq _080E76B6
b _080E781A
.align 2, 0
-_080E769C: .4byte gUnknown_2022BC4
+_080E769C: .4byte gBattleBufferA
_080E76A0: .4byte gActiveBattler
_080E76A4: .4byte gMain
-_080E76A8: .4byte gUnknown_2023FF8
+_080E76A8: .4byte gActionSelectionCursor
_080E76AC:
cmp r0, 0x2
beq _080E76C2
@@ -154,14 +154,14 @@ _080E76C8:
movs r0, 0x1
movs r1, 0x3
movs r2, 0
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
b _080E781A
_080E76D4:
movs r0, 0x20
ands r0, r1
cmp r0, 0
beq _080E770C
- ldr r5, _080E7708 @ =gUnknown_2023FF8
+ ldr r5, _080E7708 @ =gActionSelectionCursor
ldrb r0, [r4]
adds r0, r5
ldrb r1, [r0]
@@ -183,13 +183,13 @@ _080E76EE:
movs r2, 0x1
b _080E7794
.align 2, 0
-_080E7708: .4byte gUnknown_2023FF8
+_080E7708: .4byte gActionSelectionCursor
_080E770C:
movs r0, 0x10
ands r0, r1
cmp r0, 0
beq _080E7744
- ldr r5, _080E7740 @ =gUnknown_2023FF8
+ ldr r5, _080E7740 @ =gActionSelectionCursor
ldrb r0, [r4]
adds r0, r5
ldrb r1, [r0]
@@ -211,14 +211,14 @@ _080E7726:
movs r2, 0x1
b _080E7794
.align 2, 0
-_080E7740: .4byte gUnknown_2023FF8
+_080E7740: .4byte gActionSelectionCursor
_080E7744:
movs r0, 0x40
mov r8, r0
ands r0, r1
cmp r0, 0
beq _080E7764
- ldr r5, _080E7760 @ =gUnknown_2023FF8
+ ldr r5, _080E7760 @ =gActionSelectionCursor
ldrb r0, [r4]
adds r0, r5
ldrb r1, [r0]
@@ -228,13 +228,13 @@ _080E7744:
beq _080E7838
b _080E777C
.align 2, 0
-_080E7760: .4byte gUnknown_2023FF8
+_080E7760: .4byte gActionSelectionCursor
_080E7764:
movs r0, 0x80
ands r0, r1
cmp r0, 0
beq _080E77AC
- ldr r5, _080E77A8 @ =gUnknown_2023FF8
+ ldr r5, _080E77A8 @ =gActionSelectionCursor
ldrb r0, [r4]
adds r0, r5
ldrb r1, [r0]
@@ -263,7 +263,7 @@ _080E7794:
bl ActionSelectionCreateCursorAt
b _080E7838
.align 2, 0
-_080E77A8: .4byte gUnknown_2023FF8
+_080E77A8: .4byte gActionSelectionCursor
_080E77AC:
movs r0, 0x2
ands r0, r1
@@ -316,7 +316,7 @@ _080E780A:
movs r1, 0xC
_080E7814:
movs r2, 0
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
_080E781A:
bl WallyBufferExecCompleted
b _080E7838
@@ -329,7 +329,7 @@ _080E782C:
ands r0, r1
cmp r0, 0
beq _080E7838
- bl sub_8048A4C
+ bl SwapHpBarsWithHpText
_080E7838:
pop {r3}
mov r8, r3
@@ -410,7 +410,7 @@ _080E78B4:
movs r0, 0x1
movs r1, 0x1
movs r2, 0
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
bl WallyBufferExecCompleted
_080E78D8:
pop {r4}
@@ -478,7 +478,7 @@ sub_80E7930: @ 80E7930
negs r0, r0
ands r0, r1
strb r0, [r3]
- ldr r0, _080E796C @ =gUnknown_3004F80
+ ldr r0, _080E796C @ =gPreBattleCallback1
ldr r0, [r0]
str r0, [r2]
ldr r0, [r2, 0x8]
@@ -490,13 +490,13 @@ _080E795A:
_080E7960: .4byte gPaletteFade
_080E7964: .4byte gMain
_080E7968: .4byte 0x00000439
-_080E796C: .4byte gUnknown_3004F80
+_080E796C: .4byte gPreBattleCallback1
thumb_func_end sub_80E7930
thumb_func_start sub_80E7970
sub_80E7970: @ 80E7970
push {lr}
- ldr r0, _080E7984 @ =gUnknown_2024005
+ ldr r0, _080E7984 @ =gDoingBattleAnim
ldrb r0, [r0]
cmp r0, 0
bne _080E797E
@@ -505,14 +505,14 @@ _080E797E:
pop {r0}
bx r0
.align 2, 0
-_080E7984: .4byte gUnknown_2024005
+_080E7984: .4byte gDoingBattleAnim
thumb_func_end sub_80E7970
thumb_func_start sub_80E7988
sub_80E7988: @ 80E7988
push {lr}
- bl sub_802EA10
- ldr r2, _080E79AC @ =gUnknown_2023BC8
+ bl HandleInputChooseMove
+ ldr r2, _080E79AC @ =gBattleControllerExecFlags
ldr r1, _080E79B0 @ =gBitTable
ldr r0, _080E79B4 @ =gActiveBattler
ldrb r0, [r0]
@@ -528,7 +528,7 @@ _080E79A8:
pop {r0}
bx r0
.align 2, 0
-_080E79AC: .4byte gUnknown_2023BC8
+_080E79AC: .4byte gBattleControllerExecFlags
_080E79B0: .4byte gBitTable
_080E79B4: .4byte gActiveBattler
thumb_func_end sub_80E7988
@@ -542,7 +542,7 @@ sub_80E79B8: @ 80E79B8
ands r0, r1
cmp r0, 0
bne _080E79F6
- ldr r1, _080E7A00 @ =gUnknown_3004FE0
+ ldr r1, _080E7A00 @ =gBattlerControllerFuncs
ldr r2, _080E7A04 @ =gActiveBattler
ldrb r0, [r2]
lsls r0, 2
@@ -562,14 +562,14 @@ sub_80E79B8: @ 80E79B8
bl DestroyTask
bl FreeAllWindowBuffers
adds r0, r4, 0
- bl sub_81278DC
+ bl OpenPartyMenuInBattle
_080E79F6:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080E79FC: .4byte gPaletteFade
-_080E7A00: .4byte gUnknown_3004FE0
+_080E7A00: .4byte gBattlerControllerFuncs
_080E7A04: .4byte gActiveBattler
_080E7A08: .4byte sub_80E7A14
_080E7A0C: .4byte gTasks
@@ -581,7 +581,7 @@ sub_80E7A14: @ 80E7A14
push {lr}
ldr r0, _080E7A44 @ =gMain
ldr r1, [r0, 0x4]
- ldr r0, _080E7A48 @ =sub_8011100
+ ldr r0, _080E7A48 @ =BattleMainCB2
cmp r1, r0
bne _080E7A6A
ldr r0, _080E7A4C @ =gPaletteFade
@@ -598,11 +598,11 @@ sub_80E7A14: @ 80E7A14
ldrb r1, [r0]
ldr r2, _080E7A58 @ =gUnknown_203B0DC
movs r0, 0x1
- bl EmitChosenMonReturnValue
+ bl BtlController_EmitChosenMonReturnValue
b _080E7A66
.align 2, 0
_080E7A44: .4byte gMain
-_080E7A48: .4byte sub_8011100
+_080E7A48: .4byte BattleMainCB2
_080E7A4C: .4byte gPaletteFade
_080E7A50: .4byte gUnknown_203B0C0
_080E7A54: .4byte gUnknown_203B0C1
@@ -611,7 +611,7 @@ _080E7A5C:
movs r0, 0x1
movs r1, 0x6
movs r2, 0
- bl EmitChosenMonReturnValue
+ bl BtlController_EmitChosenMonReturnValue
_080E7A66:
bl WallyBufferExecCompleted
_080E7A6A:
@@ -628,7 +628,7 @@ sub_80E7A70: @ 80E7A70
ands r0, r1
cmp r0, 0
bne _080E7AC0
- ldr r1, _080E7AAC @ =gUnknown_3004FE0
+ ldr r1, _080E7AAC @ =gBattlerControllerFuncs
ldr r0, _080E7AB0 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -647,7 +647,7 @@ sub_80E7A70: @ 80E7A70
b _080E7AC0
.align 2, 0
_080E7AA8: .4byte gPaletteFade
-_080E7AAC: .4byte gUnknown_3004FE0
+_080E7AAC: .4byte gBattlerControllerFuncs
_080E7AB0: .4byte gActiveBattler
_080E7AB4: .4byte sub_80E7AC4
_080E7AB8: .4byte gBattleTypeFlags
@@ -663,7 +663,7 @@ sub_80E7AC4: @ 80E7AC4
push {lr}
ldr r0, _080E7B14 @ =gMain
ldr r1, [r0, 0x4]
- ldr r0, _080E7B18 @ =sub_8011100
+ ldr r0, _080E7B18 @ =BattleMainCB2
cmp r1, r0
bne _080E7B42
ldr r0, _080E7B1C @ =gPaletteFade
@@ -689,7 +689,7 @@ sub_80E7AC4: @ 80E7AC4
beq _080E7B34
movs r0, 0x4
bl sub_80EB2F4
- ldr r1, _080E7B28 @ =gUnknown_3004FE0
+ ldr r1, _080E7B28 @ =gBattlerControllerFuncs
ldr r0, _080E7B2C @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -699,18 +699,18 @@ sub_80E7AC4: @ 80E7AC4
b _080E7B42
.align 2, 0
_080E7B14: .4byte gMain
-_080E7B18: .4byte sub_8011100
+_080E7B18: .4byte BattleMainCB2
_080E7B1C: .4byte gPaletteFade
_080E7B20: .4byte gSpecialVar_ItemId
_080E7B24: .4byte gBattleTypeFlags
-_080E7B28: .4byte gUnknown_3004FE0
+_080E7B28: .4byte gBattlerControllerFuncs
_080E7B2C: .4byte gActiveBattler
_080E7B30: .4byte sub_80E8704
_080E7B34:
ldr r0, _080E7B48 @ =gSpecialVar_ItemId
ldrh r1, [r0]
movs r0, 0x1
- bl EmitOneReturnValue
+ bl BtlController_EmitOneReturnValue
bl WallyBufferExecCompleted
_080E7B42:
pop {r0}
@@ -722,7 +722,7 @@ _080E7B48: .4byte gSpecialVar_ItemId
thumb_func_start sub_80E7B4C
sub_80E7B4C: @ 80E7B4C
push {r4-r7,lr}
- ldr r4, _080E7CB0 @ =gUnknown_2024018
+ ldr r4, _080E7CB0 @ =gBattleSpritesDataPtr
ldr r0, [r4]
ldr r5, _080E7CB4 @ =gActiveBattler
ldrb r2, [r5]
@@ -796,7 +796,7 @@ _080E7BB2:
ands r0, r1
cmp r0, 0
bne _080E7CA8
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _080E7C46
@@ -817,7 +817,7 @@ _080E7BB2:
ldr r1, _080E7CC8 @ =gSprites
adds r0, r1
bl DestroySprite
- ldr r4, _080E7CCC @ =gUnknown_3004FF0
+ ldr r4, _080E7CCC @ =gHealthboxSpriteIds
ldrb r0, [r5]
adds r1, r6, 0
eors r1, r0
@@ -853,7 +853,7 @@ _080E7C46:
ldr r1, _080E7CC8 @ =gSprites
adds r0, r1
bl DestroySprite
- ldr r5, _080E7CCC @ =gUnknown_3004FF0
+ ldr r5, _080E7CCC @ =gHealthboxSpriteIds
ldrb r1, [r4]
adds r0, r1, r5
ldrb r0, [r0]
@@ -873,7 +873,7 @@ _080E7C46:
adds r0, r5
ldrb r0, [r0]
bl SetHealthboxSpriteVisible
- ldr r0, _080E7CB0 @ =gUnknown_2024018
+ ldr r0, _080E7CB0 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r2, [r0, 0x8]
ldrb r1, [r2, 0x9]
@@ -881,7 +881,7 @@ _080E7C46:
negs r0, r0
ands r0, r1
strb r0, [r2, 0x9]
- ldr r1, _080E7CD0 @ =gUnknown_3004FE0
+ ldr r1, _080E7CD0 @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -892,15 +892,15 @@ _080E7CA8:
pop {r0}
bx r0
.align 2, 0
-_080E7CB0: .4byte gUnknown_2024018
+_080E7CB0: .4byte gBattleSpritesDataPtr
_080E7CB4: .4byte gActiveBattler
_080E7CB8: .4byte gBattlerPartyIndexes
_080E7CBC: .4byte gPlayerParty
_080E7CC0: .4byte gBattleTypeFlags
_080E7CC4: .4byte gUnknown_3004FFC
_080E7CC8: .4byte gSprites
-_080E7CCC: .4byte gUnknown_3004FF0
-_080E7CD0: .4byte gUnknown_3004FE0
+_080E7CCC: .4byte gHealthboxSpriteIds
+_080E7CD0: .4byte gBattlerControllerFuncs
_080E7CD4: .4byte sub_80E7CD8
thumb_func_end sub_80E7B4C
@@ -911,7 +911,7 @@ sub_80E7CD8: @ 80E7CD8
push {r7}
movs r4, 0
ldr r2, _080E7DD8 @ =gSprites
- ldr r0, _080E7DDC @ =gUnknown_3004FF0
+ ldr r0, _080E7DDC @ =gHealthboxSpriteIds
ldr r1, _080E7DE0 @ =gActiveBattler
mov r8, r1
ldrb r3, [r1]
@@ -930,7 +930,7 @@ sub_80E7CD8: @ 80E7CD8
_080E7D02:
cmp r4, 0
beq _080E7DCE
- ldr r7, _080E7DE8 @ =gUnknown_2024018
+ ldr r7, _080E7DE8 @ =gBattleSpritesDataPtr
ldr r0, [r7]
ldr r4, [r0, 0x4]
lsls r0, r3, 1
@@ -1019,7 +1019,7 @@ _080E7D02:
ldr r2, _080E7DF8 @ =gPlayerParty
adds r0, r2
bl HandleLowHpMusicChange
- ldr r1, _080E7DFC @ =gUnknown_3004FE0
+ ldr r1, _080E7DFC @ =gBattlerControllerFuncs
mov r2, r8
ldrb r0, [r2]
lsls r0, 2
@@ -1034,15 +1034,15 @@ _080E7DCE:
bx r0
.align 2, 0
_080E7DD8: .4byte gSprites
-_080E7DDC: .4byte gUnknown_3004FF0
+_080E7DDC: .4byte gHealthboxSpriteIds
_080E7DE0: .4byte gActiveBattler
_080E7DE4: .4byte SpriteCallbackDummy
-_080E7DE8: .4byte gUnknown_2024018
+_080E7DE8: .4byte gBattleSpritesDataPtr
_080E7DEC: .4byte 0x000027f9
_080E7DF0: .4byte c3_0802FDF4
_080E7DF4: .4byte gBattlerPartyIndexes
_080E7DF8: .4byte gPlayerParty
-_080E7DFC: .4byte gUnknown_3004FE0
+_080E7DFC: .4byte gBattlerControllerFuncs
_080E7E00: .4byte sub_80E835C
thumb_func_end sub_80E7CD8
@@ -1070,7 +1070,7 @@ sub_80E7E04: @ 80E7E04
str r7, [sp, 0x8]
ldrh r2, [r1, 0xA]
str r2, [sp, 0xC]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1145,9 +1145,9 @@ _080E7E4A:
lsrs r2, 16
movs r0, 0x1
movs r1, 0xB
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
strb r5, [r4]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1195,7 +1195,7 @@ _080E7F38:
adds r0, r6, 0
movs r1, 0x19
bl SetMonData
- ldr r1, _080E7F58 @ =gUnknown_3004FE0
+ ldr r1, _080E7F58 @ =gBattlerControllerFuncs
ldr r3, [sp, 0x8]
lsls r0, r3, 2
adds r0, r1
@@ -1205,7 +1205,7 @@ _080E7F38:
bl DestroyTask
b _080E7F66
.align 2, 0
-_080E7F58: .4byte gUnknown_3004FE0
+_080E7F58: .4byte gBattlerControllerFuncs
_080E7F5C: .4byte sub_80E8930
_080E7F60:
ldr r0, _080E7F78 @ =sub_80E7F7C
@@ -1294,7 +1294,7 @@ sub_80E7F7C: @ 80E7F7C
adds r4, r6
ldr r2, [r4]
subs r2, r1
- ldr r0, _080E8044 @ =gUnknown_3004FF0
+ ldr r0, _080E8044 @ =gHealthboxSpriteIds
add r0, r10
ldrb r1, [r0]
mov r0, r9
@@ -1320,7 +1320,7 @@ _080E8034: .4byte gTasks
_080E8038: .4byte gPlayerParty
_080E803C: .4byte gExperienceTables
_080E8040: .4byte gBaseStats
-_080E8044: .4byte gUnknown_3004FF0
+_080E8044: .4byte gHealthboxSpriteIds
_080E8048: .4byte sub_80E804C
thumb_func_end sub_80E7F7C
@@ -1356,13 +1356,13 @@ _080E807C:
ldrh r2, [r6, 0xA]
mov r10, r2
ldrb r7, [r6, 0xC]
- ldr r5, _080E8144 @ =gUnknown_3004FF0
+ ldr r5, _080E8144 @ =gHealthboxSpriteIds
adds r5, r7, r5
ldrb r1, [r5]
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
@@ -1437,13 +1437,13 @@ _080E807C:
lsrs r2, 16
movs r0, 0x1
movs r1, 0xB
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
strb r5, [r4]
ldr r0, _080E8158 @ =sub_80E8190
str r0, [r6]
b _080E8178
.align 2, 0
-_080E8144: .4byte gUnknown_3004FF0
+_080E8144: .4byte gHealthboxSpriteIds
_080E8148: .4byte gPlayerParty
_080E814C: .4byte gExperienceTables
_080E8150: .4byte gBaseStats
@@ -1455,7 +1455,7 @@ _080E815C:
adds r0, r5, 0
movs r1, 0x19
bl SetMonData
- ldr r1, _080E8188 @ =gUnknown_3004FE0
+ ldr r1, _080E8188 @ =gBattlerControllerFuncs
lsls r0, r7, 2
adds r0, r1
ldr r1, _080E818C @ =sub_80E8930
@@ -1472,7 +1472,7 @@ _080E8178:
pop {r0}
bx r0
.align 2, 0
-_080E8188: .4byte gUnknown_3004FE0
+_080E8188: .4byte gBattlerControllerFuncs
_080E818C: .4byte sub_80E8930
thumb_func_end sub_80E804C
@@ -1488,7 +1488,7 @@ sub_80E8190: @ 80E8190
adds r0, r1
ldrb r4, [r0, 0xC]
ldrb r6, [r0, 0x8]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1536,7 +1536,7 @@ sub_80E81F0: @ 80E81F0
lsls r0, 3
adds r2, r0, r1
ldrb r5, [r2, 0xC]
- ldr r0, _080E8260 @ =gUnknown_2024018
+ ldr r0, _080E8260 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x4]
lsls r0, r5, 1
@@ -1557,7 +1557,7 @@ sub_80E81F0: @ 80E81F0
adds r0, r7, 0
movs r1, 0x38
bl GetMonData
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1571,7 +1571,7 @@ sub_80E81F0: @ 80E81F0
ldrh r0, [r0]
cmp r4, r0
bne _080E8270
- ldr r0, _080E826C @ =gUnknown_3004FF0
+ ldr r0, _080E826C @ =gHealthboxSpriteIds
adds r0, r2, r0
ldrb r0, [r0]
adds r1, r7, 0
@@ -1580,12 +1580,12 @@ sub_80E81F0: @ 80E81F0
b _080E8284
.align 2, 0
_080E825C: .4byte gTasks
-_080E8260: .4byte gUnknown_2024018
+_080E8260: .4byte gBattleSpritesDataPtr
_080E8264: .4byte gPlayerParty
_080E8268: .4byte gBattlerPartyIndexes
-_080E826C: .4byte gUnknown_3004FF0
+_080E826C: .4byte gHealthboxSpriteIds
_080E8270:
- ldr r0, _080E8298 @ =gUnknown_3004FF0
+ ldr r0, _080E8298 @ =gHealthboxSpriteIds
adds r0, r5, r0
ldrb r0, [r0]
movs r1, 0x64
@@ -1607,7 +1607,7 @@ _080E8292:
pop {r0}
bx r0
.align 2, 0
-_080E8298: .4byte gUnknown_3004FF0
+_080E8298: .4byte gHealthboxSpriteIds
_080E829C: .4byte gPlayerParty
_080E82A0: .4byte gTasks
_080E82A4: .4byte sub_80E82A8
@@ -1632,7 +1632,7 @@ sub_80E82A8: @ 80E82A8
movs r1, 0x38
bl GetMonData
ldrb r0, [r4, 0xC]
- ldr r1, _080E82EC @ =gUnknown_3004FE0
+ ldr r1, _080E82EC @ =gBattlerControllerFuncs
lsls r0, 2
adds r0, r1
ldr r1, _080E82F0 @ =sub_80E8930
@@ -1645,7 +1645,7 @@ sub_80E82A8: @ 80E82A8
.align 2, 0
_080E82E4: .4byte gTasks
_080E82E8: .4byte gPlayerParty
-_080E82EC: .4byte gUnknown_3004FE0
+_080E82EC: .4byte gBattlerControllerFuncs
_080E82F0: .4byte sub_80E8930
thumb_func_end sub_80E82A8
@@ -1681,7 +1681,7 @@ sub_80E82F4: @ 80E82F4
lsls r0, 2
adds r0, r6
bl DestroySprite
- ldr r1, _080E8358 @ =gUnknown_3004FF0
+ ldr r1, _080E8358 @ =gHealthboxSpriteIds
ldrb r0, [r4]
adds r0, r1
ldrb r0, [r0]
@@ -1695,7 +1695,7 @@ _080E8344:
_080E834C: .4byte gSprites
_080E8350: .4byte gBattlerSpriteIds
_080E8354: .4byte gActiveBattler
-_080E8358: .4byte gUnknown_3004FF0
+_080E8358: .4byte gHealthboxSpriteIds
thumb_func_end sub_80E82F4
thumb_func_start sub_80E835C
@@ -1782,7 +1782,7 @@ _080E8408:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080E841C @ =gDisplayedStringBattle
movs r1, 0x18
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _080E851E
.align 2, 0
_080E8418: .4byte gUnknown_83FDAE2
@@ -1833,7 +1833,7 @@ _080E8468:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080E848C @ =gDisplayedStringBattle
movs r1, 0x18
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _080E851E
.align 2, 0
_080E8484: .4byte gPaletteFade
@@ -1883,7 +1883,7 @@ _080E84D8:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080E84FC @ =gDisplayedStringBattle
movs r1, 0x18
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _080E851E
.align 2, 0
_080E84F4: .4byte gPaletteFade
@@ -2085,7 +2085,7 @@ _080E8670:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080E8680 @ =gDisplayedStringBattle
movs r1, 0x18
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _080E86A2
.align 2, 0
_080E8680: .4byte gDisplayedStringBattle
@@ -2136,7 +2136,7 @@ _080E86DC: .4byte gActiveBattler
_080E86E0:
bl OpponentBufferExecCompleted
_080E86E4:
- ldr r0, _080E86FC @ =gUnknown_2023E82
+ ldr r0, _080E86FC @ =gBattleCommunication
movs r1, 0
strb r1, [r0, 0x7]
ldr r0, _080E8700 @ =gBattleStruct
@@ -2149,7 +2149,7 @@ _080E86F2:
pop {r0}
bx r0
.align 2, 0
-_080E86FC: .4byte gUnknown_2023E82
+_080E86FC: .4byte gBattleCommunication
_080E8700: .4byte gBattleStruct
thumb_func_end sub_80E85D4
@@ -2265,7 +2265,7 @@ _080E87E8:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080E87FC @ =gDisplayedStringBattle
movs r1, 0x18
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _080E8868
.align 2, 0
_080E87F8: .4byte gUnknown_83FDCD2
@@ -2344,7 +2344,7 @@ _080E8880:
ldr r0, _080E88B8 @ =gSpecialVar_ItemId
ldrh r1, [r0]
movs r0, 0x1
- bl EmitOneReturnValue
+ bl BtlController_EmitOneReturnValue
bl WallyBufferExecCompleted
ldr r0, _080E88BC @ =gBattleStruct
ldr r0, [r0]
@@ -2366,12 +2366,12 @@ sub_80E88C0: @ 80E88C0
push {r4-r6,lr}
ldr r5, _080E8900 @ =gActiveBattler
ldrb r0, [r5]
- ldr r6, _080E8904 @ =gUnknown_3004FF0
+ ldr r6, _080E8904 @ =gHealthboxSpriteIds
adds r1, r0, r6
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,11 +2389,11 @@ 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
-_080E8904: .4byte gUnknown_3004FF0
+_080E8904: .4byte gHealthboxSpriteIds
_080E8908:
ldr r2, _080E8928 @ =gBattlerPartyIndexes
ldrb r1, [r5]
@@ -2455,7 +2455,7 @@ DoHitAnimBlinkSpriteEffect_3: @ 80E8948
subs r0, 0x5
ands r0, r1
strb r0, [r2]
- ldr r0, _080E8990 @ =gUnknown_2024005
+ ldr r0, _080E8990 @ =gDoingBattleAnim
strb r3, [r0]
bl WallyBufferExecCompleted
b _080E89BE
@@ -2463,7 +2463,7 @@ DoHitAnimBlinkSpriteEffect_3: @ 80E8948
_080E8984: .4byte gBattlerSpriteIds
_080E8988: .4byte gActiveBattler
_080E898C: .4byte gSprites
-_080E8990: .4byte gUnknown_2024005
+_080E8990: .4byte gDoingBattleAnim
_080E8994:
ldrh r0, [r4, 0x30]
movs r1, 0x3
@@ -2496,7 +2496,7 @@ _080E89BE:
thumb_func_start sub_80E89C4
sub_80E89C4: @ 80E89C4
push {r4-r6,lr}
- ldr r0, _080E8A20 @ =gUnknown_2024018
+ ldr r0, _080E8A20 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r6, _080E8A24 @ =gActiveBattler
ldrb r2, [r6]
@@ -2527,7 +2527,7 @@ sub_80E89C4: @ 80E89C4
lsls r0, 2
adds r0, r4
bl DestroySprite
- ldr r1, _080E8A30 @ =gUnknown_3004FF0
+ ldr r1, _080E8A30 @ =gHealthboxSpriteIds
ldrb r0, [r6]
adds r0, r1
ldrb r0, [r0]
@@ -2538,11 +2538,11 @@ _080E8A18:
pop {r0}
bx r0
.align 2, 0
-_080E8A20: .4byte gUnknown_2024018
+_080E8A20: .4byte gBattleSpritesDataPtr
_080E8A24: .4byte gActiveBattler
_080E8A28: .4byte gBattlerSpriteIds
_080E8A2C: .4byte gSprites
-_080E8A30: .4byte gUnknown_3004FF0
+_080E8A30: .4byte gHealthboxSpriteIds
thumb_func_end sub_80E89C4
thumb_func_start sub_80E8A34
@@ -2577,7 +2577,7 @@ _080E8A68: .4byte SpriteCallbackDummy
thumb_func_start CompleteOnFinishedBattleAnimation_4
CompleteOnFinishedBattleAnimation_4: @ 80E8A6C
push {lr}
- ldr r0, _080E8A94 @ =gUnknown_2024018
+ ldr r0, _080E8A94 @ =gBattleSpritesDataPtr
ldr r2, [r0]
ldr r0, _080E8A98 @ =gActiveBattler
ldrb r1, [r0]
@@ -2596,7 +2596,7 @@ _080E8A8E:
pop {r0}
bx r0
.align 2, 0
-_080E8A94: .4byte gUnknown_2024018
+_080E8A94: .4byte gBattleSpritesDataPtr
_080E8A98: .4byte gActiveBattler
thumb_func_end CompleteOnFinishedBattleAnimation_4
@@ -2604,7 +2604,7 @@ _080E8A98: .4byte gActiveBattler
WallyBufferExecCompleted: @ 80E8A9C
push {r4,lr}
sub sp, 0x4
- ldr r1, _080E8ADC @ =gUnknown_3004FE0
+ ldr r1, _080E8ADC @ =gBattlerControllerFuncs
ldr r4, _080E8AE0 @ =gActiveBattler
ldrb r0, [r4]
lsls r0, 2
@@ -2624,7 +2624,7 @@ WallyBufferExecCompleted: @ 80E8A9C
movs r1, 0x4
mov r2, sp
bl PrepareBufferDataTransferLink
- ldr r1, _080E8AEC @ =gUnknown_2022BC4
+ ldr r1, _080E8AEC @ =gBattleBufferA
ldrb r0, [r4]
lsls r0, 9
adds r0, r1
@@ -2632,13 +2632,13 @@ WallyBufferExecCompleted: @ 80E8A9C
strb r1, [r0]
b _080E8B02
.align 2, 0
-_080E8ADC: .4byte gUnknown_3004FE0
+_080E8ADC: .4byte gBattlerControllerFuncs
_080E8AE0: .4byte gActiveBattler
_080E8AE4: .4byte sub_80E75EC
_080E8AE8: .4byte gBattleTypeFlags
-_080E8AEC: .4byte gUnknown_2022BC4
+_080E8AEC: .4byte gBattleBufferA
_080E8AF0:
- ldr r2, _080E8B0C @ =gUnknown_2023BC8
+ ldr r2, _080E8B0C @ =gBattleControllerExecFlags
ldr r1, _080E8B10 @ =gBitTable
ldrb r0, [r4]
lsls r0, 2
@@ -2653,14 +2653,14 @@ _080E8B02:
pop {r0}
bx r0
.align 2, 0
-_080E8B0C: .4byte gUnknown_2023BC8
+_080E8B0C: .4byte gBattleControllerExecFlags
_080E8B10: .4byte gBitTable
thumb_func_end WallyBufferExecCompleted
thumb_func_start CompleteOnFinishedStatusAnimation_4
CompleteOnFinishedStatusAnimation_4: @ 80E8B14
push {lr}
- ldr r0, _080E8B3C @ =gUnknown_2024018
+ ldr r0, _080E8B3C @ =gBattleSpritesDataPtr
ldr r2, [r0]
ldr r0, _080E8B40 @ =gActiveBattler
ldrb r1, [r0]
@@ -2679,7 +2679,7 @@ _080E8B36:
pop {r0}
bx r0
.align 2, 0
-_080E8B3C: .4byte gUnknown_2024018
+_080E8B3C: .4byte gBattleSpritesDataPtr
_080E8B40: .4byte gActiveBattler
thumb_func_end CompleteOnFinishedStatusAnimation_4
@@ -2688,7 +2688,7 @@ WallyHandleGetMonData: @ 80E8B44
push {r4-r6,lr}
sub sp, 0x100
movs r6, 0
- ldr r1, _080E8B70 @ =gUnknown_2022BC4
+ ldr r1, _080E8B70 @ =gBattleBufferA
ldr r0, _080E8B74 @ =gActiveBattler
ldrb r2, [r0]
lsls r0, r2, 9
@@ -2706,7 +2706,7 @@ WallyHandleGetMonData: @ 80E8B44
adds r6, r0, 0
b _080E8B9E
.align 2, 0
-_080E8B70: .4byte gUnknown_2022BC4
+_080E8B70: .4byte gBattleBufferA
_080E8B74: .4byte gActiveBattler
_080E8B78: .4byte gBattlerPartyIndexes
_080E8B7C:
@@ -2733,7 +2733,7 @@ _080E8B9E:
lsrs r1, 16
movs r0, 0x1
mov r2, sp
- bl EmitDataTransfer
+ bl BtlController_EmitDataTransfer
bl WallyBufferExecCompleted
add sp, 0x100
pop {r4-r6}
@@ -2753,7 +2753,7 @@ CopyWallyMonData: @ 80E8BB8
lsls r0, 24
lsrs r5, r0, 24
movs r6, 0
- ldr r2, _080E8BEC @ =gUnknown_2022BC4
+ ldr r2, _080E8BEC @ =gBattleBufferA
ldr r3, _080E8BF0 @ =gActiveBattler
ldrb r0, [r3]
lsls r0, 9
@@ -2770,7 +2770,7 @@ _080E8BE2:
ldr r0, [r0]
mov pc, r0
.align 2, 0
-_080E8BEC: .4byte gUnknown_2022BC4
+_080E8BEC: .4byte gBattleBufferA
_080E8BF0: .4byte gActiveBattler
_080E8BF4: .4byte _080E8BF8
.align 2, 0
@@ -3686,7 +3686,7 @@ WallyHandleGetRawMonData: @ 80E9364
thumb_func_start WallyHandleSetMonData
WallyHandleSetMonData: @ 80E9370
push {r4,r5,lr}
- ldr r1, _080E9394 @ =gUnknown_2022BC4
+ ldr r1, _080E9394 @ =gBattleBufferA
ldr r0, _080E9398 @ =gActiveBattler
ldrb r2, [r0]
lsls r0, r2, 9
@@ -3702,7 +3702,7 @@ WallyHandleSetMonData: @ 80E9370
bl SetWallyMonData
b _080E93BE
.align 2, 0
-_080E9394: .4byte gUnknown_2022BC4
+_080E9394: .4byte gBattleBufferA
_080E9398: .4byte gActiveBattler
_080E939C: .4byte gBattlerPartyIndexes
_080E93A0:
@@ -4083,7 +4083,7 @@ _080E972C:
muls r0, r5
ldr r1, _080E9748 @ =gPlayerParty
adds r0, r1
- ldr r3, _080E974C @ =gUnknown_2022BC4
+ ldr r3, _080E974C @ =gBattleBufferA
ldr r1, _080E9750 @ =gActiveBattler
ldrb r2, [r1]
lsls r2, 9
@@ -4094,7 +4094,7 @@ _080E972C:
b _080E97D0
.align 2, 0
_080E9748: .4byte gPlayerParty
-_080E974C: .4byte gUnknown_2022BC4
+_080E974C: .4byte gBattleBufferA
_080E9750: .4byte gActiveBattler
_080E9754:
movs r0, 0x64
@@ -4146,7 +4146,7 @@ _080E97B8:
muls r0, r5
ldr r1, _080E97DC @ =gPlayerParty
adds r0, r1
- ldr r3, _080E97E0 @ =gUnknown_2022BC4
+ ldr r3, _080E97E0 @ =gBattleBufferA
ldr r1, _080E97E4 @ =gActiveBattler
ldrb r2, [r1]
lsls r2, 9
@@ -4161,7 +4161,7 @@ _080E97D0:
b _080E9D8E
.align 2, 0
_080E97DC: .4byte gPlayerParty
-_080E97E0: .4byte gUnknown_2022BC4
+_080E97E0: .4byte gBattleBufferA
_080E97E4: .4byte gActiveBattler
_080E97E8:
movs r0, 0x64
@@ -4893,7 +4893,7 @@ sub_80E9DDC: @ 80E9DDC
thumb_func_start WallyHandleReturnMonToBall
WallyHandleReturnMonToBall: @ 80E9DE8
push {r4-r6,lr}
- ldr r0, _080E9E14 @ =gUnknown_2022BC4
+ ldr r0, _080E9E14 @ =gBattleBufferA
ldr r6, _080E9E18 @ =gActiveBattler
ldrb r2, [r6]
lsls r1, r2, 9
@@ -4906,7 +4906,7 @@ WallyHandleReturnMonToBall: @ 80E9DE8
adds r1, r2, 0
movs r3, 0x1
bl InitAndLaunchSpecialAnimation
- ldr r0, _080E9E1C @ =gUnknown_3004FE0
+ ldr r0, _080E9E1C @ =gBattlerControllerFuncs
ldrb r1, [r6]
lsls r1, 2
adds r1, r0
@@ -4914,9 +4914,9 @@ WallyHandleReturnMonToBall: @ 80E9DE8
str r0, [r1]
b _080E9E5A
.align 2, 0
-_080E9E14: .4byte gUnknown_2022BC4
+_080E9E14: .4byte gBattleBufferA
_080E9E18: .4byte gActiveBattler
-_080E9E1C: .4byte gUnknown_3004FE0
+_080E9E1C: .4byte gBattlerControllerFuncs
_080E9E20: .4byte sub_80E89C4
_080E9E24:
ldr r5, _080E9E60 @ =gBattlerSpriteIds
@@ -4936,7 +4936,7 @@ _080E9E24:
lsls r0, 2
adds r0, r4
bl DestroySprite
- ldr r1, _080E9E68 @ =gUnknown_3004FF0
+ ldr r1, _080E9E68 @ =gHealthboxSpriteIds
ldrb r0, [r6]
adds r0, r1
ldrb r0, [r0]
@@ -4949,7 +4949,7 @@ _080E9E5A:
.align 2, 0
_080E9E60: .4byte gBattlerSpriteIds
_080E9E64: .4byte gSprites
-_080E9E68: .4byte gUnknown_3004FF0
+_080E9E68: .4byte gHealthboxSpriteIds
thumb_func_end WallyHandleReturnMonToBall
thumb_func_start sub_80E9E6C
@@ -4966,7 +4966,7 @@ sub_80E9E6C: @ 80E9E6C
ldrb r0, [r0, 0x8]
ldr r6, _080E9ED0 @ =gActiveBattler
ldrb r1, [r6]
- bl sub_8034750
+ bl DecompressTrainerBackPalette
ldr r0, [r4]
ldrb r5, [r0, 0x8]
ldrb r0, [r6]
@@ -4977,7 +4977,7 @@ sub_80E9E6C: @ 80E9E6C
adds r0, r5, 0
bl SetMultiuseSpriteTemplateToTrainerBack
ldr r0, _080E9ED4 @ =gMultiuseSpriteTemplate
- ldr r2, _080E9ED8 @ =gUnknown_8239F8C
+ ldr r2, _080E9ED8 @ =gTrainerBackPicCoords
ldr r1, [r4]
ldrb r1, [r1, 0x8]
lsls r1, 2
@@ -5001,13 +5001,13 @@ _080E9EC8: .4byte gBattleTypeFlags
_080E9ECC: .4byte gSaveBlock2Ptr
_080E9ED0: .4byte gActiveBattler
_080E9ED4: .4byte gMultiuseSpriteTemplate
-_080E9ED8: .4byte gUnknown_8239F8C
+_080E9ED8: .4byte gTrainerBackPicCoords
_080E9EDC: .4byte gBattlerSpriteIds
_080E9EE0:
ldr r4, _080E9F8C @ =gActiveBattler
ldrb r1, [r4]
movs r0, 0x5
- bl sub_8034750
+ bl DecompressTrainerBackPalette
ldrb r0, [r4]
bl GetBattlerPosition
adds r1, r0, 0
@@ -5016,7 +5016,7 @@ _080E9EE0:
movs r0, 0x5
bl SetMultiuseSpriteTemplateToTrainerBack
ldr r0, _080E9F90 @ =gMultiuseSpriteTemplate
- ldr r1, _080E9F94 @ =gUnknown_8239F8C
+ ldr r1, _080E9F94 @ =gTrainerBackPicCoords
ldrb r1, [r1, 0x14]
movs r2, 0x8
subs r2, r1
@@ -5077,7 +5077,7 @@ _080E9F1C:
adds r0, r4
ldr r1, _080E9FA4 @ =sub_8033EEC
str r1, [r0]
- ldr r1, _080E9FA8 @ =gUnknown_3004FE0
+ ldr r1, _080E9FA8 @ =gBattlerControllerFuncs
ldrb r0, [r6]
lsls r0, 2
adds r0, r1
@@ -5089,12 +5089,12 @@ _080E9F1C:
.align 2, 0
_080E9F8C: .4byte gActiveBattler
_080E9F90: .4byte gMultiuseSpriteTemplate
-_080E9F94: .4byte gUnknown_8239F8C
+_080E9F94: .4byte gTrainerBackPicCoords
_080E9F98: .4byte gBattlerSpriteIds
_080E9F9C: .4byte gSprites
_080E9FA0: .4byte 0x0000fffe
_080E9FA4: .4byte sub_8033EEC
-_080E9FA8: .4byte gUnknown_3004FE0
+_080E9FA8: .4byte gBattlerControllerFuncs
_080E9FAC: .4byte sub_80E78E0
thumb_func_end sub_80E9E6C
@@ -5112,7 +5112,7 @@ sub_80E9FB0: @ 80E9FB0
ldrb r0, [r0, 0x8]
ldr r6, _080EA014 @ =gActiveBattler
ldrb r1, [r6]
- bl sub_8034750
+ bl DecompressTrainerBackPalette
ldr r0, [r4]
ldrb r5, [r0, 0x8]
ldrb r0, [r6]
@@ -5123,7 +5123,7 @@ sub_80E9FB0: @ 80E9FB0
adds r0, r5, 0
bl SetMultiuseSpriteTemplateToTrainerBack
ldr r0, _080EA018 @ =gMultiuseSpriteTemplate
- ldr r2, _080EA01C @ =gUnknown_8239F8C
+ ldr r2, _080EA01C @ =gTrainerBackPicCoords
ldr r1, [r4]
ldrb r1, [r1, 0x8]
lsls r1, 2
@@ -5147,13 +5147,13 @@ _080EA00C: .4byte gBattleTypeFlags
_080EA010: .4byte gSaveBlock2Ptr
_080EA014: .4byte gActiveBattler
_080EA018: .4byte gMultiuseSpriteTemplate
-_080EA01C: .4byte gUnknown_8239F8C
+_080EA01C: .4byte gTrainerBackPicCoords
_080EA020: .4byte gBattlerSpriteIds
_080EA024:
ldr r4, _080EA0D0 @ =gActiveBattler
ldrb r1, [r4]
movs r0, 0x5
- bl sub_8034750
+ bl DecompressTrainerBackPalette
ldrb r0, [r4]
bl GetBattlerPosition
adds r1, r0, 0
@@ -5162,7 +5162,7 @@ _080EA024:
movs r0, 0x5
bl SetMultiuseSpriteTemplateToTrainerBack
ldr r0, _080EA0D4 @ =gMultiuseSpriteTemplate
- ldr r1, _080EA0D8 @ =gUnknown_8239F8C
+ ldr r1, _080EA0D8 @ =gTrainerBackPicCoords
ldrb r1, [r1, 0x14]
movs r2, 0x8
subs r2, r1
@@ -5223,7 +5223,7 @@ _080EA060:
adds r0, r4
ldr r1, _080EA0E8 @ =sub_8033EEC
str r1, [r0]
- ldr r1, _080EA0EC @ =gUnknown_3004FE0
+ ldr r1, _080EA0EC @ =gBattlerControllerFuncs
ldrb r0, [r6]
lsls r0, 2
adds r0, r1
@@ -5235,12 +5235,12 @@ _080EA060:
.align 2, 0
_080EA0D0: .4byte gActiveBattler
_080EA0D4: .4byte gMultiuseSpriteTemplate
-_080EA0D8: .4byte gUnknown_8239F8C
+_080EA0D8: .4byte gTrainerBackPicCoords
_080EA0DC: .4byte gBattlerSpriteIds
_080EA0E0: .4byte gSprites
_080EA0E4: .4byte 0x0000ffa0
_080EA0E8: .4byte sub_8033EEC
-_080EA0EC: .4byte gUnknown_3004FE0
+_080EA0EC: .4byte gBattlerControllerFuncs
_080EA0F0: .4byte sub_80E8A34
thumb_func_end sub_80E9FB0
@@ -5255,7 +5255,7 @@ sub_80EA0F4: @ 80EA0F4
thumb_func_start sub_80EA100
sub_80EA100: @ 80EA100
push {r4-r6,lr}
- ldr r6, _080EA14C @ =gUnknown_2024018
+ ldr r6, _080EA14C @ =gBattleSpritesDataPtr
ldr r4, [r6]
ldr r5, _080EA150 @ =gActiveBattler
ldrb r2, [r5]
@@ -5292,7 +5292,7 @@ _080EA134:
strb r1, [r0, 0x4]
b _080EA1CA
.align 2, 0
-_080EA14C: .4byte gUnknown_2024018
+_080EA14C: .4byte gBattleSpritesDataPtr
_080EA150: .4byte gActiveBattler
_080EA154:
ldrb r1, [r3]
@@ -5346,7 +5346,7 @@ _080EA154:
adds r0, r2
ldr r1, _080EA1E0 @ =sub_8012110
str r1, [r0]
- ldr r1, _080EA1E4 @ =gUnknown_3004FE0
+ ldr r1, _080EA1E4 @ =gBattlerControllerFuncs
ldrb r0, [r5]
lsls r0, 2
adds r0, r1
@@ -5362,7 +5362,7 @@ _080EA1D4: .4byte gPlayerParty
_080EA1D8: .4byte gSprites
_080EA1DC: .4byte gBattlerSpriteIds
_080EA1E0: .4byte sub_8012110
-_080EA1E4: .4byte gUnknown_3004FE0
+_080EA1E4: .4byte gBattlerControllerFuncs
_080EA1E8: .4byte sub_80E82F4
thumb_func_end sub_80EA100
@@ -5377,12 +5377,12 @@ sub_80EA1EC: @ 80EA1EC
thumb_func_start sub_80EA1F8
sub_80EA1F8: @ 80EA1F8
push {r4,r5,lr}
- ldr r0, _080EA238 @ =gUnknown_2024018
+ ldr r0, _080EA238 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x8]
movs r0, 0x4
strb r0, [r1, 0x8]
- ldr r1, _080EA23C @ =gUnknown_2024005
+ ldr r1, _080EA23C @ =gDoingBattleAnim
movs r0, 0x1
strb r0, [r1]
ldr r5, _080EA240 @ =gActiveBattler
@@ -5396,7 +5396,7 @@ sub_80EA1F8: @ 80EA1F8
adds r1, r4, 0
movs r3, 0x4
bl InitAndLaunchSpecialAnimation
- ldr r1, _080EA244 @ =gUnknown_3004FE0
+ ldr r1, _080EA244 @ =gBattlerControllerFuncs
ldrb r0, [r5]
lsls r0, 2
adds r0, r1
@@ -5406,28 +5406,28 @@ sub_80EA1F8: @ 80EA1F8
pop {r0}
bx r0
.align 2, 0
-_080EA238: .4byte gUnknown_2024018
-_080EA23C: .4byte gUnknown_2024005
+_080EA238: .4byte gBattleSpritesDataPtr
+_080EA23C: .4byte gDoingBattleAnim
_080EA240: .4byte gActiveBattler
-_080EA244: .4byte gUnknown_3004FE0
+_080EA244: .4byte gBattlerControllerFuncs
_080EA248: .4byte sub_80E7970
thumb_func_end sub_80EA1F8
thumb_func_start sub_80EA24C
sub_80EA24C: @ 80EA24C
push {r4,r5,lr}
- ldr r1, _080EA294 @ =gUnknown_2022BC4
+ ldr r1, _080EA294 @ =gBattleBufferA
ldr r5, _080EA298 @ =gActiveBattler
ldrb r0, [r5]
lsls r0, 9
adds r1, 0x1
adds r0, r1
ldrb r1, [r0]
- ldr r0, _080EA29C @ =gUnknown_2024018
+ ldr r0, _080EA29C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
strb r1, [r0, 0x8]
- ldr r1, _080EA2A0 @ =gUnknown_2024005
+ ldr r1, _080EA2A0 @ =gDoingBattleAnim
movs r0, 0x1
strb r0, [r1]
ldrb r4, [r5]
@@ -5440,7 +5440,7 @@ sub_80EA24C: @ 80EA24C
adds r1, r4, 0
movs r3, 0x4
bl InitAndLaunchSpecialAnimation
- ldr r1, _080EA2A4 @ =gUnknown_3004FE0
+ ldr r1, _080EA2A4 @ =gBattlerControllerFuncs
ldrb r0, [r5]
lsls r0, 2
adds r0, r1
@@ -5450,11 +5450,11 @@ sub_80EA24C: @ 80EA24C
pop {r0}
bx r0
.align 2, 0
-_080EA294: .4byte gUnknown_2022BC4
+_080EA294: .4byte gBattleBufferA
_080EA298: .4byte gActiveBattler
-_080EA29C: .4byte gUnknown_2024018
-_080EA2A0: .4byte gUnknown_2024005
-_080EA2A4: .4byte gUnknown_3004FE0
+_080EA29C: .4byte gBattleSpritesDataPtr
+_080EA2A0: .4byte gDoingBattleAnim
+_080EA2A4: .4byte gBattlerControllerFuncs
_080EA2A8: .4byte sub_80E7970
thumb_func_end sub_80EA24C
@@ -5469,7 +5469,7 @@ sub_80EA2AC: @ 80EA2AC
thumb_func_start sub_80EA2B8
sub_80EA2B8: @ 80EA2B8
push {r4-r6,lr}
- ldr r0, _080EA38C @ =gUnknown_2022BC4
+ ldr r0, _080EA38C @ =gBattleBufferA
mov r12, r0
ldr r6, _080EA390 @ =gActiveBattler
ldrb r2, [r6]
@@ -5489,7 +5489,7 @@ sub_80EA2B8: @ 80EA2B8
adds r2, r1
ldrb r1, [r2]
strb r1, [r5]
- ldr r4, _080EA398 @ =gUnknown_2037EEC
+ ldr r4, _080EA398 @ =gAnimMovePower
ldrb r2, [r6]
lsls r2, 9
mov r1, r12
@@ -5503,7 +5503,7 @@ sub_80EA2B8: @ 80EA2B8
lsls r1, 8
orrs r3, r1
strh r3, [r4]
- ldr r4, _080EA39C @ =gUnknown_2037EE8
+ ldr r4, _080EA39C @ =gAnimMoveDmg
ldrb r2, [r6]
lsls r2, 9
mov r1, r12
@@ -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
@@ -5558,7 +5558,7 @@ sub_80EA2B8: @ 80EA2B8
adds r1, 0x10
adds r2, r1
str r2, [r3]
- ldr r3, _080EA3AC @ =gUnknown_2024008
+ ldr r3, _080EA3AC @ =gTransformedPersonalities
ldrb r1, [r6]
lsls r1, 2
adds r1, r3
@@ -5573,17 +5573,17 @@ sub_80EA2B8: @ 80EA2B8
bl WallyBufferExecCompleted
b _080EA3CE
.align 2, 0
-_080EA38C: .4byte gUnknown_2022BC4
+_080EA38C: .4byte gBattleBufferA
_080EA390: .4byte gActiveBattler
_080EA394: .4byte gAnimMoveTurn
-_080EA398: .4byte gUnknown_2037EEC
-_080EA39C: .4byte gUnknown_2037EE8
-_080EA3A0: .4byte gUnknown_2037EFE
-_080EA3A4: .4byte gUnknown_2037F00
+_080EA398: .4byte gAnimMovePower
+_080EA39C: .4byte gAnimMoveDmg
+_080EA3A0: .4byte gAnimFriendship
+_080EA3A4: .4byte gWeatherMoveAnim
_080EA3A8: .4byte gAnimDisableStructPtr
-_080EA3AC: .4byte gUnknown_2024008
+_080EA3AC: .4byte gTransformedPersonalities
_080EA3B0:
- ldr r0, _080EA3D4 @ =gUnknown_2024018
+ ldr r0, _080EA3D4 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldrb r1, [r6]
ldr r2, [r0, 0x4]
@@ -5592,7 +5592,7 @@ _080EA3B0:
lsls r0, 2
adds r0, r2
strb r3, [r0, 0x4]
- ldr r1, _080EA3D8 @ =gUnknown_3004FE0
+ ldr r1, _080EA3D8 @ =gBattlerControllerFuncs
ldrb r0, [r6]
lsls r0, 2
adds r0, r1
@@ -5603,8 +5603,8 @@ _080EA3CE:
pop {r0}
bx r0
.align 2, 0
-_080EA3D4: .4byte gUnknown_2024018
-_080EA3D8: .4byte gUnknown_3004FE0
+_080EA3D4: .4byte gBattleSpritesDataPtr
+_080EA3D8: .4byte gBattlerControllerFuncs
_080EA3DC: .4byte sub_80EA3E0
thumb_func_end sub_80EA2B8
@@ -5614,7 +5614,7 @@ sub_80EA3E0: @ 80EA3E0
mov r7, r9
mov r6, r8
push {r6,r7}
- ldr r2, _080EA424 @ =gUnknown_2022BC4
+ ldr r2, _080EA424 @ =gBattleBufferA
ldr r6, _080EA428 @ =gActiveBattler
ldrb r3, [r6]
lsls r1, r3, 9
@@ -5628,7 +5628,7 @@ sub_80EA3E0: @ 80EA3E0
ldrb r0, [r1]
lsls r0, 8
orrs r4, r0
- ldr r7, _080EA42C @ =gUnknown_2024018
+ ldr r7, _080EA42C @ =gBattleSpritesDataPtr
ldr r5, [r7]
ldr r1, [r5, 0x4]
lsls r0, r3, 1
@@ -5644,9 +5644,9 @@ sub_80EA3E0: @ 80EA3E0
beq _080EA43A
b _080EA520
.align 2, 0
-_080EA424: .4byte gUnknown_2022BC4
+_080EA424: .4byte gBattleBufferA
_080EA428: .4byte gActiveBattler
-_080EA42C: .4byte gUnknown_2024018
+_080EA42C: .4byte gBattleSpritesDataPtr
_080EA430:
cmp r2, 0x2
beq _080EA494
@@ -5699,10 +5699,10 @@ _080EA46A:
strb r1, [r0, 0x4]
b _080EA520
_080EA494:
- ldr r0, _080EA4DC @ =gUnknown_2037EDC
+ ldr r0, _080EA4DC @ =gAnimScriptCallback
ldr r0, [r0]
bl _call_via_r0
- ldr r0, _080EA4E0 @ =gUnknown_2037EE1
+ ldr r0, _080EA4E0 @ =gAnimScriptActive
ldrb r0, [r0]
cmp r0, 0
bne _080EA520
@@ -5734,8 +5734,8 @@ _080EA4C8:
strb r1, [r0, 0x4]
b _080EA520
.align 2, 0
-_080EA4DC: .4byte gUnknown_2037EDC
-_080EA4E0: .4byte gUnknown_2037EE1
+_080EA4DC: .4byte gAnimScriptCallback
+_080EA4E0: .4byte gAnimScriptActive
_080EA4E4:
ldrb r1, [r0]
movs r0, 0x40
@@ -5806,7 +5806,7 @@ _080EA568: .4byte gUnknown_2022BC6
_080EA56C: .4byte gBattleTypeFlags
_080EA570:
ldrh r0, [r4]
- bl sub_80D7274
+ bl BufferStringBattle
ldrh r0, [r4]
bl sub_80D89B0
lsls r0, 24
@@ -5814,14 +5814,14 @@ _080EA570:
beq _080EA590
ldr r0, _080EA58C @ =gDisplayedStringBattle
movs r1, 0x40
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _080EA598
.align 2, 0
_080EA58C: .4byte gDisplayedStringBattle
_080EA590:
ldr r0, _080EA5B4 @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
_080EA598:
ldr r0, _080EA5B8 @ =gBattleTypeFlags
ldr r0, [r0]
@@ -5857,7 +5857,7 @@ _080EA5CC:
bne _080EA64C
movs r0, 0x2
bl sub_80EB2F4
- ldr r1, _080EA5EC @ =gUnknown_3004FE0
+ ldr r1, _080EA5EC @ =gBattlerControllerFuncs
ldr r0, _080EA5F0 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5865,11 +5865,11 @@ _080EA5CC:
ldr r1, _080EA5F4 @ =sub_80E8584
b _080EA658
.align 2, 0
-_080EA5EC: .4byte gUnknown_3004FE0
+_080EA5EC: .4byte gBattlerControllerFuncs
_080EA5F0: .4byte gActiveBattler
_080EA5F4: .4byte sub_80E8584
_080EA5F8:
- ldr r1, _080EA608 @ =gUnknown_3004FE0
+ ldr r1, _080EA608 @ =gBattlerControllerFuncs
ldr r0, _080EA60C @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5877,11 +5877,11 @@ _080EA5F8:
ldr r1, _080EA610 @ =sub_80E85AC
b _080EA658
.align 2, 0
-_080EA608: .4byte gUnknown_3004FE0
+_080EA608: .4byte gBattlerControllerFuncs
_080EA60C: .4byte gActiveBattler
_080EA610: .4byte sub_80E85AC
_080EA614:
- ldr r1, _080EA624 @ =gUnknown_3004FE0
+ ldr r1, _080EA624 @ =gBattlerControllerFuncs
ldr r0, _080EA628 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5889,11 +5889,11 @@ _080EA614:
ldr r1, _080EA62C @ =sub_80E85C0
b _080EA658
.align 2, 0
-_080EA624: .4byte gUnknown_3004FE0
+_080EA624: .4byte gBattlerControllerFuncs
_080EA628: .4byte gActiveBattler
_080EA62C: .4byte sub_80E85C0
_080EA630:
- ldr r1, _080EA640 @ =gUnknown_3004FE0
+ ldr r1, _080EA640 @ =gBattlerControllerFuncs
ldr r0, _080EA644 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5901,11 +5901,11 @@ _080EA630:
ldr r1, _080EA648 @ =sub_80E8598
b _080EA658
.align 2, 0
-_080EA640: .4byte gUnknown_3004FE0
+_080EA640: .4byte gBattlerControllerFuncs
_080EA644: .4byte gActiveBattler
_080EA648: .4byte sub_80E8598
_080EA64C:
- ldr r1, _080EA660 @ =gUnknown_3004FE0
+ ldr r1, _080EA660 @ =gBattlerControllerFuncs
ldr r0, _080EA664 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5918,7 +5918,7 @@ _080EA65A:
pop {r0}
bx r0
.align 2, 0
-_080EA660: .4byte gUnknown_3004FE0
+_080EA660: .4byte gBattlerControllerFuncs
_080EA664: .4byte gActiveBattler
_080EA668: .4byte sub_80E7918
thumb_func_end sub_80EA52C
@@ -5962,7 +5962,7 @@ sub_80EA690: @ 80EA690
ands r0, r1
cmp r0, 0
beq _080EA6DC
- ldr r1, _080EA6D0 @ =gUnknown_3004FE0
+ ldr r1, _080EA6D0 @ =gBattlerControllerFuncs
ldr r0, _080EA6D4 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5973,11 +5973,11 @@ sub_80EA690: @ 80EA690
_080EA6C4: .4byte gBattle_BG0_X
_080EA6C8: .4byte gBattle_BG0_Y
_080EA6CC: .4byte gBattleTypeFlags
-_080EA6D0: .4byte gUnknown_3004FE0
+_080EA6D0: .4byte gBattlerControllerFuncs
_080EA6D4: .4byte gActiveBattler
_080EA6D8: .4byte sub_80E763C
_080EA6DC:
- ldr r1, _080EA6F0 @ =gUnknown_3004FE0
+ ldr r1, _080EA6F0 @ =gBattlerControllerFuncs
ldr r0, _080EA6F4 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5989,7 +5989,7 @@ _080EA6EA:
pop {r0}
bx r0
.align 2, 0
-_080EA6F0: .4byte gUnknown_3004FE0
+_080EA6F0: .4byte gBattlerControllerFuncs
_080EA6F4: .4byte gActiveBattler
_080EA6F8: .4byte sub_80E7844
thumb_func_end sub_80EA690
@@ -5997,7 +5997,7 @@ _080EA6F8: .4byte sub_80E7844
thumb_func_start sub_80EA6FC
sub_80EA6FC: @ 80EA6FC
push {r4,lr}
- ldr r1, _080EA750 @ =gUnknown_3004FE0
+ ldr r1, _080EA750 @ =gBattlerControllerFuncs
ldr r0, _080EA754 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -6006,10 +6006,10 @@ sub_80EA6FC: @ 80EA6FC
str r1, [r0]
ldr r0, _080EA75C @ =gUnknown_83FDA4C
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080EA760 @ =gUnknown_83FE725
movs r1, 0x2
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
movs r4, 0
_080EA71E:
lsls r0, r4, 24
@@ -6018,7 +6018,7 @@ _080EA71E:
adds r4, 0x1
cmp r4, 0x3
ble _080EA71E
- ldr r1, _080EA764 @ =gUnknown_2023FF8
+ ldr r1, _080EA764 @ =gActionSelectionCursor
ldr r0, _080EA754 @ =gActiveBattler
ldrb r0, [r0]
adds r0, r1
@@ -6031,25 +6031,25 @@ _080EA71E:
ands r0, r1
cmp r0, 0
beq _080EA770
- ldr r0, _080EA76C @ =gUnknown_83FE6D5
+ ldr r0, _080EA76C @ =gText_WhatWillPkmnDo
bl BattleStringExpandPlaceholdersToDisplayedString
b _080EA776
.align 2, 0
-_080EA750: .4byte gUnknown_3004FE0
+_080EA750: .4byte gBattlerControllerFuncs
_080EA754: .4byte gActiveBattler
_080EA758: .4byte sub_80EA690
_080EA75C: .4byte gUnknown_83FDA4C
_080EA760: .4byte gUnknown_83FE725
-_080EA764: .4byte gUnknown_2023FF8
+_080EA764: .4byte gActionSelectionCursor
_080EA768: .4byte gBattleTypeFlags
-_080EA76C: .4byte gUnknown_83FE6D5
+_080EA76C: .4byte gText_WhatWillPkmnDo
_080EA770:
ldr r0, _080EA784 @ =gUnknown_83FE6FA
bl BattleStringExpandPlaceholdersToDisplayedString
_080EA776:
ldr r0, _080EA788 @ =gDisplayedStringBattle
movs r1, 0x1
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
pop {r4}
pop {r0}
bx r0
@@ -6081,7 +6081,7 @@ sub_80EA798: @ 80EA798
lsls r2, 1
adds r0, r2, 0
strh r0, [r1]
- ldr r1, _080EA7D0 @ =gUnknown_3004FE0
+ ldr r1, _080EA7D0 @ =gBattlerControllerFuncs
ldr r0, _080EA7D4 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -6094,7 +6094,7 @@ _080EA7C2:
.align 2, 0
_080EA7C8: .4byte gBattle_BG0_X
_080EA7CC: .4byte gBattle_BG0_Y
-_080EA7D0: .4byte gUnknown_3004FE0
+_080EA7D0: .4byte gBattlerControllerFuncs
_080EA7D4: .4byte gActiveBattler
_080EA7D8: .4byte sub_80E7988
thumb_func_end sub_80EA798
@@ -6108,8 +6108,8 @@ sub_80EA7DC: @ 80EA7DC
ands r0, r1
cmp r0, 0
beq _080EA810
- bl sub_8032CB4
- ldr r1, _080EA804 @ =gUnknown_3004FE0
+ bl InitMoveSelectionsVarsAndStrings
+ ldr r1, _080EA804 @ =gBattlerControllerFuncs
ldr r0, _080EA808 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -6119,7 +6119,7 @@ sub_80EA7DC: @ 80EA7DC
b _080EA866
.align 2, 0
_080EA800: .4byte gBattleTypeFlags
-_080EA804: .4byte gUnknown_3004FE0
+_080EA804: .4byte gBattlerControllerFuncs
_080EA808: .4byte gActiveBattler
_080EA80C: .4byte sub_80EA798
_080EA810:
@@ -6135,7 +6135,7 @@ _080EA810:
.align 2, 0
_080EA824: .4byte gBattleStruct
_080EA828:
- bl sub_8032CB4
+ bl InitMoveSelectionsVarsAndStrings
ldr r1, [r4]
adds r1, 0x95
ldrb r0, [r1]
@@ -6161,7 +6161,7 @@ _080EA83E:
lsls r2, 1
movs r0, 0x1
movs r1, 0xA
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
bl WallyBufferExecCompleted
_080EA866:
pop {r4}
@@ -6182,7 +6182,7 @@ sub_80EA870: @ 80EA870
movs r2, 0
movs r3, 0x10
bl BeginNormalPaletteFade
- ldr r1, _080EA8BC @ =gUnknown_3004FE0
+ ldr r1, _080EA8BC @ =gBattlerControllerFuncs
ldr r2, _080EA8C0 @ =gActiveBattler
ldrb r0, [r2]
lsls r0, 2
@@ -6194,7 +6194,7 @@ sub_80EA870: @ 80EA870
strb r0, [r1]
movs r3, 0
ldr r5, _080EA8CC @ =gUnknown_203B0DC
- ldr r4, _080EA8D0 @ =gUnknown_2022BC4
+ ldr r4, _080EA8D0 @ =gBattleBufferA
_080EA89E:
adds r0, r3, r5
ldrb r1, [r2]
@@ -6212,12 +6212,12 @@ _080EA89E:
pop {r0}
bx r0
.align 2, 0
-_080EA8BC: .4byte gUnknown_3004FE0
+_080EA8BC: .4byte gBattlerControllerFuncs
_080EA8C0: .4byte gActiveBattler
_080EA8C4: .4byte sub_80E7A70
_080EA8C8: .4byte gBattlerInMenuId
_080EA8CC: .4byte gUnknown_203B0DC
-_080EA8D0: .4byte gUnknown_2022BC4
+_080EA8D0: .4byte gBattleBufferA
thumb_func_end sub_80EA870
thumb_func_start sub_80EA8D4
@@ -6240,7 +6240,7 @@ sub_80EA8D4: @ 80EA8D4
adds r1, r0
lsls r1, 3
adds r1, r5
- ldr r5, _080EA994 @ =gUnknown_2022BC4
+ ldr r5, _080EA994 @ =gBattleBufferA
lsls r2, 9
adds r6, r5, 0x1
adds r2, r6
@@ -6294,7 +6294,7 @@ _080EA940:
movs r2, 0
movs r3, 0x10
bl BeginNormalPaletteFade
- ldr r1, _080EA9A0 @ =gUnknown_3004FE0
+ ldr r1, _080EA9A0 @ =gBattlerControllerFuncs
ldr r2, _080EA98C @ =gActiveBattler
ldrb r0, [r2]
lsls r0, 2
@@ -6313,10 +6313,10 @@ _080EA984: .4byte TaskDummy
_080EA988: .4byte gUnknown_3004FFC
_080EA98C: .4byte gActiveBattler
_080EA990: .4byte gTasks
-_080EA994: .4byte gUnknown_2022BC4
+_080EA994: .4byte gBattleBufferA
_080EA998: .4byte gBattleStruct
_080EA99C: .4byte gUnknown_203B0DC
-_080EA9A0: .4byte gUnknown_3004FE0
+_080EA9A0: .4byte gBattlerControllerFuncs
_080EA9A4: .4byte sub_80E79B8
_080EA9A8: .4byte gBattlerInMenuId
thumb_func_end sub_80EA8D4
@@ -6338,7 +6338,7 @@ sub_80EA9B8: @ 80EA9B8
sub sp, 0x4
movs r0, 0
bl LoadBattleBarGfx
- ldr r3, _080EAA30 @ =gUnknown_2022BC4
+ ldr r3, _080EAA30 @ =gBattleBufferA
ldr r0, _080EAA34 @ =gActiveBattler
mov r9, r0
ldrb r4, [r0]
@@ -6379,7 +6379,7 @@ sub_80EA9B8: @ 80EA9B8
adds r3, r0, 0
mov r1, r9
ldrb r0, [r1]
- ldr r1, _080EAA44 @ =gUnknown_3004FF0
+ ldr r1, _080EAA44 @ =gHealthboxSpriteIds
adds r1, r0, r1
ldrb r1, [r1]
str r7, [sp]
@@ -6387,12 +6387,12 @@ sub_80EA9B8: @ 80EA9B8
bl SetBattleBarStruct
b _080EAA82
.align 2, 0
-_080EAA30: .4byte gUnknown_2022BC4
+_080EAA30: .4byte gBattleBufferA
_080EAA34: .4byte gActiveBattler
_080EAA38: .4byte 0x00007fff
_080EAA3C: .4byte gBattlerPartyIndexes
_080EAA40: .4byte gPlayerParty
-_080EAA44: .4byte gUnknown_3004FF0
+_080EAA44: .4byte gHealthboxSpriteIds
_080EAA48:
ldr r1, _080EAAA0 @ =gBattlerPartyIndexes
lsls r0, r4, 1
@@ -6407,7 +6407,7 @@ _080EAA48:
adds r2, r0, 0
mov r1, r9
ldrb r0, [r1]
- ldr r4, _080EAAA8 @ =gUnknown_3004FF0
+ ldr r4, _080EAAA8 @ =gHealthboxSpriteIds
adds r1, r0, r4
ldrb r1, [r1]
str r7, [sp]
@@ -6419,9 +6419,9 @@ _080EAA48:
ldrb r0, [r0]
movs r1, 0
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
_080EAA82:
- ldr r1, _080EAAAC @ =gUnknown_3004FE0
+ ldr r1, _080EAAAC @ =gBattlerControllerFuncs
ldr r0, _080EAAB0 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -6438,8 +6438,8 @@ _080EAA82:
.align 2, 0
_080EAAA0: .4byte gBattlerPartyIndexes
_080EAAA4: .4byte gPlayerParty
-_080EAAA8: .4byte gUnknown_3004FF0
-_080EAAAC: .4byte gUnknown_3004FE0
+_080EAAA8: .4byte gHealthboxSpriteIds
+_080EAAAC: .4byte gBattlerControllerFuncs
_080EAAB0: .4byte gActiveBattler
_080EAAB4: .4byte sub_80E88C0
thumb_func_end sub_80EA9B8
@@ -6447,7 +6447,7 @@ _080EAAB4: .4byte sub_80E88C0
thumb_func_start sub_80EAAB8
sub_80EAAB8: @ 80EAAB8
push {r4-r7,lr}
- ldr r5, _080EAAE4 @ =gUnknown_2022BC4
+ ldr r5, _080EAAE4 @ =gBattleBufferA
ldr r6, _080EAAE8 @ =gActiveBattler
ldrb r0, [r6]
lsls r0, 9
@@ -6467,7 +6467,7 @@ sub_80EAAB8: @ 80EAAB8
bl WallyBufferExecCompleted
b _080EAB3C
.align 2, 0
-_080EAAE4: .4byte gUnknown_2022BC4
+_080EAAE4: .4byte gBattleBufferA
_080EAAE8: .4byte gActiveBattler
_080EAAEC: .4byte gPlayerParty
_080EAAF0:
@@ -6500,7 +6500,7 @@ _080EAAF0:
strh r4, [r1, 0xA]
ldrb r0, [r6]
strh r0, [r1, 0xC]
- ldr r1, _080EAB4C @ =gUnknown_3004FE0
+ ldr r1, _080EAB4C @ =gBattlerControllerFuncs
ldrb r0, [r6]
lsls r0, 2
adds r0, r1
@@ -6513,7 +6513,7 @@ _080EAB3C:
.align 2, 0
_080EAB44: .4byte sub_80E7E04
_080EAB48: .4byte gTasks
-_080EAB4C: .4byte gUnknown_3004FE0
+_080EAB4C: .4byte gBattlerControllerFuncs
_080EAB50: .4byte nullsub_81
thumb_func_end sub_80EAAB8
@@ -6662,7 +6662,7 @@ _080EAC30: .4byte gSprites
_080EAC34: .4byte gBattlerSpriteIds
_080EAC38: .4byte gActiveBattler
_080EAC3C:
- ldr r1, _080EAC6C @ =gUnknown_2024005
+ ldr r1, _080EAC6C @ =gDoingBattleAnim
movs r0, 0x1
strb r0, [r1]
ldrb r0, [r4]
@@ -6676,7 +6676,7 @@ _080EAC3C:
strh r1, [r0, 0x30]
ldrb r0, [r4]
bl DoHitAnimHealthboxEffect
- ldr r1, _080EAC70 @ =gUnknown_3004FE0
+ ldr r1, _080EAC70 @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -6687,8 +6687,8 @@ _080EAC66:
pop {r0}
bx r0
.align 2, 0
-_080EAC6C: .4byte gUnknown_2024005
-_080EAC70: .4byte gUnknown_3004FE0
+_080EAC6C: .4byte gDoingBattleAnim
+_080EAC70: .4byte gBattlerControllerFuncs
_080EAC74: .4byte DoHitAnimBlinkSpriteEffect_3
thumb_func_end sub_80EAC08
@@ -6703,7 +6703,7 @@ sub_80EAC78: @ 80EAC78
thumb_func_start sub_80EAC84
sub_80EAC84: @ 80EAC84
push {lr}
- ldr r2, _080EACAC @ =gUnknown_2022BC4
+ ldr r2, _080EACAC @ =gBattleBufferA
ldr r0, _080EACB0 @ =gActiveBattler
ldrb r1, [r0]
lsls r1, 9
@@ -6720,14 +6720,14 @@ sub_80EAC84: @ 80EAC84
pop {r0}
bx r0
.align 2, 0
-_080EACAC: .4byte gUnknown_2022BC4
+_080EACAC: .4byte gBattleBufferA
_080EACB0: .4byte gActiveBattler
thumb_func_end sub_80EAC84
thumb_func_start sub_80EACB4
sub_80EACB4: @ 80EACB4
push {lr}
- ldr r2, _080EACDC @ =gUnknown_2022BC4
+ ldr r2, _080EACDC @ =gBattleBufferA
ldr r0, _080EACE0 @ =gActiveBattler
ldrb r1, [r0]
lsls r1, 9
@@ -6744,7 +6744,7 @@ sub_80EACB4: @ 80EACB4
pop {r0}
bx r0
.align 2, 0
-_080EACDC: .4byte gUnknown_2022BC4
+_080EACDC: .4byte gBattleBufferA
_080EACE0: .4byte gActiveBattler
thumb_func_end sub_80EACB4
@@ -6779,15 +6779,15 @@ _080EAD1C: .4byte gPlayerParty
thumb_func_start sub_80EAD20
sub_80EAD20: @ 80EAD20
push {lr}
- ldr r1, _080EAD48 @ =gUnknown_2022BC4
+ ldr r1, _080EAD48 @ =gBattleBufferA
ldr r0, _080EAD4C @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 9
adds r1, 0x1
adds r0, r1
ldrb r0, [r0]
- bl sub_80BC3A0
- ldr r2, _080EAD50 @ =gUnknown_2023F4C
+ bl HandleIntroSlide
+ ldr r2, _080EAD50 @ =gIntroSlideFlags
ldrh r0, [r2]
movs r1, 0x1
orrs r0, r1
@@ -6796,9 +6796,9 @@ sub_80EAD20: @ 80EAD20
pop {r0}
bx r0
.align 2, 0
-_080EAD48: .4byte gUnknown_2022BC4
+_080EAD48: .4byte gBattleBufferA
_080EAD4C: .4byte gActiveBattler
-_080EAD50: .4byte gUnknown_2023F4C
+_080EAD50: .4byte gIntroSlideFlags
thumb_func_end sub_80EAD20
thumb_func_start sub_80EAD54
@@ -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
@@ -6891,7 +6891,7 @@ _080EAD64:
bl AllocSpritePalette
adds r4, r0, 0
lsls r4, 24
- ldr r1, _080EAEC0 @ =gUnknown_8239FD4
+ ldr r1, _080EAEC0 @ =gTrainerBackPicPaletteTable
ldr r0, _080EAEC4 @ =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x8]
@@ -6928,7 +6928,7 @@ _080EAD64:
adds r1, r4
ldrb r0, [r7]
strh r0, [r1, 0x8]
- ldr r3, _080EAED0 @ =gUnknown_2024018
+ ldr r3, _080EAED0 @ =gBattleSpritesDataPtr
ldr r0, [r3]
ldrb r2, [r7]
ldr r1, [r0, 0x4]
@@ -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]
@@ -6957,7 +6957,7 @@ _080EAE84:
movs r1, 0x1
orrs r0, r1
strb r0, [r2, 0x9]
- ldr r1, _080EAEDC @ =gUnknown_3004FE0
+ ldr r1, _080EAEDC @ =gBattlerControllerFuncs
ldrb r0, [r7]
lsls r0, 2
adds r0, r1
@@ -6970,20 +6970,20 @@ _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
+_080EAEC0: .4byte gTrainerBackPicPaletteTable
_080EAEC4: .4byte gSaveBlock2Ptr
_080EAEC8: .4byte sub_80EB0A8
_080EAECC: .4byte gTasks
-_080EAED0: .4byte gUnknown_2024018
-_080EAED4: .4byte gUnknown_2024000
-_080EAED8: .4byte sub_80491B0
-_080EAEDC: .4byte gUnknown_3004FE0
+_080EAED0: .4byte gBattleSpritesDataPtr
+_080EAED4: .4byte gBattlerStatusSummaryTaskId
+_080EAED8: .4byte Task_HidePartyStatusSummary
+_080EAEDC: .4byte gBattlerControllerFuncs
_080EAEE0: .4byte nullsub_13
_080EAEE4:
- ldr r0, _080EAF20 @ =gUnknown_2024018
+ ldr r0, _080EAF20 @ =gBattleSpritesDataPtr
ldr r1, [r0]
ldr r0, _080EAF24 @ =gActiveBattler
ldrb r3, [r0]
@@ -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
@@ -7014,11 +7014,11 @@ _080EAF18:
pop {r0}
bx r0
.align 2, 0
-_080EAF20: .4byte gUnknown_2024018
+_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
@@ -7031,7 +7031,7 @@ sub_80EAF34: @ 80EAF34
adds r6, r0, 0
lsls r6, 24
lsrs r6, 24
- ldr r0, _080EB07C @ =gUnknown_2024018
+ ldr r0, _080EB07C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r6, 2
@@ -7041,7 +7041,7 @@ sub_80EAF34: @ 80EAF34
ldr r0, _080EB080 @ =gBattlerPartyIndexes
lsls r2, r6, 1
adds r2, r0
- ldr r0, _080EB084 @ =gUnknown_2022BC4
+ ldr r0, _080EB084 @ =gBattleBufferA
lsls r1, r6, 9
adds r0, 0x1
adds r1, r0
@@ -7076,17 +7076,17 @@ sub_80EAF34: @ 80EAF34
mov r10, r0
adds r0, r6, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
adds r0, r6, 0
- bl GetBankSpriteDefault_Y
+ bl GetBattlerSpriteDefault_Y
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
adds r0, r6, 0
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -7178,9 +7178,9 @@ sub_80EAF34: @ 80EAF34
pop {r0}
bx r0
.align 2, 0
-_080EB07C: .4byte gUnknown_2024018
+_080EB07C: .4byte gBattleSpritesDataPtr
_080EB080: .4byte gBattlerPartyIndexes
-_080EB084: .4byte gUnknown_2022BC4
+_080EB084: .4byte gBattleBufferA
_080EB088: .4byte gPlayerParty
_080EB08C: .4byte sub_8033E3C
_080EB090: .4byte gUnknown_3004FFC
@@ -7216,7 +7216,7 @@ _080EB0CC:
ldrb r5, [r4]
ldrh r0, [r1, 0x8]
strb r0, [r4]
- ldr r0, _080EB10C @ =gUnknown_2022BC4
+ ldr r0, _080EB10C @ =gBattleBufferA
ldrb r1, [r4]
lsls r2, r1, 9
adds r0, 0x1
@@ -7228,7 +7228,7 @@ _080EB0CC:
strb r0, [r2]
ldrb r0, [r4]
bl sub_80EAF34
- ldr r1, _080EB114 @ =gUnknown_3004FE0
+ ldr r1, _080EB114 @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -7243,16 +7243,16 @@ _080EB102:
bx r0
.align 2, 0
_080EB108: .4byte gActiveBattler
-_080EB10C: .4byte gUnknown_2022BC4
+_080EB10C: .4byte gBattleBufferA
_080EB110: .4byte gBattlerPartyIndexes
-_080EB114: .4byte gUnknown_3004FE0
+_080EB114: .4byte gBattlerControllerFuncs
_080EB118: .4byte sub_80E7B4C
thumb_func_end sub_80EB0A8
thumb_func_start sub_80EB11C
sub_80EB11C: @ 80EB11C
push {r4,r5,lr}
- ldr r1, _080EB144 @ =gUnknown_2022BC4
+ ldr r1, _080EB144 @ =gBattleBufferA
ldr r0, _080EB148 @ =gActiveBattler
ldrb r2, [r0]
lsls r0, r2, 9
@@ -7269,10 +7269,10 @@ sub_80EB11C: @ 80EB11C
bl WallyBufferExecCompleted
b _080EB18A
.align 2, 0
-_080EB144: .4byte gUnknown_2022BC4
+_080EB144: .4byte gBattleBufferA
_080EB148: .4byte gActiveBattler
_080EB14C:
- ldr r0, _080EB190 @ =gUnknown_2024018
+ ldr r0, _080EB190 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r5, _080EB194 @ =gActiveBattler
ldrb r1, [r5]
@@ -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]
@@ -7306,10 +7306,10 @@ _080EB18A:
pop {r0}
bx r0
.align 2, 0
-_080EB190: .4byte gUnknown_2024018
+_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
@@ -7326,10 +7326,10 @@ sub_80EB1AC: @ 80EB1AC
ldr r4, _080EB1CC @ =gActiveBattler
ldrb r0, [r4]
movs r1, 0x1
- bl dp11b_obj_free
+ bl EndBounceEffect
ldrb r0, [r4]
movs r1, 0
- bl dp11b_obj_free
+ bl EndBounceEffect
bl WallyBufferExecCompleted
pop {r4}
pop {r0}
@@ -7350,7 +7350,7 @@ sub_80EB1D0: @ 80EB1D0
sub_80EB1DC: @ 80EB1DC
push {r4-r6,lr}
sub sp, 0x4
- ldr r5, _080EB214 @ =gUnknown_2022BC4
+ ldr r5, _080EB214 @ =gBattleBufferA
ldr r6, _080EB218 @ =gActiveBattler
ldrb r2, [r6]
lsls r1, r2, 9
@@ -7375,10 +7375,10 @@ sub_80EB1DC: @ 80EB1DC
bl WallyBufferExecCompleted
b _080EB228
.align 2, 0
-_080EB214: .4byte gUnknown_2022BC4
+_080EB214: .4byte gBattleBufferA
_080EB218: .4byte gActiveBattler
_080EB21C:
- ldr r0, _080EB230 @ =gUnknown_3004FE0
+ ldr r0, _080EB230 @ =gBattlerControllerFuncs
ldrb r1, [r6]
lsls r1, 2
adds r1, r0
@@ -7390,14 +7390,14 @@ _080EB228:
pop {r0}
bx r0
.align 2, 0
-_080EB230: .4byte gUnknown_3004FE0
+_080EB230: .4byte gBattlerControllerFuncs
_080EB234: .4byte CompleteOnFinishedBattleAnimation_4
thumb_func_end sub_80EB1DC
thumb_func_start sub_80EB238
sub_80EB238: @ 80EB238
push {r4,lr}
- ldr r1, _080EB26C @ =gUnknown_2022BC4
+ ldr r1, _080EB26C @ =gBattleBufferA
ldr r4, _080EB270 @ =gActiveBattler
ldrb r2, [r4]
lsls r0, r2, 9
@@ -7410,17 +7410,17 @@ sub_80EB238: @ 80EB238
bgt _080EB260
adds r0, r2, 0
movs r1, 0x1
- bl dp11b_obj_free
+ bl EndBounceEffect
ldrb r0, [r4]
movs r1, 0
- bl dp11b_obj_free
+ bl EndBounceEffect
_080EB260:
bl WallyBufferExecCompleted
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_080EB26C: .4byte gUnknown_2022BC4
+_080EB26C: .4byte gBattleBufferA
_080EB270: .4byte gActiveBattler
thumb_func_end sub_80EB238
@@ -7436,7 +7436,7 @@ sub_80EB274: @ 80EB274
sub_80EB280: @ 80EB280
push {r4,lr}
ldr r2, _080EB2C4 @ =gBattleOutcome
- ldr r1, _080EB2C8 @ =gUnknown_2022BC4
+ ldr r1, _080EB2C8 @ =gBattleBufferA
ldr r4, _080EB2CC @ =gActiveBattler
ldrb r0, [r4]
lsls r0, 9
@@ -7455,7 +7455,7 @@ sub_80EB280: @ 80EB280
ands r0, r1
cmp r0, 0x2
bne _080EB2BC
- ldr r0, _080EB2D4 @ =gUnknown_3004FE0
+ ldr r0, _080EB2D4 @ =gBattlerControllerFuncs
ldrb r1, [r4]
lsls r1, 2
adds r1, r0
@@ -7467,10 +7467,10 @@ _080EB2BC:
bx r0
.align 2, 0
_080EB2C4: .4byte gBattleOutcome
-_080EB2C8: .4byte gUnknown_2022BC4
+_080EB2C8: .4byte gBattleBufferA
_080EB2CC: .4byte gActiveBattler
_080EB2D0: .4byte gBattleTypeFlags
-_080EB2D4: .4byte gUnknown_3004FE0
+_080EB2D4: .4byte gBattlerControllerFuncs
_080EB2D8: .4byte sub_80E7930
thumb_func_end sub_80EB280
diff --git a/asm/battle_controller_opponent.s b/asm/battle_controller_opponent.s
deleted file mode 100644
index 0c94035ee..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 sub_8035A7C
-sub_8035A7C: @ 8035A7C
- ldr r1, _08035A8C @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_08035A90: .4byte gActiveBattler
-_08035A94: .4byte sub_8035A98
- thumb_func_end sub_8035A7C
-
- thumb_func_start sub_8035A98
-sub_8035A98: @ 8035A98
- push {lr}
- ldr r2, _08035ACC @ =gUnknown_2023BC8
- 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 @ =gUnknown_2022BC4
- 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 gUnknown_2023BC8
-_08035AD0: .4byte gBitTable
-_08035AD4: .4byte gActiveBattler
-_08035AD8: .4byte gUnknown_2022BC4
-_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 sub_803477C
- 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 @ =gUnknown_2024018
- 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 gUnknown_2024018
-_08035C2C: .4byte gActiveBattler
- thumb_func_end sub_8035BE8
-
- thumb_func_start sub_8035C30
-sub_8035C30: @ 8035C30
- push {r4-r7,lr}
- movs r6, 0
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _08035C54
- bl sub_8075290
- 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 @ =gUnknown_3004FF0
- 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 gUnknown_3004FF0
-_08035C80: .4byte gActiveBattler
-_08035C84: .4byte SpriteCallbackDummy
-_08035C88:
- ldr r2, _08035D84 @ =gSprites
- ldr r5, _08035D88 @ =gUnknown_3004FF0
- 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 @ =gUnknown_2024018
- 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 gUnknown_3004FF0
-_08035D8C: .4byte gActiveBattler
-_08035D90: .4byte SpriteCallbackDummy
-_08035D94: .4byte gUnknown_2024018
-_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 @ =gUnknown_2024018
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2024018
-_08035DE4: .4byte gActiveBattler
-_08035DE8: .4byte gUnknown_3004FE0
-_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 @ =gUnknown_2024018
- 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 sub_8075290
- 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 @ =gUnknown_3004FF0
- 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 SetBankEnemyShadowSpriteCallback
-_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 @ =gUnknown_3004FF0
- 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 SetBankEnemyShadowSpriteCallback
- ldr r0, _08035FC0 @ =gUnknown_2024018
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2024018
-_08035FC4: .4byte gActiveBattler
-_08035FC8: .4byte gBattlerPartyIndexes
-_08035FCC: .4byte gEnemyParty
-_08035FD0: .4byte gBattleTypeFlags
-_08035FD4: .4byte gUnknown_3004FFC
-_08035FD8: .4byte gSprites
-_08035FDC: .4byte gUnknown_3004FF0
-_08035FE0: .4byte gUnknown_3004FE0
-_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 @ =gUnknown_2024018
- 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 gUnknown_2024018
-_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 @ =gUnknown_3004FF0
- 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 gUnknown_3004FF0
-_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 @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_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 @ =gUnknown_3004FF0
- 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 gUnknown_3004FF0
- thumb_func_end sub_803612C
-
- thumb_func_start sub_8036170
-sub_8036170: @ 8036170
- push {r4-r6,lr}
- ldr r0, _080361D0 @ =gUnknown_2024018
- 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 EnemyShadowCallbackToSetInvisible
- ldr r1, _080361E0 @ =gUnknown_3004FF0
- 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 gUnknown_2024018
-_080361D4: .4byte gActiveBattler
-_080361D8: .4byte gBattlerSpriteIds
-_080361DC: .4byte gSprites
-_080361E0: .4byte gUnknown_3004FF0
- 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 @ =gUnknown_2024005
- strb r3, [r0]
- bl OpponentBufferExecCompleted
- b _08036272
- .align 2, 0
-_08036238: .4byte gBattlerSpriteIds
-_0803623C: .4byte gActiveBattler
-_08036240: .4byte gSprites
-_08036244: .4byte gUnknown_2024005
-_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 @ =gUnknown_3004FF0
- 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 @ =gUnknown_2024018
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_3004FF0
-_080362D4: .4byte gActiveBattler
-_080362D8: .4byte SpriteCallbackDummy
-_080362DC: .4byte gUnknown_2024018
-_080362E0: .4byte gUnknown_3004FE0
-_080362E4: .4byte sub_80362E8
- thumb_func_end sub_8036278
-
- thumb_func_start sub_80362E8
-sub_80362E8: @ 80362E8
- push {lr}
- ldr r0, _08036324 @ =gUnknown_2024018
- 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 gUnknown_2024018
-_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 @ =gUnknown_2024018
- 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 @ =gUnknown_3004FF0
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2024018
-_080363E4: .4byte gActiveBattler
-_080363E8: .4byte 0x000027f9
-_080363EC: .4byte gBattlerSpriteIds
-_080363F0: .4byte gSprites
-_080363F4: .4byte gUnknown_3004FF0
-_080363F8: .4byte gBattlerPartyIndexes
-_080363FC: .4byte gEnemyParty
-_08036400: .4byte gUnknown_3004FE0
-_08036404: .4byte sub_8036278
- thumb_func_end sub_8036334
-
- thumb_func_start sub_8036408
-sub_8036408: @ 8036408
- push {r4-r6,lr}
- ldr r6, _080364AC @ =gUnknown_2024018
- 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 SetBankEnemyShadowSpriteCallback
- ldr r1, _080364C8 @ =gUnknown_3004FE0
- 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 gUnknown_2024018
-_080364B0: .4byte gActiveBattler
-_080364B4: .4byte gBattlerPartyIndexes
-_080364B8: .4byte gEnemyParty
-_080364BC: .4byte gSprites
-_080364C0: .4byte gUnknown_3004FFC
-_080364C4: .4byte SpriteCallbackDummy
-_080364C8: .4byte gUnknown_3004FE0
-_080364CC: .4byte sub_8036334
- thumb_func_end sub_8036408
-
- thumb_func_start sub_80364D0
-sub_80364D0: @ 80364D0
- push {lr}
- ldr r0, _080364F8 @ =gUnknown_2024018
- 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 gUnknown_2024018
-_080364FC: .4byte gActiveBattler
- thumb_func_end sub_80364D0
-
- thumb_func_start sub_8036500
-sub_8036500: @ 8036500
- push {lr}
- ldr r0, _08036528 @ =gUnknown_2024018
- 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 gUnknown_2024018
-_0803652C: .4byte gActiveBattler
- thumb_func_end sub_8036500
-
- thumb_func_start OpponentBufferExecCompleted
-OpponentBufferExecCompleted: @ 8036530
- ldr r1, _08036554 @ =gUnknown_3004FE0
- ldr r2, _08036558 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803655C @ =sub_8035A98
- str r1, [r0]
- ldr r3, _08036560 @ =gUnknown_2023BC8
- 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 gUnknown_3004FE0
-_08036558: .4byte gActiveBattler
-_0803655C: .4byte sub_8035A98
-_08036560: .4byte gUnknown_2023BC8
-_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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_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 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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_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 @ =gUnknown_2022BC4
- 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 EmitDataTransfer
- bl OpponentBufferExecCompleted
- add sp, 0x58
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08036E00: .4byte gBattlerPartyIndexes
-_08036E04: .4byte gActiveBattler
-_08036E08: .4byte gUnknown_2022BC4
-_08036E0C: .4byte gEnemyParty
- thumb_func_end OpponentHandlecmd1
-
- thumb_func_start OpponentHandleSetAttributes
-OpponentHandleSetAttributes: @ 8036E10
- push {r4,r5,lr}
- ldr r1, _08036E34 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_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 sub_8034658
- ldrb r0, [r4]
- bl sub_8074900
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r3, _0803788C @ =gUnknown_2024018
- 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 gUnknown_2024018
-_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 GetBankSpriteDefault_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 sub_8074480
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r7]
- bl sub_807685C
- 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 SetBankEnemyShadowSpriteCallback
-_08037986:
- ldr r0, _080379C0 @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_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 @ =gUnknown_2022BC4
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2022BC4
-_08037A20: .4byte gUnknown_3004FE0
-_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 @ =gUnknown_2022BC4
- 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 sub_8074480
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- bl GetBankSpriteDefault_Y
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl sub_807685C
- 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 gUnknown_2022BC4
-_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 @ =gUnknown_2022BC4
- 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 @ =gUnknown_2024018
- 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 @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037BF0 @ =sub_8037C44
- str r1, [r0]
- b _08037C30
- .align 2, 0
-_08037BE0: .4byte gUnknown_2022BC4
-_08037BE4: .4byte gActiveBattler
-_08037BE8: .4byte gUnknown_2024018
-_08037BEC: .4byte gUnknown_3004FE0
-_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 EnemyShadowCallbackToSetInvisible
- ldr r1, _08037C40 @ =gUnknown_3004FF0
- 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 gUnknown_3004FF0
- thumb_func_end sub_8037BAC
-
- thumb_func_start sub_8037C44
-sub_8037C44: @ 8037C44
- push {r4-r6,lr}
- ldr r6, _08037C64 @ =gUnknown_2024018
- 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 gUnknown_2024018
-_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 @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_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 sub_80346C4
- 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 sub_807685C
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_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 sub_80346C4
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_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 @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_08038120: .4byte sub_8035B58
- thumb_func_end sub_8038078
-
- thumb_func_start sub_8038124
-sub_8038124: @ 8038124
- push {r4-r6,lr}
- ldr r6, _08038170 @ =gUnknown_2024018
- 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 gUnknown_2024018
-_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 @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_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 @ =gUnknown_2022BC4
- 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 @ =gUnknown_2037EEC
- 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 @ =gUnknown_2037EE8
- 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 @ =gUnknown_2024008
- 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 gUnknown_2022BC4
-_080382EC: .4byte gAnimMoveTurn
-_080382F0: .4byte gUnknown_2037EEC
-_080382F4: .4byte gUnknown_2037EE8
-_080382F8: .4byte gUnknown_2037EFE
-_080382FC: .4byte gUnknown_2037F00
-_08038300: .4byte gAnimDisableStructPtr
-_08038304: .4byte gUnknown_2024008
-_08038308:
- ldr r0, _0803832C @ =gUnknown_2024018
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2024018
-_08038330: .4byte gUnknown_3004FE0
-_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 @ =gUnknown_2022BC4
- 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 @ =gUnknown_2024018
- 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 gUnknown_2022BC4
-_08038388: .4byte gActiveBattler
-_0803838C: .4byte gUnknown_2024018
-_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 @ =gUnknown_2037EDC
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _08038464 @ =gUnknown_2037EE1
- 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 @ =gUnknown_2024018
- 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 gUnknown_2037EDC
-_08038464: .4byte gUnknown_2037EE1
-_08038468: .4byte gUnknown_2024018
-_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 sub_80D7274
- ldrh r0, [r4]
- bl sub_80D89B0
- lsls r0, 24
- cmp r0, 0
- beq _08038504
- ldr r0, _08038500 @ =gDisplayedStringBattle
- movs r1, 0x40
- bl sub_80D87BC
- 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 sub_80D87BC
-_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 @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_08038544: .4byte gActiveBattler
-_08038548: .4byte sub_80E85C0
-_0803854C:
- ldr r1, _0803855C @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_08038560: .4byte gActiveBattler
-_08038564: .4byte sub_80E8598
-_08038568:
- ldr r1, _0803857C @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_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 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 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 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 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 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 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 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 @ =gUnknown_2022BC4
- 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 @ =gUnknown_3004FF0
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- mov r2, r8
- bl SetBattleBarStruct
- b _080388FE
- .align 2, 0
-_080388BC: .4byte gUnknown_2022BC4
-_080388C0: .4byte gActiveBattler
-_080388C4: .4byte 0x00007fff
-_080388C8: .4byte gBattlerPartyIndexes
-_080388CC: .4byte gEnemyParty
-_080388D0: .4byte gUnknown_3004FF0
-_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 @ =gUnknown_3004FF0
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- movs r3, 0
- bl SetBattleBarStruct
-_080388FE:
- ldr r1, _08038928 @ =gUnknown_3004FE0
- 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 gUnknown_3004FF0
-_08038928: .4byte gUnknown_3004FE0
-_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 @ =gUnknown_3004FF0
- 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 @ =gUnknown_2024018
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_3004FF0
-_080389A4: .4byte gBattlerPartyIndexes
-_080389A8: .4byte gEnemyParty
-_080389AC: .4byte gUnknown_2024018
-_080389B0: .4byte gUnknown_3004FE0
-_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 @ =gUnknown_2022BC4
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2022BC4
-_08038A18: .4byte gUnknown_3004FE0
-_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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_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 @ =gUnknown_2024005
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2024005
-_08038B88: .4byte gUnknown_3004FE0
-_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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
- thumb_func_end OpponentHandleEffectivenessSound
-
- thumb_func_start OpponentHandlecmd44
-OpponentHandlecmd44: @ 8038BE0
- push {lr}
- ldr r2, _08038C08 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_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 @ =gUnknown_2022BC4
- ldr r0, _08038C78 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80BC3A0
- ldr r2, _08038C7C @ =gUnknown_2023F4C
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl OpponentBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08038C74: .4byte gUnknown_2022BC4
-_08038C78: .4byte gActiveBattler
-_08038C7C: .4byte gUnknown_2023F4C
- 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 @ =gUnknown_2024018
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2024018
-_08038D80: .4byte gUnknown_2024000
-_08038D84: .4byte sub_80491B0
-_08038D88: .4byte gUnknown_3004FE0
-_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 sub_803477C
- 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 sub_8075290
- 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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_08038E2C: .4byte gBattlerPartyIndexes
-_08038E30:
- ldr r4, _08038E94 @ =gUnknown_2022BC4
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2022BC4
-_08038E98: .4byte gBattlerPartyIndexes
-_08038E9C: .4byte gUnknown_3004FE0
-_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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_08038ED4: .4byte gActiveBattler
-_08038ED8:
- ldr r4, _08038F30 @ =gUnknown_2024018
- 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 @ =gUnknown_2022BC4
- 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 gUnknown_2024018
-_08038F34: .4byte gActiveBattler
-_08038F38: .4byte gUnknown_2022BC4
-_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 @ =gUnknown_2024018
- 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 @ =gUnknown_3004FE0
- 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 gUnknown_2024018
-_08038FB4: .4byte gUnknown_3004FE0
-_08038FB8: .4byte sub_8038FBC
- thumb_func_end sub_8038EA8
-
- thumb_func_start sub_8038FBC
-sub_8038FBC: @ 8038FBC
- push {r4,lr}
- ldr r4, _08038FFC @ =gUnknown_2024018
- 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 gUnknown_2024018
-_08039000: .4byte gActiveBattler
- thumb_func_end sub_8038FBC
-
- thumb_func_start sub_8039004
-sub_8039004: @ 8039004
- push {lr}
- ldr r0, _08039040 @ =gUnknown_2024018
- 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 gUnknown_2024018
-_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 sub_8075224
- 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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
- 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 @ =gUnknown_2022BC4
- 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 gUnknown_2022BC4
-_0803910C:
- ldr r0, _08039120 @ =gUnknown_3004FE0
- 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 gUnknown_3004FE0
-_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 @ =gUnknown_3004F80
- 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 gUnknown_3004F80
- 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
deleted file mode 100644
index e3db6d88e..000000000
--- a/asm/battle_controller_player.s
+++ /dev/null
@@ -1,11027 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_13
-nullsub_13: @ 802E310
- bx lr
- thumb_func_end nullsub_13
-
- thumb_func_start SetBankFuncToPlayerBufferRunCommand
-SetBankFuncToPlayerBufferRunCommand: @ 802E314
- ldr r1, _0802E32C @ =gUnknown_3004FE0
- ldr r0, _0802E330 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802E334 @ =PlayerBufferRunCommand
- str r1, [r0]
- ldr r1, _0802E338 @ =gUnknown_2024005
- movs r0, 0
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0802E32C: .4byte gUnknown_3004FE0
-_0802E330: .4byte gActiveBattler
-_0802E334: .4byte PlayerBufferRunCommand
-_0802E338: .4byte gUnknown_2024005
- thumb_func_end SetBankFuncToPlayerBufferRunCommand
-
- thumb_func_start PlayerBufferExecCompleted
-PlayerBufferExecCompleted: @ 802E33C
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _0802E37C @ =gUnknown_3004FE0
- ldr r4, _0802E380 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802E384 @ =PlayerBufferRunCommand
- str r1, [r0]
- ldr r0, _0802E388 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E390
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, _0802E38C @ =gUnknown_2022BC4
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0802E3A2
- .align 2, 0
-_0802E37C: .4byte gUnknown_3004FE0
-_0802E380: .4byte gActiveBattler
-_0802E384: .4byte PlayerBufferRunCommand
-_0802E388: .4byte gBattleTypeFlags
-_0802E38C: .4byte gUnknown_2022BC4
-_0802E390:
- ldr r2, _0802E3AC @ =gUnknown_2023BC8
- ldr r1, _0802E3B0 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0802E3A2:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E3AC: .4byte gUnknown_2023BC8
-_0802E3B0: .4byte gBitTable
- thumb_func_end PlayerBufferExecCompleted
-
- thumb_func_start PlayerBufferRunCommand
-PlayerBufferRunCommand: @ 802E3B4
- push {lr}
- ldr r2, _0802E3E8 @ =gUnknown_2023BC8
- ldr r1, _0802E3EC @ =gBitTable
- ldr r0, _0802E3F0 @ =gActiveBattler
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0802E400
- ldr r0, _0802E3F4 @ =gUnknown_2022BC4
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _0802E3FC
- ldr r0, _0802E3F8 @ =gUnknown_825089C
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _0802E400
- .align 2, 0
-_0802E3E8: .4byte gUnknown_2023BC8
-_0802E3EC: .4byte gBitTable
-_0802E3F0: .4byte gActiveBattler
-_0802E3F4: .4byte gUnknown_2022BC4
-_0802E3F8: .4byte gUnknown_825089C
-_0802E3FC:
- bl PlayerBufferExecCompleted
-_0802E400:
- pop {r0}
- bx r0
- thumb_func_end PlayerBufferRunCommand
-
- thumb_func_start CompleteOnBankSpritePosX_0
-CompleteOnBankSpritePosX_0: @ 802E404
- push {lr}
- ldr r2, _0802E42C @ =gSprites
- ldr r1, _0802E430 @ =gBattlerSpriteIds
- ldr r0, _0802E434 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x24
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0802E426
- bl PlayerBufferExecCompleted
-_0802E426:
- pop {r0}
- bx r0
- .align 2, 0
-_0802E42C: .4byte gSprites
-_0802E430: .4byte gBattlerSpriteIds
-_0802E434: .4byte gActiveBattler
- thumb_func_end CompleteOnBankSpritePosX_0
-
- thumb_func_start sub_802E438
-sub_802E438: @ 802E438
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _0802E498 @ =gUnknown_2022BC4
- ldr r4, _0802E49C @ =gActiveBattler
- ldrb r0, [r4]
- lsls r2, r0, 9
- adds r1, r7, 0x2
- adds r1, r2, r1
- ldrb r5, [r1]
- adds r1, r7, 0x3
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r5, r1
- movs r1, 0x1
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldr r0, _0802E4A0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0802E4D0
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802E4A4 @ =gUnknown_2023FF8
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0802E4B8
- cmp r0, 0x1
- bgt _0802E4A8
- cmp r0, 0
- beq _0802E4B2
- b _0802E616
- .align 2, 0
-_0802E498: .4byte gUnknown_2022BC4
-_0802E49C: .4byte gActiveBattler
-_0802E4A0: .4byte gMain
-_0802E4A4: .4byte gUnknown_2023FF8
-_0802E4A8:
- cmp r0, 0x2
- beq _0802E4BE
- cmp r0, 0x3
- beq _0802E4C4
- b _0802E616
-_0802E4B2:
- movs r0, 0x1
- movs r1, 0
- b _0802E610
-_0802E4B8:
- movs r0, 0x1
- movs r1, 0x1
- b _0802E610
-_0802E4BE:
- movs r0, 0x1
- movs r1, 0x2
- b _0802E610
-_0802E4C4:
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0
- bl EmitTwoReturnValues
- b _0802E616
-_0802E4D0:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802E508
- ldr r5, _0802E504 @ =gUnknown_2023FF8
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0802E4EA
- b _0802E634
-_0802E4EA:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0802E590
- .align 2, 0
-_0802E504: .4byte gUnknown_2023FF8
-_0802E508:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802E540
- ldr r5, _0802E53C @ =gUnknown_2023FF8
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0802E522
- b _0802E634
-_0802E522:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0802E590
- .align 2, 0
-_0802E53C: .4byte gUnknown_2023FF8
-_0802E540:
- movs r0, 0x40
- mov r8, r0
- ands r0, r1
- cmp r0, 0
- beq _0802E560
- ldr r5, _0802E55C @ =gUnknown_2023FF8
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E634
- b _0802E578
- .align 2, 0
-_0802E55C: .4byte gUnknown_2023FF8
-_0802E560:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802E5A8
- ldr r5, _0802E5A4 @ =gUnknown_2023FF8
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0802E634
-_0802E578:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
-_0802E590:
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- b _0802E634
- .align 2, 0
-_0802E5A4: .4byte gUnknown_2023FF8
-_0802E5A8:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E628
- ldr r6, _0802E61C @ =gBattleTypeFlags
- ldr r0, [r6]
- ands r0, r2
- cmp r0, 0
- beq _0802E634
- ldrb r0, [r4]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0802E634
- movs r0, 0
- bl GetBattlerAtPosition
- ldr r1, _0802E620 @ =gAbsentBattlerFlags
- ldrb r1, [r1]
- ldr r2, _0802E624 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802E634
- ldr r0, [r6]
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- bne _0802E634
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r7, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0802E606
- cmp r5, 0xC
- bhi _0802E634
- adds r0, r5, 0
- movs r1, 0x1
- bl AddBagItem
-_0802E606:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- movs r1, 0xC
-_0802E610:
- movs r2, 0
- bl EmitTwoReturnValues
-_0802E616:
- bl PlayerBufferExecCompleted
- b _0802E634
- .align 2, 0
-_0802E61C: .4byte gBattleTypeFlags
-_0802E620: .4byte gAbsentBattlerFlags
-_0802E624: .4byte gBitTable
-_0802E628:
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0802E634
- bl sub_8048A4C
-_0802E634:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_802E438
-
- thumb_func_start sub_802E640
-sub_802E640: @ 802E640
- push {r4,lr}
- ldr r4, _0802E668 @ =gActiveBattler
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- ldr r1, _0802E66C @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802E670 @ =sub_802E674
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E668: .4byte gActiveBattler
-_0802E66C: .4byte gUnknown_3004FE0
-_0802E670: .4byte sub_802E674
- thumb_func_end sub_802E640
-
- thumb_func_start sub_802E674
-sub_802E674: @ 802E674
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r1, _0802E708 @ =gUnknown_8250980
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- ldr r0, _0802E70C @ =gUnknown_3004FF4
- ldrb r0, [r0]
- movs r1, 0x1
- movs r2, 0xF
- movs r3, 0x1
- bl dp11b_obj_instanciate
- movs r4, 0
- ldr r0, _0802E710 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802E6B6
-_0802E69A:
- ldr r0, _0802E70C @ =gUnknown_3004FF4
- ldrb r0, [r0]
- cmp r4, r0
- beq _0802E6AC
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0x1
- bl dp11b_obj_free
-_0802E6AC:
- adds r4, 0x1
- ldr r0, _0802E710 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- blt _0802E69A
-_0802E6B6:
- ldr r0, _0802E714 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802E72C
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802E718 @ =gSprites
- ldr r1, _0802E71C @ =gBattlerSpriteIds
- ldr r4, _0802E70C @ =gUnknown_3004FF4
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802E720 @ =sub_8012098
- str r1, [r0]
- ldr r1, _0802E724 @ =gUnknown_2023FFC
- ldr r0, _0802E728 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldrb r0, [r4]
- lsls r0, 8
- orrs r2, r0
- movs r0, 0x1
- movs r1, 0xA
- bl EmitTwoReturnValues
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- bl PlayerBufferExecCompleted
- b _0802E9DC
- .align 2, 0
-_0802E708: .4byte gUnknown_8250980
-_0802E70C: .4byte gUnknown_3004FF4
-_0802E710: .4byte gBattlersCount
-_0802E714: .4byte gMain
-_0802E718: .4byte gSprites
-_0802E71C: .4byte gBattlerSpriteIds
-_0802E720: .4byte sub_8012098
-_0802E724: .4byte gUnknown_2023FFC
-_0802E728: .4byte gActiveBattler
-_0802E72C:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E7A0
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802E784 @ =gSprites
- ldr r1, _0802E788 @ =gBattlerSpriteIds
- ldr r5, _0802E78C @ =gUnknown_3004FF4
- 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, _0802E790 @ =sub_8012098
- str r1, [r0]
- ldr r1, _0802E794 @ =gUnknown_3004FE0
- ldr r4, _0802E798 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802E79C @ =sub_802EA10
- str r1, [r0]
- ldrb r0, [r4]
- movs r1, 0x1
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r5]
- movs r1, 0x1
- bl dp11b_obj_free
- b _0802E9DC
- .align 2, 0
-_0802E784: .4byte gSprites
-_0802E788: .4byte gBattlerSpriteIds
-_0802E78C: .4byte gUnknown_3004FF4
-_0802E790: .4byte sub_8012098
-_0802E794: .4byte gUnknown_3004FE0
-_0802E798: .4byte gActiveBattler
-_0802E79C: .4byte sub_802EA10
-_0802E7A0:
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- bne _0802E7AA
- b _0802E8C4
-_0802E7AA:
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802E7DC @ =gSprites
- ldr r1, _0802E7E0 @ =gBattlerSpriteIds
- ldr r3, _0802E7E4 @ =gUnknown_3004FF4
- ldrb r0, [r3]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802E7E8 @ =sub_8012098
- str r1, [r0]
- adds r5, r3, 0
-_0802E7CC:
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r1, r0, 24
- movs r4, 0
- mov r0, sp
- b _0802E7F6
- .align 2, 0
-_0802E7DC: .4byte gSprites
-_0802E7E0: .4byte gBattlerSpriteIds
-_0802E7E4: .4byte gUnknown_3004FF4
-_0802E7E8: .4byte sub_8012098
-_0802E7EC:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0802E7FC
- mov r2, sp
- adds r0, r2, r4
-_0802E7F6:
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802E7EC
-_0802E7FC:
- subs r4, 0x1
- cmp r4, 0
- bge _0802E804
- movs r4, 0x4
-_0802E804:
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl GetBattlerAtPosition
- strb r0, [r5]
- ldr r1, _0802E838 @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- beq _0802E7FC
- movs r4, 0
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0802E882
- cmp r0, 0x1
- bgt _0802E83C
- cmp r0, 0
- beq _0802E846
- b _0802E884
- .align 2, 0
-_0802E838: .4byte gBattlersCount
-_0802E83C:
- cmp r0, 0x2
- beq _0802E846
- cmp r0, 0x3
- beq _0802E882
- b _0802E884
-_0802E846:
- ldr r2, _0802E8A4 @ =gActiveBattler
- ldrb r0, [r2]
- ldrb r1, [r5]
- cmp r0, r1
- bne _0802E882
- ldr r1, _0802E8A8 @ =gBattlerPartyIndexes
- ldrb r2, [r2]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802E8AC @ =gPlayerParty
- adds r0, r1
- ldr r1, _0802E8B0 @ =gUnknown_2023FFC
- adds r2, r1
- ldrb r1, [r2]
- adds r1, 0xD
- bl GetMonData
- ldr r2, _0802E8B4 @ =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E884
-_0802E882:
- adds r4, 0x1
-_0802E884:
- ldr r0, _0802E8B8 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0802E8BC @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- ldr r0, _0802E8C0 @ =gUnknown_3004FF4
- cmp r1, 0
- beq _0802E89C
- movs r4, 0
-_0802E89C:
- cmp r4, 0
- beq _0802E7CC
- b _0802E9C4
- .align 2, 0
-_0802E8A4: .4byte gActiveBattler
-_0802E8A8: .4byte gBattlerPartyIndexes
-_0802E8AC: .4byte gPlayerParty
-_0802E8B0: .4byte gUnknown_2023FFC
-_0802E8B4: .4byte gBattleMoves
-_0802E8B8: .4byte gAbsentBattlerFlags
-_0802E8BC: .4byte gBitTable
-_0802E8C0: .4byte gUnknown_3004FF4
-_0802E8C4:
- movs r0, 0x90
- ands r0, r1
- cmp r0, 0
- bne _0802E8CE
- b _0802E9DC
-_0802E8CE:
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802E900 @ =gSprites
- ldr r1, _0802E904 @ =gBattlerSpriteIds
- ldr r3, _0802E908 @ =gUnknown_3004FF4
- ldrb r0, [r3]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802E90C @ =sub_8012098
- str r1, [r0]
- adds r5, r3, 0
-_0802E8F0:
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r1, r0, 24
- movs r4, 0
- mov r0, sp
- b _0802E91A
- .align 2, 0
-_0802E900: .4byte gSprites
-_0802E904: .4byte gBattlerSpriteIds
-_0802E908: .4byte gUnknown_3004FF4
-_0802E90C: .4byte sub_8012098
-_0802E910:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0802E920
- mov r2, sp
- adds r0, r2, r4
-_0802E91A:
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802E910
-_0802E920:
- adds r4, 0x1
- cmp r4, 0x3
- ble _0802E928
- movs r4, 0
-_0802E928:
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl GetBattlerAtPosition
- strb r0, [r5]
- ldr r1, _0802E95C @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- beq _0802E920
- movs r4, 0
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0802E9A6
- cmp r0, 0x1
- bgt _0802E960
- cmp r0, 0
- beq _0802E96A
- b _0802E9A8
- .align 2, 0
-_0802E95C: .4byte gBattlersCount
-_0802E960:
- cmp r0, 0x2
- beq _0802E96A
- cmp r0, 0x3
- beq _0802E9A6
- b _0802E9A8
-_0802E96A:
- ldr r2, _0802E9E4 @ =gActiveBattler
- ldrb r0, [r2]
- ldrb r1, [r5]
- cmp r0, r1
- bne _0802E9A6
- ldr r1, _0802E9E8 @ =gBattlerPartyIndexes
- ldrb r2, [r2]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802E9EC @ =gPlayerParty
- adds r0, r1
- ldr r1, _0802E9F0 @ =gUnknown_2023FFC
- adds r2, r1
- ldrb r1, [r2]
- adds r1, 0xD
- bl GetMonData
- ldr r2, _0802E9F4 @ =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E9A8
-_0802E9A6:
- adds r4, 0x1
-_0802E9A8:
- ldr r0, _0802E9F8 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0802E9FC @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- ldr r0, _0802EA00 @ =gUnknown_3004FF4
- cmp r1, 0
- beq _0802E9C0
- movs r4, 0
-_0802E9C0:
- cmp r4, 0
- beq _0802E8F0
-_0802E9C4:
- ldr r2, _0802EA04 @ =gSprites
- ldr r1, _0802EA08 @ =gBattlerSpriteIds
- 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, _0802EA0C @ =sub_8012044
- str r1, [r0]
-_0802E9DC:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E9E4: .4byte gActiveBattler
-_0802E9E8: .4byte gBattlerPartyIndexes
-_0802E9EC: .4byte gPlayerParty
-_0802E9F0: .4byte gUnknown_2023FFC
-_0802E9F4: .4byte gBattleMoves
-_0802E9F8: .4byte gAbsentBattlerFlags
-_0802E9FC: .4byte gBitTable
-_0802EA00: .4byte gUnknown_3004FF4
-_0802EA04: .4byte gSprites
-_0802EA08: .4byte gBattlerSpriteIds
-_0802EA0C: .4byte sub_8012044
- thumb_func_end sub_802E674
-
- thumb_func_start sub_802EA10
-sub_802EA10: @ 802EA10
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r0, 0
- mov r8, r0
- ldr r6, _0802EA6C @ =gActiveBattler
- ldrb r0, [r6]
- lsls r0, 9
- ldr r1, _0802EA70 @ =gUnknown_2022BC8
- adds r7, r0, r1
- bl sub_8033AC8
- ldr r0, _0802EA74 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r5, 0x1
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _0802EA3A
- b _0802EC10
-_0802EA3A:
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802EA78 @ =gUnknown_2023FFC
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r1, r7, r0
- ldrh r0, [r1]
- cmp r0, 0xAE
- bne _0802EA7C
- ldrb r0, [r7, 0x12]
- movs r4, 0
- cmp r0, 0x7
- beq _0802EA8A
- ldrb r1, [r7, 0x13]
- movs r0, 0x7
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- asrs r4, r0, 31
- movs r0, 0x10
- ands r4, r0
- b _0802EA8A
- .align 2, 0
-_0802EA6C: .4byte gActiveBattler
-_0802EA70: .4byte gUnknown_2022BC8
-_0802EA74: .4byte gMain
-_0802EA78: .4byte gUnknown_2023FFC
-_0802EA7C:
- ldr r2, _0802EA9C @ =gBattleMoves
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r4, [r0, 0x6]
-_0802EA8A:
- movs r0, 0x10
- ands r0, r4
- cmp r0, 0
- beq _0802EAA8
- ldr r0, _0802EAA0 @ =gUnknown_3004FF4
- ldr r1, _0802EAA4 @ =gActiveBattler
- ldrb r1, [r1]
- strb r1, [r0]
- b _0802EAC2
- .align 2, 0
-_0802EA9C: .4byte gBattleMoves
-_0802EAA0: .4byte gUnknown_3004FF4
-_0802EAA4: .4byte gActiveBattler
-_0802EAA8:
- ldr r0, _0802EAEC @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- adds r1, r0, 0
- movs r2, 0x1
- movs r0, 0x1
- ands r0, r1
- eors r0, r2
- bl GetBattlerAtPosition
- ldr r1, _0802EAF0 @ =gUnknown_3004FF4
- strb r0, [r1]
-_0802EAC2:
- ldr r3, _0802EAF4 @ =gUnknown_2022BC4
- ldr r5, _0802EAEC @ =gActiveBattler
- ldrb r2, [r5]
- lsls r1, r2, 9
- adds r0, r3, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802EAF8
- movs r0, 0x2
- ands r0, r4
- cmp r0, 0
- beq _0802EB3A
- adds r0, r3, 0x2
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802EB3A
- movs r0, 0x1
- add r8, r0
- b _0802EB3A
- .align 2, 0
-_0802EAEC: .4byte gActiveBattler
-_0802EAF0: .4byte gUnknown_3004FF4
-_0802EAF4: .4byte gUnknown_2022BC4
-_0802EAF8:
- movs r0, 0x7D
- ands r0, r4
- cmp r0, 0
- bne _0802EB04
- movs r0, 0x1
- add r8, r0
-_0802EB04:
- ldr r0, _0802EB78 @ =gUnknown_2023FFC
- adds r0, r2, r0
- adds r1, r7, 0
- adds r1, 0x8
- ldrb r0, [r0]
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _0802EB36
- movs r0, 0x12
- ands r0, r4
- cmp r0, 0
- bne _0802EB3A
- movs r0, 0
- bl CountAliveMonsInBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _0802EB3A
- ldrb r0, [r5]
- bl GetDefaultMoveTarget
- ldr r1, _0802EB7C @ =gUnknown_3004FF4
- strb r0, [r1]
-_0802EB36:
- movs r0, 0
- mov r8, r0
-_0802EB3A:
- bl ResetPaletteFadeControl
- movs r0, 0xF0
- lsls r0, 12
- ldr r1, _0802EB80 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl BeginNormalPaletteFade
- mov r0, r8
- cmp r0, 0
- bne _0802EB88
- ldr r1, _0802EB78 @ =gUnknown_2023FFC
- ldr r0, _0802EB84 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldr r0, _0802EB7C @ =gUnknown_3004FF4
- ldrb r0, [r0]
- lsls r0, 8
- orrs r2, r0
- movs r0, 0x1
- movs r1, 0xA
- bl EmitTwoReturnValues
- bl PlayerBufferExecCompleted
- b _0802EDBA
- .align 2, 0
-_0802EB78: .4byte gUnknown_2023FFC
-_0802EB7C: .4byte gUnknown_3004FF4
-_0802EB80: .4byte 0x00007fff
-_0802EB84: .4byte gActiveBattler
-_0802EB88:
- ldr r1, _0802EBA4 @ =gUnknown_3004FE0
- ldr r2, _0802EBA8 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802EBAC @ =sub_802E674
- str r1, [r0]
- movs r0, 0x12
- ands r4, r0
- cmp r4, 0
- beq _0802EBB4
- ldr r1, _0802EBB0 @ =gUnknown_3004FF4
- ldrb r0, [r2]
- b _0802EBE4
- .align 2, 0
-_0802EBA4: .4byte gUnknown_3004FE0
-_0802EBA8: .4byte gActiveBattler
-_0802EBAC: .4byte sub_802E674
-_0802EBB0: .4byte gUnknown_3004FF4
-_0802EBB4:
- movs r0, 0x1
- bl GetBattlerAtPosition
- ldr r1, _0802EBD4 @ =gAbsentBattlerFlags
- ldrb r1, [r1]
- ldr r2, _0802EBD8 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0802EBDC
- movs r0, 0x3
- b _0802EBDE
- .align 2, 0
-_0802EBD4: .4byte gAbsentBattlerFlags
-_0802EBD8: .4byte gBitTable
-_0802EBDC:
- movs r0, 0x1
-_0802EBDE:
- bl GetBattlerAtPosition
- ldr r1, _0802EC00 @ =gUnknown_3004FF4
-_0802EBE4:
- strb r0, [r1]
- ldr r2, _0802EC04 @ =gSprites
- ldr r1, _0802EC08 @ =gBattlerSpriteIds
- ldr r0, _0802EC00 @ =gUnknown_3004FF4
- 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, _0802EC0C @ =sub_8012044
- b _0802EDB8
- .align 2, 0
-_0802EC00: .4byte gUnknown_3004FF4
-_0802EC04: .4byte gSprites
-_0802EC08: .4byte gBattlerSpriteIds
-_0802EC0C: .4byte sub_8012044
-_0802EC10:
- movs r7, 0x2
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- beq _0802EC38
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802EC34 @ =0x0000ffff
- movs r0, 0x1
- movs r1, 0xA
- bl EmitTwoReturnValues
- bl PlayerBufferExecCompleted
- bl ResetPaletteFadeControl
- b _0802ED2C
- .align 2, 0
-_0802EC34: .4byte 0x0000ffff
-_0802EC38:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802EC68
- ldr r4, _0802EC64 @ =gUnknown_2023FFC
- ldrb r0, [r6]
- adds r2, r0, r4
- ldrb r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _0802EC52
- b _0802EDBA
-_0802EC52:
- ldrb r0, [r2]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r6]
- adds r1, r4
- ldrb r0, [r1]
- movs r2, 0x1
- eors r0, r2
- b _0802ED10
- .align 2, 0
-_0802EC64: .4byte gUnknown_2023FFC
-_0802EC68:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802ECAC
- ldr r4, _0802ECA4 @ =gUnknown_2023FFC
- ldrb r0, [r6]
- adds r3, r0, r4
- ldrb r2, [r3]
- movs r7, 0x1
- adds r0, r5, 0
- ands r0, r2
- cmp r0, 0
- beq _0802EC84
- b _0802EDBA
-_0802EC84:
- ldr r1, _0802ECA8 @ =gUnknown_3004FF8
- adds r0, r7, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcc _0802EC92
- b _0802EDBA
-_0802EC92:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r6]
- adds r1, r4
- ldrb r0, [r1]
- eors r0, r7
- b _0802ED10
- .align 2, 0
-_0802ECA4: .4byte gUnknown_2023FFC
-_0802ECA8: .4byte gUnknown_3004FF8
-_0802ECAC:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802ECDC
- ldr r4, _0802ECD8 @ =gUnknown_2023FFC
- ldrb r0, [r6]
- adds r2, r0, r4
- ldrb r1, [r2]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _0802ECC6
- b _0802EDBA
-_0802ECC6:
- ldrb r0, [r2]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r6]
- adds r1, r4
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- b _0802ED10
- .align 2, 0
-_0802ECD8: .4byte gUnknown_2023FFC
-_0802ECDC:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802ED4C
- ldr r4, _0802ED40 @ =gUnknown_2023FFC
- ldrb r0, [r6]
- adds r3, r0, r4
- ldrb r2, [r3]
- movs r5, 0x2
- adds r0, r7, 0
- ands r0, r2
- cmp r0, 0
- bne _0802EDBA
- ldr r1, _0802ED44 @ =gUnknown_3004FF8
- adds r0, r5, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802EDBA
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r6]
- adds r1, r4
- ldrb r0, [r1]
- eors r0, r5
-_0802ED10:
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- bl MoveSelectionDisplayPpNumber
- bl MoveSelectionDisplayMoveType
-_0802ED2C:
- movs r0, 0xF0
- lsls r0, 12
- ldr r1, _0802ED48 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl BeginNormalPaletteFade
- b _0802EDBA
- .align 2, 0
-_0802ED40: .4byte gUnknown_2023FFC
-_0802ED44: .4byte gUnknown_3004FF8
-_0802ED48: .4byte 0x00007fff
-_0802ED4C:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0802EDBA
- ldr r0, _0802ED84 @ =gUnknown_3004FF8
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _0802EDBA
- ldr r0, _0802ED88 @ =gBattleTypeFlags
- ldr r5, [r0]
- ands r5, r7
- cmp r5, 0
- bne _0802EDBA
- ldr r4, _0802ED8C @ =gUnknown_2023FFC
- ldrb r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- ldrb r0, [r6]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802ED94
- ldr r0, _0802ED90 @ =gUnknown_3004FF4
- strb r5, [r0]
- b _0802ED9C
- .align 2, 0
-_0802ED84: .4byte gUnknown_3004FF8
-_0802ED88: .4byte gBattleTypeFlags
-_0802ED8C: .4byte gUnknown_2023FFC
-_0802ED90: .4byte gUnknown_3004FF4
-_0802ED94:
- ldr r1, _0802EDC8 @ =gUnknown_3004FF4
- adds r0, 0x1
- strb r0, [r1]
- adds r0, r1, 0
-_0802ED9C:
- ldrb r0, [r0]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
- ldr r0, _0802EDCC @ =gUnknown_83FE7A0
- movs r1, 0xB
- bl sub_80D87BC
- ldr r1, _0802EDD0 @ =gUnknown_3004FE0
- ldr r0, _0802EDD4 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802EDD8 @ =sub_802EF58
-_0802EDB8:
- str r1, [r0]
-_0802EDBA:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802EDC8: .4byte gUnknown_3004FF4
-_0802EDCC: .4byte gUnknown_83FE7A0
-_0802EDD0: .4byte gUnknown_3004FE0
-_0802EDD4: .4byte gActiveBattler
-_0802EDD8: .4byte sub_802EF58
- thumb_func_end sub_802EA10
-
- thumb_func_start sub_802EDDC
-sub_802EDDC: @ 802EDDC
- push {r4-r7,lr}
- movs r7, 0
- ldr r4, _0802EF40 @ =gMain
- ldrh r1, [r4, 0x2E]
- movs r6, 0x1
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0802EDF6
- movs r0, 0x5
- bl PlaySE
- movs r7, 0x1
-_0802EDF6:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802EE18
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802EF44 @ =gBattle_BG0_X
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0802EF48 @ =gBattle_BG0_Y
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- movs r7, 0xFF
-_0802EE18:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802EE58
- ldr r5, _0802EF4C @ =gUnknown_2023FFC
- ldr r4, _0802EF50 @ =gActiveBattler
- ldrb r0, [r4]
- adds r2, r0, r5
- ldrb r1, [r2]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0802EE58
- ldrb r0, [r2]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- eors r0, r2
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
-_0802EE58:
- ldr r0, _0802EF40 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802EEA6
- ldr r5, _0802EF4C @ =gUnknown_2023FFC
- ldr r4, _0802EF50 @ =gActiveBattler
- ldrb r0, [r4]
- adds r3, r0, r5
- ldrb r2, [r3]
- movs r6, 0x1
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0802EEA6
- ldr r1, _0802EF54 @ =gUnknown_3004FF8
- adds r0, r6, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802EEA6
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- eors r0, r6
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
-_0802EEA6:
- ldr r0, _0802EF40 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802EEE8
- ldr r5, _0802EF4C @ =gUnknown_2023FFC
- ldr r4, _0802EF50 @ =gActiveBattler
- ldrb r0, [r4]
- adds r2, r0, r5
- ldrb r1, [r2]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802EEE8
- ldrb r0, [r2]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
-_0802EEE8:
- ldr r0, _0802EF40 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802EF36
- ldr r5, _0802EF4C @ =gUnknown_2023FFC
- ldr r4, _0802EF50 @ =gActiveBattler
- ldrb r0, [r4]
- adds r3, r0, r5
- ldrb r2, [r3]
- movs r6, 0x2
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- bne _0802EF36
- ldr r1, _0802EF54 @ =gUnknown_3004FF8
- adds r0, r6, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802EF36
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- eors r0, r6
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
-_0802EF36:
- adds r0, r7, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0802EF40: .4byte gMain
-_0802EF44: .4byte gBattle_BG0_X
-_0802EF48: .4byte gBattle_BG0_Y
-_0802EF4C: .4byte gUnknown_2023FFC
-_0802EF50: .4byte gActiveBattler
-_0802EF54: .4byte gUnknown_3004FF8
- thumb_func_end sub_802EDDC
-
- thumb_func_start sub_802EF58
-sub_802EF58: @ 802EF58
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- ldr r0, _0802F2E4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x5
- ands r0, r1
- cmp r0, 0
- bne _0802EF72
- b _0802F34C
-_0802EF72:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0802F2E8 @ =gUnknown_2023FFC
- mov r10, r0
- ldr r1, _0802F2EC @ =gActiveBattler
- mov r8, r1
- ldrb r1, [r1]
- adds r2, r1, r0
- ldr r5, _0802F2F0 @ =gUnknown_3004FF4
- ldrb r0, [r2]
- ldrb r3, [r5]
- cmp r0, r3
- bne _0802EF90
- b _0802F2C8
-_0802EF90:
- lsls r1, 9
- ldr r0, _0802F2F4 @ =gUnknown_2022BC8
- adds r1, r0
- mov r9, r1
- ldrb r1, [r2]
- lsls r1, 1
- add r1, r9
- ldrh r6, [r1]
- ldrb r0, [r5]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- strh r0, [r1]
- ldrb r0, [r5]
- lsls r0, 1
- add r0, r9
- strh r6, [r0]
- mov r1, r8
- ldrb r0, [r1]
- add r0, r10
- ldrb r1, [r0]
- mov r7, r9
- adds r7, 0x8
- adds r1, r7, r1
- ldrb r6, [r1]
- ldrb r0, [r5]
- adds r0, r7, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r0, r7, r0
- strb r6, [r0]
- mov r2, r8
- ldrb r0, [r2]
- add r0, r10
- ldrb r1, [r0]
- mov r2, r9
- adds r2, 0xC
- adds r1, r2, r1
- ldrb r6, [r1]
- ldrb r0, [r5]
- adds r0, r2, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r2, r0
- strb r6, [r2]
- mov r3, r8
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- ldr r2, _0802F2F8 @ =gDisableStructs
- adds r6, r0, r2
- ldrb r4, [r6, 0x18]
- lsls r3, r4, 24
- lsrs r2, r3, 28
- ldr r0, _0802F2FC @ =gBitTable
- mov r12, r0
- add r1, r10
- ldrb r0, [r1]
- lsls r0, 2
- add r0, r12
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- beq _0802F04A
- lsrs r1, r3, 28
- bics r1, r0
- lsls r1, 4
- movs r2, 0xF
- adds r0, r2, 0
- ands r0, r4
- orrs r0, r1
- strb r0, [r6, 0x18]
- mov r1, r8
- ldrb r0, [r1]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r3, _0802F2F8 @ =gDisableStructs
- adds r1, r3
- ldrb r4, [r1, 0x18]
- lsrs r3, r4, 4
- ldrb r0, [r5]
- lsls r0, 2
- add r0, r12
- ldr r0, [r0]
- orrs r0, r3
- lsls r0, 4
- ands r2, r4
- orrs r2, r0
- strb r2, [r1, 0x18]
-_0802F04A:
- bl sub_8030830
- movs r6, 0
- mov r12, r7
- mov r5, sp
- adds r5, 0x18
- str r5, [sp, 0x1C]
- ldr r2, _0802F300 @ =gBattleMons
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r4, r0, 0
- adds r4, 0x3B
- mov r7, r8
- mov r10, r2
- movs r5, 0x3
-_0802F06E:
- mov r1, sp
- adds r3, r1, r6
- ldrb r1, [r4]
- lsls r2, r6, 1
- adds r0, r5, 0
- lsls r0, r2
- ands r1, r0
- asrs r1, r2
- strb r1, [r3]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F06E
- ldr r1, _0802F2E8 @ =gUnknown_2023FFC
- ldrb r0, [r7]
- adds r0, r1
- ldrb r0, [r0]
- add r0, sp
- ldrb r0, [r0]
- ldr r2, [sp, 0x1C]
- strb r0, [r2]
- ldrb r0, [r7]
- adds r0, r1
- ldrb r0, [r0]
- mov r3, sp
- adds r2, r3, r0
- ldr r1, _0802F2F0 @ =gUnknown_3004FF4
- ldrb r0, [r1]
- add r0, sp
- ldrb r0, [r0]
- movs r3, 0
- strb r0, [r2]
- ldrb r0, [r1]
- mov r5, sp
- adds r1, r5, r0
- ldr r2, [sp, 0x1C]
- ldrb r0, [r2]
- strb r0, [r1]
- strb r3, [r2]
- movs r6, 0
- ldr r2, [sp, 0x1C]
-_0802F0BE:
- mov r3, sp
- adds r0, r3, r6
- ldrb r1, [r0]
- lsls r0, r6, 1
- lsls r1, r0
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F0BE
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r10
- adds r0, 0x3B
- ldr r5, [sp, 0x1C]
- ldrb r1, [r5]
- strb r1, [r0]
- movs r6, 0
- adds r4, r7, 0
- movs r3, 0x58
- movs r0, 0x24
- add r0, r10
- mov r8, r0
- mov r2, r9
- mov r7, r10
- adds r7, 0xC
- mov r5, r12
-_0802F0F8:
- lsls r1, r6, 1
- ldrb r0, [r4]
- muls r0, r3
- adds r1, r0
- adds r1, r7
- ldrh r0, [r2]
- strh r0, [r1]
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r3
- adds r1, r6, r1
- add r1, r8
- adds r0, r5, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F0F8
- ldr r2, _0802F2EC @ =gActiveBattler
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- mov r1, r10
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _0802F13A
- b _0802F2C8
-_0802F13A:
- movs r6, 0
- mov r1, sp
- adds r1, 0x4
- str r1, [sp, 0x20]
- add r3, sp, 0xC
- mov r10, r3
- ldr r5, _0802F304 @ =gBattlerPartyIndexes
- mov r9, r5
- mov r8, r2
- movs r7, 0x64
- ldr r5, _0802F308 @ =gPlayerParty
- adds r4, r1, 0
-_0802F152:
- mov r1, r8
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0xD
- bl GetMonData
- strh r0, [r4]
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0x11
- bl GetMonData
- mov r3, r10
- adds r1, r3, r6
- strb r0, [r1]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F152
- ldr r1, _0802F304 @ =gBattlerPartyIndexes
- ldr r0, _0802F2EC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802F308 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- ldr r5, [sp, 0x1C]
- strb r0, [r5]
- movs r6, 0
- movs r5, 0x3
- ldr r4, [sp, 0x1C]
-_0802F1B2:
- mov r0, sp
- adds r3, r0, r6
- lsls r2, r6, 1
- adds r1, r5, 0
- lsls r1, r2
- ldrb r0, [r4]
- ands r0, r1
- asrs r0, r2
- strb r0, [r3]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F1B2
- ldr r4, _0802F2E8 @ =gUnknown_2023FFC
- ldr r3, _0802F2EC @ =gActiveBattler
- ldrb r0, [r3]
- adds r0, r4
- ldrb r1, [r0]
- lsls r1, 1
- ldr r2, [sp, 0x20]
- adds r1, r2, r1
- ldrh r6, [r1]
- ldr r2, _0802F2F0 @ =gUnknown_3004FF4
- ldrb r0, [r2]
- lsls r0, 1
- ldr r5, [sp, 0x20]
- adds r0, r5, r0
- ldrh r0, [r0]
- movs r5, 0
- strh r0, [r1]
- ldrb r0, [r2]
- lsls r0, 1
- ldr r1, [sp, 0x20]
- adds r0, r1, r0
- strh r6, [r0]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r1, [r0]
- add r1, r10
- ldrb r6, [r1]
- ldrb r0, [r2]
- add r0, r10
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- add r0, r10
- strb r6, [r0]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- add r0, sp
- ldrb r0, [r0]
- ldr r1, [sp, 0x1C]
- strb r0, [r1]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- mov r3, sp
- adds r1, r3, r0
- ldrb r0, [r2]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- adds r1, r3, r0
- ldr r2, [sp, 0x1C]
- ldrb r0, [r2]
- strb r0, [r1]
- strb r5, [r2]
- movs r6, 0
- ldr r2, [sp, 0x1C]
-_0802F23E:
- mov r3, sp
- adds r0, r3, r6
- ldrb r1, [r0]
- lsls r0, r6, 1
- lsls r1, r0
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F23E
- movs r6, 0
- ldr r5, _0802F304 @ =gBattlerPartyIndexes
- mov r10, r5
- ldr r0, _0802F2EC @ =gActiveBattler
- mov r9, r0
- movs r1, 0x64
- mov r8, r1
- ldr r7, _0802F308 @ =gPlayerParty
- ldr r5, [sp, 0x20]
- adds r5, 0x8
- ldr r4, [sp, 0x20]
-_0802F26A:
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r3, r8
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7
- adds r1, r6, 0
- adds r1, 0xD
- adds r2, r4, 0
- bl SetMonData
- mov r1, r9
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- adds r1, r6, 0
- adds r1, 0x11
- adds r2, r5, 0
- bl SetMonData
- adds r5, 0x1
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802F26A
- ldr r1, _0802F304 @ =gBattlerPartyIndexes
- ldr r0, _0802F2EC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802F308 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- ldr r2, [sp, 0x1C]
- bl SetMonData
-_0802F2C8:
- ldr r0, _0802F30C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802F318
- ldr r1, _0802F310 @ =gUnknown_3004FE0
- ldr r2, _0802F2EC @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802F314 @ =sub_80E7988
- b _0802F324
- .align 2, 0
-_0802F2E4: .4byte gMain
-_0802F2E8: .4byte gUnknown_2023FFC
-_0802F2EC: .4byte gActiveBattler
-_0802F2F0: .4byte gUnknown_3004FF4
-_0802F2F4: .4byte gUnknown_2022BC8
-_0802F2F8: .4byte gDisableStructs
-_0802F2FC: .4byte gBitTable
-_0802F300: .4byte gBattleMons
-_0802F304: .4byte gBattlerPartyIndexes
-_0802F308: .4byte gPlayerParty
-_0802F30C: .4byte gBattleTypeFlags
-_0802F310: .4byte gUnknown_3004FE0
-_0802F314: .4byte sub_80E7988
-_0802F318:
- ldr r1, _0802F390 @ =gUnknown_3004FE0
- ldr r2, _0802F394 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802F398 @ =sub_802EA10
-_0802F324:
- str r1, [r0]
- adds r7, r2, 0
- ldr r2, _0802F39C @ =gUnknown_2023FFC
- ldrb r0, [r7]
- adds r0, r2
- ldr r1, _0802F3A0 @ =gUnknown_3004FF4
- ldrb r1, [r1]
- strb r1, [r0]
- ldrb r0, [r7]
- adds r0, r2
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- bl MoveSelectionDisplayPpString
- bl MoveSelectionDisplayPpNumber
- bl MoveSelectionDisplayMoveType
-_0802F34C:
- ldr r0, _0802F3A4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802F3C8
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0802F3A0 @ =gUnknown_3004FF4
- ldrb r0, [r0]
- bl MoveSelectionDestroyCursorAt
- ldr r1, _0802F39C @ =gUnknown_2023FFC
- ldr r4, _0802F394 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- ldr r0, _0802F3A8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802F3B0
- ldr r0, _0802F390 @ =gUnknown_3004FE0
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0802F3AC @ =sub_80E7988
- b _0802F3BA
- .align 2, 0
-_0802F390: .4byte gUnknown_3004FE0
-_0802F394: .4byte gActiveBattler
-_0802F398: .4byte sub_802EA10
-_0802F39C: .4byte gUnknown_2023FFC
-_0802F3A0: .4byte gUnknown_3004FF4
-_0802F3A4: .4byte gMain
-_0802F3A8: .4byte gBattleTypeFlags
-_0802F3AC: .4byte sub_80E7988
-_0802F3B0:
- ldr r0, _0802F3F8 @ =gUnknown_3004FE0
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0802F3FC @ =sub_802EA10
-_0802F3BA:
- str r0, [r1]
- bl MoveSelectionDisplayPpString
- bl MoveSelectionDisplayPpNumber
- bl MoveSelectionDisplayMoveType
-_0802F3C8:
- ldr r0, _0802F400 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802F454
- ldr r3, _0802F404 @ =gUnknown_3004FF4
- ldrb r2, [r3]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _0802F454
- ldr r0, _0802F408 @ =gUnknown_2023FFC
- ldr r1, _0802F40C @ =gActiveBattler
- ldrb r1, [r1]
- adds r1, r0
- ldrb r5, [r1]
- cmp r2, r5
- bne _0802F410
- ldrb r0, [r1]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- b _0802F416
- .align 2, 0
-_0802F3F8: .4byte gUnknown_3004FE0
-_0802F3FC: .4byte sub_802EA10
-_0802F400: .4byte gMain
-_0802F404: .4byte gUnknown_3004FF4
-_0802F408: .4byte gUnknown_2023FFC
-_0802F40C: .4byte gActiveBattler
-_0802F410:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
-_0802F416:
- ldr r4, _0802F440 @ =gUnknown_3004FF4
- ldrb r0, [r4]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802F444 @ =gUnknown_2023FFC
- ldr r0, _0802F448 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802F44C
- adds r0, r1, 0
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- b _0802F454
- .align 2, 0
-_0802F440: .4byte gUnknown_3004FF4
-_0802F444: .4byte gUnknown_2023FFC
-_0802F448: .4byte gActiveBattler
-_0802F44C:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
-_0802F454:
- ldr r0, _0802F490 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802F4E8
- ldr r3, _0802F494 @ =gUnknown_3004FF4
- ldrb r2, [r3]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0802F4E8
- ldr r1, _0802F498 @ =gUnknown_3004FF8
- movs r0, 0x1
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802F4E8
- ldr r0, _0802F49C @ =gUnknown_2023FFC
- ldr r1, _0802F4A0 @ =gActiveBattler
- ldrb r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- cmp r2, r0
- bne _0802F4A4
- ldrb r0, [r1]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- b _0802F4AA
- .align 2, 0
-_0802F490: .4byte gMain
-_0802F494: .4byte gUnknown_3004FF4
-_0802F498: .4byte gUnknown_3004FF8
-_0802F49C: .4byte gUnknown_2023FFC
-_0802F4A0: .4byte gActiveBattler
-_0802F4A4:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
-_0802F4AA:
- ldr r4, _0802F4D4 @ =gUnknown_3004FF4
- ldrb r0, [r4]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802F4D8 @ =gUnknown_2023FFC
- ldr r0, _0802F4DC @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802F4E0
- adds r0, r1, 0
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- b _0802F4E8
- .align 2, 0
-_0802F4D4: .4byte gUnknown_3004FF4
-_0802F4D8: .4byte gUnknown_2023FFC
-_0802F4DC: .4byte gActiveBattler
-_0802F4E0:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
-_0802F4E8:
- ldr r0, _0802F518 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802F56C
- ldr r3, _0802F51C @ =gUnknown_3004FF4
- ldrb r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0802F56C
- ldr r0, _0802F520 @ =gUnknown_2023FFC
- ldr r1, _0802F524 @ =gActiveBattler
- ldrb r1, [r1]
- adds r1, r0
- ldrb r5, [r1]
- cmp r2, r5
- bne _0802F528
- ldrb r0, [r1]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- b _0802F52E
- .align 2, 0
-_0802F518: .4byte gMain
-_0802F51C: .4byte gUnknown_3004FF4
-_0802F520: .4byte gUnknown_2023FFC
-_0802F524: .4byte gActiveBattler
-_0802F528:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
-_0802F52E:
- ldr r4, _0802F558 @ =gUnknown_3004FF4
- ldrb r0, [r4]
- movs r1, 0x2
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802F55C @ =gUnknown_2023FFC
- ldr r0, _0802F560 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802F564
- adds r0, r1, 0
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- b _0802F56C
- .align 2, 0
-_0802F558: .4byte gUnknown_3004FF4
-_0802F55C: .4byte gUnknown_2023FFC
-_0802F560: .4byte gActiveBattler
-_0802F564:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
-_0802F56C:
- ldr r0, _0802F5A8 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802F600
- ldr r3, _0802F5AC @ =gUnknown_3004FF4
- ldrb r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- bne _0802F600
- ldr r1, _0802F5B0 @ =gUnknown_3004FF8
- movs r0, 0x2
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802F600
- ldr r0, _0802F5B4 @ =gUnknown_2023FFC
- ldr r1, _0802F5B8 @ =gActiveBattler
- ldrb r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- cmp r2, r0
- bne _0802F5BC
- ldrb r0, [r1]
- movs r1, 0x1D
- bl MoveSelectionCreateCursorAt
- b _0802F5C2
- .align 2, 0
-_0802F5A8: .4byte gMain
-_0802F5AC: .4byte gUnknown_3004FF4
-_0802F5B0: .4byte gUnknown_3004FF8
-_0802F5B4: .4byte gUnknown_2023FFC
-_0802F5B8: .4byte gActiveBattler
-_0802F5BC:
- ldrb r0, [r3]
- bl MoveSelectionDestroyCursorAt
-_0802F5C2:
- ldr r4, _0802F5EC @ =gUnknown_3004FF4
- ldrb r0, [r4]
- movs r1, 0x2
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802F5F0 @ =gUnknown_2023FFC
- ldr r0, _0802F5F4 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802F5F8
- adds r0, r1, 0
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- b _0802F600
- .align 2, 0
-_0802F5EC: .4byte gUnknown_3004FF4
-_0802F5F0: .4byte gUnknown_2023FFC
-_0802F5F4: .4byte gActiveBattler
-_0802F5F8:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl MoveSelectionCreateCursorAt
-_0802F600:
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_802EF58
-
- thumb_func_start sub_802F610
-sub_802F610: @ 802F610
- push {lr}
- ldr r0, _0802F64C @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802F664
- ldr r0, _0802F650 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802F694
- movs r0, 0x53
- bl m4aSongNumStop
- ldr r3, _0802F654 @ =gMain
- ldr r0, _0802F658 @ =0x00000439
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _0802F65C @ =gUnknown_3004F80
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, _0802F660 @ =sub_8011A1C
- bl SetMainCallback2
- bl FreeAllWindowBuffers
- b _0802F694
- .align 2, 0
-_0802F64C: .4byte gWirelessCommType
-_0802F650: .4byte gReceivedRemoteLinkPlayers
-_0802F654: .4byte gMain
-_0802F658: .4byte 0x00000439
-_0802F65C: .4byte gUnknown_3004F80
-_0802F660: .4byte sub_8011A1C
-_0802F664:
- bl sub_800A4BC
- lsls r0, 24
- cmp r0, 0
- beq _0802F694
- movs r0, 0x53
- bl m4aSongNumStop
- ldr r3, _0802F698 @ =gMain
- ldr r0, _0802F69C @ =0x00000439
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _0802F6A0 @ =gUnknown_3004F80
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, _0802F6A4 @ =sub_8011A1C
- bl SetMainCallback2
- bl FreeAllWindowBuffers
-_0802F694:
- pop {r0}
- bx r0
- .align 2, 0
-_0802F698: .4byte gMain
-_0802F69C: .4byte 0x00000439
-_0802F6A0: .4byte gUnknown_3004F80
-_0802F6A4: .4byte sub_8011A1C
- thumb_func_end sub_802F610
-
- thumb_func_start sub_802F6A8
-sub_802F6A8: @ 802F6A8
- push {lr}
- ldr r0, _0802F6D0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802F71E
- ldr r0, _0802F6D4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802F6FC
- ldr r0, _0802F6D8 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802F6DC
- bl sub_800AAC0
- b _0802F6E0
- .align 2, 0
-_0802F6D0: .4byte gPaletteFade
-_0802F6D4: .4byte gBattleTypeFlags
-_0802F6D8: .4byte gWirelessCommType
-_0802F6DC:
- bl sub_800AB9C
-_0802F6E0:
- ldr r1, _0802F6F0 @ =gUnknown_3004FE0
- ldr r0, _0802F6F4 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802F6F8 @ =sub_802F610
- str r1, [r0]
- b _0802F71E
- .align 2, 0
-_0802F6F0: .4byte gUnknown_3004FE0
-_0802F6F4: .4byte gActiveBattler
-_0802F6F8: .4byte sub_802F610
-_0802F6FC:
- movs r0, 0x53
- bl m4aSongNumStop
- ldr r2, _0802F724 @ =gMain
- ldr r0, _0802F728 @ =0x00000439
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _0802F72C @ =gUnknown_3004F80
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_0802F71E:
- pop {r0}
- bx r0
- .align 2, 0
-_0802F724: .4byte gMain
-_0802F728: .4byte 0x00000439
-_0802F72C: .4byte gUnknown_3004F80
- thumb_func_end sub_802F6A8
-
- thumb_func_start sub_802F730
-sub_802F730: @ 802F730
- push {lr}
- ldr r2, _0802F758 @ =gSprites
- ldr r1, _0802F75C @ =gBattlerSpriteIds
- ldr r0, _0802F760 @ =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, _0802F764 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802F754
- bl PlayerBufferExecCompleted
-_0802F754:
- pop {r0}
- bx r0
- .align 2, 0
-_0802F758: .4byte gSprites
-_0802F75C: .4byte gBattlerSpriteIds
-_0802F760: .4byte gActiveBattler
-_0802F764: .4byte SpriteCallbackDummy
- thumb_func_end sub_802F730
-
- thumb_func_start sub_802F768
-sub_802F768: @ 802F768
- push {lr}
- ldr r2, _0802F790 @ =gSprites
- ldr r1, _0802F794 @ =gBattlerSpriteIds
- ldr r0, _0802F798 @ =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, _0802F79C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802F78C
- bl PlayerBufferExecCompleted
-_0802F78C:
- pop {r0}
- bx r0
- .align 2, 0
-_0802F790: .4byte gSprites
-_0802F794: .4byte gBattlerSpriteIds
-_0802F798: .4byte gActiveBattler
-_0802F79C: .4byte SpriteCallbackDummy
- thumb_func_end sub_802F768
-
- thumb_func_start sub_802F7A0
-sub_802F7A0: @ 802F7A0
- push {r4-r6,lr}
- ldr r6, _0802F7FC @ =gSprites
- ldr r5, _0802F800 @ =gBattlerSpriteIds
- ldr r4, _0802F804 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r6, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, [r0]
- ldr r0, _0802F808 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802F7F4
- ldr r0, _0802F80C @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- bl nullsub_16
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl FreeSpriteOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- bl PlayerBufferExecCompleted
-_0802F7F4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802F7FC: .4byte gSprites
-_0802F800: .4byte gBattlerSpriteIds
-_0802F804: .4byte gActiveBattler
-_0802F808: .4byte SpriteCallbackDummy
-_0802F80C: .4byte gSaveBlock2Ptr
- thumb_func_end sub_802F7A0
-
- thumb_func_start sub_802F810
-sub_802F810: @ 802F810
- push {r4,lr}
- ldr r4, _0802F850 @ =gUnknown_2024018
- ldr r1, [r4]
- ldr r3, _0802F854 @ =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 _0802F848
- 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 PlayerBufferExecCompleted
-_0802F848:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802F850: .4byte gUnknown_2024018
-_0802F854: .4byte gActiveBattler
- thumb_func_end sub_802F810
-
- thumb_func_start sub_802F858
-sub_802F858: @ 802F858
- push {r4-r7,lr}
- movs r6, 0
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0802F87C
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0802F8B0
- ldr r0, _0802F89C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802F8B0
-_0802F87C:
- ldr r2, _0802F8A0 @ =gSprites
- ldr r1, _0802F8A4 @ =gUnknown_3004FF0
- ldr r0, _0802F8A8 @ =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, _0802F8AC @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802F8E6
- b _0802F8E4
- .align 2, 0
-_0802F89C: .4byte gBattleTypeFlags
-_0802F8A0: .4byte gSprites
-_0802F8A4: .4byte gUnknown_3004FF0
-_0802F8A8: .4byte gActiveBattler
-_0802F8AC: .4byte SpriteCallbackDummy
-_0802F8B0:
- ldr r2, _0802F9B0 @ =gSprites
- ldr r5, _0802F9B4 @ =gUnknown_3004FF0
- ldr r0, _0802F9B8 @ =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, _0802F9BC @ =SpriteCallbackDummy
- cmp r4, r0
- bne _0802F8E6
- 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 _0802F8E6
-_0802F8E4:
- movs r6, 0x1
-_0802F8E6:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _0802F8F2
- movs r6, 0
-_0802F8F2:
- cmp r6, 0
- bne _0802F8F8
- b _0802FA32
-_0802F8F8:
- ldr r0, _0802F9C0 @ =gUnknown_2024018
- mov r12, r0
- ldr r0, [r0]
- ldr r7, _0802F9B8 @ =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
- bne _0802F91A
- b _0802FA32
-_0802F91A:
- 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
- bne _0802F934
- b _0802FA32
-_0802F934:
- 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, _0802F9C4 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, _0802F9C8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802F9D0
- ldr r0, _0802F9CC @ =gMPlayInfo_BGM
- bl m4aMPlayContinue
- b _0802F9DC
- .align 2, 0
-_0802F9B0: .4byte gSprites
-_0802F9B4: .4byte gUnknown_3004FF0
-_0802F9B8: .4byte gActiveBattler
-_0802F9BC: .4byte SpriteCallbackDummy
-_0802F9C0: .4byte gUnknown_2024018
-_0802F9C4: .4byte 0x000027f9
-_0802F9C8: .4byte gBattleTypeFlags
-_0802F9CC: .4byte gMPlayInfo_BGM
-_0802F9D0:
- ldr r0, _0802FA38 @ =gMPlayInfo_BGM
- ldr r1, _0802FA3C @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_0802F9DC:
- ldr r7, _0802FA40 @ =gBattlerPartyIndexes
- ldr r4, _0802FA44 @ =gActiveBattler
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _0802FA48 @ =gPlayerParty
- adds r0, r5
- bl HandleLowHpMusicChange
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0802FA12
- ldrb r0, [r4]
- movs r1, 0x2
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- muls r0, r6
- adds r0, r5
- bl HandleLowHpMusicChange
-_0802FA12:
- ldr r0, _0802FA4C @ =gUnknown_2024018
- ldr r0, [r0]
- ldrb r1, [r4]
- 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, _0802FA50 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802FA54 @ =sub_802F810
- str r1, [r0]
-_0802FA32:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FA38: .4byte gMPlayInfo_BGM
-_0802FA3C: .4byte 0x0000ffff
-_0802FA40: .4byte gBattlerPartyIndexes
-_0802FA44: .4byte gActiveBattler
-_0802FA48: .4byte gPlayerParty
-_0802FA4C: .4byte gUnknown_2024018
-_0802FA50: .4byte gUnknown_3004FE0
-_0802FA54: .4byte sub_802F810
- thumb_func_end sub_802F858
-
- thumb_func_start sub_802FA58
-sub_802FA58: @ 802FA58
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _0802FBCC @ =gUnknown_2024018
- mov r9, r0
- ldr r0, [r0]
- ldr r1, _0802FBD0 @ =gActiveBattler
- mov r8, r1
- ldrb r2, [r1]
- ldr r3, [r0, 0x4]
- lsls r5, r2, 1
- adds r0, r5, r2
- lsls r0, 2
- adds r0, r3
- ldrb r4, [r0]
- movs r6, 0x8
- adds r0, r6, 0
- ands r0, r4
- cmp r0, 0
- beq _0802FA84
- b _0802FBBE
-_0802FA84:
- movs r7, 0x2
- adds r1, r2, 0
- eors r1, r7
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0802FA9E
- b _0802FBBE
-_0802FA9E:
- movs r6, 0x80
- adds r0, r6, 0
- ands r0, r4
- cmp r0, 0
- bne _0802FABC
- ldr r0, _0802FBD4 @ =gBattlerPartyIndexes
- adds r0, r5, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0802FBD8 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0802FABC:
- mov r2, r9
- ldr r1, [r2]
- mov r2, r8
- ldrb r0, [r2]
- 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, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _0802FAF0
- ldr r0, _0802FBD4 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0802FBD8 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0802FAF0:
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0802FB5C
- ldr r0, _0802FBDC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0802FB5C
- ldr r1, _0802FBE0 @ =gUnknown_3004FFC
- mov r2, r8
- ldrb r0, [r2]
- eors r0, r7
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802FBE4 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r4, _0802FBE8 @ =gUnknown_3004FF0
- mov r1, r8
- ldrb r0, [r1]
- adds r1, r7, 0
- eors r1, r0
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _0802FBD4 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0802FBD8 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- mov r2, r8
- ldrb r0, [r2]
- eors r0, r7
- bl sub_804BD94
- mov r1, r8
- ldrb r0, [r1]
- eors r0, r7
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
-_0802FB5C:
- ldr r1, _0802FBE0 @ =gUnknown_3004FFC
- ldr r4, _0802FBD0 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802FBE4 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r5, _0802FBE8 @ =gUnknown_3004FF0
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _0802FBD4 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0802FBD8 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r4]
- bl sub_804BD94
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r0, _0802FBCC @ =gUnknown_2024018
- 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, _0802FBEC @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802FBF0 @ =sub_802F858
- str r1, [r0]
-_0802FBBE:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FBCC: .4byte gUnknown_2024018
-_0802FBD0: .4byte gActiveBattler
-_0802FBD4: .4byte gBattlerPartyIndexes
-_0802FBD8: .4byte gPlayerParty
-_0802FBDC: .4byte gBattleTypeFlags
-_0802FBE0: .4byte gUnknown_3004FFC
-_0802FBE4: .4byte gSprites
-_0802FBE8: .4byte gUnknown_3004FF0
-_0802FBEC: .4byte gUnknown_3004FE0
-_0802FBF0: .4byte sub_802F858
- thumb_func_end sub_802FA58
-
- thumb_func_start sub_802FBF4
-sub_802FBF4: @ 802FBF4
- push {r4-r6,lr}
- ldr r2, _0802FC8C @ =gSprites
- ldr r0, _0802FC90 @ =gUnknown_3004FF0
- ldr r6, _0802FC94 @ =gActiveBattler
- ldrb r3, [r6]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _0802FC98 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802FC84
- ldr r5, _0802FC9C @ =gUnknown_2024018
- ldr r0, [r5]
- ldr r1, [r0, 0x4]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r2, r0, r1
- ldrb r1, [r2, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802FC84
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldr r0, [r5]
- ldrb r2, [r6]
- ldr r0, [r0, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, _0802FCA0 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, [r5]
- ldrb r2, [r6]
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0802FC78
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl InitAndLaunchSpecialAnimation
-_0802FC78:
- ldr r0, _0802FCA4 @ =gUnknown_3004FE0
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0802FCA8 @ =sub_802FCAC
- str r0, [r1]
-_0802FC84:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FC8C: .4byte gSprites
-_0802FC90: .4byte gUnknown_3004FF0
-_0802FC94: .4byte gActiveBattler
-_0802FC98: .4byte SpriteCallbackDummy
-_0802FC9C: .4byte gUnknown_2024018
-_0802FCA0: .4byte 0x000027f9
-_0802FCA4: .4byte gUnknown_3004FE0
-_0802FCA8: .4byte sub_802FCAC
- thumb_func_end sub_802FBF4
-
- thumb_func_start sub_802FCAC
-sub_802FCAC: @ 802FCAC
- push {r4,lr}
- ldr r0, _0802FD00 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r4, _0802FD04 @ =gActiveBattler
- ldrb r1, [r4]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0802FCFA
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _0802FCFA
- ldr r0, _0802FD08 @ =gMPlayInfo_BGM
- ldr r1, _0802FD0C @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- ldr r2, _0802FD10 @ =gBattlerPartyIndexes
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _0802FD14 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- bl PlayerBufferExecCompleted
-_0802FCFA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FD00: .4byte gUnknown_2024018
-_0802FD04: .4byte gActiveBattler
-_0802FD08: .4byte gMPlayInfo_BGM
-_0802FD0C: .4byte 0x0000ffff
-_0802FD10: .4byte gBattlerPartyIndexes
-_0802FD14: .4byte gPlayerParty
- thumb_func_end sub_802FCAC
-
- thumb_func_start sub_802FD18
-sub_802FD18: @ 802FD18
- push {r4-r6,lr}
- ldr r6, _0802FDCC @ =gUnknown_2024018
- ldr r0, [r6]
- ldr r5, _0802FDD0 @ =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 _0802FD4A
- ldr r0, _0802FDD4 @ =gBattlerPartyIndexes
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0802FDD8 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_80F1720
-_0802FD4A:
- ldr r4, _0802FDDC @ =gSprites
- ldr r0, _0802FDE0 @ =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, _0802FDE4 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802FDC4
- 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 _0802FDC4
- adds r0, r3, r4
- bl DestroySprite
- ldr r4, _0802FDE8 @ =gUnknown_3004FF0
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _0802FDD4 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0802FDD8 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- ldrb r0, [r5]
- bl sub_804BD94
- ldrb r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldrb r0, [r5]
- bl CopyBattleSpriteInvisibility
- ldr r1, _0802FDEC @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802FDF0 @ =sub_802FBF4
- str r1, [r0]
-_0802FDC4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FDCC: .4byte gUnknown_2024018
-_0802FDD0: .4byte gActiveBattler
-_0802FDD4: .4byte gBattlerPartyIndexes
-_0802FDD8: .4byte gPlayerParty
-_0802FDDC: .4byte gSprites
-_0802FDE0: .4byte gUnknown_3004FFC
-_0802FDE4: .4byte SpriteCallbackDummy
-_0802FDE8: .4byte gUnknown_3004FF0
-_0802FDEC: .4byte gUnknown_3004FE0
-_0802FDF0: .4byte sub_802FBF4
- thumb_func_end sub_802FD18
-
- thumb_func_start c3_0802FDF4
-c3_0802FDF4: @ 802FDF4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _0802FE16
- ldr r0, _0802FE1C @ =gMPlayInfo_BGM
- ldr r1, _0802FE20 @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- adds r0, r4, 0
- bl DestroyTask
-_0802FE16:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FE1C: .4byte gMPlayInfo_BGM
-_0802FE20: .4byte 0x0000ffff
- thumb_func_end c3_0802FDF4
-
- thumb_func_start CompleteOnHealthbarDone
-CompleteOnHealthbarDone: @ 802FE24
- push {r4-r6,lr}
- ldr r5, _0802FE64 @ =gActiveBattler
- ldrb r0, [r5]
- ldr r6, _0802FE68 @ =gUnknown_3004FF0
- adds r1, r0, r6
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8049FD8
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0802FE6C
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- movs r2, 0
- bl sub_8048440
- b _0802FE86
- .align 2, 0
-_0802FE64: .4byte gActiveBattler
-_0802FE68: .4byte gUnknown_3004FF0
-_0802FE6C:
- ldr r2, _0802FE8C @ =gBattlerPartyIndexes
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _0802FE90 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- bl PlayerBufferExecCompleted
-_0802FE86:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802FE8C: .4byte gBattlerPartyIndexes
-_0802FE90: .4byte gPlayerParty
- thumb_func_end CompleteOnHealthbarDone
-
- thumb_func_start sub_802FE94
-sub_802FE94: @ 802FE94
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0802FEA6
- bl PlayerBufferExecCompleted
-_0802FEA6:
- pop {r0}
- bx r0
- thumb_func_end sub_802FE94
-
- thumb_func_start sub_802FEAC
-sub_802FEAC: @ 802FEAC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r1, _0802FFAC @ =gTasks
- lsls r0, 2
- add r0, r9
- lsls r0, 3
- adds r0, r1
- mov r8, r0
- ldrb r0, [r0, 0x8]
- mov r10, r0
- mov r1, r8
- ldrb r7, [r1, 0xC]
- str r7, [sp, 0x8]
- ldrh r2, [r1, 0xA]
- str r2, [sp, 0xC]
- bl sub_8075290
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0802FEF2
- ldr r1, _0802FFB0 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r10, r0
- bne _0802FEF2
- b _08030008
-_0802FEF2:
- movs r0, 0x64
- mov r1, r10
- muls r1, r0
- ldr r0, _0802FFB4 @ =gPlayerParty
- adds r6, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- ldr r3, _0802FFB8 @ =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, _0802FFBC @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x13]
- movs r1, 0xCA
- lsls r1, 1
- muls r1, r2
- adds r4, r1
- adds r4, r3
- ldr r2, [r4]
- str r2, [sp]
- ldr r3, [sp, 0xC]
- lsls r1, r3, 16
- asrs r1, 16
- adds r0, r1
- cmp r0, r2
- bcc _0802FFE0
- adds r0, r6, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r6, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- ldr r0, [sp, 0xC]
- subs r2, r0, r2
- ldr r4, _0802FFC0 @ =gActiveBattler
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl EmitTwoReturnValues
- strb r5, [r4]
- bl sub_8075290
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0802FFC8
- ldr r2, _0802FFB0 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r2
- mov r1, r10
- ldrh r0, [r0]
- cmp r1, r0
- beq _0802FFA6
- movs r0, 0x2
- eors r7, r0
- lsls r0, r7, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r1, r0
- bne _0802FFC8
-_0802FFA6:
- ldr r0, _0802FFC4 @ =sub_8030238
- b _0803000A
- .align 2, 0
-_0802FFAC: .4byte gTasks
-_0802FFB0: .4byte gBattlerPartyIndexes
-_0802FFB4: .4byte gPlayerParty
-_0802FFB8: .4byte gExperienceTables
-_0802FFBC: .4byte gBaseStats
-_0802FFC0: .4byte gActiveBattler
-_0802FFC4: .4byte sub_8030238
-_0802FFC8:
- ldr r0, _0802FFD8 @ =gTasks
- mov r2, r9
- lsls r1, r2, 2
- add r1, r9
- lsls r1, 3
- adds r1, r0
- ldr r0, _0802FFDC @ =sub_8030350
- b _0803000C
- .align 2, 0
-_0802FFD8: .4byte gTasks
-_0802FFDC: .4byte sub_8030350
-_0802FFE0:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r6, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, _08030000 @ =gUnknown_3004FE0
- ldr r3, [sp, 0x8]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, _08030004 @ =sub_802FE94
- str r1, [r0]
- mov r0, r9
- bl DestroyTask
- b _0803000E
- .align 2, 0
-_08030000: .4byte gUnknown_3004FE0
-_08030004: .4byte sub_802FE94
-_08030008:
- ldr r0, _08030020 @ =sub_8030024
-_0803000A:
- mov r1, r8
-_0803000C:
- str r0, [r1]
-_0803000E:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030020: .4byte sub_8030024
- thumb_func_end sub_802FEAC
-
- thumb_func_start sub_8030024
-sub_8030024: @ 8030024
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080300DC @ =gTasks
- lsls r2, r0, 2
- mov r8, r2
- add r8, r0
- mov r0, r8
- lsls r0, 3
- mov r8, r0
- add r8, r1
- mov r2, r8
- ldrb r1, [r2, 0x8]
- movs r0, 0xA
- ldrsh r2, [r2, r0]
- mov r9, r2
- mov r2, r8
- ldrb r2, [r2, 0xC]
- mov r10, r2
- movs r0, 0x64
- adds r6, r1, 0
- muls r6, r0
- ldr r0, _080300E0 @ =gPlayerParty
- adds r6, r0
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- adds r3, r0, 0
- ldr r6, _080300E4 @ =gExperienceTables
- lsls r1, r4, 2
- ldr r2, _080300E8 @ =gBaseStats
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r2
- adds r1, r0
- adds r1, r6
- ldr r1, [r1]
- subs r3, r1
- adds r4, 0x1
- lsls r4, 2
- adds r4, r0
- adds r4, r6
- ldr r2, [r4]
- subs r2, r1
- ldr r0, _080300EC @ =gUnknown_3004FF0
- add r0, r10
- ldrb r1, [r0]
- mov r0, r9
- negs r0, r0
- str r0, [sp]
- mov r0, r10
- bl SetBattleBarStruct
- movs r0, 0x1B
- bl PlaySE
- ldr r0, _080300F0 @ =sub_80300F4
- mov r1, r8
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080300DC: .4byte gTasks
-_080300E0: .4byte gPlayerParty
-_080300E4: .4byte gExperienceTables
-_080300E8: .4byte gBaseStats
-_080300EC: .4byte gUnknown_3004FF0
-_080300F0: .4byte sub_80300F4
- thumb_func_end sub_8030024
-
- thumb_func_start sub_80300F4
-sub_80300F4: @ 80300F4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _08030120 @ =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r6, r0, r1
- ldrh r1, [r6, 0x1C]
- movs r2, 0x1C
- ldrsh r0, [r6, r2]
- cmp r0, 0xC
- bgt _08030124
- adds r0, r1, 0x1
- strh r0, [r6, 0x1C]
- b _08030220
- .align 2, 0
-_08030120: .4byte gTasks
-_08030124:
- ldrb r0, [r6, 0x8]
- mov r9, r0
- ldrh r2, [r6, 0xA]
- mov r10, r2
- ldrb r7, [r6, 0xC]
- ldr r5, _080301EC @ =gUnknown_3004FF0
- adds r5, r7, r5
- ldrb r1, [r5]
- adds r0, r7, 0
- movs r2, 0x1
- movs r3, 0
- bl sub_8049FD8
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- bl SetHealthboxSpriteVisible
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- bne _08030220
- movs r0, 0x1B
- bl m4aSongNumStop
- movs r0, 0x64
- mov r1, r9
- muls r1, r0
- ldr r0, _080301F0 @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r3, _080301F4 @ =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, _080301F8 @ =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r1
- adds r4, r0
- adds r4, r3
- ldr r1, [r4]
- str r1, [sp]
- mov r2, r10
- lsls r0, r2, 16
- asrs r4, r0, 16
- ldr r0, [sp, 0x4]
- adds r0, r4
- cmp r0, r1
- blt _08030204
- adds r0, r5, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- subs r2, r4, r2
- ldr r4, _080301FC @ =gActiveBattler
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl EmitTwoReturnValues
- strb r5, [r4]
- ldr r0, _08030200 @ =sub_8030238
- str r0, [r6]
- b _08030220
- .align 2, 0
-_080301EC: .4byte gUnknown_3004FF0
-_080301F0: .4byte gPlayerParty
-_080301F4: .4byte gExperienceTables
-_080301F8: .4byte gBaseStats
-_080301FC: .4byte gActiveBattler
-_08030200: .4byte sub_8030238
-_08030204:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r5, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, _08030230 @ =gUnknown_3004FE0
- lsls r0, r7, 2
- adds r0, r1
- ldr r1, _08030234 @ =sub_802FE94
- str r1, [r0]
- mov r0, r8
- bl DestroyTask
-_08030220:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030230: .4byte gUnknown_3004FE0
-_08030234: .4byte sub_802FE94
- thumb_func_end sub_80300F4
-
- thumb_func_start sub_8030238
-sub_8030238: @ 8030238
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _0803028C @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldrb r4, [r0, 0xC]
- ldrb r6, [r0, 0x8]
- bl sub_8075290
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0803026C
- ldr r1, _08030290 @ =gBattlerPartyIndexes
- movs r0, 0x2
- adds r2, r4, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- bne _0803026C
- adds r4, r2, 0
-_0803026C:
- adds r0, r4, 0
- adds r1, r4, 0
- adds r2, r4, 0
- movs r3, 0
- bl InitAndLaunchSpecialAnimation
- ldr r0, _0803028C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _08030294 @ =sub_8030298
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803028C: .4byte gTasks
-_08030290: .4byte gBattlerPartyIndexes
-_08030294: .4byte sub_8030298
- thumb_func_end sub_8030238
-
- thumb_func_start sub_8030298
-sub_8030298: @ 8030298
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _08030304 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r2, r0, r1
- ldrb r5, [r2, 0xC]
- ldr r0, _08030308 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0803033A
- ldrb r4, [r2, 0x8]
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _0803030C @ =gPlayerParty
- adds r7, r1, r0
- adds r0, r7, 0
- movs r1, 0x38
- bl GetMonData
- bl sub_8075290
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08030318
- ldr r1, _08030310 @ =gBattlerPartyIndexes
- movs r0, 0x2
- adds r2, r5, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _08030318
- ldr r0, _08030314 @ =gUnknown_3004FF0
- adds r0, r2, r0
- ldrb r0, [r0]
- adds r1, r7, 0
- movs r2, 0
- bl UpdateHealthboxAttribute
- b _0803032C
- .align 2, 0
-_08030304: .4byte gTasks
-_08030308: .4byte gUnknown_2024018
-_0803030C: .4byte gPlayerParty
-_08030310: .4byte gBattlerPartyIndexes
-_08030314: .4byte gUnknown_3004FF0
-_08030318:
- ldr r0, _08030340 @ =gUnknown_3004FF0
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0x64
- muls r1, r4
- ldr r2, _08030344 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
-_0803032C:
- ldr r0, _08030348 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _0803034C @ =sub_8030350
- str r0, [r1]
-_0803033A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030340: .4byte gUnknown_3004FF0
-_08030344: .4byte gPlayerParty
-_08030348: .4byte gTasks
-_0803034C: .4byte sub_8030350
- thumb_func_end sub_8030298
-
- thumb_func_start sub_8030350
-sub_8030350: @ 8030350
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08030380 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r0, 0xC
- ldrsh r6, [r4, r0]
- lsls r0, r6, 24
- lsrs r0, 24
- bl sub_8072DF0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08030388
- ldr r0, _08030384 @ =sub_80303A8
- str r0, [r4]
- movs r0, 0
- strh r0, [r4, 0x26]
- b _08030398
- .align 2, 0
-_08030380: .4byte gTasks
-_08030384: .4byte sub_80303A8
-_08030388:
- ldr r0, _080303A0 @ =gUnknown_3004FE0
- lsls r1, r6, 2
- adds r1, r0
- ldr r0, _080303A4 @ =sub_802FE94
- str r0, [r1]
- adds r0, r5, 0
- bl DestroyTask
-_08030398:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080303A0: .4byte gUnknown_3004FE0
-_080303A4: .4byte sub_802FE94
- thumb_func_end sub_8030350
-
- thumb_func_start sub_80303A8
-sub_80303A8: @ 80303A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- ldr r1, _080303FC @ =gTasks+0x8
- adds r5, r0, r1
- ldrb r7, [r5, 0x4]
- adds r0, r7, 0
- bl sub_80768B0
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- eors r0, r1
- negs r1, r0
- orrs r1, r0
- lsrs r6, r1, 31
- ldr r0, _08030400 @ =gBattlerSpriteIds
- adds r0, r7, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08030404 @ =gSprites
- adds r4, r0, r1
- movs r1, 0x1E
- ldrsh r0, [r5, r1]
- cmp r0, 0x6
- bls _080303F0
- b _0803051C
-_080303F0:
- lsls r0, 2
- ldr r1, _08030408 @ =_0803040C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080303FC: .4byte gTasks+0x8
-_08030400: .4byte gBattlerSpriteIds
-_08030404: .4byte gSprites
-_08030408: .4byte _0803040C
- .align 2, 0
-_0803040C:
- .4byte _08030428
- .4byte _0803047C
- .4byte _08030486
- .4byte _080304C0
- .4byte _080304E0
- .4byte _080304DA
- .4byte _080304E8
-_08030428:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0803051C
- cmp r6, 0
- bne _0803044C
- ldr r1, _08030444 @ =gBattle_BG1_X
- ldrh r0, [r1]
- strh r0, [r5, 0x1C]
- ldr r2, _08030448 @ =gBattle_BG1_Y
- b _08030454
- .align 2, 0
-_08030444: .4byte gBattle_BG1_X
-_08030448: .4byte gBattle_BG1_Y
-_0803044C:
- ldr r1, _08030474 @ =gBattle_BG2_X
- ldrh r0, [r1]
- strh r0, [r5, 0x1C]
- ldr r2, _08030478 @ =gBattle_BG2_Y
-_08030454:
- ldrh r0, [r2]
- strh r0, [r5, 0x1A]
- ldrh r0, [r4, 0x24]
- ldrh r3, [r4, 0x20]
- adds r0, r3
- negs r0, r0
- adds r0, 0x20
- strh r0, [r1]
- ldrh r0, [r4, 0x26]
- ldrh r4, [r4, 0x22]
- adds r0, r4
- negs r0, r0
- adds r0, 0x20
- strh r0, [r2]
- b _080304E0
- .align 2, 0
-_08030474: .4byte gBattle_BG2_X
-_08030478: .4byte gBattle_BG2_Y
-_0803047C:
- adds r0, r7, 0
- adds r1, r6, 0
- bl sub_8072E48
- b _080304E0
-_08030486:
- movs r0, 0x58
- bl PlaySE
- bl IsMonGettingExpSentOut
- cmp r0, 0
- beq _080304E0
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r4, 0x26]
- ldrh r4, [r4, 0x22]
- adds r1, r4
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _080304BC @ =0x00002710
- movs r2, 0x1
- str r2, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- adds r2, r3, 0
- bl sub_811E5B8
- b _080304E0
- .align 2, 0
-_080304BC: .4byte 0x00002710
-_080304C0:
- bl sub_811E680
- lsls r0, 24
- cmp r0, 0
- bne _0803051C
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- b _080304E0
-_080304DA:
- adds r0, r6, 0
- bl sub_8073128
-_080304E0:
- ldrh r0, [r5, 0x1E]
- adds r0, 0x1
- strh r0, [r5, 0x1E]
- b _0803051C
-_080304E8:
- cmp r6, 0
- bne _08030500
- ldr r1, _080304F8 @ =gBattle_BG1_X
- ldrh r0, [r5, 0x1C]
- strh r0, [r1]
- ldr r1, _080304FC @ =gBattle_BG1_Y
- b _08030508
- .align 2, 0
-_080304F8: .4byte gBattle_BG1_X
-_080304FC: .4byte gBattle_BG1_Y
-_08030500:
- ldr r1, _08030528 @ =gBattle_BG2_X
- ldrh r0, [r5, 0x1C]
- strh r0, [r1]
- ldr r1, _0803052C @ =gBattle_BG2_Y
-_08030508:
- ldrh r0, [r5, 0x1A]
- strh r0, [r1]
- ldr r0, _08030530 @ =gUnknown_3004FE0
- lsls r1, r7, 2
- adds r1, r0
- ldr r0, _08030534 @ =sub_802FE94
- str r0, [r1]
- mov r0, r8
- bl DestroyTask
-_0803051C:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030528: .4byte gBattle_BG2_X
-_0803052C: .4byte gBattle_BG2_Y
-_08030530: .4byte gUnknown_3004FE0
-_08030534: .4byte sub_802FE94
- thumb_func_end sub_80303A8
-
- thumb_func_start sub_8030538
-sub_8030538: @ 8030538
- push {r4-r6,lr}
- ldr r6, _08030590 @ =gSprites
- ldr r5, _08030594 @ =gBattlerSpriteIds
- ldr r4, _08030598 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r6
- movs r1, 0x22
- ldrsh r0, [r2, r1]
- movs r3, 0x26
- ldrsh r1, [r2, r3]
- adds r0, r1
- cmp r0, 0xA0
- ble _08030588
- ldrb r0, [r2, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- ldr r1, _0803059C @ =gUnknown_3004FF0
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerBufferExecCompleted
-_08030588:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08030590: .4byte gSprites
-_08030594: .4byte gBattlerSpriteIds
-_08030598: .4byte gActiveBattler
-_0803059C: .4byte gUnknown_3004FF0
- thumb_func_end sub_8030538
-
- thumb_func_start sub_80305A0
-sub_80305A0: @ 80305A0
- push {r4-r6,lr}
- ldr r0, _080305FC @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r6, _08030600 @ =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 _080305F4
- ldr r5, _08030604 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08030608 @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, _0803060C @ =gUnknown_3004FF0
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerBufferExecCompleted
-_080305F4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080305FC: .4byte gUnknown_2024018
-_08030600: .4byte gActiveBattler
-_08030604: .4byte gBattlerSpriteIds
-_08030608: .4byte gSprites
-_0803060C: .4byte gUnknown_3004FF0
- thumb_func_end sub_80305A0
-
- thumb_func_start sub_8030610
-sub_8030610: @ 8030610
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _08030622
- bl PlayerBufferExecCompleted
-_08030622:
- pop {r0}
- bx r0
- thumb_func_end sub_8030610
-
- thumb_func_start sub_8030628
-sub_8030628: @ 8030628
- push {r4,lr}
- ldr r0, _0803066C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08030666
- ldr r1, _08030670 @ =gUnknown_3004FE0
- ldr r2, _08030674 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08030678 @ =sub_8030684
- str r1, [r0]
- ldr r3, _0803067C @ =gTasks
- ldr r1, _08030680 @ =gUnknown_3004FFC
- ldrb r0, [r2]
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- ldrb r4, [r1, 0x8]
- bl DestroyTask
- bl FreeAllWindowBuffers
- adds r0, r4, 0
- bl sub_81278DC
-_08030666:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803066C: .4byte gPaletteFade
-_08030670: .4byte gUnknown_3004FE0
-_08030674: .4byte gActiveBattler
-_08030678: .4byte sub_8030684
-_0803067C: .4byte gTasks
-_08030680: .4byte gUnknown_3004FFC
- thumb_func_end sub_8030628
-
- thumb_func_start sub_8030684
-sub_8030684: @ 8030684
- push {lr}
- ldr r0, _080306B4 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _080306B8 @ =sub_8011100
- cmp r1, r0
- bne _080306F4
- ldr r0, _080306BC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080306F4
- ldr r0, _080306C0 @ =gUnknown_203B0C0
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080306CC
- ldr r0, _080306C4 @ =gUnknown_203B0C1
- ldrb r1, [r0]
- ldr r2, _080306C8 @ =gUnknown_203B0DC
- movs r0, 0x1
- bl EmitChosenMonReturnValue
- b _080306D6
- .align 2, 0
-_080306B4: .4byte gMain
-_080306B8: .4byte sub_8011100
-_080306BC: .4byte gPaletteFade
-_080306C0: .4byte gUnknown_203B0C0
-_080306C4: .4byte gUnknown_203B0C1
-_080306C8: .4byte gUnknown_203B0DC
-_080306CC:
- movs r0, 0x1
- movs r1, 0x6
- movs r2, 0
- bl EmitChosenMonReturnValue
-_080306D6:
- ldr r1, _080306F8 @ =gUnknown_2022BC4
- ldr r0, _080306FC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _080306F0
- bl PrintLinkStandbyMsg
-_080306F0:
- bl PlayerBufferExecCompleted
-_080306F4:
- pop {r0}
- bx r0
- .align 2, 0
-_080306F8: .4byte gUnknown_2022BC4
-_080306FC: .4byte gActiveBattler
- thumb_func_end sub_8030684
-
- thumb_func_start sub_8030700
-sub_8030700: @ 8030700
- push {lr}
- ldr r0, _0803072C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08030728
- ldr r1, _08030730 @ =gUnknown_3004FE0
- ldr r0, _08030734 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08030738 @ =CompleteWhenChoseItem
- str r1, [r0]
- bl nullsub_44
- bl FreeAllWindowBuffers
- bl sub_8107ECC
-_08030728:
- pop {r0}
- bx r0
- .align 2, 0
-_0803072C: .4byte gPaletteFade
-_08030730: .4byte gUnknown_3004FE0
-_08030734: .4byte gActiveBattler
-_08030738: .4byte CompleteWhenChoseItem
- thumb_func_end sub_8030700
-
- thumb_func_start CompleteWhenChoseItem
-CompleteWhenChoseItem: @ 803073C
- push {lr}
- ldr r0, _08030768 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0803076C @ =sub_8011100
- cmp r1, r0
- bne _08030762
- ldr r0, _08030770 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08030762
- ldr r0, _08030774 @ =gSpecialVar_ItemId
- ldrh r1, [r0]
- movs r0, 0x1
- bl EmitOneReturnValue
- bl PlayerBufferExecCompleted
-_08030762:
- pop {r0}
- bx r0
- .align 2, 0
-_08030768: .4byte gMain
-_0803076C: .4byte sub_8011100
-_08030770: .4byte gPaletteFade
-_08030774: .4byte gSpecialVar_ItemId
- thumb_func_end CompleteWhenChoseItem
-
- thumb_func_start CompleteOnSpecialAnimDone
-CompleteOnSpecialAnimDone: @ 8030778
- push {lr}
- ldr r0, _080307A8 @ =gUnknown_2024005
- ldrb r0, [r0]
- cmp r0, 0
- beq _0803079E
- ldr r0, _080307AC @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _080307B0 @ =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 _080307A2
-_0803079E:
- bl PlayerBufferExecCompleted
-_080307A2:
- pop {r0}
- bx r0
- .align 2, 0
-_080307A8: .4byte gUnknown_2024005
-_080307AC: .4byte gUnknown_2024018
-_080307B0: .4byte gActiveBattler
- thumb_func_end CompleteOnSpecialAnimDone
-
- thumb_func_start DoHitAnimBlinkSpriteEffect
-DoHitAnimBlinkSpriteEffect: @ 80307B4
- push {r4,lr}
- ldr r1, _080307F0 @ =gBattlerSpriteIds
- ldr r0, _080307F4 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, _080307F8 @ =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 _08030800
- 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, _080307FC @ =gUnknown_2024005
- strb r3, [r0]
- bl PlayerBufferExecCompleted
- b _0803082A
- .align 2, 0
-_080307F0: .4byte gBattlerSpriteIds
-_080307F4: .4byte gActiveBattler
-_080307F8: .4byte gSprites
-_080307FC: .4byte gUnknown_2024005
-_08030800:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08030824
- 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]
-_08030824:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_0803082A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end DoHitAnimBlinkSpriteEffect
-
- thumb_func_start sub_8030830
-sub_8030830: @ 8030830
- push {r4-r7,lr}
- ldr r0, _08030890 @ =gActiveBattler
- ldrb r1, [r0]
- lsls r1, 9
- ldr r3, _08030894 @ =gUnknown_2022BC8
- ldr r2, _08030898 @ =gUnknown_3004FF8
- movs r0, 0
- strb r0, [r2]
- movs r5, 0
- ldr r6, _0803089C @ =gDisplayedStringBattle
- adds r4, r1, r3
- adds r7, r2, 0
-_08030848:
- lsls r0, r5, 24
- lsrs r0, 24
- bl MoveSelectionDestroyCursorAt
- adds r0, r6, 0
- ldr r1, _080308A0 @ =gUnknown_83FE770
- bl StringCopy
- ldrh r1, [r4]
- movs r0, 0xD
- muls r1, r0
- ldr r0, _080308A4 @ =gMoveNames
- adds r1, r0
- adds r0, r6, 0
- bl StringAppend
- adds r1, r5, 0x3
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl sub_80D87BC
- ldrh r0, [r4]
- cmp r0, 0
- beq _08030880
- ldrb r0, [r7]
- adds r0, 0x1
- strb r0, [r7]
-_08030880:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08030848
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030890: .4byte gActiveBattler
-_08030894: .4byte gUnknown_2022BC8
-_08030898: .4byte gUnknown_3004FF8
-_0803089C: .4byte gDisplayedStringBattle
-_080308A0: .4byte gUnknown_83FE770
-_080308A4: .4byte gMoveNames
- thumb_func_end sub_8030830
-
- thumb_func_start MoveSelectionDisplayPpString
-MoveSelectionDisplayPpString: @ 80308A8
- push {r4,lr}
- ldr r4, _080308C4 @ =gDisplayedStringBattle
- ldr r1, _080308C8 @ =gUnknown_83FE766
- adds r0, r4, 0
- bl StringCopy
- adds r0, r4, 0
- movs r1, 0x7
- bl sub_80D87BC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080308C4: .4byte gDisplayedStringBattle
-_080308C8: .4byte gUnknown_83FE766
- thumb_func_end MoveSelectionDisplayPpString
-
- thumb_func_start MoveSelectionDisplayPpNumber
-MoveSelectionDisplayPpNumber: @ 80308CC
- push {r4-r7,lr}
- ldr r5, _08030930 @ =gUnknown_2022BC4
- ldr r7, _08030934 @ =gActiveBattler
- ldrb r0, [r7]
- lsls r0, 9
- adds r1, r5, 0x2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08030928
- bl SetPpNumbersPaletteInMoveSelection
- ldrb r1, [r7]
- lsls r4, r1, 9
- adds r0, r5, 0x4
- adds r4, r0
- ldr r6, _08030938 @ =gDisplayedStringBattle
- ldr r5, _0803093C @ =gUnknown_2023FFC
- adds r1, r5
- adds r0, r4, 0
- adds r0, 0x8
- ldrb r1, [r1]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r6, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- movs r1, 0xBA
- strb r1, [r0]
- adds r0, 0x1
- ldrb r1, [r7]
- adds r1, r5
- adds r4, 0xC
- ldrb r1, [r1]
- adds r4, r1
- ldrb r1, [r4]
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r0, r6, 0
- movs r1, 0x9
- bl sub_80D87BC
-_08030928:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08030930: .4byte gUnknown_2022BC4
-_08030934: .4byte gActiveBattler
-_08030938: .4byte gDisplayedStringBattle
-_0803093C: .4byte gUnknown_2023FFC
- thumb_func_end MoveSelectionDisplayPpNumber
-
- thumb_func_start MoveSelectionDisplayMoveType
-MoveSelectionDisplayMoveType: @ 8030940
- push {r4-r6,lr}
- ldr r5, _080309AC @ =gActiveBattler
- ldrb r4, [r5]
- lsls r4, 9
- ldr r0, _080309B0 @ =gUnknown_2022BC8
- adds r4, r0
- ldr r6, _080309B4 @ =gDisplayedStringBattle
- ldr r1, _080309B8 @ =gUnknown_83FE76A
- adds r0, r6, 0
- bl StringCopy
- adds r3, r0, 0
- movs r0, 0xFC
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0x6
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0x1
- strb r0, [r3]
- adds r3, 0x1
- ldr r1, _080309BC @ =gUnknown_83FE770
- adds r0, r3, 0
- bl StringCopy
- adds r3, r0, 0
- ldr r2, _080309C0 @ =gBattleMoves
- ldr r1, _080309C4 @ =gUnknown_2023FFC
- ldrb r0, [r5]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r0
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- lsls r1, r0, 3
- subs r1, r0
- ldr r0, _080309C8 @ =gUnknown_824F1A0
- adds r1, r0
- adds r0, r3, 0
- bl StringCopy
- adds r0, r6, 0
- movs r1, 0x8
- bl sub_80D87BC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080309AC: .4byte gActiveBattler
-_080309B0: .4byte gUnknown_2022BC8
-_080309B4: .4byte gDisplayedStringBattle
-_080309B8: .4byte gUnknown_83FE76A
-_080309BC: .4byte gUnknown_83FE770
-_080309C0: .4byte gBattleMoves
-_080309C4: .4byte gUnknown_2023FFC
-_080309C8: .4byte gUnknown_824F1A0
- thumb_func_end MoveSelectionDisplayMoveType
-
- thumb_func_start MoveSelectionCreateCursorAt
-MoveSelectionCreateCursorAt: @ 80309CC
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- lsls r1, 24
- lsrs r1, 24
- add r2, sp, 0xC
- adds r0, r1, 0x1
- strh r0, [r2]
- adds r0, r2, 0
- adds r1, 0x2
- strh r1, [r0, 0x2]
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- lsls r2, r0, 3
- adds r2, r0
- adds r2, 0x1
- movs r0, 0x2
- ands r3, r0
- adds r3, 0x37
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- thumb_func_end MoveSelectionCreateCursorAt
-
- thumb_func_start MoveSelectionDestroyCursorAt
-MoveSelectionDestroyCursorAt: @ 8030A14
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- add r0, sp, 0xC
- movs r1, 0x20
- strh r1, [r0]
- strh r1, [r0, 0x2]
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- lsls r2, r0, 3
- adds r2, r0
- adds r2, 0x1
- movs r0, 0x2
- ands r3, r0
- adds r3, 0x37
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- thumb_func_end MoveSelectionDestroyCursorAt
-
- thumb_func_start ActionSelectionCreateCursorAt
-ActionSelectionCreateCursorAt: @ 8030A54
- push {r4,lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- add r0, sp, 0xC
- movs r4, 0x1
- strh r4, [r0]
- movs r1, 0x2
- strh r1, [r0, 0x2]
- adds r0, r3, 0
- ands r0, r4
- lsls r2, r0, 3
- subs r2, r0
- adds r2, 0x10
- lsls r2, 24
- lsrs r2, 24
- ands r3, r1
- adds r3, 0x23
- str r4, [sp]
- str r1, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ActionSelectionCreateCursorAt
-
- thumb_func_start ActionSelectionDestroyCursorAt
-ActionSelectionDestroyCursorAt: @ 8030A98
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- add r0, sp, 0xC
- movs r1, 0x20
- strh r1, [r0]
- strh r1, [r0, 0x2]
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- lsls r2, r0, 3
- subs r2, r0
- adds r2, 0x10
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x2
- ands r3, r0
- adds r3, 0x23
- str r1, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- thumb_func_end ActionSelectionDestroyCursorAt
-
- thumb_func_start sub_8030ADC
-sub_8030ADC: @ 8030ADC
- push {lr}
- ldr r0, _08030AE8 @ =sub_8077764
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08030AE8: .4byte sub_8077764
- thumb_func_end sub_8030ADC
-
- thumb_func_start sub_8030AEC
-sub_8030AEC: @ 8030AEC
- push {lr}
- ldr r0, _08030AF8 @ =sub_8077764
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08030AF8: .4byte sub_8077764
- thumb_func_end sub_8030AEC
-
- thumb_func_start CompleteOnFinishedStatusAnimation
-CompleteOnFinishedStatusAnimation: @ 8030AFC
- push {lr}
- ldr r0, _08030B24 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _08030B28 @ =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 _08030B1E
- bl PlayerBufferExecCompleted
-_08030B1E:
- pop {r0}
- bx r0
- .align 2, 0
-_08030B24: .4byte gUnknown_2024018
-_08030B28: .4byte gActiveBattler
- thumb_func_end CompleteOnFinishedStatusAnimation
-
- thumb_func_start CompleteOnFinishedBattleAnimation
-CompleteOnFinishedBattleAnimation: @ 8030B2C
- push {lr}
- ldr r0, _08030B54 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _08030B58 @ =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 _08030B4E
- bl PlayerBufferExecCompleted
-_08030B4E:
- pop {r0}
- bx r0
- .align 2, 0
-_08030B54: .4byte gUnknown_2024018
-_08030B58: .4byte gActiveBattler
- thumb_func_end CompleteOnFinishedBattleAnimation
-
- thumb_func_start PrintLinkStandbyMsg
-PrintLinkStandbyMsg: @ 8030B5C
- push {lr}
- ldr r0, _08030B80 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08030B7C
- ldr r0, _08030B84 @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _08030B88 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _08030B8C @ =gUnknown_83FE714
- movs r1, 0
- bl sub_80D87BC
-_08030B7C:
- pop {r0}
- bx r0
- .align 2, 0
-_08030B80: .4byte gBattleTypeFlags
-_08030B84: .4byte gBattle_BG0_X
-_08030B88: .4byte gBattle_BG0_Y
-_08030B8C: .4byte gUnknown_83FE714
- thumb_func_end PrintLinkStandbyMsg
-
- thumb_func_start PlayerHandleGetMonData
-PlayerHandleGetMonData: @ 8030B90
- push {r4-r6,lr}
- sub sp, 0x100
- movs r6, 0
- ldr r1, _08030BBC @ =gUnknown_2022BC4
- ldr r0, _08030BC0 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _08030BC8
- ldr r0, _08030BC4 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- mov r1, sp
- bl CopyPlayerMonData
- adds r6, r0, 0
- b _08030BEA
- .align 2, 0
-_08030BBC: .4byte gUnknown_2022BC4
-_08030BC0: .4byte gActiveBattler
-_08030BC4: .4byte gBattlerPartyIndexes
-_08030BC8:
- ldrb r4, [r1]
- movs r5, 0
-_08030BCC:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _08030BE2
- lsls r0, r5, 24
- lsrs r0, 24
- mov r2, sp
- adds r1, r2, r6
- bl CopyPlayerMonData
- adds r6, r0
-_08030BE2:
- lsrs r4, 1
- adds r5, 0x1
- cmp r5, 0x5
- ble _08030BCC
-_08030BEA:
- lsls r1, r6, 16
- lsrs r1, 16
- movs r0, 0x1
- mov r2, sp
- bl EmitDataTransfer
- bl PlayerBufferExecCompleted
- add sp, 0x100
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleGetMonData
-
- thumb_func_start CopyPlayerMonData
-CopyPlayerMonData: @ 8030C04
- 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, _08030C38 @ =gUnknown_2022BC4
- ldr r3, _08030C3C @ =gActiveBattler
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, r2, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x3B
- bls _08030C2E
- bl _0803139A
-_08030C2E:
- lsls r0, 2
- ldr r1, _08030C40 @ =_08030C44
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08030C38: .4byte gUnknown_2022BC4
-_08030C3C: .4byte gActiveBattler
-_08030C40: .4byte _08030C44
- .align 2, 0
-_08030C44:
- .4byte _08030D34
- .4byte _08030F58
- .4byte _08030F68
- .4byte _08030F78
- .4byte _08030FE0
- .4byte _08030FE0
- .4byte _08030FE0
- .4byte _08030FE0
- .4byte _08030FFC
- .4byte _08031038
- .4byte _08031038
- .4byte _08031038
- .4byte _08031038
- .4byte _0803139A
- .4byte _0803139A
- .4byte _0803139A
- .4byte _0803139A
- .4byte _08031054
- .4byte _08031064
- .4byte _08031094
- .4byte _080310A4
- .4byte _080310B4
- .4byte _080310C4
- .4byte _080310D4
- .4byte _080310E4
- .4byte _080310F4
- .4byte _08031104
- .4byte _08031114
- .4byte _08031124
- .4byte _08031134
- .4byte _08031144
- .4byte _08031154
- .4byte _080311A4
- .4byte _080311B4
- .4byte _080311C4
- .4byte _080311D4
- .4byte _080311E4
- .4byte _080311F4
- .4byte _08031204
- .4byte _08031214
- .4byte _08031224
- .4byte _08031258
- .4byte _08031268
- .4byte _08031278
- .4byte _08031288
- .4byte _08031298
- .4byte _080312A8
- .4byte _080312B8
- .4byte _080312C8
- .4byte _080312E8
- .4byte _080312F8
- .4byte _08031308
- .4byte _08031318
- .4byte _08031328
- .4byte _08031338
- .4byte _08031348
- .4byte _08031358
- .4byte _08031368
- .4byte _08031378
- .4byte _08031388
-_08030D34:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08030F48 @ =gPlayerParty
- 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
-_08030D80:
- 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 _08030D80
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08030F48 @ =gPlayerParty
- 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, _08030F4C @ =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, _08030F50 @ =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, _08030F54 @ =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
-_08030F38:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0x57
- bls _08030F38
- b _0803139A
- .align 2, 0
-_08030F48: .4byte gPlayerParty
-_08030F4C: .4byte 0xfffffc1f
-_08030F50: .4byte 0xfff07fff
-_08030F54: .4byte 0xfffffe0f
-_08030F58:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08030F64 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- b _080312D2
- .align 2, 0
-_08030F64: .4byte gPlayerParty
-_08030F68:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08030F74 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- b _080312D2
- .align 2, 0
-_08030F74: .4byte gPlayerParty
-_08030F78:
- 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, _08030FDC @ =gPlayerParty
- adds r4, r1, r0
- mov r8, r9
-_08030F8E:
- 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 _08030F8E
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08030FDC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- mov r1, r9
- strb r0, [r1, 0xC]
- mov r2, r9
- movs r6, 0
-_08030FCC:
- adds r0, r7, r6
- adds r1, r2, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0xF
- bls _08030FCC
- b _0803139A
- .align 2, 0
-_08030FDC: .4byte gPlayerParty
-_08030FE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08030FF8 @ =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x9
- b _080312D2
- .align 2, 0
-_08030FF8: .4byte gPlayerParty
-_08030FFC:
- movs r6, 0
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r2, _08031034 @ =gPlayerParty
- mov r8, r2
-_08031008:
- 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 _08031008
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031034 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- adds r1, r7, r6
- strb r0, [r1]
- adds r6, 0x1
- b _0803139A
- .align 2, 0
-_08031034: .4byte gPlayerParty
-_08031038:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031050 @ =gPlayerParty
- adds r0, r1
- ldrb r1, [r3]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- adds r1, 0x8
- b _08031392
- .align 2, 0
-_08031050: .4byte gPlayerParty
-_08031054:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031060 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1
- b _0803106E
- .align 2, 0
-_08031060: .4byte gPlayerParty
-_08031064:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031090 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x19
-_0803106E:
- 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 _0803139A
- .align 2, 0
-_08031090: .4byte gPlayerParty
-_08031094:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310A0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1A
- b _08031392
- .align 2, 0
-_080310A0: .4byte gPlayerParty
-_080310A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310B0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1B
- b _08031392
- .align 2, 0
-_080310B0: .4byte gPlayerParty
-_080310B4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310C0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1C
- b _08031392
- .align 2, 0
-_080310C0: .4byte gPlayerParty
-_080310C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310D0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1D
- b _08031392
- .align 2, 0
-_080310D0: .4byte gPlayerParty
-_080310D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310E0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1E
- b _08031392
- .align 2, 0
-_080310E0: .4byte gPlayerParty
-_080310E4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080310F0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1F
- b _08031392
- .align 2, 0
-_080310F0: .4byte gPlayerParty
-_080310F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031100 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x20
- b _08031392
- .align 2, 0
-_08031100: .4byte gPlayerParty
-_08031104:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031110 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x22
- b _08031392
- .align 2, 0
-_08031110: .4byte gPlayerParty
-_08031114:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031120 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x23
- b _08031392
- .align 2, 0
-_08031120: .4byte gPlayerParty
-_08031124:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031130 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x24
- b _08031392
- .align 2, 0
-_08031130: .4byte gPlayerParty
-_08031134:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031140 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x25
- b _08031392
- .align 2, 0
-_08031140: .4byte gPlayerParty
-_08031144:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031150 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x26
- b _08031392
- .align 2, 0
-_08031150: .4byte gPlayerParty
-_08031154:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _080311A0 @ =gPlayerParty
- 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 _0803139A
- .align 2, 0
-_080311A0: .4byte gPlayerParty
-_080311A4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311B0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x27
- b _08031392
- .align 2, 0
-_080311B0: .4byte gPlayerParty
-_080311B4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311C0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x28
- b _08031392
- .align 2, 0
-_080311C0: .4byte gPlayerParty
-_080311C4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311D0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x29
- b _08031392
- .align 2, 0
-_080311D0: .4byte gPlayerParty
-_080311D4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311E0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2A
- b _08031392
- .align 2, 0
-_080311E0: .4byte gPlayerParty
-_080311E4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080311F0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2B
- b _08031392
- .align 2, 0
-_080311F0: .4byte gPlayerParty
-_080311F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031200 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2C
- b _08031392
- .align 2, 0
-_08031200: .4byte gPlayerParty
-_08031204:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031210 @ =gPlayerParty
- adds r0, r1
- movs r1, 0
- b _0803122E
- .align 2, 0
-_08031210: .4byte gPlayerParty
-_08031214:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031220 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x9
- b _080312D2
- .align 2, 0
-_08031220: .4byte gPlayerParty
-_08031224:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031254 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x37
-_0803122E:
- 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 _0803139A
- .align 2, 0
-_08031254: .4byte gPlayerParty
-_08031258:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031264 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- b _08031392
- .align 2, 0
-_08031264: .4byte gPlayerParty
-_08031268:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031274 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- b _080312D2
- .align 2, 0
-_08031274: .4byte gPlayerParty
-_08031278:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031284 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- b _080312D2
- .align 2, 0
-_08031284: .4byte gPlayerParty
-_08031288:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031294 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3B
- b _080312D2
- .align 2, 0
-_08031294: .4byte gPlayerParty
-_08031298:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312A4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3C
- b _080312D2
- .align 2, 0
-_080312A4: .4byte gPlayerParty
-_080312A8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312B4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3D
- b _080312D2
- .align 2, 0
-_080312B4: .4byte gPlayerParty
-_080312B8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312C4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3E
- b _080312D2
- .align 2, 0
-_080312C4: .4byte gPlayerParty
-_080312C8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312E4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3F
-_080312D2:
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- strb r0, [r7]
- lsrs r0, 8
- strb r0, [r7, 0x1]
- movs r6, 0x2
- b _0803139A
- .align 2, 0
-_080312E4: .4byte gPlayerParty
-_080312E8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080312F4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x16
- b _08031392
- .align 2, 0
-_080312F4: .4byte gPlayerParty
-_080312F8:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031304 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x17
- b _08031392
- .align 2, 0
-_08031304: .4byte gPlayerParty
-_08031308:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031314 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x18
- b _08031392
- .align 2, 0
-_08031314: .4byte gPlayerParty
-_08031318:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031324 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x21
- b _08031392
- .align 2, 0
-_08031324: .4byte gPlayerParty
-_08031328:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031334 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2F
- b _08031392
- .align 2, 0
-_08031334: .4byte gPlayerParty
-_08031338:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031344 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x30
- b _08031392
- .align 2, 0
-_08031344: .4byte gPlayerParty
-_08031348:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031354 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x32
- b _08031392
- .align 2, 0
-_08031354: .4byte gPlayerParty
-_08031358:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031364 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x33
- b _08031392
- .align 2, 0
-_08031364: .4byte gPlayerParty
-_08031368:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031374 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x34
- b _08031392
- .align 2, 0
-_08031374: .4byte gPlayerParty
-_08031378:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031384 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x35
- b _08031392
- .align 2, 0
-_08031384: .4byte gPlayerParty
-_08031388:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080313AC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x36
-_08031392:
- bl GetMonData
- strb r0, [r7]
- movs r6, 0x1
-_0803139A:
- 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
-_080313AC: .4byte gPlayerParty
- thumb_func_end CopyPlayerMonData
-
- thumb_func_start PlayerHandleGetRawMonData
-PlayerHandleGetRawMonData: @ 80313B0
- push {r4-r7,lr}
- sub sp, 0x58
- ldr r2, _08031428 @ =gBattlerPartyIndexes
- ldr r5, _0803142C @ =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, _08031430 @ =gUnknown_2022BC4
- lsls r1, 9
- adds r0, r3, 0x1
- adds r0, r1, r0
- ldrb r2, [r0]
- ldr r0, _08031434 @ =gPlayerParty
- 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 _08031406
- adds r3, r0, 0
-_080313EC:
- 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 _080313EC
-_08031406:
- 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 EmitDataTransfer
- bl PlayerBufferExecCompleted
- add sp, 0x58
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08031428: .4byte gBattlerPartyIndexes
-_0803142C: .4byte gActiveBattler
-_08031430: .4byte gUnknown_2022BC4
-_08031434: .4byte gPlayerParty
- thumb_func_end PlayerHandleGetRawMonData
-
- thumb_func_start PlayerHandleSetMonData
-PlayerHandleSetMonData: @ 8031438
- push {r4,r5,lr}
- ldr r1, _0803145C @ =gUnknown_2022BC4
- ldr r0, _08031460 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- bne _08031468
- ldr r0, _08031464 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrb r0, [r1]
- bl SetPlayerMonData
- b _08031486
- .align 2, 0
-_0803145C: .4byte gUnknown_2022BC4
-_08031460: .4byte gActiveBattler
-_08031464: .4byte gBattlerPartyIndexes
-_08031468:
- ldrb r4, [r1]
- movs r5, 0
-_0803146C:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0803147A
- adds r0, r5, 0
- bl SetPlayerMonData
-_0803147A:
- lsrs r4, 1
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _0803146C
-_08031486:
- bl PlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleSetMonData
-
- thumb_func_start SetPlayerMonData
-SetPlayerMonData: @ 8031490
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080314C8 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- ldr r2, _080314CC @ =gUnknown_2022BC7
- adds r3, r0, r2
- adds r6, r3, 0
- subs r1, r2, 0x2
- adds r0, r1
- ldrb r0, [r0]
- adds r7, r2, 0
- cmp r0, 0x3B
- bls _080314BC
- bl _08031E56
-_080314BC:
- lsls r0, 2
- ldr r1, _080314D0 @ =_080314D4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080314C8: .4byte gActiveBattler
-_080314CC: .4byte gUnknown_2022BC7
-_080314D0: .4byte _080314D4
- .align 2, 0
-_080314D4:
- .4byte _080315C4
- .4byte _0803175C
- .4byte _0803177C
- .4byte _0803179C
- .4byte _080317F4
- .4byte _080317F4
- .4byte _080317F4
- .4byte _080317F4
- .4byte _0803181C
- .4byte _08031880
- .4byte _08031880
- .4byte _08031880
- .4byte _08031880
- .4byte _08031E56
- .4byte _08031E56
- .4byte _08031E56
- .4byte _08031E56
- .4byte _080318B0
- .4byte _080318D0
- .4byte _080318F0
- .4byte _08031910
- .4byte _08031930
- .4byte _08031950
- .4byte _08031970
- .4byte _08031990
- .4byte _080319B0
- .4byte _080319D0
- .4byte _080319F0
- .4byte _08031A10
- .4byte _08031A30
- .4byte _08031A50
- .4byte _08031A70
- .4byte _08031AE0
- .4byte _08031B00
- .4byte _08031B20
- .4byte _08031B40
- .4byte _08031B60
- .4byte _08031B80
- .4byte _08031BA0
- .4byte _08031BC0
- .4byte _08031BE0
- .4byte _08031C00
- .4byte _08031C20
- .4byte _08031C40
- .4byte _08031C60
- .4byte _08031C80
- .4byte _08031CA0
- .4byte _08031CC0
- .4byte _08031CE0
- .4byte _08031D00
- .4byte _08031D20
- .4byte _08031D40
- .4byte _08031D60
- .4byte _08031D80
- .4byte _08031DA0
- .4byte _08031DC0
- .4byte _08031DE0
- .4byte _08031E00
- .4byte _08031E20
- .4byte _08031E40
-_080315C4:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08031758 @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- adds r2, r6, 0
- bl SetMonData
- adds r2, r6, 0
- adds r2, 0x2E
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
- movs r0, 0
- mov r8, r0
- movs r0, 0x3B
- adds r0, r6
- mov r10, r0
- adds r0, r6, 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, r6, 0x2
- str r0, [sp, 0x4]
- adds r0, r6, 0x4
- str r0, [sp, 0x8]
- adds r0, r6, 0x6
- str r0, [sp, 0xC]
- adds r0, 0x2
- str r0, [sp, 0x10]
- adds r0, 0x2
- str r0, [sp, 0x14]
- mov r9, r4
- adds r7, r6, 0
- adds r7, 0x24
- adds r4, r6, 0
- adds r4, 0xC
-_0803162A:
- 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, r7, 0
- bl SetMonData
- adds r7, 0x1
- adds r4, 0x2
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x3
- ble _0803162A
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08031758 @ =gPlayerParty
- 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, [r6, 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, [r6, 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, [r6, 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, [r6, 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, [r6, 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, [r6, 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 _08031E56
- .align 2, 0
-_08031758: .4byte gPlayerParty
-_0803175C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031774 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031778 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xB
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031774: .4byte gPlayerParty
-_08031778: .4byte gActiveBattler
-_0803177C:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031794 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031798 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0xC
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031794: .4byte gPlayerParty
-_08031798: .4byte gActiveBattler
-_0803179C:
- movs r0, 0
- mov r8, r0
- movs r0, 0xC
- adds r0, r3
- mov r9, r0
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _080317F0 @ =gPlayerParty
- adds r7, r1, r0
- adds r6, r3, 0
- adds r6, 0x8
- adds r4, r3, 0
-_080317B6:
- 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 _080317B6
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080317F0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080317F0: .4byte gPlayerParty
-_080317F4:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031810 @ =gPlayerParty
- adds r0, r1
- ldr r3, _08031814 @ =gUnknown_2022BC4
- ldr r1, _08031818 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x9
- b _08031898
- .align 2, 0
-_08031810: .4byte gPlayerParty
-_08031814: .4byte gUnknown_2022BC4
-_08031818: .4byte gActiveBattler
-_0803181C:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08031878 @ =gPlayerParty
- adds r4, r0
- ldr r5, _0803187C @ =gActiveBattler
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x11
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x12
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x13
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x14
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x15
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031878: .4byte gPlayerParty
-_0803187C: .4byte gActiveBattler
-_08031880:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080318A4 @ =gPlayerParty
- adds r0, r1
- ldr r3, _080318A8 @ =gUnknown_2022BC4
- ldr r1, _080318AC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r1, 0x8
-_08031898:
- adds r3, 0x3
- adds r2, r3
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080318A4: .4byte gPlayerParty
-_080318A8: .4byte gUnknown_2022BC4
-_080318AC: .4byte gActiveBattler
-_080318B0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080318C8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080318CC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080318C8: .4byte gPlayerParty
-_080318CC: .4byte gActiveBattler
-_080318D0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080318E8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080318EC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x19
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080318E8: .4byte gPlayerParty
-_080318EC: .4byte gActiveBattler
-_080318F0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031908 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803190C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1A
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031908: .4byte gPlayerParty
-_0803190C: .4byte gActiveBattler
-_08031910:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031928 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803192C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1B
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031928: .4byte gPlayerParty
-_0803192C: .4byte gActiveBattler
-_08031930:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031948 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803194C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1C
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031948: .4byte gPlayerParty
-_0803194C: .4byte gActiveBattler
-_08031950:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031968 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803196C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1D
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031968: .4byte gPlayerParty
-_0803196C: .4byte gActiveBattler
-_08031970:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031988 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0803198C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1E
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031988: .4byte gPlayerParty
-_0803198C: .4byte gActiveBattler
-_08031990:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080319A8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080319AC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x1F
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080319A8: .4byte gPlayerParty
-_080319AC: .4byte gActiveBattler
-_080319B0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080319C8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080319CC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x20
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080319C8: .4byte gPlayerParty
-_080319CC: .4byte gActiveBattler
-_080319D0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _080319E8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080319EC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x22
- bl SetMonData
- b _08031E56
- .align 2, 0
-_080319E8: .4byte gPlayerParty
-_080319EC: .4byte gActiveBattler
-_080319F0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031A08 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031A0C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x23
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031A08: .4byte gPlayerParty
-_08031A0C: .4byte gActiveBattler
-_08031A10:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031A28 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031A2C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x24
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031A28: .4byte gPlayerParty
-_08031A2C: .4byte gActiveBattler
-_08031A30:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031A48 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031A4C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x25
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031A48: .4byte gPlayerParty
-_08031A4C: .4byte gActiveBattler
-_08031A50:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031A68 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031A6C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x26
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031A68: .4byte gPlayerParty
-_08031A6C: .4byte gActiveBattler
-_08031A70:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, _08031AD8 @ =gPlayerParty
- adds r4, r0
- ldr r5, _08031ADC @ =gActiveBattler
- ldrb r2, [r5]
- lsls r2, 9
- adds r2, r7
- adds r0, r4, 0
- movs r1, 0x27
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x1
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x28
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x2
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x29
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x3
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2A
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x4
- adds r2, r0
- adds r0, r4, 0
- movs r1, 0x2B
- bl SetMonData
- ldrb r2, [r5]
- lsls r2, 9
- adds r0, r7, 0x5
- adds r2, r0
- adds r0, r4, 0
- b _08031B90
- .align 2, 0
-_08031AD8: .4byte gPlayerParty
-_08031ADC: .4byte gActiveBattler
-_08031AE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031AF8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031AFC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x27
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031AF8: .4byte gPlayerParty
-_08031AFC: .4byte gActiveBattler
-_08031B00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B18 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B1C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x28
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B18: .4byte gPlayerParty
-_08031B1C: .4byte gActiveBattler
-_08031B20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B38 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B3C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x29
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B38: .4byte gPlayerParty
-_08031B3C: .4byte gActiveBattler
-_08031B40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B58 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B5C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2A
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B58: .4byte gPlayerParty
-_08031B5C: .4byte gActiveBattler
-_08031B60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B78 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B7C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2B
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B78: .4byte gPlayerParty
-_08031B7C: .4byte gActiveBattler
-_08031B80:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031B98 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031B9C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
-_08031B90:
- movs r1, 0x2C
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031B98: .4byte gPlayerParty
-_08031B9C: .4byte gActiveBattler
-_08031BA0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031BB8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031BBC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031BB8: .4byte gPlayerParty
-_08031BBC: .4byte gActiveBattler
-_08031BC0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031BD8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031BDC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x9
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031BD8: .4byte gPlayerParty
-_08031BDC: .4byte gActiveBattler
-_08031BE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031BF8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031BFC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x37
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031BF8: .4byte gPlayerParty
-_08031BFC: .4byte gActiveBattler
-_08031C00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C18 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C1C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x38
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C18: .4byte gPlayerParty
-_08031C1C: .4byte gActiveBattler
-_08031C20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C38 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C3C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x39
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C38: .4byte gPlayerParty
-_08031C3C: .4byte gActiveBattler
-_08031C40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C58 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C5C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3A
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C58: .4byte gPlayerParty
-_08031C5C: .4byte gActiveBattler
-_08031C60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C78 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C7C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3B
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C78: .4byte gPlayerParty
-_08031C7C: .4byte gActiveBattler
-_08031C80:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031C98 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031C9C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3C
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031C98: .4byte gPlayerParty
-_08031C9C: .4byte gActiveBattler
-_08031CA0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031CB8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031CBC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3D
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031CB8: .4byte gPlayerParty
-_08031CBC: .4byte gActiveBattler
-_08031CC0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031CD8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031CDC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3E
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031CD8: .4byte gPlayerParty
-_08031CDC: .4byte gActiveBattler
-_08031CE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031CF8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031CFC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x3F
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031CF8: .4byte gPlayerParty
-_08031CFC: .4byte gActiveBattler
-_08031D00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D18 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D1C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x16
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D18: .4byte gPlayerParty
-_08031D1C: .4byte gActiveBattler
-_08031D20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D38 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D3C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x17
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D38: .4byte gPlayerParty
-_08031D3C: .4byte gActiveBattler
-_08031D40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D58 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D5C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x18
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D58: .4byte gPlayerParty
-_08031D5C: .4byte gActiveBattler
-_08031D60:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D78 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D7C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x21
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D78: .4byte gPlayerParty
-_08031D7C: .4byte gActiveBattler
-_08031D80:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031D98 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031D9C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x2F
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031D98: .4byte gPlayerParty
-_08031D9C: .4byte gActiveBattler
-_08031DA0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031DB8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031DBC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x30
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031DB8: .4byte gPlayerParty
-_08031DBC: .4byte gActiveBattler
-_08031DC0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031DD8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031DDC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x32
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031DD8: .4byte gPlayerParty
-_08031DDC: .4byte gActiveBattler
-_08031DE0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031DF8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031DFC @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x33
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031DF8: .4byte gPlayerParty
-_08031DFC: .4byte gActiveBattler
-_08031E00:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031E18 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031E1C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x34
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031E18: .4byte gPlayerParty
-_08031E1C: .4byte gActiveBattler
-_08031E20:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031E38 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031E3C @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x35
- bl SetMonData
- b _08031E56
- .align 2, 0
-_08031E38: .4byte gPlayerParty
-_08031E3C: .4byte gActiveBattler
-_08031E40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08031E80 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08031E84 @ =gActiveBattler
- ldrb r2, [r1]
- lsls r2, 9
- adds r2, r7
- movs r1, 0x36
- bl SetMonData
-_08031E56:
- ldr r2, _08031E88 @ =gBattlerPartyIndexes
- ldr r0, _08031E84 @ =gActiveBattler
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _08031E80 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08031E80: .4byte gPlayerParty
-_08031E84: .4byte gActiveBattler
-_08031E88: .4byte gBattlerPartyIndexes
- thumb_func_end SetPlayerMonData
-
- thumb_func_start PlayerHandleSetRawMonData
-PlayerHandleSetRawMonData: @ 8031E8C
- push {r4-r7,lr}
- ldr r1, _08031EF0 @ =gBattlerPartyIndexes
- ldr r7, _08031EF4 @ =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, _08031EF8 @ =gUnknown_2022BC4
- lsls r2, 9
- adds r0, r4, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- ldr r1, _08031EFC @ =gPlayerParty
- adds r0, r1
- adds r5, r3, r0
- movs r3, 0
- adds r0, r4, 0x2
- adds r2, r0
- ldrb r2, [r2]
- cmp r3, r2
- bcs _08031EE4
- adds r6, r4, 0
- adds r2, r7, 0
- adds r4, r0, 0
-_08031EC2:
- 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 _08031EC2
-_08031EE4:
- bl PlayerBufferExecCompleted
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08031EF0: .4byte gBattlerPartyIndexes
-_08031EF4: .4byte gActiveBattler
-_08031EF8: .4byte gUnknown_2022BC4
-_08031EFC: .4byte gPlayerParty
- thumb_func_end PlayerHandleSetRawMonData
-
- thumb_func_start PlayerHandleLoadMonSprite
-PlayerHandleLoadMonSprite: @ 8031F00
- push {r4,lr}
- ldr r2, _08031F4C @ =gBattlerPartyIndexes
- ldr r4, _08031F50 @ =gActiveBattler
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _08031F54 @ =gPlayerParty
- adds r0, r2
- bl sub_8034498
- ldr r2, _08031F58 @ =gSprites
- ldr r0, _08031F5C @ =gBattlerSpriteIds
- ldrb r3, [r4]
- adds r0, r3, r0
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldr r1, _08031F60 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08031F64 @ =CompleteOnBankSpritePosX_0
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08031F4C: .4byte gBattlerPartyIndexes
-_08031F50: .4byte gActiveBattler
-_08031F54: .4byte gPlayerParty
-_08031F58: .4byte gSprites
-_08031F5C: .4byte gBattlerSpriteIds
-_08031F60: .4byte gUnknown_3004FE0
-_08031F64: .4byte CompleteOnBankSpritePosX_0
- thumb_func_end PlayerHandleLoadMonSprite
-
- thumb_func_start PlayerHandleSwitchInAnim
-PlayerHandleSwitchInAnim: @ 8031F68
- push {r4-r6,lr}
- ldr r5, _08031FD4 @ =gActiveBattler
- ldrb r0, [r5]
- ldr r4, _08031FD8 @ =gUnknown_2022BC4
- lsls r1, r0, 9
- adds r6, r4, 0x2
- adds r1, r6
- ldrb r1, [r1]
- bl ClearTemporarySpeciesSpriteData
- ldr r2, _08031FDC @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r2
- lsls r0, 9
- adds r4, 0x1
- adds r0, r4
- ldrb r0, [r0]
- movs r4, 0
- strh r0, [r1]
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _08031FE0 @ =gPlayerParty
- adds r0, r2
- bl sub_8034498
- ldr r1, _08031FE4 @ =gUnknown_2023FF8
- ldrb r0, [r5]
- adds r0, r1
- strb r4, [r0]
- ldr r1, _08031FE8 @ =gUnknown_2023FFC
- ldrb r0, [r5]
- adds r0, r1
- strb r4, [r0]
- ldrb r0, [r5]
- lsls r1, r0, 9
- adds r1, r6
- ldrb r1, [r1]
- bl sub_8031FF4
- ldr r1, _08031FEC @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08031FF0 @ =sub_802FD18
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08031FD4: .4byte gActiveBattler
-_08031FD8: .4byte gUnknown_2022BC4
-_08031FDC: .4byte gBattlerPartyIndexes
-_08031FE0: .4byte gPlayerParty
-_08031FE4: .4byte gUnknown_2023FF8
-_08031FE8: .4byte gUnknown_2023FFC
-_08031FEC: .4byte gUnknown_3004FE0
-_08031FF0: .4byte sub_802FD18
- thumb_func_end PlayerHandleSwitchInAnim
-
- thumb_func_start sub_8031FF4
-sub_8031FF4: @ 8031FF4
- 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, _08032138 @ =gBattlerPartyIndexes
- lsls r2, r6, 1
- adds r2, r0
- ldr r0, _0803213C @ =gUnknown_2022BC4
- lsls r1, r6, 9
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- strh r0, [r2]
- ldrh r1, [r2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08032140 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _08032144 @ =sub_8033E3C
- bl CreateInvisibleSpriteWithCallback
- ldr r1, _08032148 @ =gUnknown_3004FFC
- mov r9, r1
- add r9, r6
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _0803214C @ =gMultiuseSpriteTemplate
- mov r10, r0
- adds r0, r6, 0
- movs r1, 0x2
- bl sub_8074480
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- bl GetBankSpriteDefault_Y
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r10
- adds r1, r5, 0
- adds r2, r4, 0
- bl CreateSprite
- ldr r4, _08032150 @ =gBattlerSpriteIds
- adds r4, r6, r4
- strb r0, [r4]
- ldr r5, _08032154 @ =gSprites
- mov r0, r9
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r4]
- strh r1, [r0, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x2E]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r8
- strh r1, [r0, 0x32]
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r6, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08032158 @ =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, _0803215C @ =SpriteCallbackDummy
- str r1, [r0]
- movs r0, 0
- movs r1, 0xFF
- bl DoPokeballSendOutAnimation
- mov r1, r9
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x2E]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032138: .4byte gBattlerPartyIndexes
-_0803213C: .4byte gUnknown_2022BC4
-_08032140: .4byte gPlayerParty
-_08032144: .4byte sub_8033E3C
-_08032148: .4byte gUnknown_3004FFC
-_0803214C: .4byte gMultiuseSpriteTemplate
-_08032150: .4byte gBattlerSpriteIds
-_08032154: .4byte gSprites
-_08032158: .4byte gBattleMonForms
-_0803215C: .4byte SpriteCallbackDummy
- thumb_func_end sub_8031FF4
-
- thumb_func_start PlayerHandleReturnPokeToBall
-PlayerHandleReturnPokeToBall: @ 8032160
- push {r4-r6,lr}
- ldr r1, _08032194 @ =gUnknown_2022BC4
- ldr r6, _08032198 @ =gActiveBattler
- ldrb r2, [r6]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r3, [r0]
- cmp r3, 0
- bne _080321A8
- ldr r0, _0803219C @ =gUnknown_2024018
- 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, _080321A0 @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080321A4 @ =sub_80321F0
- str r1, [r0]
- b _080321DE
- .align 2, 0
-_08032194: .4byte gUnknown_2022BC4
-_08032198: .4byte gActiveBattler
-_0803219C: .4byte gUnknown_2024018
-_080321A0: .4byte gUnknown_3004FE0
-_080321A4: .4byte sub_80321F0
-_080321A8:
- ldr r5, _080321E4 @ =gBattlerSpriteIds
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080321E8 @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, _080321EC @ =gUnknown_3004FF0
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
- bl PlayerBufferExecCompleted
-_080321DE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080321E4: .4byte gBattlerSpriteIds
-_080321E8: .4byte gSprites
-_080321EC: .4byte gUnknown_3004FF0
- thumb_func_end PlayerHandleReturnPokeToBall
-
- thumb_func_start sub_80321F0
-sub_80321F0: @ 80321F0
- push {r4-r6,lr}
- ldr r6, _08032210 @ =gUnknown_2024018
- ldr r4, [r6]
- ldr r5, _08032214 @ =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 _08032218
- cmp r0, 0x1
- beq _08032246
- b _0803226E
- .align 2, 0
-_08032210: .4byte gUnknown_2024018
-_08032214: .4byte gActiveBattler
-_08032218:
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08032232
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_08032232:
- 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 _0803226E
-_08032246:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0803226E
- strb r0, [r3, 0x4]
- ldrb r2, [r5]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x1
- bl InitAndLaunchSpecialAnimation
- ldr r1, _08032274 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032278 @ =sub_80305A0
- str r1, [r0]
-_0803226E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032274: .4byte gUnknown_3004FE0
-_08032278: .4byte sub_80305A0
- thumb_func_end sub_80321F0
-
- thumb_func_start sub_803227C
-sub_803227C: @ 803227C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _080322A4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080322AC
- ldr r0, _080322A8 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- movs r1, 0x2
- ands r1, r0
- movs r7, 0x20
- cmp r1, 0
- beq _080322AE
- movs r7, 0x5A
- b _080322AE
- .align 2, 0
-_080322A4: .4byte gBattleTypeFlags
-_080322A8: .4byte gActiveBattler
-_080322AC:
- movs r7, 0x50
-_080322AE:
- ldr r0, _08032320 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803233C
- bl GetMultiplayerId
- ldr r5, _08032324 @ =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- movs r4, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _08032306
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x1
- beq _08032306
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1]
- ands r4, r0
- cmp r4, 0x3
- bne _08032328
-_08032306:
- bl GetMultiplayerId
- ldr r2, _08032324 @ =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x13]
- adds r4, r0, 0x2
- b _08032342
- .align 2, 0
-_08032320: .4byte gBattleTypeFlags
-_08032324: .4byte gLinkPlayers
-_08032328:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r4, [r1, 0x13]
- b _08032342
-_0803233C:
- ldr r0, _08032400 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r4, [r0, 0x8]
-_08032342:
- ldr r5, _08032404 @ =gActiveBattler
- ldrb r1, [r5]
- adds r0, r4, 0
- bl sub_8034750
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r6, _08032408 @ =gMultiuseSpriteTemplate
- mov r8, r7
- ldr r0, _0803240C @ =gUnknown_8239F8C
- lsls r4, 2
- adds r4, r0
- ldrb r0, [r4]
- movs r4, 0x8
- subs r4, r0
- lsls r4, 18
- movs r0, 0xA0
- lsls r0, 15
- adds r4, r0
- asrs r4, 16
- ldrb r0, [r5]
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r6, 0
- mov r1, r8
- adds r2, r4, 0
- bl CreateSprite
- ldr r6, _08032410 @ =gBattlerSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, _08032414 @ =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _08032418 @ =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _0803241C @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _08032420 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032424 @ =sub_802F730
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08032400: .4byte gSaveBlock2Ptr
-_08032404: .4byte gActiveBattler
-_08032408: .4byte gMultiuseSpriteTemplate
-_0803240C: .4byte gUnknown_8239F8C
-_08032410: .4byte gBattlerSpriteIds
-_08032414: .4byte gSprites
-_08032418: .4byte 0x0000fffe
-_0803241C: .4byte sub_8033EEC
-_08032420: .4byte gUnknown_3004FE0
-_08032424: .4byte sub_802F730
- thumb_func_end sub_803227C
-
- thumb_func_start sub_8032428
-sub_8032428: @ 8032428
- push {r4-r6,lr}
- ldr r0, _0803249C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080324B8
- bl GetMultiplayerId
- ldr r5, _080324A0 @ =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- movs r4, 0xFF
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _08032482
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r1, [r1]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0x1
- beq _08032482
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1]
- ands r4, r0
- cmp r4, 0x3
- bne _080324A4
-_08032482:
- bl GetMultiplayerId
- ldr r2, _080324A0 @ =gLinkPlayers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x13]
- adds r4, r0, 0x2
- b _080324BE
- .align 2, 0
-_0803249C: .4byte gBattleTypeFlags
-_080324A0: .4byte gLinkPlayers
-_080324A4:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r4, [r1, 0x13]
- b _080324BE
-_080324B8:
- ldr r0, _08032568 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r4, [r0, 0x8]
-_080324BE:
- ldr r5, _0803256C @ =gActiveBattler
- ldrb r1, [r5]
- adds r0, r4, 0
- bl sub_8034750
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r0, _08032570 @ =gMultiuseSpriteTemplate
- ldr r1, _08032574 @ =gUnknown_8239F8C
- lsls r4, 2
- adds r4, r1
- ldrb r1, [r4]
- movs r2, 0x8
- subs r2, r1
- lsls r2, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r2, r1
- asrs r2, 16
- movs r1, 0x50
- movs r3, 0x1E
- bl CreateSprite
- ldr r6, _08032578 @ =gBattlerSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, _0803257C @ =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _08032580 @ =0x0000ffa0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _08032584 @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _08032588 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803258C @ =sub_802F768
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032568: .4byte gSaveBlock2Ptr
-_0803256C: .4byte gActiveBattler
-_08032570: .4byte gMultiuseSpriteTemplate
-_08032574: .4byte gUnknown_8239F8C
-_08032578: .4byte gBattlerSpriteIds
-_0803257C: .4byte gSprites
-_08032580: .4byte 0x0000ffa0
-_08032584: .4byte sub_8033EEC
-_08032588: .4byte gUnknown_3004FE0
-_0803258C: .4byte sub_802F768
- thumb_func_end sub_8032428
-
- thumb_func_start PlayerHandleTrainerSlideBack
-PlayerHandleTrainerSlideBack: @ 8032590
- push {r4-r6,lr}
- ldr r5, _08032630 @ =gBattlerSpriteIds
- ldr r6, _08032634 @ =gActiveBattler
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08032638 @ =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, 0x32
- 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
- ldr r1, _0803263C @ =0x0000ffd8
- 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, _08032640 @ =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, _08032644 @ =SpriteCallbackDummy
- bl StoreSpriteCallbackInData6
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r1, _08032648 @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803264C @ =sub_802F7A0
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032630: .4byte gBattlerSpriteIds
-_08032634: .4byte gActiveBattler
-_08032638: .4byte gSprites
-_0803263C: .4byte 0x0000ffd8
-_08032640: .4byte sub_8075590
-_08032644: .4byte SpriteCallbackDummy
-_08032648: .4byte gUnknown_3004FE0
-_0803264C: .4byte sub_802F7A0
- thumb_func_end PlayerHandleTrainerSlideBack
-
- thumb_func_start sub_8032650
-sub_8032650: @ 8032650
- push {r4-r6,lr}
- ldr r6, _0803269C @ =gUnknown_2024018
- ldr r4, [r6]
- ldr r5, _080326A0 @ =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 _080326A4
- ldr r1, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08032684
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl InitAndLaunchSpecialAnimation
-_08032684:
- 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 _0803271A
- .align 2, 0
-_0803269C: .4byte gUnknown_2024018
-_080326A0: .4byte gActiveBattler
-_080326A4:
- ldrb r1, [r3]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0803271A
- strb r4, [r3, 0x4]
- ldr r2, _08032720 @ =gBattlerPartyIndexes
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _08032724 @ =gPlayerParty
- adds r0, r2
- bl HandleLowHpMusicChange
- movs r1, 0x40
- negs r1, r1
- movs r0, 0x10
- bl PlaySE12WithPanning
- ldr r2, _08032728 @ =gSprites
- ldr r3, _0803272C @ =gBattlerSpriteIds
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r4, [r0, 0x30]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strh r1, [r0, 0x32]
- ldrb r0, [r5]
- adds r0, r3
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _08032730 @ =sub_8012110
- str r1, [r0]
- ldr r1, _08032734 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032738 @ =sub_8030538
- str r1, [r0]
-_0803271A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032720: .4byte gBattlerPartyIndexes
-_08032724: .4byte gPlayerParty
-_08032728: .4byte gSprites
-_0803272C: .4byte gBattlerSpriteIds
-_08032730: .4byte sub_8012110
-_08032734: .4byte gUnknown_3004FE0
-_08032738: .4byte sub_8030538
- thumb_func_end sub_8032650
-
- thumb_func_start PlayerHandlePaletteFade
-PlayerHandlePaletteFade: @ 803273C
- push {lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl PlayerBufferExecCompleted
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end PlayerHandlePaletteFade
-
- thumb_func_start sub_803275C
-sub_803275C: @ 803275C
- push {r4,r5,lr}
- ldr r0, _0803279C @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r1, [r0, 0x8]
- movs r0, 0x4
- strb r0, [r1, 0x8]
- ldr r1, _080327A0 @ =gUnknown_2024005
- movs r0, 0x1
- strb r0, [r1]
- ldr r5, _080327A4 @ =gActiveBattler
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x3
- bl InitAndLaunchSpecialAnimation
- ldr r1, _080327A8 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080327AC @ =CompleteOnSpecialAnimDone
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0803279C: .4byte gUnknown_2024018
-_080327A0: .4byte gUnknown_2024005
-_080327A4: .4byte gActiveBattler
-_080327A8: .4byte gUnknown_3004FE0
-_080327AC: .4byte CompleteOnSpecialAnimDone
- thumb_func_end sub_803275C
-
- thumb_func_start PlayerHandleBallThrowAnim
-PlayerHandleBallThrowAnim: @ 80327B0
- push {r4,r5,lr}
- ldr r1, _080327F8 @ =gUnknown_2022BC4
- ldr r5, _080327FC @ =gActiveBattler
- ldrb r0, [r5]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- ldr r0, _08032800 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0, 0x8]
- strb r1, [r0, 0x8]
- ldr r1, _08032804 @ =gUnknown_2024005
- movs r0, 0x1
- strb r0, [r1]
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x3
- bl InitAndLaunchSpecialAnimation
- ldr r1, _08032808 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803280C @ =CompleteOnSpecialAnimDone
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080327F8: .4byte gUnknown_2022BC4
-_080327FC: .4byte gActiveBattler
-_08032800: .4byte gUnknown_2024018
-_08032804: .4byte gUnknown_2024005
-_08032808: .4byte gUnknown_3004FE0
-_0803280C: .4byte CompleteOnSpecialAnimDone
- thumb_func_end PlayerHandleBallThrowAnim
-
- thumb_func_start PlayerHandlePause
-PlayerHandlePause: @ 8032810
- push {lr}
- ldr r1, _08032838 @ =gUnknown_2022BC4
- ldr r0, _0803283C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0803282E
-_08032824:
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08032824
-_0803282E:
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08032838: .4byte gUnknown_2022BC4
-_0803283C: .4byte gActiveBattler
- thumb_func_end PlayerHandlePause
-
- thumb_func_start PlayerHandleMoveAnimation
-PlayerHandleMoveAnimation: @ 8032840
- push {r4-r6,lr}
- ldr r6, _08032924 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- beq _08032852
- b _08032966
-_08032852:
- ldr r0, _08032928 @ =gUnknown_2022BC4
- 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, _0803292C @ =gAnimMoveTurn
- mov r1, r12
- adds r1, 0x3
- adds r2, r1
- ldrb r1, [r2]
- strb r1, [r5]
- ldr r4, _08032930 @ =gUnknown_2037EEC
- 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, _08032934 @ =gUnknown_2037EE8
- 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, _08032938 @ =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, _0803293C @ =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, _08032940 @ =gAnimDisableStructPtr
- ldrb r2, [r6]
- lsls r2, 9
- mov r1, r12
- adds r1, 0x10
- adds r2, r1
- str r2, [r3]
- ldr r3, _08032944 @ =gUnknown_2024008
- 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 _08032948
- bl PlayerBufferExecCompleted
- b _08032966
- .align 2, 0
-_08032924: .4byte gActiveBattler
-_08032928: .4byte gUnknown_2022BC4
-_0803292C: .4byte gAnimMoveTurn
-_08032930: .4byte gUnknown_2037EEC
-_08032934: .4byte gUnknown_2037EE8
-_08032938: .4byte gUnknown_2037EFE
-_0803293C: .4byte gUnknown_2037F00
-_08032940: .4byte gAnimDisableStructPtr
-_08032944: .4byte gUnknown_2024008
-_08032948:
- ldr r0, _0803296C @ =gUnknown_2024018
- 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, _08032970 @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032974 @ =sub_8032978
- str r1, [r0]
-_08032966:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803296C: .4byte gUnknown_2024018
-_08032970: .4byte gUnknown_3004FE0
-_08032974: .4byte sub_8032978
- thumb_func_end PlayerHandleMoveAnimation
-
- thumb_func_start sub_8032978
-sub_8032978: @ 8032978
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, _080329C4 @ =gUnknown_2022BC4
- ldr r6, _080329C8 @ =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, _080329CC @ =gUnknown_2024018
- 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 _08032A10
- cmp r2, 0x1
- bgt _080329D0
- cmp r2, 0
- beq _080329DA
- b _08032AEC
- .align 2, 0
-_080329C4: .4byte gUnknown_2022BC4
-_080329C8: .4byte gActiveBattler
-_080329CC: .4byte gUnknown_2024018
-_080329D0:
- cmp r2, 0x2
- beq _08032A3A
- cmp r2, 0x3
- beq _08032AB0
- b _08032AEC
-_080329DA:
- ldr r1, [r5]
- lsls r0, r3, 2
- adds r1, r0, r1
- ldrb r2, [r1]
- movs r0, 0xC
- ands r0, r2
- cmp r0, 0x4
- bne _080329FC
- 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
-_080329FC:
- 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 _08032AEC
-_08032A10:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08032AEC
- 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 _08032AEC
-_08032A3A:
- ldr r0, _08032AA0 @ =gUnknown_2037EDC
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _08032AA4 @ =gUnknown_2037EE1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08032AEC
- 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 _08032A88
- mov r0, r8
- cmp r0, 0x1
- bhi _08032A88
- 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]
-_08032A88:
- ldr r0, _08032AA8 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _08032AAC @ =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 _08032AEC
- .align 2, 0
-_08032AA0: .4byte gUnknown_2037EDC
-_08032AA4: .4byte gUnknown_2037EE1
-_08032AA8: .4byte gUnknown_2024018
-_08032AAC: .4byte gActiveBattler
-_08032AB0:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08032AEC
- 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 PlayerBufferExecCompleted
-_08032AEC:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8032978
-
- thumb_func_start sub_8032AFC
-sub_8032AFC: @ 8032AFC
- push {r4,lr}
- ldr r0, _08032B30 @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _08032B34 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _08032B38 @ =gActiveBattler
- ldrb r4, [r0]
- lsls r4, 9
- ldr r0, _08032B3C @ =gUnknown_2022BC6
- adds r4, r0
- ldrh r0, [r4]
- bl sub_80D7274
- ldrh r0, [r4]
- bl sub_80D89B0
- lsls r0, 24
- cmp r0, 0
- beq _08032B44
- ldr r0, _08032B40 @ =gDisplayedStringBattle
- movs r1, 0x40
- bl sub_80D87BC
- b _08032B4C
- .align 2, 0
-_08032B30: .4byte gBattle_BG0_X
-_08032B34: .4byte gBattle_BG0_Y
-_08032B38: .4byte gActiveBattler
-_08032B3C: .4byte gUnknown_2022BC6
-_08032B40: .4byte gDisplayedStringBattle
-_08032B44:
- ldr r0, _08032B60 @ =gDisplayedStringBattle
- movs r1, 0
- bl sub_80D87BC
-_08032B4C:
- ldr r1, _08032B64 @ =gUnknown_3004FE0
- ldr r0, _08032B68 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032B6C @ =sub_8030610
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08032B60: .4byte gDisplayedStringBattle
-_08032B64: .4byte gUnknown_3004FE0
-_08032B68: .4byte gActiveBattler
-_08032B6C: .4byte sub_8030610
- thumb_func_end sub_8032AFC
-
- thumb_func_start sub_8032B70
-sub_8032B70: @ 8032B70
- push {lr}
- ldr r0, _08032B88 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08032B8C
- bl sub_8032AFC
- b _08032B90
- .align 2, 0
-_08032B88: .4byte gActiveBattler
-_08032B8C:
- bl PlayerBufferExecCompleted
-_08032B90:
- pop {r0}
- bx r0
- thumb_func_end sub_8032B70
-
- thumb_func_start sub_8032B94
-sub_8032B94: @ 8032B94
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08032BBA
- ldr r0, _08032BC0 @ =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, _08032BC4 @ =gBattle_BG0_Y
- movs r0, 0xA0
- strh r0, [r1]
- ldr r1, _08032BC8 @ =gUnknown_3004FE0
- ldr r0, _08032BCC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032BD0 @ =sub_802E438
- str r1, [r0]
-_08032BBA:
- pop {r0}
- bx r0
- .align 2, 0
-_08032BC0: .4byte gBattle_BG0_X
-_08032BC4: .4byte gBattle_BG0_Y
-_08032BC8: .4byte gUnknown_3004FE0
-_08032BCC: .4byte gActiveBattler
-_08032BD0: .4byte sub_802E438
- thumb_func_end sub_8032B94
-
- thumb_func_start sub_8032BD4
-sub_8032BD4: @ 8032BD4
- push {r4,lr}
- ldr r1, _08032C28 @ =gUnknown_3004FE0
- ldr r0, _08032C2C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032C30 @ =sub_8032B94
- str r1, [r0]
- ldr r0, _08032C34 @ =gUnknown_83FDA4C
- movs r1, 0
- bl sub_80D87BC
- ldr r0, _08032C38 @ =gUnknown_83FE725
- movs r1, 0x2
- bl sub_80D87BC
- movs r4, 0
-_08032BF6:
- lsls r0, r4, 24
- lsrs r0, 24
- bl ActionSelectionDestroyCursorAt
- adds r4, 0x1
- cmp r4, 0x3
- ble _08032BF6
- ldr r1, _08032C3C @ =gUnknown_2023FF8
- ldr r0, _08032C2C @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- ldr r0, _08032C40 @ =gUnknown_83FE6D5
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _08032C44 @ =gDisplayedStringBattle
- movs r1, 0x1
- bl sub_80D87BC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08032C28: .4byte gUnknown_3004FE0
-_08032C2C: .4byte gActiveBattler
-_08032C30: .4byte sub_8032B94
-_08032C34: .4byte gUnknown_83FDA4C
-_08032C38: .4byte gUnknown_83FE725
-_08032C3C: .4byte gUnknown_2023FF8
-_08032C40: .4byte gUnknown_83FE6D5
-_08032C44: .4byte gDisplayedStringBattle
- thumb_func_end sub_8032BD4
-
- thumb_func_start nullsub_14
-nullsub_14: @ 8032C48
- bx lr
- thumb_func_end nullsub_14
-
- thumb_func_start sub_8032C4C
-sub_8032C4C: @ 8032C4C
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08032C76
- ldr r0, _08032C7C @ =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, _08032C80 @ =gBattle_BG0_Y
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _08032C84 @ =gUnknown_3004FE0
- ldr r0, _08032C88 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032C8C @ =sub_802EA10
- str r1, [r0]
-_08032C76:
- pop {r0}
- bx r0
- .align 2, 0
-_08032C7C: .4byte gBattle_BG0_X
-_08032C80: .4byte gBattle_BG0_Y
-_08032C84: .4byte gUnknown_3004FE0
-_08032C88: .4byte gActiveBattler
-_08032C8C: .4byte sub_802EA10
- thumb_func_end sub_8032C4C
-
- thumb_func_start sub_8032C90
-sub_8032C90: @ 8032C90
- push {lr}
- bl sub_8032CB4
- ldr r1, _08032CA8 @ =gUnknown_3004FE0
- ldr r0, _08032CAC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032CB0 @ =sub_8032C4C
- str r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08032CA8: .4byte gUnknown_3004FE0
-_08032CAC: .4byte gActiveBattler
-_08032CB0: .4byte sub_8032C4C
- thumb_func_end sub_8032C90
-
- thumb_func_start sub_8032CB4
-sub_8032CB4: @ 8032CB4
- push {lr}
- bl sub_8030830
- ldr r1, _08032CE0 @ =gUnknown_3004FF4
- movs r0, 0xFF
- strb r0, [r1]
- ldr r1, _08032CE4 @ =gUnknown_2023FFC
- ldr r0, _08032CE8 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl MoveSelectionCreateCursorAt
- bl MoveSelectionDisplayPpString
- bl MoveSelectionDisplayPpNumber
- bl MoveSelectionDisplayMoveType
- pop {r0}
- bx r0
- .align 2, 0
-_08032CE0: .4byte gUnknown_3004FF4
-_08032CE4: .4byte gUnknown_2023FFC
-_08032CE8: .4byte gActiveBattler
- thumb_func_end sub_8032CB4
-
- thumb_func_start sub_8032CEC
-sub_8032CEC: @ 8032CEC
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08032D38 @ =gUnknown_3004FE0
- ldr r2, _08032D3C @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032D40 @ =sub_8030700
- str r1, [r0]
- ldr r1, _08032D44 @ =gBattlerInMenuId
- ldrb r0, [r2]
- strb r0, [r1]
- movs r3, 0
- ldr r5, _08032D48 @ =gUnknown_203B0DC
- ldr r4, _08032D4C @ =gUnknown_2022BC4
-_08032D1A:
- adds r0, r3, r5
- ldrb r1, [r2]
- lsls r1, 9
- adds r1, 0x1
- adds r1, r3, r1
- adds r1, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r3, 0x1
- cmp r3, 0x2
- ble _08032D1A
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08032D38: .4byte gUnknown_3004FE0
-_08032D3C: .4byte gActiveBattler
-_08032D40: .4byte sub_8030700
-_08032D44: .4byte gBattlerInMenuId
-_08032D48: .4byte gUnknown_203B0DC
-_08032D4C: .4byte gUnknown_2022BC4
- thumb_func_end sub_8032CEC
-
- thumb_func_start sub_8032D50
-sub_8032D50: @ 8032D50
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r0, _08032E00 @ =TaskDummy
- movs r1, 0xFF
- bl CreateTask
- ldr r3, _08032E04 @ =gUnknown_3004FFC
- ldr r4, _08032E08 @ =gActiveBattler
- ldrb r1, [r4]
- adds r1, r3
- strb r0, [r1]
- ldr r5, _08032E0C @ =gTasks
- ldrb r2, [r4]
- adds r3, r2, r3
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldr r5, _08032E10 @ =gUnknown_2022BC4
- lsls r2, 9
- adds r6, r5, 0x1
- adds r2, r6
- ldrb r2, [r2]
- movs r0, 0xF
- ands r0, r2
- strh r0, [r1, 0x8]
- ldr r3, _08032E14 @ =gBattleStruct
- ldr r1, [r3]
- adds r1, 0x49
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r6
- ldrb r0, [r0]
- lsrs r0, 4
- strb r0, [r1]
- ldr r2, [r3]
- adds r2, 0x8B
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r5, 0x2
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r2, [r3]
- adds r2, 0xAC
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r5, 0x3
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r2, 0
- ldr r3, _08032E18 @ =gUnknown_203B0DC
-_08032DBC:
- adds r0, r2, r3
- ldrb r1, [r4]
- lsls r1, 9
- adds r1, 0x4
- adds r1, r2, r1
- adds r1, r5
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x2
- ble _08032DBC
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08032E1C @ =gUnknown_3004FE0
- ldr r2, _08032E08 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032E20 @ =sub_8030628
- str r1, [r0]
- ldr r1, _08032E24 @ =gBattlerInMenuId
- ldrb r0, [r2]
- strb r0, [r1]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08032E00: .4byte TaskDummy
-_08032E04: .4byte gUnknown_3004FFC
-_08032E08: .4byte gActiveBattler
-_08032E0C: .4byte gTasks
-_08032E10: .4byte gUnknown_2022BC4
-_08032E14: .4byte gBattleStruct
-_08032E18: .4byte gUnknown_203B0DC
-_08032E1C: .4byte gUnknown_3004FE0
-_08032E20: .4byte sub_8030628
-_08032E24: .4byte gBattlerInMenuId
- thumb_func_end sub_8032D50
-
- thumb_func_start sub_8032E28
-sub_8032E28: @ 8032E28
- push {lr}
- sub sp, 0x4
- bl BattleStopLowHpSound
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl PlayerBufferExecCompleted
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_8032E28
-
- thumb_func_start sub_8032E4C
-sub_8032E4C: @ 8032E4C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r0, 0
- bl LoadBattleBarGfx
- ldr r3, _08032EC4 @ =gUnknown_2022BC4
- ldr r0, _08032EC8 @ =gActiveBattler
- mov r9, r0
- ldrb r4, [r0]
- lsls r2, r4, 9
- adds r0, r3, 0x2
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r3, 0x3
- adds r2, r3
- ldrb r0, [r2]
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- asrs r7, r1, 16
- ldr r0, _08032ECC @ =0x00007fff
- cmp r7, r0
- beq _08032EDC
- ldr r6, _08032ED0 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r6
- ldrh r0, [r0]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _08032ED4 @ =gPlayerParty
- 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, _08032ED8 @ =gUnknown_3004FF0
- adds r1, r0, r1
- ldrb r1, [r1]
- str r7, [sp]
- mov r2, r8
- bl SetBattleBarStruct
- b _08032F16
- .align 2, 0
-_08032EC4: .4byte gUnknown_2022BC4
-_08032EC8: .4byte gActiveBattler
-_08032ECC: .4byte 0x00007fff
-_08032ED0: .4byte gBattlerPartyIndexes
-_08032ED4: .4byte gPlayerParty
-_08032ED8: .4byte gUnknown_3004FF0
-_08032EDC:
- ldr r1, _08032F34 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08032F38 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- mov r1, r9
- ldrb r0, [r1]
- ldr r4, _08032F3C @ =gUnknown_3004FF0
- adds r1, r0, r4
- ldrb r1, [r1]
- str r7, [sp]
- movs r3, 0
- bl SetBattleBarStruct
- mov r1, r9
- ldrb r0, [r1]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- movs r2, 0
- bl sub_8048440
-_08032F16:
- ldr r1, _08032F40 @ =gUnknown_3004FE0
- ldr r0, _08032F44 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032F48 @ =CompleteOnHealthbarDone
- 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
-_08032F34: .4byte gBattlerPartyIndexes
-_08032F38: .4byte gPlayerParty
-_08032F3C: .4byte gUnknown_3004FF0
-_08032F40: .4byte gUnknown_3004FE0
-_08032F44: .4byte gActiveBattler
-_08032F48: .4byte CompleteOnHealthbarDone
- thumb_func_end sub_8032E4C
-
- thumb_func_start PlayerHandleExpUpdate
-PlayerHandleExpUpdate: @ 8032F4C
- push {r4-r7,lr}
- ldr r5, _08032F78 @ =gUnknown_2022BC4
- ldr r6, _08032F7C @ =gActiveBattler
- ldrb r0, [r6]
- lsls r0, 9
- adds r1, r5, 0x1
- adds r0, r1
- ldrb r7, [r0]
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _08032F80 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x63
- bls _08032F84
- bl PlayerBufferExecCompleted
- b _08032FD0
- .align 2, 0
-_08032F78: .4byte gUnknown_2022BC4
-_08032F7C: .4byte gActiveBattler
-_08032F80: .4byte gPlayerParty
-_08032F84:
- movs r0, 0x1
- bl LoadBattleBarGfx
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- ldrb r1, [r6]
- lsls r1, 9
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r0, r5, 0x3
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- ldr r0, _08032FD8 @ =sub_802FEAC
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08032FDC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r7, [r1, 0x8]
- strh r4, [r1, 0xA]
- ldrb r0, [r6]
- strh r0, [r1, 0xC]
- ldr r1, _08032FE0 @ =gUnknown_3004FE0
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08032FE4 @ =nullsub_13
- str r1, [r0]
-_08032FD0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08032FD8: .4byte sub_802FEAC
-_08032FDC: .4byte gTasks
-_08032FE0: .4byte gUnknown_3004FE0
-_08032FE4: .4byte nullsub_13
- thumb_func_end PlayerHandleExpUpdate
-
- thumb_func_start sub_8032FE8
-sub_8032FE8: @ 8032FE8
- push {r4,lr}
- ldr r4, _08033044 @ =gActiveBattler
- ldrb r0, [r4]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _0803303C
- ldr r0, _08033048 @ =gUnknown_3004FF0
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _0803304C @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08033050 @ =gPlayerParty
- adds r1, r2
- movs r2, 0x9
- bl UpdateHealthboxAttribute
- ldrb r2, [r4]
- ldr r0, _08033054 @ =gUnknown_2024018
- 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, _08033058 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803305C @ =CompleteOnFinishedStatusAnimation
- str r1, [r0]
-_0803303C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033044: .4byte gActiveBattler
-_08033048: .4byte gUnknown_3004FF0
-_0803304C: .4byte gBattlerPartyIndexes
-_08033050: .4byte gPlayerParty
-_08033054: .4byte gUnknown_2024018
-_08033058: .4byte gUnknown_3004FE0
-_0803305C: .4byte CompleteOnFinishedStatusAnimation
- thumb_func_end sub_8032FE8
-
- thumb_func_start sub_8033060
-sub_8033060: @ 8033060
- push {r4,r5,lr}
- ldr r5, _080330B8 @ =gActiveBattler
- ldrb r0, [r5]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _080330B0
- ldr r4, _080330BC @ =gUnknown_2022BC4
- 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, _080330C0 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080330C4 @ =CompleteOnFinishedStatusAnimation
- str r1, [r0]
-_080330B0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080330B8: .4byte gActiveBattler
-_080330BC: .4byte gUnknown_2022BC4
-_080330C0: .4byte gUnknown_3004FE0
-_080330C4: .4byte CompleteOnFinishedStatusAnimation
- thumb_func_end sub_8033060
-
- thumb_func_start PlayerHandleStatusXor
-PlayerHandleStatusXor: @ 80330C8
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- ldr r0, _08033124 @ =gBattlerPartyIndexes
- mov r8, r0
- ldr r4, _08033128 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _0803312C @ =gPlayerParty
- adds r0, r5
- movs r1, 0x37
- bl GetMonData
- ldr r2, _08033130 @ =gUnknown_2022BC4
- ldrb r1, [r4]
- lsls r1, 9
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- eors r0, r1
- mov r1, sp
- strb r0, [r1]
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- muls r0, r6
- adds r0, r5
- movs r1, 0x37
- mov r2, sp
- bl SetMonData
- bl PlayerBufferExecCompleted
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08033124: .4byte gBattlerPartyIndexes
-_08033128: .4byte gActiveBattler
-_0803312C: .4byte gPlayerParty
-_08033130: .4byte gUnknown_2022BC4
- thumb_func_end PlayerHandleStatusXor
-
- thumb_func_start sub_8033134
-sub_8033134: @ 8033134
- push {lr}
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8033134
-
- thumb_func_start PlayerHandleDMA3Transfer
-PlayerHandleDMA3Transfer: @ 8033140
- push {r4,r5,lr}
- ldr r3, _080331A4 @ =gUnknown_2022BC4
- ldr r0, _080331A8 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r2, 9
- adds r0, r3, 0x1
- adds r0, r2, r0
- ldrb r5, [r0]
- adds r0, r3, 0x2
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 8
- orrs r5, r0
- adds r0, r3, 0x3
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 16
- orrs r5, r0
- adds r0, r3, 0x4
- adds r0, r2, r0
- ldrb r4, [r0]
- lsls r4, 24
- adds r0, r3, 0x5
- adds r0, r2, r0
- ldrb r1, [r0]
- adds r0, r3, 0x6
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- adds r3, 0x7
- adds r2, r3
- orrs r5, r4
- lsrs r4, r1, 16
- movs r0, 0x80
- lsls r0, 5
- cmp r4, r0
- bhi _080331B0
- ldr r0, _080331AC @ =0x040000d4
- str r2, [r0]
- str r5, [r0, 0x4]
- lsrs r1, 17
- movs r2, 0x80
- lsls r2, 24
- orrs r1, r2
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- b _080331DC
- .align 2, 0
-_080331A4: .4byte gUnknown_2022BC4
-_080331A8: .4byte gActiveBattler
-_080331AC: .4byte 0x040000d4
-_080331B0:
- ldr r3, _080331E8 @ =0x040000d4
- str r2, [r3]
- str r5, [r3, 0x4]
- ldr r0, _080331EC @ =0x80000800
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
- movs r0, 0x80
- lsls r0, 5
- adds r2, r0
- adds r5, r0
- ldr r1, _080331F0 @ =0xfffff000
- adds r4, r1
- cmp r4, r0
- bhi _080331B0
- str r2, [r3]
- str r5, [r3, 0x4]
- lsrs r0, r4, 1
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
-_080331DC:
- bl PlayerBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080331E8: .4byte 0x040000d4
-_080331EC: .4byte 0x80000800
-_080331F0: .4byte 0xfffff000
- thumb_func_end PlayerHandleDMA3Transfer
-
- thumb_func_start PlayerHandlePlayBGM
-PlayerHandlePlayBGM: @ 80331F4
- push {lr}
- ldr r2, _0803321C @ =gUnknown_2022BC4
- ldr r0, _08033220 @ =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 PlayBGM
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803321C: .4byte gUnknown_2022BC4
-_08033220: .4byte gActiveBattler
- thumb_func_end PlayerHandlePlayBGM
-
- thumb_func_start sub_8033224
-sub_8033224: @ 8033224
- push {lr}
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8033224
-
- thumb_func_start PlayerHandleTwoReturnValues
-PlayerHandleTwoReturnValues: @ 8033230
- push {lr}
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl EmitTwoReturnValues
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleTwoReturnValues
-
- thumb_func_start PlayerHandleChosenMonReturnValue
-PlayerHandleChosenMonReturnValue: @ 8033244
- push {lr}
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl EmitChosenMonReturnValue
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleChosenMonReturnValue
-
- thumb_func_start PlayerHandleOneReturnValue
-PlayerHandleOneReturnValue: @ 8033258
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl EmitOneReturnValue
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleOneReturnValue
-
- thumb_func_start PlayerHandleOneReturnValue_Duplicate
-PlayerHandleOneReturnValue_Duplicate: @ 803326C
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl EmitOneReturnValue_Duplicate
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleOneReturnValue_Duplicate
-
- thumb_func_start PlayerHandleCmd37
-PlayerHandleCmd37: @ 8033280
- push {lr}
- ldr r2, _08033298 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x80
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08033298: .4byte gUnknown_2022870
- thumb_func_end PlayerHandleCmd37
-
- thumb_func_start PlayerHandleCmd38
-PlayerHandleCmd38: @ 803329C
- push {lr}
- ldr r3, _080332C8 @ =gUnknown_2022870
- ldr r1, _080332CC @ =gUnknown_2022BC4
- ldr r0, _080332D0 @ =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 PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080332C8: .4byte gUnknown_2022870
-_080332CC: .4byte gUnknown_2022BC4
-_080332D0: .4byte gActiveBattler
- thumb_func_end PlayerHandleCmd38
-
- thumb_func_start PlayerHandleCmd39
-PlayerHandleCmd39: @ 80332D4
- push {lr}
- ldr r2, _080332E8 @ =gUnknown_2022870
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080332E8: .4byte gUnknown_2022870
- thumb_func_end PlayerHandleCmd39
-
- thumb_func_start PlayerHandleCmd40
-PlayerHandleCmd40: @ 80332EC
- push {lr}
- ldr r3, _08033310 @ =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 PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08033310: .4byte gUnknown_2022870
- thumb_func_end PlayerHandleCmd40
-
- thumb_func_start PlayerHandleHitAnimation
-PlayerHandleHitAnimation: @ 8033314
- push {r4,lr}
- ldr r3, _0803333C @ =gSprites
- ldr r2, _08033340 @ =gBattlerSpriteIds
- ldr r4, _08033344 @ =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 _08033348
- bl PlayerBufferExecCompleted
- b _08033372
- .align 2, 0
-_0803333C: .4byte gSprites
-_08033340: .4byte gBattlerSpriteIds
-_08033344: .4byte gActiveBattler
-_08033348:
- ldr r1, _08033378 @ =gUnknown_2024005
- 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, _0803337C @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08033380 @ =DoHitAnimBlinkSpriteEffect
- str r1, [r0]
-_08033372:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033378: .4byte gUnknown_2024005
-_0803337C: .4byte gUnknown_3004FE0
-_08033380: .4byte DoHitAnimBlinkSpriteEffect
- thumb_func_end PlayerHandleHitAnimation
-
- thumb_func_start sub_8033384
-sub_8033384: @ 8033384
- push {lr}
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_8033384
-
- thumb_func_start PlayerHandlePlaySE
-PlayerHandlePlaySE: @ 8033390
- push {r4,lr}
- ldr r4, _080333CC @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _080333A4
- movs r3, 0xC0
-_080333A4:
- ldr r2, _080333D0 @ =gUnknown_2022BC4
- 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 PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080333CC: .4byte gActiveBattler
-_080333D0: .4byte gUnknown_2022BC4
- thumb_func_end PlayerHandlePlaySE
-
- thumb_func_start PlayerHandlecmd44
-PlayerHandlecmd44: @ 80333D4
- push {lr}
- ldr r2, _080333FC @ =gUnknown_2022BC4
- ldr r0, _08033400 @ =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 PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080333FC: .4byte gUnknown_2022BC4
-_08033400: .4byte gActiveBattler
- thumb_func_end PlayerHandlecmd44
-
- thumb_func_start PlayerHandleFaintingCry
-PlayerHandleFaintingCry: @ 8033404
- push {lr}
- ldr r1, _08033438 @ =gBattlerPartyIndexes
- ldr r0, _0803343C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08033440 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- negs r1, r1
- movs r2, 0x5
- bl PlayCry3
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_08033438: .4byte gBattlerPartyIndexes
-_0803343C: .4byte gActiveBattler
-_08033440: .4byte gPlayerParty
- thumb_func_end PlayerHandleFaintingCry
-
- thumb_func_start PlayerHandleIntroSlide
-PlayerHandleIntroSlide: @ 8033444
- push {lr}
- ldr r1, _0803346C @ =gUnknown_2022BC4
- ldr r0, _08033470 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80BC3A0
- ldr r2, _08033474 @ =gUnknown_2023F4C
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0803346C: .4byte gUnknown_2022BC4
-_08033470: .4byte gActiveBattler
-_08033474: .4byte gUnknown_2023F4C
- thumb_func_end PlayerHandleIntroSlide
-
- thumb_func_start PlayerHandleIntroTrainerBallThrow
-PlayerHandleIntroTrainerBallThrow: @ 8033478
- push {r4-r7,lr}
- ldr r6, _080335B8 @ =gBattlerSpriteIds
- ldr r7, _080335BC @ =gActiveBattler
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _080335C0 @ =gSprites
- adds r0, r5
- bl oamt_add_pos2_onto_pos1
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x32
- strh r1, [r0, 0x2E]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _080335C4 @ =0x0000ffd8
- strh r1, [r0, 0x32]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrh r1, [r0, 0x22]
- strh r1, [r0, 0x36]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _080335C8 @ =sub_80755B8
- str r1, [r0]
- ldrb r2, [r7]
- adds r0, r2, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x38]
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _080335CC @ =sub_80335F8
- bl StoreSpriteCallbackInData6
- ldrb r0, [r7]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, _080335D0 @ =0x0000d6f8
- bl AllocSpritePalette
- adds r4, r0, 0
- lsls r4, 24
- ldr r1, _080335D4 @ =gUnknown_8239FD4
- ldr r0, _080335D8 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0]
- lsrs r4, 20
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- movs r2, 0x20
- bl LoadCompressedPalette
- ldrb r0, [r7]
- adds r0, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x5]
- ldr r0, _080335DC @ =task05_08033660
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _080335E0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- ldrb r0, [r7]
- strh r0, [r1, 0x8]
- ldr r3, _080335E4 @ =gUnknown_2024018
- ldr r0, [r3]
- ldrb r2, [r7]
- ldr r1, [r0, 0x4]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0803359A
- ldr r0, _080335E8 @ =gUnknown_2024000
- 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
- str r1, [r0]
-_0803359A:
- ldr r0, [r3]
- ldr r2, [r0, 0x8]
- ldrb r0, [r2, 0x9]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _080335F0 @ =gUnknown_3004FE0
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080335F4 @ =nullsub_13
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080335B8: .4byte gBattlerSpriteIds
-_080335BC: .4byte gActiveBattler
-_080335C0: .4byte gSprites
-_080335C4: .4byte 0x0000ffd8
-_080335C8: .4byte sub_80755B8
-_080335CC: .4byte sub_80335F8
-_080335D0: .4byte 0x0000d6f8
-_080335D4: .4byte gUnknown_8239FD4
-_080335D8: .4byte gSaveBlock2Ptr
-_080335DC: .4byte task05_08033660
-_080335E0: .4byte gTasks
-_080335E4: .4byte gUnknown_2024018
-_080335E8: .4byte gUnknown_2024000
-_080335EC: .4byte sub_80491B0
-_080335F0: .4byte gUnknown_3004FE0
-_080335F4: .4byte nullsub_13
- thumb_func_end PlayerHandleIntroTrainerBallThrow
-
- thumb_func_start sub_80335F8
-sub_80335F8: @ 80335F8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r4, [r5, 0x38]
- lsls r4, 24
- lsrs r4, 24
- bl FreeSpriteOamMatrix
- ldrb r0, [r5, 0x5]
- lsrs r0, 4
- bl GetSpritePaletteTagByPaletteNum
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpritePaletteByTag
- adds r0, r5, 0
- bl DestroySprite
- ldr r1, _08033650 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08033654 @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- bl sub_8034498
- ldr r0, _08033658 @ =gBattlerSpriteIds
- adds r4, r0
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0803365C @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08033650: .4byte gBattlerPartyIndexes
-_08033654: .4byte gPlayerParty
-_08033658: .4byte gBattlerSpriteIds
-_0803365C: .4byte gSprites
- thumb_func_end sub_80335F8
-
- thumb_func_start task05_08033660
-task05_08033660: @ 8033660
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _08033688 @ =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0xA]
- movs r3, 0xA
- ldrsh r0, [r1, r3]
- cmp r0, 0x1E
- bgt _0803368C
- adds r0, r2, 0x1
- strh r0, [r1, 0xA]
- b _08033748
- .align 2, 0
-_08033688: .4byte gTasks
-_0803368C:
- ldr r7, _080336CC @ =gActiveBattler
- ldrb r0, [r7]
- mov r9, r0
- ldrh r0, [r1, 0x8]
- strb r0, [r7]
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _080336AC
- ldr r0, _080336D0 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080336DC
-_080336AC:
- ldr r0, _080336D4 @ =gUnknown_2022BC4
- ldrb r1, [r7]
- lsls r2, r1, 9
- adds r0, 0x1
- adds r2, r0
- ldr r0, _080336D8 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- strb r0, [r2]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_8031FF4
- b _08033730
- .align 2, 0
-_080336CC: .4byte gActiveBattler
-_080336D0: .4byte gBattleTypeFlags
-_080336D4: .4byte gUnknown_2022BC4
-_080336D8: .4byte gBattlerPartyIndexes
-_080336DC:
- ldr r4, _08033754 @ =gUnknown_2022BC4
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r4, 0x1
- adds r1, r4
- ldr r5, _08033758 @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- movs r1, 0
- bl sub_8031FF4
- ldrb r0, [r7]
- movs r6, 0x2
- eors r0, r6
- strb r0, [r7]
- ldrb r0, [r7]
- lsls r1, r0, 9
- adds r1, r4
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r1, [r7]
- lsls r0, r1, 1
- adds r0, r5
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _0803375C @ =gPlayerParty
- adds r0, r2
- bl sub_8034498
- ldrb r0, [r7]
- movs r1, 0
- bl sub_8031FF4
- ldrb r0, [r7]
- eors r0, r6
- strb r0, [r7]
-_08033730:
- ldr r1, _08033760 @ =gUnknown_3004FE0
- ldr r2, _08033764 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08033768 @ =sub_802FA58
- str r1, [r0]
- mov r3, r9
- strb r3, [r2]
- mov r0, r8
- bl DestroyTask
-_08033748:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08033754: .4byte gUnknown_2022BC4
-_08033758: .4byte gBattlerPartyIndexes
-_0803375C: .4byte gPlayerParty
-_08033760: .4byte gUnknown_3004FE0
-_08033764: .4byte gActiveBattler
-_08033768: .4byte sub_802FA58
- thumb_func_end task05_08033660
-
- thumb_func_start PlayerHandleDrawPartyStatusSummary
-PlayerHandleDrawPartyStatusSummary: @ 803376C
- push {r4-r6,lr}
- ldr r1, _08033794 @ =gUnknown_2022BC4
- ldr r0, _08033798 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r0, r2, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0803379C
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0803379C
- bl PlayerBufferExecCompleted
- b _08033810
- .align 2, 0
-_08033794: .4byte gUnknown_2022BC4
-_08033798: .4byte gActiveBattler
-_0803379C:
- ldr r6, _08033818 @ =gUnknown_2024018
- ldr r0, [r6]
- ldr r5, _0803381C @ =gActiveBattler
- ldrb r1, [r5]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- ldrb r0, [r5]
- lsls r3, r0, 9
- ldr r4, _08033820 @ =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, _08033824 @ =gUnknown_2024000
- ldrb r1, [r5]
- adds r1, r2
- movs r3, 0
- strb r0, [r1]
- 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 _08033804
- 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]
-_08033804:
- ldr r0, _08033828 @ =gUnknown_3004FE0
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0803382C @ =sub_8033830
- str r0, [r1]
-_08033810:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08033818: .4byte gUnknown_2024018
-_0803381C: .4byte gActiveBattler
-_08033820: .4byte gUnknown_2022BC8
-_08033824: .4byte gUnknown_2024000
-_08033828: .4byte gUnknown_3004FE0
-_0803382C: .4byte sub_8033830
- thumb_func_end PlayerHandleDrawPartyStatusSummary
-
- thumb_func_start sub_8033830
-sub_8033830: @ 8033830
- push {r4,lr}
- ldr r4, _08033870 @ =gUnknown_2024018
- ldr r0, [r4]
- ldr r3, _08033874 @ =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 _08033868
- 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 PlayerBufferExecCompleted
-_08033868:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033870: .4byte gUnknown_2024018
-_08033874: .4byte gActiveBattler
- thumb_func_end sub_8033830
-
- thumb_func_start PlayerHandleCmd49
-PlayerHandleCmd49: @ 8033878
- push {lr}
- ldr r0, _080338B4 @ =gUnknown_2024018
- ldr r1, [r0]
- ldr r0, _080338B8 @ =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 _080338AA
- ldr r2, _080338BC @ =gTasks
- ldr r0, _080338C0 @ =gUnknown_2024000
- 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
- str r1, [r0]
-_080338AA:
- bl PlayerBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080338B4: .4byte gUnknown_2024018
-_080338B8: .4byte gActiveBattler
-_080338BC: .4byte gTasks
-_080338C0: .4byte gUnknown_2024000
-_080338C4: .4byte sub_80491B0
- thumb_func_end PlayerHandleCmd49
-
- thumb_func_start sub_80338C8
-sub_80338C8: @ 80338C8
- push {r4,lr}
- ldr r4, _080338E8 @ =gActiveBattler
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080338E8: .4byte gActiveBattler
- thumb_func_end sub_80338C8
-
- thumb_func_start PlayerHandleSpriteInvisibility
-PlayerHandleSpriteInvisibility: @ 80338EC
- push {r4,lr}
- ldr r4, _0803393C @ =gActiveBattler
- ldrb r0, [r4]
- bl sub_8075224
- lsls r0, 24
- cmp r0, 0
- beq _08033932
- ldr r3, _08033940 @ =gSprites
- ldr r0, _08033944 @ =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, _08033948 @ =gUnknown_2022BC4
- 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
-_08033932:
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0803393C: .4byte gActiveBattler
-_08033940: .4byte gSprites
-_08033944: .4byte gBattlerSpriteIds
-_08033948: .4byte gUnknown_2022BC4
- thumb_func_end PlayerHandleSpriteInvisibility
-
- thumb_func_start PlayerHandleBattleAnimation
-PlayerHandleBattleAnimation: @ 803394C
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, _08033990 @ =gActiveBattler
- ldrb r0, [r6]
- bl mplay_80342A4
- lsls r0, 24
- cmp r0, 0
- bne _080339A4
- ldr r5, _08033994 @ =gUnknown_2022BC4
- 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 _08033998
- bl PlayerBufferExecCompleted
- b _080339A4
- .align 2, 0
-_08033990: .4byte gActiveBattler
-_08033994: .4byte gUnknown_2022BC4
-_08033998:
- ldr r0, _080339AC @ =gUnknown_3004FE0
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _080339B0 @ =CompleteOnFinishedBattleAnimation
- str r0, [r1]
-_080339A4:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080339AC: .4byte gUnknown_3004FE0
-_080339B0: .4byte CompleteOnFinishedBattleAnimation
- thumb_func_end PlayerHandleBattleAnimation
-
- thumb_func_start PlayerHandleLinkStandbyMsg
-PlayerHandleLinkStandbyMsg: @ 80339B4
- push {r4,lr}
- ldr r1, _080339D4 @ =gUnknown_2022BC4
- ldr r0, _080339D8 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080339E6
- cmp r0, 0x1
- bgt _080339DC
- cmp r0, 0
- beq _080339E2
- b _08033A04
- .align 2, 0
-_080339D4: .4byte gUnknown_2022BC4
-_080339D8: .4byte gActiveBattler
-_080339DC:
- cmp r0, 0x2
- beq _08033A00
- b _08033A04
-_080339E2:
- bl PrintLinkStandbyMsg
-_080339E6:
- ldr r4, _080339FC @ =gActiveBattler
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- b _08033A04
- .align 2, 0
-_080339FC: .4byte gActiveBattler
-_08033A00:
- bl PrintLinkStandbyMsg
-_08033A04:
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PlayerHandleLinkStandbyMsg
-
- thumb_func_start PlayerHandleResetActionMoveSelection
-PlayerHandleResetActionMoveSelection: @ 8033A10
- push {r4,lr}
- ldr r1, _08033A30 @ =gUnknown_2022BC4
- ldr r4, _08033A34 @ =gActiveBattler
- ldrb r3, [r4]
- lsls r0, r3, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r2, [r0]
- cmp r2, 0x1
- beq _08033A58
- cmp r2, 0x1
- bgt _08033A38
- cmp r2, 0
- beq _08033A3E
- b _08033A68
- .align 2, 0
-_08033A30: .4byte gUnknown_2022BC4
-_08033A34: .4byte gActiveBattler
-_08033A38:
- cmp r2, 0x2
- beq _08033A60
- b _08033A68
-_08033A3E:
- ldr r0, _08033A50 @ =gUnknown_2023FF8
- adds r0, r3, r0
- strb r2, [r0]
- ldr r1, _08033A54 @ =gUnknown_2023FFC
- ldrb r0, [r4]
- adds r0, r1
- strb r2, [r0]
- b _08033A68
- .align 2, 0
-_08033A50: .4byte gUnknown_2023FF8
-_08033A54: .4byte gUnknown_2023FFC
-_08033A58:
- ldr r0, _08033A5C @ =gUnknown_2023FF8
- b _08033A62
- .align 2, 0
-_08033A5C: .4byte gUnknown_2023FF8
-_08033A60:
- ldr r0, _08033A74 @ =gUnknown_2023FFC
-_08033A62:
- adds r0, r3, r0
- movs r1, 0
- strb r1, [r0]
-_08033A68:
- bl PlayerBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033A74: .4byte gUnknown_2023FFC
- thumb_func_end PlayerHandleResetActionMoveSelection
-
- thumb_func_start PlayerHandlecmd55
-PlayerHandlecmd55: @ 8033A78
- push {r4,lr}
- ldr r2, _08033AB0 @ =gBattleOutcome
- ldr r1, _08033AB4 @ =gUnknown_2022BC4
- ldr r4, _08033AB8 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl PlayerBufferExecCompleted
- ldr r1, _08033ABC @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08033AC0 @ =sub_802F6A8
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033AB0: .4byte gBattleOutcome
-_08033AB4: .4byte gUnknown_2022BC4
-_08033AB8: .4byte gActiveBattler
-_08033ABC: .4byte gUnknown_3004FE0
-_08033AC0: .4byte sub_802F6A8
- thumb_func_end PlayerHandlecmd55
-
- thumb_func_start nullsub_15
-nullsub_15: @ 8033AC4
- bx lr
- thumb_func_end nullsub_15
-
- thumb_func_start sub_8033AC8
-sub_8033AC8: @ 8033AC8
- push {r4-r6,lr}
- sub sp, 0x4
- movs r5, 0
- movs r6, 0
- ldr r0, _08033B14 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08033ADE
- b _08033DA2
-_08033ADE:
- ldr r3, _08033B18 @ =gActiveBattler
- ldrb r1, [r3]
- lsls r2, r1, 9
- ldr r0, _08033B1C @ =gUnknown_2022BC8
- adds r2, r0
- ldr r0, _08033B20 @ =gUnknown_2023FFC
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r2, r0
- ldrh r4, [r0]
- cmp r4, 0xAE
- bne _08033B24
- ldrb r0, [r2, 0x12]
- movs r1, 0
- cmp r0, 0x7
- beq _08033B30
- ldrb r1, [r2, 0x13]
- movs r0, 0x7
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- asrs r1, r0, 31
- movs r0, 0x10
- ands r1, r0
- b _08033B30
- .align 2, 0
-_08033B14: .4byte gBattleTypeFlags
-_08033B18: .4byte gActiveBattler
-_08033B1C: .4byte gUnknown_2022BC8
-_08033B20: .4byte gUnknown_2023FFC
-_08033B24:
- ldr r1, _08033B40 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x6]
-_08033B30:
- cmp r1, 0x40
- bls _08033B36
- b _08033D92
-_08033B36:
- lsls r0, r1, 2
- ldr r1, _08033B44 @ =_08033B48
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08033B40: .4byte gBattleMoves
-_08033B44: .4byte _08033B48
- .align 2, 0
-_08033B48:
- .4byte _08033C4C
- .4byte _08033C4C
- .4byte _08033C4C
- .4byte _08033D92
- .4byte _08033C4C
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033C54
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033C80
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D4C
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033D92
- .4byte _08033C54
-_08033C4C:
- movs r5, 0xF0
- lsls r5, 12
- movs r6, 0
- b _08033D92
-_08033C54:
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r4, r0, 0
- movs r0, 0x3
- bl GetBattlerAtPosition
- ldr r1, _08033C7C @ =gBitTable
- lsls r4, 24
- lsrs r4, 22
- adds r4, r1
- lsls r0, 24
- lsrs r0, 22
- adds r0, r1
- ldr r1, [r4]
- ldr r0, [r0]
- orrs r1, r0
- lsls r5, r1, 16
- b _08033D90
- .align 2, 0
-_08033C7C: .4byte gBitTable
-_08033C80:
- cmp r4, 0xDB
- beq _08033CEA
- cmp r4, 0xDB
- bgt _08033CB2
- cmp r4, 0x73
- beq _08033CEA
- cmp r4, 0x73
- bgt _08033C9E
- cmp r4, 0x71
- beq _08033CEA
- cmp r4, 0x71
- bgt _08033CE4
- cmp r4, 0x36
- beq _08033CEA
- b _08033D38
-_08033C9E:
- cmp r4, 0xC9
- beq _08033CE4
- cmp r4, 0xC9
- bgt _08033CAC
- cmp r4, 0xC3
- beq _08033CE4
- b _08033D38
-_08033CAC:
- cmp r4, 0xD7
- beq _08033CEA
- b _08033D38
-_08033CB2:
- movs r0, 0x87
- lsls r0, 1
- cmp r4, r0
- beq _08033D14
- cmp r4, r0
- bgt _08033CC8
- cmp r4, 0xF0
- blt _08033D38
- cmp r4, 0xF1
- ble _08033CE4
- b _08033CD4
-_08033CC8:
- movs r0, 0x9C
- lsls r0, 1
- cmp r4, r0
- beq _08033CEA
- cmp r4, r0
- bgt _08033CDC
-_08033CD4:
- subs r0, 0xC
- cmp r4, r0
- beq _08033CE4
- b _08033D38
-_08033CDC:
- movs r0, 0xAD
- lsls r0, 1
- cmp r4, r0
- bne _08033D38
-_08033CE4:
- movs r5, 0xF0
- lsls r5, 12
- b _08033D90
-_08033CEA:
- movs r0, 0
- bl GetBattlerAtPosition
- adds r4, r0, 0
- movs r0, 0x2
- bl GetBattlerAtPosition
- ldr r1, _08033D10 @ =gBitTable
- lsls r4, 24
- lsrs r4, 22
- adds r4, r1
- lsls r0, 24
- lsrs r0, 22
- adds r0, r1
- ldr r1, [r4]
- ldr r0, [r0]
- orrs r1, r0
- lsls r5, r1, 16
- b _08033D90
- .align 2, 0
-_08033D10: .4byte gBitTable
-_08033D14:
- ldrb r0, [r3]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r1, _08033D34 @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r1
- ldr r0, [r0]
- b _08033D42
- .align 2, 0
-_08033D34: .4byte gBitTable
-_08033D38:
- ldr r0, _08033D48 @ =gBitTable
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
-_08033D42:
- lsls r5, r0, 16
- b _08033D90
- .align 2, 0
-_08033D48: .4byte gBitTable
-_08033D4C:
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r5, r0, 0
- ldr r0, _08033DAC @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- adds r4, r0, 0
- movs r0, 0x3
- bl GetBattlerAtPosition
- ldr r3, _08033DB0 @ =gBitTable
- lsls r5, 24
- lsrs r5, 22
- adds r5, r3
- lsls r4, 24
- lsrs r4, 22
- adds r4, r3
- ldr r2, [r5]
- ldr r1, [r4]
- orrs r2, r1
- lsls r0, 24
- lsrs r0, 22
- adds r0, r3
- ldr r0, [r0]
- orrs r2, r0
- lsls r5, r2, 16
-_08033D90:
- movs r6, 0x8
-_08033D92:
- ldr r0, _08033DB4 @ =0x00007fff
- str r0, [sp]
- adds r0, r5, 0
- movs r1, 0x8
- adds r2, r6, 0
- movs r3, 0
- bl BeginNormalPaletteFade
-_08033DA2:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08033DAC: .4byte gActiveBattler
-_08033DB0: .4byte gBitTable
-_08033DB4: .4byte 0x00007fff
- thumb_func_end sub_8033AC8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controller_pokedude.s b/asm/battle_controller_pokedude.s
index 23b4a23e8..1857d92c8 100644
--- a/asm/battle_controller_pokedude.s
+++ b/asm/battle_controller_pokedude.s
@@ -10,9 +10,9 @@ nullsub_99: @ 81560A0
bx lr
thumb_func_end nullsub_99
- thumb_func_start sub_81560A4
-sub_81560A4: @ 81560A4
- ldr r1, _081560C8 @ =gUnknown_3004FE0
+ thumb_func_start SetControllerToPokedude
+SetControllerToPokedude: @ 81560A4
+ ldr r1, _081560C8 @ =gBattlerControllerFuncs
ldr r0, _081560CC @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -31,17 +31,17 @@ sub_81560A4: @ 81560A4
strb r1, [r0]
bx lr
.align 2, 0
-_081560C8: .4byte gUnknown_3004FE0
+_081560C8: .4byte gBattlerControllerFuncs
_081560CC: .4byte gActiveBattler
_081560D0: .4byte sub_81560DC
_081560D4: .4byte gBattleStruct
_081560D8: .4byte gSpecialVar_0x8004
- thumb_func_end sub_81560A4
+ thumb_func_end SetControllerToPokedude
thumb_func_start sub_81560DC
sub_81560DC: @ 81560DC
push {r4,r5,lr}
- ldr r2, _08156120 @ =gUnknown_2023BC8
+ ldr r2, _08156120 @ =gBattleControllerExecFlags
ldr r1, _08156124 @ =gBitTable
ldr r5, _08156128 @ =gActiveBattler
ldrb r3, [r5]
@@ -52,7 +52,7 @@ sub_81560DC: @ 81560DC
ands r1, r0
cmp r1, 0
beq _08156138
- ldr r4, _0815612C @ =gUnknown_2022BC4
+ ldr r4, _0815612C @ =gBattleBufferA
lsls r0, r3, 9
adds r0, r4
ldrb r0, [r0]
@@ -73,10 +73,10 @@ sub_81560DC: @ 81560DC
bl _call_via_r0
b _08156138
.align 2, 0
-_08156120: .4byte gUnknown_2023BC8
+_08156120: .4byte gBattleControllerExecFlags
_08156124: .4byte gBitTable
_08156128: .4byte gActiveBattler
-_0815612C: .4byte gUnknown_2022BC4
+_0815612C: .4byte gBattleBufferA
_08156130: .4byte gUnknown_8478F1C
_08156134:
bl PlayerPartnerBufferExecCompleted
@@ -147,7 +147,7 @@ sub_8156184: @ 8156184
ldrsh r0, [r1, r4]
cmp r0, 0
bne _08156230
- ldr r6, _081561EC @ =gUnknown_2024018
+ ldr r6, _081561EC @ =gBattleSpritesDataPtr
ldr r0, [r6]
ldr r1, [r0, 0x4]
lsls r4, r3, 1
@@ -173,7 +173,7 @@ sub_8156184: @ 8156184
_081561E0: .4byte gSprites
_081561E4: .4byte gBattlerSpriteIds
_081561E8: .4byte gActiveBattler
-_081561EC: .4byte gUnknown_2024018
+_081561EC: .4byte gBattleSpritesDataPtr
_081561F0: .4byte gBattlerPartyIndexes
_081561F4: .4byte gEnemyParty
_081561F8:
@@ -241,7 +241,7 @@ sub_8156254: @ 8156254
negs r0, r0
ands r0, r1
strb r0, [r3]
- ldr r0, _08156290 @ =gUnknown_3004F80
+ ldr r0, _08156290 @ =gPreBattleCallback1
ldr r0, [r0]
str r0, [r2]
ldr r0, [r2, 0x8]
@@ -253,13 +253,13 @@ _0815627E:
_08156284: .4byte gPaletteFade
_08156288: .4byte gMain
_0815628C: .4byte 0x00000439
-_08156290: .4byte gUnknown_3004F80
+_08156290: .4byte gPreBattleCallback1
thumb_func_end sub_8156254
thumb_func_start sub_8156294
sub_8156294: @ 8156294
push {r4,lr}
- ldr r0, _081562DC @ =gUnknown_2024018
+ ldr r0, _081562DC @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r4, _081562E0 @ =gActiveBattler
ldrb r1, [r4]
@@ -292,7 +292,7 @@ _081562D4:
pop {r0}
bx r0
.align 2, 0
-_081562DC: .4byte gUnknown_2024018
+_081562DC: .4byte gBattleSpritesDataPtr
_081562E0: .4byte gActiveBattler
_081562E4: .4byte c3_0802FDF4
_081562E8: .4byte gBattlerPartyIndexes
@@ -303,7 +303,7 @@ _081562EC: .4byte gPlayerParty
sub_81562F0: @ 81562F0
push {r4-r6,lr}
ldr r2, _08156388 @ =gSprites
- ldr r0, _0815638C @ =gUnknown_3004FF0
+ ldr r0, _0815638C @ =gHealthboxSpriteIds
ldr r6, _08156390 @ =gActiveBattler
ldrb r3, [r6]
adds r0, r3, r0
@@ -317,7 +317,7 @@ sub_81562F0: @ 81562F0
ldr r0, _08156394 @ =SpriteCallbackDummy
cmp r1, r0
bne _08156380
- ldr r5, _08156398 @ =gUnknown_2024018
+ ldr r5, _08156398 @ =gBattleSpritesDataPtr
ldr r0, [r5]
ldr r1, [r0, 0x4]
lsls r0, r3, 1
@@ -365,7 +365,7 @@ sub_81562F0: @ 81562F0
movs r3, 0x6
bl InitAndLaunchSpecialAnimation
_08156374:
- ldr r0, _081563A0 @ =gUnknown_3004FE0
+ ldr r0, _081563A0 @ =gBattlerControllerFuncs
ldrb r1, [r6]
lsls r1, 2
adds r1, r0
@@ -377,19 +377,19 @@ _08156380:
bx r0
.align 2, 0
_08156388: .4byte gSprites
-_0815638C: .4byte gUnknown_3004FF0
+_0815638C: .4byte gHealthboxSpriteIds
_08156390: .4byte gActiveBattler
_08156394: .4byte SpriteCallbackDummy
-_08156398: .4byte gUnknown_2024018
+_08156398: .4byte gBattleSpritesDataPtr
_0815639C: .4byte 0x000027f9
-_081563A0: .4byte gUnknown_3004FE0
+_081563A0: .4byte gBattlerControllerFuncs
_081563A4: .4byte sub_8156294
thumb_func_end sub_81562F0
thumb_func_start sub_81563A8
sub_81563A8: @ 81563A8
push {r4-r6,lr}
- ldr r6, _0815645C @ =gUnknown_2024018
+ ldr r6, _0815645C @ =gBattleSpritesDataPtr
ldr r0, [r6]
ldr r5, _08156460 @ =gActiveBattler
ldrb r2, [r5]
@@ -441,7 +441,7 @@ _081563DA:
bne _08156454
adds r0, r3, r4
bl DestroySprite
- ldr r4, _08156478 @ =gUnknown_3004FF0
+ ldr r4, _08156478 @ =gHealthboxSpriteIds
ldrb r1, [r5]
adds r0, r1, r4
ldrb r0, [r0]
@@ -463,7 +463,7 @@ _081563DA:
bl SetHealthboxSpriteVisible
ldrb r0, [r5]
bl CopyBattleSpriteInvisibility
- ldr r1, _0815647C @ =gUnknown_3004FE0
+ ldr r1, _0815647C @ =gBattlerControllerFuncs
ldrb r0, [r5]
lsls r0, 2
adds r0, r1
@@ -474,22 +474,22 @@ _08156454:
pop {r0}
bx r0
.align 2, 0
-_0815645C: .4byte gUnknown_2024018
+_0815645C: .4byte gBattleSpritesDataPtr
_08156460: .4byte gActiveBattler
_08156464: .4byte gBattlerPartyIndexes
_08156468: .4byte gPlayerParty
_0815646C: .4byte gSprites
_08156470: .4byte gUnknown_3004FFC
_08156474: .4byte SpriteCallbackDummy
-_08156478: .4byte gUnknown_3004FF0
-_0815647C: .4byte gUnknown_3004FE0
+_08156478: .4byte gHealthboxSpriteIds
+_0815647C: .4byte gBattlerControllerFuncs
_08156480: .4byte sub_81562F0
thumb_func_end sub_81563A8
thumb_func_start sub_8156484
sub_8156484: @ 8156484
push {lr}
- ldr r0, _08156498 @ =gUnknown_2024005
+ ldr r0, _08156498 @ =gDoingBattleAnim
ldrb r0, [r0]
cmp r0, 0
bne _08156492
@@ -498,13 +498,13 @@ _08156492:
pop {r0}
bx r0
.align 2, 0
-_08156498: .4byte gUnknown_2024005
+_08156498: .4byte gDoingBattleAnim
thumb_func_end sub_8156484
thumb_func_start sub_815649C
sub_815649C: @ 815649C
push {r4,lr}
- ldr r4, _081564DC @ =gUnknown_2024018
+ ldr r4, _081564DC @ =gBattleSpritesDataPtr
ldr r1, [r4]
ldr r3, _081564E0 @ =gActiveBattler
ldrb r0, [r3]
@@ -535,7 +535,7 @@ _081564D4:
pop {r0}
bx r0
.align 2, 0
-_081564DC: .4byte gUnknown_2024018
+_081564DC: .4byte gBattleSpritesDataPtr
_081564E0: .4byte gActiveBattler
thumb_func_end sub_815649C
@@ -556,7 +556,7 @@ sub_81564F0: @ 81564F0
ands r0, r1
cmp r0, 0
bne _08156520
- ldr r1, _08156528 @ =gUnknown_3004FE0
+ ldr r1, _08156528 @ =gBattlerControllerFuncs
ldr r2, _0815652C @ =gActiveBattler
ldrb r0, [r2]
lsls r0, 2
@@ -575,7 +575,7 @@ _08156520:
bx r0
.align 2, 0
_08156524: .4byte gPaletteFade
-_08156528: .4byte gUnknown_3004FE0
+_08156528: .4byte gBattlerControllerFuncs
_0815652C: .4byte gActiveBattler
_08156530: .4byte sub_8156538
_08156534: .4byte gUnknown_3004FFC
@@ -586,7 +586,7 @@ sub_8156538: @ 8156538
push {lr}
ldr r0, _08156568 @ =gMain
ldr r1, [r0, 0x4]
- ldr r0, _0815656C @ =sub_8011100
+ ldr r0, _0815656C @ =BattleMainCB2
cmp r1, r0
bne _0815658E
ldr r0, _08156570 @ =gPaletteFade
@@ -603,11 +603,11 @@ sub_8156538: @ 8156538
ldrb r1, [r0]
ldr r2, _0815657C @ =gUnknown_203B0DC
movs r0, 0x1
- bl EmitChosenMonReturnValue
+ bl BtlController_EmitChosenMonReturnValue
b _0815658A
.align 2, 0
_08156568: .4byte gMain
-_0815656C: .4byte sub_8011100
+_0815656C: .4byte BattleMainCB2
_08156570: .4byte gPaletteFade
_08156574: .4byte gUnknown_203B0C0
_08156578: .4byte gUnknown_203B0C1
@@ -616,7 +616,7 @@ _08156580:
movs r0, 0x1
movs r1, 0x6
movs r2, 0
- bl EmitChosenMonReturnValue
+ bl BtlController_EmitChosenMonReturnValue
_0815658A:
bl PlayerPartnerBufferExecCompleted
_0815658E:
@@ -633,7 +633,7 @@ sub_8156594: @ 8156594
ands r0, r1
cmp r0, 0
bne _081565E2
- ldr r1, _081565CC @ =gUnknown_3004FE0
+ ldr r1, _081565CC @ =gBattlerControllerFuncs
ldr r0, _081565D0 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -653,7 +653,7 @@ _081565C4:
b _081565DE
.align 2, 0
_081565C8: .4byte gPaletteFade
-_081565CC: .4byte gUnknown_3004FE0
+_081565CC: .4byte gBattlerControllerFuncs
_081565D0: .4byte gActiveBattler
_081565D4: .4byte sub_81565E8
_081565D8: .4byte gSpecialVar_0x8004
@@ -671,7 +671,7 @@ sub_81565E8: @ 81565E8
push {lr}
ldr r0, _08156614 @ =gMain
ldr r1, [r0, 0x4]
- ldr r0, _08156618 @ =sub_8011100
+ ldr r0, _08156618 @ =BattleMainCB2
cmp r1, r0
bne _0815660E
ldr r0, _0815661C @ =gPaletteFade
@@ -683,14 +683,14 @@ sub_81565E8: @ 81565E8
ldr r0, _08156620 @ =gSpecialVar_ItemId
ldrh r1, [r0]
movs r0, 0x1
- bl EmitOneReturnValue
+ bl BtlController_EmitOneReturnValue
bl PlayerPartnerBufferExecCompleted
_0815660E:
pop {r0}
bx r0
.align 2, 0
_08156614: .4byte gMain
-_08156618: .4byte sub_8011100
+_08156618: .4byte BattleMainCB2
_0815661C: .4byte gPaletteFade
_08156620: .4byte gSpecialVar_ItemId
thumb_func_end sub_81565E8
@@ -698,7 +698,7 @@ _08156620: .4byte gSpecialVar_ItemId
thumb_func_start sub_8156624
sub_8156624: @ 8156624
push {r4-r7,lr}
- ldr r4, _08156788 @ =gUnknown_2024018
+ ldr r4, _08156788 @ =gBattleSpritesDataPtr
ldr r0, [r4]
ldr r5, _0815678C @ =gActiveBattler
ldrb r2, [r5]
@@ -772,7 +772,7 @@ _0815668A:
ands r0, r1
cmp r0, 0
bne _08156780
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _0815671E
@@ -793,7 +793,7 @@ _0815668A:
ldr r1, _081567A0 @ =gSprites
adds r0, r1
bl DestroySprite
- ldr r4, _081567A4 @ =gUnknown_3004FF0
+ ldr r4, _081567A4 @ =gHealthboxSpriteIds
ldrb r0, [r5]
adds r1, r6, 0
eors r1, r0
@@ -829,7 +829,7 @@ _0815671E:
ldr r1, _081567A0 @ =gSprites
adds r0, r1
bl DestroySprite
- ldr r5, _081567A4 @ =gUnknown_3004FF0
+ ldr r5, _081567A4 @ =gHealthboxSpriteIds
ldrb r1, [r4]
adds r0, r1, r5
ldrb r0, [r0]
@@ -849,7 +849,7 @@ _0815671E:
adds r0, r5
ldrb r0, [r0]
bl SetHealthboxSpriteVisible
- ldr r0, _08156788 @ =gUnknown_2024018
+ ldr r0, _08156788 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r2, [r0, 0x8]
ldrb r1, [r2, 0x9]
@@ -857,7 +857,7 @@ _0815671E:
negs r0, r0
ands r0, r1
strb r0, [r2, 0x9]
- ldr r1, _081567A8 @ =gUnknown_3004FE0
+ ldr r1, _081567A8 @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -868,15 +868,15 @@ _08156780:
pop {r0}
bx r0
.align 2, 0
-_08156788: .4byte gUnknown_2024018
+_08156788: .4byte gBattleSpritesDataPtr
_0815678C: .4byte gActiveBattler
_08156790: .4byte gBattlerPartyIndexes
_08156794: .4byte gPlayerParty
_08156798: .4byte gBattleTypeFlags
_0815679C: .4byte gUnknown_3004FFC
_081567A0: .4byte gSprites
-_081567A4: .4byte gUnknown_3004FF0
-_081567A8: .4byte gUnknown_3004FE0
+_081567A4: .4byte gHealthboxSpriteIds
+_081567A8: .4byte gBattlerControllerFuncs
_081567AC: .4byte sub_81567B0
thumb_func_end sub_8156624
@@ -887,7 +887,7 @@ sub_81567B0: @ 81567B0
push {r7}
movs r4, 0
ldr r2, _081568B0 @ =gSprites
- ldr r0, _081568B4 @ =gUnknown_3004FF0
+ ldr r0, _081568B4 @ =gHealthboxSpriteIds
ldr r1, _081568B8 @ =gActiveBattler
mov r8, r1
ldrb r3, [r1]
@@ -906,7 +906,7 @@ sub_81567B0: @ 81567B0
_081567DA:
cmp r4, 0
beq _081568A6
- ldr r7, _081568C0 @ =gUnknown_2024018
+ ldr r7, _081568C0 @ =gBattleSpritesDataPtr
ldr r0, [r7]
ldr r4, [r0, 0x4]
lsls r0, r3, 1
@@ -995,7 +995,7 @@ _081567DA:
ldr r2, _081568D0 @ =gPlayerParty
adds r0, r2
bl HandleLowHpMusicChange
- ldr r1, _081568D4 @ =gUnknown_3004FE0
+ ldr r1, _081568D4 @ =gBattlerControllerFuncs
mov r2, r8
ldrb r0, [r2]
lsls r0, 2
@@ -1010,15 +1010,15 @@ _081568A6:
bx r0
.align 2, 0
_081568B0: .4byte gSprites
-_081568B4: .4byte gUnknown_3004FF0
+_081568B4: .4byte gHealthboxSpriteIds
_081568B8: .4byte gActiveBattler
_081568BC: .4byte SpriteCallbackDummy
-_081568C0: .4byte gUnknown_2024018
+_081568C0: .4byte gBattleSpritesDataPtr
_081568C4: .4byte 0x000027f9
_081568C8: .4byte c3_0802FDF4
_081568CC: .4byte gBattlerPartyIndexes
_081568D0: .4byte gPlayerParty
-_081568D4: .4byte gUnknown_3004FE0
+_081568D4: .4byte gBattlerControllerFuncs
_081568D8: .4byte sub_815649C
thumb_func_end sub_81567B0
@@ -1046,7 +1046,7 @@ sub_81568DC: @ 81568DC
str r7, [sp, 0x8]
ldrh r2, [r1, 0xA]
str r2, [sp, 0xC]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1121,9 +1121,9 @@ _08156922:
lsrs r2, 16
movs r0, 0x1
movs r1, 0xB
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
strb r5, [r4]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1171,7 +1171,7 @@ _08156A10:
adds r0, r6, 0
movs r1, 0x19
bl SetMonData
- ldr r1, _08156A30 @ =gUnknown_3004FE0
+ ldr r1, _08156A30 @ =gBattlerControllerFuncs
ldr r3, [sp, 0x8]
lsls r0, r3, 2
adds r0, r1
@@ -1181,7 +1181,7 @@ _08156A10:
bl DestroyTask
b _08156A3E
.align 2, 0
-_08156A30: .4byte gUnknown_3004FE0
+_08156A30: .4byte gBattlerControllerFuncs
_08156A34: .4byte sub_8156EE8
_08156A38:
ldr r0, _08156A50 @ =sub_8156A54
@@ -1270,7 +1270,7 @@ sub_8156A54: @ 8156A54
adds r4, r6
ldr r2, [r4]
subs r2, r1
- ldr r0, _08156B1C @ =gUnknown_3004FF0
+ ldr r0, _08156B1C @ =gHealthboxSpriteIds
add r0, r10
ldrb r1, [r0]
mov r0, r9
@@ -1296,7 +1296,7 @@ _08156B0C: .4byte gTasks
_08156B10: .4byte gPlayerParty
_08156B14: .4byte gExperienceTables
_08156B18: .4byte gBaseStats
-_08156B1C: .4byte gUnknown_3004FF0
+_08156B1C: .4byte gHealthboxSpriteIds
_08156B20: .4byte sub_8156B24
thumb_func_end sub_8156A54
@@ -1332,13 +1332,13 @@ _08156B54:
ldrh r2, [r6, 0xA]
mov r10, r2
ldrb r7, [r6, 0xC]
- ldr r5, _08156C1C @ =gUnknown_3004FF0
+ ldr r5, _08156C1C @ =gHealthboxSpriteIds
adds r5, r7, r5
ldrb r1, [r5]
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
@@ -1413,13 +1413,13 @@ _08156B54:
lsrs r2, 16
movs r0, 0x1
movs r1, 0xB
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
strb r5, [r4]
ldr r0, _08156C30 @ =sub_8156C68
str r0, [r6]
b _08156C50
.align 2, 0
-_08156C1C: .4byte gUnknown_3004FF0
+_08156C1C: .4byte gHealthboxSpriteIds
_08156C20: .4byte gPlayerParty
_08156C24: .4byte gExperienceTables
_08156C28: .4byte gBaseStats
@@ -1431,7 +1431,7 @@ _08156C34:
adds r0, r5, 0
movs r1, 0x19
bl SetMonData
- ldr r1, _08156C60 @ =gUnknown_3004FE0
+ ldr r1, _08156C60 @ =gBattlerControllerFuncs
lsls r0, r7, 2
adds r0, r1
ldr r1, _08156C64 @ =sub_8156EE8
@@ -1448,7 +1448,7 @@ _08156C50:
pop {r0}
bx r0
.align 2, 0
-_08156C60: .4byte gUnknown_3004FE0
+_08156C60: .4byte gBattlerControllerFuncs
_08156C64: .4byte sub_8156EE8
thumb_func_end sub_8156B24
@@ -1464,7 +1464,7 @@ sub_8156C68: @ 8156C68
adds r0, r1
ldrb r4, [r0, 0xC]
ldrb r6, [r0, 0x8]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1512,7 +1512,7 @@ sub_8156CC8: @ 8156CC8
lsls r0, 3
adds r2, r0, r1
ldrb r5, [r2, 0xC]
- ldr r0, _08156D38 @ =gUnknown_2024018
+ ldr r0, _08156D38 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x4]
lsls r0, r5, 1
@@ -1533,7 +1533,7 @@ sub_8156CC8: @ 8156CC8
adds r0, r7, 0
movs r1, 0x38
bl GetMonData
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1547,7 +1547,7 @@ sub_8156CC8: @ 8156CC8
ldrh r0, [r0]
cmp r4, r0
bne _08156D48
- ldr r0, _08156D44 @ =gUnknown_3004FF0
+ ldr r0, _08156D44 @ =gHealthboxSpriteIds
adds r0, r2, r0
ldrb r0, [r0]
adds r1, r7, 0
@@ -1556,12 +1556,12 @@ sub_8156CC8: @ 8156CC8
b _08156D5C
.align 2, 0
_08156D34: .4byte gTasks
-_08156D38: .4byte gUnknown_2024018
+_08156D38: .4byte gBattleSpritesDataPtr
_08156D3C: .4byte gPlayerParty
_08156D40: .4byte gBattlerPartyIndexes
-_08156D44: .4byte gUnknown_3004FF0
+_08156D44: .4byte gHealthboxSpriteIds
_08156D48:
- ldr r0, _08156D70 @ =gUnknown_3004FF0
+ ldr r0, _08156D70 @ =gHealthboxSpriteIds
adds r0, r5, r0
ldrb r0, [r0]
movs r1, 0x64
@@ -1583,7 +1583,7 @@ _08156D6A:
pop {r0}
bx r0
.align 2, 0
-_08156D70: .4byte gUnknown_3004FF0
+_08156D70: .4byte gHealthboxSpriteIds
_08156D74: .4byte gPlayerParty
_08156D78: .4byte gTasks
_08156D7C: .4byte sub_8156D80
@@ -1608,7 +1608,7 @@ sub_8156D80: @ 8156D80
movs r1, 0x38
bl GetMonData
ldrb r0, [r4, 0xC]
- ldr r1, _08156DC4 @ =gUnknown_3004FE0
+ ldr r1, _08156DC4 @ =gBattlerControllerFuncs
lsls r0, 2
adds r0, r1
ldr r1, _08156DC8 @ =sub_8156EE8
@@ -1621,7 +1621,7 @@ sub_8156D80: @ 8156D80
.align 2, 0
_08156DBC: .4byte gTasks
_08156DC0: .4byte gPlayerParty
-_08156DC4: .4byte gUnknown_3004FE0
+_08156DC4: .4byte gBattlerControllerFuncs
_08156DC8: .4byte sub_8156EE8
thumb_func_end sub_8156D80
@@ -1662,7 +1662,7 @@ sub_8156DCC: @ 8156DCC
lsls r0, 2
adds r0, r6
bl DestroySprite
- ldr r1, _08156E38 @ =gUnknown_3004FF0
+ ldr r1, _08156E38 @ =gHealthboxSpriteIds
ldrb r0, [r4]
adds r0, r1
ldrb r0, [r0]
@@ -1673,7 +1673,7 @@ sub_8156DCC: @ 8156DCC
_08156E2C: .4byte gActiveBattler
_08156E30: .4byte gSprites
_08156E34: .4byte gBattlerSpriteIds
-_08156E38: .4byte gUnknown_3004FF0
+_08156E38: .4byte gHealthboxSpriteIds
_08156E3C:
ldr r2, _08156E6C @ =gSprites
ldr r0, _08156E70 @ =gBattlerSpriteIds
@@ -1689,7 +1689,7 @@ _08156E3C:
lsls r0, 31
cmp r0, 0
bne _08156E66
- ldr r0, _08156E74 @ =gUnknown_3004FF0
+ ldr r0, _08156E74 @ =gHealthboxSpriteIds
adds r0, r3, r0
ldrb r0, [r0]
bl SetHealthboxSpriteInvisible
@@ -1701,7 +1701,7 @@ _08156E66:
.align 2, 0
_08156E6C: .4byte gSprites
_08156E70: .4byte gBattlerSpriteIds
-_08156E74: .4byte gUnknown_3004FF0
+_08156E74: .4byte gHealthboxSpriteIds
thumb_func_end sub_8156DCC
thumb_func_start sub_8156E78
@@ -1709,12 +1709,12 @@ sub_8156E78: @ 8156E78
push {r4-r6,lr}
ldr r5, _08156EB8 @ =gActiveBattler
ldrb r0, [r5]
- ldr r6, _08156EBC @ =gUnknown_3004FF0
+ ldr r6, _08156EBC @ =gHealthboxSpriteIds
adds r1, r0, r6
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,11 +1732,11 @@ 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
-_08156EBC: .4byte gUnknown_3004FF0
+_08156EBC: .4byte gHealthboxSpriteIds
_08156EC0:
ldr r2, _08156EE0 @ =gBattlerPartyIndexes
ldrb r1, [r5]
@@ -1798,7 +1798,7 @@ sub_8156F00: @ 8156F00
subs r0, 0x5
ands r0, r1
strb r0, [r2]
- ldr r0, _08156F48 @ =gUnknown_2024005
+ ldr r0, _08156F48 @ =gDoingBattleAnim
strb r3, [r0]
bl PlayerPartnerBufferExecCompleted
b _08156F76
@@ -1806,7 +1806,7 @@ sub_8156F00: @ 8156F00
_08156F3C: .4byte gBattlerSpriteIds
_08156F40: .4byte gActiveBattler
_08156F44: .4byte gSprites
-_08156F48: .4byte gUnknown_2024005
+_08156F48: .4byte gDoingBattleAnim
_08156F4C:
ldrh r0, [r4, 0x30]
movs r1, 0x3
@@ -1839,7 +1839,7 @@ _08156F76:
thumb_func_start sub_8156F7C
sub_8156F7C: @ 8156F7C
push {r4-r6,lr}
- ldr r0, _08156FD8 @ =gUnknown_2024018
+ ldr r0, _08156FD8 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r6, _08156FDC @ =gActiveBattler
ldrb r2, [r6]
@@ -1870,7 +1870,7 @@ sub_8156F7C: @ 8156F7C
lsls r0, 2
adds r0, r4
bl DestroySprite
- ldr r1, _08156FE8 @ =gUnknown_3004FF0
+ ldr r1, _08156FE8 @ =gHealthboxSpriteIds
ldrb r0, [r6]
adds r0, r1
ldrb r0, [r0]
@@ -1881,11 +1881,11 @@ _08156FD0:
pop {r0}
bx r0
.align 2, 0
-_08156FD8: .4byte gUnknown_2024018
+_08156FD8: .4byte gBattleSpritesDataPtr
_08156FDC: .4byte gActiveBattler
_08156FE0: .4byte gBattlerSpriteIds
_08156FE4: .4byte gSprites
-_08156FE8: .4byte gUnknown_3004FF0
+_08156FE8: .4byte gHealthboxSpriteIds
thumb_func_end sub_8156F7C
thumb_func_start sub_8156FEC
@@ -1920,7 +1920,7 @@ _08157020: .4byte SpriteCallbackDummy
thumb_func_start sub_8157024
sub_8157024: @ 8157024
push {lr}
- ldr r0, _0815704C @ =gUnknown_2024018
+ ldr r0, _0815704C @ =gBattleSpritesDataPtr
ldr r2, [r0]
ldr r0, _08157050 @ =gActiveBattler
ldrb r1, [r0]
@@ -1939,14 +1939,14 @@ _08157046:
pop {r0}
bx r0
.align 2, 0
-_0815704C: .4byte gUnknown_2024018
+_0815704C: .4byte gBattleSpritesDataPtr
_08157050: .4byte gActiveBattler
thumb_func_end sub_8157024
thumb_func_start sub_8157054
sub_8157054: @ 8157054
push {lr}
- ldr r0, _0815707C @ =gUnknown_2024018
+ ldr r0, _0815707C @ =gBattleSpritesDataPtr
ldr r2, [r0]
ldr r0, _08157080 @ =gActiveBattler
ldrb r1, [r0]
@@ -1965,7 +1965,7 @@ _08157076:
pop {r0}
bx r0
.align 2, 0
-_0815707C: .4byte gUnknown_2024018
+_0815707C: .4byte gBattleSpritesDataPtr
_08157080: .4byte gActiveBattler
thumb_func_end sub_8157054
@@ -1973,7 +1973,7 @@ _08157080: .4byte gActiveBattler
PlayerPartnerBufferExecCompleted: @ 8157084
push {r4,lr}
sub sp, 0x4
- ldr r1, _081570C4 @ =gUnknown_3004FE0
+ ldr r1, _081570C4 @ =gBattlerControllerFuncs
ldr r4, _081570C8 @ =gActiveBattler
ldrb r0, [r4]
lsls r0, 2
@@ -1993,7 +1993,7 @@ PlayerPartnerBufferExecCompleted: @ 8157084
movs r1, 0x4
mov r2, sp
bl PrepareBufferDataTransferLink
- ldr r1, _081570D4 @ =gUnknown_2022BC4
+ ldr r1, _081570D4 @ =gBattleBufferA
ldrb r0, [r4]
lsls r0, 9
adds r0, r1
@@ -2001,13 +2001,13 @@ PlayerPartnerBufferExecCompleted: @ 8157084
strb r1, [r0]
b _081570EA
.align 2, 0
-_081570C4: .4byte gUnknown_3004FE0
+_081570C4: .4byte gBattlerControllerFuncs
_081570C8: .4byte gActiveBattler
_081570CC: .4byte sub_81560DC
_081570D0: .4byte gBattleTypeFlags
-_081570D4: .4byte gUnknown_2022BC4
+_081570D4: .4byte gBattleBufferA
_081570D8:
- ldr r2, _081570F4 @ =gUnknown_2023BC8
+ ldr r2, _081570F4 @ =gBattleControllerExecFlags
ldr r1, _081570F8 @ =gBitTable
ldrb r0, [r4]
lsls r0, 2
@@ -2022,14 +2022,14 @@ _081570EA:
pop {r0}
bx r0
.align 2, 0
-_081570F4: .4byte gUnknown_2023BC8
+_081570F4: .4byte gBattleControllerExecFlags
_081570F8: .4byte gBitTable
thumb_func_end PlayerPartnerBufferExecCompleted
thumb_func_start CompleteOnFinishedStatusAnimation_7
CompleteOnFinishedStatusAnimation_7: @ 81570FC
push {lr}
- ldr r0, _08157124 @ =gUnknown_2024018
+ ldr r0, _08157124 @ =gBattleSpritesDataPtr
ldr r2, [r0]
ldr r0, _08157128 @ =gActiveBattler
ldrb r1, [r0]
@@ -2048,7 +2048,7 @@ _0815711E:
pop {r0}
bx r0
.align 2, 0
-_08157124: .4byte gUnknown_2024018
+_08157124: .4byte gBattleSpritesDataPtr
_08157128: .4byte gActiveBattler
thumb_func_end CompleteOnFinishedStatusAnimation_7
@@ -2057,7 +2057,7 @@ sub_815712C: @ 815712C
push {r4-r6,lr}
sub sp, 0x100
movs r6, 0
- ldr r1, _08157158 @ =gUnknown_2022BC4
+ ldr r1, _08157158 @ =gBattleBufferA
ldr r0, _0815715C @ =gActiveBattler
ldrb r2, [r0]
lsls r0, r2, 9
@@ -2075,7 +2075,7 @@ sub_815712C: @ 815712C
adds r6, r0, 0
b _08157186
.align 2, 0
-_08157158: .4byte gUnknown_2022BC4
+_08157158: .4byte gBattleBufferA
_0815715C: .4byte gActiveBattler
_08157160: .4byte gBattlerPartyIndexes
_08157164:
@@ -2102,7 +2102,7 @@ _08157186:
lsrs r1, 16
movs r0, 0x1
mov r2, sp
- bl EmitDataTransfer
+ bl BtlController_EmitDataTransfer
bl PlayerPartnerBufferExecCompleted
add sp, 0x100
pop {r4-r6}
@@ -2143,7 +2143,7 @@ _081571D4:
ldr r0, _081571FC @ =gEnemyParty
_081571DC:
adds r6, r1, r0
- ldr r3, _08157200 @ =gUnknown_2022BC4
+ ldr r3, _08157200 @ =gBattleBufferA
ldr r2, _08157204 @ =gActiveBattler
ldrb r0, [r2]
lsls r0, 9
@@ -2161,7 +2161,7 @@ _081571F2:
mov pc, r0
.align 2, 0
_081571FC: .4byte gEnemyParty
-_08157200: .4byte gUnknown_2022BC4
+_08157200: .4byte gBattleBufferA
_08157204: .4byte gActiveBattler
_08157208: .4byte _0815720C
.align 2, 0
@@ -2806,7 +2806,7 @@ sub_8157750: @ 8157750
thumb_func_start sub_815775C
sub_815775C: @ 815775C
push {r4,r5,lr}
- ldr r1, _08157780 @ =gUnknown_2022BC4
+ ldr r1, _08157780 @ =gBattleBufferA
ldr r0, _08157784 @ =gActiveBattler
ldrb r2, [r0]
lsls r0, r2, 9
@@ -2822,7 +2822,7 @@ sub_815775C: @ 815775C
bl sub_81577B4
b _081577AA
.align 2, 0
-_08157780: .4byte gUnknown_2022BC4
+_08157780: .4byte gBattleBufferA
_08157784: .4byte gActiveBattler
_08157788: .4byte gBattlerPartyIndexes
_0815778C:
@@ -2885,7 +2885,7 @@ _081577F0:
ldr r0, _0815781C @ =gEnemyParty
_081577F8:
adds r6, r1, r0
- ldr r2, _08157820 @ =gUnknown_2022BC4
+ ldr r2, _08157820 @ =gBattleBufferA
ldr r0, _08157824 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 9
@@ -2904,7 +2904,7 @@ _08157812:
mov pc, r0
.align 2, 0
_0815781C: .4byte gEnemyParty
-_08157820: .4byte gUnknown_2022BC4
+_08157820: .4byte gBattleBufferA
_08157824: .4byte gActiveBattler
_08157828: .4byte _0815782C
.align 2, 0
@@ -3922,7 +3922,7 @@ sub_81580E0: @ 81580E0
add r0, r10
bl BattleLoadOpponentMonSpriteGfx
ldrb r0, [r6]
- bl GetBankSpriteDefault_Y
+ bl GetBattlerSpriteDefault_Y
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
@@ -3937,12 +3937,12 @@ sub_81580E0: @ 81580E0
mov r9, r0
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldrb r0, [r6]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -4018,8 +4018,8 @@ sub_81580E0: @ 81580E0
lsls r1, 16
lsrs r1, 16
adds r0, r4, 0
- bl SetBankEnemyShadowSpriteCallback
- ldr r1, _08158234 @ =gUnknown_3004FE0
+ bl SetBattlerShadowSpriteCallback
+ ldr r1, _08158234 @ =gBattlerControllerFuncs
ldrb r0, [r6]
lsls r0, 2
adds r0, r1
@@ -4042,7 +4042,7 @@ _08158224: .4byte gBattlerSpriteIds
_08158228: .4byte gSprites
_0815822C: .4byte 0x0000ff10
_08158230: .4byte gBattleMonForms
-_08158234: .4byte gUnknown_3004FE0
+_08158234: .4byte gBattlerControllerFuncs
_08158238: .4byte sub_8156184
thumb_func_end sub_81580E0
@@ -4051,7 +4051,7 @@ sub_815823C: @ 815823C
push {r4,r5,lr}
ldr r5, _081582A0 @ =gActiveBattler
ldrb r0, [r5]
- ldr r4, _081582A4 @ =gUnknown_2022BC4
+ ldr r4, _081582A4 @ =gBattleBufferA
lsls r1, r0, 9
adds r2, r4, 0x2
adds r1, r2
@@ -4075,18 +4075,18 @@ sub_815823C: @ 815823C
muls r0, r2
ldr r2, _081582AC @ =gPlayerParty
adds r0, r2
- bl sub_8034498
- ldr r1, _081582B0 @ =gUnknown_2023FF8
+ bl BattleLoadPlayerMonSpriteGfx
+ ldr r1, _081582B0 @ =gActionSelectionCursor
ldrb r0, [r5]
adds r0, r1
strb r4, [r0]
- ldr r1, _081582B4 @ =gUnknown_2023FFC
+ ldr r1, _081582B4 @ =gMoveSelectionCursor
ldrb r0, [r5]
adds r0, r1
strb r4, [r0]
ldrb r0, [r5]
bl sub_8159478
- ldr r1, _081582B8 @ =gUnknown_3004FE0
+ ldr r1, _081582B8 @ =gBattlerControllerFuncs
ldrb r0, [r5]
lsls r0, 2
adds r0, r1
@@ -4097,19 +4097,19 @@ sub_815823C: @ 815823C
bx r0
.align 2, 0
_081582A0: .4byte gActiveBattler
-_081582A4: .4byte gUnknown_2022BC4
+_081582A4: .4byte gBattleBufferA
_081582A8: .4byte gBattlerPartyIndexes
_081582AC: .4byte gPlayerParty
-_081582B0: .4byte gUnknown_2023FF8
-_081582B4: .4byte gUnknown_2023FFC
-_081582B8: .4byte gUnknown_3004FE0
+_081582B0: .4byte gActionSelectionCursor
+_081582B4: .4byte gMoveSelectionCursor
+_081582B8: .4byte gBattlerControllerFuncs
_081582BC: .4byte sub_81563A8
thumb_func_end sub_815823C
thumb_func_start sub_81582C0
sub_81582C0: @ 81582C0
push {r4-r6,lr}
- ldr r0, _081582EC @ =gUnknown_2022BC4
+ ldr r0, _081582EC @ =gBattleBufferA
ldr r6, _081582F0 @ =gActiveBattler
ldrb r2, [r6]
lsls r1, r2, 9
@@ -4122,7 +4122,7 @@ sub_81582C0: @ 81582C0
adds r1, r2, 0
movs r3, 0x1
bl InitAndLaunchSpecialAnimation
- ldr r0, _081582F4 @ =gUnknown_3004FE0
+ ldr r0, _081582F4 @ =gBattlerControllerFuncs
ldrb r1, [r6]
lsls r1, 2
adds r1, r0
@@ -4130,9 +4130,9 @@ sub_81582C0: @ 81582C0
str r0, [r1]
b _08158332
.align 2, 0
-_081582EC: .4byte gUnknown_2022BC4
+_081582EC: .4byte gBattleBufferA
_081582F0: .4byte gActiveBattler
-_081582F4: .4byte gUnknown_3004FE0
+_081582F4: .4byte gBattlerControllerFuncs
_081582F8: .4byte sub_8156F7C
_081582FC:
ldr r5, _08158338 @ =gBattlerSpriteIds
@@ -4152,7 +4152,7 @@ _081582FC:
lsls r0, 2
adds r0, r4
bl DestroySprite
- ldr r1, _08158340 @ =gUnknown_3004FF0
+ ldr r1, _08158340 @ =gHealthboxSpriteIds
ldrb r0, [r6]
adds r0, r1
ldrb r0, [r0]
@@ -4165,7 +4165,7 @@ _08158332:
.align 2, 0
_08158338: .4byte gBattlerSpriteIds
_0815833C: .4byte gSprites
-_08158340: .4byte gUnknown_3004FF0
+_08158340: .4byte gHealthboxSpriteIds
thumb_func_end sub_81582C0
thumb_func_start sub_8158344
@@ -4181,7 +4181,7 @@ sub_8158344: @ 8158344
bne _081583F0
ldrb r1, [r7]
movs r0, 0x4
- bl sub_8034750
+ bl DecompressTrainerBackPalette
ldrb r0, [r7]
bl GetBattlerPosition
adds r1, r0, 0
@@ -4190,7 +4190,7 @@ sub_8158344: @ 8158344
movs r0, 0x4
bl SetMultiuseSpriteTemplateToTrainerBack
ldr r0, _081583DC @ =gMultiuseSpriteTemplate
- ldr r1, _081583E0 @ =gUnknown_8239F8C
+ ldr r1, _081583E0 @ =gTrainerBackPicCoords
ldrb r1, [r1, 0x10]
movs r2, 0x8
subs r2, r1
@@ -4242,14 +4242,14 @@ sub_8158344: @ 8158344
.align 2, 0
_081583D8: .4byte gActiveBattler
_081583DC: .4byte gMultiuseSpriteTemplate
-_081583E0: .4byte gUnknown_8239F8C
+_081583E0: .4byte gTrainerBackPicCoords
_081583E4: .4byte gBattlerSpriteIds
_081583E8: .4byte gSprites
_081583EC: .4byte 0x0000fffe
_081583F0:
ldrb r1, [r7]
movs r0, 0x84
- bl sub_80346C4
+ bl DecompressTrainerFrontPic
ldrb r0, [r7]
bl GetBattlerPosition
adds r1, r0, 0
@@ -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
@@ -4273,7 +4273,7 @@ _081583F0:
adds r4, r0
asrs r4, 16
ldrb r0, [r7]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -4372,7 +4372,7 @@ _081584E2:
adds r0, r4
ldr r1, _08158534 @ =sub_8033EEC
str r1, [r0]
- ldr r1, _08158538 @ =gUnknown_3004FE0
+ ldr r1, _08158538 @ =gBattlerControllerFuncs
ldr r0, _0815853C @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -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
@@ -4395,7 +4395,7 @@ _08158528: .4byte gTrainerFrontPicTable
_0815852C: .4byte 0x000003ff
_08158530: .4byte 0xfffffc00
_08158534: .4byte sub_8033EEC
-_08158538: .4byte gUnknown_3004FE0
+_08158538: .4byte gBattlerControllerFuncs
_0815853C: .4byte gActiveBattler
_08158540: .4byte sub_815614C
thumb_func_end sub_8158344
@@ -4406,7 +4406,7 @@ sub_8158544: @ 8158544
ldr r4, _081585EC @ =gActiveBattler
ldrb r1, [r4]
movs r0, 0x4
- bl sub_8034750
+ bl DecompressTrainerBackPalette
ldrb r0, [r4]
bl GetBattlerPosition
adds r1, r0, 0
@@ -4415,7 +4415,7 @@ sub_8158544: @ 8158544
movs r0, 0x4
bl SetMultiuseSpriteTemplateToTrainerBack
ldr r0, _081585F0 @ =gMultiuseSpriteTemplate
- ldr r1, _081585F4 @ =gUnknown_8239F8C
+ ldr r1, _081585F4 @ =gTrainerBackPicCoords
ldrb r1, [r1, 0x10]
movs r2, 0x8
subs r2, r1
@@ -4473,7 +4473,7 @@ sub_8158544: @ 8158544
adds r0, r5
ldr r1, _08158604 @ =sub_8033EEC
str r1, [r0]
- ldr r1, _08158608 @ =gUnknown_3004FE0
+ ldr r1, _08158608 @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -4485,12 +4485,12 @@ sub_8158544: @ 8158544
.align 2, 0
_081585EC: .4byte gActiveBattler
_081585F0: .4byte gMultiuseSpriteTemplate
-_081585F4: .4byte gUnknown_8239F8C
+_081585F4: .4byte gTrainerBackPicCoords
_081585F8: .4byte gBattlerSpriteIds
_081585FC: .4byte gSprites
_08158600: .4byte 0x0000ffa0
_08158604: .4byte sub_8033EEC
-_08158608: .4byte gUnknown_3004FE0
+_08158608: .4byte gBattlerControllerFuncs
_0815860C: .4byte sub_8156FEC
thumb_func_end sub_8158544
@@ -4505,7 +4505,7 @@ sub_8158610: @ 8158610
thumb_func_start sub_815861C
sub_815861C: @ 815861C
push {r4-r6,lr}
- ldr r6, _08158668 @ =gUnknown_2024018
+ ldr r6, _08158668 @ =gBattleSpritesDataPtr
ldr r4, [r6]
ldr r5, _0815866C @ =gActiveBattler
ldrb r2, [r5]
@@ -4542,7 +4542,7 @@ _08158650:
strb r1, [r0, 0x4]
b _0815872A
.align 2, 0
-_08158668: .4byte gUnknown_2024018
+_08158668: .4byte gBattleSpritesDataPtr
_0815866C: .4byte gActiveBattler
_08158670:
ldrb r1, [r3]
@@ -4622,10 +4622,10 @@ _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 @ =gUnknown_3004FE0
+ ldr r1, _0815873C @ =gBattlerControllerFuncs
ldr r0, _08158740 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -4639,8 +4639,8 @@ _0815872A:
.align 2, 0
_08158730: .4byte gSprites
_08158734: .4byte gBattlerSpriteIds
-_08158738: .4byte sub_8011EA0
-_0815873C: .4byte gUnknown_3004FE0
+_08158738: .4byte SpriteCB_FaintOpponentMon
+_0815873C: .4byte gBattlerControllerFuncs
_08158740: .4byte gActiveBattler
_08158744: .4byte sub_8156DCC
thumb_func_end sub_815861C
@@ -4656,12 +4656,12 @@ sub_8158748: @ 8158748
thumb_func_start sub_8158754
sub_8158754: @ 8158754
push {r4,r5,lr}
- ldr r0, _08158794 @ =gUnknown_2024018
+ ldr r0, _08158794 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0x8]
movs r0, 0x4
strb r0, [r1, 0x8]
- ldr r1, _08158798 @ =gUnknown_2024005
+ ldr r1, _08158798 @ =gDoingBattleAnim
movs r0, 0x1
strb r0, [r1]
ldr r5, _0815879C @ =gActiveBattler
@@ -4675,7 +4675,7 @@ sub_8158754: @ 8158754
adds r1, r4, 0
movs r3, 0x3
bl InitAndLaunchSpecialAnimation
- ldr r1, _081587A0 @ =gUnknown_3004FE0
+ ldr r1, _081587A0 @ =gBattlerControllerFuncs
ldrb r0, [r5]
lsls r0, 2
adds r0, r1
@@ -4685,28 +4685,28 @@ sub_8158754: @ 8158754
pop {r0}
bx r0
.align 2, 0
-_08158794: .4byte gUnknown_2024018
-_08158798: .4byte gUnknown_2024005
+_08158794: .4byte gBattleSpritesDataPtr
+_08158798: .4byte gDoingBattleAnim
_0815879C: .4byte gActiveBattler
-_081587A0: .4byte gUnknown_3004FE0
+_081587A0: .4byte gBattlerControllerFuncs
_081587A4: .4byte sub_8156484
thumb_func_end sub_8158754
thumb_func_start sub_81587A8
sub_81587A8: @ 81587A8
push {r4,r5,lr}
- ldr r1, _081587F0 @ =gUnknown_2022BC4
+ ldr r1, _081587F0 @ =gBattleBufferA
ldr r5, _081587F4 @ =gActiveBattler
ldrb r0, [r5]
lsls r0, 9
adds r1, 0x1
adds r0, r1
ldrb r1, [r0]
- ldr r0, _081587F8 @ =gUnknown_2024018
+ ldr r0, _081587F8 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
strb r1, [r0, 0x8]
- ldr r1, _081587FC @ =gUnknown_2024005
+ ldr r1, _081587FC @ =gDoingBattleAnim
movs r0, 0x1
strb r0, [r1]
ldrb r4, [r5]
@@ -4719,7 +4719,7 @@ sub_81587A8: @ 81587A8
adds r1, r4, 0
movs r3, 0x3
bl InitAndLaunchSpecialAnimation
- ldr r1, _08158800 @ =gUnknown_3004FE0
+ ldr r1, _08158800 @ =gBattlerControllerFuncs
ldrb r0, [r5]
lsls r0, 2
adds r0, r1
@@ -4729,11 +4729,11 @@ sub_81587A8: @ 81587A8
pop {r0}
bx r0
.align 2, 0
-_081587F0: .4byte gUnknown_2022BC4
+_081587F0: .4byte gBattleBufferA
_081587F4: .4byte gActiveBattler
-_081587F8: .4byte gUnknown_2024018
-_081587FC: .4byte gUnknown_2024005
-_08158800: .4byte gUnknown_3004FE0
+_081587F8: .4byte gBattleSpritesDataPtr
+_081587FC: .4byte gDoingBattleAnim
+_08158800: .4byte gBattlerControllerFuncs
_08158804: .4byte sub_8156484
thumb_func_end sub_81587A8
@@ -4748,7 +4748,7 @@ sub_8158808: @ 8158808
thumb_func_start sub_8158814
sub_8158814: @ 8158814
push {r4-r6,lr}
- ldr r0, _081588E8 @ =gUnknown_2022BC4
+ ldr r0, _081588E8 @ =gBattleBufferA
mov r12, r0
ldr r6, _081588EC @ =gActiveBattler
ldrb r2, [r6]
@@ -4768,7 +4768,7 @@ sub_8158814: @ 8158814
adds r2, r1
ldrb r1, [r2]
strb r1, [r5]
- ldr r4, _081588F4 @ =gUnknown_2037EEC
+ ldr r4, _081588F4 @ =gAnimMovePower
ldrb r2, [r6]
lsls r2, 9
mov r1, r12
@@ -4782,7 +4782,7 @@ sub_8158814: @ 8158814
lsls r1, 8
orrs r3, r1
strh r3, [r4]
- ldr r4, _081588F8 @ =gUnknown_2037EE8
+ ldr r4, _081588F8 @ =gAnimMoveDmg
ldrb r2, [r6]
lsls r2, 9
mov r1, r12
@@ -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
@@ -4837,7 +4837,7 @@ sub_8158814: @ 8158814
adds r1, 0x10
adds r2, r1
str r2, [r3]
- ldr r3, _08158908 @ =gUnknown_2024008
+ ldr r3, _08158908 @ =gTransformedPersonalities
ldrb r1, [r6]
lsls r1, 2
adds r1, r3
@@ -4852,17 +4852,17 @@ sub_8158814: @ 8158814
bl PlayerPartnerBufferExecCompleted
b _0815892A
.align 2, 0
-_081588E8: .4byte gUnknown_2022BC4
+_081588E8: .4byte gBattleBufferA
_081588EC: .4byte gActiveBattler
_081588F0: .4byte gAnimMoveTurn
-_081588F4: .4byte gUnknown_2037EEC
-_081588F8: .4byte gUnknown_2037EE8
-_081588FC: .4byte gUnknown_2037EFE
-_08158900: .4byte gUnknown_2037F00
+_081588F4: .4byte gAnimMovePower
+_081588F8: .4byte gAnimMoveDmg
+_081588FC: .4byte gAnimFriendship
+_08158900: .4byte gWeatherMoveAnim
_08158904: .4byte gAnimDisableStructPtr
-_08158908: .4byte gUnknown_2024008
+_08158908: .4byte gTransformedPersonalities
_0815890C:
- ldr r0, _08158930 @ =gUnknown_2024018
+ ldr r0, _08158930 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldrb r1, [r6]
ldr r2, [r0, 0x4]
@@ -4871,7 +4871,7 @@ _0815890C:
lsls r0, 2
adds r0, r2
strb r3, [r0, 0x4]
- ldr r1, _08158934 @ =gUnknown_3004FE0
+ ldr r1, _08158934 @ =gBattlerControllerFuncs
ldrb r0, [r6]
lsls r0, 2
adds r0, r1
@@ -4882,8 +4882,8 @@ _0815892A:
pop {r0}
bx r0
.align 2, 0
-_08158930: .4byte gUnknown_2024018
-_08158934: .4byte gUnknown_3004FE0
+_08158930: .4byte gBattleSpritesDataPtr
+_08158934: .4byte gBattlerControllerFuncs
_08158938: .4byte sub_815893C
thumb_func_end sub_8158814
@@ -4893,7 +4893,7 @@ sub_815893C: @ 815893C
mov r7, r9
mov r6, r8
push {r6,r7}
- ldr r2, _08158980 @ =gUnknown_2022BC4
+ ldr r2, _08158980 @ =gBattleBufferA
ldr r6, _08158984 @ =gActiveBattler
ldrb r3, [r6]
lsls r1, r3, 9
@@ -4907,7 +4907,7 @@ sub_815893C: @ 815893C
ldrb r0, [r1]
lsls r0, 8
orrs r4, r0
- ldr r7, _08158988 @ =gUnknown_2024018
+ ldr r7, _08158988 @ =gBattleSpritesDataPtr
ldr r5, [r7]
ldr r1, [r5, 0x4]
lsls r0, r3, 1
@@ -4923,9 +4923,9 @@ sub_815893C: @ 815893C
beq _08158996
b _08158A7C
.align 2, 0
-_08158980: .4byte gUnknown_2022BC4
+_08158980: .4byte gBattleBufferA
_08158984: .4byte gActiveBattler
-_08158988: .4byte gUnknown_2024018
+_08158988: .4byte gBattleSpritesDataPtr
_0815898C:
cmp r2, 0x2
beq _081589F0
@@ -4978,10 +4978,10 @@ _081589C6:
strb r1, [r0, 0x4]
b _08158A7C
_081589F0:
- ldr r0, _08158A38 @ =gUnknown_2037EDC
+ ldr r0, _08158A38 @ =gAnimScriptCallback
ldr r0, [r0]
bl _call_via_r0
- ldr r0, _08158A3C @ =gUnknown_2037EE1
+ ldr r0, _08158A3C @ =gAnimScriptActive
ldrb r0, [r0]
cmp r0, 0
bne _08158A7C
@@ -5013,8 +5013,8 @@ _08158A24:
strb r1, [r0, 0x4]
b _08158A7C
.align 2, 0
-_08158A38: .4byte gUnknown_2037EDC
-_08158A3C: .4byte gUnknown_2037EE1
+_08158A38: .4byte gAnimScriptCallback
+_08158A3C: .4byte gAnimScriptActive
_08158A40:
ldrb r1, [r0]
movs r0, 0x40
@@ -5066,7 +5066,7 @@ sub_8158A88: @ 8158A88
ldr r0, _08158AC8 @ =gUnknown_2022BC6
adds r4, r0
ldrh r0, [r4]
- bl sub_80D7274
+ bl BufferStringBattle
ldrh r0, [r4]
bl sub_80D89B0
lsls r0, 24
@@ -5074,7 +5074,7 @@ sub_8158A88: @ 8158A88
beq _08158AD0
ldr r0, _08158ACC @ =gDisplayedStringBattle
movs r1, 0x40
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _08158AD8
.align 2, 0
_08158ABC: .4byte gBattle_BG0_X
@@ -5085,9 +5085,9 @@ _08158ACC: .4byte gDisplayedStringBattle
_08158AD0:
ldr r0, _08158AEC @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
_08158AD8:
- ldr r1, _08158AF0 @ =gUnknown_3004FE0
+ ldr r1, _08158AF0 @ =gBattlerControllerFuncs
ldr r0, _08158AF4 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5099,7 +5099,7 @@ _08158AD8:
bx r0
.align 2, 0
_08158AEC: .4byte gDisplayedStringBattle
-_08158AF0: .4byte gUnknown_3004FE0
+_08158AF0: .4byte gBattlerControllerFuncs
_08158AF4: .4byte gActiveBattler
_08158AF8: .4byte sub_815623C
thumb_func_end sub_8158A88
@@ -5137,7 +5137,7 @@ sub_8158B20: @ 8158B20
ldr r1, _08158B50 @ =gBattle_BG0_Y
movs r0, 0xA0
strh r0, [r1]
- ldr r1, _08158B54 @ =gUnknown_3004FE0
+ ldr r1, _08158B54 @ =gBattlerControllerFuncs
ldr r0, _08158B58 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5150,7 +5150,7 @@ _08158B46:
.align 2, 0
_08158B4C: .4byte gBattle_BG0_X
_08158B50: .4byte gBattle_BG0_Y
-_08158B54: .4byte gUnknown_3004FE0
+_08158B54: .4byte gBattlerControllerFuncs
_08158B58: .4byte gActiveBattler
_08158B5C: .4byte sub_8156140
thumb_func_end sub_8158B20
@@ -5164,7 +5164,7 @@ sub_8158B60: @ 8158B60
lsls r0, 24
cmp r0, 0
bne _08158BDC
- ldr r1, _08158BC0 @ =gUnknown_3004FE0
+ ldr r1, _08158BC0 @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -5172,10 +5172,10 @@ sub_8158B60: @ 8158B60
str r1, [r0]
ldr r0, _08158BC8 @ =gUnknown_83FDA4C
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _08158BCC @ =gUnknown_83FE725
movs r1, 0x2
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
movs r4, 0
_08158B8E:
lsls r0, r4, 24
@@ -5184,30 +5184,30 @@ _08158B8E:
adds r4, 0x1
cmp r4, 0x3
ble _08158B8E
- ldr r1, _08158BD0 @ =gUnknown_2023FF8
+ ldr r1, _08158BD0 @ =gActionSelectionCursor
ldr r0, _08158BBC @ =gActiveBattler
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
movs r1, 0
bl ActionSelectionCreateCursorAt
- ldr r0, _08158BD4 @ =gUnknown_83FE6D5
+ ldr r0, _08158BD4 @ =gText_WhatWillPkmnDo
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _08158BD8 @ =gDisplayedStringBattle
movs r1, 0x1
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _08158BE8
.align 2, 0
_08158BBC: .4byte gActiveBattler
-_08158BC0: .4byte gUnknown_3004FE0
+_08158BC0: .4byte gBattlerControllerFuncs
_08158BC4: .4byte sub_8158B20
_08158BC8: .4byte gUnknown_83FDA4C
_08158BCC: .4byte gUnknown_83FE725
-_08158BD0: .4byte gUnknown_2023FF8
-_08158BD4: .4byte gUnknown_83FE6D5
+_08158BD0: .4byte gActionSelectionCursor
+_08158BD4: .4byte gText_WhatWillPkmnDo
_08158BD8: .4byte gDisplayedStringBattle
_08158BDC:
- ldr r0, _08158BF0 @ =gUnknown_3004FE0
+ ldr r0, _08158BF0 @ =gBattlerControllerFuncs
ldrb r1, [r4]
lsls r1, 2
adds r1, r0
@@ -5218,7 +5218,7 @@ _08158BE8:
pop {r0}
bx r0
.align 2, 0
-_08158BF0: .4byte gUnknown_3004FE0
+_08158BF0: .4byte gBattlerControllerFuncs
_08158BF4: .4byte sub_8156140
thumb_func_end sub_8158B60
@@ -5245,7 +5245,7 @@ sub_8158C04: @ 8158C04
lsls r2, 1
adds r0, r2, 0
strh r0, [r1]
- ldr r1, _08158C3C @ =gUnknown_3004FE0
+ ldr r1, _08158C3C @ =gBattlerControllerFuncs
ldr r0, _08158C40 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5258,7 +5258,7 @@ _08158C2E:
.align 2, 0
_08158C34: .4byte gBattle_BG0_X
_08158C38: .4byte gBattle_BG0_Y
-_08158C3C: .4byte gUnknown_3004FE0
+_08158C3C: .4byte gBattlerControllerFuncs
_08158C40: .4byte gActiveBattler
_08158C44: .4byte sub_81564E4
thumb_func_end sub_8158C04
@@ -5272,8 +5272,8 @@ sub_8158C48: @ 8158C48
lsls r0, 24
cmp r0, 0
bne _08158C74
- bl sub_8032CB4
- ldr r0, _08158C6C @ =gUnknown_3004FE0
+ bl InitMoveSelectionsVarsAndStrings
+ ldr r0, _08158C6C @ =gBattlerControllerFuncs
ldrb r1, [r4]
lsls r1, 2
adds r1, r0
@@ -5281,10 +5281,10 @@ sub_8158C48: @ 8158C48
b _08158C7E
.align 2, 0
_08158C68: .4byte gActiveBattler
-_08158C6C: .4byte gUnknown_3004FE0
+_08158C6C: .4byte gBattlerControllerFuncs
_08158C70: .4byte sub_8158C04
_08158C74:
- ldr r0, _08158C88 @ =gUnknown_3004FE0
+ ldr r0, _08158C88 @ =gBattlerControllerFuncs
ldrb r1, [r4]
lsls r1, 2
adds r1, r0
@@ -5295,7 +5295,7 @@ _08158C7E:
pop {r0}
bx r0
.align 2, 0
-_08158C88: .4byte gUnknown_3004FE0
+_08158C88: .4byte gBattlerControllerFuncs
_08158C8C: .4byte sub_81564E4
thumb_func_end sub_8158C48
@@ -5310,7 +5310,7 @@ sub_8158C90: @ 8158C90
movs r2, 0
movs r3, 0x10
bl BeginNormalPaletteFade
- ldr r1, _08158CDC @ =gUnknown_3004FE0
+ ldr r1, _08158CDC @ =gBattlerControllerFuncs
ldr r2, _08158CE0 @ =gActiveBattler
ldrb r0, [r2]
lsls r0, 2
@@ -5322,7 +5322,7 @@ sub_8158C90: @ 8158C90
strb r0, [r1]
movs r3, 0
ldr r5, _08158CEC @ =gUnknown_203B0DC
- ldr r4, _08158CF0 @ =gUnknown_2022BC4
+ ldr r4, _08158CF0 @ =gBattleBufferA
_08158CBE:
adds r0, r3, r5
ldrb r1, [r2]
@@ -5340,12 +5340,12 @@ _08158CBE:
pop {r0}
bx r0
.align 2, 0
-_08158CDC: .4byte gUnknown_3004FE0
+_08158CDC: .4byte gBattlerControllerFuncs
_08158CE0: .4byte gActiveBattler
_08158CE4: .4byte sub_8156594
_08158CE8: .4byte gBattlerInMenuId
_08158CEC: .4byte gUnknown_203B0DC
-_08158CF0: .4byte gUnknown_2022BC4
+_08158CF0: .4byte gBattleBufferA
thumb_func_end sub_8158C90
thumb_func_start sub_8158CF4
@@ -5368,7 +5368,7 @@ sub_8158CF4: @ 8158CF4
adds r1, r0
lsls r1, 3
adds r1, r5
- ldr r5, _08158DB4 @ =gUnknown_2022BC4
+ ldr r5, _08158DB4 @ =gBattleBufferA
lsls r2, 9
adds r6, r5, 0x1
adds r2, r6
@@ -5422,7 +5422,7 @@ _08158D60:
movs r2, 0
movs r3, 0x10
bl BeginNormalPaletteFade
- ldr r1, _08158DC0 @ =gUnknown_3004FE0
+ ldr r1, _08158DC0 @ =gBattlerControllerFuncs
ldr r2, _08158DAC @ =gActiveBattler
ldrb r0, [r2]
lsls r0, 2
@@ -5441,10 +5441,10 @@ _08158DA4: .4byte TaskDummy
_08158DA8: .4byte gUnknown_3004FFC
_08158DAC: .4byte gActiveBattler
_08158DB0: .4byte gTasks
-_08158DB4: .4byte gUnknown_2022BC4
+_08158DB4: .4byte gBattleBufferA
_08158DB8: .4byte gBattleStruct
_08158DBC: .4byte gUnknown_203B0DC
-_08158DC0: .4byte gUnknown_3004FE0
+_08158DC0: .4byte gBattlerControllerFuncs
_08158DC4: .4byte sub_81564F0
_08158DC8: .4byte gBattlerInMenuId
thumb_func_end sub_8158CF4
@@ -5493,7 +5493,7 @@ _08158E18:
adds r5, r1, r0
movs r0, 0
bl LoadBattleBarGfx
- ldr r3, _08158E70 @ =gUnknown_2022BC4
+ ldr r3, _08158E70 @ =gBattleBufferA
ldr r7, _08158E74 @ =gActiveBattler
ldrb r1, [r7]
lsls r1, 9
@@ -5519,7 +5519,7 @@ _08158E18:
bl GetMonData
adds r3, r0, 0
ldrb r0, [r7]
- ldr r1, _08158E7C @ =gUnknown_3004FF0
+ ldr r1, _08158E7C @ =gHealthboxSpriteIds
adds r1, r0, r1
ldrb r1, [r1]
str r6, [sp]
@@ -5529,17 +5529,17 @@ _08158E18:
.align 2, 0
_08158E68: .4byte gBattlerPartyIndexes
_08158E6C: .4byte gEnemyParty
-_08158E70: .4byte gUnknown_2022BC4
+_08158E70: .4byte gBattleBufferA
_08158E74: .4byte gActiveBattler
_08158E78: .4byte 0x00007fff
-_08158E7C: .4byte gUnknown_3004FF0
+_08158E7C: .4byte gHealthboxSpriteIds
_08158E80:
adds r0, r5, 0
movs r1, 0x3A
bl GetMonData
adds r2, r0, 0
ldrb r0, [r7]
- ldr r4, _08158EC0 @ =gUnknown_3004FF0
+ ldr r4, _08158EC0 @ =gHealthboxSpriteIds
adds r1, r0, r4
ldrb r1, [r1]
str r6, [sp]
@@ -5550,9 +5550,9 @@ _08158E80:
ldrb r0, [r0]
movs r1, 0
movs r2, 0
- bl sub_8048440
+ bl UpdateHpTextInHealthbox
_08158EA8:
- ldr r1, _08158EC4 @ =gUnknown_3004FE0
+ ldr r1, _08158EC4 @ =gBattlerControllerFuncs
ldr r0, _08158EC8 @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 2
@@ -5564,8 +5564,8 @@ _08158EA8:
pop {r0}
bx r0
.align 2, 0
-_08158EC0: .4byte gUnknown_3004FF0
-_08158EC4: .4byte gUnknown_3004FE0
+_08158EC0: .4byte gHealthboxSpriteIds
+_08158EC4: .4byte gBattlerControllerFuncs
_08158EC8: .4byte gActiveBattler
_08158ECC: .4byte sub_8156E78
thumb_func_end sub_8158DD8
@@ -5573,7 +5573,7 @@ _08158ECC: .4byte sub_8156E78
thumb_func_start sub_8158ED0
sub_8158ED0: @ 8158ED0
push {r4-r7,lr}
- ldr r5, _08158EFC @ =gUnknown_2022BC4
+ ldr r5, _08158EFC @ =gBattleBufferA
ldr r6, _08158F00 @ =gActiveBattler
ldrb r0, [r6]
lsls r0, 9
@@ -5593,7 +5593,7 @@ sub_8158ED0: @ 8158ED0
bl PlayerPartnerBufferExecCompleted
b _08158F54
.align 2, 0
-_08158EFC: .4byte gUnknown_2022BC4
+_08158EFC: .4byte gBattleBufferA
_08158F00: .4byte gActiveBattler
_08158F04: .4byte gPlayerParty
_08158F08:
@@ -5626,7 +5626,7 @@ _08158F08:
strh r4, [r1, 0xA]
ldrb r0, [r6]
strh r0, [r1, 0xC]
- ldr r1, _08158F64 @ =gUnknown_3004FE0
+ ldr r1, _08158F64 @ =gBattlerControllerFuncs
ldrb r0, [r6]
lsls r0, 2
adds r0, r1
@@ -5639,7 +5639,7 @@ _08158F54:
.align 2, 0
_08158F5C: .4byte sub_81568DC
_08158F60: .4byte gTasks
-_08158F64: .4byte gUnknown_3004FE0
+_08158F64: .4byte gBattlerControllerFuncs
_08158F68: .4byte nullsub_99
thumb_func_end sub_8158ED0
@@ -5681,7 +5681,7 @@ _08158FA8:
ldr r0, _08158FFC @ =gEnemyParty
_08158FB8:
adds r2, r1, r0
- ldr r1, _08159000 @ =gUnknown_3004FF0
+ ldr r1, _08159000 @ =gHealthboxSpriteIds
ldr r4, _08159004 @ =gActiveBattler
ldrb r0, [r4]
adds r0, r1
@@ -5690,7 +5690,7 @@ _08158FB8:
movs r2, 0x9
bl UpdateHealthboxAttribute
ldrb r2, [r4]
- ldr r0, _08159008 @ =gUnknown_2024018
+ ldr r0, _08159008 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x4]
lsls r1, r2, 1
@@ -5702,7 +5702,7 @@ _08158FB8:
negs r0, r0
ands r0, r2
strb r0, [r1]
- ldr r1, _0815900C @ =gUnknown_3004FE0
+ ldr r1, _0815900C @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -5715,10 +5715,10 @@ _08158FF2:
.align 2, 0
_08158FF8: .4byte gBattlerPartyIndexes
_08158FFC: .4byte gEnemyParty
-_08159000: .4byte gUnknown_3004FF0
+_08159000: .4byte gHealthboxSpriteIds
_08159004: .4byte gActiveBattler
-_08159008: .4byte gUnknown_2024018
-_0815900C: .4byte gUnknown_3004FE0
+_08159008: .4byte gBattleSpritesDataPtr
+_0815900C: .4byte gBattlerControllerFuncs
_08159010: .4byte sub_8157054
thumb_func_end sub_8158F6C
@@ -5731,7 +5731,7 @@ sub_8159014: @ 8159014
lsls r0, 24
cmp r0, 0
bne _08159064
- ldr r4, _08159070 @ =gUnknown_2022BC4
+ ldr r4, _08159070 @ =gBattleBufferA
ldrb r3, [r5]
lsls r3, 9
adds r0, r4, 0x1
@@ -5756,7 +5756,7 @@ sub_8159014: @ 8159014
lsls r2, 24
orrs r1, r2
bl InitAndLaunchChosenStatusAnimation
- ldr r1, _08159074 @ =gUnknown_3004FE0
+ ldr r1, _08159074 @ =gBattlerControllerFuncs
ldrb r0, [r5]
lsls r0, 2
adds r0, r1
@@ -5768,8 +5768,8 @@ _08159064:
bx r0
.align 2, 0
_0815906C: .4byte gActiveBattler
-_08159070: .4byte gUnknown_2022BC4
-_08159074: .4byte gUnknown_3004FE0
+_08159070: .4byte gBattleBufferA
+_08159074: .4byte gBattlerControllerFuncs
_08159078: .4byte sub_8157054
thumb_func_end sub_8159014
@@ -5810,7 +5810,7 @@ _081590BC:
adds r0, r4, 0
movs r1, 0x37
bl GetMonData
- ldr r2, _081590F8 @ =gUnknown_2022BC4
+ ldr r2, _081590F8 @ =gBattleBufferA
ldr r1, _081590FC @ =gActiveBattler
ldrb r1, [r1]
lsls r1, 9
@@ -5832,7 +5832,7 @@ _081590BC:
.align 2, 0
_081590F0: .4byte gBattlerPartyIndexes
_081590F4: .4byte gEnemyParty
-_081590F8: .4byte gUnknown_2022BC4
+_081590F8: .4byte gBattleBufferA
_081590FC: .4byte gActiveBattler
thumb_func_end sub_815907C
@@ -5957,7 +5957,7 @@ _081591B8: .4byte gSprites
_081591BC: .4byte gBattlerSpriteIds
_081591C0: .4byte gActiveBattler
_081591C4:
- ldr r1, _081591F4 @ =gUnknown_2024005
+ ldr r1, _081591F4 @ =gDoingBattleAnim
movs r0, 0x1
strb r0, [r1]
ldrb r0, [r4]
@@ -5971,7 +5971,7 @@ _081591C4:
strh r1, [r0, 0x30]
ldrb r0, [r4]
bl DoHitAnimHealthboxEffect
- ldr r1, _081591F8 @ =gUnknown_3004FE0
+ ldr r1, _081591F8 @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -5982,8 +5982,8 @@ _081591EE:
pop {r0}
bx r0
.align 2, 0
-_081591F4: .4byte gUnknown_2024005
-_081591F8: .4byte gUnknown_3004FE0
+_081591F4: .4byte gDoingBattleAnim
+_081591F8: .4byte gBattlerControllerFuncs
_081591FC: .4byte sub_8156F00
thumb_func_end sub_8159190
@@ -5998,7 +5998,7 @@ sub_8159200: @ 8159200
thumb_func_start sub_815920C
sub_815920C: @ 815920C
push {lr}
- ldr r2, _08159234 @ =gUnknown_2022BC4
+ ldr r2, _08159234 @ =gBattleBufferA
ldr r0, _08159238 @ =gActiveBattler
ldrb r1, [r0]
lsls r1, 9
@@ -6015,14 +6015,14 @@ sub_815920C: @ 815920C
pop {r0}
bx r0
.align 2, 0
-_08159234: .4byte gUnknown_2022BC4
+_08159234: .4byte gBattleBufferA
_08159238: .4byte gActiveBattler
thumb_func_end sub_815920C
thumb_func_start sub_815923C
sub_815923C: @ 815923C
push {lr}
- ldr r2, _08159264 @ =gUnknown_2022BC4
+ ldr r2, _08159264 @ =gBattleBufferA
ldr r0, _08159268 @ =gActiveBattler
ldrb r1, [r0]
lsls r1, 9
@@ -6039,7 +6039,7 @@ sub_815923C: @ 815923C
pop {r0}
bx r0
.align 2, 0
-_08159264: .4byte gUnknown_2022BC4
+_08159264: .4byte gBattleBufferA
_08159268: .4byte gActiveBattler
thumb_func_end sub_815923C
@@ -6094,15 +6094,15 @@ _081592CC: .4byte gEnemyParty
thumb_func_start sub_81592D0
sub_81592D0: @ 81592D0
push {lr}
- ldr r1, _081592F8 @ =gUnknown_2022BC4
+ ldr r1, _081592F8 @ =gBattleBufferA
ldr r0, _081592FC @ =gActiveBattler
ldrb r0, [r0]
lsls r0, 9
adds r1, 0x1
adds r0, r1
ldrb r0, [r0]
- bl sub_80BC3A0
- ldr r2, _08159300 @ =gUnknown_2023F4C
+ bl HandleIntroSlide
+ ldr r2, _08159300 @ =gIntroSlideFlags
ldrh r0, [r2]
movs r1, 0x1
orrs r0, r1
@@ -6111,9 +6111,9 @@ sub_81592D0: @ 81592D0
pop {r0}
bx r0
.align 2, 0
-_081592F8: .4byte gUnknown_2022BC4
+_081592F8: .4byte gBattleBufferA
_081592FC: .4byte gActiveBattler
-_08159300: .4byte gUnknown_2023F4C
+_08159300: .4byte gIntroSlideFlags
thumb_func_end sub_81592D0
thumb_func_start sub_8159304
@@ -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
@@ -6198,7 +6198,7 @@ sub_8159304: @ 8159304
bl AllocSpritePalette
adds r4, r0, 0
lsls r4, 24
- ldr r0, _08159458 @ =gUnknown_8239FD4
+ ldr r0, _08159458 @ =gTrainerBackPicPaletteTable
ldr r0, [r0, 0x20]
lsrs r4, 20
movs r2, 0x80
@@ -6230,7 +6230,7 @@ sub_8159304: @ 8159304
adds r1, r4
ldrb r0, [r7]
strh r0, [r1, 0x8]
- ldr r3, _08159464 @ =gUnknown_2024018
+ ldr r3, _08159464 @ =gBattleSpritesDataPtr
ldr r0, [r3]
ldrb r2, [r7]
ldr r1, [r0, 0x4]
@@ -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]
@@ -6259,7 +6259,7 @@ _0815941C:
movs r1, 0x1
orrs r0, r1
strb r0, [r2, 0x9]
- ldr r1, _08159470 @ =gUnknown_3004FE0
+ ldr r1, _08159470 @ =gBattlerControllerFuncs
ldrb r0, [r7]
lsls r0, 2
adds r0, r1
@@ -6273,16 +6273,16 @@ _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
+_08159458: .4byte gTrainerBackPicPaletteTable
_0815945C: .4byte sub_81595EC
_08159460: .4byte gTasks
-_08159464: .4byte gUnknown_2024018
-_08159468: .4byte gUnknown_2024000
-_0815946C: .4byte sub_80491B0
-_08159470: .4byte gUnknown_3004FE0
+_08159464: .4byte gBattleSpritesDataPtr
+_08159468: .4byte gBattlerStatusSummaryTaskId
+_0815946C: .4byte Task_HidePartyStatusSummary
+_08159470: .4byte gBattlerControllerFuncs
_08159474: .4byte nullsub_99
thumb_func_end sub_8159304
@@ -6296,7 +6296,7 @@ sub_8159478: @ 8159478
adds r6, r0, 0
lsls r6, 24
lsrs r6, 24
- ldr r0, _081595C0 @ =gUnknown_2024018
+ ldr r0, _081595C0 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r6, 2
@@ -6306,7 +6306,7 @@ sub_8159478: @ 8159478
ldr r0, _081595C4 @ =gBattlerPartyIndexes
lsls r2, r6, 1
adds r2, r0
- ldr r0, _081595C8 @ =gUnknown_2022BC4
+ ldr r0, _081595C8 @ =gBattleBufferA
lsls r1, r6, 9
adds r0, 0x1
adds r1, r0
@@ -6341,17 +6341,17 @@ sub_8159478: @ 8159478
mov r10, r0
adds r0, r6, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
adds r0, r6, 0
- bl GetBankSpriteDefault_Y
+ bl GetBattlerSpriteDefault_Y
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
adds r0, r6, 0
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -6443,9 +6443,9 @@ sub_8159478: @ 8159478
pop {r0}
bx r0
.align 2, 0
-_081595C0: .4byte gUnknown_2024018
+_081595C0: .4byte gBattleSpritesDataPtr
_081595C4: .4byte gBattlerPartyIndexes
-_081595C8: .4byte gUnknown_2022BC4
+_081595C8: .4byte gBattleBufferA
_081595CC: .4byte gPlayerParty
_081595D0: .4byte sub_8033E3C
_081595D4: .4byte gUnknown_3004FFC
@@ -6481,7 +6481,7 @@ _08159610:
ldrb r5, [r4]
ldrh r0, [r1, 0x8]
strb r0, [r4]
- ldr r0, _08159650 @ =gUnknown_2022BC4
+ ldr r0, _08159650 @ =gBattleBufferA
ldrb r1, [r4]
lsls r2, r1, 9
adds r0, 0x1
@@ -6493,7 +6493,7 @@ _08159610:
strb r0, [r2]
ldrb r0, [r4]
bl sub_8159478
- ldr r1, _08159658 @ =gUnknown_3004FE0
+ ldr r1, _08159658 @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -6508,16 +6508,16 @@ _08159646:
bx r0
.align 2, 0
_0815964C: .4byte gActiveBattler
-_08159650: .4byte gUnknown_2022BC4
+_08159650: .4byte gBattleBufferA
_08159654: .4byte gBattlerPartyIndexes
-_08159658: .4byte gUnknown_3004FE0
+_08159658: .4byte gBattlerControllerFuncs
_0815965C: .4byte sub_8156624
thumb_func_end sub_81595EC
thumb_func_start sub_8159660
sub_8159660: @ 8159660
push {r4,r5,lr}
- ldr r1, _08159688 @ =gUnknown_2022BC4
+ ldr r1, _08159688 @ =gBattleBufferA
ldr r0, _0815968C @ =gActiveBattler
ldrb r2, [r0]
lsls r0, r2, 9
@@ -6534,10 +6534,10 @@ sub_8159660: @ 8159660
bl PlayerPartnerBufferExecCompleted
b _081596CE
.align 2, 0
-_08159688: .4byte gUnknown_2022BC4
+_08159688: .4byte gBattleBufferA
_0815968C: .4byte gActiveBattler
_08159690:
- ldr r0, _081596D4 @ =gUnknown_2024018
+ ldr r0, _081596D4 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r5, _081596D8 @ =gActiveBattler
ldrb r1, [r5]
@@ -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]
@@ -6571,10 +6571,10 @@ _081596CE:
pop {r0}
bx r0
.align 2, 0
-_081596D4: .4byte gUnknown_2024018
+_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
@@ -6591,10 +6591,10 @@ sub_81596F0: @ 81596F0
ldr r4, _08159710 @ =gActiveBattler
ldrb r0, [r4]
movs r1, 0x1
- bl dp11b_obj_free
+ bl EndBounceEffect
ldrb r0, [r4]
movs r1, 0
- bl dp11b_obj_free
+ bl EndBounceEffect
bl PlayerPartnerBufferExecCompleted
pop {r4}
pop {r0}
@@ -6615,7 +6615,7 @@ sub_8159714: @ 8159714
sub_8159720: @ 8159720
push {r4-r6,lr}
sub sp, 0x4
- ldr r5, _08159758 @ =gUnknown_2022BC4
+ ldr r5, _08159758 @ =gBattleBufferA
ldr r6, _0815975C @ =gActiveBattler
ldrb r2, [r6]
lsls r1, r2, 9
@@ -6640,10 +6640,10 @@ sub_8159720: @ 8159720
bl PlayerPartnerBufferExecCompleted
b _0815976C
.align 2, 0
-_08159758: .4byte gUnknown_2022BC4
+_08159758: .4byte gBattleBufferA
_0815975C: .4byte gActiveBattler
_08159760:
- ldr r0, _08159774 @ =gUnknown_3004FE0
+ ldr r0, _08159774 @ =gBattlerControllerFuncs
ldrb r1, [r6]
lsls r1, 2
adds r1, r0
@@ -6655,14 +6655,14 @@ _0815976C:
pop {r0}
bx r0
.align 2, 0
-_08159774: .4byte gUnknown_3004FE0
+_08159774: .4byte gBattlerControllerFuncs
_08159778: .4byte sub_8157024
thumb_func_end sub_8159720
thumb_func_start sub_815977C
sub_815977C: @ 815977C
push {r4,lr}
- ldr r1, _081597B0 @ =gUnknown_2022BC4
+ ldr r1, _081597B0 @ =gBattleBufferA
ldr r4, _081597B4 @ =gActiveBattler
ldrb r2, [r4]
lsls r0, r2, 9
@@ -6675,17 +6675,17 @@ sub_815977C: @ 815977C
bgt _081597A4
adds r0, r2, 0
movs r1, 0x1
- bl dp11b_obj_free
+ bl EndBounceEffect
ldrb r0, [r4]
movs r1, 0
- bl dp11b_obj_free
+ bl EndBounceEffect
_081597A4:
bl PlayerPartnerBufferExecCompleted
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_081597B0: .4byte gUnknown_2022BC4
+_081597B0: .4byte gBattleBufferA
_081597B4: .4byte gActiveBattler
thumb_func_end sub_815977C
@@ -6701,7 +6701,7 @@ sub_81597B8: @ 81597B8
sub_81597C4: @ 81597C4
push {r4,lr}
ldr r2, _08159808 @ =gBattleOutcome
- ldr r1, _0815980C @ =gUnknown_2022BC4
+ ldr r1, _0815980C @ =gBattleBufferA
ldr r4, _08159810 @ =gActiveBattler
ldrb r0, [r4]
lsls r0, 9
@@ -6720,7 +6720,7 @@ sub_81597C4: @ 81597C4
ands r0, r1
cmp r0, 0x2
bne _08159800
- ldr r0, _08159818 @ =gUnknown_3004FE0
+ ldr r0, _08159818 @ =gBattlerControllerFuncs
ldrb r1, [r4]
lsls r1, 2
adds r1, r0
@@ -6732,10 +6732,10 @@ _08159800:
bx r0
.align 2, 0
_08159808: .4byte gBattleOutcome
-_0815980C: .4byte gUnknown_2022BC4
+_0815980C: .4byte gBattleBufferA
_08159810: .4byte gActiveBattler
_08159814: .4byte gBattleTypeFlags
-_08159818: .4byte gUnknown_3004FE0
+_08159818: .4byte gBattlerControllerFuncs
_0815981C: .4byte sub_8156254
thumb_func_end sub_81597C4
@@ -6765,12 +6765,12 @@ sub_8159824: @ 8159824
movs r1, 0x1
movs r2, 0x7
movs r3, 0x1
- bl dp11b_obj_instanciate
+ bl DoBounceEffect
ldrb r0, [r4]
movs r1, 0
movs r2, 0x7
movs r3, 0x1
- bl dp11b_obj_instanciate
+ bl DoBounceEffect
_0815985C:
ldr r6, _081598C0 @ =gUnknown_3005EE0
ldrb r2, [r4]
@@ -6839,13 +6839,13 @@ _081598DA:
movs r1, 0x2
_081598DE:
movs r2, 0
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
b _081598F0
_081598E6:
movs r0, 0x1
movs r1, 0x3
movs r2, 0
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
_081598F0:
bl PlayerPartnerBufferExecCompleted
ldr r3, _08159924 @ =gUnknown_3005EE0
@@ -6875,7 +6875,7 @@ _081598F0:
_08159924: .4byte gUnknown_3005EE0
_08159928: .4byte gActiveBattler
_0815992C:
- ldr r5, _0815998C @ =gUnknown_2023FF8
+ ldr r5, _0815998C @ =gActionSelectionCursor
adds r0, r2, r5
ldrb r0, [r0]
ldrb r2, [r3]
@@ -6922,7 +6922,7 @@ _08159984:
pop {r0}
bx r0
.align 2, 0
-_0815998C: .4byte gUnknown_2023FF8
+_0815998C: .4byte gActionSelectionCursor
_08159990: .4byte gUnknown_3005EE0
_08159994: .4byte gActiveBattler
thumb_func_end sub_8159824
@@ -6984,7 +6984,7 @@ _081599DE:
orrs r2, r1
movs r0, 0x1
movs r1, 0xA
- bl EmitTwoReturnValues
+ bl BtlController_EmitTwoReturnValues
bl PlayerPartnerBufferExecCompleted
ldrb r0, [r6]
lsls r0, 2
@@ -7012,7 +7012,7 @@ _08159A3C: .4byte gBattleStruct
_08159A40: .4byte gUnknown_3005EE0
_08159A44: .4byte gActiveBattler
_08159A48:
- ldr r5, _08159AAC @ =gUnknown_2023FFC
+ ldr r5, _08159AAC @ =gMoveSelectionCursor
adds r1, r2, r5
ldrb r0, [r3]
ldrb r1, [r1]
@@ -7061,7 +7061,7 @@ _08159AA0:
pop {r0}
bx r0
.align 2, 0
-_08159AAC: .4byte gUnknown_2023FFC
+_08159AAC: .4byte gMoveSelectionCursor
_08159AB0: .4byte gUnknown_3005EE0
_08159AB4: .4byte gActiveBattler
thumb_func_end sub_8159998
@@ -7116,7 +7116,7 @@ _08159B04:
ldr r2, [r0, 0x4]
cmp r2, 0
beq _08159B6C
- ldr r1, _08159B64 @ =gUnknown_3004FE0
+ ldr r1, _08159B64 @ =gBattlerControllerFuncs
ldrb r0, [r4]
lsls r0, 2
adds r0, r1
@@ -7151,7 +7151,7 @@ _08159B54: .4byte gUnknown_8479198
_08159B58: .4byte gBattleStruct
_08159B5C: .4byte gActiveBattler
_08159B60: .4byte gUnknown_2022BC6
-_08159B64: .4byte gUnknown_3004FE0
+_08159B64: .4byte gBattlerControllerFuncs
_08159B68: .4byte gUnknown_3005EE0
_08159B6C:
adds r0, r1, 0x1
@@ -7174,7 +7174,7 @@ sub_8159B78: @ 8159B78
ldr r1, [r0]
movs r0, 0
strb r0, [r1, 0x2]
- ldr r1, _08159BA0 @ =gUnknown_3004FE0
+ ldr r1, _08159BA0 @ =gBattlerControllerFuncs
ldrb r0, [r2]
lsls r0, 2
adds r0, r1
@@ -7184,7 +7184,7 @@ sub_8159B78: @ 8159B78
.align 2, 0
_08159B98: .4byte gUnknown_3005EE0
_08159B9C: .4byte gActiveBattler
-_08159BA0: .4byte gUnknown_3004FE0
+_08159BA0: .4byte gBattlerControllerFuncs
_08159BA4: .4byte sub_81560DC
thumb_func_end sub_8159B78
@@ -7269,7 +7269,7 @@ _08159C44:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _08159C60 @ =gDisplayedStringBattle
movs r1, 0x18
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _08159C94
.align 2, 0
_08159C5C: .4byte gBattle_BG0_Y
@@ -7470,7 +7470,7 @@ _08159DF4:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _08159E08 @ =gDisplayedStringBattle
movs r1, 0x18
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
b _08159E84
.align 2, 0
_08159E08: .4byte gDisplayedStringBattle
diff --git a/asm/battle_controller_safari.s b/asm/battle_controller_safari.s
deleted file mode 100644
index 9e01ad2fd..000000000
--- a/asm/battle_controller_safari.s
+++ /dev/null
@@ -1,1534 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_79
-nullsub_79: @ 80DD534
- bx lr
- thumb_func_end nullsub_79
-
- thumb_func_start sub_80DD538
-sub_80DD538: @ 80DD538
- ldr r1, _080DD548 @ =gUnknown_3004FE0
- ldr r0, _080DD54C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DD550 @ =SafariBufferRunCommand
- str r1, [r0]
- bx lr
- .align 2, 0
-_080DD548: .4byte gUnknown_3004FE0
-_080DD54C: .4byte gActiveBattler
-_080DD550: .4byte SafariBufferRunCommand
- thumb_func_end sub_80DD538
-
- thumb_func_start SafariBufferRunCommand
-SafariBufferRunCommand: @ 80DD554
- push {lr}
- ldr r2, _080DD588 @ =gUnknown_2023BC8
- ldr r1, _080DD58C @ =gBitTable
- ldr r0, _080DD590 @ =gActiveBattler
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _080DD5A0
- ldr r0, _080DD594 @ =gUnknown_2022BC4
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _080DD59C
- ldr r0, _080DD598 @ =gUnknown_83FED00
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _080DD5A0
- .align 2, 0
-_080DD588: .4byte gUnknown_2023BC8
-_080DD58C: .4byte gBitTable
-_080DD590: .4byte gActiveBattler
-_080DD594: .4byte gUnknown_2022BC4
-_080DD598: .4byte gUnknown_83FED00
-_080DD59C:
- bl SafariBufferExecCompleted
-_080DD5A0:
- pop {r0}
- bx r0
- thumb_func_end SafariBufferRunCommand
-
- thumb_func_start HandleInputChooseAction_0
-HandleInputChooseAction_0: @ 80DD5A4
- push {r4,r5,lr}
- ldr r0, _080DD5D4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080DD612
- movs r0, 0x5
- bl PlaySE
- ldr r1, _080DD5D8 @ =gUnknown_2023FF8
- ldr r0, _080DD5DC @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080DD5F0
- cmp r0, 0x1
- bgt _080DD5E0
- cmp r0, 0
- beq _080DD5EA
- b _080DD60C
- .align 2, 0
-_080DD5D4: .4byte gMain
-_080DD5D8: .4byte gUnknown_2023FF8
-_080DD5DC: .4byte gActiveBattler
-_080DD5E0:
- cmp r0, 0x2
- beq _080DD5F6
- cmp r0, 0x3
- beq _080DD602
- b _080DD60C
-_080DD5EA:
- movs r0, 0x1
- movs r1, 0x5
- b _080DD5FA
-_080DD5F0:
- movs r0, 0x1
- movs r1, 0x6
- b _080DD5FA
-_080DD5F6:
- movs r0, 0x1
- movs r1, 0x7
-_080DD5FA:
- movs r2, 0
- bl EmitTwoReturnValues
- b _080DD60C
-_080DD602:
- movs r0, 0x1
- movs r1, 0x8
- movs r2, 0
- bl EmitTwoReturnValues
-_080DD60C:
- bl SafariBufferExecCompleted
- b _080DD71A
-_080DD612:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080DD650
- ldr r5, _080DD648 @ =gUnknown_2023FF8
- ldr r4, _080DD64C @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080DD71A
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _080DD6BE
- .align 2, 0
-_080DD648: .4byte gUnknown_2023FF8
-_080DD64C: .4byte gActiveBattler
-_080DD650:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DD68C
- ldr r5, _080DD684 @ =gUnknown_2023FF8
- ldr r4, _080DD688 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080DD71A
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _080DD6BE
- .align 2, 0
-_080DD684: .4byte gUnknown_2023FF8
-_080DD688: .4byte gActiveBattler
-_080DD68C:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080DD6D8
- ldr r5, _080DD6D0 @ =gUnknown_2023FF8
- ldr r4, _080DD6D4 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080DD71A
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
-_080DD6BE:
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- b _080DD71A
- .align 2, 0
-_080DD6D0: .4byte gUnknown_2023FF8
-_080DD6D4: .4byte gActiveBattler
-_080DD6D8:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080DD71A
- ldr r5, _080DD720 @ =gUnknown_2023FF8
- ldr r4, _080DD724 @ =gActiveBattler
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080DD71A
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl ActionSelectionDestroyCursorAt
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
-_080DD71A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DD720: .4byte gUnknown_2023FF8
-_080DD724: .4byte gActiveBattler
- thumb_func_end HandleInputChooseAction_0
-
- thumb_func_start sub_80DD728
-sub_80DD728: @ 80DD728
- push {lr}
- ldr r2, _080DD750 @ =gSprites
- ldr r1, _080DD754 @ =gBattlerSpriteIds
- ldr r0, _080DD758 @ =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, _080DD75C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080DD74C
- bl SafariBufferExecCompleted
-_080DD74C:
- pop {r0}
- bx r0
- .align 2, 0
-_080DD750: .4byte gSprites
-_080DD754: .4byte gBattlerSpriteIds
-_080DD758: .4byte gActiveBattler
-_080DD75C: .4byte SpriteCallbackDummy
- thumb_func_end sub_80DD728
-
- thumb_func_start CompleteOnInactiveTextPrinter_3
-CompleteOnInactiveTextPrinter_3: @ 80DD760
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080DD772
- bl SafariBufferExecCompleted
-_080DD772:
- pop {r0}
- bx r0
- thumb_func_end CompleteOnInactiveTextPrinter_3
-
- thumb_func_start sub_80DD778
-sub_80DD778: @ 80DD778
- push {lr}
- ldr r2, _080DD7A0 @ =gSprites
- ldr r1, _080DD7A4 @ =gUnknown_3004FF0
- ldr r0, _080DD7A8 @ =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, _080DD7AC @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080DD79C
- bl SafariBufferExecCompleted
-_080DD79C:
- pop {r0}
- bx r0
- .align 2, 0
-_080DD7A0: .4byte gSprites
-_080DD7A4: .4byte gUnknown_3004FF0
-_080DD7A8: .4byte gActiveBattler
-_080DD7AC: .4byte SpriteCallbackDummy
- thumb_func_end sub_80DD778
-
- thumb_func_start sub_80DD7B0
-sub_80DD7B0: @ 80DD7B0
- push {lr}
- ldr r0, _080DD7E0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080DD7DA
- ldr r2, _080DD7E4 @ =gMain
- ldr r0, _080DD7E8 @ =0x00000439
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _080DD7EC @ =gUnknown_3004F80
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_080DD7DA:
- pop {r0}
- bx r0
- .align 2, 0
-_080DD7E0: .4byte gPaletteFade
-_080DD7E4: .4byte gMain
-_080DD7E8: .4byte 0x00000439
-_080DD7EC: .4byte gUnknown_3004F80
- thumb_func_end sub_80DD7B0
-
- thumb_func_start CompleteOnSpecialAnimDone_0
-CompleteOnSpecialAnimDone_0: @ 80DD7F0
- push {lr}
- ldr r0, _080DD820 @ =gUnknown_2024005
- ldrb r0, [r0]
- cmp r0, 0
- beq _080DD816
- ldr r0, _080DD824 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _080DD828 @ =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 _080DD81A
-_080DD816:
- bl SafariBufferExecCompleted
-_080DD81A:
- pop {r0}
- bx r0
- .align 2, 0
-_080DD820: .4byte gUnknown_2024005
-_080DD824: .4byte gUnknown_2024018
-_080DD828: .4byte gActiveBattler
- thumb_func_end CompleteOnSpecialAnimDone_0
-
- thumb_func_start sub_80DD82C
-sub_80DD82C: @ 80DD82C
- push {lr}
- ldr r0, _080DD84C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080DD848
- ldr r1, _080DD850 @ =gUnknown_3004FE0
- ldr r0, _080DD854 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DD858 @ =CompleteWhenChosePokeblock
- str r1, [r0]
-_080DD848:
- pop {r0}
- bx r0
- .align 2, 0
-_080DD84C: .4byte gPaletteFade
-_080DD850: .4byte gUnknown_3004FE0
-_080DD854: .4byte gActiveBattler
-_080DD858: .4byte CompleteWhenChosePokeblock
- thumb_func_end sub_80DD82C
-
- thumb_func_start CompleteWhenChosePokeblock
-CompleteWhenChosePokeblock: @ 80DD85C
- push {lr}
- ldr r0, _080DD888 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _080DD88C @ =sub_8011100
- cmp r1, r0
- bne _080DD882
- ldr r0, _080DD890 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080DD882
- ldr r0, _080DD894 @ =gSpecialVar_ItemId
- ldrh r1, [r0]
- movs r0, 0x1
- bl EmitOneReturnValue
- bl SafariBufferExecCompleted
-_080DD882:
- pop {r0}
- bx r0
- .align 2, 0
-_080DD888: .4byte gMain
-_080DD88C: .4byte sub_8011100
-_080DD890: .4byte gPaletteFade
-_080DD894: .4byte gSpecialVar_ItemId
- thumb_func_end CompleteWhenChosePokeblock
-
- thumb_func_start CompleteOnFinishedBattleAnimation_3
-CompleteOnFinishedBattleAnimation_3: @ 80DD898
- push {lr}
- ldr r0, _080DD8C0 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _080DD8C4 @ =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 _080DD8BA
- bl SafariBufferExecCompleted
-_080DD8BA:
- pop {r0}
- bx r0
- .align 2, 0
-_080DD8C0: .4byte gUnknown_2024018
-_080DD8C4: .4byte gActiveBattler
- thumb_func_end CompleteOnFinishedBattleAnimation_3
-
- thumb_func_start SafariBufferExecCompleted
-SafariBufferExecCompleted: @ 80DD8C8
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _080DD908 @ =gUnknown_3004FE0
- ldr r4, _080DD90C @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DD910 @ =SafariBufferRunCommand
- str r1, [r0]
- ldr r0, _080DD914 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080DD91C
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl PrepareBufferDataTransferLink
- ldr r1, _080DD918 @ =gUnknown_2022BC4
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _080DD92E
- .align 2, 0
-_080DD908: .4byte gUnknown_3004FE0
-_080DD90C: .4byte gActiveBattler
-_080DD910: .4byte SafariBufferRunCommand
-_080DD914: .4byte gBattleTypeFlags
-_080DD918: .4byte gUnknown_2022BC4
-_080DD91C:
- ldr r2, _080DD938 @ =gUnknown_2023BC8
- ldr r1, _080DD93C @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_080DD92E:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DD938: .4byte gUnknown_2023BC8
-_080DD93C: .4byte gBitTable
- thumb_func_end SafariBufferExecCompleted
-
- thumb_func_start CompleteOnFinishedStatusAnimation_3
-CompleteOnFinishedStatusAnimation_3: @ 80DD940
- push {lr}
- ldr r0, _080DD968 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r0, _080DD96C @ =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 _080DD962
- bl SafariBufferExecCompleted
-_080DD962:
- pop {r0}
- bx r0
- .align 2, 0
-_080DD968: .4byte gUnknown_2024018
-_080DD96C: .4byte gActiveBattler
- thumb_func_end CompleteOnFinishedStatusAnimation_3
-
- thumb_func_start sub_80DD970
-sub_80DD970: @ 80DD970
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DD970
-
- thumb_func_start sub_80DD97C
-sub_80DD97C: @ 80DD97C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DD97C
-
- thumb_func_start sub_80DD988
-sub_80DD988: @ 80DD988
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DD988
-
- thumb_func_start sub_80DD994
-sub_80DD994: @ 80DD994
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DD994
-
- thumb_func_start sub_80DD9A0
-sub_80DD9A0: @ 80DD9A0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DD9A0
-
- thumb_func_start sub_80DD9AC
-sub_80DD9AC: @ 80DD9AC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DD9AC
-
- thumb_func_start sub_80DD9B8
-sub_80DD9B8: @ 80DD9B8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DD9B8
-
- thumb_func_start SafariHandleDrawTrainerPic
-SafariHandleDrawTrainerPic: @ 80DD9C4
- push {r4-r6,lr}
- ldr r4, _080DDA7C @ =gSaveBlock2Ptr
- ldr r0, [r4]
- ldrb r0, [r0, 0x8]
- ldr r5, _080DDA80 @ =gActiveBattler
- ldrb r1, [r5]
- bl sub_8034750
- ldr r0, [r4]
- ldrb r6, [r0, 0x8]
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r0, _080DDA84 @ =gMultiuseSpriteTemplate
- ldr r2, _080DDA88 @ =gUnknown_8239F8C
- ldr r1, [r4]
- ldrb r1, [r1, 0x8]
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1]
- movs r2, 0x8
- subs r2, r1
- lsls r2, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r2, r1
- asrs r2, 16
- movs r1, 0x50
- movs r3, 0x1E
- bl CreateSprite
- ldr r6, _080DDA8C @ =gBattlerSpriteIds
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, _080DDA90 @ =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _080DDA94 @ =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _080DDA98 @ =sub_8033EEC
- str r1, [r0]
- ldr r1, _080DDA9C @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DDAA0 @ =sub_80DD728
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080DDA7C: .4byte gSaveBlock2Ptr
-_080DDA80: .4byte gActiveBattler
-_080DDA84: .4byte gMultiuseSpriteTemplate
-_080DDA88: .4byte gUnknown_8239F8C
-_080DDA8C: .4byte gBattlerSpriteIds
-_080DDA90: .4byte gSprites
-_080DDA94: .4byte 0x0000fffe
-_080DDA98: .4byte sub_8033EEC
-_080DDA9C: .4byte gUnknown_3004FE0
-_080DDAA0: .4byte sub_80DD728
- thumb_func_end SafariHandleDrawTrainerPic
-
- thumb_func_start sub_80DDAA4
-sub_80DDAA4: @ 80DDAA4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDAA4
-
- thumb_func_start sub_80DDAB0
-sub_80DDAB0: @ 80DDAB0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDAB0
-
- thumb_func_start sub_80DDABC
-sub_80DDABC: @ 80DDABC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDABC
-
- thumb_func_start sub_80DDAC8
-sub_80DDAC8: @ 80DDAC8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDAC8
-
- thumb_func_start sub_80DDAD4
-sub_80DDAD4: @ 80DDAD4
- push {r4,r5,lr}
- ldr r0, _080DDB14 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r1, [r0, 0x8]
- movs r0, 0x4
- strb r0, [r1, 0x8]
- ldr r1, _080DDB18 @ =gUnknown_2024005
- movs r0, 0x1
- strb r0, [r1]
- ldr r5, _080DDB1C @ =gActiveBattler
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x4
- bl InitAndLaunchSpecialAnimation
- ldr r1, _080DDB20 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DDB24 @ =CompleteOnSpecialAnimDone_0
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DDB14: .4byte gUnknown_2024018
-_080DDB18: .4byte gUnknown_2024005
-_080DDB1C: .4byte gActiveBattler
-_080DDB20: .4byte gUnknown_3004FE0
-_080DDB24: .4byte CompleteOnSpecialAnimDone_0
- thumb_func_end sub_80DDAD4
-
- thumb_func_start sub_80DDB28
-sub_80DDB28: @ 80DDB28
- push {r4,r5,lr}
- ldr r1, _080DDB70 @ =gUnknown_2022BC4
- ldr r5, _080DDB74 @ =gActiveBattler
- ldrb r0, [r5]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- ldr r0, _080DDB78 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0, 0x8]
- strb r1, [r0, 0x8]
- ldr r1, _080DDB7C @ =gUnknown_2024005
- movs r0, 0x1
- strb r0, [r1]
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x4
- bl InitAndLaunchSpecialAnimation
- ldr r1, _080DDB80 @ =gUnknown_3004FE0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DDB84 @ =CompleteOnSpecialAnimDone_0
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DDB70: .4byte gUnknown_2022BC4
-_080DDB74: .4byte gActiveBattler
-_080DDB78: .4byte gUnknown_2024018
-_080DDB7C: .4byte gUnknown_2024005
-_080DDB80: .4byte gUnknown_3004FE0
-_080DDB84: .4byte CompleteOnSpecialAnimDone_0
- thumb_func_end sub_80DDB28
-
- thumb_func_start sub_80DDB88
-sub_80DDB88: @ 80DDB88
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDB88
-
- thumb_func_start sub_80DDB94
-sub_80DDB94: @ 80DDB94
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDB94
-
- thumb_func_start sub_80DDBA0
-sub_80DDBA0: @ 80DDBA0
- push {r4,lr}
- ldr r0, _080DDBD4 @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080DDBD8 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _080DDBDC @ =gActiveBattler
- ldrb r4, [r0]
- lsls r4, 9
- ldr r0, _080DDBE0 @ =gUnknown_2022BC6
- adds r4, r0
- ldrh r0, [r4]
- bl sub_80D7274
- ldrh r0, [r4]
- bl sub_80D89B0
- lsls r0, 24
- cmp r0, 0
- beq _080DDBE8
- ldr r0, _080DDBE4 @ =gDisplayedStringBattle
- movs r1, 0x40
- bl sub_80D87BC
- b _080DDBF0
- .align 2, 0
-_080DDBD4: .4byte gBattle_BG0_X
-_080DDBD8: .4byte gBattle_BG0_Y
-_080DDBDC: .4byte gActiveBattler
-_080DDBE0: .4byte gUnknown_2022BC6
-_080DDBE4: .4byte gDisplayedStringBattle
-_080DDBE8:
- ldr r0, _080DDC04 @ =gDisplayedStringBattle
- movs r1, 0
- bl sub_80D87BC
-_080DDBF0:
- ldr r1, _080DDC08 @ =gUnknown_3004FE0
- ldr r0, _080DDC0C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DDC10 @ =CompleteOnInactiveTextPrinter_3
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DDC04: .4byte gDisplayedStringBattle
-_080DDC08: .4byte gUnknown_3004FE0
-_080DDC0C: .4byte gActiveBattler
-_080DDC10: .4byte CompleteOnInactiveTextPrinter_3
- thumb_func_end sub_80DDBA0
-
- thumb_func_start sub_80DDC14
-sub_80DDC14: @ 80DDC14
- push {lr}
- ldr r0, _080DDC2C @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080DDC30
- bl sub_80DDBA0
- b _080DDC34
- .align 2, 0
-_080DDC2C: .4byte gActiveBattler
-_080DDC30:
- bl SafariBufferExecCompleted
-_080DDC34:
- pop {r0}
- bx r0
- thumb_func_end sub_80DDC14
-
- thumb_func_start sub_80DDC38
-sub_80DDC38: @ 80DDC38
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _080DDC5E
- ldr r0, _080DDC64 @ =gBattle_BG0_X
- strh r1, [r0]
- ldr r1, _080DDC68 @ =gBattle_BG0_Y
- movs r0, 0xA0
- strh r0, [r1]
- ldr r1, _080DDC6C @ =gUnknown_3004FE0
- ldr r0, _080DDC70 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DDC74 @ =HandleInputChooseAction_0
- str r1, [r0]
-_080DDC5E:
- pop {r0}
- bx r0
- .align 2, 0
-_080DDC64: .4byte gBattle_BG0_X
-_080DDC68: .4byte gBattle_BG0_Y
-_080DDC6C: .4byte gUnknown_3004FE0
-_080DDC70: .4byte gActiveBattler
-_080DDC74: .4byte HandleInputChooseAction_0
- thumb_func_end sub_80DDC38
-
- thumb_func_start sub_80DDC78
-sub_80DDC78: @ 80DDC78
- push {r4,lr}
- ldr r1, _080DDCCC @ =gUnknown_3004FE0
- ldr r0, _080DDCD0 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DDCD4 @ =sub_80DDC38
- str r1, [r0]
- ldr r0, _080DDCD8 @ =gUnknown_83FDA4C
- movs r1, 0
- bl sub_80D87BC
- ldr r0, _080DDCDC @ =gUnknown_83FE747
- movs r1, 0x2
- bl sub_80D87BC
- movs r4, 0
-_080DDC9A:
- lsls r0, r4, 24
- lsrs r0, 24
- bl ActionSelectionDestroyCursorAt
- adds r4, 0x1
- cmp r4, 0x3
- ble _080DDC9A
- ldr r1, _080DDCE0 @ =gUnknown_2023FF8
- ldr r0, _080DDCD0 @ =gActiveBattler
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- ldr r0, _080DDCE4 @ =gUnknown_83FE6E6
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080DDCE8 @ =gDisplayedStringBattle
- movs r1, 0x1
- bl sub_80D87BC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DDCCC: .4byte gUnknown_3004FE0
-_080DDCD0: .4byte gActiveBattler
-_080DDCD4: .4byte sub_80DDC38
-_080DDCD8: .4byte gUnknown_83FDA4C
-_080DDCDC: .4byte gUnknown_83FE747
-_080DDCE0: .4byte gUnknown_2023FF8
-_080DDCE4: .4byte gUnknown_83FE6E6
-_080DDCE8: .4byte gDisplayedStringBattle
- thumb_func_end sub_80DDC78
-
- thumb_func_start sub_80DDCEC
-sub_80DDCEC: @ 80DDCEC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDCEC
-
- thumb_func_start sub_80DDCF8
-sub_80DDCF8: @ 80DDCF8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDCF8
-
- thumb_func_start sub_80DDD04
-sub_80DDD04: @ 80DDD04
- push {lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _080DDD34 @ =gUnknown_3004FE0
- ldr r2, _080DDD38 @ =gActiveBattler
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DDD3C @ =sub_80DD82C
- str r1, [r0]
- ldr r1, _080DDD40 @ =gBattlerInMenuId
- ldrb r0, [r2]
- strb r0, [r1]
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080DDD34: .4byte gUnknown_3004FE0
-_080DDD38: .4byte gActiveBattler
-_080DDD3C: .4byte sub_80DD82C
-_080DDD40: .4byte gBattlerInMenuId
- thumb_func_end sub_80DDD04
-
- thumb_func_start sub_80DDD44
-sub_80DDD44: @ 80DDD44
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDD44
-
- thumb_func_start sub_80DDD50
-sub_80DDD50: @ 80DDD50
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDD50
-
- thumb_func_start sub_80DDD5C
-sub_80DDD5C: @ 80DDD5C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDD5C
-
- thumb_func_start sub_80DDD68
-sub_80DDD68: @ 80DDD68
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDD68
-
- thumb_func_start SafariHandleStatusIconUpdate
-SafariHandleStatusIconUpdate: @ 80DDD74
- push {lr}
- ldr r0, _080DDDA0 @ =gUnknown_3004FF0
- ldr r1, _080DDDA4 @ =gActiveBattler
- ldrb r1, [r1]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _080DDDA8 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _080DDDAC @ =gPlayerParty
- adds r1, r2
- movs r2, 0xB
- bl UpdateHealthboxAttribute
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080DDDA0: .4byte gUnknown_3004FF0
-_080DDDA4: .4byte gActiveBattler
-_080DDDA8: .4byte gBattlerPartyIndexes
-_080DDDAC: .4byte gPlayerParty
- thumb_func_end SafariHandleStatusIconUpdate
-
- thumb_func_start sub_80DDDB0
-sub_80DDDB0: @ 80DDDB0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDDB0
-
- thumb_func_start sub_80DDDBC
-sub_80DDDBC: @ 80DDDBC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDDBC
-
- thumb_func_start sub_80DDDC8
-sub_80DDDC8: @ 80DDDC8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDDC8
-
- thumb_func_start sub_80DDDD4
-sub_80DDDD4: @ 80DDDD4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDDD4
-
- thumb_func_start sub_80DDDE0
-sub_80DDDE0: @ 80DDDE0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDDE0
-
- thumb_func_start sub_80DDDEC
-sub_80DDDEC: @ 80DDDEC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDDEC
-
- thumb_func_start sub_80DDDF8
-sub_80DDDF8: @ 80DDDF8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDDF8
-
- thumb_func_start sub_80DDE04
-sub_80DDE04: @ 80DDE04
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDE04
-
- thumb_func_start sub_80DDE10
-sub_80DDE10: @ 80DDE10
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDE10
-
- thumb_func_start sub_80DDE1C
-sub_80DDE1C: @ 80DDE1C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDE1C
-
- thumb_func_start sub_80DDE28
-sub_80DDE28: @ 80DDE28
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDE28
-
- thumb_func_start sub_80DDE34
-sub_80DDE34: @ 80DDE34
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDE34
-
- thumb_func_start sub_80DDE40
-sub_80DDE40: @ 80DDE40
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDE40
-
- thumb_func_start sub_80DDE4C
-sub_80DDE4C: @ 80DDE4C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDE4C
-
- thumb_func_start sub_80DDE58
-sub_80DDE58: @ 80DDE58
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDE58
-
- thumb_func_start sub_80DDE64
-sub_80DDE64: @ 80DDE64
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDE64
-
- thumb_func_start SafariHandlePlaySE
-SafariHandlePlaySE: @ 80DDE70
- push {r4,lr}
- ldr r4, _080DDEAC @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _080DDE84
- movs r3, 0xC0
-_080DDE84:
- ldr r2, _080DDEB0 @ =gUnknown_2022BC4
- 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 SafariBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DDEAC: .4byte gActiveBattler
-_080DDEB0: .4byte gUnknown_2022BC4
- thumb_func_end SafariHandlePlaySE
-
- thumb_func_start SafariHandlecmd44
-SafariHandlecmd44: @ 80DDEB4
- push {lr}
- ldr r2, _080DDEDC @ =gUnknown_2022BC4
- ldr r0, _080DDEE0 @ =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 SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080DDEDC: .4byte gUnknown_2022BC4
-_080DDEE0: .4byte gActiveBattler
- thumb_func_end SafariHandlecmd44
-
- thumb_func_start SafariHandleFaintingCry
-SafariHandleFaintingCry: @ 80DDEE4
- push {lr}
- ldr r1, _080DDF14 @ =gBattlerPartyIndexes
- ldr r0, _080DDF18 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080DDF1C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- bl PlayCry1
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080DDF14: .4byte gBattlerPartyIndexes
-_080DDF18: .4byte gActiveBattler
-_080DDF1C: .4byte gPlayerParty
- thumb_func_end SafariHandleFaintingCry
-
- thumb_func_start SafariHandleIntroSlide
-SafariHandleIntroSlide: @ 80DDF20
- push {lr}
- ldr r1, _080DDF48 @ =gUnknown_2022BC4
- ldr r0, _080DDF4C @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80BC3A0
- ldr r2, _080DDF50 @ =gUnknown_2023F4C
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_080DDF48: .4byte gUnknown_2022BC4
-_080DDF4C: .4byte gActiveBattler
-_080DDF50: .4byte gUnknown_2023F4C
- thumb_func_end SafariHandleIntroSlide
-
- thumb_func_start SafariHandleIntroTrainerBallThrow
-SafariHandleIntroTrainerBallThrow: @ 80DDF54
- push {r4,r5,lr}
- ldr r5, _080DDF98 @ =gUnknown_3004FF0
- ldr r4, _080DDF9C @ =gActiveBattler
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _080DDFA0 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _080DDFA4 @ =gPlayerParty
- adds r1, r2
- movs r2, 0xA
- bl UpdateHealthboxAttribute
- ldrb r0, [r4]
- bl sub_804BD94
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl SetHealthboxSpriteVisible
- ldr r1, _080DDFA8 @ =gUnknown_3004FE0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080DDFAC @ =sub_80DD778
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DDF98: .4byte gUnknown_3004FF0
-_080DDF9C: .4byte gActiveBattler
-_080DDFA0: .4byte gBattlerPartyIndexes
-_080DDFA4: .4byte gPlayerParty
-_080DDFA8: .4byte gUnknown_3004FE0
-_080DDFAC: .4byte sub_80DD778
- thumb_func_end SafariHandleIntroTrainerBallThrow
-
- thumb_func_start sub_80DDFB0
-sub_80DDFB0: @ 80DDFB0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDFB0
-
- thumb_func_start sub_80DDFBC
-sub_80DDFBC: @ 80DDFBC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDFBC
-
- thumb_func_start sub_80DDFC8
-sub_80DDFC8: @ 80DDFC8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDFC8
-
- thumb_func_start sub_80DDFD4
-sub_80DDFD4: @ 80DDFD4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DDFD4
-
- thumb_func_start SafariHandleBattleAnimation
-SafariHandleBattleAnimation: @ 80DDFE0
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r5, _080DE018 @ =gUnknown_2022BC4
- ldr r6, _080DE01C @ =gActiveBattler
- ldrb r2, [r6]
- lsls r1, r2, 9
- adds r0, r5, 0x1
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, 0x3
- adds r1, r5
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- str r4, [sp]
- adds r0, r2, 0
- adds r1, r2, 0
- bl TryHandleLaunchBattleTableAnimation
- lsls r0, 24
- cmp r0, 0
- beq _080DE020
- bl SafariBufferExecCompleted
- b _080DE02C
- .align 2, 0
-_080DE018: .4byte gUnknown_2022BC4
-_080DE01C: .4byte gActiveBattler
-_080DE020:
- ldr r0, _080DE034 @ =gUnknown_3004FE0
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _080DE038 @ =CompleteOnFinishedBattleAnimation_3
- str r0, [r1]
-_080DE02C:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080DE034: .4byte gUnknown_3004FE0
-_080DE038: .4byte CompleteOnFinishedBattleAnimation_3
- thumb_func_end SafariHandleBattleAnimation
-
- thumb_func_start sub_80DE03C
-sub_80DE03C: @ 80DE03C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DE03C
-
- thumb_func_start sub_80DE048
-sub_80DE048: @ 80DE048
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_80DE048
-
- thumb_func_start SafariHandleCmd55
-SafariHandleCmd55: @ 80DE054
- push {r4,lr}
- ldr r2, _080DE098 @ =gBattleOutcome
- ldr r1, _080DE09C @ =gUnknown_2022BC4
- ldr r4, _080DE0A0 @ =gActiveBattler
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl SafariBufferExecCompleted
- ldr r0, _080DE0A4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x6
- ands r0, r1
- cmp r0, 0x2
- bne _080DE090
- ldr r0, _080DE0A8 @ =gUnknown_3004FE0
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _080DE0AC @ =sub_80DD7B0
- str r0, [r1]
-_080DE090:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DE098: .4byte gBattleOutcome
-_080DE09C: .4byte gUnknown_2022BC4
-_080DE0A0: .4byte gActiveBattler
-_080DE0A4: .4byte gBattleTypeFlags
-_080DE0A8: .4byte gUnknown_3004FE0
-_080DE0AC: .4byte sub_80DD7B0
- thumb_func_end SafariHandleCmd55
-
- thumb_func_start nullsub_80
-nullsub_80: @ 80DE0B0
- bx lr
- thumb_func_end nullsub_80
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_controllers.s b/asm/battle_controllers.s
deleted file mode 100644
index 5337929a1..000000000
--- a/asm/battle_controllers.s
+++ /dev/null
@@ -1,3392 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_800D230
-sub_800D230: @ 800D230
- push {lr}
- ldr r0, _0800D268 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0800D262
- ldr r0, _0800D26C @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800D24A
- bl sub_800B1F4
-_0800D24A:
- ldr r0, _0800D270 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800D256
- bl sub_8009804
-_0800D256:
- ldr r0, _0800D274 @ =sub_8081A90
- movs r1, 0
- bl CreateTask
- bl CreateTasksForSendRecvLinkBuffers
-_0800D262:
- pop {r0}
- bx r0
- .align 2, 0
-_0800D268: .4byte gBattleTypeFlags
-_0800D26C: .4byte gWirelessCommType
-_0800D270: .4byte gReceivedRemoteLinkPlayers
-_0800D274: .4byte sub_8081A90
- thumb_func_end sub_800D230
-
- thumb_func_start sub_800D278
-sub_800D278: @ 800D278
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r1, _0800D2E4 @ =gUnknown_3004F84
- ldr r0, _0800D2E8 @ =nullsub_12
- str r0, [r1]
- movs r2, 0
- ldr r0, _0800D2EC @ =nullsub_13
- mov r8, r0
- movs r3, 0
- ldr r1, _0800D2F0 @ =gUnknown_3004FE0
- mov r12, r1
- ldr r7, _0800D2F4 @ =gUnknown_2023BD6
- movs r6, 0xFF
- ldr r5, _0800D2F8 @ =gUnknown_2023FF8
- ldr r4, _0800D2FC @ =gUnknown_2023FFC
-_0800D298:
- mov r0, r8
- mov r1, r12
- adds r1, 0x4
- mov r12, r1
- subs r1, 0x4
- stm r1!, {r0}
- adds r1, r2, r7
- ldrb r0, [r1]
- orrs r0, r6
- strb r0, [r1]
- adds r0, r2, r5
- strb r3, [r0]
- adds r0, r2, r4
- strb r3, [r0]
- adds r2, 0x1
- cmp r2, 0x3
- ble _0800D298
- bl sub_800D230
- ldr r0, _0800D300 @ =gUnknown_2023BC8
- movs r4, 0
- str r4, [r0]
- bl ClearBattleAnimationVars
- bl ClearBattleMonForms
- bl BattleAI_HandleItemUseBeforeAISetup
- ldr r0, _0800D304 @ =gUnknown_2022B54
- str r4, [r0]
- ldr r0, _0800D308 @ =gUnknown_2023DDC
- strb r4, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D2E4: .4byte gUnknown_3004F84
-_0800D2E8: .4byte nullsub_12
-_0800D2EC: .4byte nullsub_13
-_0800D2F0: .4byte gUnknown_3004FE0
-_0800D2F4: .4byte gUnknown_2023BD6
-_0800D2F8: .4byte gUnknown_2023FF8
-_0800D2FC: .4byte gUnknown_2023FFC
-_0800D300: .4byte gUnknown_2023BC8
-_0800D304: .4byte gUnknown_2022B54
-_0800D308: .4byte gUnknown_2023DDC
- thumb_func_end sub_800D278
-
- thumb_func_start sub_800D30C
-sub_800D30C: @ 800D30C
- push {r4,r5,lr}
- ldr r0, _0800D320 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0800D324
- bl sub_800D494
- b _0800D328
- .align 2, 0
-_0800D320: .4byte gBattleTypeFlags
-_0800D324:
- bl sub_800D364
-_0800D328:
- bl sub_800D768
- ldr r0, _0800D35C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0800D356
- movs r4, 0
- ldr r0, _0800D360 @ =gBattlersCount
- ldrb r1, [r0]
- cmp r4, r1
- bge _0800D356
- adds r5, r0, 0
-_0800D344:
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_8127DA8
- adds r4, 0x1
- ldrb r0, [r5]
- cmp r4, r0
- blt _0800D344
-_0800D356:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D35C: .4byte gBattleTypeFlags
-_0800D360: .4byte gBattlersCount
- thumb_func_end sub_800D30C
-
- thumb_func_start sub_800D364
-sub_800D364: @ 800D364
- push {r4,lr}
- ldr r0, _0800D398 @ =gBattleTypeFlags
- ldr r2, [r0]
- movs r4, 0x1
- adds r3, r2, 0
- ands r3, r4
- cmp r3, 0
- bne _0800D414
- ldr r1, _0800D39C @ =gUnknown_3004F84
- ldr r0, _0800D3A0 @ =sub_80123C0
- str r0, [r1]
- movs r0, 0x80
- lsls r0, 9
- ands r0, r2
- cmp r0, 0
- beq _0800D3B4
- ldr r2, _0800D3A4 @ =gUnknown_3004FE0
- ldr r1, _0800D3A8 @ =sub_81560A4
- str r1, [r2]
- ldr r0, _0800D3AC @ =gUnknown_2023BD6
- strb r3, [r0]
- str r1, [r2, 0x4]
- strb r4, [r0, 0x1]
- ldr r1, _0800D3B0 @ =gBattlersCount
- movs r0, 0x2
- b _0800D478
- .align 2, 0
-_0800D398: .4byte gBattleTypeFlags
-_0800D39C: .4byte gUnknown_3004F84
-_0800D3A0: .4byte sub_80123C0
-_0800D3A4: .4byte gUnknown_3004FE0
-_0800D3A8: .4byte sub_81560A4
-_0800D3AC: .4byte gUnknown_2023BD6
-_0800D3B0: .4byte gBattlersCount
-_0800D3B4:
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _0800D3CC
- ldr r1, _0800D3C4 @ =gUnknown_3004FE0
- ldr r0, _0800D3C8 @ =sub_80DD538
- b _0800D3E8
- .align 2, 0
-_0800D3C4: .4byte gUnknown_3004FE0
-_0800D3C8: .4byte sub_80DD538
-_0800D3CC:
- movs r0, 0x84
- lsls r0, 2
- ands r2, r0
- cmp r2, 0
- beq _0800D3E4
- ldr r1, _0800D3DC @ =gUnknown_3004FE0
- ldr r0, _0800D3E0 @ =sub_80E75B0
- b _0800D3E8
- .align 2, 0
-_0800D3DC: .4byte gUnknown_3004FE0
-_0800D3E0: .4byte sub_80E75B0
-_0800D3E4:
- ldr r1, _0800D400 @ =gUnknown_3004FE0
- ldr r0, _0800D404 @ =SetBankFuncToPlayerBufferRunCommand
-_0800D3E8:
- str r0, [r1]
- adds r2, r1, 0
- ldr r1, _0800D408 @ =gUnknown_2023BD6
- movs r0, 0
- strb r0, [r1]
- ldr r0, _0800D40C @ =sub_8035A7C
- str r0, [r2, 0x4]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- ldr r1, _0800D410 @ =gBattlersCount
- movs r0, 0x2
- b _0800D478
- .align 2, 0
-_0800D400: .4byte gUnknown_3004FE0
-_0800D404: .4byte SetBankFuncToPlayerBufferRunCommand
-_0800D408: .4byte gUnknown_2023BD6
-_0800D40C: .4byte sub_8035A7C
-_0800D410: .4byte gBattlersCount
-_0800D414:
- ldr r1, _0800D444 @ =gUnknown_3004F84
- ldr r0, _0800D448 @ =sub_80123C0
- str r0, [r1]
- movs r3, 0x80
- lsls r3, 9
- ands r3, r2
- cmp r3, 0
- beq _0800D458
- ldr r3, _0800D44C @ =gUnknown_3004FE0
- ldr r1, _0800D450 @ =sub_81560A4
- str r1, [r3]
- ldr r2, _0800D454 @ =gUnknown_2023BD6
- movs r0, 0
- strb r0, [r2]
- str r1, [r3, 0x4]
- strb r4, [r2, 0x1]
- str r1, [r3, 0x8]
- movs r0, 0x2
- strb r0, [r2, 0x2]
- str r1, [r3, 0xC]
- movs r0, 0x3
- strb r0, [r2, 0x3]
- b _0800D474
- .align 2, 0
-_0800D444: .4byte gUnknown_3004F84
-_0800D448: .4byte sub_80123C0
-_0800D44C: .4byte gUnknown_3004FE0
-_0800D450: .4byte sub_81560A4
-_0800D454: .4byte gUnknown_2023BD6
-_0800D458:
- ldr r2, _0800D480 @ =gUnknown_3004FE0
- ldr r0, _0800D484 @ =SetBankFuncToPlayerBufferRunCommand
- str r0, [r2]
- ldr r1, _0800D488 @ =gUnknown_2023BD6
- strb r3, [r1]
- ldr r3, _0800D48C @ =sub_8035A7C
- str r3, [r2, 0x4]
- strb r4, [r1, 0x1]
- str r0, [r2, 0x8]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- str r3, [r2, 0xC]
- movs r0, 0x3
- strb r0, [r1, 0x3]
-_0800D474:
- ldr r1, _0800D490 @ =gBattlersCount
- movs r0, 0x4
-_0800D478:
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D480: .4byte gUnknown_3004FE0
-_0800D484: .4byte SetBankFuncToPlayerBufferRunCommand
-_0800D488: .4byte gUnknown_2023BD6
-_0800D48C: .4byte sub_8035A7C
-_0800D490: .4byte gBattlersCount
- thumb_func_end sub_800D364
-
- thumb_func_start sub_800D494
-sub_800D494: @ 800D494
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, _0800D4D0 @ =gBattleTypeFlags
- ldr r0, [r4]
- movs r5, 0x1
- adds r3, r0, 0
- ands r3, r5
- cmp r3, 0
- bne _0800D51C
- movs r4, 0x4
- ands r4, r0
- cmp r4, 0
- beq _0800D4F0
- ldr r1, _0800D4D4 @ =gUnknown_3004F84
- ldr r0, _0800D4D8 @ =sub_80123C0
- str r0, [r1]
- ldr r2, _0800D4DC @ =gUnknown_3004FE0
- ldr r0, _0800D4E0 @ =SetBankFuncToPlayerBufferRunCommand
- str r0, [r2]
- ldr r1, _0800D4E4 @ =gUnknown_2023BD6
- strb r3, [r1]
- ldr r0, _0800D4E8 @ =sub_803A668
- str r0, [r2, 0x4]
- strb r5, [r1, 0x1]
- ldr r1, _0800D4EC @ =gBattlersCount
- movs r0, 0x2
- b _0800D752
- .align 2, 0
-_0800D4D0: .4byte gBattleTypeFlags
-_0800D4D4: .4byte gUnknown_3004F84
-_0800D4D8: .4byte sub_80123C0
-_0800D4DC: .4byte gUnknown_3004FE0
-_0800D4E0: .4byte SetBankFuncToPlayerBufferRunCommand
-_0800D4E4: .4byte gUnknown_2023BD6
-_0800D4E8: .4byte sub_803A668
-_0800D4EC: .4byte gBattlersCount
-_0800D4F0:
- ldr r2, _0800D508 @ =gUnknown_3004FE0
- ldr r0, _0800D50C @ =SetBankFuncToPlayerBufferRunCommand
- str r0, [r2, 0x4]
- ldr r1, _0800D510 @ =gUnknown_2023BD6
- strb r4, [r1, 0x1]
- ldr r0, _0800D514 @ =sub_803A668
- str r0, [r2]
- strb r5, [r1]
- ldr r1, _0800D518 @ =gBattlersCount
- movs r0, 0x2
- b _0800D752
- .align 2, 0
-_0800D508: .4byte gUnknown_3004FE0
-_0800D50C: .4byte SetBankFuncToPlayerBufferRunCommand
-_0800D510: .4byte gUnknown_2023BD6
-_0800D514: .4byte sub_803A668
-_0800D518: .4byte gBattlersCount
-_0800D51C:
- movs r5, 0x41
- ands r5, r0
- cmp r5, 0x1
- bne _0800D5A4
- movs r6, 0x4
- adds r3, r6, 0
- ands r3, r0
- cmp r3, 0
- beq _0800D56C
- ldr r1, _0800D554 @ =gUnknown_3004F84
- ldr r0, _0800D558 @ =sub_80123C0
- str r0, [r1]
- ldr r2, _0800D55C @ =gUnknown_3004FE0
- ldr r4, _0800D560 @ =SetBankFuncToPlayerBufferRunCommand
- str r4, [r2]
- ldr r1, _0800D564 @ =gUnknown_2023BD6
- movs r0, 0
- strb r0, [r1]
- ldr r3, _0800D568 @ =sub_803A668
- str r3, [r2, 0x4]
- strb r5, [r1, 0x1]
- str r4, [r2, 0x8]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- str r3, [r2, 0xC]
- movs r0, 0x3
- strb r0, [r1, 0x3]
- b _0800D588
- .align 2, 0
-_0800D554: .4byte gUnknown_3004F84
-_0800D558: .4byte sub_80123C0
-_0800D55C: .4byte gUnknown_3004FE0
-_0800D560: .4byte SetBankFuncToPlayerBufferRunCommand
-_0800D564: .4byte gUnknown_2023BD6
-_0800D568: .4byte sub_803A668
-_0800D56C:
- ldr r2, _0800D590 @ =gUnknown_3004FE0
- ldr r0, _0800D594 @ =SetBankFuncToPlayerBufferRunCommand
- str r0, [r2, 0x4]
- ldr r1, _0800D598 @ =gUnknown_2023BD6
- strb r3, [r1, 0x1]
- ldr r3, _0800D59C @ =sub_803A668
- str r3, [r2]
- strb r5, [r1]
- str r0, [r2, 0xC]
- movs r0, 0x2
- strb r0, [r1, 0x3]
- str r3, [r2, 0x8]
- movs r0, 0x3
- strb r0, [r1, 0x2]
-_0800D588:
- ldr r0, _0800D5A0 @ =gBattlersCount
- strb r6, [r0]
- b _0800D754
- .align 2, 0
-_0800D590: .4byte gUnknown_3004FE0
-_0800D594: .4byte SetBankFuncToPlayerBufferRunCommand
-_0800D598: .4byte gUnknown_2023BD6
-_0800D59C: .4byte sub_803A668
-_0800D5A0: .4byte gBattlersCount
-_0800D5A4:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, [r4]
- movs r1, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0800D5BC
- ldr r1, _0800D5E4 @ =gUnknown_3004F84
- ldr r0, _0800D5E8 @ =sub_80123C0
- str r0, [r1]
-_0800D5BC:
- movs r0, 0
- mov r10, r0
- ldr r1, _0800D5EC @ =gLinkPlayers
- mov r12, r1
- ldr r7, _0800D5F0 @ =gUnknown_2023BD6
- mov r8, r0
- ldr r6, _0800D5F4 @ =gBattlerPartyIndexes
- movs r4, 0
- movs r2, 0x3
- mov r9, r2
-_0800D5D0:
- mov r1, r12
- adds r0, r4, r1
- ldrh r0, [r0, 0x18]
- cmp r0, 0x2
- bgt _0800D5F8
- cmp r0, 0x1
- bge _0800D610
- cmp r0, 0
- beq _0800D5FC
- b _0800D61A
- .align 2, 0
-_0800D5E4: .4byte gUnknown_3004F84
-_0800D5E8: .4byte sub_80123C0
-_0800D5EC: .4byte gLinkPlayers
-_0800D5F0: .4byte gUnknown_2023BD6
-_0800D5F4: .4byte gBattlerPartyIndexes
-_0800D5F8:
- cmp r0, 0x3
- bne _0800D61A
-_0800D5FC:
- ldr r0, _0800D60C @ =gLinkPlayers
- adds r0, r4, r0
- ldrb r0, [r0, 0x18]
- movs r1, 0
- bl sub_8127DA8
- b _0800D61A
- .align 2, 0
-_0800D60C: .4byte gLinkPlayers
-_0800D610:
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_8127DA8
-_0800D61A:
- cmp r10, r5
- bne _0800D66A
- ldr r0, _0800D640 @ =gLinkPlayers
- adds r3, r4, r0
- ldrh r1, [r3, 0x18]
- lsls r1, 2
- ldr r2, _0800D644 @ =gUnknown_3004FE0
- adds r1, r2
- ldr r2, _0800D648 @ =SetBankFuncToPlayerBufferRunCommand
- str r2, [r1]
- ldrh r1, [r3, 0x18]
- mov r12, r0
- cmp r1, 0x2
- bgt _0800D64C
- cmp r1, 0x1
- bge _0800D660
- cmp r1, 0
- beq _0800D650
- b _0800D740
- .align 2, 0
-_0800D640: .4byte gLinkPlayers
-_0800D644: .4byte gUnknown_3004FE0
-_0800D648: .4byte SetBankFuncToPlayerBufferRunCommand
-_0800D64C:
- cmp r1, 0x3
- bne _0800D740
-_0800D650:
- mov r1, r12
- adds r0, r4, r1
- ldrh r1, [r0, 0x18]
- adds r1, r7
- mov r2, r8
- strb r2, [r1]
- ldrh r0, [r0, 0x18]
- b _0800D726
-_0800D660:
- adds r1, r7
- movs r0, 0x2
- strb r0, [r1]
- ldrh r0, [r3, 0x18]
- b _0800D738
-_0800D66A:
- ldr r2, _0800D690 @ =gLinkPlayers
- adds r0, r4, r2
- ldrh r1, [r0, 0x18]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- mov r12, r2
- cmp r0, 0
- bne _0800D694
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- add r0, r12
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800D6A6
- b _0800D6EC
- .align 2, 0
-_0800D690: .4byte gLinkPlayers
-_0800D694:
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- add r0, r12
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800D6EC
-_0800D6A6:
- mov r0, r12
- adds r2, r4, r0
- ldrh r0, [r2, 0x18]
- lsls r0, 2
- ldr r1, _0800D6C8 @ =gUnknown_3004FE0
- adds r0, r1
- ldr r1, _0800D6CC @ =sub_80D4204
- str r1, [r0]
- ldrh r1, [r2, 0x18]
- cmp r1, 0x2
- bgt _0800D6D0
- cmp r1, 0x1
- bge _0800D6E4
- cmp r1, 0
- beq _0800D6D4
- b _0800D740
- .align 2, 0
-_0800D6C8: .4byte gUnknown_3004FE0
-_0800D6CC: .4byte sub_80D4204
-_0800D6D0:
- cmp r1, 0x3
- bne _0800D740
-_0800D6D4:
- mov r2, r12
- adds r0, r4, r2
- ldrh r1, [r0, 0x18]
- adds r1, r7
- mov r2, r8
- strb r2, [r1]
- ldrh r0, [r0, 0x18]
- b _0800D726
-_0800D6E4:
- adds r1, r7
- movs r0, 0x2
- strb r0, [r1]
- b _0800D736
-_0800D6EC:
- mov r0, r12
- adds r2, r4, r0
- ldrh r0, [r2, 0x18]
- lsls r0, 2
- ldr r1, _0800D70C @ =gUnknown_3004FE0
- adds r0, r1
- ldr r1, _0800D710 @ =sub_803A668
- str r1, [r0]
- ldrh r0, [r2, 0x18]
- cmp r0, 0x2
- bgt _0800D714
- cmp r0, 0x1
- bge _0800D730
- cmp r0, 0
- beq _0800D718
- b _0800D740
- .align 2, 0
-_0800D70C: .4byte gUnknown_3004FE0
-_0800D710: .4byte sub_803A668
-_0800D714:
- cmp r0, 0x3
- bne _0800D740
-_0800D718:
- mov r0, r12
- adds r2, r4, r0
- ldrh r0, [r2, 0x18]
- adds r0, r7
- movs r1, 0x1
- strb r1, [r0]
- ldrh r0, [r2, 0x18]
-_0800D726:
- lsls r0, 1
- adds r0, r6
- mov r1, r8
- strh r1, [r0]
- b _0800D740
-_0800D730:
- adds r0, r7
- mov r1, r9
- strb r1, [r0]
-_0800D736:
- ldrh r0, [r2, 0x18]
-_0800D738:
- lsls r0, 1
- adds r0, r6
- mov r2, r9
- strh r2, [r0]
-_0800D740:
- adds r4, 0x1C
- movs r0, 0x1
- add r10, r0
- mov r1, r10
- cmp r1, 0x3
- bgt _0800D74E
- b _0800D5D0
-_0800D74E:
- ldr r1, _0800D764 @ =gBattlersCount
- movs r0, 0x4
-_0800D752:
- strb r0, [r1]
-_0800D754:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D764: .4byte gBattlersCount
- thumb_func_end sub_800D494
-
- thumb_func_start sub_800D768
-sub_800D768: @ 800D768
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0800D788 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0800D780
- b _0800D89C
-_0800D780:
- movs r0, 0
- mov r8, r0
- b _0800D892
- .align 2, 0
-_0800D788: .4byte gBattleTypeFlags
-_0800D78C:
- movs r5, 0
- movs r0, 0x1
- add r0, r8
- mov r10, r0
- ldr r0, _0800D7B8 @ =gUnknown_2023BD6
- add r0, r8
- mov r9, r0
- mov r0, r8
- lsls r6, r0, 1
- movs r7, 0
-_0800D7A0:
- mov r0, r8
- cmp r0, 0x1
- bgt _0800D808
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0800D7C0
- ldr r0, _0800D7BC @ =gPlayerParty
- b _0800D7C2
- .align 2, 0
-_0800D7B8: .4byte gUnknown_2023BD6
-_0800D7BC: .4byte gPlayerParty
-_0800D7C0:
- ldr r0, _0800D800 @ =gEnemyParty
-_0800D7C2:
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0800D888
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _0800D888
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0800D888
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0800D888
- ldr r0, _0800D804 @ =gBattlerPartyIndexes
- adds r0, r6, r0
- strh r5, [r0]
- b _0800D890
- .align 2, 0
-_0800D800: .4byte gEnemyParty
-_0800D804: .4byte gBattlerPartyIndexes
-_0800D808:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0800D830
- ldr r0, _0800D82C @ =gPlayerParty
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0800D888
- adds r0, r4, 0
- movs r1, 0xB
- b _0800D844
- .align 2, 0
-_0800D82C: .4byte gPlayerParty
-_0800D830:
- ldr r0, _0800D880 @ =gEnemyParty
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0800D888
- adds r0, r4, 0
- movs r1, 0x41
-_0800D844:
- bl GetMonData
- cmp r0, 0
- beq _0800D888
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0800D888
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0800D888
- ldr r1, _0800D884 @ =gBattlerPartyIndexes
- mov r0, r8
- subs r0, 0x2
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r5
- beq _0800D888
- adds r0, r6, r1
- strh r5, [r0]
- b _0800D890
- .align 2, 0
-_0800D880: .4byte gEnemyParty
-_0800D884: .4byte gBattlerPartyIndexes
-_0800D888:
- adds r7, 0x64
- adds r5, 0x1
- cmp r5, 0x5
- ble _0800D7A0
-_0800D890:
- mov r8, r10
-_0800D892:
- ldr r0, _0800D8AC @ =gBattlersCount
- ldrb r0, [r0]
- cmp r8, r0
- bge _0800D89C
- b _0800D78C
-_0800D89C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D8AC: .4byte gBattlersCount
- thumb_func_end sub_800D768
-
- thumb_func_start PrepareBufferDataTransfer
-PrepareBufferDataTransfer: @ 800D8B0
- push {r4-r6,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r3, r0, 24
- adds r5, r3, 0
- lsls r2, 16
- lsrs r2, 16
- ldr r0, _0800D8D8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0800D8DC
- adds r0, r3, 0
- adds r1, r2, 0
- adds r2, r4, 0
- bl PrepareBufferDataTransferLink
- b _0800D92E
- .align 2, 0
-_0800D8D8: .4byte gBattleTypeFlags
-_0800D8DC:
- cmp r5, 0
- beq _0800D8E6
- cmp r5, 0x1
- beq _0800D910
- b _0800D92E
-_0800D8E6:
- movs r3, 0
- cmp r3, r2
- bge _0800D92E
- ldr r6, _0800D908 @ =gUnknown_2022BC4
- ldr r5, _0800D90C @ =gActiveBattler
-_0800D8F0:
- ldrb r0, [r5]
- lsls r0, 9
- adds r0, r3, r0
- adds r0, r6
- ldrb r1, [r4]
- strb r1, [r0]
- adds r4, 0x1
- adds r3, 0x1
- cmp r3, r2
- blt _0800D8F0
- b _0800D92E
- .align 2, 0
-_0800D908: .4byte gUnknown_2022BC4
-_0800D90C: .4byte gActiveBattler
-_0800D910:
- movs r3, 0
- cmp r3, r2
- bge _0800D92E
- ldr r6, _0800D934 @ =gUnknown_20233C4
- ldr r5, _0800D938 @ =gActiveBattler
-_0800D91A:
- ldrb r0, [r5]
- lsls r0, 9
- adds r0, r3, r0
- adds r0, r6
- ldrb r1, [r4]
- strb r1, [r0]
- adds r4, 0x1
- adds r3, 0x1
- cmp r3, r2
- blt _0800D91A
-_0800D92E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D934: .4byte gUnknown_20233C4
-_0800D938: .4byte gActiveBattler
- thumb_func_end PrepareBufferDataTransfer
-
- thumb_func_start CreateTasksForSendRecvLinkBuffers
-CreateTasksForSendRecvLinkBuffers: @ 800D93C
- push {r4-r6,lr}
- ldr r0, _0800D9D4 @ =sub_800DB6C
- movs r1, 0
- bl CreateTask
- ldr r2, _0800D9D8 @ =gUnknown_202286C
- strb r0, [r2]
- ldr r5, _0800D9DC @ =gTasks
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r6, 0
- movs r4, 0
- strh r4, [r0, 0x1E]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x20]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x22]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x24]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x26]
- ldr r0, _0800D9E0 @ =Task_HandleCopyReceivedLinkBuffersData
- movs r1, 0
- bl CreateTask
- ldr r2, _0800D9E4 @ =gUnknown_202286D
- strb r0, [r2]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x20]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x22]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x24]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x26]
- ldr r0, _0800D9E8 @ =gUnknown_202286E
- strb r6, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D9D4: .4byte sub_800DB6C
-_0800D9D8: .4byte gUnknown_202286C
-_0800D9DC: .4byte gTasks
-_0800D9E0: .4byte Task_HandleCopyReceivedLinkBuffersData
-_0800D9E4: .4byte gUnknown_202286D
-_0800D9E8: .4byte gUnknown_202286E
- thumb_func_end CreateTasksForSendRecvLinkBuffers
-
- thumb_func_start PrepareBufferDataTransferLink
-PrepareBufferDataTransferLink: @ 800D9EC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r2
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r1, 16
- mov r12, r1
- movs r1, 0x3
- mov r0, r12
- bics r0, r1
- adds r0, 0x4
- mov r8, r0
- ldr r2, _0800DB4C @ =gTasks
- ldr r3, _0800DB50 @ =gUnknown_202286C
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r4, r0, r2
- movs r1, 0x24
- ldrsh r0, [r4, r1]
- add r0, r8
- adds r0, 0x9
- movs r1, 0x80
- lsls r1, 5
- adds r5, r2, 0
- cmp r0, r1
- ble _0800DA3E
- ldrh r0, [r4, 0x24]
- movs r2, 0
- strh r0, [r4, 0x20]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r2, [r0, 0x24]
-_0800DA3E:
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r2, 0x24
- ldrsh r1, [r0, r2]
- ldr r4, _0800DB54 @ =gUnknown_2023FEC
- ldr r0, [r4]
- adds r0, r1
- strb r6, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r7, 0x24
- ldrsh r1, [r0, r7]
- ldr r0, [r4]
- adds r1, r0
- ldr r0, _0800DB58 @ =gActiveBattler
- ldrb r0, [r0]
- strb r0, [r1, 0x1]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r2, 0x24
- ldrsh r1, [r0, r2]
- ldr r0, [r4]
- adds r1, r0
- ldr r0, _0800DB5C @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r7, 0x24
- ldrsh r1, [r0, r7]
- ldr r0, [r4]
- adds r1, r0
- ldr r0, _0800DB60 @ =gBattlerTarget
- ldrb r0, [r0]
- strb r0, [r1, 0x3]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r1, 0x24
- ldrsh r0, [r0, r1]
- ldr r1, [r4]
- adds r0, r1
- mov r2, r8
- strb r2, [r0, 0x4]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r7, 0x24
- ldrsh r1, [r0, r7]
- ldr r0, [r4]
- adds r1, r0
- movs r0, 0xFF
- lsls r0, 8
- mov r2, r8
- ands r0, r2
- asrs r0, 8
- strb r0, [r1, 0x5]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r7, 0x24
- ldrsh r1, [r0, r7]
- ldr r0, [r4]
- adds r1, r0
- ldr r0, _0800DB64 @ =gAbsentBattlerFlags
- ldrb r0, [r0]
- strb r0, [r1, 0x6]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r2, 0x24
- ldrsh r1, [r0, r2]
- ldr r0, [r4]
- adds r1, r0
- ldr r0, _0800DB68 @ =gUnknown_2023D6E
- ldrb r0, [r0]
- strb r0, [r1, 0x7]
- movs r2, 0
- cmp r2, r12
- bge _0800DB2C
- mov r10, r5
- adds r6, r3, 0
-_0800DB0A:
- ldrb r1, [r6]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- movs r7, 0x24
- ldrsh r1, [r0, r7]
- ldr r0, [r4]
- adds r1, r2, r1
- adds r1, r0
- mov r7, r9
- adds r0, r7, r2
- ldrb r0, [r0]
- strb r0, [r1, 0x8]
- adds r2, 0x1
- cmp r2, r12
- blt _0800DB0A
-_0800DB2C:
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldrh r0, [r1, 0x24]
- add r0, r8
- adds r0, 0x8
- strh r0, [r1, 0x24]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800DB4C: .4byte gTasks
-_0800DB50: .4byte gUnknown_202286C
-_0800DB54: .4byte gUnknown_2023FEC
-_0800DB58: .4byte gActiveBattler
-_0800DB5C: .4byte sBattler_AI
-_0800DB60: .4byte gBattlerTarget
-_0800DB64: .4byte gAbsentBattlerFlags
-_0800DB68: .4byte gUnknown_2023D6E
- thumb_func_end PrepareBufferDataTransferLink
-
- thumb_func_start sub_800DB6C
-sub_800DB6C: @ 800DB6C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _0800DB94 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r2, 0x1E
- ldrsh r0, [r0, r2]
- adds r7, r1, 0
- cmp r0, 0x5
- bls _0800DB88
- b _0800DD20
-_0800DB88:
- lsls r0, 2
- ldr r1, _0800DB98 @ =_0800DB9C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0800DB94: .4byte gTasks
-_0800DB98: .4byte _0800DB9C
- .align 2, 0
-_0800DB9C:
- .4byte _0800DBB4
- .4byte _0800DBC8
- .4byte _0800DBF4
- .4byte _0800DC50
- .4byte _0800DCC6
- .4byte _0800DD04
-_0800DBB4:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r7
- movs r1, 0x64
- strh r1, [r0, 0x1C]
- ldrh r1, [r0, 0x1E]
- adds r1, 0x1
- strh r1, [r0, 0x1E]
- b _0800DD20
-_0800DBC8:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r7
- ldrh r0, [r1, 0x1C]
- subs r0, 0x1
- strh r0, [r1, 0x1C]
- lsls r0, 16
- cmp r0, 0
- beq _0800DBDE
- b _0800DD20
-_0800DBDE:
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- strh r0, [r1, 0x1E]
- ldr r0, _0800DBF0 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800DBEE
- b _0800DD20
-_0800DBEE:
- b _0800DD1C
- .align 2, 0
-_0800DBF0: .4byte gReceivedRemoteLinkPlayers
-_0800DBF4:
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _0800DC10 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0800DC14
- cmp r2, 0x3
- bgt _0800DC1A
- b _0800DD20
- .align 2, 0
-_0800DC10: .4byte gBattleTypeFlags
-_0800DC14:
- cmp r2, 0x1
- bgt _0800DC1A
- b _0800DD20
-_0800DC1A:
- bl sub_800AA48
- lsls r0, 24
- cmp r0, 0
- beq _0800DC3C
- bl sub_800A5BC
- ldr r0, _0800DC38 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- b _0800DD1E
- .align 2, 0
-_0800DC38: .4byte gTasks
-_0800DC3C:
- ldr r0, _0800DC4C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- b _0800DD1E
- .align 2, 0
-_0800DC4C: .4byte gTasks
-_0800DC50:
- lsls r1, r4, 2
- adds r0, r1, r4
- lsls r0, 3
- adds r2, r0, r7
- movs r3, 0x26
- ldrsh r5, [r2, r3]
- movs r0, 0x24
- ldrsh r6, [r2, r0]
- mov r12, r6
- cmp r5, r12
- beq _0800DD20
- ldrh r0, [r2, 0x22]
- movs r6, 0x22
- ldrsh r3, [r2, r6]
- cmp r3, 0
- bne _0800DCC0
- cmp r5, r12
- ble _0800DC80
- movs r6, 0x20
- ldrsh r0, [r2, r6]
- cmp r5, r0
- bne _0800DC80
- strh r3, [r2, 0x20]
- strh r3, [r2, 0x26]
-_0800DC80:
- adds r4, r1, r4
- lsls r4, 3
- adds r4, r7
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- ldr r5, _0800DCBC @ =gUnknown_2023FEC
- ldr r0, [r5]
- adds r1, r0
- ldrb r0, [r1, 0x4]
- ldrb r1, [r1, 0x5]
- lsls r1, 8
- orrs r0, r1
- adds r0, 0x8
- lsls r0, 16
- lsrs r6, r0, 16
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x26
- ldrsh r2, [r4, r1]
- ldr r1, [r5]
- adds r1, r2
- adds r2, r6, 0
- bl SendBlock
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
- b _0800DD20
- .align 2, 0
-_0800DCBC: .4byte gUnknown_2023FEC
-_0800DCC0:
- subs r0, 0x1
- strh r0, [r2, 0x22]
- b _0800DD20
-_0800DCC6:
- bl sub_800A4BC
- lsls r0, 24
- cmp r0, 0
- beq _0800DD20
- ldr r0, _0800DCFC @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r3, 0x26
- ldrsh r2, [r1, r3]
- ldr r0, _0800DD00 @ =gUnknown_2023FEC
- ldr r0, [r0]
- adds r2, r0
- ldrb r0, [r2, 0x4]
- ldrb r2, [r2, 0x5]
- lsls r2, 8
- movs r3, 0x5
- strh r3, [r1, 0x22]
- orrs r0, r2
- ldrh r6, [r1, 0x26]
- adds r0, r6
- adds r0, 0x8
- strh r0, [r1, 0x26]
- b _0800DD1C
- .align 2, 0
-_0800DCFC: .4byte gTasks
-_0800DD00: .4byte gUnknown_2023FEC
-_0800DD04:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r7
- ldrh r0, [r1, 0x22]
- subs r0, 0x1
- strh r0, [r1, 0x22]
- lsls r0, 16
- cmp r0, 0
- bne _0800DD20
- movs r0, 0x5
- strh r0, [r1, 0x22]
-_0800DD1C:
- movs r0, 0x3
-_0800DD1E:
- strh r0, [r1, 0x1E]
-_0800DD20:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_800DB6C
-
- thumb_func_start sub_800DD28
-sub_800DD28: @ 800DD28
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0800DD5C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800DE28
- ldr r0, _0800DD60 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0800DE28
- ldr r0, _0800DD64 @ =gLinkPlayers
- ldr r1, [r0, 0x14]
- ldr r0, _0800DD68 @ =0x00002211
- cmp r1, r0
- bne _0800DE28
- bl sub_80FBB4C
- movs r4, 0
- ldr r0, _0800DD6C @ =gBlockRecvBuffer
- mov r10, r0
- b _0800DE1C
- .align 2, 0
-_0800DD5C: .4byte gReceivedRemoteLinkPlayers
-_0800DD60: .4byte gBattleTypeFlags
-_0800DD64: .4byte gLinkPlayers
-_0800DD68: .4byte 0x00002211
-_0800DD6C: .4byte gBlockRecvBuffer
-_0800DD70:
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0800DE38 @ =gBitTable
- lsls r1, r4, 2
- adds r1, r2
- ldr r1, [r1]
- ands r0, r1
- adds r1, r4, 0x1
- mov r9, r1
- cmp r0, 0
- beq _0800DE16
- adds r0, r4, 0
- bl ResetBlockReceivedFlag
- lsls r0, r4, 8
- mov r4, r10
- adds r3, r0, r4
- ldr r1, _0800DE3C @ =gBlockRecvBuffer + 4
- adds r0, r1
- ldrh r6, [r0]
- ldr r7, _0800DE40 @ =gTasks
- ldr r4, _0800DE44 @ =gUnknown_202286D
- mov r12, r4
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r2, r0, r7
- movs r0, 0x24
- ldrsh r1, [r2, r0]
- adds r0, r6, 0
- adds r0, 0x9
- adds r1, r0
- movs r0, 0x80
- lsls r0, 5
- cmp r1, r0
- ble _0800DDD0
- ldrh r0, [r2, 0x24]
- strh r0, [r2, 0x20]
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r7
- movs r1, 0
- strh r1, [r0, 0x24]
-_0800DDD0:
- ldr r2, _0800DE48 @ =gUnknown_2023FF0
- mov r4, r12
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r7
- movs r4, 0x24
- ldrsh r1, [r0, r4]
- ldr r0, [r2]
- adds r5, r0, r1
- adds r4, r3, 0
- movs r2, 0
- adds r3, r6, 0
- adds r3, 0x8
- mov r8, r7
- mov r7, r12
- cmp r2, r3
- bge _0800DE04
-_0800DDF6:
- adds r0, r5, r2
- adds r1, r4, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, r3
- blt _0800DDF6
-_0800DE04:
- ldrb r0, [r7]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r8
- ldrh r0, [r1, 0x24]
- adds r0, r6, r0
- adds r0, 0x8
- strh r0, [r1, 0x24]
-_0800DE16:
- mov r1, r9
- lsls r0, r1, 24
- lsrs r4, r0, 24
-_0800DE1C:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bcc _0800DD70
-_0800DE28:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800DE38: .4byte gBitTable
-_0800DE3C: .4byte gBlockRecvBuffer + 4
-_0800DE40: .4byte gTasks
-_0800DE44: .4byte gUnknown_202286D
-_0800DE48: .4byte gUnknown_2023FF0
- thumb_func_end sub_800DD28
-
- thumb_func_start Task_HandleCopyReceivedLinkBuffersData
-Task_HandleCopyReceivedLinkBuffersData: @ 800DE4C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, _0800DEB4 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r3, r0, r1
- movs r0, 0x26
- ldrsh r2, [r3, r0]
- movs r4, 0x24
- ldrsh r0, [r3, r4]
- cmp r2, r0
- bne _0800DE70
- b _0800DF8C
-_0800DE70:
- cmp r2, r0
- ble _0800DE82
- movs r4, 0x20
- ldrsh r0, [r3, r4]
- cmp r2, r0
- bne _0800DE82
- movs r0, 0
- strh r0, [r3, 0x20]
- strh r0, [r3, 0x26]
-_0800DE82:
- lsls r2, r7, 2
- adds r0, r2, r7
- lsls r0, 3
- adds r5, r0, r1
- movs r0, 0x26
- ldrsh r1, [r5, r0]
- ldr r3, _0800DEB8 @ =gUnknown_2023FF0
- mov r8, r3
- ldr r0, [r3]
- adds r3, r1, r0
- ldrb r4, [r3, 0x1]
- ldrb r6, [r3, 0x4]
- ldrb r0, [r3, 0x5]
- lsls r0, 8
- orrs r6, r0
- ldrb r0, [r3]
- mov r9, r2
- cmp r0, 0x1
- beq _0800DF4C
- cmp r0, 0x1
- bgt _0800DEBC
- cmp r0, 0
- beq _0800DEC2
- b _0800DF7A
- .align 2, 0
-_0800DEB4: .4byte gTasks
-_0800DEB8: .4byte gUnknown_2023FF0
-_0800DEBC:
- cmp r0, 0x2
- beq _0800DF64
- b _0800DF7A
-_0800DEC2:
- ldr r2, _0800DF2C @ =gUnknown_2023BC8
- ldr r1, _0800DF30 @ =gBitTable
- lsls r0, r4, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0800DF8C
- lsls r0, r4, 9
- ldr r1, _0800DF34 @ =gUnknown_2022BC4
- adds r0, r1
- adds r1, r3, 0
- adds r1, 0x8
- adds r2, r6, 0
- bl memcpy
- adds r0, r4, 0
- bl sub_8017298
- ldr r0, _0800DF38 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x4
- ands r0, r1
- cmp r0, 0
- bne _0800DF7A
- ldr r2, _0800DF3C @ =sBattler_AI
- movs r4, 0x26
- ldrsh r0, [r5, r4]
- mov r3, r8
- ldr r1, [r3]
- adds r0, r1
- ldrb r0, [r0, 0x2]
- strb r0, [r2]
- ldr r2, _0800DF40 @ =gBattlerTarget
- movs r4, 0x26
- ldrsh r0, [r5, r4]
- adds r0, r1
- ldrb r0, [r0, 0x3]
- strb r0, [r2]
- ldr r2, _0800DF44 @ =gAbsentBattlerFlags
- movs r3, 0x26
- ldrsh r0, [r5, r3]
- adds r0, r1
- ldrb r0, [r0, 0x6]
- strb r0, [r2]
- ldr r2, _0800DF48 @ =gUnknown_2023D6E
- movs r4, 0x26
- ldrsh r0, [r5, r4]
- adds r0, r1
- ldrb r0, [r0, 0x7]
- strb r0, [r2]
- b _0800DF7A
- .align 2, 0
-_0800DF2C: .4byte gUnknown_2023BC8
-_0800DF30: .4byte gBitTable
-_0800DF34: .4byte gUnknown_2022BC4
-_0800DF38: .4byte gBattleTypeFlags
-_0800DF3C: .4byte sBattler_AI
-_0800DF40: .4byte gBattlerTarget
-_0800DF44: .4byte gAbsentBattlerFlags
-_0800DF48: .4byte gUnknown_2023D6E
-_0800DF4C:
- lsls r0, r4, 9
- ldr r1, _0800DF60 @ =gUnknown_20233C4
- adds r0, r1
- adds r1, r3, 0
- adds r1, 0x8
- adds r2, r6, 0
- bl memcpy
- b _0800DF7A
- .align 2, 0
-_0800DF60: .4byte gUnknown_20233C4
-_0800DF64:
- ldrb r2, [r3, 0x8]
- ldr r3, _0800DF98 @ =gUnknown_2023BC8
- ldr r1, _0800DF9C @ =gBitTable
- lsls r0, r4, 2
- adds r0, r1
- lsls r2, 2
- ldr r1, [r0]
- lsls r1, r2
- ldr r0, [r3]
- bics r0, r1
- str r0, [r3]
-_0800DF7A:
- ldr r0, _0800DFA0 @ =gTasks
- mov r2, r9
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, r6, r0
- adds r0, 0x8
- strh r0, [r1, 0x26]
-_0800DF8C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800DF98: .4byte gUnknown_2023BC8
-_0800DF9C: .4byte gBitTable
-_0800DFA0: .4byte gTasks
- thumb_func_end Task_HandleCopyReceivedLinkBuffersData
-
- thumb_func_start BtlController_EmitGetMonData
-BtlController_EmitGetMonData: @ 800DFA4
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800DFC4 @ =gUnknown_2022874
- movs r3, 0
- strb r3, [r1]
- strb r4, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r3, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800DFC4: .4byte gUnknown_2022874
- thumb_func_end BtlController_EmitGetMonData
-
- thumb_func_start EmitGetRawMonData
-EmitGetRawMonData: @ 800DFC8
- push {r4,r5,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800DFEC @ =gUnknown_2022874
- movs r4, 0
- movs r3, 0x1
- strb r3, [r1]
- strb r5, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r4, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800DFEC: .4byte gUnknown_2022874
- thumb_func_end EmitGetRawMonData
-
- thumb_func_start EmitSetMonData
-EmitSetMonData: @ 800DFF0
- push {r4-r6,lr}
- ldr r4, [sp, 0x10]
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r3, 24
- lsrs r5, r3, 24
- ldr r0, _0800E02C @ =gUnknown_2022874
- movs r3, 0x2
- strb r3, [r0]
- strb r1, [r0, 0x1]
- strb r2, [r0, 0x2]
- adds r1, r0, 0
- cmp r5, 0
- beq _0800E01E
- adds r3, r1, 0x3
- adds r2, r5, 0
-_0800E010:
- ldrb r0, [r4]
- strb r0, [r3]
- adds r4, 0x1
- adds r3, 0x1
- subs r2, 0x1
- cmp r2, 0
- bne _0800E010
-_0800E01E:
- adds r2, r5, 0x3
- adds r0, r6, 0
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E02C: .4byte gUnknown_2022874
- thumb_func_end EmitSetMonData
-
- thumb_func_start EmitSetRawMonData
-EmitSetRawMonData: @ 800E030
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r2, 24
- lsrs r4, r2, 24
- ldr r0, _0800E06C @ =gUnknown_2022874
- movs r2, 0x3
- strb r2, [r0]
- strb r1, [r0, 0x1]
- strb r4, [r0, 0x2]
- adds r5, r0, 0
- cmp r4, 0
- beq _0800E05C
- adds r1, r5, 0x3
- adds r2, r4, 0
-_0800E04E:
- ldrb r0, [r3]
- strb r0, [r1]
- adds r3, 0x1
- adds r1, 0x1
- subs r2, 0x1
- cmp r2, 0
- bne _0800E04E
-_0800E05C:
- adds r2, r4, 0x3
- adds r0, r6, 0
- adds r1, r5, 0
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E06C: .4byte gUnknown_2022874
- thumb_func_end EmitSetRawMonData
-
- thumb_func_start EmitLoadMonSprite
-EmitLoadMonSprite: @ 800E070
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E08C @ =gUnknown_2022874
- movs r2, 0x4
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E08C: .4byte gUnknown_2022874
- thumb_func_end EmitLoadMonSprite
-
- thumb_func_start EmitSwitchInAnim
-EmitSwitchInAnim: @ 800E090
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E0B0 @ =gUnknown_2022874
- movs r3, 0x5
- strb r3, [r1]
- strb r4, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r3, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E0B0: .4byte gUnknown_2022874
- thumb_func_end EmitSwitchInAnim
-
- thumb_func_start EmitReturnMonToBall
-EmitReturnMonToBall: @ 800E0B4
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E0D0 @ =gUnknown_2022874
- movs r2, 0x6
- strb r2, [r1]
- strb r3, [r1, 0x1]
- movs r2, 0x2
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E0D0: .4byte gUnknown_2022874
- thumb_func_end EmitReturnMonToBall
-
- thumb_func_start EmitDrawTrainerPic
-EmitDrawTrainerPic: @ 800E0D4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E0F0 @ =gUnknown_2022874
- movs r2, 0x7
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E0F0: .4byte gUnknown_2022874
- thumb_func_end EmitDrawTrainerPic
-
- thumb_func_start EmitTrainerSlide
-EmitTrainerSlide: @ 800E0F4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E110 @ =gUnknown_2022874
- movs r2, 0x8
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E110: .4byte gUnknown_2022874
- thumb_func_end EmitTrainerSlide
-
- thumb_func_start EmitTrainerSlideBack
-EmitTrainerSlideBack: @ 800E114
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E130 @ =gUnknown_2022874
- movs r2, 0x9
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E130: .4byte gUnknown_2022874
- thumb_func_end EmitTrainerSlideBack
-
- thumb_func_start EmitFaintAnimation
-EmitFaintAnimation: @ 800E134
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E150 @ =gUnknown_2022874
- movs r2, 0xA
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E150: .4byte gUnknown_2022874
- thumb_func_end EmitFaintAnimation
-
- thumb_func_start EmitPaletteFade
-EmitPaletteFade: @ 800E154
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E170 @ =gUnknown_2022874
- movs r2, 0xB
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E170: .4byte gUnknown_2022874
- thumb_func_end EmitPaletteFade
-
- thumb_func_start EmitSuccessBallThrowAnim
-EmitSuccessBallThrowAnim: @ 800E174
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E190 @ =gUnknown_2022874
- movs r2, 0xC
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E190: .4byte gUnknown_2022874
- thumb_func_end EmitSuccessBallThrowAnim
-
- thumb_func_start EmitBallThrowAnim
-EmitBallThrowAnim: @ 800E194
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E1B0 @ =gUnknown_2022874
- movs r2, 0xD
- strb r2, [r1]
- strb r3, [r1, 0x1]
- movs r2, 0x2
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E1B0: .4byte gUnknown_2022874
- thumb_func_end EmitBallThrowAnim
-
- thumb_func_start EmitPause
-EmitPause: @ 800E1B4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- ldr r1, _0800E1F8 @ =gUnknown_2022874
- movs r0, 0xE
- strb r0, [r1]
- strb r4, [r1, 0x1]
- lsls r0, r4, 1
- adds r0, r4
- adds r5, r1, 0
- cmp r0, 0
- beq _0800E1E2
- adds r1, r5, 0x2
- adds r3, r0, 0
-_0800E1D4:
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x1
- adds r1, 0x1
- subs r3, 0x1
- cmp r3, 0
- bne _0800E1D4
-_0800E1E2:
- lsls r2, r4, 1
- adds r2, r4
- adds r2, 0x2
- adds r0, r6, 0
- adds r1, r5, 0
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E1F8: .4byte gUnknown_2022874
- thumb_func_end EmitPause
-
- thumb_func_start EmitMoveAnimation
-EmitMoveAnimation: @ 800E1FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- ldr r4, [sp, 0x1C]
- ldr r5, [sp, 0x20]
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 16
- lsrs r1, 16
- lsls r3, 16
- lsrs r3, 16
- ldr r7, _0800E290 @ =gUnknown_2022874
- movs r0, 0
- mov r12, r0
- movs r0, 0xF
- strb r0, [r7]
- strb r1, [r7, 0x1]
- lsrs r1, 8
- strb r1, [r7, 0x2]
- strb r2, [r7, 0x3]
- strb r3, [r7, 0x4]
- movs r6, 0xFF
- lsls r6, 8
- lsrs r3, 8
- strb r3, [r7, 0x5]
- strb r4, [r7, 0x6]
- adds r0, r4, 0
- ands r0, r6
- asrs r0, 8
- strb r0, [r7, 0x7]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r4
- asrs r0, 16
- strb r0, [r7, 0x8]
- lsrs r4, 24
- strb r4, [r7, 0x9]
- strb r5, [r7, 0xA]
- ldr r0, _0800E294 @ =gUnknown_2023D72
- ldrb r0, [r0]
- strb r0, [r7, 0xB]
- mov r0, r12
- str r0, [sp]
- movs r0, 0xE
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0800E29C
- str r0, [sp]
- movs r0, 0xE
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0800E29C
- ldr r0, _0800E298 @ =gBattleWeather
- ldrh r0, [r0]
- strb r0, [r7, 0xC]
- ands r6, r0
- lsrs r0, r6, 8
- strb r0, [r7, 0xD]
- adds r4, r7, 0
- b _0800E2A6
- .align 2, 0
-_0800E290: .4byte gUnknown_2022874
-_0800E294: .4byte gUnknown_2023D72
-_0800E298: .4byte gBattleWeather
-_0800E29C:
- ldr r0, _0800E2D0 @ =gUnknown_2022874
- movs r1, 0
- strb r1, [r0, 0xC]
- strb r1, [r0, 0xD]
- adds r4, r0, 0
-_0800E2A6:
- movs r0, 0
- strb r0, [r4, 0xE]
- strb r0, [r4, 0xF]
- adds r0, r4, 0
- adds r0, 0x10
- ldr r1, [sp, 0x24]
- movs r2, 0x1C
- bl memcpy
- mov r0, r8
- adds r1, r4, 0
- movs r2, 0x2C
- bl PrepareBufferDataTransfer
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E2D0: .4byte gUnknown_2022874
- thumb_func_end EmitMoveAnimation
-
- thumb_func_start EmitPrintString
-EmitPrintString: @ 800E2D4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r2, _0800E3B4 @ =gUnknown_2022874
- movs r0, 0x10
- strb r0, [r2]
- ldr r0, _0800E3B8 @ =gBattleOutcome
- ldrb r0, [r0]
- strb r0, [r2, 0x1]
- strb r1, [r2, 0x2]
- lsrs r1, 8
- strb r1, [r2, 0x3]
- adds r0, r2, 0x4
- mov r12, r0
- ldr r4, _0800E3BC @ =gCurrentMove
- ldrh r0, [r4]
- strh r0, [r2, 0x4]
- ldr r0, _0800E3C0 @ =gUnknown_2023D4C
- ldrh r0, [r0]
- mov r1, r12
- strh r0, [r1, 0x2]
- ldr r0, _0800E3C4 @ =gUnknown_2023D68
- ldrh r0, [r0]
- strh r0, [r1, 0x4]
- ldr r0, _0800E3C8 @ =gLastUsedAbility
- ldrb r0, [r0]
- strb r0, [r1, 0x6]
- ldr r0, _0800E3CC @ =gBattleScripting
- ldrb r0, [r0, 0x17]
- strb r0, [r1, 0x7]
- ldr r0, _0800E3D0 @ =gBattleStruct
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x52
- ldrb r1, [r1]
- mov r3, r12
- strb r1, [r3, 0x8]
- adds r0, 0xAD
- ldrb r0, [r0]
- strb r0, [r3, 0x9]
- ldr r0, _0800E3D4 @ =gPotentialItemEffectBattler
- ldrb r0, [r0]
- strb r0, [r3, 0xA]
- ldr r3, _0800E3D8 @ =gBattleMoves
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x2]
- mov r7, r12
- strb r0, [r7, 0xB]
- movs r3, 0
- mov r9, r2
- ldr r0, _0800E3DC @ =gUnknown_2022AD8
- mov r8, r0
- adds r2, 0x10
- ldr r0, _0800E3E0 @ =gBattleMons
- adds r4, r0, 0
- adds r4, 0x20
-_0800E35A:
- adds r1, r2, r3
- ldrb r0, [r4]
- strb r0, [r1]
- adds r4, 0x58
- adds r3, 0x1
- cmp r3, 0x3
- ble _0800E35A
- movs r3, 0
- mov r5, r12
- adds r5, 0x10
- mov r4, r12
- adds r4, 0x20
- ldr r6, _0800E3E4 @ =gBattleTextBuff2
- mov r2, r12
- adds r2, 0x30
-_0800E378:
- adds r1, r5, r3
- ldr r7, _0800E3E8 @ =gBattleTextBuff1
- adds r0, r3, r7
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, r4, r3
- adds r0, r3, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, r2, r3
- mov r7, r8
- adds r0, r3, r7
- ldrb r0, [r0]
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, 0xF
- ble _0800E378
- mov r0, r10
- mov r1, r9
- movs r2, 0x44
- bl PrepareBufferDataTransfer
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E3B4: .4byte gUnknown_2022874
-_0800E3B8: .4byte gBattleOutcome
-_0800E3BC: .4byte gCurrentMove
-_0800E3C0: .4byte gUnknown_2023D4C
-_0800E3C4: .4byte gUnknown_2023D68
-_0800E3C8: .4byte gLastUsedAbility
-_0800E3CC: .4byte gBattleScripting
-_0800E3D0: .4byte gBattleStruct
-_0800E3D4: .4byte gPotentialItemEffectBattler
-_0800E3D8: .4byte gBattleMoves
-_0800E3DC: .4byte gUnknown_2022AD8
-_0800E3E0: .4byte gBattleMons
-_0800E3E4: .4byte gBattleTextBuff2
-_0800E3E8: .4byte gBattleTextBuff1
- thumb_func_end EmitPrintString
-
- thumb_func_start EmitPrintSelectionString
-EmitPrintSelectionString: @ 800E3EC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r2, _0800E4A8 @ =gUnknown_2022874
- movs r0, 0x11
- strb r0, [r2]
- strb r0, [r2, 0x1]
- strb r1, [r2, 0x2]
- lsrs r1, 8
- strb r1, [r2, 0x3]
- adds r0, r2, 0x4
- mov r12, r0
- ldr r0, _0800E4AC @ =gCurrentMove
- ldrh r0, [r0]
- strh r0, [r2, 0x4]
- ldr r0, _0800E4B0 @ =gUnknown_2023D4C
- ldrh r0, [r0]
- mov r1, r12
- strh r0, [r1, 0x2]
- ldr r0, _0800E4B4 @ =gUnknown_2023D68
- ldrh r0, [r0]
- strh r0, [r1, 0x4]
- ldr r0, _0800E4B8 @ =gLastUsedAbility
- ldrb r0, [r0]
- strb r0, [r1, 0x6]
- ldr r0, _0800E4BC @ =gBattleScripting
- ldrb r0, [r0, 0x17]
- strb r0, [r1, 0x7]
- ldr r0, _0800E4C0 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x52
- ldrb r0, [r0]
- strb r0, [r1, 0x8]
- movs r3, 0
- mov r9, r2
- ldr r7, _0800E4C4 @ =gUnknown_2022AD8
- mov r8, r7
- mov r4, r9
- adds r4, 0x10
- ldr r0, _0800E4C8 @ =gBattleMons
- adds r2, r0, 0
- adds r2, 0x20
-_0800E44E:
- adds r1, r4, r3
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x58
- adds r3, 0x1
- cmp r3, 0x3
- ble _0800E44E
- movs r3, 0
- mov r5, r12
- adds r5, 0x10
- mov r4, r12
- adds r4, 0x20
- ldr r6, _0800E4CC @ =gBattleTextBuff2
- mov r2, r12
- adds r2, 0x30
-_0800E46C:
- adds r1, r5, r3
- ldr r7, _0800E4D0 @ =gBattleTextBuff1
- adds r0, r3, r7
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, r4, r3
- adds r0, r3, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, r2, r3
- mov r7, r8
- adds r0, r3, r7
- ldrb r0, [r0]
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, 0xF
- ble _0800E46C
- mov r0, r10
- mov r1, r9
- movs r2, 0x44
- bl PrepareBufferDataTransfer
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E4A8: .4byte gUnknown_2022874
-_0800E4AC: .4byte gCurrentMove
-_0800E4B0: .4byte gUnknown_2023D4C
-_0800E4B4: .4byte gUnknown_2023D68
-_0800E4B8: .4byte gLastUsedAbility
-_0800E4BC: .4byte gBattleScripting
-_0800E4C0: .4byte gBattleStruct
-_0800E4C4: .4byte gUnknown_2022AD8
-_0800E4C8: .4byte gBattleMons
-_0800E4CC: .4byte gBattleTextBuff2
-_0800E4D0: .4byte gBattleTextBuff1
- thumb_func_end EmitPrintSelectionString
-
- thumb_func_start EmitChooseAction
-EmitChooseAction: @ 800E4D4
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 16
- lsrs r2, 16
- ldr r1, _0800E4FC @ =gUnknown_2022874
- movs r3, 0x12
- strb r3, [r1]
- strb r4, [r1, 0x1]
- strb r2, [r1, 0x2]
- lsrs r2, 8
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E4FC: .4byte gUnknown_2022874
- thumb_func_end EmitChooseAction
-
- thumb_func_start Emitcmd19
-Emitcmd19: @ 800E500
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E51C @ =gUnknown_2022874
- movs r2, 0x13
- strb r2, [r1]
- strb r3, [r1, 0x1]
- movs r2, 0x2
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E51C: .4byte gUnknown_2022874
- thumb_func_end Emitcmd19
-
- thumb_func_start EmitChooseMove
-EmitChooseMove: @ 800E520
- push {r4-r6,lr}
- adds r5, r3, 0
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, _0800E558 @ =gUnknown_2022874
- movs r4, 0
- movs r0, 0x14
- strb r0, [r3]
- strb r1, [r3, 0x1]
- strb r2, [r3, 0x2]
- strb r4, [r3, 0x3]
- movs r2, 0
- adds r1, r3, 0
- adds r4, r1, 0x4
-_0800E53C:
- adds r0, r5, r2
- ldrb r0, [r0]
- strb r0, [r4]
- adds r4, 0x1
- adds r2, 0x1
- cmp r2, 0x13
- bls _0800E53C
- adds r0, r6, 0
- movs r2, 0x18
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E558: .4byte gUnknown_2022874
- thumb_func_end EmitChooseMove
-
- thumb_func_start EmitChooseItem
-EmitChooseItem: @ 800E55C
- push {r4,r5,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _0800E58C @ =gUnknown_2022874
- movs r0, 0x15
- strb r0, [r1]
- movs r2, 0
- adds r3, r1, 0x1
-_0800E56E:
- adds r0, r4, r2
- ldrb r0, [r0]
- strb r0, [r3]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x2
- ble _0800E56E
- adds r0, r5, 0
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E58C: .4byte gUnknown_2022874
- thumb_func_end EmitChooseItem
-
- thumb_func_start EmitChoosePokemon
-EmitChoosePokemon: @ 800E590
- push {r4-r6,lr}
- ldr r6, [sp, 0x10]
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _0800E5C8 @ =gUnknown_2022874
- movs r0, 0x16
- strb r0, [r4]
- strb r1, [r4, 0x1]
- strb r2, [r4, 0x2]
- strb r3, [r4, 0x3]
- movs r2, 0
- adds r1, r4, 0
- adds r3, r1, 0x4
-_0800E5AA:
- adds r0, r6, r2
- ldrb r0, [r0]
- strb r0, [r3]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x2
- ble _0800E5AA
- adds r0, r5, 0
- movs r2, 0x8
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E5C8: .4byte gUnknown_2022874
- thumb_func_end EmitChoosePokemon
-
- thumb_func_start EmitCmd23
-EmitCmd23: @ 800E5CC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E5E8 @ =gUnknown_2022874
- movs r2, 0x17
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E5E8: .4byte gUnknown_2022874
- thumb_func_end EmitCmd23
-
- thumb_func_start EmitHealthBarUpdate
-EmitHealthBarUpdate: @ 800E5EC
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _0800E620 @ =gUnknown_2022874
- movs r4, 0
- movs r2, 0x18
- strb r2, [r3]
- strb r4, [r3, 0x1]
- strb r1, [r3, 0x2]
- lsls r1, 16
- asrs r1, 16
- movs r2, 0xFF
- lsls r2, 8
- ands r1, r2
- asrs r1, 8
- strb r1, [r3, 0x3]
- adds r1, r3, 0
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E620: .4byte gUnknown_2022874
- thumb_func_end EmitHealthBarUpdate
-
- thumb_func_start EmitExpUpdate
-EmitExpUpdate: @ 800E624
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 16
- lsrs r2, 16
- ldr r1, _0800E654 @ =gUnknown_2022874
- movs r3, 0x19
- strb r3, [r1]
- strb r4, [r1, 0x1]
- strb r2, [r1, 0x2]
- lsls r2, 16
- asrs r2, 16
- movs r3, 0xFF
- lsls r3, 8
- ands r2, r3
- asrs r2, 8
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E654: .4byte gUnknown_2022874
- thumb_func_end EmitExpUpdate
-
- thumb_func_start EmitStatusIconUpdate
-EmitStatusIconUpdate: @ 800E658
- push {r4-r6,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E6A8 @ =gUnknown_2022874
- movs r3, 0x1A
- strb r3, [r1]
- strb r4, [r1, 0x1]
- movs r6, 0xFF
- lsls r6, 8
- adds r3, r4, 0
- ands r3, r6
- lsrs r3, 8
- strb r3, [r1, 0x2]
- movs r5, 0xFF
- lsls r5, 16
- adds r3, r4, 0
- ands r3, r5
- lsrs r3, 16
- strb r3, [r1, 0x3]
- lsrs r4, 24
- strb r4, [r1, 0x4]
- strb r2, [r1, 0x5]
- adds r3, r2, 0
- ands r3, r6
- lsrs r3, 8
- strb r3, [r1, 0x6]
- adds r3, r2, 0
- ands r3, r5
- lsrs r3, 16
- strb r3, [r1, 0x7]
- lsrs r2, 24
- strb r2, [r1, 0x8]
- movs r2, 0x9
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E6A8: .4byte gUnknown_2022874
- thumb_func_end EmitStatusIconUpdate
-
- thumb_func_start EmitStatusAnimation
-EmitStatusAnimation: @ 800E6AC
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E6E4 @ =gUnknown_2022874
- movs r3, 0x1B
- strb r3, [r1]
- strb r4, [r1, 0x1]
- strb r2, [r1, 0x2]
- movs r3, 0xFF
- lsls r3, 8
- ands r3, r2
- lsrs r3, 8
- strb r3, [r1, 0x3]
- movs r3, 0xFF
- lsls r3, 16
- ands r3, r2
- lsrs r3, 16
- strb r3, [r1, 0x4]
- lsrs r2, 24
- strb r2, [r1, 0x5]
- movs r2, 0x6
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E6E4: .4byte gUnknown_2022874
- thumb_func_end EmitStatusAnimation
-
- thumb_func_start EmitStatusXor
-EmitStatusXor: @ 800E6E8
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E704 @ =gUnknown_2022874
- movs r2, 0x1C
- strb r2, [r1]
- strb r3, [r1, 0x1]
- movs r2, 0x2
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E704: .4byte gUnknown_2022874
- thumb_func_end EmitStatusXor
-
- thumb_func_start EmitDataTransfer
-EmitDataTransfer: @ 800E708
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- ldr r1, _0800E74C @ =gUnknown_2022874
- movs r0, 0x1D
- strb r0, [r1]
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- lsrs r0, r4, 8
- strb r0, [r1, 0x3]
- adds r5, r1, 0
- cmp r4, 0
- beq _0800E738
- adds r1, r5, 0x4
- adds r3, r4, 0
-_0800E72A:
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x1
- adds r1, 0x1
- subs r3, 0x1
- cmp r3, 0
- bne _0800E72A
-_0800E738:
- adds r2, r4, 0x4
- lsls r2, 16
- lsrs r2, 16
- adds r0, r6, 0
- adds r1, r5, 0
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E74C: .4byte gUnknown_2022874
- thumb_func_end EmitDataTransfer
-
- thumb_func_start EmitDMA3Transfer
-EmitDMA3Transfer: @ 800E750
- push {r4-r6,lr}
- adds r4, r3, 0
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r2, 16
- lsrs r5, r2, 16
- ldr r2, _0800E7B4 @ =gUnknown_2022874
- movs r0, 0x1E
- strb r0, [r2]
- strb r1, [r2, 0x1]
- movs r3, 0xFF
- lsls r3, 8
- adds r0, r1, 0
- ands r0, r3
- lsrs r0, 8
- strb r0, [r2, 0x2]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r0, 16
- strb r0, [r2, 0x3]
- lsrs r1, 24
- strb r1, [r2, 0x4]
- strb r5, [r2, 0x5]
- adds r0, r5, 0
- ands r0, r3
- lsrs r0, 8
- strb r0, [r2, 0x6]
- adds r1, r2, 0
- cmp r5, 0
- beq _0800E7A0
- adds r3, r1, 0x7
- adds r2, r5, 0
-_0800E792:
- ldrb r0, [r4]
- strb r0, [r3]
- adds r4, 0x1
- adds r3, 0x1
- subs r2, 0x1
- cmp r2, 0
- bne _0800E792
-_0800E7A0:
- adds r2, r5, 0x7
- lsls r2, 16
- lsrs r2, 16
- adds r0, r6, 0
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E7B4: .4byte gUnknown_2022874
- thumb_func_end EmitDMA3Transfer
-
- thumb_func_start EmitPlayBGM
-EmitPlayBGM: @ 800E7B8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- ldr r1, _0800E7FC @ =gUnknown_2022874
- movs r0, 0x1F
- strb r0, [r1]
- strb r4, [r1, 0x1]
- lsrs r0, r4, 8
- strb r0, [r1, 0x2]
- adds r5, r1, 0
- cmp r4, 0
- beq _0800E7E6
- adds r1, r5, 0x3
- adds r3, r4, 0
-_0800E7D8:
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x1
- adds r1, 0x1
- subs r3, 0x1
- cmp r3, 0
- bne _0800E7D8
-_0800E7E6:
- adds r2, r4, 0x3
- lsls r2, 16
- lsrs r2, 16
- adds r0, r6, 0
- adds r1, r5, 0
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E7FC: .4byte gUnknown_2022874
- thumb_func_end EmitPlayBGM
-
- thumb_func_start EmitCmd32
-EmitCmd32: @ 800E800
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- ldr r1, _0800E844 @ =gUnknown_2022874
- movs r0, 0x20
- strb r0, [r1]
- strb r4, [r1, 0x1]
- lsrs r0, r4, 8
- strb r0, [r1, 0x2]
- adds r5, r1, 0
- cmp r4, 0
- beq _0800E82E
- adds r1, r5, 0x3
- adds r3, r4, 0
-_0800E820:
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x1
- adds r1, 0x1
- subs r3, 0x1
- cmp r3, 0
- bne _0800E820
-_0800E82E:
- adds r2, r4, 0x3
- lsls r2, 16
- lsrs r2, 16
- adds r0, r6, 0
- adds r1, r5, 0
- bl PrepareBufferDataTransfer
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E844: .4byte gUnknown_2022874
- thumb_func_end EmitCmd32
-
- thumb_func_start EmitTwoReturnValues
-EmitTwoReturnValues: @ 800E848
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 16
- lsrs r2, 16
- ldr r1, _0800E870 @ =gUnknown_2022874
- movs r3, 0x21
- strb r3, [r1]
- strb r4, [r1, 0x1]
- strb r2, [r1, 0x2]
- lsrs r2, 8
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E870: .4byte gUnknown_2022874
- thumb_func_end EmitTwoReturnValues
-
- thumb_func_start EmitChosenMonReturnValue
-EmitChosenMonReturnValue: @ 800E874
- push {r4,r5,lr}
- adds r4, r2, 0
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r2, _0800E8A8 @ =gUnknown_2022874
- movs r0, 0x22
- strb r0, [r2]
- strb r1, [r2, 0x1]
- movs r3, 0
- adds r1, r2, 0x2
-_0800E888:
- adds r0, r4, r3
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, 0x1
- adds r3, 0x1
- cmp r3, 0x2
- ble _0800E888
- adds r0, r5, 0
- adds r1, r2, 0
- movs r2, 0x5
- bl PrepareBufferDataTransfer
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E8A8: .4byte gUnknown_2022874
- thumb_func_end EmitChosenMonReturnValue
-
- thumb_func_start EmitOneReturnValue
-EmitOneReturnValue: @ 800E8AC
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _0800E8D4 @ =gUnknown_2022874
- movs r4, 0
- movs r2, 0x23
- strb r2, [r3]
- strb r1, [r3, 0x1]
- lsrs r1, 8
- strb r1, [r3, 0x2]
- strb r4, [r3, 0x3]
- adds r1, r3, 0
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E8D4: .4byte gUnknown_2022874
- thumb_func_end EmitOneReturnValue
-
- thumb_func_start EmitOneReturnValue_Duplicate
-EmitOneReturnValue_Duplicate: @ 800E8D8
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _0800E900 @ =gUnknown_2022874
- movs r4, 0
- movs r2, 0x24
- strb r2, [r3]
- strb r1, [r3, 0x1]
- lsrs r1, 8
- strb r1, [r3, 0x2]
- strb r4, [r3, 0x3]
- adds r1, r3, 0
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E900: .4byte gUnknown_2022874
- thumb_func_end EmitOneReturnValue_Duplicate
-
- thumb_func_start EmitCmd37
-EmitCmd37: @ 800E904
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E920 @ =gUnknown_2022874
- movs r2, 0x25
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E920: .4byte gUnknown_2022874
- thumb_func_end EmitCmd37
-
- thumb_func_start EmitCmd38
-EmitCmd38: @ 800E924
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E940 @ =gUnknown_2022874
- movs r2, 0x26
- strb r2, [r1]
- strb r3, [r1, 0x1]
- movs r2, 0x2
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E940: .4byte gUnknown_2022874
- thumb_func_end EmitCmd38
-
- thumb_func_start EmitCmd39
-EmitCmd39: @ 800E944
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E960 @ =gUnknown_2022874
- movs r2, 0x27
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E960: .4byte gUnknown_2022874
- thumb_func_end EmitCmd39
-
- thumb_func_start EmitCmd40
-EmitCmd40: @ 800E964
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E980 @ =gUnknown_2022874
- movs r2, 0x28
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E980: .4byte gUnknown_2022874
- thumb_func_end EmitCmd40
-
- thumb_func_start EmitHitAnimation
-EmitHitAnimation: @ 800E984
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E9A0 @ =gUnknown_2022874
- movs r2, 0x29
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E9A0: .4byte gUnknown_2022874
- thumb_func_end EmitHitAnimation
-
- thumb_func_start EmitCmd42
-EmitCmd42: @ 800E9A4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800E9C0 @ =gUnknown_2022874
- movs r2, 0x2A
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800E9C0: .4byte gUnknown_2022874
- thumb_func_end EmitCmd42
-
- thumb_func_start EmitPlaySE
-EmitPlaySE: @ 800E9C4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _0800E9EC @ =gUnknown_2022874
- movs r4, 0
- movs r2, 0x2B
- strb r2, [r3]
- strb r1, [r3, 0x1]
- lsrs r1, 8
- strb r1, [r3, 0x2]
- strb r4, [r3, 0x3]
- adds r1, r3, 0
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E9EC: .4byte gUnknown_2022874
- thumb_func_end EmitPlaySE
-
- thumb_func_start Emitcmd44
-Emitcmd44: @ 800E9F0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _0800EA18 @ =gUnknown_2022874
- movs r4, 0
- movs r2, 0x2C
- strb r2, [r3]
- strb r1, [r3, 0x1]
- lsrs r1, 8
- strb r1, [r3, 0x2]
- strb r4, [r3, 0x3]
- adds r1, r3, 0
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800EA18: .4byte gUnknown_2022874
- thumb_func_end Emitcmd44
-
- thumb_func_start EmitFaintingCry
-EmitFaintingCry: @ 800EA1C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EA38 @ =gUnknown_2022874
- movs r2, 0x2D
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800EA38: .4byte gUnknown_2022874
- thumb_func_end EmitFaintingCry
-
- thumb_func_start EmitIntroSlide
-EmitIntroSlide: @ 800EA3C
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EA58 @ =gUnknown_2022874
- movs r2, 0x2E
- strb r2, [r1]
- strb r3, [r1, 0x1]
- movs r2, 0x2
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800EA58: .4byte gUnknown_2022874
- thumb_func_end EmitIntroSlide
-
- thumb_func_start EmitIntroTrainerBallThrow
-EmitIntroTrainerBallThrow: @ 800EA5C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EA78 @ =gUnknown_2022874
- movs r2, 0x2F
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800EA78: .4byte gUnknown_2022874
- thumb_func_end EmitIntroTrainerBallThrow
-
- thumb_func_start EmitDrawPartyStatusSummary
-EmitDrawPartyStatusSummary: @ 800EA7C
- push {r4,r5,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r1, _0800EAC0 @ =gUnknown_2022874
- movs r3, 0x30
- strb r3, [r1]
- movs r0, 0x7F
- ands r0, r2
- strb r0, [r1, 0x1]
- movs r0, 0x80
- ands r0, r2
- lsls r0, 24
- lsrs r0, 31
- strb r0, [r1, 0x2]
- strb r3, [r1, 0x3]
- movs r2, 0
- adds r3, r1, 0x4
-_0800EAA4:
- adds r0, r4, r2
- ldrb r0, [r0]
- strb r0, [r3]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x2F
- ble _0800EAA4
- adds r0, r5, 0
- movs r2, 0x34
- bl PrepareBufferDataTransfer
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800EAC0: .4byte gUnknown_2022874
- thumb_func_end EmitDrawPartyStatusSummary
-
- thumb_func_start EmitCmd49
-EmitCmd49: @ 800EAC4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EAE0 @ =gUnknown_2022874
- movs r2, 0x31
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800EAE0: .4byte gUnknown_2022874
- thumb_func_end EmitCmd49
-
- thumb_func_start EmitCmd50
-EmitCmd50: @ 800EAE4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EB00 @ =gUnknown_2022874
- movs r2, 0x32
- strb r2, [r1]
- strb r2, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800EB00: .4byte gUnknown_2022874
- thumb_func_end EmitCmd50
-
- thumb_func_start EmitSpriteInvisibility
-EmitSpriteInvisibility: @ 800EB04
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EB24 @ =gUnknown_2022874
- movs r2, 0x33
- strb r2, [r1]
- strb r3, [r1, 0x1]
- strb r2, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800EB24: .4byte gUnknown_2022874
- thumb_func_end EmitSpriteInvisibility
-
- thumb_func_start EmitBattleAnimation
-EmitBattleAnimation: @ 800EB28
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 16
- lsrs r2, 16
- ldr r1, _0800EB50 @ =gUnknown_2022874
- movs r3, 0x34
- strb r3, [r1]
- strb r4, [r1, 0x1]
- strb r2, [r1, 0x2]
- lsrs r2, 8
- strb r2, [r1, 0x3]
- movs r2, 0x4
- bl PrepareBufferDataTransfer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800EB50: .4byte gUnknown_2022874
- thumb_func_end EmitBattleAnimation
-
- thumb_func_start EmitLinkStandbyMsg
-EmitLinkStandbyMsg: @ 800EB54
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EB70 @ =gUnknown_2022874
- movs r2, 0x35
- strb r2, [r1]
- strb r3, [r1, 0x1]
- movs r2, 0x2
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800EB70: .4byte gUnknown_2022874
- thumb_func_end EmitLinkStandbyMsg
-
- thumb_func_start EmitResetActionMoveSelection
-EmitResetActionMoveSelection: @ 800EB74
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EB90 @ =gUnknown_2022874
- movs r2, 0x36
- strb r2, [r1]
- strb r3, [r1, 0x1]
- movs r2, 0x2
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800EB90: .4byte gUnknown_2022874
- thumb_func_end EmitResetActionMoveSelection
-
- thumb_func_start EmitCmd55
-EmitCmd55: @ 800EB94
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EBB0 @ =gUnknown_2022874
- movs r2, 0x37
- strb r2, [r1]
- strb r3, [r1, 0x1]
- movs r2, 0x2
- bl PrepareBufferDataTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_0800EBB0: .4byte gUnknown_2022874
- thumb_func_end EmitCmd55
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_gfx_sfx_util.s b/asm/battle_gfx_sfx_util.s
deleted file mode 100644
index ba54bafbb..000000000
--- a/asm/battle_gfx_sfx_util.s
+++ /dev/null
@@ -1,3606 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start AllocateBattleSpritesData
-AllocateBattleSpritesData: @ 8033DB8
- push {r4,lr}
- ldr r4, _08033DF4 @ =gUnknown_2024018
- movs r0, 0x10
- bl AllocZeroed
- str r0, [r4]
- movs r0, 0x10
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1]
- movs r0, 0x30
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x4]
- movs r0, 0x10
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x8]
- movs r0, 0x50
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0xC]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08033DF4: .4byte gUnknown_2024018
- thumb_func_end AllocateBattleSpritesData
-
- thumb_func_start FreeBattleSpritesData
-FreeBattleSpritesData: @ 8033DF8
- push {r4,r5,lr}
- ldr r5, _08033E38 @ =gUnknown_2024018
- ldr r0, [r5]
- cmp r0, 0
- beq _08033E32
- ldr r0, [r0, 0xC]
- bl Free
- ldr r0, [r5]
- movs r4, 0
- str r4, [r0, 0xC]
- ldr r0, [r0, 0x8]
- bl Free
- ldr r0, [r5]
- str r4, [r0, 0x8]
- ldr r0, [r0, 0x4]
- bl Free
- ldr r0, [r5]
- str r4, [r0, 0x4]
- ldr r0, [r0]
- bl Free
- ldr r0, [r5]
- str r4, [r0]
- bl Free
- str r4, [r5]
-_08033E32:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08033E38: .4byte gUnknown_2024018
- thumb_func_end FreeBattleSpritesData
-
- thumb_func_start sub_8033E3C
-sub_8033E3C: @ 8033E3C
- push {r4-r7,lr}
- adds r6, r0, 0
- ldrh r0, [r6, 0x30]
- lsls r0, 24
- lsrs r0, 24
- ldr r7, _08033E80 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r5, r1, 2
- adds r3, r5, r7
- adds r0, r3, 0
- adds r0, 0x3F
- ldrb r4, [r0]
- lsls r0, r4, 26
- cmp r0, 0
- bge _08033EA0
- adds r0, r3, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- blt _08033EA0
- adds r1, r3, 0
- adds r1, 0x2C
- ldrb r2, [r1]
- lsls r0, r2, 25
- cmp r0, 0
- bge _08033E84
- movs r0, 0x41
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- b _08033EA0
- .align 2, 0
-_08033E80: .4byte gSprites
-_08033E84:
- lsls r0, r4, 27
- cmp r0, 0
- bge _08033EA0
- adds r0, r7, 0
- adds r0, 0x1C
- adds r0, r5, r0
- ldr r1, _08033EA8 @ =sub_8012100
- str r1, [r0]
- adds r0, r3, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- ldr r0, _08033EAC @ =SpriteCallbackDummy
- str r0, [r6, 0x1C]
-_08033EA0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08033EA8: .4byte sub_8012100
-_08033EAC: .4byte SpriteCallbackDummy
- thumb_func_end sub_8033E3C
-
- thumb_func_start sub_8033EB0
-sub_8033EB0: @ 8033EB0
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- adds r3, r4, 0
- adds r3, 0x2C
- ldrb r0, [r3]
- movs r2, 0x40
- orrs r0, r2
- strb r0, [r3]
- ldr r0, _08033ED4 @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
- cmp r1, 0
- bne _08033ED8
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- b _08033EE0
- .align 2, 0
-_08033ED4: .4byte SpriteCallbackDummy
-_08033ED8:
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_08033EE0:
- adds r0, r4, 0
- bl AnimateSprite
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8033EB0
-
- thumb_func_start sub_8033EEC
-sub_8033EEC: @ 8033EEC
- push {lr}
- adds r2, r0, 0
- ldr r0, _08033F14 @ =gUnknown_2023F4C
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08033F0E
- ldrh r0, [r2, 0x2E]
- ldrh r1, [r2, 0x24]
- adds r0, r1
- strh r0, [r2, 0x24]
- lsls r0, 16
- cmp r0, 0
- bne _08033F0E
- ldr r0, _08033F18 @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
-_08033F0E:
- pop {r0}
- bx r0
- .align 2, 0
-_08033F14: .4byte gUnknown_2023F4C
-_08033F18: .4byte SpriteCallbackDummy
- thumb_func_end sub_8033EEC
-
- thumb_func_start InitAndLaunchChosenStatusAnimation
-InitAndLaunchChosenStatusAnimation: @ 8033F1C
- push {r4-r6,lr}
- adds r4, r1, 0
- lsls r0, 24
- ldr r6, _08033F50 @ =gUnknown_2024018
- ldr r1, [r6]
- ldr r5, _08033F54 @ =gActiveBattler
- ldrb r2, [r5]
- ldr r3, [r1, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrb r2, [r1]
- movs r3, 0x10
- orrs r2, r3
- strb r2, [r1]
- cmp r0, 0
- bne _08033F9C
- cmp r4, 0x20
- bne _08033F58
- ldrb r0, [r5]
- movs r1, 0x6
- bl LaunchStatusAnimation
- b _08034016
- .align 2, 0
-_08033F50: .4byte gUnknown_2024018
-_08033F54: .4byte gActiveBattler
-_08033F58:
- cmp r4, 0x8
- beq _08033F64
- movs r0, 0x80
- ands r0, r4
- cmp r0, 0
- beq _08033F6E
-_08033F64:
- ldrb r0, [r5]
- movs r1, 0
- bl LaunchStatusAnimation
- b _08034016
-_08033F6E:
- cmp r4, 0x10
- bne _08033F7C
- ldrb r0, [r5]
- movs r1, 0x2
- bl LaunchStatusAnimation
- b _08034016
-_08033F7C:
- movs r0, 0x7
- ands r0, r4
- cmp r0, 0
- beq _08033F8E
- ldrb r0, [r5]
- movs r1, 0x4
- bl LaunchStatusAnimation
- b _08034016
-_08033F8E:
- cmp r4, 0x40
- bne _08033FFE
- ldrb r0, [r5]
- movs r1, 0x5
- bl LaunchStatusAnimation
- b _08034016
-_08033F9C:
- movs r0, 0xF0
- lsls r0, 12
- ands r0, r4
- cmp r0, 0
- beq _08033FB0
- ldrb r0, [r5]
- movs r1, 0x3
- bl LaunchStatusAnimation
- b _08034016
-_08033FB0:
- movs r0, 0x7
- ands r0, r4
- cmp r0, 0
- beq _08033FC2
- ldrb r0, [r5]
- movs r1, 0x1
- bl LaunchStatusAnimation
- b _08034016
-_08033FC2:
- movs r0, 0x80
- lsls r0, 21
- ands r0, r4
- cmp r0, 0
- beq _08033FD6
- ldrb r0, [r5]
- movs r1, 0x7
- bl LaunchStatusAnimation
- b _08034016
-_08033FD6:
- movs r0, 0x80
- lsls r0, 20
- ands r0, r4
- cmp r0, 0
- beq _08033FEA
- ldrb r0, [r5]
- movs r1, 0x8
- bl LaunchStatusAnimation
- b _08034016
-_08033FEA:
- movs r0, 0xE0
- lsls r0, 8
- ands r0, r4
- cmp r0, 0
- beq _08033FFE
- ldrb r0, [r5]
- movs r1, 0x9
- bl LaunchStatusAnimation
- b _08034016
-_08033FFE:
- ldr r0, [r6]
- ldrb r2, [r5]
- 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]
-_08034016:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end InitAndLaunchChosenStatusAnimation
-
- thumb_func_start TryHandleLaunchBattleTableAnimation
-TryHandleLaunchBattleTableAnimation: @ 803401C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r4, [sp, 0x24]
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp]
- lsls r3, 24
- lsrs r5, r3, 24
- lsls r4, 16
- lsrs r7, r4, 16
- cmp r5, 0
- bne _08034064
- movs r0, 0x80
- ands r0, r7
- cmp r0, 0
- beq _08034064
- ldr r0, _08034060 @ =gBattleMonForms
- adds r0, r6, r0
- movs r2, 0x7F
- adds r1, r7, 0
- ands r1, r2
- strb r1, [r0]
- movs r0, 0x1
- b _08034132
- .align 2, 0
-_08034060: .4byte gBattleMonForms
-_08034064:
- ldr r0, _08034090 @ =gUnknown_2024018
- mov r9, r0
- ldr r0, [r0]
- ldr r0, [r0]
- lsls r4, r6, 2
- adds r0, r4, r0
- ldrb r1, [r0]
- movs r2, 0x4
- mov r8, r2
- mov r0, r8
- ands r0, r1
- cmp r0, 0
- beq _080340E0
- adds r0, r5, 0
- bl ShouldAnimBeDoneRegardlessOfSubsitute
- lsls r0, 24
- cmp r0, 0
- bne _08034094
- movs r0, 0x1
- b _08034132
- .align 2, 0
-_08034090: .4byte gUnknown_2024018
-_08034094:
- mov r1, r9
- ldr r0, [r1]
- ldr r0, [r0]
- adds r0, r4, r0
- ldrb r1, [r0]
- mov r0, r8
- ands r0, r1
- cmp r0, 0
- beq _080340E0
- cmp r5, 0x2
- bne _080340E0
- ldr r1, _080340D8 @ =gSprites
- ldr r0, _080340DC @ =gBattlerSpriteIds
- adds r0, r6, r0
- ldrb r2, [r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _080340E0
- adds r0, r6, 0
- movs r1, 0x1
- bl LoadBattleMonGfxAndAnimate
- adds r0, r6, 0
- bl ClearBehindSubstituteBit
- movs r0, 0x1
- b _08034132
- .align 2, 0
-_080340D8: .4byte gSprites
-_080340DC: .4byte gBattlerSpriteIds
-_080340E0:
- ldr r0, _08034144 @ =gBattleAnimAttacker
- mov r2, r10
- strb r2, [r0]
- ldr r0, _08034148 @ =gBattleAnimTarget
- mov r1, sp
- ldrb r1, [r1]
- strb r1, [r0]
- ldr r4, _0803414C @ =gUnknown_2024018
- ldr r0, [r4]
- ldr r0, [r0, 0x8]
- strh r7, [r0]
- ldr r0, _08034150 @ =gUnknown_81C6EA8
- adds r1, r5, 0
- movs r2, 0
- bl sub_80725D4
- ldr r0, _08034154 @ =Task_ClearBitWhenBattleTableAnimDone
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08034158 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r6, [r1, 0x8]
- ldr r0, [r4]
- movs r2, 0x8
- ldrsh r1, [r1, r2]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- movs r0, 0
-_08034132:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08034144: .4byte gBattleAnimAttacker
-_08034148: .4byte gBattleAnimTarget
-_0803414C: .4byte gUnknown_2024018
-_08034150: .4byte gUnknown_81C6EA8
-_08034154: .4byte Task_ClearBitWhenBattleTableAnimDone
-_08034158: .4byte gTasks
- thumb_func_end TryHandleLaunchBattleTableAnimation
-
- thumb_func_start Task_ClearBitWhenBattleTableAnimDone
-Task_ClearBitWhenBattleTableAnimDone: @ 803415C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080341A4 @ =gUnknown_2037EDC
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _080341A8 @ =gUnknown_2037EE1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0803419E
- ldr r0, _080341AC @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r1, _080341B0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- ldr r2, [r2, 0x4]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- adds r0, r4, 0
- bl DestroyTask
-_0803419E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080341A4: .4byte gUnknown_2037EDC
-_080341A8: .4byte gUnknown_2037EE1
-_080341AC: .4byte gUnknown_2024018
-_080341B0: .4byte gTasks
- thumb_func_end Task_ClearBitWhenBattleTableAnimDone
-
- thumb_func_start ShouldAnimBeDoneRegardlessOfSubsitute
-ShouldAnimBeDoneRegardlessOfSubsitute: @ 80341B4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xD
- bgt _080341C8
- cmp r0, 0xA
- bge _080341CC
- cmp r0, 0x2
- beq _080341CC
- b _080341D0
-_080341C8:
- cmp r0, 0x11
- bne _080341D0
-_080341CC:
- movs r0, 0x1
- b _080341D2
-_080341D0:
- movs r0, 0
-_080341D2:
- pop {r1}
- bx r1
- thumb_func_end ShouldAnimBeDoneRegardlessOfSubsitute
-
- thumb_func_start InitAndLaunchSpecialAnimation
-InitAndLaunchSpecialAnimation: @ 80341D8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r3, 24
- lsrs r3, 24
- ldr r0, _08034230 @ =gBattleAnimAttacker
- strb r1, [r0]
- ldr r0, _08034234 @ =gBattleAnimTarget
- strb r2, [r0]
- ldr r0, _08034238 @ =gUnknown_81C6F18
- adds r1, r3, 0
- movs r2, 0
- bl sub_80725D4
- ldr r0, _0803423C @ =Task_ClearBitWhenSpecialAnimDone
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08034240 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
- ldr r0, _08034244 @ =gUnknown_2024018
- ldr r0, [r0]
- movs r2, 0x8
- ldrsh r1, [r1, r2]
- ldr r2, [r0, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08034230: .4byte gBattleAnimAttacker
-_08034234: .4byte gBattleAnimTarget
-_08034238: .4byte gUnknown_81C6F18
-_0803423C: .4byte Task_ClearBitWhenSpecialAnimDone
-_08034240: .4byte gTasks
-_08034244: .4byte gUnknown_2024018
- thumb_func_end InitAndLaunchSpecialAnimation
-
- thumb_func_start Task_ClearBitWhenSpecialAnimDone
-Task_ClearBitWhenSpecialAnimDone: @ 8034248
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08034290 @ =gUnknown_2037EDC
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _08034294 @ =gUnknown_2037EE1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0803428A
- ldr r0, _08034298 @ =gUnknown_2024018
- ldr r2, [r0]
- ldr r1, _0803429C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- ldr r2, [r2, 0x4]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1]
- movs r0, 0x41
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- adds r0, r4, 0
- bl DestroyTask
-_0803428A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08034290: .4byte gUnknown_2037EDC
-_08034294: .4byte gUnknown_2037EE1
-_08034298: .4byte gUnknown_2024018
-_0803429C: .4byte gTasks
- thumb_func_end Task_ClearBitWhenSpecialAnimDone
-
- thumb_func_start IsMoveWithoutAnimation
-IsMoveWithoutAnimation: @ 80342A0
- movs r0, 0
- bx lr
- thumb_func_end IsMoveWithoutAnimation
-
- thumb_func_start mplay_80342A4
-mplay_80342A4: @ 80342A4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r5, 0
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080342EC
- ldr r2, _080342F4 @ =gUnknown_2024018
- ldr r0, [r2]
- ldr r1, [r0, 0x4]
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- adds r1, 0x1
- strb r1, [r0, 0x8]
- ldr r2, [r2]
- ldr r0, _080342F8 @ =gActiveBattler
- ldrb r1, [r0]
- ldr r2, [r2, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x8]
- cmp r0, 0x1D
- bls _080342F0
- ldr r0, _080342FC @ =gMPlayInfo_SE1
- bl m4aMPlayStop
- ldr r0, _08034300 @ =gMPlayInfo_SE2
- bl m4aMPlayStop
-_080342EC:
- cmp r5, 0
- beq _08034304
-_080342F0:
- movs r0, 0x1
- b _08034316
- .align 2, 0
-_080342F4: .4byte gUnknown_2024018
-_080342F8: .4byte gActiveBattler
-_080342FC: .4byte gMPlayInfo_SE1
-_08034300: .4byte gMPlayInfo_SE2
-_08034304:
- ldr r0, _0803431C @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- strb r5, [r0, 0x8]
- movs r0, 0
-_08034316:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0803431C: .4byte gUnknown_2024018
- thumb_func_end mplay_80342A4
-
- thumb_func_start BattleLoadOpponentMonSpriteGfx
-BattleLoadOpponentMonSpriteGfx: @ 8034320
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- movs r1, 0
- bl GetMonData
- str r0, [sp]
- ldr r0, _08034360 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- mov r2, r8
- lsls r1, r2, 2
- adds r2, r1, r0
- ldrh r0, [r2, 0x2]
- cmp r0, 0
- bne _08034364
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r6, [sp]
- b _0803436C
- .align 2, 0
-_08034360: .4byte gUnknown_2024018
-_08034364:
- ldrh r5, [r2, 0x2]
- ldr r0, _080343C0 @ =gUnknown_2024008
- adds r0, r1, r0
- ldr r6, [r0]
-_0803436C:
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- mov r10, r0
- mov r0, r8
- bl GetBattlerPosition
- lsls r0, 24
- lsls r2, r5, 3
- ldr r1, _080343C4 @ =gMonFrontPicTable
- adds r2, r1
- ldr r1, _080343C8 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- lsrs r0, 22
- adds r1, 0x4
- adds r1, r0
- ldr r1, [r1]
- adds r0, r2, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl HandleLoadSpecialPokePic_DontHandleDeoxys
- mov r3, r8
- lsls r2, r3, 4
- movs r0, 0x80
- lsls r0, 1
- adds r7, r2, r0
- ldr r0, _080343CC @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- lsls r1, r3, 2
- adds r0, r1, r0
- ldrh r0, [r0, 0x2]
- str r1, [sp, 0x4]
- mov r9, r2
- cmp r0, 0
- bne _080343D0
- adds r0, r4, 0
- bl GetMonFrontSpritePal
- b _080343DA
- .align 2, 0
-_080343C0: .4byte gUnknown_2024008
-_080343C4: .4byte gMonFrontPicTable
-_080343C8: .4byte gMonSpritesGfxPtr
-_080343CC: .4byte gUnknown_2024018
-_080343D0:
- adds r0, r5, 0
- mov r1, r10
- ldr r2, [sp]
- bl GetFrontSpritePalFromSpeciesAndPersonality
-_080343DA:
- adds r6, r0, 0
- movs r0, 0x80
- lsls r0, 3
- bl AllocZeroed
- adds r4, r0, 0
- adds r0, r6, 0
- adds r1, r4, 0
- bl LZDecompressWram
- adds r0, r4, 0
- adds r1, r7, 0
- movs r2, 0x20
- bl LoadPalette
- mov r1, r9
- adds r1, 0x80
- adds r0, r4, 0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r4, 0
- bl Free
- ldr r0, _08034478 @ =0x00000181
- cmp r5, r0
- bne _0803443C
- movs r7, 0x80
- lsls r7, 1
- add r7, r9
- ldr r5, _0803447C @ =gBattleStruct
- ldr r1, [r5]
- movs r4, 0x80
- lsls r4, 1
- adds r1, r4
- adds r0, r6, 0
- bl LZDecompressWram
- ldr r0, _08034480 @ =gBattleMonForms
- add r0, r8
- ldrb r1, [r0]
- lsls r1, 5
- adds r1, r4
- ldr r0, [r5]
- adds r0, r1
- adds r1, r7, 0
- movs r2, 0x20
- bl LoadPalette
-_0803443C:
- ldr r0, _08034484 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- ldr r1, [sp, 0x4]
- adds r0, r1, r0
- ldrh r0, [r0, 0x2]
- cmp r0, 0
- beq _08034468
- ldr r3, _08034488 @ =0x00007fff
- adds r0, r7, 0
- movs r1, 0x10
- movs r2, 0x6
- bl BlendPalette
- lsls r1, r7, 1
- ldr r0, _0803448C @ =gPlttBufferFaded
- adds r0, r1, r0
- ldr r2, _08034490 @ =gPlttBufferUnfaded
- adds r1, r2
- ldr r2, _08034494 @ =0x04000008
- bl CpuSet
-_08034468:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08034478: .4byte 0x00000181
-_0803447C: .4byte gBattleStruct
-_08034480: .4byte gBattleMonForms
-_08034484: .4byte gUnknown_2024018
-_08034488: .4byte 0x00007fff
-_0803448C: .4byte gPlttBufferFaded
-_08034490: .4byte gPlttBufferUnfaded
-_08034494: .4byte 0x04000008
- thumb_func_end BattleLoadOpponentMonSpriteGfx
-
- thumb_func_start sub_8034498
-sub_8034498: @ 8034498
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r6, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- movs r1, 0
- bl GetMonData
- str r0, [sp]
- ldr r0, _080344D8 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- mov r2, r8
- lsls r1, r2, 2
- adds r2, r1, r0
- ldrh r0, [r2, 0x2]
- cmp r0, 0
- bne _080344DC
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r4, [sp]
- b _080344E4
- .align 2, 0
-_080344D8: .4byte gUnknown_2024018
-_080344DC:
- ldrh r5, [r2, 0x2]
- ldr r0, _08034538 @ =gUnknown_2024008
- adds r0, r1, r0
- ldr r4, [r0]
-_080344E4:
- adds r0, r6, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x4]
- mov r0, r8
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x1
- mov r1, r8
- bl sub_804455C
- lsls r0, 24
- lsrs r0, 24
- mov r1, r8
- lsls r1, 2
- mov r10, r1
- cmp r0, 0x1
- beq _0803451C
- ldr r0, _0803453C @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- add r0, r10
- ldrh r0, [r0, 0x2]
- cmp r0, 0
- beq _08034548
-_0803451C:
- lsls r0, r5, 3
- ldr r1, _08034540 @ =gMonBackPicTable
- adds r0, r1
- ldr r1, _08034544 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- lsls r2, r7, 2
- adds r1, 0x4
- adds r1, r2
- ldr r1, [r1]
- adds r2, r5, 0
- adds r3, r4, 0
- bl HandleLoadSpecialPokePic_DontHandleDeoxys
- b _08034562
- .align 2, 0
-_08034538: .4byte gUnknown_2024008
-_0803453C: .4byte gUnknown_2024018
-_08034540: .4byte gMonBackPicTable
-_08034544: .4byte gMonSpritesGfxPtr
-_08034548:
- lsls r0, r5, 3
- ldr r1, _08034584 @ =gMonBackPicTable
- adds r0, r1
- ldr r1, _08034588 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- lsls r2, r7, 2
- adds r1, 0x4
- adds r1, r2
- ldr r1, [r1]
- adds r2, r5, 0
- adds r3, r4, 0
- bl HandleLoadSpecialPokePic
-_08034562:
- mov r2, r8
- lsls r1, r2, 4
- movs r0, 0x80
- lsls r0, 1
- adds r7, r1, r0
- ldr r0, _0803458C @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- add r0, r10
- ldrh r0, [r0, 0x2]
- mov r9, r1
- cmp r0, 0
- bne _08034590
- adds r0, r6, 0
- bl GetMonFrontSpritePal
- b _0803459A
- .align 2, 0
-_08034584: .4byte gMonBackPicTable
-_08034588: .4byte gMonSpritesGfxPtr
-_0803458C: .4byte gUnknown_2024018
-_08034590:
- adds r0, r5, 0
- ldr r1, [sp, 0x4]
- ldr r2, [sp]
- bl GetFrontSpritePalFromSpeciesAndPersonality
-_0803459A:
- adds r6, r0, 0
- movs r0, 0x80
- lsls r0, 3
- bl AllocZeroed
- adds r4, r0, 0
- adds r0, r6, 0
- adds r1, r4, 0
- bl LZDecompressWram
- adds r0, r4, 0
- adds r1, r7, 0
- movs r2, 0x20
- bl LoadPalette
- mov r1, r9
- adds r1, 0x80
- adds r0, r4, 0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r4, 0
- bl Free
- ldr r0, _08034638 @ =0x00000181
- cmp r5, r0
- bne _080345FC
- movs r7, 0x80
- lsls r7, 1
- add r7, r9
- ldr r5, _0803463C @ =gBattleStruct
- ldr r1, [r5]
- movs r4, 0x80
- lsls r4, 1
- adds r1, r4
- adds r0, r6, 0
- bl LZDecompressWram
- ldr r0, _08034640 @ =gBattleMonForms
- add r0, r8
- ldrb r1, [r0]
- lsls r1, 5
- adds r1, r4
- ldr r0, [r5]
- adds r0, r1
- adds r1, r7, 0
- movs r2, 0x20
- bl LoadPalette
-_080345FC:
- ldr r0, _08034644 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- add r0, r10
- ldrh r0, [r0, 0x2]
- cmp r0, 0
- beq _08034626
- ldr r3, _08034648 @ =0x00007fff
- adds r0, r7, 0
- movs r1, 0x10
- movs r2, 0x6
- bl BlendPalette
- lsls r1, r7, 1
- ldr r0, _0803464C @ =gPlttBufferFaded
- adds r0, r1, r0
- ldr r2, _08034650 @ =gPlttBufferUnfaded
- adds r1, r2
- ldr r2, _08034654 @ =0x04000008
- bl CpuSet
-_08034626:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08034638: .4byte 0x00000181
-_0803463C: .4byte gBattleStruct
-_08034640: .4byte gBattleMonForms
-_08034644: .4byte gUnknown_2024018
-_08034648: .4byte 0x00007fff
-_0803464C: .4byte gPlttBufferFaded
-_08034650: .4byte gPlttBufferUnfaded
-_08034654: .4byte 0x04000008
- thumb_func_end sub_8034498
-
- thumb_func_start sub_8034658
-sub_8034658: @ 8034658
- push {r4-r6,lr}
- lsls r4, r1, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl GetBattlerPosition
- lsls r0, 24
- ldr r2, _080346B8 @ =gUnknown_8E93B38
- ldr r1, _080346BC @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- lsrs r0, 22
- adds r1, 0x4
- adds r1, r0
- ldr r1, [r1]
- adds r0, r2, 0
- bl LZ77UnCompWram
- lsls r4, 4
- movs r0, 0x80
- lsls r0, 1
- adds r6, r4, r0
- movs r0, 0x80
- lsls r0, 3
- bl AllocZeroed
- adds r5, r0, 0
- ldr r0, _080346C0 @ =gUnknown_8E93B14
- adds r1, r5, 0
- bl LZDecompressWram
- adds r0, r5, 0
- adds r1, r6, 0
- movs r2, 0x20
- bl LoadPalette
- adds r4, 0x80
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r5, 0
- bl Free
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080346B8: .4byte gUnknown_8E93B38
-_080346BC: .4byte gMonSpritesGfxPtr
-_080346C0: .4byte gUnknown_8E93B14
- thumb_func_end sub_8034658
-
- thumb_func_start sub_80346C4
-sub_80346C4: @ 80346C4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x8
- adds r5, r0, 0
- adds r0, r1, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerPosition
- adds r4, r0, 0
- lsls r4, 24
- lsls r5, 3
- ldr r6, _0803473C @ =gTrainerFrontPicTable
- adds r6, r5, r6
- ldr r0, _08034740 @ =gMonSpritesGfxPtr
- mov r8, r0
- ldr r0, [r0]
- lsrs r4, 22
- adds r0, 0x4
- adds r0, r4
- ldr r1, [r0]
- adds r0, r6, 0
- movs r2, 0
- bl DecompressPicFromTable
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x4
- adds r0, r4
- ldr r0, [r0]
- str r0, [sp]
- ldrh r2, [r6, 0x4]
- ldr r0, _08034744 @ =0xffff0000
- ldr r1, [sp, 0x4]
- ands r1, r0
- orrs r1, r2
- str r1, [sp, 0x4]
- ldrh r2, [r6, 0x6]
- lsls r2, 16
- ldr r0, _08034748 @ =0x0000ffff
- ands r0, r1
- orrs r0, r2
- str r0, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- ldr r0, _0803474C @ =gTrainerFrontPicPaletteTable
- adds r5, r0
- adds r0, r5, 0
- bl LoadCompressedSpritePaletteUsingHeap
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803473C: .4byte gTrainerFrontPicTable
-_08034740: .4byte gMonSpritesGfxPtr
-_08034744: .4byte 0xffff0000
-_08034748: .4byte 0x0000ffff
-_0803474C: .4byte gTrainerFrontPicPaletteTable
- thumb_func_end sub_80346C4
-
- thumb_func_start sub_8034750
-sub_8034750: @ 8034750
- push {lr}
- lsls r0, 16
- lsls r1, 24
- ldr r2, _08034774 @ =gUnknown_8239FD4
- lsrs r0, 13
- adds r0, r2
- ldr r0, [r0]
- lsrs r1, 4
- movs r2, 0x80
- lsls r2, 17
- adds r1, r2
- lsrs r1, 16
- movs r2, 0x20
- bl LoadCompressedPalette
- pop {r0}
- bx r0
- .align 2, 0
-_08034774: .4byte gUnknown_8239FD4
- thumb_func_end sub_8034750
-
- thumb_func_start nullsub_16
-nullsub_16: @ 8034778
- bx lr
- thumb_func_end nullsub_16
-
- thumb_func_start sub_803477C
-sub_803477C: @ 803477C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- ldr r0, _080347A0 @ =gTrainerFrontPicPaletteTable
- lsrs r4, 13
- adds r0, r4, r0
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- ldr r0, _080347A4 @ =gTrainerFrontPicTable
- adds r4, r0
- ldrh r0, [r4, 0x6]
- bl FreeSpriteTilesByTag
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080347A0: .4byte gTrainerFrontPicPaletteTable
-_080347A4: .4byte gTrainerFrontPicTable
- thumb_func_end sub_803477C
-
- thumb_func_start sub_80347A8
-sub_80347A8: @ 80347A8
- push {r4-r7,lr}
- ldr r4, _080347D4 @ =gUnknown_8260260
- adds r0, r4, 0
- bl LoadSpritePalette
- adds r4, 0x8
- adds r0, r4, 0
- bl LoadSpritePalette
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- bne _080347E0
- ldr r0, _080347D8 @ =gUnknown_8260208
- bl LoadCompressedSpriteSheetUsingHeap
- ldr r0, _080347DC @ =gUnknown_8260210
- bl LoadCompressedSpriteSheetUsingHeap
- movs r5, 0x2
- b _08034802
- .align 2, 0
-_080347D4: .4byte gUnknown_8260260
-_080347D8: .4byte gUnknown_8260208
-_080347DC: .4byte gUnknown_8260210
-_080347E0:
- ldr r4, _08034828 @ =gUnknown_8260218
- adds r0, r4, 0
- bl LoadCompressedSpriteSheetUsingHeap
- adds r4, 0x8
- adds r0, r4, 0
- bl LoadCompressedSpriteSheetUsingHeap
- ldr r4, _0803482C @ =gUnknown_8260228
- adds r0, r4, 0
- bl LoadCompressedSpriteSheetUsingHeap
- adds r4, 0x8
- adds r0, r4, 0
- bl LoadCompressedSpriteSheetUsingHeap
- movs r5, 0x4
-_08034802:
- movs r4, 0
- cmp r4, r5
- bcs _08034822
- ldr r7, _08034830 @ =gUnknown_2023BD6
- ldr r6, _08034834 @ =gUnknown_8260240
-_0803480C:
- adds r0, r4, r7
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r6
- bl LoadCompressedSpriteSheetUsingHeap
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r5
- bcc _0803480C
-_08034822:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08034828: .4byte gUnknown_8260218
-_0803482C: .4byte gUnknown_8260228
-_08034830: .4byte gUnknown_2023BD6
-_08034834: .4byte gUnknown_8260240
- thumb_func_end sub_80347A8
-
- thumb_func_start BattleLoadAllHealthBoxesGfx
-BattleLoadAllHealthBoxesGfx: @ 8034838
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- movs r6, 0
- cmp r4, 0
- bne _08034848
- b _0803495A
-_08034848:
- cmp r4, 0x1
- bne _08034864
- ldr r4, _08034860 @ =gUnknown_8260260
- adds r0, r4, 0
- bl LoadSpritePalette
- adds r4, 0x8
- adds r0, r4, 0
- bl LoadSpritePalette
- b _0803495A
- .align 2, 0
-_08034860: .4byte gUnknown_8260260
-_08034864:
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- bne _080348CC
- cmp r4, 0x2
- bne _0803489C
- ldr r0, _08034888 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08034890
- ldr r0, _0803488C @ =gUnknown_8260238
- bl LoadCompressedSpriteSheetUsingHeap
- b _0803495A
- .align 2, 0
-_08034888: .4byte gBattleTypeFlags
-_0803488C: .4byte gUnknown_8260238
-_08034890:
- ldr r0, _08034898 @ =gUnknown_8260208
- bl LoadCompressedSpriteSheetUsingHeap
- b _0803495A
- .align 2, 0
-_08034898: .4byte gUnknown_8260208
-_0803489C:
- cmp r4, 0x3
- bne _080348AC
- ldr r0, _080348A8 @ =gUnknown_8260210
- bl LoadCompressedSpriteSheetUsingHeap
- b _0803495A
- .align 2, 0
-_080348A8: .4byte gUnknown_8260210
-_080348AC:
- cmp r4, 0x4
- bne _080348BC
- ldr r0, _080348B8 @ =gUnknown_2023BD6
- ldrb r0, [r0]
- b _08034944
- .align 2, 0
-_080348B8: .4byte gUnknown_2023BD6
-_080348BC:
- cmp r4, 0x5
- bne _08034958
- ldr r0, _080348C8 @ =gUnknown_2023BD6
- ldrb r0, [r0, 0x1]
- b _08034944
- .align 2, 0
-_080348C8: .4byte gUnknown_2023BD6
-_080348CC:
- cmp r4, 0x2
- bne _080348DC
- ldr r0, _080348D8 @ =gUnknown_8260218
- bl LoadCompressedSpriteSheetUsingHeap
- b _0803495A
- .align 2, 0
-_080348D8: .4byte gUnknown_8260218
-_080348DC:
- cmp r4, 0x3
- bne _080348EC
- ldr r0, _080348E8 @ =gUnknown_8260220
- bl LoadCompressedSpriteSheetUsingHeap
- b _0803495A
- .align 2, 0
-_080348E8: .4byte gUnknown_8260220
-_080348EC:
- cmp r4, 0x4
- bne _080348FC
- ldr r0, _080348F8 @ =gUnknown_8260228
- bl LoadCompressedSpriteSheetUsingHeap
- b _0803495A
- .align 2, 0
-_080348F8: .4byte gUnknown_8260228
-_080348FC:
- cmp r4, 0x5
- bne _0803490C
- ldr r0, _08034908 @ =gUnknown_8260230
- bl LoadCompressedSpriteSheetUsingHeap
- b _0803495A
- .align 2, 0
-_08034908: .4byte gUnknown_8260230
-_0803490C:
- cmp r4, 0x6
- bne _0803491C
- ldr r0, _08034918 @ =gUnknown_2023BD6
- ldrb r0, [r0]
- b _08034944
- .align 2, 0
-_08034918: .4byte gUnknown_2023BD6
-_0803491C:
- cmp r4, 0x7
- bne _0803492C
- ldr r0, _08034928 @ =gUnknown_2023BD6
- ldrb r0, [r0, 0x1]
- b _08034944
- .align 2, 0
-_08034928: .4byte gUnknown_2023BD6
-_0803492C:
- cmp r4, 0x8
- bne _0803493C
- ldr r0, _08034938 @ =gUnknown_2023BD6
- ldrb r0, [r0, 0x2]
- b _08034944
- .align 2, 0
-_08034938: .4byte gUnknown_2023BD6
-_0803493C:
- cmp r5, 0x9
- bne _08034958
- ldr r0, _08034950 @ =gUnknown_2023BD6
- ldrb r0, [r0, 0x3]
-_08034944:
- lsls r0, 3
- ldr r1, _08034954 @ =gUnknown_8260240
- adds r0, r1
- bl LoadCompressedSpriteSheetUsingHeap
- b _0803495A
- .align 2, 0
-_08034950: .4byte gUnknown_2023BD6
-_08034954: .4byte gUnknown_8260240
-_08034958:
- movs r6, 0x1
-_0803495A:
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end BattleLoadAllHealthBoxesGfx
-
- thumb_func_start LoadBattleBarGfx
-LoadBattleBarGfx: @ 8034964
- push {lr}
- ldr r0, _0803497C @ =gFile_graphics_interface_hp_numbers
- ldr r1, _08034980 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- movs r2, 0xBA
- lsls r2, 1
- adds r1, r2
- ldr r1, [r1]
- bl LZDecompressWram
- pop {r0}
- bx r0
- .align 2, 0
-_0803497C: .4byte gFile_graphics_interface_hp_numbers
-_08034980: .4byte gMonSpritesGfxPtr
- thumb_func_end LoadBattleBarGfx
-
- thumb_func_start BattleInitAllSprites
-BattleInitAllSprites: @ 8034984
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r6, 0
- ldrb r0, [r5]
- cmp r0, 0x6
- bls _08034994
- b _08034AF2
-_08034994:
- lsls r0, 2
- ldr r1, _080349A0 @ =_080349A4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080349A0: .4byte _080349A4
- .align 2, 0
-_080349A4:
- .4byte _080349C0
- .4byte _080349C6
- .4byte _08034AD0
- .4byte _080349DC
- .4byte _08034A0C
- .4byte _08034A48
- .4byte _08034AE8
-_080349C0:
- bl ClearSpritesBankHealthboxAnimData
- b _08034AD0
-_080349C6:
- ldrb r0, [r4]
- bl BattleLoadAllHealthBoxesGfx
- lsls r0, 24
- cmp r0, 0
- beq _080349D4
- b _08034ACC
-_080349D4:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08034AF2
-_080349DC:
- ldr r0, _080349F4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080349F8
- ldrb r0, [r4]
- cmp r0, 0
- bne _080349F8
- bl CreateSafariPlayerHealthboxSprites
- b _080349FE
- .align 2, 0
-_080349F4: .4byte gBattleTypeFlags
-_080349F8:
- ldrb r0, [r4]
- bl CreateBankHealthboxSprites
-_080349FE:
- ldr r2, _08034A08 @ =gUnknown_3004FF0
- ldrb r1, [r4]
- adds r1, r2
- strb r0, [r1]
- b _08034ABA
- .align 2, 0
-_08034A08: .4byte gUnknown_3004FF0
-_08034A0C:
- ldrb r0, [r4]
- bl SetBankHealthboxSpritePos
- ldr r0, _08034A2C @ =gUnknown_2023BD6
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _08034A34
- ldr r0, _08034A30 @ =gUnknown_3004FF0
- adds r0, r1, r0
- ldrb r0, [r0]
- movs r1, 0
- bl nullsub_21
- b _08034ABA
- .align 2, 0
-_08034A2C: .4byte gUnknown_2023BD6
-_08034A30: .4byte gUnknown_3004FF0
-_08034A34:
- ldr r0, _08034A44 @ =gUnknown_3004FF0
- adds r0, r1, r0
- ldrb r0, [r0]
- movs r1, 0x1
- bl nullsub_21
- b _08034ABA
- .align 2, 0
-_08034A44: .4byte gUnknown_3004FF0
-_08034A48:
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08034A90
- ldr r0, _08034A80 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08034AAE
- ldr r0, _08034A84 @ =gUnknown_3004FF0
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _08034A88 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08034A8C @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- b _08034AAE
- .align 2, 0
-_08034A80: .4byte gBattleTypeFlags
-_08034A84: .4byte gUnknown_3004FF0
-_08034A88: .4byte gBattlerPartyIndexes
-_08034A8C: .4byte gPlayerParty
-_08034A90:
- ldr r0, _08034AD8 @ =gUnknown_3004FF0
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _08034ADC @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08034AE0 @ =gEnemyParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
-_08034AAE:
- ldr r1, _08034AD8 @ =gUnknown_3004FF0
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl SetHealthboxSpriteInvisible
-_08034ABA:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _08034AE4 @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bne _08034AF2
-_08034ACC:
- movs r0, 0
- strb r0, [r4]
-_08034AD0:
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _08034AF2
- .align 2, 0
-_08034AD8: .4byte gUnknown_3004FF0
-_08034ADC: .4byte gBattlerPartyIndexes
-_08034AE0: .4byte gEnemyParty
-_08034AE4: .4byte gBattlersCount
-_08034AE8:
- bl LoadAndCreateEnemyShadowSprites
- bl sub_8127CAC
- movs r6, 0x1
-_08034AF2:
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end BattleInitAllSprites
-
- thumb_func_start ClearSpritesHealthboxAnimData
-ClearSpritesHealthboxAnimData: @ 8034AFC
- push {r4,lr}
- ldr r4, _08034B20 @ =gUnknown_2024018
- ldr r0, [r4]
- ldr r0, [r0, 0x4]
- movs r1, 0
- movs r2, 0x30
- bl memset
- ldr r0, [r4]
- ldr r0, [r0, 0x8]
- movs r1, 0
- movs r2, 0x10
- bl memset
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08034B20: .4byte gUnknown_2024018
- thumb_func_end ClearSpritesHealthboxAnimData
-
- thumb_func_start ClearSpritesBankHealthboxAnimData
-ClearSpritesBankHealthboxAnimData: @ 8034B24
- push {lr}
- bl ClearSpritesHealthboxAnimData
- ldr r0, _08034B3C @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0x10
- bl memset
- pop {r0}
- bx r0
- .align 2, 0
-_08034B3C: .4byte gUnknown_2024018
- thumb_func_end ClearSpritesBankHealthboxAnimData
-
- thumb_func_start CopyAllBattleSpritesInvisibilities
-CopyAllBattleSpritesInvisibilities: @ 8034B40
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r4, 0
- ldr r5, _08034BA4 @ =gBattlersCount
- ldrb r0, [r5]
- cmp r4, r0
- bge _08034B96
- ldr r0, _08034BA8 @ =gSprites
- mov r9, r0
- movs r0, 0x1
- mov r12, r0
- movs r0, 0x2
- negs r0, r0
- mov r8, r0
- ldr r7, _08034BAC @ =gUnknown_2024018
- ldr r6, _08034BB0 @ =gBattlerSpriteIds
-_08034B64:
- ldr r0, [r7]
- ldr r0, [r0]
- lsls r3, r4, 2
- adds r3, r0
- adds r0, r4, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- adds r0, 0x3E
- ldrb r1, [r0]
- lsls r1, 29
- lsrs r1, 31
- mov r0, r12
- ands r1, r0
- ldrb r2, [r3]
- mov r0, r8
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- adds r4, 0x1
- ldrb r0, [r5]
- cmp r4, r0
- blt _08034B64
-_08034B96:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08034BA4: .4byte gBattlersCount
-_08034BA8: .4byte gSprites
-_08034BAC: .4byte gUnknown_2024018
-_08034BB0: .4byte gBattlerSpriteIds
- thumb_func_end CopyAllBattleSpritesInvisibilities
-
- thumb_func_start CopyBattleSpriteInvisibility
-CopyBattleSpriteInvisibility: @ 8034BB4
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08034BE8 @ =gUnknown_2024018
- ldr r1, [r1]
- ldr r1, [r1]
- lsls r3, r0, 2
- adds r3, r1
- ldr r2, _08034BEC @ =gSprites
- ldr r1, _08034BF0 @ =gBattlerSpriteIds
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- lsls r1, 29
- lsrs r1, 31
- ldrb r2, [r3]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bx lr
- .align 2, 0
-_08034BE8: .4byte gUnknown_2024018
-_08034BEC: .4byte gSprites
-_08034BF0: .4byte gBattlerSpriteIds
- thumb_func_end CopyBattleSpriteInvisibility
-
- thumb_func_start sub_8034BF4
-sub_8034BF4: @ 8034BF4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0xFF
- beq _08034C16
- b _08034D88
-_08034C16:
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _08034D58 @ =gBattlerPartyIndexes
- mov r1, r9
- lsls r1, 1
- adds r0, r1, r0
- str r0, [sp, 0xC]
- ldrh r0, [r0]
- movs r2, 0x64
- muls r0, r2
- ldr r3, _08034D5C @ =gEnemyParty
- adds r0, r3
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r1, [sp, 0xC]
- ldrh r0, [r1]
- movs r2, 0x64
- muls r0, r2
- ldr r3, _08034D5C @ =gEnemyParty
- adds r0, r3
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x4]
- ldr r1, [sp, 0xC]
- ldrh r0, [r1]
- movs r2, 0x64
- muls r0, r2
- ldr r3, _08034D5C @ =gEnemyParty
- adds r0, r3
- movs r1, 0x1
- bl GetMonData
- adds r7, r0, 0
- mov r1, r8
- lsls r0, r1, 3
- ldr r1, _08034D60 @ =gMonFrontPicTable
- adds r0, r1
- ldr r4, _08034D64 @ =gMonSpritesGfxPtr
- ldr r1, [r4]
- mov r2, r10
- lsls r5, r2, 2
- adds r1, 0x4
- adds r1, r5
- ldr r1, [r1]
- mov r2, r8
- ldr r3, [sp, 0x4]
- bl HandleLoadSpecialPokePic_DontHandleDeoxys
- ldr r0, [r4]
- adds r0, 0x4
- adds r0, r5
- ldr r2, [r0]
- ldr r5, _08034D68 @ =gSprites
- ldr r4, _08034D6C @ =gBattlerSpriteIds
- add r4, r9
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrh r0, [r0, 0x4]
- lsls r0, 22
- lsrs r0, 17
- ldr r1, _08034D70 @ =0x06010000
- adds r0, r1
- ldr r1, _08034D74 @ =0x040000d4
- str r2, [r1]
- str r0, [r1, 0x4]
- ldr r0, _08034D78 @ =0x84000200
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- mov r3, r9
- lsls r0, r3, 20
- movs r1, 0x80
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- mov r10, r0
- mov r0, r8
- adds r1, r7, 0
- ldr r2, [sp, 0x4]
- bl GetFrontSpritePalFromSpeciesAndPersonality
- adds r6, r0, 0
- movs r0, 0x80
- lsls r0, 3
- bl AllocZeroed
- adds r7, r0, 0
- adds r0, r6, 0
- adds r1, r7, 0
- bl LZDecompressWram
- adds r0, r7, 0
- mov r1, r10
- movs r2, 0x20
- bl LoadPalette
- adds r0, r7, 0
- bl Free
- mov r0, r9
- bl GetBankSpriteDefault_Y
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x22]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08034D7C @ =gBattleMonForms
- add r1, r9
- ldrb r1, [r1]
- bl StartSpriteAnim
- ldr r2, [sp, 0xC]
- ldrh r0, [r2]
- movs r3, 0x64
- muls r0, r3
- ldr r1, _08034D5C @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- mov r2, r8
- muls r2, r1
- ldr r1, _08034D80 @ =gSpeciesNames
- adds r2, r1
- movs r1, 0x2
- bl SetMonData
- ldr r4, _08034D84 @ =gUnknown_3004FF0
- add r4, r9
- ldrb r0, [r4]
- ldr r2, [sp, 0xC]
- ldrh r1, [r2]
- movs r3, 0x64
- muls r1, r3
- ldr r2, _08034D5C @ =gEnemyParty
- adds r1, r2
- bl sub_80496C0
- ldrb r0, [r4]
- movs r1, 0x1
- bl sub_804981C
- b _08035062
- .align 2, 0
-_08034D58: .4byte gBattlerPartyIndexes
-_08034D5C: .4byte gEnemyParty
-_08034D60: .4byte gMonFrontPicTable
-_08034D64: .4byte gMonSpritesGfxPtr
-_08034D68: .4byte gSprites
-_08034D6C: .4byte gBattlerSpriteIds
-_08034D70: .4byte 0x06010000
-_08034D74: .4byte 0x040000d4
-_08034D78: .4byte 0x84000200
-_08034D7C: .4byte gBattleMonForms
-_08034D80: .4byte gSpeciesNames
-_08034D84: .4byte gUnknown_3004FF0
-_08034D88:
- cmp r2, 0
- beq _08034E4C
- ldr r0, _08034E28 @ =gBattlerSpriteIds
- mov r3, r9
- adds r5, r3, r0
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r6, _08034E2C @ =gSprites
- adds r0, r6
- ldr r4, _08034E30 @ =gUnknown_2024018
- ldr r1, [r4]
- ldr r1, [r1, 0x8]
- ldrb r1, [r1]
- bl StartSpriteAnim
- mov r1, r9
- lsls r0, r1, 20
- movs r2, 0x80
- lsls r2, 17
- adds r0, r2
- lsrs r0, 16
- mov r10, r0
- ldr r2, _08034E34 @ =gBattleStruct
- ldr r0, [r4]
- ldr r0, [r0, 0x8]
- ldrh r1, [r0]
- lsls r1, 5
- movs r3, 0x80
- lsls r3, 1
- adds r1, r3
- ldr r0, [r2]
- adds r0, r1
- mov r1, r10
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _08034E38 @ =gBattleMonForms
- add r1, r9
- ldr r0, [r4]
- ldr r0, [r0, 0x8]
- ldrh r0, [r0]
- strb r0, [r1]
- ldr r0, [r4]
- ldr r1, [r0]
- mov r2, r9
- lsls r0, r2, 2
- adds r0, r1
- ldrh r0, [r0, 0x2]
- cmp r0, 0
- beq _08034E0E
- ldr r3, _08034E3C @ =0x00007fff
- mov r0, r10
- movs r1, 0x10
- movs r2, 0x6
- bl BlendPalette
- mov r3, r10
- lsls r1, r3, 1
- ldr r0, _08034E40 @ =gPlttBufferFaded
- adds r0, r1, r0
- ldr r2, _08034E44 @ =gPlttBufferUnfaded
- adds r1, r2
- ldr r2, _08034E48 @ =0x04000008
- bl CpuSet
-_08034E0E:
- mov r0, r9
- bl GetBankSpriteDefault_Y
- ldrb r2, [r5]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r6
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x22]
- b _08035062
- .align 2, 0
-_08034E28: .4byte gBattlerSpriteIds
-_08034E2C: .4byte gSprites
-_08034E30: .4byte gUnknown_2024018
-_08034E34: .4byte gBattleStruct
-_08034E38: .4byte gBattleMonForms
-_08034E3C: .4byte 0x00007fff
-_08034E40: .4byte gPlttBufferFaded
-_08034E44: .4byte gPlttBufferUnfaded
-_08034E48: .4byte 0x04000008
-_08034E4C:
- mov r0, r9
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, [sp]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08034E80
- ldr r1, _08034E78 @ =gBattlerPartyIndexes
- ldr r2, [sp]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08034E7C @ =gEnemyParty
- b _08034E90
- .align 2, 0
-_08034E78: .4byte gBattlerPartyIndexes
-_08034E7C: .4byte gEnemyParty
-_08034E80:
- ldr r1, _08034EFC @ =gBattlerPartyIndexes
- ldr r3, [sp]
- lsls r0, r3, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08034F00 @ =gPlayerParty
-_08034E90:
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- mov r0, r9
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08034F10
- ldr r0, _08034EFC @ =gBattlerPartyIndexes
- mov r1, r9
- lsls r4, r1, 1
- adds r4, r0
- ldrh r0, [r4]
- movs r7, 0x64
- muls r0, r7
- ldr r5, _08034F00 @ =gPlayerParty
- adds r0, r5
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x4]
- ldrh r0, [r4]
- muls r0, r7
- adds r0, r5
- movs r1, 0x1
- bl GetMonData
- adds r7, r0, 0
- mov r2, r8
- lsls r0, r2, 3
- ldr r1, _08034F04 @ =gMonBackPicTable
- adds r0, r1
- ldr r1, _08034F08 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- mov r3, r10
- lsls r5, r3, 2
- adds r1, 0x4
- adds r1, r5
- ldr r1, [r1]
- ldr r2, _08034F0C @ =gUnknown_2024008
- mov r3, r9
- lsls r4, r3, 2
- adds r2, r4, r2
- ldr r3, [r2]
- mov r2, r8
- bl HandleLoadSpecialPokePic_DontHandleDeoxys
- b _08034F5E
- .align 2, 0
-_08034EFC: .4byte gBattlerPartyIndexes
-_08034F00: .4byte gPlayerParty
-_08034F04: .4byte gMonBackPicTable
-_08034F08: .4byte gMonSpritesGfxPtr
-_08034F0C: .4byte gUnknown_2024008
-_08034F10:
- ldr r0, _08035074 @ =gBattlerPartyIndexes
- mov r1, r9
- lsls r4, r1, 1
- adds r4, r0
- ldrh r0, [r4]
- movs r7, 0x64
- muls r0, r7
- ldr r5, _08035078 @ =gEnemyParty
- adds r0, r5
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x4]
- ldrh r0, [r4]
- muls r0, r7
- adds r0, r5
- movs r1, 0x1
- bl GetMonData
- adds r7, r0, 0
- mov r2, r8
- lsls r0, r2, 3
- ldr r1, _0803507C @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _08035080 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- mov r3, r10
- lsls r5, r3, 2
- adds r1, 0x4
- adds r1, r5
- ldr r1, [r1]
- ldr r2, _08035084 @ =gUnknown_2024008
- mov r3, r9
- lsls r4, r3, 2
- adds r2, r4, r2
- ldr r3, [r2]
- mov r2, r8
- bl HandleLoadSpecialPokePic_DontHandleDeoxys
-_08034F5E:
- str r4, [sp, 0x14]
- ldr r0, _08035080 @ =gMonSpritesGfxPtr
- ldr r0, [r0]
- adds r0, 0x4
- adds r0, r5
- ldr r2, [r0]
- ldr r0, _08035088 @ =gBattlerSpriteIds
- add r0, r9
- str r0, [sp, 0x10]
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0803508C @ =gSprites
- adds r0, r1
- ldrh r0, [r0, 0x4]
- lsls r0, 22
- lsrs r0, 17
- ldr r1, _08035090 @ =0x06010000
- adds r0, r1
- ldr r1, _08035094 @ =0x040000d4
- str r2, [r1]
- str r0, [r1, 0x4]
- ldr r0, _08035098 @ =0x84000200
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- mov r2, r9
- lsls r0, r2, 20
- movs r3, 0x80
- lsls r3, 17
- adds r0, r3
- lsrs r0, 16
- mov r10, r0
- mov r0, r8
- adds r1, r7, 0
- ldr r2, [sp, 0x4]
- bl GetFrontSpritePalFromSpeciesAndPersonality
- adds r6, r0, 0
- movs r0, 0x80
- lsls r0, 3
- bl AllocZeroed
- adds r7, r0, 0
- adds r0, r6, 0
- adds r1, r7, 0
- bl LZDecompressWram
- adds r0, r7, 0
- mov r1, r10
- movs r2, 0x20
- bl LoadPalette
- adds r0, r7, 0
- bl Free
- ldr r0, _0803509C @ =0x00000181
- cmp r8, r0
- bne _08034FFC
- ldr r5, _080350A0 @ =gBattleStruct
- ldr r1, [r5]
- movs r4, 0x80
- lsls r4, 1
- adds r1, r4
- adds r0, r6, 0
- bl LZDecompressWram
- ldr r0, _080350A4 @ =gBattleMonForms
- ldr r1, [sp]
- adds r0, r1, r0
- ldrb r1, [r0]
- lsls r1, 5
- adds r1, r4
- ldr r0, [r5]
- adds r0, r1
- mov r1, r10
- movs r2, 0x20
- bl LoadPalette
-_08034FFC:
- ldr r3, _080350A8 @ =0x00007fff
- mov r0, r10
- movs r1, 0x10
- movs r2, 0x6
- bl BlendPalette
- mov r2, r10
- lsls r1, r2, 1
- ldr r0, _080350AC @ =gPlttBufferFaded
- adds r0, r1, r0
- ldr r2, _080350B0 @ =gPlttBufferUnfaded
- adds r1, r2
- ldr r2, _080350B4 @ =0x04000008
- bl CpuSet
- ldr r0, _080350B8 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- ldr r3, [sp, 0x14]
- adds r0, r3, r0
- mov r1, r8
- strh r1, [r0, 0x2]
- ldr r0, _080350A4 @ =gBattleMonForms
- mov r2, r9
- adds r4, r2, r0
- ldr r3, [sp]
- adds r0, r3, r0
- ldrb r0, [r0]
- strb r0, [r4]
- mov r0, r9
- bl GetBankSpriteDefault_Y
- ldr r1, [sp, 0x10]
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- ldr r2, _0803508C @ =gSprites
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x22]
- ldr r3, [sp, 0x10]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r4]
- bl StartSpriteAnim
-_08035062:
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08035074: .4byte gBattlerPartyIndexes
-_08035078: .4byte gEnemyParty
-_0803507C: .4byte gMonFrontPicTable
-_08035080: .4byte gMonSpritesGfxPtr
-_08035084: .4byte gUnknown_2024008
-_08035088: .4byte gBattlerSpriteIds
-_0803508C: .4byte gSprites
-_08035090: .4byte 0x06010000
-_08035094: .4byte 0x040000d4
-_08035098: .4byte 0x84000200
-_0803509C: .4byte 0x00000181
-_080350A0: .4byte gBattleStruct
-_080350A4: .4byte gBattleMonForms
-_080350A8: .4byte 0x00007fff
-_080350AC: .4byte gPlttBufferFaded
-_080350B0: .4byte gPlttBufferUnfaded
-_080350B4: .4byte 0x04000008
-_080350B8: .4byte gUnknown_2024018
- thumb_func_end sub_8034BF4
-
- thumb_func_start sub_80350BC
-sub_80350BC: @ 80350BC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- lsls r1, 24
- cmp r1, 0
- bne _08035158
- adds r0, r4, 0
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080350FC
- ldr r0, _080350F4 @ =gFile_graphics_battle_anims_sprites_substitute_sheet
- ldr r1, _080350F8 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- lsls r4, r5, 2
- adds r1, 0x4
- adds r1, r4
- ldr r1, [r1]
- bl LZDecompressVram
- b _0803510E
- .align 2, 0
-_080350F4: .4byte gFile_graphics_battle_anims_sprites_substitute_sheet
-_080350F8: .4byte gMonSpritesGfxPtr
-_080350FC:
- ldr r0, _08035144 @ =gFile_graphics_battle_anims_sprites_substitute_tilemap
- ldr r1, _08035148 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- lsls r4, r5, 2
- adds r1, 0x4
- adds r1, r4
- ldr r1, [r1]
- bl LZDecompressVram
-_0803510E:
- movs r3, 0x1
- lsls r6, 4
- ldr r7, _0803514C @ =gFile_graphics_battle_anims_sprites_substitute_palette
- ldr r0, _08035148 @ =gMonSpritesGfxPtr
- ldr r0, [r0]
- adds r0, 0x4
- adds r4, r0, r4
- ldr r2, _08035150 @ =0x040000d4
- ldr r5, _08035154 @ =0x84000200
-_08035120:
- ldr r0, [r4]
- lsls r1, r3, 11
- adds r1, r0, r1
- str r0, [r2]
- str r1, [r2, 0x4]
- str r5, [r2, 0x8]
- ldr r0, [r2, 0x8]
- adds r3, 0x1
- cmp r3, 0x3
- ble _08035120
- movs r0, 0x80
- lsls r0, 1
- adds r1, r6, r0
- adds r0, r7, 0
- movs r2, 0x20
- bl LoadCompressedPalette
- b _0803519A
- .align 2, 0
-_08035144: .4byte gFile_graphics_battle_anims_sprites_substitute_tilemap
-_08035148: .4byte gMonSpritesGfxPtr
-_0803514C: .4byte gFile_graphics_battle_anims_sprites_substitute_palette
-_08035150: .4byte 0x040000d4
-_08035154: .4byte 0x84000200
-_08035158:
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08035184
- ldr r1, _0803517C @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08035180 @ =gEnemyParty
- adds r0, r1
- adds r1, r4, 0
- bl BattleLoadOpponentMonSpriteGfx
- b _0803519A
- .align 2, 0
-_0803517C: .4byte gBattlerPartyIndexes
-_08035180: .4byte gEnemyParty
-_08035184:
- ldr r1, _080351A0 @ =gBattlerPartyIndexes
- lsls r0, r6, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080351A4 @ =gPlayerParty
- adds r0, r1
- adds r1, r6, 0
- bl sub_8034498
-_0803519A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080351A0: .4byte gBattlerPartyIndexes
-_080351A4: .4byte gPlayerParty
- thumb_func_end sub_80350BC
-
- thumb_func_start LoadBattleMonGfxAndAnimate
-LoadBattleMonGfxAndAnimate: @ 80351A8
- push {r4-r6,lr}
- adds r5, r1, 0
- adds r4, r2, 0
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_80350BC
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _080351E4 @ =gSprites
- adds r4, r0, r1
- ldr r0, _080351E8 @ =gBattleMonForms
- adds r0, r6, r0
- ldrb r1, [r0]
- adds r0, r4, 0
- bl StartSpriteAnim
- cmp r5, 0
- bne _080351EC
- adds r0, r6, 0
- bl GetSubstituteSpriteDefault_Y
- b _080351F2
- .align 2, 0
-_080351E4: .4byte gSprites
-_080351E8: .4byte gBattleMonForms
-_080351EC:
- adds r0, r6, 0
- bl GetBankSpriteDefault_Y
-_080351F2:
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end LoadBattleMonGfxAndAnimate
-
- thumb_func_start TrySetBehindSubstituteSpriteBit
-TrySetBehindSubstituteSpriteBit: @ 8035200
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 16
- lsrs r1, 16
- cmp r1, 0xA4
- bne _08035220
- ldr r0, _08035224 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0]
- lsls r1, r2, 2
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
-_08035220:
- pop {r0}
- bx r0
- .align 2, 0
-_08035224: .4byte gUnknown_2024018
- thumb_func_end TrySetBehindSubstituteSpriteBit
-
- thumb_func_start ClearBehindSubstituteBit
-ClearBehindSubstituteBit: @ 8035228
- lsls r0, 24
- ldr r1, _08035240 @ =gUnknown_2024018
- ldr r1, [r1]
- ldr r1, [r1]
- lsrs r0, 22
- adds r0, r1
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- bx lr
- .align 2, 0
-_08035240: .4byte gUnknown_2024018
- thumb_func_end ClearBehindSubstituteBit
-
- thumb_func_start HandleLowHpMusicChange
-HandleLowHpMusicChange: @ 8035244
- push {r4-r7,lr}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- adds r7, r6, 0
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- adds r1, r0, 0
- lsls r4, 16
- asrs r4, 16
- lsls r1, 16
- asrs r1, 16
- adds r0, r4, 0
- bl GetHPBarLevel
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080352BC
- ldr r7, _080352B8 @ =gUnknown_2024018
- ldr r0, [r7]
- ldr r2, [r0]
- lsls r4, r6, 2
- adds r0, r4, r2
- ldrb r1, [r0]
- movs r5, 0x2
- movs r3, 0x2
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0803530E
- adds r0, r6, 0
- eors r0, r5
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _080352AA
- movs r0, 0x53
- bl PlaySE
-_080352AA:
- ldr r0, [r7]
- ldr r1, [r0]
- adds r1, r4, r1
- ldrb r0, [r1]
- orrs r0, r5
- strb r0, [r1]
- b _0803530E
- .align 2, 0
-_080352B8: .4byte gUnknown_2024018
-_080352BC:
- ldr r4, _080352E4 @ =gUnknown_2024018
- ldr r0, [r4]
- ldr r0, [r0]
- lsls r1, r6, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- bne _080352E8
- movs r0, 0x53
- bl m4aSongNumStop
- b _0803530E
- .align 2, 0
-_080352E4: .4byte gUnknown_2024018
-_080352E8:
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0803530E
- ldr r1, [r4]
- movs r0, 0x2
- eors r7, r0
- ldr r1, [r1]
- lsls r0, r7, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0803530E
- movs r0, 0x53
- bl m4aSongNumStop
-_0803530E:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end HandleLowHpMusicChange
-
- thumb_func_start BattleStopLowHpSound
-BattleStopLowHpSound: @ 8035314
- push {r4-r6,lr}
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, _08035364 @ =gUnknown_2024018
- ldr r0, [r5]
- ldr r0, [r0]
- lsls r1, r4, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r6, 0x3
- negs r6, r6
- adds r0, r6, 0
- ands r0, r2
- strb r0, [r1]
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _08035356
- ldr r2, [r5]
- movs r0, 0x2
- adds r1, r4, 0
- eors r1, r0
- ldr r0, [r2]
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- adds r0, r6, 0
- ands r0, r2
- strb r0, [r1]
-_08035356:
- movs r0, 0x53
- bl m4aSongNumStop
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08035364: .4byte gUnknown_2024018
- thumb_func_end BattleStopLowHpSound
-
- thumb_func_start GetMonHPBarLevel
-GetMonHPBarLevel: @ 8035368
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- adds r1, r0, 0
- lsls r4, 16
- asrs r4, 16
- lsls r1, 16
- asrs r1, 16
- adds r0, r4, 0
- bl GetHPBarLevel
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetMonHPBarLevel
-
- thumb_func_start sub_803539C
-sub_803539C: @ 803539C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _08035440 @ =gMain
- ldr r1, _08035444 @ =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08035432
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r0, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r5, _08035448 @ =gBattlerPartyIndexes
- mov r1, r8
- lsls r0, r1, 1
- adds r0, r5
- ldrb r0, [r0]
- bl pokemon_order_func
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r1, r9
- lsls r0, r1, 1
- adds r0, r5
- ldrb r0, [r0]
- bl pokemon_order_func
- lsls r0, 24
- lsrs r5, r0, 24
- movs r7, 0x64
- adds r0, r4, 0
- muls r0, r7
- ldr r6, _0803544C @ =gPlayerParty
- adds r4, r0, r6
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0803540E
- adds r0, r4, 0
- mov r1, r8
- bl HandleLowHpMusicChange
-_0803540E:
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _08035432
- adds r0, r5, 0
- muls r0, r7
- adds r4, r0, r6
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08035432
- adds r0, r4, 0
- mov r1, r9
- bl HandleLowHpMusicChange
-_08035432:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08035440: .4byte gMain
-_08035444: .4byte 0x00000439
-_08035448: .4byte gBattlerPartyIndexes
-_0803544C: .4byte gPlayerParty
- thumb_func_end sub_803539C
-
- thumb_func_start sub_8035450
-sub_8035450: @ 8035450
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r5, 0
- ldr r0, _080354E0 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- bge _08035520
- movs r0, 0x3
- mov r10, r8
- mov r1, r10
- ands r1, r0
- mov r10, r1
- movs r6, 0
- movs r2, 0x3F
- negs r2, r2
- mov r9, r2
-_0803547C:
- lsls r0, r5, 24
- lsrs r0, 24
- bl sub_8075224
- lsls r0, 24
- cmp r0, 0
- beq _08035514
- ldr r4, _080354E4 @ =gSprites
- ldr r0, _080354E8 @ =gBattlerSpriteIds
- adds r3, r5, r0
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0, 0x1]
- movs r7, 0x4
- negs r7, r7
- adds r2, r7, 0
- ands r1, r2
- mov r2, r10
- orrs r1, r2
- strb r1, [r0, 0x1]
- mov r7, r8
- cmp r7, 0
- bne _080354F0
- ldr r0, _080354EC @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r2, [r0, 0x4]
- adds r2, r6, r2
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- strb r0, [r2, 0x6]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0, 0x3]
- mov r2, r9
- ands r1, r2
- strb r1, [r0, 0x3]
- b _08035514
- .align 2, 0
-_080354E0: .4byte gBattlersCount
-_080354E4: .4byte gSprites
-_080354E8: .4byte gBattlerSpriteIds
-_080354EC: .4byte gUnknown_2024018
-_080354F0:
- ldrb r0, [r3]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r4
- ldr r0, _08035530 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- adds r0, r6, r0
- ldrb r1, [r0, 0x6]
- movs r0, 0x1F
- ands r1, r0
- lsls r1, 1
- ldrb r0, [r2, 0x3]
- mov r3, r9
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x3]
-_08035514:
- adds r6, 0xC
- adds r5, 0x1
- ldr r0, _08035534 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0803547C
-_08035520:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08035530: .4byte gUnknown_2024018
-_08035534: .4byte gBattlersCount
- thumb_func_end sub_8035450
-
- thumb_func_start LoadAndCreateEnemyShadowSprites
-LoadAndCreateEnemyShadowSprites: @ 8035538
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _08035614 @ =gUnknown_8250A0C
- bl LoadCompressedSpriteSheetUsingHeap
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _08035618 @ =gUnknown_8250A1C
- mov r8, r0
- adds r0, r5, 0
- movs r1, 0
- bl sub_8074480
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8074480
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 8
- movs r0, 0xE8
- lsls r0, 13
- adds r2, r0
- asrs r2, 16
- mov r0, r8
- adds r1, r4, 0
- movs r3, 0xC8
- bl CreateSprite
- ldr r6, _0803561C @ =gUnknown_2024018
- ldr r1, [r6]
- ldr r2, [r1, 0x4]
- lsls r1, r5, 1
- adds r1, r5
- lsls r1, 2
- adds r2, r1, r2
- strb r0, [r2, 0x7]
- ldr r7, _08035620 @ =gSprites
- ldr r0, [r6]
- ldr r0, [r0, 0x4]
- adds r1, r0
- ldrb r1, [r1, 0x7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- strh r5, [r0, 0x2E]
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _0803560A
- movs r0, 0x3
- bl GetBattlerAtPosition
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r5, 0
- movs r1, 0
- bl sub_8074480
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8074480
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 8
- movs r0, 0xE8
- lsls r0, 13
- adds r2, r0
- asrs r2, 16
- mov r0, r8
- adds r1, r4, 0
- movs r3, 0xC8
- bl CreateSprite
- ldr r1, [r6]
- ldr r2, [r1, 0x4]
- lsls r1, r5, 1
- adds r1, r5
- lsls r1, 2
- adds r2, r1, r2
- strb r0, [r2, 0x7]
- ldr r0, [r6]
- ldr r0, [r0, 0x4]
- adds r1, r0
- ldrb r1, [r1, 0x7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- strh r5, [r0, 0x2E]
-_0803560A:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08035614: .4byte gUnknown_8250A0C
-_08035618: .4byte gUnknown_8250A1C
-_0803561C: .4byte gUnknown_2024018
-_08035620: .4byte gSprites
- thumb_func_end LoadAndCreateEnemyShadowSprites
-
- thumb_func_start SpriteCB_EnemyShadow
-SpriteCB_EnemyShadow: @ 8035624
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- movs r0, 0
- mov r8, r0
- ldrh r0, [r5, 0x2E]
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08035668 @ =gBattlerSpriteIds
- adds r0, r4, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0803566C @ =gSprites
- adds r7, r0, r1
- adds r6, r7, 0
- adds r6, 0x3E
- ldrb r1, [r6]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08035660
- adds r0, r4, 0
- bl sub_8075224
- lsls r0, 24
- cmp r0, 0
- bne _08035674
-_08035660:
- ldr r0, _08035670 @ =SpriteCB_SetInvisible
- str r0, [r5, 0x1C]
- b _080356EA
- .align 2, 0
-_08035668: .4byte gBattlerSpriteIds
-_0803566C: .4byte gSprites
-_08035670: .4byte SpriteCB_SetInvisible
-_08035674:
- ldr r0, _08035690 @ =gUnknown_2037EE1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08035686
- ldrb r1, [r6]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08035698
-_08035686:
- movs r0, 0x1
- mov r8, r0
- ldr r2, _08035694 @ =gUnknown_2024018
- lsls r4, 2
- b _080356BA
- .align 2, 0
-_08035690: .4byte gUnknown_2037EE1
-_08035694: .4byte gUnknown_2024018
-_08035698:
- ldr r2, _080356F4 @ =gUnknown_2024018
- ldr r0, [r2]
- ldr r0, [r0]
- lsls r1, r4, 2
- adds r3, r1, r0
- ldrh r0, [r3, 0x2]
- adds r4, r1, 0
- cmp r0, 0
- beq _080356BA
- ldr r0, _080356F8 @ =gUnknown_823A004
- ldrh r1, [r3, 0x2]
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- bne _080356BA
- movs r0, 0x1
- mov r8, r0
-_080356BA:
- ldr r0, [r2]
- ldr r0, [r0]
- adds r0, r4, r0
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080356CE
- movs r0, 0x1
- mov r8, r0
-_080356CE:
- ldrh r0, [r7, 0x20]
- strh r0, [r5, 0x20]
- ldrh r0, [r7, 0x24]
- strh r0, [r5, 0x24]
- adds r2, r5, 0
- adds r2, 0x3E
- mov r0, r8
- lsls r3, r0, 2
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- orrs r0, r3
- strb r0, [r2]
-_080356EA:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080356F4: .4byte gUnknown_2024018
-_080356F8: .4byte gUnknown_823A004
- thumb_func_end SpriteCB_EnemyShadow
-
- thumb_func_start SpriteCB_SetInvisible
-SpriteCB_SetInvisible: @ 80356FC
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- bx lr
- thumb_func_end SpriteCB_SetInvisible
-
- thumb_func_start SetBankEnemyShadowSpriteCallback
-SetBankEnemyShadowSpriteCallback: @ 8035708
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- lsls r1, 16
- lsrs r5, r1, 16
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08035784
- ldr r0, _08035758 @ =gUnknown_2024018
- ldr r3, [r0]
- ldr r1, [r3]
- lsls r0, r4, 2
- adds r1, r0, r1
- ldrh r0, [r1, 0x2]
- cmp r0, 0
- beq _08035732
- adds r5, r0, 0
-_08035732:
- ldr r0, _0803575C @ =gUnknown_823A004
- adds r0, r5, r0
- ldrb r0, [r0]
- cmp r0, 0
- beq _08035768
- ldr r2, _08035760 @ =gSprites
- ldr r1, [r3, 0x4]
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _08035764 @ =SpriteCB_EnemyShadow
- b _08035782
- .align 2, 0
-_08035758: .4byte gUnknown_2024018
-_0803575C: .4byte gUnknown_823A004
-_08035760: .4byte gSprites
-_08035764: .4byte SpriteCB_EnemyShadow
-_08035768:
- ldr r2, _0803578C @ =gSprites
- ldr r1, [r3, 0x4]
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _08035790 @ =SpriteCB_SetInvisible
-_08035782:
- str r1, [r0]
-_08035784:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803578C: .4byte gSprites
-_08035790: .4byte SpriteCB_SetInvisible
- thumb_func_end SetBankEnemyShadowSpriteCallback
-
- thumb_func_start EnemyShadowCallbackToSetInvisible
-EnemyShadowCallbackToSetInvisible: @ 8035794
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080357BC @ =gSprites
- ldr r1, _080357C0 @ =gUnknown_2024018
- ldr r1, [r1]
- ldr r3, [r1, 0x4]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r1, [r1, 0x7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _080357C4 @ =SpriteCB_SetInvisible
- str r1, [r0]
- bx lr
- .align 2, 0
-_080357BC: .4byte gSprites
-_080357C0: .4byte gUnknown_2024018
-_080357C4: .4byte SpriteCB_SetInvisible
- thumb_func_end EnemyShadowCallbackToSetInvisible
-
- thumb_func_start sub_80357C8
-sub_80357C8: @ 80357C8
- push {r4-r7,lr}
- ldr r2, _08035894 @ =0x06000240
- movs r7, 0xF0
- lsls r7, 8
- movs r5, 0x8
-_080357D2:
- movs r4, 0xF
-_080357D4:
- ldrh r1, [r2]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _080357E4
- adds r0, r7, 0
- orrs r0, r1
- strh r0, [r2]
-_080357E4:
- ldrh r1, [r2]
- movs r6, 0xF0
- lsls r6, 4
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _080357F8
- adds r0, r6, 0
- orrs r0, r1
- strh r0, [r2]
-_080357F8:
- ldrh r1, [r2]
- movs r3, 0xF0
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- bne _0803580A
- adds r0, r1, 0
- orrs r0, r3
- strh r0, [r2]
-_0803580A:
- ldrh r1, [r2]
- movs r3, 0xF
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- bne _0803581C
- adds r0, r1, 0
- orrs r0, r3
- strh r0, [r2]
-_0803581C:
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080357D4
- subs r5, 0x1
- cmp r5, 0
- bge _080357D2
- ldr r2, _08035898 @ =0x06000600
- movs r5, 0
- movs r7, 0xF0
- lsls r7, 8
-_08035832:
- adds r3, r5, 0x1
- movs r4, 0xF
-_08035836:
- ldrh r1, [r2]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _0803584A
- movs r5, 0xC0
- lsls r5, 7
- adds r0, r5, 0
- orrs r0, r1
- strh r0, [r2]
-_0803584A:
- ldrh r1, [r2]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _0803585E
- movs r5, 0xC0
- lsls r5, 3
- adds r0, r5, 0
- orrs r0, r1
- strh r0, [r2]
-_0803585E:
- ldrh r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- bne _0803586E
- movs r0, 0x60
- orrs r0, r1
- strh r0, [r2]
-_0803586E:
- ldrh r1, [r2]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- bne _0803587E
- movs r0, 0x6
- orrs r0, r1
- strh r0, [r2]
-_0803587E:
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _08035836
- adds r5, r3, 0
- cmp r5, 0x11
- ble _08035832
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08035894: .4byte 0x06000240
-_08035898: .4byte 0x06000600
- thumb_func_end sub_80357C8
-
- thumb_func_start ClearTemporarySpeciesSpriteData
-ClearTemporarySpeciesSpriteData: @ 803589C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- ldr r0, _080358CC @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r2, [r0]
- lsls r0, r4, 2
- adds r0, r2
- movs r3, 0
- movs r2, 0
- strh r2, [r0, 0x2]
- ldr r0, _080358D0 @ =gBattleMonForms
- adds r0, r4, r0
- strb r3, [r0]
- cmp r1, 0
- bne _080358C4
- adds r0, r4, 0
- bl ClearBehindSubstituteBit
-_080358C4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080358CC: .4byte gUnknown_2024018
-_080358D0: .4byte gBattleMonForms
- thumb_func_end ClearTemporarySpeciesSpriteData
-
- thumb_func_start AllocateMonSpritesGfx
-AllocateMonSpritesGfx: @ 80358D4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- ldr r4, _080359A4 @ =gMonSpritesGfxPtr
- str r6, [r4]
- movs r0, 0xC0
- lsls r0, 1
- bl AllocZeroed
- str r0, [r4]
- movs r0, 0x80
- lsls r0, 8
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1]
-_080358FA:
- ldr r0, _080359A4 @ =gMonSpritesGfxPtr
- ldr r1, [r0]
- lsls r4, r6, 2
- adds r2, r1, 0x4
- adds r2, r4
- lsls r3, r6, 13
- ldr r0, [r1]
- adds r0, r3
- str r0, [r2]
- lsls r3, r6, 1
- adds r0, r3, r6
- lsls r0, 3
- adds r1, r0, r1
- ldr r2, _080359A8 @ =gUnknown_825DEF0
- adds r1, 0x14
- adds r0, r2
- ldm r0!, {r2,r5,r7}
- stm r1!, {r2,r5,r7}
- ldm r0!, {r2,r5,r7}
- stm r1!, {r2,r5,r7}
- movs r5, 0
- mov r9, r3
- lsls r0, r6, 5
- mov r8, r0
- adds r1, r6, 0x1
- mov r10, r1
- mov r12, r8
- adds r7, r4, 0
-_08035932:
- ldr r2, _080359A4 @ =gMonSpritesGfxPtr
- ldr r1, [r2]
- lsls r4, r5, 3
- add r4, r12
- adds r3, r1, 0
- adds r3, 0x74
- adds r3, r4
- adds r0, r1, 0x4
- adds r0, r7
- lsls r2, r5, 11
- ldr r0, [r0]
- adds r0, r2
- str r0, [r3]
- adds r1, r4
- adds r1, 0x78
- movs r0, 0x80
- lsls r0, 4
- strh r0, [r1]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _08035932
- ldr r1, _080359A4 @ =gMonSpritesGfxPtr
- ldr r2, [r1]
- mov r5, r9
- adds r0, r5, r6
- lsls r0, 3
- adds r1, r2, 0
- adds r1, 0x20
- adds r1, r0
- mov r0, r8
- adds r0, 0x74
- adds r2, r0
- str r2, [r1]
- mov r7, r10
- lsls r0, r7, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _080358FA
- movs r0, 0x80
- lsls r0, 5
- bl AllocZeroed
- ldr r1, _080359A4 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- movs r2, 0xBA
- lsls r2, 1
- adds r1, r2
- str r0, [r1]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080359A4: .4byte gMonSpritesGfxPtr
-_080359A8: .4byte gUnknown_825DEF0
- thumb_func_end AllocateMonSpritesGfx
-
- thumb_func_start FreeMonSpritesGfx
-FreeMonSpritesGfx: @ 80359AC
- push {r4-r6,lr}
- ldr r6, _08035A24 @ =gMonSpritesGfxPtr
- ldr r0, [r6]
- cmp r0, 0
- beq _08035A1E
- movs r1, 0xBE
- lsls r1, 1
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- beq _080359D2
- bl Free
- ldr r0, [r6]
- movs r1, 0xBE
- lsls r1, 1
- adds r0, r1
- movs r1, 0
- str r1, [r0]
-_080359D2:
- ldr r0, [r6]
- movs r1, 0xBC
- lsls r1, 1
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- beq _080359F0
- bl Free
- ldr r0, [r6]
- movs r1, 0xBC
- lsls r1, 1
- adds r0, r1
- movs r1, 0
- str r1, [r0]
-_080359F0:
- ldr r0, [r6]
- movs r5, 0xBA
- lsls r5, 1
- adds r0, r5
- ldr r0, [r0]
- bl Free
- ldr r0, [r6]
- adds r5, r0, r5
- movs r4, 0
- str r4, [r5]
- ldr r0, [r0]
- bl Free
- ldr r0, [r6]
- str r4, [r0]
- str r4, [r0, 0x4]
- str r4, [r0, 0x8]
- str r4, [r0, 0xC]
- str r4, [r0, 0x10]
- bl Free
- str r4, [r6]
-_08035A1E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08035A24: .4byte gMonSpritesGfxPtr
- thumb_func_end FreeMonSpritesGfx
-
- thumb_func_start ShouldPlayNormalPokeCry
-ShouldPlayNormalPokeCry: @ 8035A28
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x37
- bl GetMonData
- ldr r1, _08035A6C @ =0x00000fff
- ands r1, r0
- cmp r1, 0
- bne _08035A70
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- adds r1, r0, 0
- lsls r4, 16
- asrs r4, 16
- lsls r1, 16
- asrs r1, 16
- adds r0, r4, 0
- bl GetHPBarLevel
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- ble _08035A70
- movs r0, 0x1
- b _08035A72
- .align 2, 0
-_08035A6C: .4byte 0x00000fff
-_08035A70:
- movs r0, 0
-_08035A72:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ShouldPlayNormalPokeCry
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_interface.s b/asm/battle_interface.s
index 959e4e19d..3de518630 100644
--- a/asm/battle_interface.s
+++ b/asm/battle_interface.s
@@ -255,8 +255,8 @@ sub_8047CAC: @ 8047CAC
bx r0
thumb_func_end sub_8047CAC
- thumb_func_start CreateBankHealthboxSprites
-CreateBankHealthboxSprites: @ 8047CE0
+ thumb_func_start CreateBattlerHealthboxSprites
+CreateBattlerHealthboxSprites: @ 8047CE0
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -268,7 +268,7 @@ CreateBankHealthboxSprites: @ 8047CE0
mov r10, r0
movs r0, 0
str r0, [sp]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _08047DF4
@@ -522,7 +522,7 @@ _08047E98:
_08047F1A:
str r0, [sp]
_08047F1C:
- ldr r0, _08047FF4 @ =gUnknown_2023BD6
+ ldr r0, _08047FF4 @ =gBattlerPositions
add r0, r10
ldrb r1, [r0]
lsls r0, r1, 1
@@ -621,12 +621,12 @@ _08047FE4: .4byte gSprites
_08047FE8: .4byte 0x000003ff
_08047FEC: .4byte 0xfffffc00
_08047FF0: .4byte sub_8048128
-_08047FF4: .4byte gUnknown_2023BD6
+_08047FF4: .4byte gBattlerPositions
_08047FF8: .4byte gUnknown_82602F8
_08047FFC: .4byte gUnknown_82603C4
_08048000: .4byte 0x06010000
_08048004: .4byte 0x04000010
- thumb_func_end CreateBankHealthboxSprites
+ thumb_func_end CreateBattlerHealthboxSprites
thumb_func_start CreateSafariPlayerHealthboxSprites
CreateSafariPlayerHealthboxSprites: @ 8048008
@@ -808,7 +808,7 @@ SetBattleBarStruct: @ 8048150
ldr r7, [sp, 0x14]
lsls r0, 24
lsrs r0, 24
- ldr r6, _08048180 @ =gUnknown_2024018
+ ldr r6, _08048180 @ =gBattleSpritesDataPtr
ldr r4, [r6]
ldr r5, [r4, 0xC]
lsls r4, r0, 2
@@ -828,7 +828,7 @@ SetBattleBarStruct: @ 8048150
pop {r0}
bx r0
.align 2, 0
-_08048180: .4byte gUnknown_2024018
+_08048180: .4byte gBattleSpritesDataPtr
_08048184: .4byte 0xffff8000
thumb_func_end SetBattleBarStruct
@@ -970,10 +970,10 @@ DestoryHealthboxSprite: @ 8048248
_08048284: .4byte gSprites
thumb_func_end DestoryHealthboxSprite
- thumb_func_start nullsub_21
-nullsub_21: @ 8048288
+ thumb_func_start DummyBattleInterfaceFunc
+DummyBattleInterfaceFunc: @ 8048288
bx lr
- thumb_func_end nullsub_21
+ thumb_func_end DummyBattleInterfaceFunc
thumb_func_start UpdateOamPriorityInAllHealthboxes
UpdateOamPriorityInAllHealthboxes: @ 804828C
@@ -996,7 +996,7 @@ UpdateOamPriorityInAllHealthboxes: @ 804828C
lsls r5, r0, 2
movs r7, 0xD
negs r7, r7
- ldr r2, _08048318 @ =gUnknown_3004FF0
+ ldr r2, _08048318 @ =gHealthboxSpriteIds
mov r9, r2
_080482B6:
mov r1, r9
@@ -1048,17 +1048,17 @@ _08048304:
.align 2, 0
_08048310: .4byte gBattlersCount
_08048314: .4byte gSprites
-_08048318: .4byte gUnknown_3004FF0
+_08048318: .4byte gHealthboxSpriteIds
thumb_func_end UpdateOamPriorityInAllHealthboxes
- thumb_func_start SetBankHealthboxSpritePos
-SetBankHealthboxSpritePos: @ 804831C
+ thumb_func_start InitBattlerHealthboxCoords
+InitBattlerHealthboxCoords: @ 804831C
push {r4-r6,lr}
lsls r0, 24
lsrs r6, r0, 24
movs r5, 0
movs r4, 0
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _08048348
@@ -1108,7 +1108,7 @@ _0804837C:
movs r5, 0x20
movs r4, 0x2C
_08048380:
- ldr r0, _08048394 @ =gUnknown_3004FF0
+ ldr r0, _08048394 @ =gHealthboxSpriteIds
adds r0, r6, r0
ldrb r0, [r0]
adds r1, r5, 0
@@ -1118,8 +1118,8 @@ _08048380:
pop {r0}
bx r0
.align 2, 0
-_08048394: .4byte gUnknown_3004FF0
- thumb_func_end SetBankHealthboxSpritePos
+_08048394: .4byte gHealthboxSpriteIds
+ thumb_func_end InitBattlerHealthboxCoords
thumb_func_start UpdateLvlInHealthbox
UpdateLvlInHealthbox: @ 8048398
@@ -1169,7 +1169,7 @@ UpdateLvlInHealthbox: @ 8048398
lsls r0, 24
cmp r0, 0
bne _08048420
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
ldr r2, _08048418 @ =0x06010420
adds r1, r4, r2
@@ -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
@@ -1230,7 +1230,7 @@ sub_8048440: @ 8048440
lsls r0, 24
cmp r0, 0
bne _08048514
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _08048514
@@ -1315,7 +1315,7 @@ _08048514:
ldrh r0, [r7, 0x3A]
lsls r0, 24
lsrs r6, r0, 24
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -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
@@ -1457,7 +1457,7 @@ sub_8048618: @ 8048618
lsls r0, 24
lsrs r0, 24
mov r10, r0
- ldr r0, _08048700 @ =gUnknown_2024018
+ ldr r0, _08048700 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
mov r3, r10
@@ -1541,7 +1541,7 @@ _080486C6:
.align 2, 0
_080486F8: .4byte gUnknown_8260542
_080486FC: .4byte gSprites
-_08048700: .4byte gUnknown_2024018
+_08048700: .4byte gBattleSpritesDataPtr
_08048704: .4byte gUnknown_8260540
_08048708: .4byte gMonSpritesGfxPtr
_0804870C: .4byte 0x06010000
@@ -1945,8 +1945,8 @@ _08048A44: .4byte 0x060100c0
_08048A48: .4byte 0x04000008
thumb_func_end sub_80487F8
- thumb_func_start sub_8048A4C
-sub_8048A4C: @ 8048A4C
+ thumb_func_start SwapHpBarsWithHpText
+SwapHpBarsWithHpText: @ 8048A4C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -1966,7 +1966,7 @@ _08048A66:
ldr r2, _08048B80 @ =gBattlerPartyIndexes
mov r8, r2
_08048A6E:
- ldr r0, _08048B84 @ =gUnknown_3004FF0
+ ldr r0, _08048B84 @ =gHealthboxSpriteIds
mov r1, r9
adds r6, r1, r0
ldrb r1, [r6]
@@ -1993,7 +1993,7 @@ _08048A8C:
bne _08048AA2
b _08048CE0
_08048AA2:
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _08048ABA
@@ -2004,7 +2004,7 @@ _08048AA2:
bne _08048ABA
b _08048CE0
_08048ABA:
- ldr r5, _08048B8C @ =gUnknown_2024018
+ ldr r5, _08048B8C @ =gBattleSpritesDataPtr
ldr r0, [r5]
ldr r3, [r0]
mov r0, r9
@@ -2036,7 +2036,7 @@ _08048ABA:
lsls r0, 24
cmp r0, 0
bne _08048BE8
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _08048B08
@@ -2099,9 +2099,9 @@ _08048B16:
_08048B78: .4byte gBattlersCount
_08048B7C: .4byte gSprites
_08048B80: .4byte gBattlerPartyIndexes
-_08048B84: .4byte gUnknown_3004FF0
+_08048B84: .4byte gHealthboxSpriteIds
_08048B88: .4byte SpriteCallbackDummy
-_08048B8C: .4byte gUnknown_2024018
+_08048B8C: .4byte gBattleSpritesDataPtr
_08048B90: .4byte gBattleTypeFlags
_08048B94: .4byte 0x06010000
_08048B98: .4byte 0x05000040
@@ -2242,7 +2242,7 @@ _08048C94:
movs r2, 0x4
bl UpdateHealthboxAttribute
_08048CCA:
- ldr r0, _08048D0C @ =gUnknown_3004FF0
+ ldr r0, _08048D0C @ =gHealthboxSpriteIds
add r0, r9
ldrb r1, [r0]
lsls r0, r1, 4
@@ -2275,12 +2275,12 @@ _08048CF2:
.align 2, 0
_08048D04: .4byte gEnemyParty
_08048D08: .4byte gBattleTypeFlags
-_08048D0C: .4byte gUnknown_3004FF0
+_08048D0C: .4byte gHealthboxSpriteIds
_08048D10: .4byte gBattlersCount
- thumb_func_end sub_8048A4C
+ thumb_func_end SwapHpBarsWithHpText
- thumb_func_start sub_8048D14
-sub_8048D14: @ 8048D14
+ thumb_func_start CreatePartyStatusSummarySprites
+CreatePartyStatusSummarySprites: @ 8048D14
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -2323,7 +2323,7 @@ _08048D64:
movs r7, 0x1
cmp r4, 0
beq _08048D74
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _08048D7A
@@ -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
@@ -3668,7 +3668,7 @@ _08049782:
adds r1, r6, 0
movs r2, 0x6
bl sub_804A6E8
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
ldr r2, _080497F0 @ =0x06010400
adds r5, r4, r2
@@ -3877,7 +3877,7 @@ UpdateStatusIconInHealthbox: @ 8049934
movs r1, 0x37
bl GetMonData
adds r4, r0, 0
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
movs r3, 0x12
mov r8, r3
@@ -4009,7 +4009,7 @@ _08049A7E:
adds r4, 0x1
cmp r4, 0x2
ble _08049A7E
- ldr r0, _08049AEC @ =gUnknown_2024018
+ ldr r0, _08049AEC @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0]
adds r0, r7, r0
@@ -4042,7 +4042,7 @@ _08049AD4:
_08049AE0: .4byte gSprites
_08049AE4: .4byte 0x06010000
_08049AE8: .4byte 0x04000008
-_08049AEC: .4byte gUnknown_2024018
+_08049AEC: .4byte gBattleSpritesDataPtr
_08049AF0: .4byte 0x04000010
_08049AF4:
mov r1, r9
@@ -4084,7 +4084,7 @@ _08049AF4:
ldr r2, _08049BD8 @ =0x04000018
adds r0, r6, 0
bl CpuSet
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -4096,7 +4096,7 @@ _08049AF4:
cmp r0, 0x1
bne _08049BAE
_08049B62:
- ldr r0, _08049BDC @ =gUnknown_2024018
+ ldr r0, _08049BDC @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0]
lsls r0, r7, 2
@@ -4149,7 +4149,7 @@ _08049BCC: .4byte gPlttBufferUnfaded + 0x200
_08049BD0: .4byte 0x05000200
_08049BD4: .4byte 0x06010000
_08049BD8: .4byte 0x04000018
-_08049BDC: .4byte gUnknown_2024018
+_08049BDC: .4byte gBattleSpritesDataPtr
_08049BE0: .4byte 0x04000008
thumb_func_end UpdateStatusIconInHealthbox
@@ -4381,7 +4381,7 @@ UpdateHealthboxAttribute: @ 8049D98
mov r9, r0
cmp r7, 0
bne _08049DD4
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _08049DD4
@@ -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,9 +4468,9 @@ _08049E4C:
adds r1, r6, 0
movs r2, 0
movs r3, 0
- bl sub_8049FD8
+ bl MoveBattleBar
_08049E80:
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
lsrs r0, 24
mov r10, r0
@@ -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
@@ -4652,7 +4652,7 @@ sub_8049FD8: @ 8049FD8
mov r9, r2
cmp r2, 0
bne _0804A024
- ldr r0, _0804A020 @ =gUnknown_2024018
+ ldr r0, _0804A020 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0xC]
mov r1, r8
@@ -4673,9 +4673,9 @@ sub_8049FD8: @ 8049FD8
adds r7, r5, 0
b _0804A080
.align 2, 0
-_0804A020: .4byte gUnknown_2024018
+_0804A020: .4byte gBattleSpritesDataPtr
_0804A024:
- ldr r2, _0804A0D0 @ =gUnknown_2024018
+ ldr r2, _0804A0D0 @ =gBattleSpritesDataPtr
mov r10, r2
ldr r0, [r2]
ldr r2, [r0, 0xC]
@@ -4726,7 +4726,7 @@ _0804A080:
beq _0804A09C
cmp r2, 0
bne _0804A0A4
- ldr r0, _0804A0D0 @ =gUnknown_2024018
+ ldr r0, _0804A0D0 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0]
adds r0, r7, r0
@@ -4744,7 +4744,7 @@ _0804A0A4:
negs r0, r0
cmp r4, r0
bne _0804A0BE
- ldr r0, _0804A0D0 @ =gUnknown_2024018
+ ldr r0, _0804A0D0 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0xC]
mov r2, r8
@@ -4764,8 +4764,8 @@ _0804A0BE:
pop {r1}
bx r1
.align 2, 0
-_0804A0D0: .4byte gUnknown_2024018
- thumb_func_end sub_8049FD8
+_0804A0D0: .4byte gBattleSpritesDataPtr
+ thumb_func_end MoveBattleBar
thumb_func_start sub_804A0D4
sub_804A0D4: @ 804A0D4
@@ -4784,7 +4784,7 @@ sub_804A0D4: @ 804A0D4
beq _0804A1D8
b _0804A2D6
_0804A0F0:
- ldr r0, _0804A184 @ =gUnknown_2024018
+ ldr r0, _0804A184 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0xC]
lsls r5, r6, 2
@@ -4818,7 +4818,7 @@ _0804A12C:
ldr r0, _0804A188 @ =gSprites
mov r8, r0
_0804A132:
- ldr r0, _0804A184 @ =gUnknown_2024018
+ ldr r0, _0804A184 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r1, [r0, 0xC]
adds r0, r7, r6
@@ -4858,7 +4858,7 @@ _0804A132:
bl CpuSet
b _0804A1C2
.align 2, 0
-_0804A184: .4byte gUnknown_2024018
+_0804A184: .4byte gBattleSpritesDataPtr
_0804A188: .4byte gSprites
_0804A18C: .4byte 0x06010000
_0804A190: .4byte 0x04000008
@@ -4895,7 +4895,7 @@ _0804A1C2:
_0804A1D0: .4byte 0x06010040
_0804A1D4: .4byte 0x04000008
_0804A1D8:
- ldr r0, _0804A27C @ =gUnknown_2024018
+ ldr r0, _0804A27C @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0xC]
lsls r5, r6, 2
@@ -4955,7 +4955,7 @@ _0804A23A:
ldrb r1, [r1]
lsls r1, 5
adds r0, r1
- ldr r1, _0804A27C @ =gUnknown_2024018
+ ldr r1, _0804A27C @ =gBattleSpritesDataPtr
ldr r1, [r1]
ldr r1, [r1, 0xC]
adds r1, r4, r1
@@ -4977,7 +4977,7 @@ _0804A23A:
bl CpuSet
b _0804A2CC
.align 2, 0
-_0804A27C: .4byte gUnknown_2024018
+_0804A27C: .4byte gBattleSpritesDataPtr
_0804A280: .4byte gBattlerPartyIndexes
_0804A284: .4byte gPlayerParty
_0804A288: .4byte gSprites
@@ -4992,7 +4992,7 @@ _0804A294:
ldrb r1, [r1]
lsls r1, 5
adds r0, r1
- ldr r1, _0804A2E4 @ =gUnknown_2024018
+ ldr r1, _0804A2E4 @ =gBattleSpritesDataPtr
ldr r1, [r1]
ldr r1, [r1, 0xC]
adds r1, r4, r1
@@ -5025,7 +5025,7 @@ _0804A2D6:
pop {r0}
bx r0
.align 2, 0
-_0804A2E4: .4byte gUnknown_2024018
+_0804A2E4: .4byte gBattleSpritesDataPtr
_0804A2E8: .4byte 0x06010b80
_0804A2EC: .4byte 0x04000008
thumb_func_end sub_804A0D4
diff --git a/asm/battle_message.s b/asm/battle_message.s
index efd7e1385..bd1011f9a 100644
--- a/asm/battle_message.s
+++ b/asm/battle_message.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_80D7274
-sub_80D7274: @ 80D7274
+ thumb_func_start BufferStringBattle
+BufferStringBattle: @ 80D7274
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -23,7 +23,7 @@ sub_80D7274: @ 80D7274
ldr r0, _080D7338 @ =gUnknown_2022BC8
adds r1, r0
str r1, [r4]
- ldr r2, _080D733C @ =gUnknown_2023D68
+ ldr r2, _080D733C @ =gLastUsedItem
ldrh r0, [r1, 0x4]
strh r0, [r2]
ldr r2, _080D7340 @ =gLastUsedAbility
@@ -71,7 +71,7 @@ _080D72D6:
mov r8, r0
ldr r3, _080D7330 @ =gUnknown_2039A34
ldr r5, _080D7358 @ =gBattleTextBuff2
- ldr r4, _080D735C @ =gUnknown_2022AD8
+ ldr r4, _080D735C @ =gBattleTextBuff3
_080D72F4:
mov r0, r8
adds r1, r2, r0
@@ -108,7 +108,7 @@ _080D7326:
_080D7330: .4byte gUnknown_2039A34
_080D7334: .4byte gActiveBattler
_080D7338: .4byte gUnknown_2022BC8
-_080D733C: .4byte gUnknown_2023D68
+_080D733C: .4byte gLastUsedItem
_080D7340: .4byte gLastUsedAbility
_080D7344: .4byte gBattleScripting
_080D7348: .4byte gBattleStruct
@@ -116,7 +116,7 @@ _080D734C: .4byte gPotentialItemEffectBattler
_080D7350: .4byte gBattleTextBuff1
_080D7354: .4byte gUnknown_2039A30
_080D7358: .4byte gBattleTextBuff2
-_080D735C: .4byte gUnknown_2022AD8
+_080D735C: .4byte gBattleTextBuff3
_080D7360: .4byte _080D7364
.align 2, 0
_080D7364:
@@ -701,7 +701,7 @@ _080D77E2:
bx r0
.align 2, 0
_080D77F0: .4byte gUnknown_83FDF3C
- thumb_func_end sub_80D7274
+ thumb_func_end BufferStringBattle
thumb_func_start BattleStringExpandPlaceholdersToDisplayedString
BattleStringExpandPlaceholdersToDisplayedString: @ 80D77F4
@@ -890,7 +890,7 @@ _080D79A2:
_080D79B0: .4byte gBattleTextBuff2
_080D79B4: .4byte gStringVar2
_080D79B8:
- ldr r1, _080D79D0 @ =gUnknown_2022AD8
+ ldr r1, _080D79D0 @ =gBattleTextBuff3
ldrb r0, [r1]
cmp r0, 0xFD
bne _080D79D8
@@ -902,7 +902,7 @@ _080D79C4:
bl ExpandBattleTextBuffPlaceholders
bl _080D8382
.align 2, 0
-_080D79D0: .4byte gUnknown_2022AD8
+_080D79D0: .4byte gBattleTextBuff3
_080D79D4: .4byte gStringVar3
_080D79D8:
adds r4, r1, 0
@@ -1073,7 +1073,7 @@ _080D7B40: .4byte gBattlerPartyIndexes
_080D7B44: .4byte gLinkPlayers
_080D7B48: .4byte gEnemyParty
_080D7B4C:
- ldr r4, _080D7B70 @ =sBattler_AI
+ ldr r4, _080D7B70 @ =gBattlerAttacker
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
@@ -1090,7 +1090,7 @@ _080D7B4C:
ldr r4, _080D7B7C @ =gUnknown_83FD55B
b _080D7B8A
.align 2, 0
-_080D7B70: .4byte sBattler_AI
+_080D7B70: .4byte gBattlerAttacker
_080D7B74: .4byte gBattleTypeFlags
_080D7B78: .4byte gUnknown_83FD555
_080D7B7C: .4byte gUnknown_83FD55B
@@ -1140,7 +1140,7 @@ _080D7BC0:
.align 2, 0
_080D7BDC: .4byte gBattlerPartyIndexes
_080D7BE0:
- ldr r4, _080D7C14 @ =sBattler_AI
+ ldr r4, _080D7C14 @ =gBattlerAttacker
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
@@ -1164,7 +1164,7 @@ _080D7BE0:
adds r0, r1
b _080D82AA
.align 2, 0
-_080D7C14: .4byte sBattler_AI
+_080D7C14: .4byte gBattlerAttacker
_080D7C18: .4byte gBattlerPartyIndexes
_080D7C1C: .4byte gPlayerParty
_080D7C20:
@@ -1188,7 +1188,7 @@ _080D7C20:
_080D7C44: .4byte gBattlerPartyIndexes
_080D7C48: .4byte gEnemyParty
_080D7C4C:
- ldr r5, _080D7C98 @ =sBattler_AI
+ ldr r5, _080D7C98 @ =gBattlerAttacker
ldrb r0, [r5]
bl GetBattlerSide
lsls r0, 24
@@ -1228,7 +1228,7 @@ _080D7C8C:
ldrh r1, [r0]
b _080D82A4
.align 2, 0
-_080D7C98: .4byte sBattler_AI
+_080D7C98: .4byte gBattlerAttacker
_080D7C9C: .4byte gBattleTypeFlags
_080D7CA0: .4byte gUnknown_83FD555
_080D7CA4: .4byte gUnknown_83FD55B
@@ -1300,7 +1300,7 @@ _080D7D24:
.align 2, 0
_080D7D30: .4byte gBattlerPartyIndexes
_080D7D34:
- ldr r5, _080D7D80 @ =gUnknown_2023D6E
+ ldr r5, _080D7D80 @ =gEffectBattler
ldrb r0, [r5]
bl GetBattlerSide
lsls r0, 24
@@ -1340,7 +1340,7 @@ _080D7D74:
ldrh r1, [r0]
b _080D82A4
.align 2, 0
-_080D7D80: .4byte gUnknown_2023D6E
+_080D7D80: .4byte gEffectBattler
_080D7D84: .4byte gBattleTypeFlags
_080D7D88: .4byte gUnknown_83FD555
_080D7D8C: .4byte gUnknown_83FD55B
@@ -1517,7 +1517,7 @@ _080D7EE4:
ands r0, r1
cmp r0, 0
beq _080D7F9C
- ldr r2, _080D7F20 @ =gUnknown_2023D68
+ ldr r2, _080D7F20 @ =gLastUsedItem
ldrh r0, [r2]
cmp r0, 0xAF
bne _080D7F98
@@ -1540,7 +1540,7 @@ _080D7EE4:
b _080D7F90
.align 2, 0
_080D7F1C: .4byte gBattleTypeFlags
-_080D7F20: .4byte gUnknown_2023D68
+_080D7F20: .4byte gLastUsedItem
_080D7F24: .4byte gBattleStruct
_080D7F28: .4byte gPotentialItemEffectBattler
_080D7F2C:
@@ -1600,7 +1600,7 @@ _080D7F98:
ldrh r0, [r2]
b _080D7FA0
_080D7F9C:
- ldr r0, _080D7FAC @ =gUnknown_2023D68
+ ldr r0, _080D7FAC @ =gLastUsedItem
ldrh r0, [r0]
_080D7FA0:
mov r1, sp
@@ -1608,7 +1608,7 @@ _080D7FA0:
mov r4, sp
b _080D8382
.align 2, 0
-_080D7FAC: .4byte gUnknown_2023D68
+_080D7FAC: .4byte gLastUsedItem
_080D7FB0:
ldr r0, _080D7FB4 @ =gLastUsedAbility
b _080D7FF0
@@ -1616,11 +1616,11 @@ _080D7FB0:
_080D7FB4: .4byte gLastUsedAbility
_080D7FB8:
ldr r1, _080D7FC0 @ =gUnknown_2039A30
- ldr r0, _080D7FC4 @ =sBattler_AI
+ ldr r0, _080D7FC4 @ =gBattlerAttacker
b _080D7FEC
.align 2, 0
_080D7FC0: .4byte gUnknown_2039A30
-_080D7FC4: .4byte sBattler_AI
+_080D7FC4: .4byte gBattlerAttacker
_080D7FC8:
ldr r1, _080D7FD0 @ =gUnknown_2039A30
ldr r0, _080D7FD4 @ =gBattlerTarget
@@ -1638,7 +1638,7 @@ _080D7FE0: .4byte gUnknown_2039A30
_080D7FE4: .4byte gBattleScripting
_080D7FE8:
ldr r1, _080D7FFC @ =gUnknown_2039A30
- ldr r0, _080D8000 @ =gUnknown_2023D6E
+ ldr r0, _080D8000 @ =gEffectBattler
_080D7FEC:
ldrb r0, [r0]
_080D7FEE:
@@ -1652,7 +1652,7 @@ _080D7FF0:
b _080D8382
.align 2, 0
_080D7FFC: .4byte gUnknown_2039A30
-_080D8000: .4byte gUnknown_2023D6E
+_080D8000: .4byte gEffectBattler
_080D8004: .4byte gUnknown_824FC40
_080D8008:
ldr r3, _080D8020 @ =gTrainerBattleOpponent_A
@@ -1871,7 +1871,7 @@ _080D819C:
movs r0, 0x3
_080D81AA:
eors r0, r1
- bl GetBankMultiplayerId
+ bl GetBattlerMultiplayerId
lsls r1, r0, 3
subs r1, r0
lsls r1, 2
@@ -1883,7 +1883,7 @@ _080D81BC: .4byte gLinkPlayers
_080D81C0:
ldr r0, _080D81D4 @ =gBattleScripting
ldrb r0, [r0, 0x17]
- bl GetBankMultiplayerId
+ bl GetBattlerMultiplayerId
_080D81C8:
lsls r1, r0, 3
subs r1, r0
@@ -2045,10 +2045,10 @@ _080D830C: .4byte 0x00000834
_080D8310: .4byte gUnknown_83FD81A
_080D8314: .4byte gUnknown_83FD824
_080D8318:
- ldr r0, _080D831C @ =sBattler_AI
+ ldr r0, _080D831C @ =gBattlerAttacker
b _080D8322
.align 2, 0
-_080D831C: .4byte sBattler_AI
+_080D831C: .4byte gBattlerAttacker
_080D8320:
ldr r0, _080D8334 @ =gBattlerTarget
_080D8322:
@@ -2065,10 +2065,10 @@ _080D8334: .4byte gBattlerTarget
_080D8338: .4byte gUnknown_83FD569
_080D833C: .4byte gUnknown_83FD56D
_080D8340:
- ldr r0, _080D8344 @ =sBattler_AI
+ ldr r0, _080D8344 @ =gBattlerAttacker
b _080D834A
.align 2, 0
-_080D8344: .4byte sBattler_AI
+_080D8344: .4byte gBattlerAttacker
_080D8348:
ldr r0, _080D835C @ =gBattlerTarget
_080D834A:
@@ -2085,10 +2085,10 @@ _080D835C: .4byte gBattlerTarget
_080D8360: .4byte gUnknown_83FD560
_080D8364: .4byte gUnknown_83FD564
_080D8368:
- ldr r0, _080D836C @ =sBattler_AI
+ ldr r0, _080D836C @ =gBattlerAttacker
b _080D8372
.align 2, 0
-_080D836C: .4byte sBattler_AI
+_080D836C: .4byte gBattlerAttacker
_080D8370:
ldr r0, _080D83D4 @ =gBattlerTarget
_080D8372:
@@ -2304,10 +2304,10 @@ _080D8504:
ldrb r0, [r0, 0x1]
lsls r1, r0, 3
subs r1, r0
- ldr r0, _080D8510 @ =gUnknown_824F1A0
+ ldr r0, _080D8510 @ =gTypeNames
b _080D8616
.align 2, 0
-_080D8510: .4byte gUnknown_824F1A0
+_080D8510: .4byte gTypeNames
_080D8514:
ldrb r0, [r4, 0x1]
bl GetBattlerSide
@@ -2649,8 +2649,8 @@ _080D87B0:
_080D87B8: .4byte gUnknown_83FD58E
thumb_func_end sub_80D8720
- thumb_func_start sub_80D87BC
-sub_80D87BC: @ 80D87BC
+ thumb_func_start BattlePutTextOnWindow
+BattlePutTextOnWindow: @ 80D87BC
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -2907,7 +2907,7 @@ _080D89A4:
pop {r4-r7}
pop {r0}
bx r0
- thumb_func_end sub_80D87BC
+ thumb_func_end BattlePutTextOnWindow
thumb_func_start sub_80D89B0
sub_80D89B0: @ 80D89B0
@@ -2946,7 +2946,7 @@ SetPpNumbersPaletteInMoveSelection: @ 80D89DC
ldr r0, _080D8A3C @ =gUnknown_2022BC8
adds r1, r0
ldr r4, _080D8A40 @ =gUnknown_8D2FBB4
- ldr r0, _080D8A44 @ =gUnknown_2023FFC
+ ldr r0, _080D8A44 @ =gMoveSelectionCursor
adds r2, r0
ldrb r2, [r2]
adds r0, r1, 0
@@ -2985,7 +2985,7 @@ SetPpNumbersPaletteInMoveSelection: @ 80D89DC
_080D8A38: .4byte gActiveBattler
_080D8A3C: .4byte gUnknown_2022BC8
_080D8A40: .4byte gUnknown_8D2FBB4
-_080D8A44: .4byte gUnknown_2023FFC
+_080D8A44: .4byte gMoveSelectionCursor
_080D8A48: .4byte gPlttBufferUnfaded
_080D8A4C: .4byte gPlttBufferFaded + 0xB8
thumb_func_end SetPpNumbersPaletteInMoveSelection
diff --git a/asm/battle_script_commands.s b/asm/battle_script_commands.s
deleted file mode 100644
index 7d93cba64..000000000
--- a/asm/battle_script_commands.s
+++ /dev/null
@@ -1,33196 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start atk00_attackcanceler
-atk00_attackcanceler: @ 801D760
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- ldr r0, _0801D77C @ =gBattleOutcome
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801D784
- ldr r1, _0801D780 @ =gUnknown_2023BE3
- movs r0, 0xC
- strb r0, [r1]
- b _0801DAFC
- .align 2, 0
-_0801D77C: .4byte gBattleOutcome
-_0801D780: .4byte gUnknown_2023BE3
-_0801D784:
- ldr r2, _0801D7B4 @ =gBattleMons
- ldr r0, _0801D7B8 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801D7C8
- ldr r2, _0801D7BC @ =gUnknown_2023DD0
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- bne _0801D7C8
- movs r0, 0x80
- lsls r0, 12
- orrs r1, r0
- str r1, [r2]
- ldr r1, _0801D7C0 @ =gUnknown_2023D74
- ldr r0, _0801D7C4 @ =gUnknown_81D694E
- b _0801DAFA
- .align 2, 0
-_0801D7B4: .4byte gBattleMons
-_0801D7B8: .4byte sBattler_AI
-_0801D7BC: .4byte gUnknown_2023DD0
-_0801D7C0: .4byte gUnknown_2023D74
-_0801D7C4: .4byte gUnknown_81D694E
-_0801D7C8:
- bl sub_80192D4
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0801D7D6
- b _0801DAFC
-_0801D7D6:
- ldr r0, _0801D844 @ =gBattlerTarget
- ldrb r1, [r0]
- str r2, [sp]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0801D7EE
- b _0801DAFC
-_0801D7EE:
- ldr r4, _0801D848 @ =gBattleMons
- ldr r0, _0801D84C @ =gUnknown_2023D48
- ldrb r1, [r0]
- ldr r3, _0801D850 @ =sBattler_AI
- ldrb r2, [r3]
- movs r0, 0x58
- muls r2, r0
- adds r1, r2
- adds r0, r4, 0
- adds r0, 0x24
- adds r1, r0
- ldrb r0, [r1]
- ldr r5, _0801D854 @ =gUnknown_2023DD0
- cmp r0, 0
- bne _0801D86C
- ldr r0, _0801D858 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xA5
- beq _0801D86C
- ldr r0, [r5]
- ldr r1, _0801D85C @ =0x00800200
- ands r0, r1
- cmp r0, 0
- bne _0801D86C
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- bne _0801D86C
- ldr r1, _0801D860 @ =gUnknown_2023D74
- ldr r0, _0801D864 @ =gUnknown_81D8EA8
- str r0, [r1]
- ldr r2, _0801D868 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- b _0801DAFC
- .align 2, 0
-_0801D844: .4byte gBattlerTarget
-_0801D848: .4byte gBattleMons
-_0801D84C: .4byte gUnknown_2023D48
-_0801D850: .4byte sBattler_AI
-_0801D854: .4byte gUnknown_2023DD0
-_0801D858: .4byte gCurrentMove
-_0801D85C: .4byte 0x00800200
-_0801D860: .4byte gUnknown_2023D74
-_0801D864: .4byte gUnknown_81D8EA8
-_0801D868: .4byte gMoveResultFlags
-_0801D86C:
- ldr r0, [r5]
- ldr r1, _0801D8B0 @ =0xff7fffff
- ands r0, r1
- str r0, [r5]
- movs r6, 0x80
- lsls r6, 18
- ands r0, r6
- cmp r0, 0
- bne _0801D8C4
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r1, r4, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- bne _0801D8C4
- bl sub_801D438
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0801D8C4
- cmp r2, 0x2
- bne _0801D8B4
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- b _0801DAFC
- .align 2, 0
-_0801D8B0: .4byte 0xff7fffff
-_0801D8B4:
- ldr r0, _0801D8C0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _0801DAFC
- .align 2, 0
-_0801D8C0: .4byte gMoveResultFlags
-_0801D8C4:
- ldr r2, _0801D928 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 18
- orrs r0, r1
- str r0, [r2]
- ldr r2, _0801D92C @ =gUnknown_2023E8C
- ldr r1, _0801D930 @ =gBattlerTarget
- ldrb r3, [r1]
- lsls r0, r3, 4
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 27
- mov r8, r1
- mov r9, r2
- cmp r0, 0
- bge _0801D94C
- ldr r2, _0801D934 @ =gBattleMoves
- ldr r0, _0801D938 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801D94C
- ldr r0, _0801D93C @ =sBattler_AI
- ldrb r0, [r0]
- ldr r2, _0801D940 @ =0x00000115
- adds r1, r3, 0
- bl PressurePPLose
- mov r0, r8
- ldrb r1, [r0]
- lsls r1, 4
- add r1, r9
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- bl BattleScriptPushCursor
- ldr r1, _0801D944 @ =gUnknown_2023D74
- ldr r0, _0801D948 @ =gUnknown_81D8FAA
- b _0801DAFA
- .align 2, 0
-_0801D928: .4byte gUnknown_2023DD0
-_0801D92C: .4byte gUnknown_2023E8C
-_0801D930: .4byte gBattlerTarget
-_0801D934: .4byte gBattleMoves
-_0801D938: .4byte gCurrentMove
-_0801D93C: .4byte sBattler_AI
-_0801D940: .4byte 0x00000115
-_0801D944: .4byte gUnknown_2023D74
-_0801D948: .4byte gUnknown_81D8FAA
-_0801D94C:
- movs r2, 0
- ldr r0, _0801D9C8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r2, r0
- bge _0801D98E
- ldr r6, _0801D9CC @ =gUnknown_2023E8C
- ldr r1, _0801D9D0 @ =gBattleMoves
- mov r12, r1
- adds r5, r0, 0
- ldr r7, _0801D9D4 @ =gUnknown_2023BDE
-_0801D960:
- adds r4, r2, r7
- ldrb r3, [r4]
- lsls r0, r3, 4
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _0801D988
- ldr r0, _0801D9D8 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r1, [r0, 0x8]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0801D988
- b _0801DAB4
-_0801D988:
- adds r2, 0x1
- cmp r2, r5
- blt _0801D960
-_0801D98E:
- ldr r0, _0801D9DC @ =gUnknown_2023ECC
- mov r1, r8
- ldrb r2, [r1]
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r3, [r1]
- lsls r0, r3, 30
- cmp r0, 0
- bge _0801D9EC
- movs r0, 0x3
- negs r0, r0
- ands r0, r3
- strb r0, [r1]
- ldr r4, _0801D9E0 @ =gLastUsedAbility
- movs r0, 0x1F
- strb r0, [r4]
- bl BattleScriptPushCursor
- ldr r1, _0801D9E4 @ =gUnknown_2023D74
- ldr r0, _0801D9E8 @ =gUnknown_81D938D
- str r0, [r1]
- mov r1, r8
- ldrb r0, [r1]
- ldrb r1, [r4]
- bl sub_80C71D0
- b _0801DAFC
- .align 2, 0
-_0801D9C8: .4byte gBattlersCount
-_0801D9CC: .4byte gUnknown_2023E8C
-_0801D9D0: .4byte gBattleMoves
-_0801D9D4: .4byte gUnknown_2023BDE
-_0801D9D8: .4byte gCurrentMove
-_0801D9DC: .4byte gUnknown_2023ECC
-_0801D9E0: .4byte gLastUsedAbility
-_0801D9E4: .4byte gUnknown_2023D74
-_0801D9E8: .4byte gUnknown_81D938D
-_0801D9EC:
- lsls r0, r2, 4
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _0801D9FA
- b _0801DAF4
-_0801D9FA:
- ldr r1, _0801DA90 @ =gBattleMoves
- ldr r2, _0801DA94 @ =gCurrentMove
- ldrh r3, [r2]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x2
- ands r0, r1
- adds r4, r2, 0
- cmp r0, 0
- beq _0801DAF4
- cmp r3, 0xAE
- bne _0801DA38
- ldr r2, _0801DA98 @ =gBattleMons
- ldr r0, _0801DA9C @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _0801DA38
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _0801DAF4
-_0801DA38:
- ldrh r0, [r4]
- bl IsTwoTurnsMove
- lsls r0, 24
- cmp r0, 0
- beq _0801DA5E
- ldr r1, _0801DA98 @ =gBattleMons
- ldr r0, _0801DA9C @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- beq _0801DAF4
-_0801DA5E:
- ldr r0, _0801DA9C @ =sBattler_AI
- ldrb r0, [r0]
- bl CancelMultiTurnMoves
- ldr r2, _0801DAA0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801DAA4 @ =gUnknown_2023DA0
- ldr r3, _0801DAA8 @ =gBattlerTarget
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801DAAC @ =gUnknown_2023DA8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldr r1, _0801DAB0 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x6]
- b _0801DAF4
- .align 2, 0
-_0801DA90: .4byte gBattleMoves
-_0801DA94: .4byte gCurrentMove
-_0801DA98: .4byte gBattleMons
-_0801DA9C: .4byte sBattler_AI
-_0801DAA0: .4byte gMoveResultFlags
-_0801DAA4: .4byte gUnknown_2023DA0
-_0801DAA8: .4byte gBattlerTarget
-_0801DAAC: .4byte gUnknown_2023DA8
-_0801DAB0: .4byte gUnknown_2023E82
-_0801DAB4:
- ldr r0, _0801DAE0 @ =sBattler_AI
- ldrb r0, [r0]
- ldr r2, _0801DAE4 @ =0x00000121
- adds r1, r3, 0
- bl PressurePPLose
- ldrb r1, [r4]
- lsls r1, 4
- adds r1, r6
- ldrb r2, [r1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, _0801DAE8 @ =gBattleScripting
- ldrb r0, [r4]
- strb r0, [r1, 0x17]
- bl BattleScriptPushCursor
- ldr r1, _0801DAEC @ =gUnknown_2023D74
- ldr r0, _0801DAF0 @ =gUnknown_81D8FC2
- b _0801DAFA
- .align 2, 0
-_0801DAE0: .4byte sBattler_AI
-_0801DAE4: .4byte 0x00000121
-_0801DAE8: .4byte gBattleScripting
-_0801DAEC: .4byte gUnknown_2023D74
-_0801DAF0: .4byte gUnknown_81D8FC2
-_0801DAF4:
- ldr r1, _0801DB0C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
-_0801DAFA:
- str r0, [r1]
-_0801DAFC:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801DB0C: .4byte gUnknown_2023D74
- thumb_func_end atk00_attackcanceler
-
- thumb_func_start JumpIfMoveFailed
-JumpIfMoveFailed: @ 801DB10
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r6, r1, 16
- ldr r1, _0801DB5C @ =gUnknown_2023D74
- ldr r5, [r1]
- adds r4, r5, r0
- ldr r0, _0801DB60 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801DB70
- ldr r1, _0801DB64 @ =gUnknown_2023DA0
- ldr r3, _0801DB68 @ =gBattlerTarget
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801DB6C @ =gUnknown_2023DA8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldrb r4, [r5, 0x1]
- ldrb r0, [r5, 0x2]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r5, 0x3]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r5, 0x4]
- lsls r0, 24
- orrs r4, r0
- b _0801DB8A
- .align 2, 0
-_0801DB5C: .4byte gUnknown_2023D74
-_0801DB60: .4byte gMoveResultFlags
-_0801DB64: .4byte gUnknown_2023DA0
-_0801DB68: .4byte gBattlerTarget
-_0801DB6C: .4byte gUnknown_2023DA8
-_0801DB70:
- bl TrySetDestinyBondToHappen
- ldr r0, _0801DB98 @ =gBattlerTarget
- ldrb r1, [r0]
- str r6, [sp]
- movs r0, 0x3
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801DB8E
-_0801DB8A:
- ldr r0, _0801DB9C @ =gUnknown_2023D74
- str r4, [r0]
-_0801DB8E:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801DB98: .4byte gBattlerTarget
-_0801DB9C: .4byte gUnknown_2023D74
- thumb_func_end JumpIfMoveFailed
-
- thumb_func_start atk40_jumpifaffectedbyprotect
-atk40_jumpifaffectedbyprotect: @ 801DBA0
- push {lr}
- ldr r1, _0801DBE8 @ =gUnknown_2023E8C
- ldr r0, _0801DBEC @ =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _0801DC00
- ldr r2, _0801DBF0 @ =gBattleMoves
- ldr r0, _0801DBF4 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801DC00
- ldr r2, _0801DBF8 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x5
- movs r1, 0
- bl JumpIfMoveFailed
- ldr r1, _0801DBFC @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x6]
- b _0801DC08
- .align 2, 0
-_0801DBE8: .4byte gUnknown_2023E8C
-_0801DBEC: .4byte gBattlerTarget
-_0801DBF0: .4byte gBattleMoves
-_0801DBF4: .4byte gCurrentMove
-_0801DBF8: .4byte gMoveResultFlags
-_0801DBFC: .4byte gUnknown_2023E82
-_0801DC00:
- ldr r1, _0801DC0C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0801DC08:
- pop {r0}
- bx r0
- .align 2, 0
-_0801DC0C: .4byte gUnknown_2023D74
- thumb_func_end atk40_jumpifaffectedbyprotect
-
- thumb_func_start JumpIfMoveAffectedByProtect
-JumpIfMoveAffectedByProtect: @ 801DC10
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- movs r4, 0
- ldr r1, _0801DC64 @ =gUnknown_2023E8C
- ldr r0, _0801DC68 @ =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _0801DC5C
- ldr r2, _0801DC6C @ =gBattleMoves
- ldr r0, _0801DC70 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801DC5C
- ldr r2, _0801DC74 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x7
- adds r1, r3, 0
- bl JumpIfMoveFailed
- ldr r1, _0801DC78 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x6]
- movs r4, 0x1
-_0801DC5C:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0801DC64: .4byte gUnknown_2023E8C
-_0801DC68: .4byte gBattlerTarget
-_0801DC6C: .4byte gBattleMoves
-_0801DC70: .4byte gCurrentMove
-_0801DC74: .4byte gMoveResultFlags
-_0801DC78: .4byte gUnknown_2023E82
- thumb_func_end JumpIfMoveAffectedByProtect
-
- thumb_func_start AccuracyCalcHelper
-AccuracyCalcHelper: @ 801DC7C
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r2, _0801DCDC @ =gStatuses3
- ldr r3, _0801DCE0 @ =gBattlerTarget
- ldrb r4, [r3]
- lsls r0, r4, 2
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0x18
- ands r1, r0
- adds r6, r2, 0
- cmp r1, 0
- beq _0801DCAE
- ldr r1, _0801DCE4 @ =gDisableStructs
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- ldr r1, _0801DCE8 @ =sBattler_AI
- ldrb r0, [r0, 0x15]
- ldrb r1, [r1]
- cmp r0, r1
- beq _0801DD98
-_0801DCAE:
- ldr r0, _0801DCEC @ =gUnknown_2023DD0
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 9
- ands r1, r2
- adds r2, r0, 0
- cmp r1, 0
- bne _0801DCF4
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801DCF4
-_0801DCCE:
- ldr r0, _0801DCF0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _0801DD98
- .align 2, 0
-_0801DCDC: .4byte gStatuses3
-_0801DCE0: .4byte gBattlerTarget
-_0801DCE4: .4byte gDisableStructs
-_0801DCE8: .4byte sBattler_AI
-_0801DCEC: .4byte gUnknown_2023DD0
-_0801DCF0: .4byte gMoveResultFlags
-_0801DCF4:
- ldr r0, [r2]
- ldr r1, _0801DDA4 @ =0xfffeffff
- ands r0, r1
- str r0, [r2]
- movs r1, 0x80
- lsls r1, 10
- ands r0, r1
- cmp r0, 0
- bne _0801DD16
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0801DCCE
-_0801DD16:
- ldr r0, [r2]
- ldr r1, _0801DDA8 @ =0xfffdffff
- ands r0, r1
- str r0, [r2]
- movs r1, 0x80
- lsls r1, 11
- ands r0, r1
- cmp r0, 0
- bne _0801DD36
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ands r0, r1
- cmp r0, 0
- bne _0801DCCE
-_0801DD36:
- ldr r0, [r2]
- ldr r1, _0801DDAC @ =0xfffbffff
- ands r0, r1
- str r0, [r2]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r5, 1
- cmp r0, 0
- bne _0801DD86
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801DD86
- ldr r0, _0801DDB0 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801DD86
- ldr r0, _0801DDB4 @ =gBattleMoves
- adds r1, r4, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x98
- beq _0801DD98
-_0801DD86:
- ldr r1, _0801DDB4 @ =gBattleMoves
- adds r0, r4, r5
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x11
- beq _0801DD98
- cmp r0, 0x4E
- bne _0801DDB8
-_0801DD98:
- movs r0, 0x7
- adds r1, r5, 0
- bl JumpIfMoveFailed
- movs r0, 0x1
- b _0801DDBA
- .align 2, 0
-_0801DDA4: .4byte 0xfffeffff
-_0801DDA8: .4byte 0xfffdffff
-_0801DDAC: .4byte 0xfffbffff
-_0801DDB0: .4byte gBattleWeather
-_0801DDB4: .4byte gBattleMoves
-_0801DDB8:
- movs r0, 0
-_0801DDBA:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end AccuracyCalcHelper
-
- thumb_func_start sub_801DDC4
-sub_801DDC4: @ 801DDC4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, _0801DE60 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r6, [r0, 0x5]
- ldrb r0, [r0, 0x6]
- lsls r0, 8
- orrs r6, r0
- ldr r0, _0801DE64 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801DE48
- movs r0, 0x1
- bl sub_80EB2E0
- lsls r0, 24
- cmp r0, 0
- bne _0801DE12
- ldr r0, _0801DE68 @ =gBattleMoves
- lsls r1, r6, 1
- adds r1, r6
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801DE12
- ldr r0, _0801DE6C @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0801DE56
-_0801DE12:
- ldr r0, _0801DE64 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801DE48
- movs r0, 0x2
- bl sub_80EB2E0
- lsls r0, 24
- cmp r0, 0
- bne _0801DE48
- ldr r0, _0801DE68 @ =gBattleMoves
- lsls r1, r6, 1
- adds r1, r6
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801DE48
- ldr r0, _0801DE6C @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0801DE56
-_0801DE48:
- ldr r0, _0801DE64 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 9
- ands r0, r1
- cmp r0, 0
- beq _0801DE70
-_0801DE56:
- movs r0, 0x7
- adds r1, r6, 0
- bl JumpIfMoveFailed
- b _0801E1C2
- .align 2, 0
-_0801DE60: .4byte gUnknown_2023D74
-_0801DE64: .4byte gBattleTypeFlags
-_0801DE68: .4byte gBattleMoves
-_0801DE6C: .4byte sBattler_AI
-_0801DE70:
- adds r0, r6, 0x2
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _0801DF0C
- ldr r2, _0801DED4 @ =gStatuses3
- ldr r3, _0801DED8 @ =gBattlerTarget
- ldrb r4, [r3]
- lsls r0, r4, 2
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0x18
- ands r1, r0
- cmp r1, 0
- beq _0801DEA8
- ldr r0, _0801DEDC @ =0x0000ffff
- cmp r6, r0
- bne _0801DEA8
- ldr r1, _0801DEE0 @ =gDisableStructs
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- ldr r1, _0801DEE4 @ =sBattler_AI
- ldrb r0, [r0, 0x15]
- ldrb r1, [r1]
- cmp r0, r1
- beq _0801DEFE
-_0801DEA8:
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldr r1, _0801DEE8 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _0801DEF0
- ldr r3, _0801DEEC @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0801E1C2
- .align 2, 0
-_0801DED4: .4byte gStatuses3
-_0801DED8: .4byte gBattlerTarget
-_0801DEDC: .4byte 0x0000ffff
-_0801DEE0: .4byte gDisableStructs
-_0801DEE4: .4byte sBattler_AI
-_0801DEE8: .4byte 0x000400c0
-_0801DEEC: .4byte gUnknown_2023D74
-_0801DEF0:
- movs r0, 0
- bl JumpIfMoveAffectedByProtect
- lsls r0, 24
- cmp r0, 0
- beq _0801DEFE
- b _0801E1C2
-_0801DEFE:
- ldr r1, _0801DF08 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x7
- str r0, [r1]
- b _0801E1C2
- .align 2, 0
-_0801DF08: .4byte gUnknown_2023D74
-_0801DF0C:
- cmp r6, 0
- bne _0801DF14
- ldr r0, _0801DF2C @ =gCurrentMove
- ldrh r6, [r0]
-_0801DF14:
- ldr r0, _0801DF30 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _0801DF34
- movs r1, 0x3F
- mov r10, r1
- mov r2, r10
- ands r2, r0
- mov r10, r2
- b _0801DF42
- .align 2, 0
-_0801DF2C: .4byte gCurrentMove
-_0801DF30: .4byte gBattleStruct
-_0801DF34:
- ldr r1, _0801DF88 @ =gBattleMoves
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x2]
- mov r10, r0
-_0801DF42:
- adds r0, r6, 0
- bl JumpIfMoveAffectedByProtect
- lsls r0, 24
- cmp r0, 0
- beq _0801DF50
- b _0801E1C2
-_0801DF50:
- adds r0, r6, 0
- bl AccuracyCalcHelper
- lsls r0, 24
- cmp r0, 0
- beq _0801DF5E
- b _0801E1C2
-_0801DF5E:
- ldr r3, _0801DF8C @ =gBattleMons
- ldr r0, _0801DF90 @ =gBattlerTarget
- ldrb r0, [r0]
- movs r2, 0x58
- adds r4, r0, 0
- muls r4, r2
- adds r0, r3, 0
- adds r0, 0x50
- adds r0, r4, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801DF98
- ldr r0, _0801DF94 @ =sBattler_AI
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- ldrb r5, [r0, 0x1E]
- b _0801DFAE
- .align 2, 0
-_0801DF88: .4byte gBattleMoves
-_0801DF8C: .4byte gBattleMons
-_0801DF90: .4byte gBattlerTarget
-_0801DF94: .4byte sBattler_AI
-_0801DF98:
- ldr r0, _0801E0FC @ =sBattler_AI
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- ldrb r0, [r0, 0x1E]
- adds r0, 0x6
- adds r1, r4, r3
- ldrb r1, [r1, 0x1F]
- subs r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
-_0801DFAE:
- lsls r0, r5, 24
- cmp r0, 0
- bge _0801DFB6
- movs r5, 0
-_0801DFB6:
- lsls r0, r5, 24
- asrs r0, 24
- cmp r0, 0xC
- ble _0801DFC0
- movs r5, 0xC
-_0801DFC0:
- ldr r1, _0801E100 @ =gBattleMoves
- lsls r4, r6, 1
- adds r0, r4, r6
- lsls r0, 2
- adds r7, r0, r1
- ldrb r3, [r7, 0x3]
- mov r8, r3
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- str r4, [sp, 0x4]
- cmp r0, 0
- bne _0801E012
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801E012
- ldr r0, _0801E104 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0801E012
- ldrb r0, [r7]
- cmp r0, 0x98
- bne _0801E012
- movs r0, 0x32
- mov r8, r0
-_0801E012:
- ldr r1, _0801E108 @ =gUnknown_82504FC
- lsls r0, r5, 24
- asrs r0, 22
- adds r0, r1
- ldrb r1, [r0]
- mov r4, r8
- muls r4, r1
- ldrb r1, [r0, 0x1]
- adds r0, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r7, _0801E10C @ =gBattleMons
- ldr r0, _0801E0FC @ =sBattler_AI
- ldrb r0, [r0]
- movs r5, 0x58
- muls r0, r5
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0xE
- bne _0801E050
- lsls r0, r4, 6
- adds r0, r4
- lsls r0, 1
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801E050:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0801E0A8
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801E0A8
- ldr r0, _0801E110 @ =gBattlerTarget
- ldrb r0, [r0]
- muls r0, r5
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _0801E0A8
- ldr r0, _0801E104 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x18
- ands r0, r1
- cmp r0, 0
- beq _0801E0A8
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801E0A8:
- ldr r2, _0801E10C @ =gBattleMons
- ldr r0, _0801E0FC @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- mov r9, r2
- cmp r0, 0x37
- bne _0801E0D4
- mov r1, r10
- cmp r1, 0x8
- bhi _0801E0D4
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801E0D4:
- ldr r2, _0801E110 @ =gBattlerTarget
- mov r8, r2
- ldrb r2, [r2]
- movs r7, 0x58
- adds r0, r2, 0
- muls r0, r7
- mov r3, r9
- adds r1, r0, r3
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0801E118
- ldr r1, _0801E114 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x7]
- ldrb r2, [r0, 0x1A]
- b _0801E134
- .align 2, 0
-_0801E0FC: .4byte sBattler_AI
-_0801E100: .4byte gBattleMoves
-_0801E104: .4byte gBattleWeather
-_0801E108: .4byte gUnknown_82504FC
-_0801E10C: .4byte gBattleMons
-_0801E110: .4byte gBattlerTarget
-_0801E114: .4byte gEnigmaBerries
-_0801E118:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r5, r0, 24
- mov r1, r8
- ldrb r0, [r1]
- muls r0, r7
- add r0, r9
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r2, r0, 24
-_0801E134:
- ldr r0, _0801E198 @ =gPotentialItemEffectBattler
- ldr r1, _0801E19C @ =gBattlerTarget
- ldrb r1, [r1]
- strb r1, [r0]
- cmp r5, 0x16
- bne _0801E150
- movs r0, 0x64
- subs r0, r2
- muls r0, r4
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801E150:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- adds r0, 0x1
- cmp r0, r4
- ble _0801E1BA
- ldr r2, _0801E1A0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0801E1A4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0801E1B0
- ldr r1, _0801E1A8 @ =gBattleMoves
- ldr r2, [sp, 0x4]
- adds r0, r2, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x6]
- cmp r0, 0x8
- beq _0801E192
- cmp r0, 0x20
- bne _0801E1B0
-_0801E192:
- ldr r1, _0801E1AC @ =gUnknown_2023E82
- movs r0, 0x2
- b _0801E1B4
- .align 2, 0
-_0801E198: .4byte gPotentialItemEffectBattler
-_0801E19C: .4byte gBattlerTarget
-_0801E1A0: .4byte gMoveResultFlags
-_0801E1A4: .4byte gBattleTypeFlags
-_0801E1A8: .4byte gBattleMoves
-_0801E1AC: .4byte gUnknown_2023E82
-_0801E1B0:
- ldr r1, _0801E1D4 @ =gUnknown_2023E82
- movs r0, 0
-_0801E1B4:
- strb r0, [r1, 0x6]
- bl CheckWonderGuardAndLevitate
-_0801E1BA:
- movs r0, 0x7
- adds r1, r6, 0
- bl JumpIfMoveFailed
-_0801E1C2:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E1D4: .4byte gUnknown_2023E82
- thumb_func_end sub_801DDC4
-
- thumb_func_start atk02_attackstring
-atk02_attackstring: @ 801E1D8
- push {r4,r5,lr}
- ldr r0, _0801E218 @ =gUnknown_2023BC8
- ldr r5, [r0]
- cmp r5, 0
- bne _0801E210
- ldr r4, _0801E21C @ =gUnknown_2023DD0
- ldr r0, [r4]
- movs r1, 0xC0
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- bne _0801E204
- ldr r0, _0801E220 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x4
- bl PrepareStringBattle
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 3
- orrs r0, r1
- str r0, [r4]
-_0801E204:
- ldr r0, _0801E224 @ =gUnknown_2023D74
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- ldr r0, _0801E228 @ =gUnknown_2023E82
- strb r5, [r0, 0x7]
-_0801E210:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E218: .4byte gUnknown_2023BC8
-_0801E21C: .4byte gUnknown_2023DD0
-_0801E220: .4byte sBattler_AI
-_0801E224: .4byte gUnknown_2023D74
-_0801E228: .4byte gUnknown_2023E82
- thumb_func_end atk02_attackstring
-
- thumb_func_start atk03_ppreduce
-atk03_ppreduce: @ 801E22C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r6, 0x1
- ldr r0, _0801E27C @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _0801E244
- b _0801E3DE
-_0801E244:
- ldr r1, _0801E280 @ =gUnknown_2023ECC
- ldr r2, _0801E284 @ =sBattler_AI
- ldrb r3, [r2]
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r4, r0, 31
- mov r9, r2
- cmp r4, 0
- bne _0801E2E6
- ldr r2, _0801E288 @ =gBattleMoves
- ldr r0, _0801E28C @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x6]
- cmp r0, 0x20
- beq _0801E296
- cmp r0, 0x20
- bgt _0801E290
- cmp r0, 0x8
- beq _0801E2AC
- b _0801E2C6
- .align 2, 0
-_0801E27C: .4byte gUnknown_2023BC8
-_0801E280: .4byte gUnknown_2023ECC
-_0801E284: .4byte sBattler_AI
-_0801E288: .4byte gBattleMoves
-_0801E28C: .4byte gCurrentMove
-_0801E290:
- cmp r0, 0x40
- beq _0801E2AC
- b _0801E2C6
-_0801E296:
- str r4, [sp]
- movs r0, 0x12
- adds r1, r3, 0
- movs r2, 0x2E
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0, 0x1
- b _0801E2E6
-_0801E2AC:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x10
- movs r2, 0x2E
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0
- b _0801E2E6
-_0801E2C6:
- ldr r1, _0801E348 @ =gBattlerTarget
- mov r2, r9
- ldrb r0, [r2]
- ldrb r7, [r1]
- cmp r0, r7
- beq _0801E2E6
- ldr r2, _0801E34C @ =gBattleMons
- ldrb r1, [r1]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2E
- bne _0801E2E6
- adds r6, 0x1
-_0801E2E6:
- ldr r0, _0801E350 @ =gUnknown_2023DD0
- ldr r4, [r0]
- movs r0, 0xA0
- lsls r0, 4
- ands r4, r0
- cmp r4, 0
- bne _0801E3CC
- ldr r2, _0801E34C @ =gBattleMons
- ldr r3, _0801E354 @ =gUnknown_2023D48
- ldr r1, _0801E358 @ =sBattler_AI
- ldrb r5, [r1]
- movs r0, 0x58
- mov r8, r0
- mov r0, r8
- muls r0, r5
- ldrb r7, [r3]
- adds r0, r7
- movs r7, 0x24
- adds r7, r2
- mov r12, r7
- add r0, r12
- ldrb r0, [r0]
- mov r9, r1
- mov r10, r2
- adds r7, r3, 0
- cmp r0, 0
- beq _0801E3CC
- ldr r0, _0801E35C @ =gUnknown_2023E8C
- lsls r1, r5, 4
- adds r1, r0
- ldrb r0, [r1, 0x2]
- movs r2, 0x8
- orrs r0, r2
- strb r0, [r1, 0x2]
- mov r1, r9
- ldrb r0, [r1]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- ldrb r1, [r7]
- adds r0, r1
- mov r1, r12
- adds r2, r0, r1
- ldrb r0, [r2]
- cmp r0, r6
- ble _0801E360
- subs r0, r6
- strb r0, [r2]
- b _0801E362
- .align 2, 0
-_0801E348: .4byte gBattlerTarget
-_0801E34C: .4byte gBattleMons
-_0801E350: .4byte gUnknown_2023DD0
-_0801E354: .4byte gUnknown_2023D48
-_0801E358: .4byte sBattler_AI
-_0801E35C: .4byte gUnknown_2023E8C
-_0801E360:
- strb r4, [r2]
-_0801E362:
- mov r2, r9
- ldrb r3, [r2]
- movs r4, 0x58
- adds r0, r3, 0
- muls r0, r4
- mov r1, r10
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _0801E3CC
- ldr r1, _0801E3F0 @ =gDisableStructs
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _0801E3F4 @ =gBitTable
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0801E3CC
- ldr r0, _0801E3F8 @ =gActiveBattler
- strb r3, [r0]
- ldrb r1, [r7]
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- mov r2, r9
- ldrb r0, [r2]
- muls r0, r4
- mov r2, r10
- adds r2, 0x24
- adds r0, r2
- ldrb r7, [r7]
- adds r0, r7
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetMonData
- mov r7, r9
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
-_0801E3CC:
- ldr r2, _0801E3FC @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _0801E400 @ =0xfffff7ff
- ands r0, r1
- str r0, [r2]
- ldr r1, _0801E404 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801E3DE:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E3F0: .4byte gDisableStructs
-_0801E3F4: .4byte gBitTable
-_0801E3F8: .4byte gActiveBattler
-_0801E3FC: .4byte gUnknown_2023DD0
-_0801E400: .4byte 0xfffff7ff
-_0801E404: .4byte gUnknown_2023D74
- thumb_func_end atk03_ppreduce
-
- thumb_func_start sub_801E408
-sub_801E408: @ 801E408
- push {r4-r7,lr}
- ldr r1, _0801E42C @ =gBattleMons
- ldr r0, _0801E430 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- cmp r0, 0xAF
- bne _0801E438
- ldr r1, _0801E434 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r6, [r0, 0x7]
- b _0801E440
- .align 2, 0
-_0801E42C: .4byte gBattleMons
-_0801E430: .4byte sBattler_AI
-_0801E434: .4byte gEnigmaBerries
-_0801E438:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r6, r0, 24
-_0801E440:
- ldr r1, _0801E4CC @ =gPotentialItemEffectBattler
- ldr r3, _0801E4D0 @ =sBattler_AI
- ldrb r0, [r3]
- strb r0, [r1]
- ldr r4, _0801E4D4 @ =gBattleMons
- ldrb r1, [r3]
- movs r0, 0x58
- adds r7, r1, 0
- muls r7, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r7, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- negs r0, r0
- asrs r5, r0, 31
- movs r0, 0x2
- ands r5, r0
- ldr r2, _0801E4D8 @ =gBattleMoves
- ldr r0, _0801E4DC @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- mov r12, r3
- cmp r1, 0x2B
- bne _0801E480
- adds r5, 0x1
-_0801E480:
- adds r0, r5, 0
- cmp r1, 0x4B
- bne _0801E488
- adds r0, 0x1
-_0801E488:
- cmp r1, 0xC8
- bne _0801E48E
- adds r0, 0x1
-_0801E48E:
- adds r2, r0, 0
- cmp r1, 0xD1
- bne _0801E496
- adds r2, 0x1
-_0801E496:
- movs r1, 0
- cmp r6, 0x3F
- bne _0801E4A6
- adds r0, r7, r4
- ldrh r0, [r0]
- cmp r0, 0x71
- bne _0801E4A6
- movs r1, 0x1
-_0801E4A6:
- lsls r5, r1, 1
- movs r3, 0
- cmp r6, 0x42
- bne _0801E4C0
- mov r0, r12
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0x53
- bne _0801E4C0
- movs r3, 0x1
-_0801E4C0:
- lsls r1, r3, 1
- cmp r6, 0x29
- bne _0801E4E0
- adds r0, r5, 0x1
- adds r0, r2, r0
- b _0801E4E2
- .align 2, 0
-_0801E4CC: .4byte gPotentialItemEffectBattler
-_0801E4D0: .4byte sBattler_AI
-_0801E4D4: .4byte gBattleMons
-_0801E4D8: .4byte gBattleMoves
-_0801E4DC: .4byte gCurrentMove
-_0801E4E0:
- adds r0, r2, r5
-_0801E4E2:
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- adds r5, r0, 0
- cmp r5, 0x4
- bls _0801E4F0
- movs r5, 0x4
-_0801E4F0:
- ldr r0, _0801E56C @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r4
- adds r0, 0x20
- ldrb r4, [r0]
- cmp r4, 0x4
- beq _0801E580
- cmp r4, 0x4B
- beq _0801E580
- ldr r1, _0801E570 @ =gStatuses3
- mov r2, r12
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- bne _0801E580
- ldr r4, _0801E574 @ =gBattleTypeFlags
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- bne _0801E580
- bl Random
- ldr r2, _0801E578 @ =gUnknown_8250530
- lsls r1, r5, 1
- adds r1, r2
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r1]
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _0801E580
- ldr r0, [r4]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801E55A
- movs r0, 0x1
- bl sub_80EB2E0
- lsls r0, 24
- cmp r0, 0
- beq _0801E580
-_0801E55A:
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 9
- ands r0, r1
- cmp r0, 0
- bne _0801E580
- ldr r1, _0801E57C @ =gCritMultiplier
- movs r0, 0x2
- b _0801E584
- .align 2, 0
-_0801E56C: .4byte gBattlerTarget
-_0801E570: .4byte gStatuses3
-_0801E574: .4byte gBattleTypeFlags
-_0801E578: .4byte gUnknown_8250530
-_0801E57C: .4byte gCritMultiplier
-_0801E580:
- ldr r1, _0801E594 @ =gCritMultiplier
- movs r0, 0x1
-_0801E584:
- strb r0, [r1]
- ldr r1, _0801E598 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E594: .4byte gCritMultiplier
-_0801E598: .4byte gUnknown_2023D74
- thumb_func_end sub_801E408
-
- thumb_func_start atk05_damagecalc
-atk05_damagecalc: @ 801E59C
- push {r4-r7,lr}
- sub sp, 0x10
- ldr r4, _0801E654 @ =gSideAffecting
- ldr r5, _0801E658 @ =gBattlerTarget
- ldrb r0, [r5]
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldr r6, _0801E65C @ =sBattler_AI
- ldrb r0, [r6]
- movs r4, 0x58
- muls r0, r4
- ldr r2, _0801E660 @ =gBattleMons
- adds r0, r2
- ldrb r1, [r5]
- muls r1, r4
- adds r1, r2
- ldr r7, _0801E664 @ =gCurrentMove
- ldrh r2, [r7]
- ldr r4, _0801E668 @ =gDynamicBasePower
- ldrh r4, [r4]
- str r4, [sp]
- ldr r4, _0801E66C @ =gBattleStruct
- ldr r4, [r4]
- ldrb r4, [r4, 0x13]
- str r4, [sp, 0x4]
- ldrb r4, [r6]
- str r4, [sp, 0x8]
- ldrb r4, [r5]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- ldr r4, _0801E670 @ =gBattleMoveDamage
- ldr r1, _0801E674 @ =gCritMultiplier
- ldrb r1, [r1]
- muls r1, r0
- ldr r0, _0801E678 @ =gBattleScripting
- ldrb r0, [r0, 0xE]
- adds r3, r1, 0
- muls r3, r0
- str r3, [r4]
- ldr r1, _0801E67C @ =gStatuses3
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _0801E620
- ldr r2, _0801E680 @ =gBattleMoves
- ldrh r1, [r7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- cmp r0, 0xD
- bne _0801E620
- lsls r0, r3, 1
- str r0, [r4]
-_0801E620:
- ldr r1, _0801E684 @ =gUnknown_2023E8C
- ldr r0, _0801E65C @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- bge _0801E642
- ldr r4, _0801E670 @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0801E642:
- ldr r1, _0801E688 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E654: .4byte gSideAffecting
-_0801E658: .4byte gBattlerTarget
-_0801E65C: .4byte sBattler_AI
-_0801E660: .4byte gBattleMons
-_0801E664: .4byte gCurrentMove
-_0801E668: .4byte gDynamicBasePower
-_0801E66C: .4byte gBattleStruct
-_0801E670: .4byte gBattleMoveDamage
-_0801E674: .4byte gCritMultiplier
-_0801E678: .4byte gBattleScripting
-_0801E67C: .4byte gStatuses3
-_0801E680: .4byte gBattleMoves
-_0801E684: .4byte gUnknown_2023E8C
-_0801E688: .4byte gUnknown_2023D74
- thumb_func_end atk05_damagecalc
-
- thumb_func_start AI_CalcDmg
-AI_CalcDmg: @ 801E68C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r5, r1, 0
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r4, _0801E744 @ =gSideAffecting
- adds r0, r5, 0
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- movs r1, 0x58
- adds r0, r7, 0
- muls r0, r1
- ldr r2, _0801E748 @ =gBattleMons
- adds r0, r2
- muls r1, r5
- adds r1, r2
- ldr r2, _0801E74C @ =gCurrentMove
- mov r8, r2
- ldrh r2, [r2]
- ldr r6, _0801E750 @ =gDynamicBasePower
- ldrh r4, [r6]
- str r4, [sp]
- ldr r4, _0801E754 @ =gBattleStruct
- ldr r4, [r4]
- ldrb r4, [r4, 0x13]
- str r4, [sp, 0x4]
- str r7, [sp, 0x8]
- str r5, [sp, 0xC]
- bl CalculateBaseDamage
- ldr r4, _0801E758 @ =gBattleMoveDamage
- movs r1, 0
- strh r1, [r6]
- ldr r1, _0801E75C @ =gCritMultiplier
- ldrb r1, [r1]
- muls r1, r0
- ldr r0, _0801E760 @ =gBattleScripting
- ldrb r0, [r0, 0xE]
- adds r3, r1, 0
- muls r3, r0
- str r3, [r4]
- ldr r1, _0801E764 @ =gStatuses3
- lsls r0, r7, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _0801E71A
- ldr r2, _0801E768 @ =gBattleMoves
- mov r0, r8
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- cmp r0, 0xD
- bne _0801E71A
- lsls r0, r3, 1
- str r0, [r4]
-_0801E71A:
- ldr r0, _0801E76C @ =gUnknown_2023E8C
- lsls r1, r7, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 28
- cmp r0, 0
- bge _0801E738
- ldr r4, _0801E758 @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0801E738:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E744: .4byte gSideAffecting
-_0801E748: .4byte gBattleMons
-_0801E74C: .4byte gCurrentMove
-_0801E750: .4byte gDynamicBasePower
-_0801E754: .4byte gBattleStruct
-_0801E758: .4byte gBattleMoveDamage
-_0801E75C: .4byte gCritMultiplier
-_0801E760: .4byte gBattleScripting
-_0801E764: .4byte gStatuses3
-_0801E768: .4byte gBattleMoves
-_0801E76C: .4byte gUnknown_2023E8C
- thumb_func_end AI_CalcDmg
-
- thumb_func_start ModulateDmgByType
-ModulateDmgByType: @ 801E770
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, _0801E7A0 @ =gBattleMoveDamage
- ldr r0, [r5]
- muls r0, r4
- movs r1, 0xA
- bl __divsi3
- str r0, [r5]
- cmp r0, 0
- bne _0801E790
- cmp r4, 0
- beq _0801E790
- movs r0, 0x1
- str r0, [r5]
-_0801E790:
- cmp r4, 0x5
- beq _0801E7C0
- cmp r4, 0x5
- bgt _0801E7A4
- cmp r4, 0
- beq _0801E7AA
- b _0801E842
- .align 2, 0
-_0801E7A0: .4byte gBattleMoveDamage
-_0801E7A4:
- cmp r4, 0x14
- beq _0801E800
- b _0801E842
-_0801E7AA:
- ldr r2, _0801E7BC @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- movs r1, 0xFB
- ands r0, r1
- movs r1, 0xFD
- ands r0, r1
- b _0801E840
- .align 2, 0
-_0801E7BC: .4byte gMoveResultFlags
-_0801E7C0:
- ldr r2, _0801E7F0 @ =gBattleMoves
- ldr r0, _0801E7F4 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801E842
- ldr r2, _0801E7F8 @ =gMoveResultFlags
- ldrb r1, [r2]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801E842
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801E7FC
- movs r0, 0xFD
- ands r0, r1
- b _0801E840
- .align 2, 0
-_0801E7F0: .4byte gBattleMoves
-_0801E7F4: .4byte gCurrentMove
-_0801E7F8: .4byte gMoveResultFlags
-_0801E7FC:
- movs r0, 0x4
- b _0801E83E
-_0801E800:
- ldr r2, _0801E830 @ =gBattleMoves
- ldr r0, _0801E834 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801E842
- ldr r2, _0801E838 @ =gMoveResultFlags
- ldrb r1, [r2]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801E842
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801E83C
- movs r0, 0xFB
- ands r0, r1
- b _0801E840
- .align 2, 0
-_0801E830: .4byte gBattleMoves
-_0801E834: .4byte gCurrentMove
-_0801E838: .4byte gMoveResultFlags
-_0801E83C:
- movs r0, 0x2
-_0801E83E:
- orrs r0, r1
-_0801E840:
- strb r0, [r2]
-_0801E842:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end ModulateDmgByType
-
- thumb_func_start atk06_typecalc
-atk06_typecalc: @ 801E848
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r3, 0
- ldr r1, _0801E870 @ =gCurrentMove
- ldrh r0, [r1]
- cmp r0, 0xA5
- bne _0801E85C
- b _0801EA70
-_0801E85C:
- ldr r0, _0801E874 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _0801E878
- movs r1, 0x3F
- mov r8, r1
- ands r1, r0
- mov r8, r1
- b _0801E888
- .align 2, 0
-_0801E870: .4byte gCurrentMove
-_0801E874: .4byte gBattleStruct
-_0801E878:
- ldr r2, _0801E910 @ =gBattleMoves
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- mov r8, r0
-_0801E888:
- ldr r2, _0801E914 @ =gBattleMons
- ldr r0, _0801E918 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- adds r5, r2, 0
- cmp r0, r8
- beq _0801E8AA
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r8
- bne _0801E8C0
-_0801E8AA:
- ldr r4, _0801E91C @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- str r0, [r4]
- movs r1, 0xA
- str r3, [sp, 0x4]
- bl __divsi3
- str r0, [r4]
- ldr r3, [sp, 0x4]
-_0801E8C0:
- ldr r2, _0801E920 @ =gBattlerTarget
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r2, 0
- cmp r0, 0x1A
- bne _0801E938
- mov r1, r8
- cmp r1, 0x4
- bne _0801E938
- ldr r3, _0801E924 @ =gLastUsedAbility
- strb r0, [r3]
- ldr r2, _0801E928 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x9
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801E92C @ =gUnknown_2023DA0
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801E930 @ =gUnknown_2023DA8
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldr r0, _0801E934 @ =gUnknown_2023E82
- mov r1, r8
- strb r1, [r0, 0x6]
- ldrb r0, [r4]
- ldrb r1, [r3]
- bl sub_80C71D0
- b _0801E9D4
- .align 2, 0
-_0801E910: .4byte gBattleMoves
-_0801E914: .4byte gBattleMons
-_0801E918: .4byte sBattler_AI
-_0801E91C: .4byte gBattleMoveDamage
-_0801E920: .4byte gBattlerTarget
-_0801E924: .4byte gLastUsedAbility
-_0801E928: .4byte gMoveResultFlags
-_0801E92C: .4byte gUnknown_2023DA0
-_0801E930: .4byte gUnknown_2023DA8
-_0801E934: .4byte gUnknown_2023E82
-_0801E938:
- ldr r1, _0801E944 @ =gUnknown_824F050
- adds r0, r3, r1
- ldrb r0, [r0]
- adds r2, r1, 0
- b _0801E9B4
- .align 2, 0
-_0801E944: .4byte gUnknown_824F050
-_0801E948:
- adds r3, 0x3
- b _0801E9B0
-_0801E94C:
- ldr r5, _0801EA84 @ =gUnknown_824F050
- adds r0, r3, r5
- ldrb r0, [r0]
- cmp r0, r8
- bne _0801E9A8
- adds r1, r3, 0x1
- adds r1, r5
- ldr r2, _0801EA88 @ =gBattleMons
- ldr r7, _0801EA8C @ =gBattlerTarget
- ldrb r0, [r7]
- movs r6, 0x58
- muls r0, r6
- adds r0, r2
- adds r0, 0x21
- ldrb r4, [r1]
- ldrb r0, [r0]
- cmp r4, r0
- bne _0801E982
- adds r0, r3, 0x2
- adds r0, r5
- ldrb r0, [r0]
- str r2, [sp]
- str r3, [sp, 0x4]
- bl ModulateDmgByType
- ldr r3, [sp, 0x4]
- ldr r2, [sp]
-_0801E982:
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r2
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r1, [r1]
- cmp r4, r1
- bne _0801E9A8
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r4
- beq _0801E9A8
- adds r0, r3, 0x2
- adds r0, r5
- ldrb r0, [r0]
- str r3, [sp, 0x4]
- bl ModulateDmgByType
- ldr r3, [sp, 0x4]
-_0801E9A8:
- adds r3, 0x3
- ldr r5, _0801EA88 @ =gBattleMons
- ldr r4, _0801EA8C @ =gBattlerTarget
- ldr r2, _0801EA84 @ =gUnknown_824F050
-_0801E9B0:
- adds r0, r3, r2
- ldrb r0, [r0]
-_0801E9B4:
- cmp r0, 0xFF
- beq _0801E9D4
- cmp r0, 0xFE
- bne _0801E94C
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r1, r5, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801E948
-_0801E9D4:
- ldr r2, _0801EA88 @ =gBattleMons
- ldr r5, _0801EA8C @ =gBattlerTarget
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r6, [r0]
- cmp r6, 0x19
- bne _0801EA52
- ldr r0, _0801EA90 @ =sBattler_AI
- ldrb r0, [r0]
- ldr r7, _0801EA94 @ =gCurrentMove
- ldrh r1, [r7]
- bl AttacksThisTurn
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0801EA52
- ldr r1, _0801EA98 @ =gMoveResultFlags
- mov r8, r1
- ldrb r4, [r1]
- ands r0, r4
- cmp r0, 0
- beq _0801EA10
- movs r0, 0x6
- ands r0, r4
- cmp r0, 0x6
- bne _0801EA52
-_0801EA10:
- ldr r2, _0801EA9C @ =gBattleMoves
- ldrh r1, [r7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801EA52
- ldr r3, _0801EAA0 @ =gLastUsedAbility
- strb r6, [r3]
- movs r0, 0x1
- orrs r0, r4
- mov r1, r8
- strb r0, [r1]
- ldr r1, _0801EAA4 @ =gUnknown_2023DA0
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801EAA8 @ =gUnknown_2023DA8
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldr r1, _0801EAAC @ =gUnknown_2023E82
- movs r0, 0x3
- strb r0, [r1, 0x6]
- ldrb r0, [r5]
- ldrb r1, [r3]
- bl sub_80C71D0
-_0801EA52:
- ldr r0, _0801EA98 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0801EA70
- ldr r2, _0801EAB0 @ =gUnknown_2023E8C
- ldr r0, _0801EA90 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r1, 4
- adds r1, r2
- ldrb r0, [r1, 0x1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1, 0x1]
-_0801EA70:
- ldr r1, _0801EAB4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801EA84: .4byte gUnknown_824F050
-_0801EA88: .4byte gBattleMons
-_0801EA8C: .4byte gBattlerTarget
-_0801EA90: .4byte sBattler_AI
-_0801EA94: .4byte gCurrentMove
-_0801EA98: .4byte gMoveResultFlags
-_0801EA9C: .4byte gBattleMoves
-_0801EAA0: .4byte gLastUsedAbility
-_0801EAA4: .4byte gUnknown_2023DA0
-_0801EAA8: .4byte gUnknown_2023DA8
-_0801EAAC: .4byte gUnknown_2023E82
-_0801EAB0: .4byte gUnknown_2023E8C
-_0801EAB4: .4byte gUnknown_2023D74
- thumb_func_end atk06_typecalc
-
- thumb_func_start CheckWonderGuardAndLevitate
-CheckWonderGuardAndLevitate: @ 801EAB8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r6, 0
- movs r5, 0
- ldr r0, _0801EAF8 @ =gCurrentMove
- ldrh r1, [r0]
- mov r9, r0
- cmp r1, 0xA5
- bne _0801EAD0
- b _0801ED18
-_0801EAD0:
- ldr r2, _0801EAFC @ =gBattleMoves
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801EAE2
- b _0801ED18
-_0801EAE2:
- ldr r0, _0801EB00 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _0801EB04
- movs r1, 0x3F
- mov r12, r1
- mov r2, r12
- ands r2, r0
- mov r12, r2
- b _0801EB08
- .align 2, 0
-_0801EAF8: .4byte gCurrentMove
-_0801EAFC: .4byte gBattleMoves
-_0801EB00: .4byte gBattleStruct
-_0801EB04:
- ldrb r1, [r1, 0x2]
- mov r12, r1
-_0801EB08:
- ldr r2, _0801EB3C @ =gBattleMons
- ldr r3, _0801EB40 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r1, [r0]
- adds r7, r2, 0
- mov r8, r3
- cmp r1, 0x1A
- bne _0801EB4C
- mov r0, r12
- cmp r0, 0x4
- bne _0801EB4C
- ldr r0, _0801EB44 @ =gLastUsedAbility
- strb r1, [r0]
- ldr r0, _0801EB48 @ =gUnknown_2023E82
- mov r1, r12
- strb r1, [r0, 0x6]
- ldrb r0, [r3]
- movs r1, 0x1A
- bl sub_80C71D0
- b _0801ED18
- .align 2, 0
-_0801EB3C: .4byte gBattleMons
-_0801EB40: .4byte gBattlerTarget
-_0801EB44: .4byte gLastUsedAbility
-_0801EB48: .4byte gUnknown_2023E82
-_0801EB4C:
- ldr r1, _0801EB58 @ =gUnknown_824F050
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r4, r1, 0
- b _0801EC9E
- .align 2, 0
-_0801EB58: .4byte gUnknown_824F050
-_0801EB5C:
- adds r0, r5, r4
- ldrb r0, [r0]
- cmp r0, r12
- beq _0801EB66
- b _0801EC98
-_0801EB66:
- adds r2, r5, 0x1
- adds r3, r2, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x21
- ldrb r1, [r3]
- adds r3, r2, 0
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801EBA6
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801EBA6
- ldr r2, _0801ED24 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801ED28 @ =gUnknown_2023E8C
- ldr r0, _0801ED2C @ =sBattler_AI
- ldrb r2, [r0]
- lsls r2, 4
- adds r2, r1
- ldrb r0, [r2, 0x1]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2, 0x1]
-_0801EBA6:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _0801EBEC
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0801EBEC
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801EBEC
- ldr r2, _0801ED24 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801ED28 @ =gUnknown_2023E8C
- ldr r0, _0801ED2C @ =sBattler_AI
- ldrb r2, [r0]
- lsls r2, 4
- adds r2, r1
- ldrb r0, [r2, 0x1]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2, 0x1]
-_0801EBEC:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x21
- ldrb r1, [r2]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801EC10
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _0801EC10
- movs r0, 0x1
- orrs r6, r0
-_0801EC10:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _0801EC3E
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0801EC3E
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _0801EC3E
- movs r0, 0x1
- orrs r6, r0
-_0801EC3E:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x21
- ldrb r1, [r2]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801EC66
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x5
- bne _0801EC66
- movs r0, 0x2
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0801EC66:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _0801EC98
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0801EC98
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x5
- bne _0801EC98
- movs r0, 0x2
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0801EC98:
- adds r5, 0x3
- adds r0, r5, r4
- ldrb r0, [r0]
-_0801EC9E:
- cmp r0, 0xFF
- beq _0801ECC2
- cmp r0, 0xFE
- beq _0801ECA8
- b _0801EB5C
-_0801ECA8:
- mov r2, r8
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- adds r1, r7, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801EC98
-_0801ECC2:
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x20
- ldrb r4, [r0]
- cmp r4, 0x19
- bne _0801ED18
- ldr r0, _0801ED2C @ =sBattler_AI
- ldrb r0, [r0]
- mov r2, r9
- ldrh r1, [r2]
- bl AttacksThisTurn
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0801ED18
- movs r0, 0x3
- ands r6, r0
- cmp r6, 0x1
- beq _0801ED18
- ldr r2, _0801ED30 @ =gBattleMoves
- mov r0, r9
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801ED18
- ldr r0, _0801ED34 @ =gLastUsedAbility
- strb r4, [r0]
- ldr r1, _0801ED38 @ =gUnknown_2023E82
- movs r0, 0x3
- strb r0, [r1, 0x6]
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x19
- bl sub_80C71D0
-_0801ED18:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801ED24: .4byte gMoveResultFlags
-_0801ED28: .4byte gUnknown_2023E8C
-_0801ED2C: .4byte sBattler_AI
-_0801ED30: .4byte gBattleMoves
-_0801ED34: .4byte gLastUsedAbility
-_0801ED38: .4byte gUnknown_2023E82
- thumb_func_end CheckWonderGuardAndLevitate
-
- thumb_func_start ModulateDmgByType2
-ModulateDmgByType2: @ 801ED3C
- push {r4-r7,lr}
- adds r6, r2, 0
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- ldr r7, _0801ED70 @ =gBattleMoveDamage
- ldr r0, [r7]
- muls r0, r4
- movs r1, 0xA
- bl __divsi3
- str r0, [r7]
- cmp r0, 0
- bne _0801ED62
- cmp r4, 0
- beq _0801ED62
- movs r0, 0x1
- str r0, [r7]
-_0801ED62:
- cmp r4, 0x5
- beq _0801ED8A
- cmp r4, 0x5
- bgt _0801ED74
- cmp r4, 0
- beq _0801ED7A
- b _0801EDEE
- .align 2, 0
-_0801ED70: .4byte gBattleMoveDamage
-_0801ED74:
- cmp r4, 0x14
- beq _0801EDBC
- b _0801EDEE
-_0801ED7A:
- ldrb r0, [r6]
- movs r1, 0x8
- orrs r0, r1
- movs r1, 0xFB
- ands r0, r1
- movs r1, 0xFD
- ands r0, r1
- b _0801EDEC
-_0801ED8A:
- ldr r0, _0801EDB4 @ =gBattleMoves
- lsls r1, r5, 1
- adds r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801EDEE
- ldrb r1, [r6]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801EDEE
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801EDB8
- movs r0, 0xFD
- ands r0, r1
- b _0801EDEC
- .align 2, 0
-_0801EDB4: .4byte gBattleMoves
-_0801EDB8:
- movs r0, 0x4
- b _0801EDEA
-_0801EDBC:
- ldr r0, _0801EDE4 @ =gBattleMoves
- lsls r1, r5, 1
- adds r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801EDEE
- ldrb r1, [r6]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801EDEE
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801EDE8
- movs r0, 0xFB
- ands r0, r1
- b _0801EDEC
- .align 2, 0
-_0801EDE4: .4byte gBattleMoves
-_0801EDE8:
- movs r0, 0x2
-_0801EDEA:
- orrs r0, r1
-_0801EDEC:
- strb r0, [r6]
-_0801EDEE:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ModulateDmgByType2
-
- thumb_func_start TypeCalc
-TypeCalc: @ 801EDF4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp, 0x4]
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- movs r0, 0
- mov r8, r0
- mov r0, sp
- mov r1, r8
- strb r1, [r0]
- mov r2, r10
- cmp r2, 0xA5
- bne _0801EE26
- movs r0, 0
- b _0801EFAE
-_0801EE26:
- ldr r1, _0801EE94 @ =gBattleMoves
- mov r3, r10
- lsls r2, r3, 1
- adds r0, r2, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x8]
- ldr r1, _0801EE98 @ =gBattleMons
- movs r0, 0x58
- ldr r3, [sp, 0x4]
- muls r0, r3
- adds r3, r0, r1
- adds r0, r3, 0
- adds r0, 0x21
- ldrb r0, [r0]
- str r2, [sp, 0xC]
- adds r5, r1, 0
- ldr r1, [sp, 0x8]
- cmp r0, r1
- beq _0801EE5A
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- bne _0801EE6C
-_0801EE5A:
- ldr r4, _0801EE9C @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- str r0, [r4]
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0801EE6C:
- movs r0, 0x58
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1A
- bne _0801EEA0
- ldr r3, [sp, 0x8]
- cmp r3, 0x4
- bne _0801EEA0
- movs r1, 0x9
- mov r0, sp
- ldrb r0, [r0]
- orrs r0, r1
- mov r1, sp
- strb r0, [r1]
- b _0801EF50
- .align 2, 0
-_0801EE94: .4byte gBattleMoves
-_0801EE98: .4byte gBattleMons
-_0801EE9C: .4byte gBattleMoveDamage
-_0801EEA0:
- ldr r1, _0801EEBC @ =gUnknown_824F050
- mov r2, r8
- adds r0, r2, r1
- ldrb r0, [r0]
- adds r2, r1, 0
- cmp r0, 0xFF
- beq _0801EF50
- cmp r0, 0xFE
- bne _0801EEC6
- movs r0, 0x58
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- b _0801EF3E
- .align 2, 0
-_0801EEBC: .4byte gUnknown_824F050
-_0801EEC0:
- movs r0, 0x3
- add r8, r0
- b _0801EF28
-_0801EEC6:
- ldr r7, _0801EFC0 @ =gUnknown_824F050
- mov r1, r8
- adds r0, r1, r7
- ldrb r0, [r0]
- ldr r2, [sp, 0x8]
- cmp r0, r2
- bne _0801EF20
- adds r1, 0x1
- adds r1, r7
- ldr r2, _0801EFC4 @ =gBattleMons
- movs r0, 0x58
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- adds r5, r0, r2
- adds r6, r5, 0
- adds r6, 0x21
- ldrb r4, [r1]
- ldrb r0, [r6]
- cmp r4, r0
- bne _0801EF00
- mov r0, r8
- adds r0, 0x2
- adds r0, r7
- ldrb r0, [r0]
- mov r1, r10
- mov r2, sp
- bl ModulateDmgByType2
-_0801EF00:
- adds r0, r5, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r4, r0
- bne _0801EF20
- ldrb r0, [r6]
- cmp r0, r4
- beq _0801EF20
- mov r0, r8
- adds r0, 0x2
- adds r0, r7
- ldrb r0, [r0]
- mov r1, r10
- mov r2, sp
- bl ModulateDmgByType2
-_0801EF20:
- movs r1, 0x3
- add r8, r1
- ldr r5, _0801EFC4 @ =gBattleMons
- ldr r2, _0801EFC0 @ =gUnknown_824F050
-_0801EF28:
- mov r3, r8
- adds r0, r3, r2
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _0801EF50
- cmp r0, 0xFE
- bne _0801EEC6
- movs r0, 0x58
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
-_0801EF3E:
- adds r1, r5, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801EEC0
-_0801EF50:
- movs r0, 0x58
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x19
- bne _0801EFAA
- mov r0, sp
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801EFAA
- ldr r0, [sp, 0x4]
- mov r1, r10
- bl AttacksThisTurn
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x2
- bne _0801EFAA
- mov r0, sp
- ldrb r3, [r0]
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _0801EF92
- movs r0, 0x6
- ands r0, r3
- cmp r0, 0x6
- bne _0801EFAA
-_0801EF92:
- ldr r0, _0801EFC8 @ =gBattleMoves
- ldr r1, [sp, 0xC]
- add r1, r10
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801EFAA
- mov r0, sp
- movs r1, 0x1
- orrs r1, r3
- strb r1, [r0]
-_0801EFAA:
- mov r0, sp
- ldrb r0, [r0]
-_0801EFAE:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801EFC0: .4byte gUnknown_824F050
-_0801EFC4: .4byte gBattleMons
-_0801EFC8: .4byte gBattleMoves
- thumb_func_end TypeCalc
-
- thumb_func_start AI_TypeCalc
-AI_TypeCalc: @ 801EFCC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x4]
- movs r7, 0
- mov r0, sp
- strb r7, [r0]
- ldr r2, _0801F008 @ =gBaseStats
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x6]
- mov r9, r1
- ldrb r0, [r0, 0x7]
- mov r8, r0
- cmp r6, 0xA5
- bne _0801F00C
- movs r0, 0
- b _0801F0B0
- .align 2, 0
-_0801F008: .4byte gBaseStats
-_0801F00C:
- ldr r2, _0801F030 @ =gBattleMoves
- lsls r1, r6, 1
- adds r0, r1, r6
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- mov r10, r0
- str r1, [sp, 0x8]
- ldr r3, [sp, 0x4]
- cmp r3, 0x1A
- bne _0801F034
- cmp r0, 0x4
- bne _0801F034
- movs r1, 0x9
- mov r0, sp
- strb r1, [r0]
- b _0801F07A
- .align 2, 0
-_0801F030: .4byte gBattleMoves
-_0801F034:
- ldr r0, _0801F0C0 @ =gUnknown_824F050
- adds r1, r7, r0
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _0801F07A
- adds r4, r1, 0
-_0801F040:
- ldrb r0, [r4]
- cmp r0, 0xFE
- beq _0801F06C
- cmp r0, r10
- bne _0801F06C
- ldrb r5, [r4, 0x1]
- cmp r5, r9
- bne _0801F05A
- ldrb r0, [r4, 0x2]
- adds r1, r6, 0
- mov r2, sp
- bl ModulateDmgByType2
-_0801F05A:
- cmp r5, r8
- bne _0801F06C
- cmp r9, r8
- beq _0801F06C
- ldrb r0, [r4, 0x2]
- adds r1, r6, 0
- mov r2, sp
- bl ModulateDmgByType2
-_0801F06C:
- adds r4, 0x3
- adds r7, 0x3
- ldr r1, _0801F0C0 @ =gUnknown_824F050
- adds r0, r7, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _0801F040
-_0801F07A:
- ldr r3, [sp, 0x4]
- cmp r3, 0x19
- bne _0801F0AC
- mov r0, sp
- ldrb r2, [r0]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0801F094
- movs r0, 0x6
- ands r0, r2
- cmp r0, 0x6
- bne _0801F0AC
-_0801F094:
- ldr r0, _0801F0C4 @ =gBattleMoves
- ldr r3, [sp, 0x8]
- adds r1, r3, r6
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801F0AC
- mov r0, sp
- movs r1, 0x8
- orrs r1, r2
- strb r1, [r0]
-_0801F0AC:
- mov r0, sp
- ldrb r0, [r0]
-_0801F0B0:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801F0C0: .4byte gUnknown_824F050
-_0801F0C4: .4byte gBattleMoves
- thumb_func_end AI_TypeCalc
-
- thumb_func_start Unused_ApplyRandomDmgMultiplier
-Unused_ApplyRandomDmgMultiplier: @ 801F0C8
- push {r4,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x64
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0801F100 @ =gBattleMoveDamage
- ldr r0, [r4]
- cmp r0, 0
- beq _0801F0FA
- muls r0, r1
- str r0, [r4]
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801F0FA
- movs r0, 0x1
- str r0, [r4]
-_0801F0FA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F100: .4byte gBattleMoveDamage
- thumb_func_end Unused_ApplyRandomDmgMultiplier
-
- thumb_func_start atk07_adjustnormaldamage
-atk07_adjustnormaldamage: @ 801F104
- push {r4-r7,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x64
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0801F15C @ =gBattleMoveDamage
- ldr r0, [r4]
- cmp r0, 0
- beq _0801F136
- muls r0, r1
- str r0, [r4]
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801F136
- movs r0, 0x1
- str r0, [r4]
-_0801F136:
- ldr r7, _0801F160 @ =gBattleMons
- ldr r6, _0801F164 @ =gBattlerTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0801F16C
- ldr r1, _0801F168 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _0801F186
- .align 2, 0
-_0801F15C: .4byte gBattleMoveDamage
-_0801F160: .4byte gBattleMons
-_0801F164: .4byte gBattlerTarget
-_0801F168: .4byte gEnigmaBerries
-_0801F16C:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_0801F186:
- ldr r1, _0801F248 @ =gPotentialItemEffectBattler
- ldr r5, _0801F24C @ =gBattlerTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _0801F1C4
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _0801F1C4
- ldrb r0, [r5]
- movs r1, 0x27
- bl sub_80C7208
- ldr r2, _0801F250 @ =gUnknown_2023ECC
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_0801F1C4:
- ldr r2, _0801F254 @ =gBattleMons
- ldr r3, _0801F24C @ =gBattlerTarget
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 17
- ands r1, r0
- adds r5, r2, 0
- cmp r1, 0
- bne _0801F294
- ldr r2, _0801F258 @ =gBattleMoves
- ldr r0, _0801F25C @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x65
- beq _0801F216
- ldr r0, _0801F260 @ =gUnknown_2023E8C
- lsls r1, r4, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _0801F216
- ldr r0, _0801F250 @ =gUnknown_2023ECC
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801F294
-_0801F216:
- ldrb r0, [r3]
- movs r4, 0x58
- muls r0, r4
- adds r0, r5
- ldrh r1, [r0, 0x28]
- ldr r2, _0801F264 @ =gBattleMoveDamage
- ldr r0, [r2]
- cmp r1, r0
- bgt _0801F294
- subs r0, r1, 0x1
- str r0, [r2]
- ldr r1, _0801F260 @ =gUnknown_2023E8C
- ldrb r3, [r3]
- lsls r0, r3, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- bge _0801F26C
- ldr r0, _0801F268 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _0801F294
- .align 2, 0
-_0801F248: .4byte gPotentialItemEffectBattler
-_0801F24C: .4byte gBattlerTarget
-_0801F250: .4byte gUnknown_2023ECC
-_0801F254: .4byte gBattleMons
-_0801F258: .4byte gBattleMoves
-_0801F25C: .4byte gCurrentMove
-_0801F260: .4byte gUnknown_2023E8C
-_0801F264: .4byte gBattleMoveDamage
-_0801F268: .4byte gMoveResultFlags
-_0801F26C:
- ldr r0, _0801F2A4 @ =gUnknown_2023ECC
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801F294
- ldr r2, _0801F2A8 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801F2AC @ =gUnknown_2023D68
- adds r0, r3, 0
- muls r0, r4
- adds r0, r5
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
-_0801F294:
- ldr r1, _0801F2B0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F2A4: .4byte gUnknown_2023ECC
-_0801F2A8: .4byte gMoveResultFlags
-_0801F2AC: .4byte gUnknown_2023D68
-_0801F2B0: .4byte gUnknown_2023D74
- thumb_func_end atk07_adjustnormaldamage
-
- thumb_func_start atk08_adjustnormaldamage2
-atk08_adjustnormaldamage2: @ 801F2B4
- push {r4-r7,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x64
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0801F30C @ =gBattleMoveDamage
- ldr r0, [r4]
- cmp r0, 0
- beq _0801F2E6
- muls r0, r1
- str r0, [r4]
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801F2E6
- movs r0, 0x1
- str r0, [r4]
-_0801F2E6:
- ldr r7, _0801F310 @ =gBattleMons
- ldr r6, _0801F314 @ =gBattlerTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0801F31C
- ldr r1, _0801F318 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _0801F336
- .align 2, 0
-_0801F30C: .4byte gBattleMoveDamage
-_0801F310: .4byte gBattleMons
-_0801F314: .4byte gBattlerTarget
-_0801F318: .4byte gEnigmaBerries
-_0801F31C:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_0801F336:
- ldr r1, _0801F3DC @ =gPotentialItemEffectBattler
- ldr r5, _0801F3E0 @ =gBattlerTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _0801F374
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _0801F374
- ldrb r0, [r5]
- movs r1, 0x27
- bl sub_80C7208
- ldr r2, _0801F3E4 @ =gUnknown_2023ECC
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_0801F374:
- ldr r4, _0801F3E8 @ =gBattleMons
- ldr r6, _0801F3E0 @ =gBattlerTarget
- ldrb r2, [r6]
- movs r7, 0x58
- adds r3, r2, 0
- muls r3, r7
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- bne _0801F420
- ldr r5, _0801F3EC @ =gUnknown_2023E8C
- lsls r0, r2, 4
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- blt _0801F3B2
- ldr r0, _0801F3E4 @ =gUnknown_2023ECC
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801F420
-_0801F3B2:
- adds r0, r3, r4
- ldrh r1, [r0, 0x28]
- ldr r2, _0801F3F0 @ =gBattleMoveDamage
- ldr r0, [r2]
- cmp r1, r0
- bgt _0801F420
- subs r0, r1, 0x1
- str r0, [r2]
- ldrb r3, [r6]
- lsls r0, r3, 4
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- bge _0801F3F8
- ldr r0, _0801F3F4 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _0801F420
- .align 2, 0
-_0801F3DC: .4byte gPotentialItemEffectBattler
-_0801F3E0: .4byte gBattlerTarget
-_0801F3E4: .4byte gUnknown_2023ECC
-_0801F3E8: .4byte gBattleMons
-_0801F3EC: .4byte gUnknown_2023E8C
-_0801F3F0: .4byte gBattleMoveDamage
-_0801F3F4: .4byte gMoveResultFlags
-_0801F3F8:
- ldr r0, _0801F430 @ =gUnknown_2023ECC
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801F420
- ldr r2, _0801F434 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801F438 @ =gUnknown_2023D68
- adds r0, r3, 0
- muls r0, r7
- adds r0, r4
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
-_0801F420:
- ldr r1, _0801F43C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F430: .4byte gUnknown_2023ECC
-_0801F434: .4byte gMoveResultFlags
-_0801F438: .4byte gUnknown_2023D68
-_0801F43C: .4byte gUnknown_2023D74
- thumb_func_end atk08_adjustnormaldamage2
-
- thumb_func_start atk09_attackanimation
-atk09_attackanimation: @ 801F440
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0xC
- ldr r0, _0801F488 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _0801F452
- b _0801F572
-_0801F452:
- ldr r0, _0801F48C @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- ldr r3, _0801F490 @ =gCurrentMove
- cmp r0, 0
- beq _0801F4A0
- ldrh r0, [r3]
- cmp r0, 0x90
- beq _0801F4A0
- cmp r0, 0xA4
- beq _0801F4A0
- ldr r4, _0801F494 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _0801F498 @ =gUnknown_81D89F1
- str r0, [r4]
- ldr r1, _0801F49C @ =gBattleScripting
- ldrb r0, [r1, 0x18]
- adds r0, 0x1
- strb r0, [r1, 0x18]
- ldrb r0, [r1, 0x19]
- adds r0, 0x1
- strb r0, [r1, 0x19]
- b _0801F572
- .align 2, 0
-_0801F488: .4byte gUnknown_2023BC8
-_0801F48C: .4byte gUnknown_2023DD0
-_0801F490: .4byte gCurrentMove
-_0801F494: .4byte gUnknown_2023D74
-_0801F498: .4byte gUnknown_81D89F1
-_0801F49C: .4byte gBattleScripting
-_0801F4A0:
- ldr r2, _0801F53C @ =gBattleMoves
- ldrh r1, [r3]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x6]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0801F4C6
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0801F4C6
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0801F4CE
-_0801F4C6:
- ldr r0, _0801F540 @ =gBattleScripting
- ldrb r0, [r0, 0x19]
- cmp r0, 0
- bne _0801F530
-_0801F4CE:
- ldr r0, _0801F544 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801F564
- ldr r1, _0801F548 @ =gActiveBattler
- ldr r0, _0801F54C @ =sBattler_AI
- mov r8, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrh r1, [r3]
- ldr r6, _0801F540 @ =gBattleScripting
- ldrb r2, [r6, 0x18]
- ldr r0, _0801F550 @ =gBattleMovePower
- ldrh r3, [r0]
- ldr r0, _0801F554 @ =gBattleMoveDamage
- ldr r0, [r0]
- str r0, [sp]
- ldr r5, _0801F558 @ =gBattleMons
- mov r0, r8
- ldrb r4, [r0]
- movs r0, 0x58
- muls r0, r4
- adds r0, r5
- adds r0, 0x2B
- ldrb r0, [r0]
- str r0, [sp, 0x4]
- mov r0, r8
- ldrb r4, [r0]
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- ldr r4, _0801F55C @ =gDisableStructs
- adds r0, r4
- str r0, [sp, 0x8]
- movs r0, 0
- bl EmitMoveAnimation
- ldrb r0, [r6, 0x18]
- adds r0, 0x1
- strb r0, [r6, 0x18]
- ldrb r0, [r6, 0x19]
- adds r0, 0x1
- strb r0, [r6, 0x19]
- mov r1, r8
- ldrb r0, [r1]
- bl MarkBufferBankForExecution
-_0801F530:
- ldr r1, _0801F560 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- b _0801F572
- .align 2, 0
-_0801F53C: .4byte gBattleMoves
-_0801F540: .4byte gBattleScripting
-_0801F544: .4byte gMoveResultFlags
-_0801F548: .4byte gActiveBattler
-_0801F54C: .4byte sBattler_AI
-_0801F550: .4byte gBattleMovePower
-_0801F554: .4byte gBattleMoveDamage
-_0801F558: .4byte gBattleMons
-_0801F55C: .4byte gDisableStructs
-_0801F560: .4byte gUnknown_2023D74
-_0801F564:
- ldr r4, _0801F580 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _0801F584 @ =gUnknown_81D89F1
- str r0, [r4]
-_0801F572:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F580: .4byte gUnknown_2023D74
-_0801F584: .4byte gUnknown_81D89F1
- thumb_func_end atk09_attackanimation
-
- thumb_func_start sub_801F588
-sub_801F588: @ 801F588
- push {lr}
- ldr r0, _0801F5A0 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _0801F59A
- ldr r1, _0801F5A4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801F59A:
- pop {r0}
- bx r0
- .align 2, 0
-_0801F5A0: .4byte gUnknown_2023BC8
-_0801F5A4: .4byte gUnknown_2023D74
- thumb_func_end sub_801F588
-
- thumb_func_start atk0B_healthbarupdate
-atk0B_healthbarupdate: @ 801F5A8
- push {r4,lr}
- ldr r0, _0801F60C @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _0801F66A
- ldr r0, _0801F610 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801F662
- ldr r0, _0801F614 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r2, _0801F618 @ =gActiveBattler
- strb r0, [r2]
- ldr r1, _0801F61C @ =gBattleMons
- ldrb r2, [r2]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _0801F628
- ldr r0, _0801F620 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- beq _0801F628
- ldr r0, _0801F624 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 1
- ands r0, r1
- cmp r0, 0
- bne _0801F628
- movs r0, 0x80
- adds r1, r2, 0
- bl PrepareStringBattle
- b _0801F662
- .align 2, 0
-_0801F60C: .4byte gUnknown_2023BC8
-_0801F610: .4byte gMoveResultFlags
-_0801F614: .4byte gUnknown_2023D74
-_0801F618: .4byte gActiveBattler
-_0801F61C: .4byte gBattleMons
-_0801F620: .4byte gDisableStructs
-_0801F624: .4byte gUnknown_2023DD0
-_0801F628:
- ldr r0, _0801F670 @ =gBattleMoveDamage
- ldr r0, [r0]
- ldr r1, _0801F674 @ =0x00002710
- cmp r0, r1
- bgt _0801F636
- lsls r0, 16
- lsrs r1, r0, 16
-_0801F636:
- movs r0, 0
- bl EmitHealthBarUpdate
- ldr r4, _0801F678 @ =gActiveBattler
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0801F662
- ldr r0, _0801F670 @ =gBattleMoveDamage
- ldr r0, [r0]
- cmp r0, 0
- ble _0801F662
- ldr r0, _0801F67C @ =gBattleResults
- ldrb r1, [r0, 0x5]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x5]
-_0801F662:
- ldr r1, _0801F680 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_0801F66A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F670: .4byte gBattleMoveDamage
-_0801F674: .4byte 0x00002710
-_0801F678: .4byte gActiveBattler
-_0801F67C: .4byte gBattleResults
-_0801F680: .4byte gUnknown_2023D74
- thumb_func_end atk0B_healthbarupdate
-
- thumb_func_start atk0C_datahpupdate
-atk0C_datahpupdate: @ 801F684
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r0, _0801F6AC @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _0801F692
- b _0801FA62
-_0801F692:
- ldr r0, _0801F6B0 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r1, [r0, 0x13]
- cmp r1, 0
- beq _0801F6B4
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0801F6B4
- movs r6, 0x3F
- ands r6, r1
- b _0801F6C4
- .align 2, 0
-_0801F6AC: .4byte gUnknown_2023BC8
-_0801F6B0: .4byte gBattleStruct
-_0801F6B4:
- ldr r2, _0801F750 @ =gBattleMoves
- ldr r0, _0801F754 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r6, [r0, 0x2]
-_0801F6C4:
- ldr r0, _0801F758 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801F6D2
- b _0801FA34
-_0801F6D2:
- ldr r0, _0801F75C @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r7, _0801F760 @ =gActiveBattler
- strb r0, [r7]
- ldr r1, _0801F764 @ =gBattleMons
- ldrb r2, [r7]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _0801F7E8
- ldr r0, _0801F768 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r4, r1, r0
- ldrb r1, [r4, 0xA]
- mov r12, r0
- cmp r1, 0
- beq _0801F7E8
- ldr r0, _0801F76C @ =gUnknown_2023DD0
- ldr r3, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r3, r0
- cmp r3, 0
- bne _0801F7E8
- adds r5, r1, 0
- ldr r6, _0801F770 @ =gBattleMoveDamage
- ldr r4, [r6]
- cmp r5, r4
- blt _0801F77C
- ldr r0, _0801F774 @ =gUnknown_2023ECC
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _0801F736
- str r4, [r1]
-_0801F736:
- ldrb r0, [r7]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- add r1, r12
- ldr r2, [r6]
- ldrb r0, [r1, 0xA]
- subs r0, r2
- strb r0, [r1, 0xA]
- ldr r1, _0801F778 @ =gUnknown_2023D54
- ldr r0, [r6]
- str r0, [r1]
- b _0801F7AC
- .align 2, 0
-_0801F750: .4byte gBattleMoves
-_0801F754: .4byte gCurrentMove
-_0801F758: .4byte gMoveResultFlags
-_0801F75C: .4byte gUnknown_2023D74
-_0801F760: .4byte gActiveBattler
-_0801F764: .4byte gBattleMons
-_0801F768: .4byte gDisableStructs
-_0801F76C: .4byte gUnknown_2023DD0
-_0801F770: .4byte gBattleMoveDamage
-_0801F774: .4byte gUnknown_2023ECC
-_0801F778: .4byte gUnknown_2023D54
-_0801F77C:
- ldr r0, _0801F7D4 @ =gUnknown_2023ECC
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _0801F790
- str r5, [r1]
-_0801F790:
- ldr r2, _0801F7D8 @ =gUnknown_2023D54
- ldrb r1, [r7]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r0, [r0, 0xA]
- str r0, [r2]
- ldrb r1, [r7]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- strb r3, [r0, 0xA]
-_0801F7AC:
- ldr r0, _0801F7DC @ =gActiveBattler
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r0, [r0, 0xA]
- cmp r0, 0
- beq _0801F7C0
- b _0801FA5A
-_0801F7C0:
- ldr r4, _0801F7E0 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- bl BattleScriptPushCursor
- ldr r0, _0801F7E4 @ =gUnknown_81D9526
- str r0, [r4]
- b _0801FA62
- .align 2, 0
-_0801F7D4: .4byte gUnknown_2023ECC
-_0801F7D8: .4byte gUnknown_2023D54
-_0801F7DC: .4byte gActiveBattler
-_0801F7E0: .4byte gUnknown_2023D74
-_0801F7E4: .4byte gUnknown_81D9526
-_0801F7E8:
- ldr r0, _0801F828 @ =gUnknown_2023DD0
- ldr r2, [r0]
- ldr r1, _0801F82C @ =0xfffffeff
- ands r2, r1
- str r2, [r0]
- ldr r1, _0801F830 @ =gBattleMoveDamage
- ldr r5, [r1]
- mov r12, r0
- adds r7, r1, 0
- cmp r5, 0
- bge _0801F83C
- ldr r4, _0801F834 @ =gBattleMons
- ldr r2, _0801F838 @ =gActiveBattler
- ldrb r0, [r2]
- movs r3, 0x58
- adds r1, r0, 0
- muls r1, r3
- adds r1, r4
- ldrh r0, [r1, 0x28]
- subs r0, r5
- strh r0, [r1, 0x28]
- ldrb r0, [r2]
- muls r0, r3
- adds r1, r0, r4
- ldrh r3, [r1, 0x2C]
- ldrh r0, [r1, 0x28]
- adds r5, r2, 0
- cmp r0, r3
- bhi _0801F824
- b _0801F9FA
-_0801F824:
- strh r3, [r1, 0x28]
- b _0801F9FA
- .align 2, 0
-_0801F828: .4byte gUnknown_2023DD0
-_0801F82C: .4byte 0xfffffeff
-_0801F830: .4byte gBattleMoveDamage
-_0801F834: .4byte gBattleMons
-_0801F838: .4byte gActiveBattler
-_0801F83C:
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- beq _0801F858
- movs r0, 0x21
- negs r0, r0
- ands r2, r0
- mov r0, r12
- str r2, [r0]
- ldr r5, _0801F854 @ =gActiveBattler
- b _0801F8A0
- .align 2, 0
-_0801F854: .4byte gActiveBattler
-_0801F858:
- ldr r0, _0801F880 @ =gUnknown_2023D58
- ldr r2, _0801F884 @ =gActiveBattler
- ldrb r1, [r2]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- adds r0, r5
- str r0, [r1]
- ldr r0, _0801F888 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- adds r5, r2, 0
- cmp r0, 0
- bne _0801F894
- ldr r1, _0801F88C @ =gUnknown_2023DD8
- ldrb r0, [r5]
- adds r0, r1
- ldr r1, _0801F890 @ =sBattler_AI
- b _0801F89C
- .align 2, 0
-_0801F880: .4byte gUnknown_2023D58
-_0801F884: .4byte gActiveBattler
-_0801F888: .4byte gUnknown_2023D74
-_0801F88C: .4byte gUnknown_2023DD8
-_0801F890: .4byte sBattler_AI
-_0801F894:
- ldr r1, _0801F8C0 @ =gUnknown_2023DD8
- ldrb r0, [r5]
- adds r0, r1
- ldr r1, _0801F8C4 @ =gBattlerTarget
-_0801F89C:
- ldrb r1, [r1]
- strb r1, [r0]
-_0801F8A0:
- ldr r4, _0801F8C8 @ =gBattleMons
- ldrb r0, [r5]
- movs r3, 0x58
- muls r0, r3
- adds r2, r0, r4
- ldrh r0, [r2, 0x28]
- ldr r1, [r7]
- cmp r0, r1
- ble _0801F8D0
- subs r0, r1
- strh r0, [r2, 0x28]
- ldr r0, _0801F8CC @ =gUnknown_2023D54
- str r1, [r0]
- adds r7, r0, 0
- b _0801F8E0
- .align 2, 0
-_0801F8C0: .4byte gUnknown_2023DD8
-_0801F8C4: .4byte gBattlerTarget
-_0801F8C8: .4byte gBattleMons
-_0801F8CC: .4byte gUnknown_2023D54
-_0801F8D0:
- ldr r2, _0801F954 @ =gUnknown_2023D54
- str r0, [r2]
- ldrb r0, [r5]
- muls r0, r3
- adds r0, r4
- movs r1, 0
- strh r1, [r0, 0x28]
- adds r7, r2, 0
-_0801F8E0:
- ldr r2, _0801F958 @ =gUnknown_2023ECC
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r1, r2, 0x4
- adds r3, r0, r1
- ldr r0, [r3]
- adds r4, r2, 0
- cmp r0, 0
- bne _0801F908
- mov r1, r12
- ldr r0, [r1]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- cmp r0, 0
- bne _0801F908
- ldr r0, [r7]
- str r0, [r3]
-_0801F908:
- cmp r6, 0x8
- bhi _0801F990
- mov r1, r12
- ldr r0, [r1]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- cmp r0, 0
- bne _0801F98C
- ldr r0, _0801F95C @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xDC
- beq _0801F98C
- ldr r3, _0801F960 @ =gUnknown_2023E8C
- ldrb r0, [r5]
- lsls r0, 4
- adds r1, r3, 0x4
- adds r0, r1
- ldr r2, [r7]
- str r2, [r0]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x8
- adds r0, r1
- str r2, [r0]
- ldr r0, _0801F964 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _0801F96C
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801F968 @ =sBattler_AI
- b _0801F974
- .align 2, 0
-_0801F954: .4byte gUnknown_2023D54
-_0801F958: .4byte gUnknown_2023ECC
-_0801F95C: .4byte gCurrentMove
-_0801F960: .4byte gUnknown_2023E8C
-_0801F964: .4byte gUnknown_2023D74
-_0801F968: .4byte sBattler_AI
-_0801F96C:
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801F988 @ =gBattlerTarget
-_0801F974:
- ldrb r1, [r2]
- strb r1, [r0, 0xC]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r2]
- strb r1, [r0, 0x10]
- b _0801F9FA
- .align 2, 0
-_0801F988: .4byte gBattlerTarget
-_0801F98C:
- cmp r6, 0x8
- bls _0801F9FA
-_0801F990:
- mov r1, r12
- ldr r0, [r1]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- cmp r0, 0
- bne _0801F9FA
- ldr r3, _0801F9D4 @ =gUnknown_2023E8C
- ldrb r0, [r5]
- lsls r0, 4
- adds r1, r3, 0
- adds r1, 0x8
- adds r0, r1
- ldr r2, [r7]
- str r2, [r0]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0xC
- adds r0, r1
- str r2, [r0]
- ldr r0, _0801F9D8 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _0801F9E0
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801F9DC @ =sBattler_AI
- b _0801F9E8
- .align 2, 0
-_0801F9D4: .4byte gUnknown_2023E8C
-_0801F9D8: .4byte gUnknown_2023D74
-_0801F9DC: .4byte sBattler_AI
-_0801F9E0:
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801FA28 @ =gBattlerTarget
-_0801F9E8:
- ldrb r1, [r2]
- strb r1, [r0, 0xD]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r2]
- strb r1, [r0, 0x11]
-_0801F9FA:
- mov r1, r12
- ldr r0, [r1]
- ldr r1, _0801FA2C @ =0xffefffff
- ands r0, r1
- mov r1, r12
- str r0, [r1]
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _0801FA30 @ =gUnknown_2023C0C
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2A
- movs r2, 0
- movs r3, 0x2
- bl EmitSetMonData
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- b _0801FA5A
- .align 2, 0
-_0801FA28: .4byte gBattlerTarget
-_0801FA2C: .4byte 0xffefffff
-_0801FA30: .4byte gUnknown_2023C0C
-_0801FA34:
- ldr r0, _0801FA6C @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r1, _0801FA70 @ =gActiveBattler
- strb r0, [r1]
- ldr r2, _0801FA74 @ =gUnknown_2023ECC
- ldrb r1, [r1]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x4
- adds r1, r0, r2
- ldr r0, [r1]
- cmp r0, 0
- bne _0801FA5A
- ldr r0, _0801FA78 @ =0x0000ffff
- str r0, [r1]
-_0801FA5A:
- ldr r1, _0801FA6C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_0801FA62:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FA6C: .4byte gUnknown_2023D74
-_0801FA70: .4byte gActiveBattler
-_0801FA74: .4byte gUnknown_2023ECC
-_0801FA78: .4byte 0x0000ffff
- thumb_func_end atk0C_datahpupdate
-
- thumb_func_start atk0D_critmessage
-atk0D_critmessage: @ 801FA7C
- push {lr}
- ldr r0, _0801FAB8 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FAB2
- ldr r0, _0801FABC @ =gCritMultiplier
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0801FAAA
- ldr r0, _0801FAC0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801FAAA
- ldr r0, _0801FAC4 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0xD9
- bl PrepareStringBattle
- ldr r1, _0801FAC8 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x7]
-_0801FAAA:
- ldr r1, _0801FACC @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801FAB2:
- pop {r0}
- bx r0
- .align 2, 0
-_0801FAB8: .4byte gUnknown_2023BC8
-_0801FABC: .4byte gCritMultiplier
-_0801FAC0: .4byte gMoveResultFlags
-_0801FAC4: .4byte sBattler_AI
-_0801FAC8: .4byte gUnknown_2023E82
-_0801FACC: .4byte gUnknown_2023D74
- thumb_func_end atk0D_critmessage
-
- thumb_func_start atk0E_effectivenesssound
-atk0E_effectivenesssound: @ 801FAD0
- push {r4,lr}
- ldr r0, _0801FB08 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FB90
- ldr r4, _0801FB0C @ =gActiveBattler
- ldr r0, _0801FB10 @ =gBattlerTarget
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r1, _0801FB14 @ =gMoveResultFlags
- ldrb r2, [r1]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0801FB88
- movs r0, 0xFE
- ands r0, r2
- cmp r0, 0x10
- beq _0801FB42
- cmp r0, 0x10
- bgt _0801FB1E
- cmp r0, 0x4
- beq _0801FB32
- cmp r0, 0x4
- bgt _0801FB18
- cmp r0, 0x2
- beq _0801FB2C
- b _0801FB42
- .align 2, 0
-_0801FB08: .4byte gUnknown_2023BC8
-_0801FB0C: .4byte gActiveBattler
-_0801FB10: .4byte gBattlerTarget
-_0801FB14: .4byte gMoveResultFlags
-_0801FB18:
- cmp r0, 0x8
- beq _0801FB88
- b _0801FB42
-_0801FB1E:
- cmp r0, 0x40
- beq _0801FB42
- cmp r0, 0x40
- bgt _0801FB42
- cmp r0, 0x20
- beq _0801FB88
- b _0801FB42
-_0801FB2C:
- movs r0, 0
- movs r1, 0xE
- b _0801FB36
-_0801FB32:
- movs r0, 0
- movs r1, 0xC
-_0801FB36:
- bl EmitPlaySE
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0801FB88
-_0801FB42:
- ldrb r1, [r1]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801FB52
- movs r0, 0
- movs r1, 0xE
- b _0801FB5E
-_0801FB52:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801FB70
- movs r0, 0
- movs r1, 0xC
-_0801FB5E:
- bl EmitPlaySE
- ldr r0, _0801FB6C @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- b _0801FB88
- .align 2, 0
-_0801FB6C: .4byte gActiveBattler
-_0801FB70:
- movs r0, 0x28
- ands r0, r1
- cmp r0, 0
- bne _0801FB88
- movs r0, 0
- movs r1, 0xD
- bl EmitPlaySE
- ldr r0, _0801FB98 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
-_0801FB88:
- ldr r1, _0801FB9C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801FB90:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FB98: .4byte gActiveBattler
-_0801FB9C: .4byte gUnknown_2023D74
- thumb_func_end atk0E_effectivenesssound
-
- thumb_func_start atk0F_resultmessage
-atk0F_resultmessage: @ 801FBA0
- push {r4-r7,lr}
- movs r3, 0
- ldr r0, _0801FBDC @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _0801FBAE
- b _0801FD40
-_0801FBAE:
- ldr r1, _0801FBE0 @ =gMoveResultFlags
- ldrb r2, [r1]
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r2
- adds r6, r1, 0
- ldr r7, _0801FBE4 @ =gUnknown_2023E82
- cmp r0, 0
- beq _0801FBEC
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _0801FBCE
- ldrb r0, [r7, 0x6]
- cmp r0, 0x2
- bls _0801FBEC
-_0801FBCE:
- ldr r1, _0801FBE8 @ =gUnknown_83FE514
- ldrb r0, [r7, 0x6]
- lsls r0, 1
- adds r0, r1
- ldrh r3, [r0]
- strb r4, [r7, 0x7]
- b _0801FD2A
- .align 2, 0
-_0801FBDC: .4byte gUnknown_2023BC8
-_0801FBE0: .4byte gMoveResultFlags
-_0801FBE4: .4byte gUnknown_2023E82
-_0801FBE8: .4byte gUnknown_83FE514
-_0801FBEC:
- movs r0, 0x1
- strb r0, [r7, 0x7]
- ldrb r5, [r6]
- movs r0, 0xFE
- ands r0, r5
- cmp r0, 0x10
- beq _0801FC30
- cmp r0, 0x10
- bgt _0801FC12
- cmp r0, 0x4
- beq _0801FC2C
- cmp r0, 0x4
- bgt _0801FC0C
- cmp r0, 0x2
- beq _0801FC28
- b _0801FC78
-_0801FC0C:
- cmp r0, 0x8
- beq _0801FC84
- b _0801FC78
-_0801FC12:
- cmp r0, 0x40
- beq _0801FC34
- cmp r0, 0x40
- bgt _0801FC22
- cmp r0, 0x20
- bne _0801FC20
- b _0801FD24
-_0801FC20:
- b _0801FC78
-_0801FC22:
- cmp r0, 0x80
- beq _0801FC38
- b _0801FC78
-_0801FC28:
- movs r3, 0xDE
- b _0801FD2E
-_0801FC2C:
- movs r3, 0xDD
- b _0801FD2E
-_0801FC30:
- movs r3, 0xDA
- b _0801FD2E
-_0801FC34:
- movs r3, 0x99
- b _0801FD2E
-_0801FC38:
- ldr r4, _0801FC60 @ =gUnknown_2023D68
- ldr r2, _0801FC64 @ =gBattleMons
- ldr r3, _0801FC68 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- ldr r1, _0801FC6C @ =gPotentialItemEffectBattler
- ldrb r0, [r3]
- strb r0, [r1]
- movs r0, 0x3F
- ands r0, r5
- strb r0, [r6]
- bl BattleScriptPushCursor
- ldr r1, _0801FC70 @ =gUnknown_2023D74
- ldr r0, _0801FC74 @ =gUnknown_81D9641
- b _0801FD3E
- .align 2, 0
-_0801FC60: .4byte gUnknown_2023D68
-_0801FC64: .4byte gBattleMons
-_0801FC68: .4byte gBattlerTarget
-_0801FC6C: .4byte gPotentialItemEffectBattler
-_0801FC70: .4byte gUnknown_2023D74
-_0801FC74: .4byte gUnknown_81D9641
-_0801FC78:
- adds r2, r6, 0
- ldrb r5, [r2]
- movs r0, 0x8
- ands r0, r5
- cmp r0, 0
- beq _0801FC88
-_0801FC84:
- movs r3, 0x1B
- b _0801FD2E
-_0801FC88:
- movs r0, 0x10
- ands r0, r5
- cmp r0, 0
- beq _0801FCB0
- movs r0, 0xEF
- ands r0, r5
- movs r1, 0xFD
- ands r0, r1
- movs r1, 0xFB
- ands r0, r1
- strb r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801FCA8 @ =gUnknown_2023D74
- ldr r0, _0801FCAC @ =gUnknown_81D8FE4
- b _0801FD3E
- .align 2, 0
-_0801FCA8: .4byte gUnknown_2023D74
-_0801FCAC: .4byte gUnknown_81D8FE4
-_0801FCB0:
- movs r0, 0x40
- ands r0, r5
- cmp r0, 0
- beq _0801FCD0
- movs r0, 0x3F
- ands r0, r5
- strb r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801FCC8 @ =gUnknown_2023D74
- ldr r0, _0801FCCC @ =gUnknown_81D8FDD
- b _0801FD3E
- .align 2, 0
-_0801FCC8: .4byte gUnknown_2023D74
-_0801FCCC: .4byte gUnknown_81D8FDD
-_0801FCD0:
- movs r0, 0x80
- ands r0, r5
- cmp r0, 0
- beq _0801FD18
- ldr r4, _0801FD00 @ =gUnknown_2023D68
- ldr r2, _0801FD04 @ =gBattleMons
- ldr r3, _0801FD08 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- ldr r1, _0801FD0C @ =gPotentialItemEffectBattler
- ldrb r0, [r3]
- strb r0, [r1]
- movs r0, 0x3F
- ands r0, r5
- strb r0, [r6]
- bl BattleScriptPushCursor
- ldr r1, _0801FD10 @ =gUnknown_2023D74
- ldr r0, _0801FD14 @ =gUnknown_81D9641
- b _0801FD3E
- .align 2, 0
-_0801FD00: .4byte gUnknown_2023D68
-_0801FD04: .4byte gBattleMons
-_0801FD08: .4byte gBattlerTarget
-_0801FD0C: .4byte gPotentialItemEffectBattler
-_0801FD10: .4byte gUnknown_2023D74
-_0801FD14: .4byte gUnknown_81D9641
-_0801FD18:
- movs r0, 0x20
- ands r0, r5
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _0801FD28
-_0801FD24:
- movs r3, 0xE5
- b _0801FD2E
-_0801FD28:
- strb r0, [r7, 0x7]
-_0801FD2A:
- cmp r3, 0
- beq _0801FD38
-_0801FD2E:
- adds r0, r3, 0
- ldr r1, _0801FD48 @ =sBattler_AI
- ldrb r1, [r1]
- bl PrepareStringBattle
-_0801FD38:
- ldr r1, _0801FD4C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
-_0801FD3E:
- str r0, [r1]
-_0801FD40:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FD48: .4byte sBattler_AI
-_0801FD4C: .4byte gUnknown_2023D74
- thumb_func_end atk0F_resultmessage
-
- thumb_func_start atk10_printstring
-atk10_printstring: @ 801FD50
- push {r4,lr}
- ldr r0, _0801FD80 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FD7A
- ldr r4, _0801FD84 @ =gUnknown_2023D74
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- ldrb r1, [r1, 0x2]
- lsls r1, 8
- orrs r0, r1
- ldr r1, _0801FD88 @ =sBattler_AI
- ldrb r1, [r1]
- bl PrepareStringBattle
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- ldr r1, _0801FD8C @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x7]
-_0801FD7A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FD80: .4byte gUnknown_2023BC8
-_0801FD84: .4byte gUnknown_2023D74
-_0801FD88: .4byte sBattler_AI
-_0801FD8C: .4byte gUnknown_2023E82
- thumb_func_end atk10_printstring
-
- thumb_func_start atk11_printselectionstring
-atk11_printselectionstring: @ 801FD90
- push {r4,r5,lr}
- ldr r5, _0801FDC4 @ =gActiveBattler
- ldr r0, _0801FDC8 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r5]
- ldr r4, _0801FDCC @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0
- bl EmitPrintSelectionString
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- ldr r1, _0801FDD0 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x7]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FDC4: .4byte gActiveBattler
-_0801FDC8: .4byte sBattler_AI
-_0801FDCC: .4byte gUnknown_2023D74
-_0801FDD0: .4byte gUnknown_2023E82
- thumb_func_end atk11_printselectionstring
-
- thumb_func_start atk12_waitmessage
-atk12_waitmessage: @ 801FDD4
- push {r4-r6,lr}
- ldr r0, _0801FDF0 @ =gUnknown_2023BC8
- ldr r4, [r0]
- cmp r4, 0
- bne _0801FE22
- ldr r6, _0801FDF4 @ =gUnknown_2023E82
- ldrb r0, [r6, 0x7]
- cmp r0, 0
- bne _0801FDFC
- ldr r1, _0801FDF8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x3
- str r0, [r1]
- b _0801FE22
- .align 2, 0
-_0801FDF0: .4byte gUnknown_2023BC8
-_0801FDF4: .4byte gUnknown_2023E82
-_0801FDF8: .4byte gUnknown_2023D74
-_0801FDFC:
- ldr r5, _0801FE28 @ =gUnknown_2023D74
- ldr r2, [r5]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldr r3, _0801FE2C @ =gUnknown_2023E7C
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r1
- bcc _0801FE22
- movs r1, 0
- strh r4, [r3]
- adds r0, r2, 0x3
- str r0, [r5]
- strb r1, [r6, 0x7]
-_0801FE22:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FE28: .4byte gUnknown_2023D74
-_0801FE2C: .4byte gUnknown_2023E7C
- thumb_func_end atk12_waitmessage
-
- thumb_func_start atk13_printfromtable
-atk13_printfromtable: @ 801FE30
- push {r4,r5,lr}
- ldr r0, _0801FE74 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FE6E
- ldr r4, _0801FE78 @ =gUnknown_2023D74
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- ldr r5, _0801FE7C @ =gUnknown_2023E82
- ldrb r0, [r5, 0x5]
- lsls r0, 1
- adds r1, r0
- ldrh r0, [r1]
- ldr r1, _0801FE80 @ =sBattler_AI
- ldrb r1, [r1]
- bl PrepareStringBattle
- ldr r0, [r4]
- adds r0, 0x5
- str r0, [r4]
- movs r0, 0x1
- strb r0, [r5, 0x7]
-_0801FE6E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FE74: .4byte gUnknown_2023BC8
-_0801FE78: .4byte gUnknown_2023D74
-_0801FE7C: .4byte gUnknown_2023E82
-_0801FE80: .4byte sBattler_AI
- thumb_func_end atk13_printfromtable
-
- thumb_func_start atk14_printselectionstringfromtable
-atk14_printselectionstringfromtable: @ 801FE84
- push {r4-r6,lr}
- ldr r0, _0801FED4 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FECE
- ldr r5, _0801FED8 @ =gUnknown_2023D74
- ldr r2, [r5]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- ldr r6, _0801FEDC @ =gUnknown_2023E82
- ldrb r0, [r6, 0x5]
- lsls r0, 1
- adds r1, r0
- ldr r4, _0801FEE0 @ =gActiveBattler
- ldr r0, _0801FEE4 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r4]
- ldrh r1, [r1]
- movs r0, 0
- bl EmitPrintSelectionString
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x5
- str r0, [r5]
- movs r0, 0x1
- strb r0, [r6, 0x7]
-_0801FECE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FED4: .4byte gUnknown_2023BC8
-_0801FED8: .4byte gUnknown_2023D74
-_0801FEDC: .4byte gUnknown_2023E82
-_0801FEE0: .4byte gActiveBattler
-_0801FEE4: .4byte sBattler_AI
- thumb_func_end atk14_printselectionstringfromtable
-
- thumb_func_start BankGetTurnOrder
-BankGetTurnOrder: @ 801FEE8
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- ldr r0, _0801FF18 @ =gBattlersCount
- ldrb r3, [r0]
- cmp r1, r3
- bge _0801FF0E
- ldr r4, _0801FF1C @ =gUnknown_2023BDE
- ldrb r0, [r4]
- cmp r0, r2
- beq _0801FF0E
-_0801FF00:
- adds r1, 0x1
- cmp r1, r3
- bge _0801FF0E
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r2
- bne _0801FF00
-_0801FF0E:
- lsls r0, r1, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0801FF18: .4byte gBattlersCount
-_0801FF1C: .4byte gUnknown_2023BDE
- thumb_func_end BankGetTurnOrder
-
- thumb_func_start sub_801FF20
-sub_801FF20: @ 801FF20
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- movs r0, 0
- mov r10, r0
- movs r7, 0
- movs r1, 0x1
- str r1, [sp, 0x4]
- ldr r1, _0801FF64 @ =gUnknown_2023E82
- ldrb r3, [r1, 0x3]
- movs r0, 0x40
- ands r0, r3
- adds r6, r1, 0
- cmp r0, 0
- beq _0801FF78
- ldr r2, _0801FF68 @ =gUnknown_2023D6E
- ldr r0, _0801FF6C @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0xBF
- ands r0, r3
- strb r0, [r6, 0x3]
- movs r7, 0x40
- ldr r1, _0801FF70 @ =gBattleScripting
- ldr r0, _0801FF74 @ =gBattlerTarget
- b _0801FF84
- .align 2, 0
-_0801FF64: .4byte gUnknown_2023E82
-_0801FF68: .4byte gUnknown_2023D6E
-_0801FF6C: .4byte sBattler_AI
-_0801FF70: .4byte gBattleScripting
-_0801FF74: .4byte gBattlerTarget
-_0801FF78:
- ldr r2, _08020094 @ =gUnknown_2023D6E
- ldr r0, _08020098 @ =gBattlerTarget
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r1, _0802009C @ =gBattleScripting
- ldr r0, _080200A0 @ =sBattler_AI
-_0801FF84:
- ldrb r0, [r0]
- strb r0, [r1, 0x17]
- mov r9, r2
- ldr r0, _080200A4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 9
- ands r0, r1
- cmp r0, 0
- beq _0801FFB2
- ldrb r0, [r6, 0x3]
- cmp r0, 0x1
- beq _0801FFB2
- mov r2, r9
- ldrb r0, [r2]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0801FFB2
- bl _080210EC
-_0801FFB2:
- ldr r3, _080200A8 @ =gBattleMons
- ldr r2, _08020094 @ =gUnknown_2023D6E
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- mov r9, r2
- cmp r0, 0x13
- bne _0801FFE6
- ldr r0, _080200AC @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- bne _0801FFE6
- cmp r4, 0
- bne _0801FFE6
- ldr r0, _080200B0 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- cmp r0, 0x9
- bhi _0801FFE6
- bl _080210EC
-_0801FFE6:
- mov r3, r9
- ldrb r0, [r3]
- bl GetBattlerPosition
- ldr r2, _080200B4 @ =gSideAffecting
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r2
- ldrh r1, [r1]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08020020
- ldr r0, _080200AC @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- bne _08020020
- cmp r4, 0
- bne _08020020
- ldr r0, _080200B0 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- cmp r0, 0x7
- bhi _08020020
- bl _080210EC
-_08020020:
- ldr r3, _080200A8 @ =gBattleMons
- ldr r2, _08020094 @ =gUnknown_2023D6E
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x28]
- mov r9, r2
- mov r8, r3
- cmp r0, 0
- bne _08020046
- ldr r0, _080200B0 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- cmp r0, 0xB
- beq _08020046
- cmp r0, 0x1F
- beq _08020046
- bl _080210EC
-_08020046:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- mov r1, r8
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _08020068
- cmp r7, 0x40
- beq _08020068
- bl _080210EC
-_08020068:
- ldr r0, _080200B0 @ =gUnknown_2023E82
- ldrb r1, [r0, 0x3]
- adds r6, r0, 0
- cmp r1, 0x6
- bls _08020074
- b _080206A2
-_08020074:
- ldr r1, _080200B8 @ =gUnknown_825053C
- ldrb r0, [r6, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0x10
- bne _08020084
- b _08020270
-_08020084:
- cmp r0, 0x10
- bhi _080200BC
- cmp r0, 0x7
- beq _080200D6
- cmp r0, 0x8
- bne _08020092
- b _0802018C
-_08020092:
- b _08020570
- .align 2, 0
-_08020094: .4byte gUnknown_2023D6E
-_08020098: .4byte gBattlerTarget
-_0802009C: .4byte gBattleScripting
-_080200A0: .4byte sBattler_AI
-_080200A4: .4byte gBattleTypeFlags
-_080200A8: .4byte gBattleMons
-_080200AC: .4byte gUnknown_2023DD0
-_080200B0: .4byte gUnknown_2023E82
-_080200B4: .4byte gSideAffecting
-_080200B8: .4byte gUnknown_825053C
-_080200BC:
- cmp r0, 0x40
- bne _080200C2
- b _080203E4
-_080200C2:
- cmp r0, 0x40
- bhi _080200CE
- cmp r0, 0x20
- bne _080200CC
- b _08020346
-_080200CC:
- b _08020570
-_080200CE:
- cmp r0, 0x80
- bne _080200D4
- b _08020440
-_080200D4:
- b _08020570
-_080200D6:
- mov r2, r9
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2B
- beq _08020138
- ldr r0, _08020130 @ =gActiveBattler
- movs r1, 0
- strb r1, [r0]
- ldr r1, _08020134 @ =gBattlersCount
- ldrb r3, [r1]
- adds r7, r0, 0
- mov r12, r1
- cmp r3, 0
- beq _08020144
- mov r4, r8
- ldr r0, [r4, 0x50]
- movs r1, 0x70
- ands r0, r1
- cmp r0, 0
- bne _08020144
- adds r1, r7, 0
- mov r6, r8
- adds r6, 0x50
- movs r5, 0x58
- movs r4, 0x70
-_08020110:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r3
- bcs _08020144
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r6
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _08020110
- b _08020144
- .align 2, 0
-_08020130: .4byte gActiveBattler
-_08020134: .4byte gBattlersCount
-_08020138:
- ldr r0, _08020184 @ =gActiveBattler
- ldr r2, _08020188 @ =gBattlersCount
- ldrb r1, [r2]
- strb r1, [r0]
- adds r7, r0, 0
- mov r12, r2
-_08020144:
- mov r0, r9
- ldrb r2, [r0]
- movs r0, 0x58
- adds r1, r2, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0802015C
- b _08020570
-_0802015C:
- ldrb r0, [r7]
- mov r3, r12
- ldrb r3, [r3]
- cmp r0, r3
- beq _08020168
- b _08020570
-_08020168:
- mov r4, r8
- adds r0, r1, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x48
- bne _08020176
- b _08020570
-_08020176:
- cmp r0, 0xF
- bne _0802017C
- b _08020570
-_0802017C:
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- b _08020560
- .align 2, 0
-_08020184: .4byte gActiveBattler
-_08020188: .4byte gBattlersCount
-_0802018C:
- mov r2, r9
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- add r0, r8
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, 0x11
- bne _080201E4
- cmp r4, 0x1
- beq _080201A6
- cmp r5, 0x80
- bne _080201E4
-_080201A6:
- ldr r0, _080201D4 @ =gLastUsedAbility
- strb r1, [r0]
- mov r3, r9
- ldrb r0, [r3]
- movs r1, 0x11
- bl sub_80C71D0
- ldr r4, _080201D8 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _080201DC @ =gUnknown_81D9438
-_080201C0:
- str r0, [r4]
- ldr r2, _080201E0 @ =gUnknown_2023DD0
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 6
- ands r0, r1
- cmp r0, 0
- beq _080201D2
- b _08020484
-_080201D2:
- b _080204A8
- .align 2, 0
-_080201D4: .4byte gLastUsedAbility
-_080201D8: .4byte gUnknown_2023D74
-_080201DC: .4byte gUnknown_81D9438
-_080201E0: .4byte gUnknown_2023DD0
-_080201E4:
- mov r1, r9
- ldrb r0, [r1]
- movs r1, 0x58
- muls r0, r1
- add r0, r8
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r1, [r1]
- cmp r1, 0x3
- beq _08020208
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _08020208
- cmp r1, 0x8
- beq _08020208
- cmp r0, 0x8
- bne _08020222
-_08020208:
- ldr r0, _0802026C @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _08020222
- cmp r4, 0x1
- bne _0802021C
- b _080204E8
-_0802021C:
- cmp r5, 0x80
- bne _08020222
- b _080204E8
-_08020222:
- mov r2, r9
- ldrb r1, [r2]
- movs r0, 0x58
- muls r1, r0
- mov r4, r8
- adds r3, r1, r4
- adds r0, r3, 0
- adds r0, 0x21
- ldrb r4, [r0]
- cmp r4, 0x3
- bne _0802023A
- b _08020570
-_0802023A:
- adds r0, 0x1
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _08020244
- b _08020570
-_08020244:
- cmp r4, 0x8
- bne _0802024A
- b _08020570
-_0802024A:
- cmp r0, 0x8
- bne _08020250
- b _08020570
-_08020250:
- mov r0, r8
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0802025E
- b _08020570
-_0802025E:
- adds r0, r3, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x11
- bne _0802026A
- b _08020570
-_0802026A:
- b _08020560
- .align 2, 0
-_0802026C: .4byte gUnknown_2023DD0
-_08020270:
- mov r2, r9
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- add r0, r8
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, 0x29
- bne _080202B4
- cmp r4, 0x1
- beq _0802028A
- cmp r5, 0x80
- bne _080202B4
-_0802028A:
- ldr r0, _080202A8 @ =gLastUsedAbility
- strb r1, [r0]
- mov r3, r9
- ldrb r0, [r3]
- movs r1, 0x29
- bl sub_80C71D0
- ldr r4, _080202AC @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _080202B0 @ =gUnknown_81D9420
- b _080201C0
- .align 2, 0
-_080202A8: .4byte gLastUsedAbility
-_080202AC: .4byte gUnknown_2023D74
-_080202B0: .4byte gUnknown_81D9420
-_080202B4:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- mov r2, r8
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xA
- beq _080202D4
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xA
- bne _08020304
-_080202D4:
- ldr r0, _080202F8 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _08020304
- cmp r4, 0x1
- beq _080202EA
- cmp r5, 0x80
- bne _08020304
-_080202EA:
- ldr r4, _080202FC @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020300 @ =gUnknown_81D9420
- b _080204F4
- .align 2, 0
-_080202F8: .4byte gUnknown_2023DD0
-_080202FC: .4byte gUnknown_2023D74
-_08020300: .4byte gUnknown_81D9420
-_08020304:
- mov r3, r9
- ldrb r0, [r3]
- movs r1, 0x58
- adds r2, r0, 0
- muls r2, r1
- mov r4, r8
- adds r1, r2, r4
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xA
- bne _0802031E
- b _08020570
-_0802031E:
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xA
- bne _0802032A
- b _08020570
-_0802032A:
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x29
- bne _08020336
- b _08020570
-_08020336:
- mov r0, r8
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _08020344
- b _08020570
-_08020344:
- b _08020560
-_08020346:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08020382
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _08020382
- ldr r0, _080203D8 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _08020382
- movs r1, 0
- str r1, [sp, 0x4]
-_08020382:
- ldr r4, _080203DC @ =gBattleMons
- ldr r0, _080203E0 @ =gUnknown_2023D6E
- ldrb r3, [r0]
- movs r0, 0x58
- adds r2, r3, 0
- muls r2, r0
- adds r1, r2, r4
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xF
- bne _0802039C
- b _08020570
-_0802039C:
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xF
- bne _080203A8
- b _08020570
-_080203A8:
- adds r0, r4, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _080203B6
- b _08020570
-_080203B6:
- ldr r2, [sp, 0x4]
- cmp r2, 0
- bne _080203BE
- b _08020570
-_080203BE:
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x28
- bne _080203CA
- b _08020570
-_080203CA:
- adds r0, r3, 0
- bl CancelMultiTurnMoves
- movs r3, 0x1
- mov r10, r3
- b _08020570
- .align 2, 0
-_080203D8: .4byte gBattleWeather
-_080203DC: .4byte gBattleMons
-_080203E0: .4byte gUnknown_2023D6E
-_080203E4:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- mov r2, r8
- adds r0, r1, r2
- adds r0, 0x20
- ldrb r2, [r0]
- cmp r2, 0x7
- bne _0802042C
- cmp r4, 0x1
- beq _08020402
- cmp r5, 0x80
- beq _08020402
- b _08020570
-_08020402:
- ldr r0, _08020420 @ =gLastUsedAbility
- strb r2, [r0]
- mov r3, r9
- ldrb r0, [r3]
- movs r1, 0x7
- bl sub_80C71D0
- ldr r4, _08020424 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020428 @ =gUnknown_81D942C
- b _080201C0
- .align 2, 0
-_08020420: .4byte gLastUsedAbility
-_08020424: .4byte gUnknown_2023D74
-_08020428: .4byte gUnknown_81D942C
-_0802042C:
- mov r0, r8
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0802043A
- b _08020570
-_0802043A:
- movs r4, 0x1
- mov r10, r4
- b _08020570
-_08020440:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- add r0, r8
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, 0x11
- bne _080204AE
- cmp r4, 0x1
- beq _0802045A
- cmp r5, 0x80
- bne _080204AE
-_0802045A:
- ldr r0, _08020494 @ =gLastUsedAbility
- strb r1, [r0]
- mov r1, r9
- ldrb r0, [r1]
- movs r1, 0x11
- bl sub_80C71D0
- ldr r4, _08020498 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _0802049C @ =gUnknown_81D9438
- str r0, [r4]
- ldr r2, _080204A0 @ =gUnknown_2023DD0
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 6
- ands r0, r1
- cmp r0, 0
- beq _080204A8
-_08020484:
- movs r0, 0x1
- strb r0, [r6, 0x5]
- ldr r0, _080204A4 @ =0xffffdfff
- ands r1, r0
- str r1, [r2]
- bl _0802110A
- .align 2, 0
-_08020494: .4byte gLastUsedAbility
-_08020498: .4byte gUnknown_2023D74
-_0802049C: .4byte gUnknown_81D9438
-_080204A0: .4byte gUnknown_2023DD0
-_080204A4: .4byte 0xffffdfff
-_080204A8:
- strb r0, [r6, 0x5]
- bl _0802110A
-_080204AE:
- mov r2, r9
- ldrb r0, [r2]
- movs r1, 0x58
- muls r0, r1
- add r0, r8
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r1, [r1]
- cmp r1, 0x3
- beq _080204D2
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _080204D2
- cmp r1, 0x8
- beq _080204D2
- cmp r0, 0x8
- bne _08020510
-_080204D2:
- ldr r0, _08020500 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _08020510
- cmp r4, 0x1
- beq _080204E8
- cmp r5, 0x80
- bne _08020510
-_080204E8:
- ldr r4, _08020504 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020508 @ =gUnknown_81D9438
-_080204F4:
- str r0, [r4]
- ldr r1, _0802050C @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- bl _0802110A
- .align 2, 0
-_08020500: .4byte gUnknown_2023DD0
-_08020504: .4byte gUnknown_2023D74
-_08020508: .4byte gUnknown_81D9438
-_0802050C: .4byte gUnknown_2023E82
-_08020510:
- mov r3, r9
- ldrb r0, [r3]
- movs r6, 0x58
- muls r0, r6
- mov r2, r8
- adds r2, 0x4C
- adds r5, r0, r2
- ldr r4, [r5]
- cmp r4, 0
- bne _08020570
- mov r3, r8
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r3, [r0]
- cmp r3, 0x3
- beq _08020566
- adds r0, 0x1
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _08020566
- cmp r3, 0x8
- beq _08020566
- cmp r0, 0x8
- beq _08020566
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x11
- beq _08020570
- mov r4, r9
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x9
- negs r2, r2
- ands r0, r2
- str r0, [r1]
-_08020560:
- movs r0, 0x1
- mov r10, r0
- b _08020570
-_08020566:
- ldr r0, _080205B4 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0]
-_08020570:
- mov r1, r10
- cmp r1, 0x1
- beq _08020578
- b _08020694
-_08020578:
- ldr r0, _080205B8 @ =gUnknown_2023D74
- ldr r0, [r0]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r1, _080205BC @ =gUnknown_825053C
- ldr r0, _080205C0 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r3, [r0]
- cmp r3, 0x7
- bne _080205CC
- bl Random
- ldr r2, _080205C4 @ =gBattleMons
- ldr r1, _080205C8 @ =gUnknown_2023D6E
- ldrb r3, [r1]
- movs r1, 0x58
- muls r3, r1
- adds r2, 0x4C
- adds r3, r2
- movs r1, 0x3
- ands r1, r0
- adds r1, 0x2
- ldr r0, [r3]
- orrs r0, r1
- str r0, [r3]
- b _080205E0
- .align 2, 0
-_080205B4: .4byte gMoveResultFlags
-_080205B8: .4byte gUnknown_2023D74
-_080205BC: .4byte gUnknown_825053C
-_080205C0: .4byte gUnknown_2023E82
-_080205C4: .4byte gBattleMons
-_080205C8: .4byte gUnknown_2023D6E
-_080205CC:
- ldr r2, _08020630 @ =gBattleMons
- ldr r0, _08020634 @ =gUnknown_2023D6E
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r2, 0x4C
- adds r1, r2
- ldr r0, [r1]
- orrs r0, r3
- str r0, [r1]
-_080205E0:
- ldr r2, _08020638 @ =gUnknown_2023D74
- ldr r1, _0802063C @ =gUnknown_825062C
- ldr r5, _08020640 @ =gUnknown_2023E82
- ldrb r0, [r5, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [r2]
- ldr r4, _08020644 @ =gActiveBattler
- ldr r1, _08020634 @ =gUnknown_2023D6E
- ldrb r0, [r1]
- strb r0, [r4]
- ldrb r1, [r1]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _08020648 @ =gUnknown_2023C30
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r2, _0802064C @ =gUnknown_2023DD0
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 6
- ands r0, r1
- cmp r0, 0
- beq _08020654
- movs r0, 0x1
- strb r0, [r5, 0x5]
- ldr r0, _08020650 @ =0xffffdfff
- ands r1, r0
- str r1, [r2]
- b _08020656
- .align 2, 0
-_08020630: .4byte gBattleMons
-_08020634: .4byte gUnknown_2023D6E
-_08020638: .4byte gUnknown_2023D74
-_0802063C: .4byte gUnknown_825062C
-_08020640: .4byte gUnknown_2023E82
-_08020644: .4byte gActiveBattler
-_08020648: .4byte gUnknown_2023C30
-_0802064C: .4byte gUnknown_2023DD0
-_08020650: .4byte 0xffffdfff
-_08020654:
- strb r0, [r5, 0x5]
-_08020656:
- ldr r0, _08020688 @ =gUnknown_2023E82
- ldrb r2, [r0, 0x3]
- adds r6, r0, 0
- cmp r2, 0x2
- beq _08020670
- cmp r2, 0x6
- beq _08020670
- cmp r2, 0x5
- beq _08020670
- cmp r2, 0x3
- beq _08020670
- bl _0802110A
-_08020670:
- ldr r0, _0802068C @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xB4
- ldrb r1, [r6, 0x3]
- strb r1, [r0]
- ldr r2, _08020690 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 7
- bl _08021008
- .align 2, 0
-_08020688: .4byte gUnknown_2023E82
-_0802068C: .4byte gBattleStruct
-_08020690: .4byte gUnknown_2023DD0
-_08020694:
- mov r2, r10
- cmp r2, 0
- beq _0802069E
- bl _0802110A
-_0802069E:
- bl _080210EC
-_080206A2:
- mov r3, r9
- ldrb r1, [r3]
- movs r0, 0x58
- muls r1, r0
- mov r0, r8
- adds r0, 0x50
- adds r1, r0
- ldr r2, _080206DC @ =gUnknown_825053C
- ldrb r3, [r6, 0x3]
- lsls r0, r3, 2
- adds r0, r2
- ldr r1, [r1]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _080206C6
- bl _080210EC
-_080206C6:
- subs r0, r3, 0x7
- cmp r0, 0x34
- bls _080206D0
- bl _0802110A
-_080206D0:
- lsls r0, 2
- ldr r1, _080206E0 @ =_080206E4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080206DC: .4byte gUnknown_825053C
-_080206E0: .4byte _080206E4
- .align 2, 0
-_080206E4:
- .4byte _080207B8
- .4byte _0802082C
- .4byte _080209A0
- .4byte _080208B8
- .4byte _08020934
- .4byte _080209D8
- .4byte _08020A20
- .4byte _08020AEC
- .4byte _08020B30
- .4byte _08020B30
- .4byte _08020B30
- .4byte _08020B30
- .4byte _08020B30
- .4byte _08020B30
- .4byte _08020B30
- .4byte _08020B74
- .4byte _08020B74
- .4byte _08020B74
- .4byte _08020B74
- .4byte _08020B74
- .4byte _08020B74
- .4byte _08020B74
- .4byte _08020C40
- .4byte _08020C88
- .4byte _08020CA8
- .4byte _08020E78
- .4byte _08020EB4
- .4byte _08020ED0
- .4byte _08020EE8
- .4byte _08020F00
- .4byte _08020F60
- .4byte _08020F78
- .4byte _08020BB8
- .4byte _08020BB8
- .4byte _08020BB8
- .4byte _08020BB8
- .4byte _08020BB8
- .4byte _08020BB8
- .4byte _08020BB8
- .4byte _08020BFC
- .4byte _08020BFC
- .4byte _08020BFC
- .4byte _08020BFC
- .4byte _08020BFC
- .4byte _08020BFC
- .4byte _08020BFC
- .4byte _08020FBC
- .4byte _08021018
- .4byte _0802110A
- .4byte _0802110A
- .4byte _0802110A
- .4byte _0802110A
- .4byte _080210FC
-_080207B8:
- mov r4, r9
- ldrb r0, [r4]
- movs r5, 0x58
- adds r1, r0, 0
- muls r1, r5
- mov r2, r8
- adds r0, r1, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _080207D2
- bl _080210EC
-_080207D2:
- mov r4, r8
- adds r4, 0x50
- adds r0, r1, r4
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _080207E6
- bl _080210EC
-_080207E6:
- bl Random
- mov r3, r9
- ldrb r1, [r3]
- adds r2, r1, 0
- muls r2, r5
- adds r2, r4
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- lsrs r1, 16
- adds r1, 0x2
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r4, _08020820 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r1, _08020824 @ =gUnknown_825062C
- ldr r0, _08020828 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _08021108
- .align 2, 0
-_08020820: .4byte gUnknown_2023D74
-_08020824: .4byte gUnknown_825062C
-_08020828: .4byte gUnknown_2023E82
-_0802082C:
- mov r0, r9
- ldrb r2, [r0]
- movs r6, 0x58
- adds r0, r2, 0
- muls r0, r6
- add r0, r8
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, 0x27
- bne _08020870
- cmp r4, 0x1
- beq _0802084C
- cmp r5, 0x80
- beq _0802084C
- bl _080210EC
-_0802084C:
- ldr r0, _08020864 @ =gLastUsedAbility
- strb r1, [r0]
- mov r1, r9
- ldrb r0, [r1]
- movs r1, 0x27
- bl sub_80C71D0
- ldr r1, _08020868 @ =gUnknown_2023D74
- ldr r0, _0802086C @ =gUnknown_81D9452
- str r0, [r1]
- bl _0802110A
- .align 2, 0
-_08020864: .4byte gLastUsedAbility
-_08020868: .4byte gUnknown_2023D74
-_0802086C: .4byte gUnknown_81D9452
-_08020870:
- adds r0, r2, 0
- bl BankGetTurnOrder
- ldr r1, _080208AC @ =gUnknown_2023BE2
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bhi _08020886
- bl _080210EC
-_08020886:
- mov r2, r9
- ldrb r0, [r2]
- adds r2, r0, 0
- muls r2, r6
- mov r0, r8
- adds r0, 0x50
- adds r2, r0
- ldr r1, _080208B0 @ =gUnknown_825053C
- ldr r0, _080208B4 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- orrs r1, r0
- str r1, [r2]
- bl _080210EC
- .align 2, 0
-_080208AC: .4byte gUnknown_2023BE2
-_080208B0: .4byte gUnknown_825053C
-_080208B4: .4byte gUnknown_2023E82
-_080208B8:
- mov r3, r9
- ldrb r0, [r3]
- movs r5, 0x58
- muls r0, r5
- mov r4, r8
- adds r4, 0x50
- adds r2, r0, r4
- ldr r1, [r2]
- movs r0, 0x70
- ands r0, r1
- cmp r0, 0
- beq _080208D4
- bl _080210EC
-_080208D4:
- movs r0, 0x80
- lsls r0, 5
- orrs r1, r0
- str r1, [r2]
- ldr r1, _08020920 @ =gUnknown_2023DB8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldr r1, _08020924 @ =gCurrentMove
- ldrh r1, [r1]
- strh r1, [r0]
- bl Random
- mov r2, r9
- ldrb r1, [r2]
- adds r2, r1, 0
- muls r2, r5
- adds r2, r4
- movs r1, 0x3
- ands r1, r0
- adds r1, 0x2
- lsls r1, 4
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r4, _08020928 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r1, _0802092C @ =gUnknown_825062C
- ldr r0, _08020930 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _08021108
- .align 2, 0
-_08020920: .4byte gUnknown_2023DB8
-_08020924: .4byte gCurrentMove
-_08020928: .4byte gUnknown_2023D74
-_0802092C: .4byte gUnknown_825062C
-_08020930: .4byte gUnknown_2023E82
-_08020934:
- ldr r5, _08020984 @ =sBattler_AI
- ldrb r0, [r5]
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- bne _0802096C
- ldr r4, _08020988 @ =gUnknown_2023E7E
- ldrh r3, [r4]
- ldr r2, _0802098C @ =gBattleMons
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- adds r0, r3, r0
- strh r0, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r3, r0
- bls _0802096C
- ldr r3, _08020990 @ =0x0000ffff
- adds r0, r3, 0
- strh r0, [r4]
-_0802096C:
- ldr r4, _08020994 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r1, _08020998 @ =gUnknown_825062C
- ldr r0, _0802099C @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- b _08021108
- .align 2, 0
-_08020984: .4byte sBattler_AI
-_08020988: .4byte gUnknown_2023E7E
-_0802098C: .4byte gBattleMons
-_08020990: .4byte 0x0000ffff
-_08020994: .4byte gUnknown_2023D74
-_08020998: .4byte gUnknown_825062C
-_0802099C: .4byte gUnknown_2023E82
-_080209A0:
- mov r4, r9
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- mov r1, r8
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- beq _080209B6
- b _080210EC
-_080209B6:
- bl Random
- ldr r4, _080209D4 @ =gUnknown_2023E82
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- adds r0, 0x3
- strb r0, [r4, 0x3]
- movs r0, 0
- movs r1, 0
- bl sub_801FF20
- b _0802110A
- .align 2, 0
-_080209D4: .4byte gUnknown_2023E82
-_080209D8:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r8
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 5
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08020A14 @ =gUnknown_2023DB8
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- ldr r1, _08020A18 @ =gCurrentMove
- ldrh r1, [r1]
- strh r1, [r0]
- ldr r0, _08020A1C @ =gUnknown_2023E8C
- ldrb r1, [r2]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1, 0x1]
- b _080210EC
- .align 2, 0
-_08020A14: .4byte gUnknown_2023DB8
-_08020A18: .4byte gCurrentMove
-_08020A1C: .4byte gUnknown_2023E8C
-_08020A20:
- mov r3, r9
- ldrb r0, [r3]
- movs r6, 0x58
- muls r0, r6
- mov r4, r8
- adds r4, 0x50
- adds r0, r4
- ldr r5, [r0]
- movs r0, 0xE0
- lsls r0, 8
- ands r5, r0
- cmp r5, 0
- beq _08020A3C
- b _080210EC
-_08020A3C:
- bl Random
- mov r2, r9
- ldrb r1, [r2]
- adds r2, r1, 0
- muls r2, r6
- adds r2, r4
- movs r1, 0x3
- ands r1, r0
- adds r1, 0x3
- lsls r1, 13
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- mov r3, r9
- ldrb r1, [r3]
- ldr r2, _08020AD0 @ =gBattleStruct
- ldr r0, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r6, _08020AD4 @ =gCurrentMove
- ldrh r0, [r6]
- strb r0, [r1, 0x4]
- ldrb r1, [r3]
- ldr r0, [r2]
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r6]
- lsrs r0, 8
- strb r0, [r1, 0x5]
- ldrb r1, [r3]
- ldr r0, [r2]
- adds r1, r0
- ldr r0, _08020AD8 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r1, 0x14]
- ldr r4, _08020ADC @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r1, _08020AE0 @ =gUnknown_825062C
- ldr r2, _08020AE4 @ =gUnknown_2023E82
- ldrb r0, [r2, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [r4]
- strb r5, [r2, 0x5]
- ldr r3, _08020AE8 @ =gUnknown_83FE664
- ldrh r0, [r3]
- ldrh r4, [r6]
- cmp r0, r4
- bne _08020AAA
- b _0802110A
-_08020AAA:
- adds r1, r2, 0
- adds r2, r6, 0
-_08020AAE:
- ldrb r0, [r1, 0x5]
- adds r0, 0x1
- strb r0, [r1, 0x5]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _08020ABE
- b _0802110A
-_08020ABE:
- ldrb r0, [r1, 0x5]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- ldrh r4, [r2]
- cmp r0, r4
- bne _08020AAE
- b _0802110A
- .align 2, 0
-_08020AD0: .4byte gBattleStruct
-_08020AD4: .4byte gCurrentMove
-_08020AD8: .4byte sBattler_AI
-_08020ADC: .4byte gUnknown_2023D74
-_08020AE0: .4byte gUnknown_825062C
-_08020AE4: .4byte gUnknown_2023E82
-_08020AE8: .4byte gUnknown_83FE664
-_08020AEC:
- ldr r1, _08020B1C @ =gBattleMoveDamage
- ldr r0, _08020B20 @ =gUnknown_2023D54
- ldr r0, [r0]
- cmp r0, 0
- bge _08020AF8
- adds r0, 0x3
-_08020AF8:
- asrs r0, 2
- str r0, [r1]
- cmp r0, 0
- bne _08020B04
- movs r0, 0x1
- str r0, [r1]
-_08020B04:
- ldr r4, _08020B24 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r1, _08020B28 @ =gUnknown_825062C
- ldr r0, _08020B2C @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- b _08021108
- .align 2, 0
-_08020B1C: .4byte gBattleMoveDamage
-_08020B20: .4byte gUnknown_2023D54
-_08020B24: .4byte gUnknown_2023D74
-_08020B28: .4byte gUnknown_825062C
-_08020B2C: .4byte gUnknown_2023E82
-_08020B30:
- ldrb r1, [r6, 0x3]
- adds r1, 0xF2
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x10
- adds r2, r7, 0
- movs r3, 0
- bl ChangeStatBuffs
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _08020B4C
- b _080210EC
-_08020B4C:
- ldr r2, _08020B68 @ =gBattleScripting
- ldrb r1, [r6, 0x3]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2, 0x10]
- strb r3, [r2, 0x11]
- ldr r4, _08020B6C @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020B70 @ =gUnknown_81D6BD1
- b _08021108
- .align 2, 0
-_08020B68: .4byte gBattleScripting
-_08020B6C: .4byte gUnknown_2023D74
-_08020B70: .4byte gUnknown_81D6BD1
-_08020B74:
- movs r0, 0x70
- negs r0, r0
- ldrb r1, [r6, 0x3]
- adds r1, 0xEB
- lsls r1, 24
- lsrs r1, 24
- adds r2, r7, 0
- movs r3, 0
- bl ChangeStatBuffs
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _08020B92
- b _080210EC
-_08020B92:
- ldr r2, _08020BAC @ =gBattleScripting
- ldrb r1, [r6, 0x3]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2, 0x10]
- strb r3, [r2, 0x11]
- ldr r4, _08020BB0 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020BB4 @ =gUnknown_81D6C62
- b _08021108
- .align 2, 0
-_08020BAC: .4byte gBattleScripting
-_08020BB0: .4byte gUnknown_2023D74
-_08020BB4: .4byte gUnknown_81D6C62
-_08020BB8:
- ldrb r1, [r6, 0x3]
- adds r1, 0xDA
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x20
- adds r2, r7, 0
- movs r3, 0
- bl ChangeStatBuffs
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _08020BD4
- b _080210EC
-_08020BD4:
- ldr r2, _08020BF0 @ =gBattleScripting
- ldrb r1, [r6, 0x3]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2, 0x10]
- strb r3, [r2, 0x11]
- ldr r4, _08020BF4 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020BF8 @ =gUnknown_81D6BD1
- b _08021108
- .align 2, 0
-_08020BF0: .4byte gBattleScripting
-_08020BF4: .4byte gUnknown_2023D74
-_08020BF8: .4byte gUnknown_81D6BD1
-_08020BFC:
- movs r0, 0x60
- negs r0, r0
- ldrb r1, [r6, 0x3]
- adds r1, 0xD3
- lsls r1, 24
- lsrs r1, 24
- adds r2, r7, 0
- movs r3, 0
- bl ChangeStatBuffs
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _08020C1A
- b _080210EC
-_08020C1A:
- ldr r2, _08020C34 @ =gBattleScripting
- ldrb r1, [r6, 0x3]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2, 0x10]
- strb r3, [r2, 0x11]
- ldr r4, _08020C38 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020C3C @ =gUnknown_81D6C62
- b _08021108
- .align 2, 0
-_08020C34: .4byte gBattleScripting
-_08020C38: .4byte gUnknown_2023D74
-_08020C3C: .4byte gUnknown_81D6C62
-_08020C40:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r8
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 15
- orrs r0, r1
- str r0, [r2]
- ldr r2, _08020C7C @ =gDisableStructs
- mov r3, r9
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strb r1, [r0, 0x19]
- ldr r1, _08020C80 @ =gUnknown_2023DB8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldr r1, _08020C84 @ =gCurrentMove
- ldrh r1, [r1]
- strh r1, [r0]
- b _080210EC
- .align 2, 0
-_08020C7C: .4byte gDisableStructs
-_08020C80: .4byte gUnknown_2023DB8
-_08020C84: .4byte gCurrentMove
-_08020C88:
- ldr r0, _08020CA4 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r8
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 16
-_08020C9E:
- orrs r0, r1
- str r0, [r2]
- b _080210EC
- .align 2, 0
-_08020CA4: .4byte sBattler_AI
-_08020CA8:
- ldr r5, _08020D64 @ =gBattleTypeFlags
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _08020CB8
- b _080210EC
-_08020CB8:
- ldr r4, _08020D68 @ =sBattler_AI
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08020CEA
- ldr r0, [r5]
- ldr r1, _08020D6C @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _08020D26
- ldr r0, _08020D70 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _08020CEA
- b _080210EC
-_08020CEA:
- ldr r0, _08020D64 @ =gBattleTypeFlags
- ldr r0, [r0]
- ldr r1, _08020D6C @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _08020D26
- ldr r0, _08020D70 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _08020D26
- ldr r0, _08020D74 @ =gUnknown_2023F20
- adds r0, 0x29
- adds r0, r6, r0
- ldrb r1, [r0]
- ldr r3, _08020D78 @ =gBitTable
- ldr r2, _08020D7C @ =gBattlerPartyIndexes
- ldr r0, _08020D68 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08020D26
- b _080210EC
-_08020D26:
- ldr r2, _08020D80 @ =gBattleMons
- ldr r1, _08020D84 @ =gBattlerTarget
- ldrb r0, [r1]
- movs r3, 0x58
- muls r0, r3
- adds r4, r0, r2
- ldrh r0, [r4, 0x2E]
- adds r7, r1, 0
- mov r8, r2
- cmp r0, 0
- beq _08020D94
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3C
- bne _08020D94
- ldr r1, _08020D88 @ =gUnknown_2023D74
- ldr r0, _08020D8C @ =gUnknown_81D948E
- str r0, [r1]
- ldr r1, _08020D90 @ =gLastUsedAbility
- ldrb r0, [r7]
- muls r0, r3
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- ldrb r1, [r1]
- bl sub_80C71D0
- b _0802110A
- .align 2, 0
-_08020D64: .4byte gBattleTypeFlags
-_08020D68: .4byte sBattler_AI
-_08020D6C: .4byte 0x00000902
-_08020D70: .4byte gTrainerBattleOpponent_A
-_08020D74: .4byte gUnknown_2023F20
-_08020D78: .4byte gBitTable
-_08020D7C: .4byte gBattlerPartyIndexes
-_08020D80: .4byte gBattleMons
-_08020D84: .4byte gBattlerTarget
-_08020D88: .4byte gUnknown_2023D74
-_08020D8C: .4byte gUnknown_81D948E
-_08020D90: .4byte gLastUsedAbility
-_08020D94:
- ldr r4, _08020E60 @ =sBattler_AI
- mov r10, r4
- ldrb r2, [r4]
- movs r0, 0x58
- mov r9, r0
- mov r0, r9
- muls r0, r2
- add r0, r8
- ldrh r4, [r0, 0x2E]
- cmp r4, 0
- beq _08020DAC
- b _080210EC
-_08020DAC:
- ldrb r0, [r7]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- ldrh r3, [r0, 0x2E]
- adds r1, r3, 0
- cmp r1, 0xAF
- bne _08020DC0
- b _080210EC
-_08020DC0:
- adds r0, r3, 0
- subs r0, 0x79
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xB
- bhi _08020DCE
- b _080210EC
-_08020DCE:
- cmp r1, 0
- bne _08020DD4
- b _080210EC
-_08020DD4:
- ldr r5, _08020E64 @ =gBattleStruct
- lsls r0, r2, 1
- adds r0, 0xD0
- ldr r1, [r5]
- adds r1, r0
- ldr r2, _08020E68 @ =gUnknown_2023D68
- strh r3, [r1]
- strh r3, [r2]
- ldrb r0, [r7]
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- add r0, r8
- movs r6, 0
- strh r4, [r0, 0x2E]
- ldr r4, _08020E6C @ =gActiveBattler
- mov r1, r10
- ldrb r0, [r1]
- strb r0, [r4]
- str r2, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetMonData
- mov r2, r10
- ldrb r0, [r2]
- bl MarkBufferBankForExecution
- ldrb r0, [r7]
- strb r0, [r4]
- ldrb r0, [r7]
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- mov r1, r8
- adds r1, 0x2E
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetMonData
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldr r4, _08020E70 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020E74 @ =gUnknown_81D9271
- str r0, [r4]
- ldrb r0, [r7]
- ldr r1, [r5]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC8
- strb r6, [r0]
- ldrb r0, [r7]
- ldr r1, [r5]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC9
- strb r6, [r0]
- b _0802110A
- .align 2, 0
-_08020E60: .4byte sBattler_AI
-_08020E64: .4byte gBattleStruct
-_08020E68: .4byte gUnknown_2023D68
-_08020E6C: .4byte gActiveBattler
-_08020E70: .4byte gUnknown_2023D74
-_08020E74: .4byte gUnknown_81D9271
-_08020E78:
- ldr r3, _08020EA8 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r8
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 19
- orrs r0, r1
- str r0, [r2]
- ldr r2, _08020EAC @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _08020EB0 @ =sBattler_AI
- ldrb r1, [r1]
- strb r1, [r0, 0x14]
- b _080210EC
- .align 2, 0
-_08020EA8: .4byte gBattlerTarget
-_08020EAC: .4byte gDisableStructs
-_08020EB0: .4byte sBattler_AI
-_08020EB4:
- ldr r0, _08020ECC @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- mov r0, r8
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 20
- b _08020C9E
- .align 2, 0
-_08020ECC: .4byte gBattlerTarget
-_08020ED0:
- ldr r4, _08020EE0 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020EE4 @ =gUnknown_81D8D55
- b _08021108
- .align 2, 0
-_08020EE0: .4byte gUnknown_2023D74
-_08020EE4: .4byte gUnknown_81D8D55
-_08020EE8:
- ldr r4, _08020EF8 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020EFC @ =gUnknown_81D8DF1
- b _08021108
- .align 2, 0
-_08020EF8: .4byte gUnknown_2023D74
-_08020EFC: .4byte gUnknown_81D8DF1
-_08020F00:
- ldr r6, _08020F50 @ =gBattlerTarget
- ldrb r0, [r6]
- movs r2, 0x58
- muls r0, r2
- mov r1, r8
- adds r1, 0x4C
- adds r5, r0, r1
- ldr r4, [r5]
- movs r0, 0x40
- ands r0, r4
- cmp r0, 0
- bne _08020F1A
- b _080210EC
-_08020F1A:
- movs r0, 0x41
- negs r0, r0
- ands r4, r0
- str r4, [r5]
- ldr r4, _08020F54 @ =gActiveBattler
- ldrb r0, [r6]
- strb r0, [r4]
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r4, _08020F58 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020F5C @ =gUnknown_81D9177
- b _08021108
- .align 2, 0
-_08020F50: .4byte gBattlerTarget
-_08020F54: .4byte gActiveBattler
-_08020F58: .4byte gUnknown_2023D74
-_08020F5C: .4byte gUnknown_81D9177
-_08020F60:
- ldr r4, _08020F70 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08020F74 @ =gUnknown_81D8F35
- b _08021108
- .align 2, 0
-_08020F70: .4byte gUnknown_2023D74
-_08020F74: .4byte gUnknown_81D8F35
-_08020F78:
- ldr r4, _08020FA8 @ =gBattleMoveDamage
- ldr r0, _08020FAC @ =gUnknown_2023D54
- ldr r0, [r0]
- movs r1, 0x3
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _08020F8E
- movs r0, 0x1
- str r0, [r4]
-_08020F8E:
- ldr r4, _08020FB0 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r1, _08020FB4 @ =gUnknown_825062C
- ldr r0, _08020FB8 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- b _08021108
- .align 2, 0
-_08020FA8: .4byte gBattleMoveDamage
-_08020FAC: .4byte gUnknown_2023D54
-_08020FB0: .4byte gUnknown_2023D74
-_08020FB4: .4byte gUnknown_825062C
-_08020FB8: .4byte gUnknown_2023E82
-_08020FBC:
- mov r4, r9
- ldrb r0, [r4]
- movs r5, 0x58
- muls r0, r5
- mov r4, r8
- adds r4, 0x50
- adds r2, r0, r4
- ldr r1, [r2]
- movs r0, 0xC0
- lsls r0, 4
- ands r0, r1
- cmp r0, 0
- beq _08020FD8
- b _080210EC
-_08020FD8:
- movs r0, 0x80
- lsls r0, 5
- orrs r1, r0
- str r1, [r2]
- ldr r1, _08021010 @ =gUnknown_2023DB8
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- ldr r1, _08021014 @ =gCurrentMove
- ldrh r1, [r1]
- strh r1, [r0]
- bl Random
- mov r3, r9
- ldrb r1, [r3]
- adds r2, r1, 0
- muls r2, r5
- adds r2, r4
- movs r1, 0x1
- ands r1, r0
- adds r1, 0x2
- lsls r1, 10
- ldr r0, [r2]
-_08021008:
- orrs r0, r1
- str r0, [r2]
- b _0802110A
- .align 2, 0
-_08021010: .4byte gUnknown_2023DB8
-_08021014: .4byte gCurrentMove
-_08021018:
- mov r5, r9
- ldrb r3, [r5]
- movs r4, 0x58
- adds r0, r3, 0
- muls r0, r4
- mov r2, r8
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r2, [r0]
- cmp r2, 0x3C
- bne _08021058
- ldrh r0, [r1, 0x2E]
- cmp r0, 0
- beq _080210EC
- ldr r0, _0802104C @ =gLastUsedAbility
- strb r2, [r0]
- ldr r1, _08021050 @ =gUnknown_2023D74
- ldr r0, _08021054 @ =gUnknown_81D948E
- str r0, [r1]
- ldrb r0, [r5]
- movs r1, 0x3C
- bl sub_80C71D0
- b _0802110A
- .align 2, 0
-_0802104C: .4byte gLastUsedAbility
-_08021050: .4byte gUnknown_2023D74
-_08021054: .4byte gUnknown_81D948E
-_08021058:
- ldrh r0, [r1, 0x2E]
- cmp r0, 0
- beq _080210EC
- adds r0, r3, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _080210D0 @ =gUnknown_2023D68
- mov r3, r9
- ldrb r0, [r3]
- muls r0, r4
- add r0, r8
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
- ldrb r0, [r3]
- muls r0, r4
- add r0, r8
- movs r5, 0
- movs r1, 0
- strh r1, [r0, 0x2E]
- ldr r2, _080210D4 @ =gUnknown_2023F20
- adds r2, 0x29
- adds r2, r6, r2
- ldr r3, _080210D8 @ =gBitTable
- ldr r1, _080210DC @ =gBattlerPartyIndexes
- mov r4, r9
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r4, _080210E0 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _080210E4 @ =gUnknown_81D8F86
- str r0, [r4]
- mov r1, r9
- ldrb r0, [r1]
- ldr r2, _080210E8 @ =gBattleStruct
- ldr r1, [r2]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC8
- strb r5, [r0]
- mov r3, r9
- ldrb r0, [r3]
- ldr r1, [r2]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC9
- strb r5, [r0]
- b _0802110A
- .align 2, 0
-_080210D0: .4byte gUnknown_2023D68
-_080210D4: .4byte gUnknown_2023F20
-_080210D8: .4byte gBitTable
-_080210DC: .4byte gBattlerPartyIndexes
-_080210E0: .4byte gUnknown_2023D74
-_080210E4: .4byte gUnknown_81D8F86
-_080210E8: .4byte gBattleStruct
-_080210EC:
- ldr r1, _080210F8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- b _0802110A
- .align 2, 0
-_080210F8: .4byte gUnknown_2023D74
-_080210FC:
- ldr r4, _0802111C @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08021120 @ =gUnknown_81D8FEB
-_08021108:
- str r0, [r4]
-_0802110A:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802111C: .4byte gUnknown_2023D74
-_08021120: .4byte gUnknown_81D8FEB
- thumb_func_end sub_801FF20
-
- thumb_func_start atk15_seteffectwithchance
-atk15_seteffectwithchance: @ 8021124
- push {r4,lr}
- ldr r2, _08021150 @ =gBattleMons
- ldr r0, _08021154 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x20
- bne _08021160
- ldr r2, _08021158 @ =gBattleMoves
- ldr r0, _0802115C @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 1
- b _08021170
- .align 2, 0
-_08021150: .4byte gBattleMons
-_08021154: .4byte sBattler_AI
-_08021158: .4byte gBattleMoves
-_0802115C: .4byte gCurrentMove
-_08021160:
- ldr r2, _08021190 @ =gBattleMoves
- ldr r0, _08021194 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r4, [r0, 0x5]
-_08021170:
- ldr r3, _08021198 @ =gUnknown_2023E82
- ldrb r2, [r3, 0x3]
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _080211A0
- ldr r0, _0802119C @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _080211A0
- movs r0, 0x7F
- ands r0, r2
- strb r0, [r3, 0x3]
- b _080211CE
- .align 2, 0
-_08021190: .4byte gBattleMoves
-_08021194: .4byte gCurrentMove
-_08021198: .4byte gUnknown_2023E82
-_0802119C: .4byte gMoveResultFlags
-_080211A0:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r4
- bhi _080211EA
- ldr r0, _080211D8 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x3]
- cmp r0, 0
- beq _080211EA
- ldr r0, _080211DC @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _080211EA
- cmp r4, 0x63
- bls _080211E0
-_080211CE:
- movs r0, 0
- movs r1, 0x80
- bl sub_801FF20
- b _080211F2
- .align 2, 0
-_080211D8: .4byte gUnknown_2023E82
-_080211DC: .4byte gMoveResultFlags
-_080211E0:
- movs r0, 0
- movs r1, 0
- bl sub_801FF20
- b _080211F2
-_080211EA:
- ldr r1, _08021204 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_080211F2:
- ldr r0, _08021208 @ =gUnknown_2023E82
- movs r1, 0
- strb r1, [r0, 0x3]
- ldr r0, _0802120C @ =gBattleScripting
- strb r1, [r0, 0x16]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08021204: .4byte gUnknown_2023D74
-_08021208: .4byte gUnknown_2023E82
-_0802120C: .4byte gBattleScripting
- thumb_func_end atk15_seteffectwithchance
-
- thumb_func_start atk16_seteffectprimary
-atk16_seteffectprimary: @ 8021210
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl sub_801FF20
- pop {r0}
- bx r0
- thumb_func_end atk16_seteffectprimary
-
- thumb_func_start atk17_seteffectsecondary
-atk17_seteffectsecondary: @ 8021220
- push {lr}
- movs r0, 0
- movs r1, 0
- bl sub_801FF20
- pop {r0}
- bx r0
- thumb_func_end atk17_seteffectsecondary
-
- thumb_func_start atk18_clearstatusfromeffect
-atk18_clearstatusfromeffect: @ 8021230
- push {lr}
- ldr r0, _08021254 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r2, _08021258 @ =gActiveBattler
- strb r0, [r2]
- ldr r3, _0802125C @ =gUnknown_2023E82
- ldrb r0, [r3, 0x3]
- cmp r0, 0x6
- bhi _08021264
- ldr r1, _08021260 @ =gBattleMons
- ldrb r2, [r2]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x4C
- b _0802126E
- .align 2, 0
-_08021254: .4byte gUnknown_2023D74
-_08021258: .4byte gActiveBattler
-_0802125C: .4byte gUnknown_2023E82
-_08021260: .4byte gBattleMons
-_08021264:
- ldr r1, _08021298 @ =gBattleMons
- ldrb r2, [r2]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
-_0802126E:
- adds r2, r1
- ldr r1, _0802129C @ =gUnknown_825053C
- ldrb r0, [r3, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- ldr r0, _080212A0 @ =gUnknown_2023E82
- movs r2, 0
- strb r2, [r0, 0x3]
- ldr r1, _080212A4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- ldr r0, _080212A8 @ =gBattleScripting
- strb r2, [r0, 0x16]
- pop {r0}
- bx r0
- .align 2, 0
-_08021298: .4byte gBattleMons
-_0802129C: .4byte gUnknown_825053C
-_080212A0: .4byte gUnknown_2023E82
-_080212A4: .4byte gUnknown_2023D74
-_080212A8: .4byte gBattleScripting
- thumb_func_end atk18_clearstatusfromeffect
-
- thumb_func_start atk19_tryfaintmon
-atk19_tryfaintmon: @ 80212AC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- ldr r0, _08021318 @ =gUnknown_2023D74
- ldr r2, [r0]
- ldrb r1, [r2, 0x2]
- adds r6, r0, 0
- cmp r1, 0
- beq _08021330
- ldrb r0, [r2, 0x1]
- bl sub_8016E24
- ldr r5, _0802131C @ =gActiveBattler
- strb r0, [r5]
- ldr r2, _08021320 @ =gUnknown_2023DD0
- ldr r1, _08021324 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- ands r0, r1
- cmp r0, 0
- bne _080212E4
- b _0802158C
-_080212E4:
- ldr r1, [r6]
- ldrb r4, [r1, 0x3]
- ldrb r0, [r1, 0x4]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r1, 0x6]
- lsls r0, 24
- orrs r4, r0
- bl BattleScriptPop
- str r4, [r6]
- ldrb r0, [r5]
- bl GetBattlerSide
- ldr r1, _08021328 @ =gSideAffecting
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r2, [r0]
- ldr r1, _0802132C @ =0x0000fdff
- ands r1, r2
- strh r1, [r0]
- b _08021592
- .align 2, 0
-_08021318: .4byte gUnknown_2023D74
-_0802131C: .4byte gActiveBattler
-_08021320: .4byte gUnknown_2023DD0
-_08021324: .4byte gBitTable
-_08021328: .4byte gSideAffecting
-_0802132C: .4byte 0x0000fdff
-_08021330:
- ldrb r0, [r2, 0x1]
- cmp r0, 0x1
- bne _08021358
- ldr r1, _08021348 @ =gActiveBattler
- ldr r0, _0802134C @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _08021350 @ =gBattlerTarget
- ldrb r0, [r0]
- mov r9, r0
- ldr r4, _08021354 @ =gUnknown_81D8674
- b _08021368
- .align 2, 0
-_08021348: .4byte gActiveBattler
-_0802134C: .4byte sBattler_AI
-_08021350: .4byte gBattlerTarget
-_08021354: .4byte gUnknown_81D8674
-_08021358:
- ldr r1, _080213D0 @ =gActiveBattler
- ldr r0, _080213D4 @ =gBattlerTarget
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _080213D8 @ =sBattler_AI
- ldrb r0, [r0]
- mov r9, r0
- ldr r4, _080213DC @ =gUnknown_81D8684
-_08021368:
- mov r8, r1
- ldr r0, _080213E0 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _080213E4 @ =gBitTable
- mov r7, r8
- ldrb r3, [r7]
- lsls r0, r3, 2
- adds r0, r2
- ldr r2, [r0]
- ands r1, r2
- cmp r1, 0
- beq _08021382
- b _0802158C
-_08021382:
- ldr r1, _080213E8 @ =gBattleMons
- movs r0, 0x58
- muls r0, r3
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08021392
- b _0802158C
-_08021392:
- ldr r5, _080213EC @ =gUnknown_2023DD0
- lsls r1, r2, 28
- ldr r0, [r5]
- orrs r0, r1
- str r0, [r5]
- ldr r0, [r6]
- adds r0, 0x7
- bl BattleScriptPush
- str r4, [r6]
- ldrb r0, [r7]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080213F4
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 15
- orrs r0, r1
- str r0, [r5]
- ldr r1, _080213F0 @ =gBattleResults
- ldrb r0, [r1]
- cmp r0, 0xFE
- bhi _080213C8
- adds r0, 0x1
- strb r0, [r1]
-_080213C8:
- ldrb r0, [r7]
- bl sub_802E228
- b _0802142C
- .align 2, 0
-_080213D0: .4byte gActiveBattler
-_080213D4: .4byte gBattlerTarget
-_080213D8: .4byte sBattler_AI
-_080213DC: .4byte gUnknown_81D8684
-_080213E0: .4byte gAbsentBattlerFlags
-_080213E4: .4byte gBitTable
-_080213E8: .4byte gBattleMons
-_080213EC: .4byte gUnknown_2023DD0
-_080213F0: .4byte gBattleResults
-_080213F4:
- ldr r4, _0802154C @ =gBattleResults
- ldrb r0, [r4, 0x1]
- cmp r0, 0xFE
- bhi _08021400
- adds r0, 0x1
- strb r0, [r4, 0x1]
-_08021400:
- ldr r1, _08021550 @ =gBattlerPartyIndexes
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08021554 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- strh r0, [r4, 0x20]
- ldr r0, _08021558 @ =gBattleStruct
- ldr r0, [r0]
- movs r3, 0xC1
- lsls r3, 1
- adds r1, r0, r3
- ldr r0, _0802155C @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r1]
-_0802142C:
- ldr r2, _08021560 @ =gUnknown_2023DD0
- ldr r1, [r2]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802146A
- ldr r6, _08021564 @ =gBattleMons
- ldr r0, _0802155C @ =sBattler_AI
- ldrb r0, [r0]
- movs r5, 0x58
- muls r0, r5
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0802146A
- movs r0, 0x41
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- ldr r4, _08021568 @ =gUnknown_2023D74
- ldr r0, [r4]
- bl BattleScriptPush
- ldr r1, _0802156C @ =gBattleMoveDamage
- mov r0, r9
- muls r0, r5
- adds r0, r6
- ldrh r0, [r0, 0x28]
- str r0, [r1]
- ldr r0, _08021570 @ =gUnknown_81D8C6C
- str r0, [r4]
-_0802146A:
- ldr r1, _08021574 @ =gStatuses3
- ldr r6, _08021578 @ =gBattlerTarget
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 7
- ands r0, r1
- cmp r0, 0
- bne _08021482
- b _08021592
-_08021482:
- ldr r0, _08021560 @ =gUnknown_2023DD0
- ldr r5, [r0]
- movs r0, 0x80
- lsls r0, 17
- ands r5, r0
- cmp r5, 0
- beq _08021492
- b _08021592
-_08021492:
- ldr r0, _0802155C @ =sBattler_AI
- mov r8, r0
- ldrb r0, [r0]
- bl GetBattlerSide
- adds r4, r0, 0
- ldrb r0, [r6]
- bl GetBattlerSide
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- beq _08021592
- ldr r1, _08021564 @ =gBattleMons
- mov r9, r1
- mov r2, r8
- ldrb r1, [r2]
- movs r7, 0x58
- adds r2, r1, 0
- muls r2, r7
- mov r3, r9
- adds r0, r2, r3
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08021592
- ldr r0, _0802157C @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xA5
- beq _08021592
- ldr r0, _08021558 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, r1, r0
- adds r0, 0x80
- ldrb r4, [r0]
- adds r0, r4, r2
- mov r6, r9
- adds r6, 0x24
- adds r0, r6
- strb r5, [r0]
- ldr r5, _08021568 @ =gUnknown_2023D74
- ldr r0, [r5]
- bl BattleScriptPush
- ldr r0, _08021580 @ =gUnknown_81D8FA3
- str r0, [r5]
- ldr r5, _08021584 @ =gActiveBattler
- mov r1, r8
- ldrb r0, [r1]
- strb r0, [r5]
- adds r1, r4, 0
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r5]
- muls r0, r7
- adds r0, r6
- adds r0, r4
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetMonData
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r1, _08021588 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- lsls r4, 1
- mov r2, r8
- ldrb r0, [r2]
- muls r0, r7
- adds r0, r4, r0
- mov r2, r9
- adds r2, 0xC
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- mov r3, r8
- ldrb r0, [r3]
- muls r0, r7
- adds r4, r0
- adds r4, r2
- ldrh r0, [r4]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- b _08021592
- .align 2, 0
-_0802154C: .4byte gBattleResults
-_08021550: .4byte gBattlerPartyIndexes
-_08021554: .4byte gEnemyParty
-_08021558: .4byte gBattleStruct
-_0802155C: .4byte sBattler_AI
-_08021560: .4byte gUnknown_2023DD0
-_08021564: .4byte gBattleMons
-_08021568: .4byte gUnknown_2023D74
-_0802156C: .4byte gBattleMoveDamage
-_08021570: .4byte gUnknown_81D8C6C
-_08021574: .4byte gStatuses3
-_08021578: .4byte gBattlerTarget
-_0802157C: .4byte gCurrentMove
-_08021580: .4byte gUnknown_81D8FA3
-_08021584: .4byte gActiveBattler
-_08021588: .4byte gBattleTextBuff1
-_0802158C:
- ldr r0, [r6]
- adds r0, 0x7
- str r0, [r6]
-_08021592:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk19_tryfaintmon
-
- thumb_func_start atk1A_faint_animation
-atk1A_faint_animation: @ 80215A0
- push {r4,r5,lr}
- ldr r0, _080215D0 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _080215CA
- ldr r5, _080215D4 @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _080215D8 @ =gActiveBattler
- strb r0, [r4]
- movs r0, 0
- bl EmitFaintAnimation
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_080215CA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080215D0: .4byte gUnknown_2023BC8
-_080215D4: .4byte gUnknown_2023D74
-_080215D8: .4byte gActiveBattler
- thumb_func_end atk1A_faint_animation
-
- thumb_func_start atk1B_faint_effects_clear
-atk1B_faint_effects_clear: @ 80215DC
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r0, _08021630 @ =gUnknown_2023BC8
- ldr r6, [r0]
- cmp r6, 0
- bne _08021628
- ldr r5, _08021634 @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _08021638 @ =gActiveBattler
- strb r0, [r4]
- ldr r1, _0802163C @ =gBattleMons
- ldrb r0, [r4]
- movs r2, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r0, r1
- str r6, [r0]
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- bl sub_8012BC8
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_08021628:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08021630: .4byte gUnknown_2023BC8
-_08021634: .4byte gUnknown_2023D74
-_08021638: .4byte gActiveBattler
-_0802163C: .4byte gBattleMons
- thumb_func_end atk1B_faint_effects_clear
-
- thumb_func_start atk1C_jumpifstatus
-atk1C_jumpifstatus: @ 8021640
- push {r4,r5,lr}
- ldr r5, _0802169C @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [r5]
- ldrb r4, [r2, 0x2]
- ldrb r1, [r2, 0x3]
- lsls r1, 8
- adds r4, r1
- ldrb r1, [r2, 0x4]
- lsls r1, 16
- adds r4, r1
- ldrb r1, [r2, 0x5]
- lsls r1, 24
- adds r4, r1
- ldrb r3, [r2, 0x6]
- ldrb r1, [r2, 0x7]
- lsls r1, 8
- adds r3, r1
- ldrb r1, [r2, 0x8]
- lsls r1, 16
- adds r3, r1
- ldrb r1, [r2, 0x9]
- lsls r1, 24
- adds r3, r1
- ldr r2, _080216A0 @ =gBattleMons
- movs r1, 0x58
- muls r1, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _080216A4
- adds r0, r1, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _080216A4
- str r3, [r5]
- b _080216AC
- .align 2, 0
-_0802169C: .4byte gUnknown_2023D74
-_080216A0: .4byte gBattleMons
-_080216A4:
- ldr r1, _080216B4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
-_080216AC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080216B4: .4byte gUnknown_2023D74
- thumb_func_end atk1C_jumpifstatus
-
- thumb_func_start atk1D_jumpifstatus2
-atk1D_jumpifstatus2: @ 80216B8
- push {r4,r5,lr}
- ldr r5, _08021714 @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [r5]
- ldrb r4, [r2, 0x2]
- ldrb r1, [r2, 0x3]
- lsls r1, 8
- adds r4, r1
- ldrb r1, [r2, 0x4]
- lsls r1, 16
- adds r4, r1
- ldrb r1, [r2, 0x5]
- lsls r1, 24
- adds r4, r1
- ldrb r3, [r2, 0x6]
- ldrb r1, [r2, 0x7]
- lsls r1, 8
- adds r3, r1
- ldrb r1, [r2, 0x8]
- lsls r1, 16
- adds r3, r1
- ldrb r1, [r2, 0x9]
- lsls r1, 24
- adds r3, r1
- ldr r2, _08021718 @ =gBattleMons
- movs r1, 0x58
- muls r1, r0
- adds r0, r2, 0
- adds r0, 0x50
- adds r0, r1, r0
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _0802171C
- adds r0, r1, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0802171C
- str r3, [r5]
- b _08021724
- .align 2, 0
-_08021714: .4byte gUnknown_2023D74
-_08021718: .4byte gBattleMons
-_0802171C:
- ldr r1, _0802172C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
-_08021724:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802172C: .4byte gUnknown_2023D74
- thumb_func_end atk1D_jumpifstatus2
-
- thumb_func_start atk1E_jumpifability
-atk1E_jumpifability: @ 8021730
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- ldr r6, _08021784 @ =gUnknown_2023D74
- ldr r2, [r6]
- ldrb r5, [r2, 0x2]
- mov r8, r5
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x4]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 24
- adds r7, r1, r0
- ldrb r0, [r2, 0x1]
- cmp r0, 0x8
- bne _08021790
- ldr r0, _08021788 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0xD
- adds r2, r5, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _08021804
- ldr r1, _0802178C @ =gLastUsedAbility
- strb r5, [r1]
- str r7, [r6]
- subs r4, 0x1
- lsls r0, r4, 24
- lsrs r0, 24
- ldrb r1, [r1]
- b _080217EC
- .align 2, 0
-_08021784: .4byte gUnknown_2023D74
-_08021788: .4byte sBattler_AI
-_0802178C: .4byte gLastUsedAbility
-_08021790:
- cmp r0, 0x9
- bne _080217C8
- ldr r0, _080217C0 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0xC
- adds r2, r5, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _08021804
- ldr r1, _080217C4 @ =gLastUsedAbility
- strb r5, [r1]
- str r7, [r6]
- subs r4, 0x1
- lsls r0, r4, 24
- lsrs r0, 24
- ldrb r1, [r1]
- b _080217EC
- .align 2, 0
-_080217C0: .4byte sBattler_AI
-_080217C4: .4byte gLastUsedAbility
-_080217C8:
- ldrb r0, [r2, 0x1]
- bl sub_8016E24
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _080217F8 @ =gBattleMons
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- adds r0, 0x20
- ldrb r1, [r0]
- cmp r1, r8
- bne _08021804
- ldr r0, _080217FC @ =gLastUsedAbility
- strb r1, [r0]
- str r7, [r6]
- ldrb r1, [r0]
- adds r0, r4, 0
-_080217EC:
- bl sub_80C71D0
- ldr r0, _08021800 @ =gBattleScripting
- strb r4, [r0, 0x15]
- b _0802180A
- .align 2, 0
-_080217F8: .4byte gBattleMons
-_080217FC: .4byte gLastUsedAbility
-_08021800: .4byte gBattleScripting
-_08021804:
- ldr r0, [r6]
- adds r0, 0x7
- str r0, [r6]
-_0802180A:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk1E_jumpifability
-
- thumb_func_start atk1F_jumpifsideaffecting
-atk1F_jumpifsideaffecting: @ 8021818
- push {r4-r6,lr}
- ldr r0, _08021830 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r4, [r0, 0x1]
- cmp r4, 0x1
- bne _08021838
- ldr r0, _08021834 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerPosition
- b _08021842
- .align 2, 0
-_08021830: .4byte gUnknown_2023D74
-_08021834: .4byte sBattler_AI
-_08021838:
- ldr r0, _08021878 @ =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerPosition
- movs r4, 0x1
-_08021842:
- ands r4, r0
- ldr r6, _0802187C @ =gUnknown_2023D74
- ldr r3, [r6]
- ldrb r2, [r3, 0x2]
- ldrb r0, [r3, 0x3]
- lsls r0, 8
- orrs r2, r0
- ldrb r1, [r3, 0x4]
- ldrb r0, [r3, 0x5]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0x6]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0x7]
- lsls r0, 24
- adds r5, r1, r0
- ldr r1, _08021880 @ =gSideAffecting
- lsls r0, r4, 1
- adds r0, r1
- ldrh r0, [r0]
- ands r2, r0
- cmp r2, 0
- beq _08021884
- str r5, [r6]
- b _0802188A
- .align 2, 0
-_08021878: .4byte gBattlerTarget
-_0802187C: .4byte gUnknown_2023D74
-_08021880: .4byte gSideAffecting
-_08021884:
- adds r0, r3, 0
- adds r0, 0x8
- str r0, [r6]
-_0802188A:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk1F_jumpifsideaffecting
-
- thumb_func_start atk20_jumpifstat
-atk20_jumpifstat: @ 8021890
- push {r4,r5,lr}
- movs r5, 0
- ldr r4, _080218C4 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080218C8 @ =gBattleMons
- ldr r3, [r4]
- movs r1, 0x58
- muls r0, r1
- ldrb r1, [r3, 0x3]
- adds r0, r1
- adds r2, 0x18
- adds r0, r2
- ldrb r2, [r0]
- ldrb r0, [r3, 0x2]
- cmp r0, 0x5
- bhi _0802194E
- lsls r0, 2
- ldr r1, _080218CC @ =_080218D0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080218C4: .4byte gUnknown_2023D74
-_080218C8: .4byte gBattleMons
-_080218CC: .4byte _080218D0
- .align 2, 0
-_080218D0:
- .4byte _080218E8
- .4byte _080218F8
- .4byte _08021908
- .4byte _08021918
- .4byte _08021928
- .4byte _0802193C
-_080218E8:
- ldr r0, _080218F4 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r2, r0
- bne _0802194E
- b _08021948
- .align 2, 0
-_080218F4: .4byte gUnknown_2023D74
-_080218F8:
- ldr r0, _08021904 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r2, r0
- beq _0802194E
- b _08021948
- .align 2, 0
-_08021904: .4byte gUnknown_2023D74
-_08021908:
- ldr r0, _08021914 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r2, r0
- bls _0802194E
- b _08021948
- .align 2, 0
-_08021914: .4byte gUnknown_2023D74
-_08021918:
- ldr r0, _08021924 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r2, r0
- bcs _0802194E
- b _08021948
- .align 2, 0
-_08021924: .4byte gUnknown_2023D74
-_08021928:
- ldr r0, _08021938 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- ands r2, r0
- cmp r2, 0
- beq _0802194E
- b _08021948
- .align 2, 0
-_08021938: .4byte gUnknown_2023D74
-_0802193C:
- ldr r0, _08021970 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- ands r2, r0
- cmp r2, 0
- bne _0802194E
-_08021948:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_0802194E:
- cmp r5, 0
- beq _08021974
- ldr r3, _08021970 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x5]
- ldrb r0, [r2, 0x6]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 24
- adds r1, r0
- str r1, [r3]
- b _0802197C
- .align 2, 0
-_08021970: .4byte gUnknown_2023D74
-_08021974:
- ldr r1, _08021984 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x9
- str r0, [r1]
-_0802197C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08021984: .4byte gUnknown_2023D74
- thumb_func_end atk20_jumpifstat
-
- thumb_func_start atk21_jumpifstatus3condition
-atk21_jumpifstatus3condition: @ 8021988
- push {r4-r6,lr}
- ldr r4, _080219DC @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r5, _080219E0 @ =gActiveBattler
- strb r0, [r5]
- ldr r2, [r4]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- adds r6, r1, r0
- ldrb r1, [r2, 0x7]
- ldrb r0, [r2, 0x8]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x9]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0xA]
- lsls r0, 24
- adds r3, r1, r0
- ldrb r0, [r2, 0x6]
- cmp r0, 0
- beq _080219E8
- ldr r0, _080219E4 @ =gStatuses3
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- ands r0, r6
- cmp r0, 0
- bne _08021A00
- b _080219F8
- .align 2, 0
-_080219DC: .4byte gUnknown_2023D74
-_080219E0: .4byte gActiveBattler
-_080219E4: .4byte gStatuses3
-_080219E8:
- ldr r0, _080219FC @ =gStatuses3
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- ands r0, r6
- cmp r0, 0
- beq _08021A00
-_080219F8:
- str r3, [r4]
- b _08021A06
- .align 2, 0
-_080219FC: .4byte gStatuses3
-_08021A00:
- adds r0, r2, 0
- adds r0, 0xB
- str r0, [r4]
-_08021A06:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk21_jumpifstatus3condition
-
- thumb_func_start atk22_jumpiftype
-atk22_jumpiftype: @ 8021A0C
- push {r4-r6,lr}
- ldr r4, _08021A54 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- lsls r0, 24
- lsrs r0, 24
- ldr r3, [r4]
- ldrb r5, [r3, 0x2]
- ldrb r2, [r3, 0x3]
- ldrb r1, [r3, 0x4]
- lsls r1, 8
- adds r2, r1
- ldrb r1, [r3, 0x5]
- lsls r1, 16
- adds r2, r1
- ldrb r1, [r3, 0x6]
- lsls r1, 24
- adds r6, r2, r1
- ldr r2, _08021A58 @ =gBattleMons
- movs r1, 0x58
- muls r0, r1
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r5
- beq _08021A50
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r5
- bne _08021A5C
-_08021A50:
- str r6, [r4]
- b _08021A60
- .align 2, 0
-_08021A54: .4byte gUnknown_2023D74
-_08021A58: .4byte gBattleMons
-_08021A5C:
- adds r0, r3, 0x7
- str r0, [r4]
-_08021A60:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk22_jumpiftype
-
- thumb_func_start sub_8021A68
-sub_8021A68: @ 8021A68
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r6, 0
- ldr r0, _08021AB0 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x50
- mov r9, r0
- ldr r0, _08021AB4 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r1, _08021AB8 @ =gUnknown_2023D6D
- strb r0, [r1]
- ldr r2, _08021ABC @ =gUnknown_2023F4E
- movs r1, 0x2
- ands r1, r0
- lsls r1, 24
- lsrs r1, 25
- adds r1, r2
- ldrb r1, [r1]
- mov r8, r1
- ldr r0, _08021AC0 @ =gBattleScripting
- ldrb r0, [r0, 0x1C]
- cmp r0, 0x6
- bls _08021AA4
- bl _080223DA
-_08021AA4:
- lsls r0, 2
- ldr r1, _08021AC4 @ =_08021AC8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08021AB0: .4byte gBattleStruct
-_08021AB4: .4byte gUnknown_2023D74
-_08021AB8: .4byte gUnknown_2023D6D
-_08021ABC: .4byte gUnknown_2023F4E
-_08021AC0: .4byte gBattleScripting
-_08021AC4: .4byte _08021AC8
- .align 2, 0
-_08021AC8:
- .4byte _08021AE4
- .4byte _08021B50
- .4byte _08021C6A
- .4byte _08021F78
- .4byte _0802207C
- .4byte _08022368
- .4byte _080223B0
-_08021AE4:
- ldr r4, _08021B34 @ =gUnknown_2023D6D
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08021AF8
- bl _080223A4
-_08021AF8:
- ldr r0, _08021B38 @ =gBattleTypeFlags
- ldr r0, [r0]
- ldr r1, _08021B3C @ =0x00080982
- ands r0, r1
- cmp r0, 0
- beq _08021B08
- bl _080223A4
-_08021B08:
- ldr r1, _08021B40 @ =gBattleScripting
- ldrb r0, [r1, 0x1C]
- adds r0, 0x1
- strb r0, [r1, 0x1C]
- ldr r0, _08021B44 @ =gBattleStruct
- ldr r2, [r0]
- adds r2, 0xDF
- ldr r3, _08021B48 @ =gBitTable
- ldr r1, _08021B4C @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- bl _080223DA
- .align 2, 0
-_08021B34: .4byte gUnknown_2023D6D
-_08021B38: .4byte gBattleTypeFlags
-_08021B3C: .4byte 0x00080982
-_08021B40: .4byte gBattleScripting
-_08021B44: .4byte gBattleStruct
-_08021B48: .4byte gBitTable
-_08021B4C: .4byte gBattlerPartyIndexes
-_08021B50:
- movs r5, 0
- movs r7, 0
-_08021B54:
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _08021BA4 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08021BC2
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08021BC2
- ldr r0, _08021BA8 @ =gBitTable
- lsls r1, r7, 2
- adds r1, r0
- ldr r0, [r1]
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- beq _08021B88
- adds r5, 0x1
-_08021B88:
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _08021BB4
- ldr r0, _08021BAC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, _08021BB0 @ =0x0000311a
- adds r0, r2
- ldrb r4, [r0]
- b _08021BBC
- .align 2, 0
-_08021BA4: .4byte gPlayerParty
-_08021BA8: .4byte gBitTable
-_08021BAC: .4byte gSaveBlock1Ptr
-_08021BB0: .4byte 0x0000311a
-_08021BB4:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
-_08021BBC:
- cmp r4, 0x19
- bne _08021BC2
- adds r6, 0x1
-_08021BC2:
- adds r7, 0x1
- cmp r7, 0x5
- ble _08021B54
- ldr r3, _08021C28 @ =gBaseStats
- ldr r2, _08021C2C @ =gBattleMons
- ldr r0, _08021C30 @ =gUnknown_2023D6D
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r1, r2
- ldrh r2, [r1]
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r2, [r0, 0x9]
- adds r1, 0x2A
- ldrb r0, [r1]
- muls r0, r2
- movs r1, 0x7
- bl __divsi3
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r6, 0
- beq _08021C38
- lsrs r4, r0, 17
- adds r0, r4, 0
- adds r1, r5, 0
- bl __divsi3
- mov r1, r9
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bne _08021C0E
- movs r0, 0x1
- strh r0, [r1]
-_08021C0E:
- ldr r5, _08021C34 @ =gUnknown_2023F52
- adds r0, r4, 0
- adds r1, r6, 0
- bl __divsi3
- strh r0, [r5]
- lsls r0, 16
- cmp r0, 0
- bne _08021C52
- movs r0, 0x1
- strh r0, [r5]
- b _08021C52
- .align 2, 0
-_08021C28: .4byte gBaseStats
-_08021C2C: .4byte gBattleMons
-_08021C30: .4byte gUnknown_2023D6D
-_08021C34: .4byte gUnknown_2023F52
-_08021C38:
- adds r0, r1, 0
- adds r1, r5, 0
- bl __divsi3
- mov r2, r9
- strh r0, [r2]
- lsls r0, 16
- cmp r0, 0
- bne _08021C4E
- movs r0, 0x1
- strh r0, [r2]
-_08021C4E:
- ldr r0, _08021C9C @ =gUnknown_2023F52
- strh r6, [r0]
-_08021C52:
- ldr r1, _08021CA0 @ =gBattleScripting
- ldrb r0, [r1, 0x1C]
- adds r0, 0x1
- movs r2, 0
- strb r0, [r1, 0x1C]
- ldr r1, _08021CA4 @ =gBattleStruct
- ldr r0, [r1]
- strb r2, [r0, 0x10]
- ldr r0, [r1]
- adds r0, 0x53
- mov r4, r8
- strb r4, [r0]
-_08021C6A:
- ldr r0, _08021CA8 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _08021C74
- b _080223DA
-_08021C74:
- ldr r0, _08021CA4 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r1, [r0, 0x10]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08021CAC @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _08021CB8
- ldr r0, _08021CB0 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08021CB4 @ =0x0000311a
- adds r0, r1
- ldrb r4, [r0]
- b _08021CC0
- .align 2, 0
-_08021C9C: .4byte gUnknown_2023F52
-_08021CA0: .4byte gBattleScripting
-_08021CA4: .4byte gBattleStruct
-_08021CA8: .4byte gUnknown_2023BC8
-_08021CAC: .4byte gPlayerParty
-_08021CB0: .4byte gSaveBlock1Ptr
-_08021CB4: .4byte 0x0000311a
-_08021CB8:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
-_08021CC0:
- ldr r5, _08021CE0 @ =gBattleStruct
- cmp r4, 0x19
- beq _08021CE8
- ldr r0, [r5]
- adds r1, r0, 0
- adds r1, 0x53
- ldrb r0, [r1]
- movs r2, 0x1
- ands r2, r0
- cmp r2, 0
- bne _08021CE8
- lsrs r0, 1
- strb r0, [r1]
- ldr r1, _08021CE4 @ =gBattleScripting
- b _08021D0C
- .align 2, 0
-_08021CE0: .4byte gBattleStruct
-_08021CE4: .4byte gBattleScripting
-_08021CE8:
- ldr r0, [r5]
- ldrb r1, [r0, 0x10]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08021D18 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x64
- bne _08021D24
- ldr r1, [r5]
- adds r1, 0x53
- ldrb r0, [r1]
- lsrs r0, 1
- strb r0, [r1]
- ldr r1, _08021D1C @ =gBattleScripting
- movs r2, 0
-_08021D0C:
- movs r0, 0x5
- strb r0, [r1, 0x1C]
- ldr r0, _08021D20 @ =gBattleMoveDamage
- str r2, [r0]
- b _080223DA
- .align 2, 0
-_08021D18: .4byte gPlayerParty
-_08021D1C: .4byte gBattleScripting
-_08021D20: .4byte gBattleMoveDamage
-_08021D24:
- ldr r0, _08021D88 @ =gBattleTypeFlags
- ldr r0, [r0]
- ldr r1, _08021D8C @ =0x00010008
- ands r0, r1
- cmp r0, 0
- bne _08021D52
- ldr r0, _08021D90 @ =gBattleMons
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08021D52
- ldr r0, [r5]
- ldrb r0, [r0, 0x12]
- cmp r0, 0
- bne _08021D52
- bl BattleStopLowHpSound
- ldr r0, _08021D94 @ =0x00000137
- bl PlayBGM
- ldr r1, [r5]
- ldrb r0, [r1, 0x12]
- adds r0, 0x1
- strb r0, [r1, 0x12]
-_08021D52:
- ldr r5, _08021D98 @ =gBattleStruct
- ldr r0, [r5]
- ldrb r1, [r0, 0x10]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08021D9C @ =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _08021D6C
- b _08021F4C
-_08021D6C:
- ldr r0, [r5]
- adds r0, 0x53
- ldrb r0, [r0]
- movs r3, 0x1
- ands r3, r0
- cmp r3, 0
- beq _08021DA4
- ldr r1, _08021DA0 @ =gBattleMoveDamage
- mov r2, r9
- ldrh r0, [r2]
- str r0, [r1]
- mov r9, r1
- b _08021DAA
- .align 2, 0
-_08021D88: .4byte gBattleTypeFlags
-_08021D8C: .4byte 0x00010008
-_08021D90: .4byte gBattleMons
-_08021D94: .4byte 0x00000137
-_08021D98: .4byte gBattleStruct
-_08021D9C: .4byte gPlayerParty
-_08021DA0: .4byte gBattleMoveDamage
-_08021DA4:
- ldr r0, _08021E28 @ =gBattleMoveDamage
- str r3, [r0]
- mov r9, r0
-_08021DAA:
- cmp r4, 0x19
- bne _08021DBA
- ldr r0, _08021E2C @ =gUnknown_2023F52
- ldrh r1, [r0]
- mov r2, r9
- ldr r0, [r2]
- adds r0, r1
- str r0, [r2]
-_08021DBA:
- cmp r4, 0x28
- bne _08021DCE
- mov r4, r9
- ldr r1, [r4]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
-_08021DCE:
- ldr r5, _08021E30 @ =gBattleTypeFlags
- ldr r0, [r5]
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08021DEA
- ldr r4, _08021E28 @ =gBattleMoveDamage
- ldr r1, [r4]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
-_08021DEA:
- ldr r0, _08021E34 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r1, [r0, 0x10]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08021E38 @ =gPlayerParty
- adds r0, r1
- bl IsTradedMon
- lsls r0, 24
- cmp r0, 0
- beq _08021E3C
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 9
- ands r0, r1
- cmp r0, 0
- bne _08021E3C
- ldr r4, _08021E28 @ =gBattleMoveDamage
- ldr r1, [r4]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- movs r7, 0xA5
- lsls r7, 1
- mov r9, r4
- b _08021E42
- .align 2, 0
-_08021E28: .4byte gBattleMoveDamage
-_08021E2C: .4byte gUnknown_2023F52
-_08021E30: .4byte gBattleTypeFlags
-_08021E34: .4byte gBattleStruct
-_08021E38: .4byte gPlayerParty
-_08021E3C:
- ldr r7, _08021E78 @ =0x00000149
- ldr r0, _08021E7C @ =gBattleMoveDamage
- mov r9, r0
-_08021E42:
- ldr r0, _08021E80 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08021EAE
- ldr r0, _08021E84 @ =gBattlerPartyIndexes
- ldr r1, _08021E88 @ =gBattleStruct
- ldr r4, [r1]
- ldrh r0, [r0, 0x4]
- adds r5, r1, 0
- ldr r3, _08021E8C @ =gBitTable
- ldr r2, _08021E90 @ =gAbsentBattlerFlags
- ldrb r1, [r4, 0x10]
- cmp r0, r1
- bne _08021E94
- ldrb r1, [r2]
- ldr r0, [r3, 0x8]
- ands r1, r0
- cmp r1, 0
- bne _08021E94
- adds r1, r4, 0
- adds r1, 0x8F
- movs r0, 0x2
- strb r0, [r1]
- b _08021EB6
- .align 2, 0
-_08021E78: .4byte 0x00000149
-_08021E7C: .4byte gBattleMoveDamage
-_08021E80: .4byte gBattleTypeFlags
-_08021E84: .4byte gBattlerPartyIndexes
-_08021E88: .4byte gBattleStruct
-_08021E8C: .4byte gBitTable
-_08021E90: .4byte gAbsentBattlerFlags
-_08021E94:
- ldrb r2, [r2]
- ldr r0, [r3]
- ands r2, r0
- cmp r2, 0
- bne _08021EA6
- ldr r0, [r5]
- adds r0, 0x8F
- strb r2, [r0]
- b _08021EB6
-_08021EA6:
- ldr r0, [r5]
- adds r0, 0x8F
- movs r1, 0x2
- b _08021EB4
-_08021EAE:
- ldr r0, _08021F5C @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x8F
-_08021EB4:
- strb r1, [r0]
-_08021EB6:
- ldr r1, _08021F60 @ =gBattleTextBuff1
- movs r2, 0
- mov r12, r2
- movs r3, 0xFD
- strb r3, [r1]
- movs r5, 0x4
- strb r5, [r1, 0x1]
- ldr r6, _08021F5C @ =gBattleStruct
- ldr r2, [r6]
- movs r4, 0x8F
- adds r4, r2
- mov r8, r4
- ldrb r0, [r4]
- strb r0, [r1, 0x2]
- ldrb r0, [r2, 0x10]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _08021F64 @ =gBattleTextBuff2
- strb r3, [r1]
- mov r0, r12
- strb r0, [r1, 0x1]
- strb r7, [r1, 0x2]
- movs r4, 0xFF
- lsls r4, 8
- ands r7, r4
- asrs r0, r7, 8
- strb r0, [r1, 0x3]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r1, 0x4]
- ldr r1, _08021F68 @ =gUnknown_2022AD8
- strb r3, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- strb r5, [r1, 0x2]
- movs r0, 0x5
- strb r0, [r1, 0x3]
- mov r0, r9
- ldr r2, [r0]
- strb r2, [r1, 0x4]
- adds r0, r2, 0
- ands r0, r4
- asrs r0, 8
- strb r0, [r1, 0x5]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r2
- asrs r0, 16
- strb r0, [r1, 0x6]
- lsrs r2, 24
- strb r2, [r1, 0x7]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r1, 0x8]
- mov r2, r8
- ldrb r1, [r2]
- movs r0, 0xD
- bl PrepareStringBattle
- ldr r0, [r6]
- ldrb r1, [r0, 0x10]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08021F6C @ =gPlayerParty
- adds r0, r1
- ldr r3, _08021F70 @ =gBattleMons
- ldr r1, _08021F74 @ =gUnknown_2023D6D
- ldrb r2, [r1]
- movs r1, 0x58
- muls r1, r2
- adds r1, r3
- ldrh r1, [r1]
- bl MonGainEVs
-_08021F4C:
- ldr r0, _08021F5C @ =gBattleStruct
- ldr r1, [r0]
- adds r1, 0x53
- ldrb r0, [r1]
- lsrs r0, 1
- strb r0, [r1]
- b _08022052
- .align 2, 0
-_08021F5C: .4byte gBattleStruct
-_08021F60: .4byte gBattleTextBuff1
-_08021F64: .4byte gBattleTextBuff2
-_08021F68: .4byte gUnknown_2022AD8
-_08021F6C: .4byte gPlayerParty
-_08021F70: .4byte gBattleMons
-_08021F74: .4byte gUnknown_2023D6D
-_08021F78:
- ldr r0, _0802205C @ =gUnknown_2023BC8
- ldr r2, [r0]
- cmp r2, 0
- beq _08021F82
- b _080223DA
-_08021F82:
- ldr r1, _08022060 @ =gUnknown_20233C4
- ldr r7, _08022064 @ =gBattleStruct
- ldr r0, [r7]
- adds r0, 0x8F
- ldrb r0, [r0]
- lsls r0, 9
- adds r0, r1
- strb r2, [r0]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _08022068 @ =gPlayerParty
- adds r0, r5
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08022052
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r6
- adds r0, r5
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x64
- beq _08022052
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3A
- bl GetMonData
- ldr r4, _0802206C @ =gBattleResources
- ldr r1, [r4]
- ldr r1, [r1, 0x10]
- strh r0, [r1]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3B
- bl GetMonData
- ldr r1, [r4]
- ldr r1, [r1, 0x10]
- strh r0, [r1, 0x2]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3C
- bl GetMonData
- ldr r1, [r4]
- ldr r1, [r1, 0x10]
- strh r0, [r1, 0x4]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3D
- bl GetMonData
- ldr r1, [r4]
- ldr r1, [r1, 0x10]
- strh r0, [r1, 0x6]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3E
- bl GetMonData
- ldr r1, [r4]
- ldr r1, [r1, 0x10]
- strh r0, [r1, 0x8]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r6
- adds r0, r5
- movs r1, 0x3F
- bl GetMonData
- ldr r1, [r4]
- ldr r1, [r1, 0x10]
- strh r0, [r1, 0xA]
- ldr r4, _08022070 @ =gActiveBattler
- ldr r1, [r7]
- adds r0, r1, 0
- adds r0, 0x8F
- ldrb r0, [r0]
- strb r0, [r4]
- ldrb r1, [r1, 0x10]
- ldr r0, _08022074 @ =gBattleMoveDamage
- ldrh r2, [r0]
- movs r0, 0
- bl EmitExpUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08022052:
- ldr r1, _08022078 @ =gBattleScripting
- ldrb r0, [r1, 0x1C]
- adds r0, 0x1
- strb r0, [r1, 0x1C]
- b _080223DA
- .align 2, 0
-_0802205C: .4byte gUnknown_2023BC8
-_08022060: .4byte gUnknown_20233C4
-_08022064: .4byte gBattleStruct
-_08022068: .4byte gPlayerParty
-_0802206C: .4byte gBattleResources
-_08022070: .4byte gActiveBattler
-_08022074: .4byte gBattleMoveDamage
-_08022078: .4byte gBattleScripting
-_0802207C:
- ldr r0, _08022314 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _08022086
- b _080223DA
-_08022086:
- ldr r1, _08022318 @ =gActiveBattler
- ldr r0, _0802231C @ =gBattleStruct
- ldr r4, [r0]
- adds r0, r4, 0
- adds r0, 0x8F
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r3, _08022320 @ =gUnknown_20233C4
- ldrb r2, [r1]
- lsls r1, r2, 9
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0x21
- beq _080220A4
- b _08022350
-_080220A4:
- adds r0, r3, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0xB
- beq _080220B0
- b _08022350
-_080220B0:
- ldr r0, _08022324 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080220DA
- ldr r0, _08022328 @ =gBattlerPartyIndexes
- lsls r1, r2, 1
- adds r1, r0
- ldrh r0, [r1]
- ldrb r4, [r4, 0x10]
- cmp r0, r4
- bne _080220DA
- adds r1, r0, 0
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802232C @ =gPlayerParty
- adds r0, r1
- adds r1, r2, 0
- bl HandleLowHpMusicChange
-_080220DA:
- ldr r1, _08022330 @ =gBattleTextBuff1
- movs r3, 0xFD
- strb r3, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- ldr r6, _08022318 @ =gActiveBattler
- ldrb r0, [r6]
- strb r0, [r1, 0x2]
- ldr r4, _0802231C @ =gBattleStruct
- mov r9, r4
- ldr r2, [r4]
- ldrb r0, [r2, 0x10]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r4, _08022334 @ =gBattleTextBuff2
- strb r3, [r4]
- movs r0, 0x1
- strb r0, [r4, 0x1]
- strb r0, [r4, 0x2]
- movs r0, 0x3
- strb r0, [r4, 0x3]
- ldrb r0, [r2, 0x10]
- movs r1, 0x64
- mov r8, r1
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- ldr r7, _0802232C @ =gPlayerParty
- adds r0, r7
- movs r1, 0x38
- bl GetMonData
- strb r0, [r4, 0x4]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r4, 0x5]
- bl BattleScriptPushCursor
- ldr r2, _08022338 @ =gUnknown_3004FD4
- ldr r1, _0802233C @ =gBitTable
- mov r4, r9
- ldr r5, [r4]
- ldrb r0, [r5, 0x10]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08022340 @ =gUnknown_2023D74
- ldr r0, _08022344 @ =gUnknown_81D89F5
- str r0, [r1]
- ldr r4, _08022348 @ =gBattleMoveDamage
- ldr r2, _08022320 @ =gUnknown_20233C4
- ldrb r1, [r6]
- lsls r1, 9
- adds r0, r2, 0x2
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r2, 0x3
- adds r1, r2
- ldrb r0, [r1]
- lsls r0, 8
- orrs r3, r0
- str r3, [r4]
- ldrb r0, [r5, 0x10]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- movs r1, 0
- bl AdjustFriendship
- ldr r1, _08022328 @ =gBattlerPartyIndexes
- mov r2, r9
- ldr r0, [r2]
- ldrb r2, [r0, 0x10]
- ldrh r0, [r1]
- cmp r0, r2
- bne _08022246
- ldr r4, _0802234C @ =gBattleMons
- ldrh r0, [r4, 0x28]
- cmp r0, 0
- beq _08022246
- mov r0, r8
- muls r0, r2
- adds r0, r7
- movs r1, 0x38
- bl GetMonData
- adds r1, r4, 0
- adds r1, 0x2A
- strb r0, [r1]
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x39
- bl GetMonData
- strh r0, [r4, 0x28]
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r4, 0x2C]
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3B
- bl GetMonData
- strh r0, [r4, 0x2]
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3C
- bl GetMonData
- strh r0, [r4, 0x4]
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3D
- bl GetMonData
- strh r0, [r4, 0x6]
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3D
- bl GetMonData
- strh r0, [r4, 0x6]
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3E
- bl GetMonData
- strh r0, [r4, 0x8]
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- movs r1, 0x3F
- bl GetMonData
- strh r0, [r4, 0xA]
-_08022246:
- ldr r0, _08022328 @ =gBattlerPartyIndexes
- ldr r7, _0802231C @ =gBattleStruct
- ldr r1, [r7]
- ldrb r2, [r1, 0x10]
- ldrh r0, [r0, 0x4]
- cmp r0, r2
- beq _08022256
- b _08022356
-_08022256:
- ldr r6, _0802234C @ =gBattleMons
- movs r4, 0xD8
- adds r4, r6
- mov r8, r4
- ldrh r0, [r4]
- cmp r0, 0
- beq _08022356
- ldr r0, _08022324 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08022356
- movs r5, 0x64
- adds r0, r2, 0
- muls r0, r5
- ldr r4, _0802232C @ =gPlayerParty
- adds r0, r4
- movs r1, 0x38
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xDA
- strb r0, [r1]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r5
- adds r0, r4
- movs r1, 0x39
- bl GetMonData
- mov r1, r8
- strh r0, [r1]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3A
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xDC
- strh r0, [r1]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3B
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xB2
- strh r0, [r1]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3C
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xB4
- strh r0, [r1]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3D
- bl GetMonData
- movs r2, 0xB6
- adds r2, r6
- mov r8, r2
- strh r0, [r2]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3D
- bl GetMonData
- mov r1, r8
- strh r0, [r1]
- ldr r0, [r7]
- ldrb r0, [r0, 0x10]
- muls r0, r5
- adds r0, r4
- movs r1, 0x3E
- bl GetMonData
- adds r1, r6, 0
- adds r1, 0xB8
- strh r0, [r1]
- b _08022356
- .align 2, 0
-_08022314: .4byte gUnknown_2023BC8
-_08022318: .4byte gActiveBattler
-_0802231C: .4byte gBattleStruct
-_08022320: .4byte gUnknown_20233C4
-_08022324: .4byte gBattleTypeFlags
-_08022328: .4byte gBattlerPartyIndexes
-_0802232C: .4byte gPlayerParty
-_08022330: .4byte gBattleTextBuff1
-_08022334: .4byte gBattleTextBuff2
-_08022338: .4byte gUnknown_3004FD4
-_0802233C: .4byte gBitTable
-_08022340: .4byte gUnknown_2023D74
-_08022344: .4byte gUnknown_81D89F5
-_08022348: .4byte gBattleMoveDamage
-_0802234C: .4byte gBattleMons
-_08022350:
- ldr r1, _08022360 @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
-_08022356:
- ldr r1, _08022364 @ =gBattleScripting
- movs r0, 0x5
- strb r0, [r1, 0x1C]
- b _080223DA
- .align 2, 0
-_08022360: .4byte gBattleMoveDamage
-_08022364: .4byte gBattleScripting
-_08022368:
- ldr r0, _08022378 @ =gBattleMoveDamage
- ldr r0, [r0]
- cmp r0, 0
- beq _08022380
- ldr r1, _0802237C @ =gBattleScripting
- movs r0, 0x3
- strb r0, [r1, 0x1C]
- b _080223DA
- .align 2, 0
-_08022378: .4byte gBattleMoveDamage
-_0802237C: .4byte gBattleScripting
-_08022380:
- ldr r2, _0802239C @ =gBattleStruct
- ldr r1, [r2]
- ldrb r0, [r1, 0x10]
- adds r0, 0x1
- strb r0, [r1, 0x10]
- ldr r0, [r2]
- ldrb r0, [r0, 0x10]
- cmp r0, 0x5
- bhi _080223A4
- ldr r1, _080223A0 @ =gBattleScripting
- movs r0, 0x2
- strb r0, [r1, 0x1C]
- b _080223DA
- .align 2, 0
-_0802239C: .4byte gBattleStruct
-_080223A0: .4byte gBattleScripting
-_080223A4:
- ldr r1, _080223AC @ =gBattleScripting
- movs r0, 0x6
- strb r0, [r1, 0x1C]
- b _080223DA
- .align 2, 0
-_080223AC: .4byte gBattleScripting
-_080223B0:
- ldr r0, _080223E8 @ =gUnknown_2023BC8
- ldr r5, [r0]
- cmp r5, 0
- bne _080223DA
- ldr r4, _080223EC @ =gBattleMons
- ldr r2, _080223F0 @ =gUnknown_2023D6D
- ldrb r0, [r2]
- movs r1, 0x58
- muls r0, r1
- adds r0, r4
- movs r3, 0
- strh r5, [r0, 0x2E]
- ldrb r0, [r2]
- muls r0, r1
- adds r0, r4
- adds r0, 0x20
- strb r3, [r0]
- ldr r1, _080223F4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_080223DA:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080223E8: .4byte gUnknown_2023BC8
-_080223EC: .4byte gBattleMons
-_080223F0: .4byte gUnknown_2023D6D
-_080223F4: .4byte gUnknown_2023D74
- thumb_func_end sub_8021A68
-
- thumb_func_start sub_80223F8
-sub_80223F8: @ 80223F8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- ldr r0, _08022534 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _0802240A
- b _0802258A
-_0802240A:
- movs r5, 0
-_0802240C:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08022538 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0802243C
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0802243C
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
-_0802243C:
- adds r5, 0x1
- cmp r5, 0x5
- ble _0802240C
- cmp r6, 0
- bne _08022450
- ldr r0, _0802253C @ =gBattleOutcome
- ldrb r1, [r0]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0]
-_08022450:
- movs r6, 0
- movs r5, 0
-_08022454:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08022540 @ =gEnemyParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08022484
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08022484
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
-_08022484:
- adds r5, 0x1
- cmp r5, 0x5
- ble _08022454
- ldr r2, _0802253C @ =gBattleOutcome
- cmp r6, 0
- bne _08022498
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
-_08022498:
- ldrb r0, [r2]
- cmp r0, 0
- bne _08022582
- ldr r0, _08022544 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r2, 0x2
- ands r1, r2
- mov r8, r0
- cmp r1, 0
- beq _08022582
- movs r3, 0
- movs r5, 0
- ldr r0, _08022548 @ =gBattlersCount
- ldrb r1, [r0]
- mov r12, r0
- ldr r7, _0802254C @ =gUnknown_2023D74
- cmp r3, r1
- bge _080224E4
- ldr r0, _08022550 @ =gUnknown_2023DD0
- movs r6, 0x80
- lsls r6, 21
- ldr r4, [r0]
- adds r2, r1, 0
- ldr r1, _08022554 @ =gUnknown_2023ECC
-_080224C8:
- adds r0, r6, 0
- lsls r0, r5
- ands r0, r4
- cmp r0, 0
- beq _080224DC
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _080224DC
- adds r3, 0x1
-_080224DC:
- adds r1, 0x28
- adds r5, 0x2
- cmp r5, r2
- blt _080224C8
-_080224E4:
- movs r2, 0
- movs r5, 0x1
- mov r0, r12
- ldrb r1, [r0]
- cmp r5, r1
- bge _0802251E
- ldr r0, _08022550 @ =gUnknown_2023DD0
- movs r4, 0x80
- lsls r4, 21
- mov r12, r4
- ldr r6, [r0]
- ldr r0, _08022554 @ =gUnknown_2023ECC
- adds r4, r1, 0
- adds r1, r0, 0
- adds r1, 0x14
-_08022502:
- mov r0, r12
- lsls r0, r5
- ands r0, r6
- cmp r0, 0
- beq _08022516
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08022516
- adds r2, 0x1
-_08022516:
- adds r1, 0x28
- adds r5, 0x2
- cmp r5, r4
- blt _08022502
-_0802251E:
- mov r1, r8
- ldr r0, [r1]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08022558
- adds r0, r2, r3
- cmp r0, 0x1
- bgt _08022560
- b _0802257A
- .align 2, 0
-_08022534: .4byte gUnknown_2023BC8
-_08022538: .4byte gPlayerParty
-_0802253C: .4byte gBattleOutcome
-_08022540: .4byte gEnemyParty
-_08022544: .4byte gBattleTypeFlags
-_08022548: .4byte gBattlersCount
-_0802254C: .4byte gUnknown_2023D74
-_08022550: .4byte gUnknown_2023DD0
-_08022554: .4byte gUnknown_2023ECC
-_08022558:
- cmp r2, 0
- beq _0802257A
- cmp r3, 0
- beq _0802257A
-_08022560:
- ldr r2, [r7]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- str r1, [r7]
- b _0802258A
-_0802257A:
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- b _0802258A
-_08022582:
- ldr r1, _08022594 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802258A:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08022594: .4byte gUnknown_2023D74
- thumb_func_end sub_80223F8
-
- thumb_func_start MoveValuesCleanUp
-MoveValuesCleanUp: @ 8022598
- ldr r1, _080225C0 @ =gMoveResultFlags
- movs r0, 0
- strb r0, [r1]
- ldr r0, _080225C4 @ =gBattleScripting
- movs r2, 0
- movs r1, 0x1
- strb r1, [r0, 0xE]
- ldr r0, _080225C8 @ =gCritMultiplier
- strb r1, [r0]
- ldr r0, _080225CC @ =gUnknown_2023E82
- strb r2, [r0, 0x3]
- strb r2, [r0, 0x6]
- ldr r2, _080225D0 @ =gUnknown_2023DD0
- ldr r0, [r2]
- subs r1, 0x42
- ands r0, r1
- ldr r1, _080225D4 @ =0xffffbfff
- ands r0, r1
- str r0, [r2]
- bx lr
- .align 2, 0
-_080225C0: .4byte gMoveResultFlags
-_080225C4: .4byte gBattleScripting
-_080225C8: .4byte gCritMultiplier
-_080225CC: .4byte gUnknown_2023E82
-_080225D0: .4byte gUnknown_2023DD0
-_080225D4: .4byte 0xffffbfff
- thumb_func_end MoveValuesCleanUp
-
- thumb_func_start atk25_movevaluescleanup
-atk25_movevaluescleanup: @ 80225D8
- push {lr}
- bl MoveValuesCleanUp
- ldr r1, _080225EC @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080225EC: .4byte gUnknown_2023D74
- thumb_func_end atk25_movevaluescleanup
-
- thumb_func_start atk26_setmultihit
-atk26_setmultihit: @ 80225F0
- ldr r3, _08022600 @ =gUnknown_2023D72
- ldr r2, _08022604 @ =gUnknown_2023D74
- ldr r0, [r2]
- ldrb r1, [r0, 0x1]
- strb r1, [r3]
- adds r0, 0x2
- str r0, [r2]
- bx lr
- .align 2, 0
-_08022600: .4byte gUnknown_2023D72
-_08022604: .4byte gUnknown_2023D74
- thumb_func_end atk26_setmultihit
-
- thumb_func_start atk27_decrementmultihit
-atk27_decrementmultihit: @ 8022608
- push {lr}
- ldr r1, _08022624 @ =gUnknown_2023D72
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _0802262C
- ldr r1, _08022628 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08022646
- .align 2, 0
-_08022624: .4byte gUnknown_2023D72
-_08022628: .4byte gUnknown_2023D74
-_0802262C:
- ldr r3, _0802264C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- str r1, [r3]
-_08022646:
- pop {r0}
- bx r0
- .align 2, 0
-_0802264C: .4byte gUnknown_2023D74
- thumb_func_end atk27_decrementmultihit
-
- thumb_func_start atk28_goto
-atk28_goto: @ 8022650
- ldr r3, _0802266C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- str r1, [r3]
- bx lr
- .align 2, 0
-_0802266C: .4byte gUnknown_2023D74
- thumb_func_end atk28_goto
-
- thumb_func_start atk29_jumpifbyte
-atk29_jumpifbyte: @ 8022670
- push {r4-r6,lr}
- ldr r3, _080226B4 @ =gUnknown_2023D74
- ldr r1, [r3]
- ldrb r6, [r1, 0x1]
- ldrb r2, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0x6]
- ldrb r2, [r1, 0x7]
- ldrb r0, [r1, 0x8]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x9]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xA]
- lsls r0, 24
- adds r2, r0
- adds r1, 0xB
- str r1, [r3]
- cmp r6, 0x5
- bhi _08022708
- lsls r0, r6, 2
- ldr r1, _080226B8 @ =_080226BC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080226B4: .4byte gUnknown_2023D74
-_080226B8: .4byte _080226BC
- .align 2, 0
-_080226BC:
- .4byte _080226D4
- .4byte _080226DC
- .4byte _080226E4
- .4byte _080226EC
- .4byte _080226F4
- .4byte _080226FE
-_080226D4:
- ldrb r0, [r5]
- cmp r0, r4
- bne _08022708
- b _08022706
-_080226DC:
- ldrb r0, [r5]
- cmp r0, r4
- beq _08022708
- b _08022706
-_080226E4:
- ldrb r0, [r5]
- cmp r0, r4
- bls _08022708
- b _08022706
-_080226EC:
- ldrb r0, [r5]
- cmp r0, r4
- bcs _08022708
- b _08022706
-_080226F4:
- ldrb r0, [r5]
- ands r4, r0
- cmp r4, 0
- beq _08022708
- b _08022706
-_080226FE:
- ldrb r0, [r5]
- ands r4, r0
- cmp r4, 0
- bne _08022708
-_08022706:
- str r2, [r3]
-_08022708:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk29_jumpifbyte
-
- thumb_func_start atk2A_jumpifhalfword
-atk2A_jumpifhalfword: @ 8022710
- push {r4-r6,lr}
- ldr r3, _0802275C @ =gUnknown_2023D74
- ldr r1, [r3]
- ldrb r6, [r1, 0x1]
- ldrb r2, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0x6]
- ldrb r0, [r1, 0x7]
- lsls r0, 8
- orrs r4, r0
- ldrb r2, [r1, 0x8]
- ldrb r0, [r1, 0x9]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0xA]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xB]
- lsls r0, 24
- adds r2, r0
- adds r1, 0xC
- str r1, [r3]
- cmp r6, 0x5
- bhi _080227B0
- lsls r0, r6, 2
- ldr r1, _08022760 @ =_08022764
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802275C: .4byte gUnknown_2023D74
-_08022760: .4byte _08022764
- .align 2, 0
-_08022764:
- .4byte _0802277C
- .4byte _08022784
- .4byte _0802278C
- .4byte _08022794
- .4byte _0802279C
- .4byte _080227A6
-_0802277C:
- ldrh r0, [r5]
- cmp r0, r4
- bne _080227B0
- b _080227AE
-_08022784:
- ldrh r0, [r5]
- cmp r0, r4
- beq _080227B0
- b _080227AE
-_0802278C:
- ldrh r0, [r5]
- cmp r0, r4
- bls _080227B0
- b _080227AE
-_08022794:
- ldrh r0, [r5]
- cmp r0, r4
- bcs _080227B0
- b _080227AE
-_0802279C:
- ldrh r0, [r5]
- ands r4, r0
- cmp r4, 0
- beq _080227B0
- b _080227AE
-_080227A6:
- ldrh r0, [r5]
- ands r4, r0
- cmp r4, 0
- bne _080227B0
-_080227AE:
- str r2, [r3]
-_080227B0:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk2A_jumpifhalfword
-
- thumb_func_start atk2B_jumpifword
-atk2B_jumpifword: @ 80227B8
- push {r4-r6,lr}
- ldr r3, _08022810 @ =gUnknown_2023D74
- ldr r1, [r3]
- ldrb r6, [r1, 0x1]
- ldrb r2, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0x6]
- ldrb r0, [r1, 0x7]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r1, 0x8]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r1, 0x9]
- lsls r0, 24
- orrs r4, r0
- ldrb r2, [r1, 0xA]
- ldrb r0, [r1, 0xB]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0xC]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xD]
- lsls r0, 24
- adds r2, r0
- adds r1, 0xE
- str r1, [r3]
- cmp r6, 0x5
- bhi _08022864
- lsls r0, r6, 2
- ldr r1, _08022814 @ =_08022818
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08022810: .4byte gUnknown_2023D74
-_08022814: .4byte _08022818
- .align 2, 0
-_08022818:
- .4byte _08022830
- .4byte _08022838
- .4byte _08022840
- .4byte _08022848
- .4byte _08022850
- .4byte _0802285A
-_08022830:
- ldr r0, [r5]
- cmp r0, r4
- bne _08022864
- b _08022862
-_08022838:
- ldr r0, [r5]
- cmp r0, r4
- beq _08022864
- b _08022862
-_08022840:
- ldr r0, [r5]
- cmp r0, r4
- bls _08022864
- b _08022862
-_08022848:
- ldr r0, [r5]
- cmp r0, r4
- bcs _08022864
- b _08022862
-_08022850:
- ldr r0, [r5]
- ands r0, r4
- cmp r0, 0
- beq _08022864
- b _08022862
-_0802285A:
- ldr r0, [r5]
- ands r0, r4
- cmp r0, 0
- bne _08022864
-_08022862:
- str r2, [r3]
-_08022864:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk2B_jumpifword
-
- thumb_func_start atk2C_jumpifarrayequal
-atk2C_jumpifarrayequal: @ 802286C
- push {r4-r7,lr}
- ldr r2, _080228C4 @ =gUnknown_2023D74
- ldr r3, [r2]
- ldrb r1, [r3, 0x1]
- ldrb r0, [r3, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0x4]
- lsls r0, 24
- adds r5, r1, r0
- ldrb r1, [r3, 0x5]
- ldrb r0, [r3, 0x6]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0x7]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0x8]
- lsls r0, 24
- adds r4, r1, r0
- ldrb r6, [r3, 0x9]
- ldrb r1, [r3, 0xA]
- ldrb r0, [r3, 0xB]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0xC]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0xD]
- lsls r0, 24
- adds r1, r0
- mov r12, r1
- movs r1, 0
- cmp r1, r6
- bcs _080228E4
- ldrb r0, [r5]
- ldrb r7, [r4]
- cmp r0, r7
- beq _080228C8
- adds r0, r3, 0
- b _080228E0
- .align 2, 0
-_080228C4: .4byte gUnknown_2023D74
-_080228C8:
- adds r5, 0x1
- adds r4, 0x1
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r6
- bcs _080228E4
- ldrb r0, [r5]
- ldrb r3, [r4]
- cmp r0, r3
- beq _080228C8
- ldr r0, [r2]
-_080228E0:
- adds r0, 0xE
- str r0, [r2]
-_080228E4:
- cmp r1, r6
- bne _080228EC
- mov r7, r12
- str r7, [r2]
-_080228EC:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk2C_jumpifarrayequal
-
- thumb_func_start atk2D_jumpifarraynotequal
-atk2D_jumpifarraynotequal: @ 80228F4
- push {r4-r7,lr}
- movs r7, 0
- ldr r3, _08022968 @ =gUnknown_2023D74
- ldr r1, [r3]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r2, [r1, 0x5]
- ldrb r0, [r1, 0x6]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x7]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x8]
- lsls r0, 24
- adds r4, r2, r0
- ldrb r6, [r1, 0x9]
- ldrb r2, [r1, 0xA]
- ldrb r0, [r1, 0xB]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0xC]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xD]
- lsls r0, 24
- adds r2, r0
- mov r12, r2
- movs r1, 0
- cmp r7, r6
- bcs _0802295E
-_08022942:
- ldrb r0, [r5]
- ldrb r2, [r4]
- cmp r0, r2
- bne _08022950
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_08022950:
- adds r5, 0x1
- adds r4, 0x1
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r6
- bcc _08022942
-_0802295E:
- cmp r7, r6
- beq _0802296C
- mov r0, r12
- b _08022970
- .align 2, 0
-_08022968: .4byte gUnknown_2023D74
-_0802296C:
- ldr r0, [r3]
- adds r0, 0xE
-_08022970:
- str r0, [r3]
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk2D_jumpifarraynotequal
-
- thumb_func_start atk2E_setbyte
-atk2E_setbyte: @ 8022978
- ldr r3, _0802299C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r0, [r2, 0x5]
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_0802299C: .4byte gUnknown_2023D74
- thumb_func_end atk2E_setbyte
-
- thumb_func_start atk2F_addbyte
-atk2F_addbyte: @ 80229A0
- ldr r3, _080229C8 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r0, [r2, 0x5]
- ldrb r2, [r1]
- adds r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_080229C8: .4byte gUnknown_2023D74
- thumb_func_end atk2F_addbyte
-
- thumb_func_start atk30_subbyte
-atk30_subbyte: @ 80229CC
- ldr r3, _080229F4 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r0, [r1]
- ldrb r2, [r2, 0x5]
- subs r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_080229F4: .4byte gUnknown_2023D74
- thumb_func_end atk30_subbyte
-
- thumb_func_start atk31_copyarray
-atk31_copyarray: @ 80229F8
- push {r4-r6,lr}
- ldr r3, _08022A48 @ =gUnknown_2023D74
- ldr r1, [r3]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- adds r6, r2, r0
- ldrb r2, [r1, 0x5]
- ldrb r0, [r1, 0x6]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x7]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x8]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0x9]
- movs r2, 0
- cmp r2, r4
- bge _08022A3C
-_08022A2E:
- adds r0, r6, r2
- adds r1, r5, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, r4
- blt _08022A2E
-_08022A3C:
- ldr r0, [r3]
- adds r0, 0xA
- str r0, [r3]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08022A48: .4byte gUnknown_2023D74
- thumb_func_end atk31_copyarray
-
- thumb_func_start atk32_copyarraywithindex
-atk32_copyarraywithindex: @ 8022A4C
- push {r4-r7,lr}
- ldr r3, _08022AB4 @ =gUnknown_2023D74
- ldr r1, [r3]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- adds r7, r2, r0
- ldrb r2, [r1, 0x5]
- ldrb r0, [r1, 0x6]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x7]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x8]
- lsls r0, 24
- adds r6, r2, r0
- ldrb r2, [r1, 0x9]
- ldrb r0, [r1, 0xA]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0xB]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xC]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0xD]
- movs r2, 0
- cmp r2, r4
- bge _08022AA8
-_08022A96:
- adds r0, r7, r2
- ldrb r1, [r5]
- adds r1, r2, r1
- adds r1, r6, r1
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, r4
- blt _08022A96
-_08022AA8:
- ldr r0, [r3]
- adds r0, 0xE
- str r0, [r3]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08022AB4: .4byte gUnknown_2023D74
- thumb_func_end atk32_copyarraywithindex
-
- thumb_func_start atk33_orbyte
-atk33_orbyte: @ 8022AB8
- ldr r3, _08022AE0 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r0, [r1]
- ldrb r2, [r2, 0x5]
- orrs r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_08022AE0: .4byte gUnknown_2023D74
- thumb_func_end atk33_orbyte
-
- thumb_func_start atk34_orhalfword
-atk34_orhalfword: @ 8022AE4
- push {r4,lr}
- ldr r4, _08022B18 @ =gUnknown_2023D74
- ldr r3, [r4]
- ldrb r2, [r3, 0x1]
- ldrb r0, [r3, 0x2]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r3, 0x3]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r3, 0x4]
- lsls r0, 24
- adds r2, r0
- ldrb r1, [r3, 0x5]
- ldrb r0, [r3, 0x6]
- lsls r0, 8
- orrs r1, r0
- ldrh r0, [r2]
- orrs r1, r0
- strh r1, [r2]
- ldr r0, [r4]
- adds r0, 0x7
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022B18: .4byte gUnknown_2023D74
- thumb_func_end atk34_orhalfword
-
- thumb_func_start atk35_orword
-atk35_orword: @ 8022B1C
- push {r4,lr}
- ldr r4, _08022B5C @ =gUnknown_2023D74
- ldr r2, [r4]
- ldrb r3, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r3, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r3, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r3, r0
- ldrb r1, [r2, 0x5]
- ldrb r0, [r2, 0x6]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 24
- adds r1, r0
- ldr r0, [r3]
- orrs r0, r1
- str r0, [r3]
- ldr r0, [r4]
- adds r0, 0x9
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022B5C: .4byte gUnknown_2023D74
- thumb_func_end atk35_orword
-
- thumb_func_start atk36_bicbyte
-atk36_bicbyte: @ 8022B60
- ldr r3, _08022B88 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r2, [r2, 0x5]
- ldrb r0, [r1]
- bics r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_08022B88: .4byte gUnknown_2023D74
- thumb_func_end atk36_bicbyte
-
- thumb_func_start atk37_bichalfword
-atk37_bichalfword: @ 8022B8C
- push {r4,lr}
- ldr r4, _08022BC0 @ =gUnknown_2023D74
- ldr r3, [r4]
- ldrb r1, [r3, 0x1]
- ldrb r0, [r3, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r2, [r3, 0x5]
- ldrb r0, [r3, 0x6]
- lsls r0, 8
- orrs r2, r0
- ldrh r0, [r1]
- bics r0, r2
- strh r0, [r1]
- ldr r0, [r4]
- adds r0, 0x7
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022BC0: .4byte gUnknown_2023D74
- thumb_func_end atk37_bichalfword
-
- thumb_func_start atk38_bicword
-atk38_bicword: @ 8022BC4
- push {r4,lr}
- ldr r4, _08022C04 @ =gUnknown_2023D74
- ldr r2, [r4]
- ldrb r3, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r3, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r3, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r3, r0
- ldrb r1, [r2, 0x5]
- ldrb r0, [r2, 0x6]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 24
- adds r1, r0
- ldr r0, [r3]
- bics r0, r1
- str r0, [r3]
- ldr r0, [r4]
- adds r0, 0x9
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022C04: .4byte gUnknown_2023D74
- thumb_func_end atk38_bicword
-
- thumb_func_start atk39_pause
-atk39_pause: @ 8022C08
- push {r4,r5,lr}
- ldr r0, _08022C3C @ =gUnknown_2023BC8
- ldr r4, [r0]
- cmp r4, 0
- bne _08022C34
- ldr r5, _08022C40 @ =gUnknown_2023D74
- ldr r2, [r5]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldr r3, _08022C44 @ =gUnknown_2023E7C
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r1
- bcc _08022C34
- strh r4, [r3]
- adds r0, r2, 0x3
- str r0, [r5]
-_08022C34:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08022C3C: .4byte gUnknown_2023BC8
-_08022C40: .4byte gUnknown_2023D74
-_08022C44: .4byte gUnknown_2023E7C
- thumb_func_end atk39_pause
-
- thumb_func_start sub_8022C48
-sub_8022C48: @ 8022C48
- push {lr}
- ldr r0, _08022C60 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _08022C5A
- ldr r1, _08022C64 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_08022C5A:
- pop {r0}
- bx r0
- .align 2, 0
-_08022C60: .4byte gUnknown_2023BC8
-_08022C64: .4byte gUnknown_2023D74
- thumb_func_end sub_8022C48
-
- thumb_func_start atk3B_healthbar_update
-atk3B_healthbar_update: @ 8022C68
- push {lr}
- ldr r0, _08022C7C @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _08022C88
- ldr r0, _08022C80 @ =gActiveBattler
- ldr r1, _08022C84 @ =gBattlerTarget
- b _08022C8C
- .align 2, 0
-_08022C7C: .4byte gUnknown_2023D74
-_08022C80: .4byte gActiveBattler
-_08022C84: .4byte gBattlerTarget
-_08022C88:
- ldr r0, _08022CB0 @ =gActiveBattler
- ldr r1, _08022CB4 @ =sBattler_AI
-_08022C8C:
- ldrb r1, [r1]
- strb r1, [r0]
- ldr r0, _08022CB8 @ =gBattleMoveDamage
- ldrh r1, [r0]
- movs r0, 0
- bl EmitHealthBarUpdate
- ldr r0, _08022CB0 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _08022CBC @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08022CB0: .4byte gActiveBattler
-_08022CB4: .4byte sBattler_AI
-_08022CB8: .4byte gBattleMoveDamage
-_08022CBC: .4byte gUnknown_2023D74
- thumb_func_end atk3B_healthbar_update
-
- thumb_func_start atk3C_return
-atk3C_return: @ 8022CC0
- push {lr}
- bl BattleScriptPop
- pop {r0}
- bx r0
- thumb_func_end atk3C_return
-
- thumb_func_start atk3D_end
-atk3D_end: @ 8022CCC
- ldr r0, _08022CE0 @ =gMoveResultFlags
- movs r1, 0
- strb r1, [r0]
- ldr r0, _08022CE4 @ =gActiveBattler
- strb r1, [r0]
- ldr r1, _08022CE8 @ =gUnknown_2023BE3
- movs r0, 0xB
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08022CE0: .4byte gMoveResultFlags
-_08022CE4: .4byte gActiveBattler
-_08022CE8: .4byte gUnknown_2023BE3
- thumb_func_end atk3D_end
-
- thumb_func_start atk3E_end2
-atk3E_end2: @ 8022CEC
- ldr r1, _08022CFC @ =gActiveBattler
- movs r0, 0
- strb r0, [r1]
- ldr r1, _08022D00 @ =gUnknown_2023BE3
- movs r0, 0xB
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08022CFC: .4byte gActiveBattler
-_08022D00: .4byte gUnknown_2023BE3
- thumb_func_end atk3E_end2
-
- thumb_func_start atk3F_end3
-atk3F_end3: @ 8022D04
- push {lr}
- bl BattleScriptPop
- ldr r3, _08022D38 @ =gBattleResources
- ldr r0, [r3]
- ldr r0, [r0, 0xC]
- adds r1, r0, 0
- adds r1, 0x20
- ldrb r0, [r1]
- cmp r0, 0
- beq _08022D1E
- subs r0, 0x1
- strb r0, [r1]
-_08022D1E:
- ldr r2, _08022D3C @ =gUnknown_3004F84
- ldr r0, [r3]
- ldr r1, [r0, 0xC]
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 2
- adds r1, r0
- ldr r0, [r1]
- str r0, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_08022D38: .4byte gBattleResources
-_08022D3C: .4byte gUnknown_3004F84
- thumb_func_end atk3F_end3
-
- thumb_func_start atk41_call
-atk41_call: @ 8022D40
- push {r4,lr}
- ldr r4, _08022D6C @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x5
- bl BattleScriptPush
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022D6C: .4byte gUnknown_2023D74
- thumb_func_end atk41_call
-
- thumb_func_start atk42_jumpiftype2
-atk42_jumpiftype2: @ 8022D70
- push {r4,lr}
- ldr r4, _08022DB8 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- lsls r0, 24
- lsrs r0, 24
- ldr r3, [r4]
- ldr r2, _08022DBC @ =gBattleMons
- movs r1, 0x58
- muls r0, r1
- adds r0, r2
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r2, [r3, 0x2]
- ldrb r1, [r1]
- cmp r2, r1
- beq _08022D9E
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r2, r0
- bne _08022DC0
-_08022D9E:
- ldrb r1, [r3, 0x3]
- ldrb r0, [r3, 0x4]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r3, 0x5]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r3, 0x6]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08022DC4
- .align 2, 0
-_08022DB8: .4byte gUnknown_2023D74
-_08022DBC: .4byte gBattleMons
-_08022DC0:
- adds r0, r3, 0x7
- str r0, [r4]
-_08022DC4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end atk42_jumpiftype2
-
- thumb_func_start atk43_jumpifabilitypresent
-atk43_jumpifabilitypresent: @ 8022DCC
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _08022E04 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r2, [r0, 0x1]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08022E08
- ldr r2, [r4]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08022E0E
- .align 2, 0
-_08022E04: .4byte gUnknown_2023D74
-_08022E08:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_08022E0E:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end atk43_jumpifabilitypresent
-
- thumb_func_start atk44_endselectionscript
-atk44_endselectionscript: @ 8022E18
- ldr r0, _08022E2C @ =sBattler_AI
- ldrb r0, [r0]
- ldr r1, _08022E30 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x54
- movs r1, 0x1
- strb r1, [r0]
- bx lr
- .align 2, 0
-_08022E2C: .4byte sBattler_AI
-_08022E30: .4byte gBattleStruct
- thumb_func_end atk44_endselectionscript
-
- thumb_func_start sub_8022E34
-sub_8022E34: @ 8022E34
- push {r4-r6,lr}
- ldr r4, _08022E84 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r6, _08022E88 @ =gActiveBattler
- strb r0, [r6]
- ldr r2, [r4]
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x4]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 24
- adds r3, r1, r0
- ldrb r5, [r2, 0x2]
- adds r0, r5, 0
- cmp r0, 0x1
- beq _08022E6E
- cmp r0, 0x11
- beq _08022E6E
- cmp r0, 0x2
- beq _08022E6E
- cmp r0, 0x19
- bne _08022E8C
-_08022E6E:
- ldr r4, _08022E84 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r1, [r0, 0x2]
- ldrh r2, [r3]
- movs r0, 0
- bl EmitBattleAnimation
- ldr r0, _08022E88 @ =gActiveBattler
- ldrb r0, [r0]
- b _08022EE4
- .align 2, 0
-_08022E84: .4byte gUnknown_2023D74
-_08022E88: .4byte gActiveBattler
-_08022E8C:
- ldr r0, _08022EA4 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08022EAC
- adds r0, r2, 0x7
- bl BattleScriptPush
- ldr r0, _08022EA8 @ =gUnknown_81D89F1
- b _08022EEC
- .align 2, 0
-_08022EA4: .4byte gUnknown_2023DD0
-_08022EA8: .4byte gUnknown_81D89F1
-_08022EAC:
- adds r0, r5, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _08022ED8
- ldr r1, _08022ED0 @ =gStatuses3
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08022ED4 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08022ED8
- adds r0, r2, 0x7
- b _08022EEC
- .align 2, 0
-_08022ED0: .4byte gStatuses3
-_08022ED4: .4byte 0x000400c0
-_08022ED8:
- ldrb r1, [r2, 0x2]
- ldrh r2, [r3]
- movs r0, 0
- bl EmitBattleAnimation
- ldrb r0, [r6]
-_08022EE4:
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x7
-_08022EEC:
- str r0, [r4]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8022E34
-
- thumb_func_start atk46_playanimation2
-atk46_playanimation2: @ 8022EF4
- push {r4-r7,lr}
- ldr r6, _08022F5C @ =gUnknown_2023D74
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r7, _08022F60 @ =gActiveBattler
- strb r0, [r7]
- ldr r2, [r6]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- adds r3, r1, r0
- ldrb r1, [r2, 0x6]
- ldrb r0, [r2, 0x7]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x9]
- lsls r0, 24
- adds r4, r1, r0
- ldrb r5, [r3]
- adds r0, r5, 0
- cmp r0, 0x1
- beq _08022F3E
- cmp r0, 0x11
- beq _08022F3E
- cmp r0, 0x2
- bne _08022F64
-_08022F3E:
- ldrb r1, [r3]
- ldrh r2, [r4]
- movs r0, 0
- bl EmitBattleAnimation
- ldr r0, _08022F60 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _08022F5C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
- b _08022FBA
- .align 2, 0
-_08022F5C: .4byte gUnknown_2023D74
-_08022F60: .4byte gActiveBattler
-_08022F64:
- ldr r0, _08022F74 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08022F78
- adds r0, r2, 0
- b _08022FB6
- .align 2, 0
-_08022F74: .4byte gUnknown_2023DD0
-_08022F78:
- adds r0, r5, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _08022FA4
- ldr r1, _08022F9C @ =gStatuses3
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08022FA0 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08022FA4
- adds r0, r2, 0
- b _08022FB6
- .align 2, 0
-_08022F9C: .4byte gStatuses3
-_08022FA0: .4byte 0x000400c0
-_08022FA4:
- ldrb r1, [r3]
- ldrh r2, [r4]
- movs r0, 0
- bl EmitBattleAnimation
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldr r0, [r6]
-_08022FB6:
- adds r0, 0xA
- str r0, [r6]
-_08022FBA:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk46_playanimation2
-
- thumb_func_start atk47_setgraphicalstatchangevalues
-atk47_setgraphicalstatchangevalues: @ 8022FC0
- push {r4,lr}
- movs r3, 0
- ldr r1, _08022FDC @ =gBattleScripting
- ldrb r0, [r1, 0x1A]
- movs r2, 0xF0
- ands r2, r0
- adds r4, r1, 0
- cmp r2, 0x20
- beq _08022FEE
- cmp r2, 0x20
- bgt _08022FE0
- cmp r2, 0x10
- beq _08022FEA
- b _08022FF8
- .align 2, 0
-_08022FDC: .4byte gBattleScripting
-_08022FE0:
- cmp r2, 0x90
- beq _08022FF2
- cmp r2, 0xA0
- beq _08022FF6
- b _08022FF8
-_08022FEA:
- movs r3, 0xF
- b _08022FF8
-_08022FEE:
- movs r3, 0x27
- b _08022FF8
-_08022FF2:
- movs r3, 0x16
- b _08022FF8
-_08022FF6:
- movs r3, 0x2E
-_08022FF8:
- ldrb r1, [r4, 0x1A]
- movs r0, 0xF
- ands r0, r1
- adds r0, r3, r0
- subs r0, 0x1
- movs r1, 0
- strb r0, [r4, 0x10]
- strb r1, [r4, 0x11]
- ldr r1, _08023018 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08023018: .4byte gUnknown_2023D74
- thumb_func_end atk47_setgraphicalstatchangevalues
-
- thumb_func_start atk48_playstatchangeanimation
-atk48_playstatchangeanimation: @ 802301C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r7, 0
- movs r0, 0
- mov r8, r0
- movs r3, 0
- ldr r5, _08023090 @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- str r3, [sp]
- bl sub_8016E24
- ldr r2, _08023094 @ =gActiveBattler
- strb r0, [r2]
- ldr r0, [r5]
- ldrb r4, [r0, 0x2]
- ldrb r1, [r0, 0x3]
- movs r0, 0x1
- ands r0, r1
- ldr r3, [sp]
- cmp r0, 0
- beq _08023130
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x15
- cmp r0, 0
- beq _0802305C
- movs r1, 0x2D
-_0802305C:
- cmp r4, 0
- beq _08023104
- movs r0, 0x1
- mov r10, r0
- ldr r0, _08023098 @ =gUnknown_2023BFC
- mov r9, r0
- lsls r5, r1, 16
-_0802306A:
- adds r0, r4, 0
- mov r1, r10
- ands r0, r1
- cmp r0, 0
- beq _080230F6
- ldr r0, _08023090 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0802309C
- ldr r0, _08023094 @ =gActiveBattler
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7, r0
- b _080230E4
- .align 2, 0
-_08023090: .4byte gUnknown_2023D74
-_08023094: .4byte gActiveBattler
-_08023098: .4byte gUnknown_2023BFC
-_0802309C:
- ldr r6, _08023120 @ =gActiveBattler
- ldrb r0, [r6]
- str r3, [sp]
- bl GetBattlerPosition
- mov r1, r10
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08023124 @ =gSideTimers
- adds r0, r1
- ldrb r0, [r0, 0x4]
- ldr r3, [sp]
- cmp r0, 0
- bne _080230F6
- ldr r0, _08023128 @ =gBattleMons
- ldrb r2, [r6]
- movs r1, 0x58
- muls r2, r1
- adds r0, r2, r0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1D
- beq _080230F6
- cmp r0, 0x49
- beq _080230F6
- cmp r0, 0x33
- bne _080230DA
- cmp r7, 0x6
- beq _080230F6
-_080230DA:
- cmp r0, 0x34
- bne _080230E2
- cmp r7, 0x1
- beq _080230F6
-_080230E2:
- adds r0, r7, r2
-_080230E4:
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- ble _080230F6
- lsrs r0, r5, 16
- mov r8, r0
- adds r3, 0x1
-_080230F6:
- lsrs r4, 1
- movs r1, 0x80
- lsls r1, 9
- adds r5, r1
- adds r7, 0x1
- cmp r4, 0
- bne _0802306A
-_08023104:
- ldr r0, _0802312C @ =gUnknown_2023D74
- mov r9, r0
- cmp r3, 0x1
- ble _08023192
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x39
- mov r8, r1
- cmp r0, 0
- beq _08023192
- movs r0, 0x3A
- b _08023190
- .align 2, 0
-_08023120: .4byte gActiveBattler
-_08023124: .4byte gSideTimers
-_08023128: .4byte gBattleMons
-_0802312C: .4byte gUnknown_2023D74
-_08023130:
- movs r0, 0x2
- ands r0, r1
- movs r1, 0xE
- cmp r0, 0
- beq _0802313C
- movs r1, 0x26
-_0802313C:
- mov r9, r5
- cmp r4, 0
- beq _08023178
- ldr r6, _080231AC @ =gUnknown_2023BFC
- adds r5, r2, 0
- lsls r2, r1, 16
-_08023148:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0802316A
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7, r0
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xB
- bgt _0802316A
- lsrs r1, r2, 16
- mov r8, r1
- adds r3, 0x1
-_0802316A:
- lsrs r4, 1
- movs r0, 0x80
- lsls r0, 9
- adds r2, r0
- adds r7, 0x1
- cmp r4, 0
- bne _08023148
-_08023178:
- cmp r3, 0x1
- ble _08023192
- mov r1, r9
- ldr r0, [r1]
- ldrb r1, [r0, 0x3]
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x37
- mov r8, r1
- cmp r0, 0
- beq _08023192
- movs r0, 0x38
-_08023190:
- mov r8, r0
-_08023192:
- mov r1, r9
- ldr r2, [r1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080231B0
- cmp r3, 0x1
- bgt _080231B0
- adds r0, r2, 0x4
- mov r1, r9
- b _080231FE
- .align 2, 0
-_080231AC: .4byte gUnknown_2023BFC
-_080231B0:
- cmp r3, 0
- beq _080231F8
- ldr r4, _080231EC @ =gBattleScripting
- ldrb r0, [r4, 0x1B]
- cmp r0, 0
- bne _080231F8
- movs r0, 0
- movs r1, 0x1
- mov r2, r8
- str r3, [sp]
- bl EmitBattleAnimation
- ldr r0, _080231F0 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r0, _080231F4 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x4
- ands r0, r1
- ldr r3, [sp]
- cmp r0, 0
- beq _080231E8
- cmp r3, 0x1
- ble _080231E8
- movs r0, 0x1
- strb r0, [r4, 0x1B]
-_080231E8:
- ldr r1, _080231F4 @ =gUnknown_2023D74
- b _080231FA
- .align 2, 0
-_080231EC: .4byte gBattleScripting
-_080231F0: .4byte gActiveBattler
-_080231F4: .4byte gUnknown_2023D74
-_080231F8:
- mov r1, r9
-_080231FA:
- ldr r0, [r1]
- adds r0, 0x4
-_080231FE:
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk48_playstatchangeanimation
-
- thumb_func_start atk49_moveend
-atk49_moveend: @ 8023210
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- movs r0, 0
- mov r10, r0
- ldr r2, _08023260 @ =gUnknown_2023D4C
- ldrh r1, [r2]
- ldr r0, _08023264 @ =0x0000ffff
- movs r3, 0
- str r3, [sp, 0x18]
- cmp r1, r0
- beq _08023232
- ldrh r2, [r2]
- str r2, [sp, 0x18]
-_08023232:
- ldr r0, _08023268 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r4, [r0, 0x1]
- str r4, [sp, 0x10]
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x14]
- ldr r1, _0802326C @ =gBattleMons
- ldr r0, _08023270 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, r0, r1
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _08023278
- ldr r1, _08023274 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x7]
- b _08023282
- .align 2, 0
-_08023260: .4byte gUnknown_2023D4C
-_08023264: .4byte 0x0000ffff
-_08023268: .4byte gUnknown_2023D74
-_0802326C: .4byte gBattleMons
-_08023270: .4byte sBattler_AI
-_08023274: .4byte gEnigmaBerries
-_08023278:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
-_08023282:
- str r0, [sp, 0x8]
- ldr r1, _080232A4 @ =gBattleStruct
- ldr r0, _080232A8 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, 0xC8
- ldr r1, [r1]
- adds r0, r1, r0
- str r0, [sp, 0xC]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- beq _08023334
- movs r5, 0x3F
- ands r5, r0
- str r5, [sp, 0x4]
- b _08023346
- .align 2, 0
-_080232A4: .4byte gBattleStruct
-_080232A8: .4byte sBattler_AI
-_080232AC:
- ldr r4, _080232C0 @ =gActiveBattler
- strb r2, [r4]
- movs r0, 0
- movs r1, 0x1
- bl EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0802379E
- .align 2, 0
-_080232C0: .4byte gActiveBattler
-_080232C4:
- ldr r4, _080232E8 @ =gActiveBattler
- strb r2, [r4]
- movs r0, 0
- movs r1, 0
- bl EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r5
- ldr r0, [r1]
- ldr r2, _080232EC @ =0xfffbff3f
- ands r0, r2
- str r0, [r1]
- b _0802379E
- .align 2, 0
-_080232E8: .4byte gActiveBattler
-_080232EC: .4byte 0xfffbff3f
-_080232F0:
- strb r2, [r7]
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- ldr r0, _08023324 @ =gBattleScripting
- strb r4, [r0, 0x14]
- bl MoveValuesCleanUp
- ldr r2, _08023328 @ =gUnknown_81D65A8
- mov r0, r8
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- bl BattleScriptPush
- ldr r1, _0802332C @ =gUnknown_2023D74
- ldr r0, _08023330 @ =gUnknown_81D96A8
- bl _08023BFC
- .align 2, 0
-_08023324: .4byte gBattleScripting
-_08023328: .4byte gUnknown_81D65A8
-_0802332C: .4byte gUnknown_2023D74
-_08023330: .4byte gUnknown_81D96A8
-_08023334:
- ldr r2, _0802334C @ =gBattleMoves
- ldr r0, _08023350 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x4]
-_08023346:
- ldr r1, _08023354 @ =gBattleScripting
- mov r12, r1
- b _08023362
- .align 2, 0
-_0802334C: .4byte gBattleMoves
-_08023350: .4byte gCurrentMove
-_08023354: .4byte gBattleScripting
-_08023358:
- mov r2, r10
- cmp r2, 0
- beq _08023362
- bl _08023BE8
-_08023362:
- mov r3, r12
- ldrb r0, [r3, 0x14]
- cmp r0, 0x11
- bls _0802336E
- bl _08023BB4
-_0802336E:
- lsls r0, 2
- ldr r1, _08023378 @ =_0802337C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08023378: .4byte _0802337C
- .align 2, 0
-_0802337C:
- .4byte _080233C4
- .4byte _080234A0
- .4byte _0802355C
- .4byte _08023580
- .4byte _08023598
- .4byte _080235C0
- .4byte _080235E4
- .4byte _0802368C
- .4byte _08023702
- .4byte _08023738
- .4byte _080237D8
- .4byte _080236CC
- .4byte _080236EC
- .4byte _0802381C
- .4byte _08023860
- .4byte _08023A40
- .4byte _08023B28
- .4byte _08023BB4
-_080233C4:
- ldr r6, _0802347C @ =gBattleMons
- ldr r5, _08023480 @ =gBattlerTarget
- ldrb r3, [r5]
- movs r7, 0x58
- adds r2, r3, 0
- muls r2, r7
- adds r0, r6, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 16
- ands r0, r1
- cmp r0, 0
- bne _080233E4
- b _080237C8
-_080233E4:
- adds r0, r2, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _080233EE
- b _080237C8
-_080233EE:
- ldr r0, _08023484 @ =sBattler_AI
- ldrb r1, [r0]
- cmp r1, r3
- bne _080233F8
- b _080237C8
-_080233F8:
- adds r0, r1, 0
- bl GetBattlerSide
- adds r4, r0, 0
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _08023410
- b _080237C8
-_08023410:
- ldr r0, _08023488 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0802341E
- b _080237C8
-_0802341E:
- ldr r2, _0802348C @ =gUnknown_2023ECC
- ldrb r3, [r5]
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08023442
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08023442
- b _080237C8
-_08023442:
- ldr r2, _08023490 @ =gBattleMoves
- ldr r0, _08023494 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _08023458
- b _080237C8
-_08023458:
- adds r0, r3, 0
- muls r0, r7
- adds r1, r0, r6
- ldrb r2, [r1, 0x19]
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- ble _0802346A
- b _080237C8
-_0802346A:
- adds r0, r2, 0x1
- strb r0, [r1, 0x19]
- bl BattleScriptPushCursor
- ldr r1, _08023498 @ =gUnknown_2023D74
- ldr r0, _0802349C @ =gUnknown_81D8C48
- str r0, [r1]
- b _080236FC
- .align 2, 0
-_0802347C: .4byte gBattleMons
-_08023480: .4byte gBattlerTarget
-_08023484: .4byte sBattler_AI
-_08023488: .4byte gMoveResultFlags
-_0802348C: .4byte gUnknown_2023ECC
-_08023490: .4byte gBattleMoves
-_08023494: .4byte gCurrentMove
-_08023498: .4byte gUnknown_2023D74
-_0802349C: .4byte gUnknown_81D8C48
-_080234A0:
- ldr r4, _0802353C @ =gBattleMons
- ldr r6, _08023540 @ =gBattlerTarget
- ldrb r2, [r6]
- movs r5, 0x58
- mov r12, r5
- mov r1, r12
- muls r1, r2
- adds r7, r4, 0
- adds r7, 0x4C
- adds r5, r1, r7
- ldr r3, [r5]
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- bne _080234C0
- b _080237C8
-_080234C0:
- adds r0, r1, r4
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _080234CA
- b _080237C8
-_080234CA:
- ldr r0, _08023544 @ =sBattler_AI
- ldrb r0, [r0]
- cmp r0, r2
- bne _080234D4
- b _080237C8
-_080234D4:
- ldr r0, _08023548 @ =gUnknown_2023ECC
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0xC
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _080234E8
- b _080237C8
-_080234E8:
- ldr r0, _0802354C @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _080234F6
- b _080237C8
-_080234F6:
- ldr r0, [sp, 0x4]
- cmp r0, 0xA
- beq _080234FE
- b _080237C8
-_080234FE:
- movs r0, 0x21
- negs r0, r0
- ands r3, r0
- str r3, [r5]
- ldr r4, _08023550 @ =gActiveBattler
- ldrb r0, [r6]
- strb r0, [r4]
- ldrb r0, [r6]
- mov r1, r12
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- bl BattleScriptPushCursor
- ldr r1, _08023554 @ =gUnknown_2023D74
- ldr r0, _08023558 @ =gUnknown_81D9098
- str r0, [r1]
- movs r2, 0x1
- mov r10, r2
- b _080237C8
- .align 2, 0
-_0802353C: .4byte gBattleMons
-_08023540: .4byte gBattlerTarget
-_08023544: .4byte sBattler_AI
-_08023548: .4byte gUnknown_2023ECC
-_0802354C: .4byte gMoveResultFlags
-_08023550: .4byte gActiveBattler
-_08023554: .4byte gUnknown_2023D74
-_08023558: .4byte gUnknown_81D9098
-_0802355C:
- ldr r0, _0802357C @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x7
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _08023576
- b _080237C8
-_08023576:
- movs r3, 0x1
- mov r10, r3
- b _080237C8
- .align 2, 0
-_0802357C: .4byte gBattlerTarget
-_08023580:
- ldr r0, _08023594 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x4
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- b _080236F6
- .align 2, 0
-_08023594: .4byte gBattlerTarget
-_08023598:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x5
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _080235B0
- b _080237C8
-_080235B0:
- movs r5, 0x1
- mov r10, r5
- ldr r0, _080235BC @ =gBattleScripting
- mov r12, r0
- b _08023BB4
- .align 2, 0
-_080235BC: .4byte gBattleScripting
-_080235C0:
- ldr r0, _080235E0 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x8
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _080235DA
- b _080237C8
-_080235DA:
- movs r1, 0x1
- mov r10, r1
- b _080237C8
- .align 2, 0
-_080235E0: .4byte sBattler_AI
-_080235E4:
- ldr r0, _08023674 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _08023628
- ldr r2, [sp, 0x8]
- cmp r2, 0x1D
- bne _08023628
- ldr r0, _08023678 @ =gUnknown_2023D4C
- ldrh r2, [r0]
- adds r3, r0, 0
- cmp r2, 0xA5
- beq _08023628
- ldr r4, [sp, 0xC]
- ldrh r1, [r4]
- cmp r1, 0
- beq _08023610
- ldr r0, _0802367C @ =0x0000ffff
- cmp r1, r0
- bne _08023628
-_08023610:
- cmp r2, 0xE2
- bne _08023622
- ldr r0, _08023680 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08023622
- b _08023AFA
-_08023622:
- ldrh r0, [r3]
- ldr r1, [sp, 0xC]
- strh r0, [r1]
-_08023628:
- movs r4, 0
- ldr r2, _08023684 @ =gBattleMons
- ldr r3, _08023688 @ =sBattler_AI
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r2, 0xC
- adds r0, r2
- ldrh r0, [r0]
- ldr r5, [sp, 0xC]
- ldrh r1, [r5]
- mov r9, r3
- cmp r0, r1
- beq _08023660
- mov r6, r9
- movs r3, 0x58
- adds r5, r1, 0
-_0802364A:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08023660
- lsls r0, r4, 1
- ldrb r1, [r6]
- muls r1, r3
- adds r0, r1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r5
- bne _0802364A
-_08023660:
- cmp r4, 0x4
- bne _0802366A
- movs r0, 0
- ldr r1, [sp, 0xC]
- strh r0, [r1]
-_0802366A:
- mov r2, r12
- ldrb r0, [r2, 0x14]
- adds r0, 0x1
- strb r0, [r2, 0x14]
- b _08023BB4
- .align 2, 0
-_08023674: .4byte gUnknown_2023DD0
-_08023678: .4byte gUnknown_2023D4C
-_0802367C: .4byte 0x0000ffff
-_08023680: .4byte gMoveResultFlags
-_08023684: .4byte gBattleMons
-_08023688: .4byte sBattler_AI
-_0802368C:
- movs r4, 0
- ldr r0, _080236C0 @ =gBattlersCount
- ldrb r3, [r0]
- cmp r4, r3
- blt _08023698
- b _08023846
-_08023698:
- ldr r7, _080236C4 @ =gBattleStruct
- movs r6, 0
- movs r3, 0xD0
- adds r5, r0, 0
- ldr r2, _080236C8 @ =gBattleMons
-_080236A2:
- ldr r0, [r7]
- adds r0, r3
- ldrh r1, [r0]
- cmp r1, 0
- beq _080236B0
- strh r1, [r2, 0x2E]
- strh r6, [r0]
-_080236B0:
- adds r3, 0x2
- adds r2, 0x58
- adds r4, 0x1
- ldrb r0, [r5]
- cmp r4, r0
- blt _080236A2
- b _08023846
- .align 2, 0
-_080236C0: .4byte gBattlersCount
-_080236C4: .4byte gBattleStruct
-_080236C8: .4byte gBattleMons
-_080236CC:
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl sub_801BC68
- lsls r0, 24
- cmp r0, 0
- beq _080237C8
- movs r2, 0x1
- mov r10, r2
- ldr r3, _080236E8 @ =gBattleScripting
- mov r12, r3
- b _08023BB4
- .align 2, 0
-_080236E8: .4byte gBattleScripting
-_080236EC:
- movs r0, 0x4
- movs r1, 0
- movs r2, 0
- bl sub_801BC68
-_080236F6:
- lsls r0, 24
- cmp r0, 0
- beq _080237C8
-_080236FC:
- movs r4, 0x1
- mov r10, r4
- b _080237C8
-_08023702:
- ldr r1, _08023728 @ =gStatuses3
- ldr r0, _0802372C @ =sBattler_AI
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08023730 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08023718
- b _08023AFA
-_08023718:
- ldr r0, _08023734 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08023726
- b _080232AC
-_08023726:
- b _08023AFA
- .align 2, 0
-_08023728: .4byte gStatuses3
-_0802372C: .4byte sBattler_AI
-_08023730: .4byte 0x000400c0
-_08023734: .4byte gUnknown_2023DD0
-_08023738:
- ldr r0, _080237A8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _08023764
- ldr r1, _080237AC @ =gStatuses3
- ldr r0, _080237B0 @ =sBattler_AI
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080237B4 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08023764
- adds r0, r2, 0
- bl WasUnableToUseMove
- lsls r0, 24
- cmp r0, 0
- beq _080237C8
-_08023764:
- ldr r4, _080237B8 @ =gActiveBattler
- ldr r5, _080237B0 @ =sBattler_AI
- ldrb r0, [r5]
- strb r0, [r4]
- movs r0, 0
- movs r1, 0
- bl EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, _080237AC @ =gStatuses3
- ldrb r2, [r5]
- lsls r2, 2
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _080237BC @ =0xfffbff3f
- ands r0, r1
- str r0, [r2]
- ldr r2, _080237C0 @ =gUnknown_2023ECC
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_0802379E:
- ldr r1, _080237C4 @ =gBattleScripting
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- b _08023BFE
- .align 2, 0
-_080237A8: .4byte gMoveResultFlags
-_080237AC: .4byte gStatuses3
-_080237B0: .4byte sBattler_AI
-_080237B4: .4byte 0x000400c0
-_080237B8: .4byte gActiveBattler
-_080237BC: .4byte 0xfffbff3f
-_080237C0: .4byte gUnknown_2023ECC
-_080237C4: .4byte gBattleScripting
-_080237C8:
- ldr r1, _080237D4 @ =gBattleScripting
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- mov r12, r1
- b _08023BB4
- .align 2, 0
-_080237D4: .4byte gBattleScripting
-_080237D8:
- ldr r0, _08023808 @ =gUnknown_2023ECC
- ldr r6, _0802380C @ =gBattlerTarget
- ldrb r2, [r6]
- lsls r3, r2, 2
- adds r1, r3, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 29
- cmp r0, 0
- blt _08023846
- ldr r0, _08023810 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r2, r0
- bcs _08023846
- ldr r5, _08023814 @ =gStatuses3
- adds r0, r3, r5
- ldr r0, [r0]
- ldr r1, _08023818 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08023806
- b _080232C4
-_08023806:
- b _08023846
- .align 2, 0
-_08023808: .4byte gUnknown_2023ECC
-_0802380C: .4byte gBattlerTarget
-_08023810: .4byte gBattlersCount
-_08023814: .4byte gStatuses3
-_08023818: .4byte 0x000400c0
-_0802381C:
- movs r4, 0
- ldr r0, _08023850 @ =gBattlersCount
- ldrb r2, [r0]
- cmp r4, r2
- bge _08023846
- ldr r2, _08023854 @ =gDisableStructs
- ldr r5, _08023858 @ =0xfeffffff
- adds r3, r0, 0
- ldr r1, _0802385C @ =gUnknown_2023C34
-_0802382E:
- ldrb r0, [r2, 0xA]
- cmp r0, 0
- bne _0802383A
- ldr r0, [r1]
- ands r0, r5
- str r0, [r1]
-_0802383A:
- adds r2, 0x1C
- adds r1, 0x58
- adds r4, 0x1
- ldrb r0, [r3]
- cmp r4, r0
- blt _0802382E
-_08023846:
- mov r1, r12
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- b _08023BB4
- .align 2, 0
-_08023850: .4byte gBattlersCount
-_08023854: .4byte gDisableStructs
-_08023858: .4byte 0xfeffffff
-_0802385C: .4byte gUnknown_2023C34
-_08023860:
- ldr r1, _08023914 @ =gUnknown_2023DD0
- ldr r3, [r1]
- movs r0, 0x80
- lsls r0, 5
- ands r0, r3
- ldr r2, _08023918 @ =sBattler_AI
- mov r9, r2
- adds r5, r1, 0
- cmp r0, 0
- beq _0802388A
- ldr r0, _0802391C @ =gActiveBattler
- ldrb r2, [r2]
- strb r2, [r0]
- ldr r1, _08023920 @ =gBattlerTarget
- ldrb r0, [r1]
- mov r4, r9
- strb r0, [r4]
- strb r2, [r1]
- ldr r0, _08023924 @ =0xffffefff
- ands r3, r0
- str r3, [r5]
-_0802388A:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- beq _080238A6
- ldr r0, _08023928 @ =gUnknown_2023D90
- mov r2, r9
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r0, _0802392C @ =gUnknown_2023D4C
- ldrh r0, [r0]
- strh r0, [r1]
-_080238A6:
- ldr r0, _08023930 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08023934 @ =gBitTable
- mov r3, r9
- ldrb r4, [r3]
- lsls r0, r4, 2
- adds r0, r2
- ldr r3, [r0]
- ands r1, r3
- adds r6, r2, 0
- cmp r1, 0
- beq _080238C0
- b _08023A2C
-_080238C0:
- ldr r0, _08023938 @ =gBattleStruct
- ldr r1, [r0]
- adds r1, 0x91
- ldrb r1, [r1]
- ands r1, r3
- adds r7, r0, 0
- cmp r1, 0
- beq _080238D2
- b _08023A2C
-_080238D2:
- ldr r0, _0802393C @ =gBattleMoves
- ldr r2, [sp, 0x18]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r1, [r1]
- mov r8, r0
- cmp r1, 0x7F
- bne _080238E8
- b _08023A2C
-_080238E8:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _0802394C
- ldr r0, _08023940 @ =gLastUsedMove
- lsls r1, r4, 1
- adds r1, r0
- ldr r0, _0802392C @ =gUnknown_2023D4C
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r0, _08023944 @ =gUnknown_2023DB0
- mov r3, r9
- ldrb r1, [r3]
- lsls r1, 1
- adds r1, r0
- ldr r0, _08023948 @ =gCurrentMove
- ldrh r0, [r0]
- strh r0, [r1]
- b _08023966
- .align 2, 0
-_08023914: .4byte gUnknown_2023DD0
-_08023918: .4byte sBattler_AI
-_0802391C: .4byte gActiveBattler
-_08023920: .4byte gBattlerTarget
-_08023924: .4byte 0xffffefff
-_08023928: .4byte gUnknown_2023D90
-_0802392C: .4byte gUnknown_2023D4C
-_08023930: .4byte gAbsentBattlerFlags
-_08023934: .4byte gBitTable
-_08023938: .4byte gBattleStruct
-_0802393C: .4byte gBattleMoves
-_08023940: .4byte gLastUsedMove
-_08023944: .4byte gUnknown_2023DB0
-_08023948: .4byte gCurrentMove
-_0802394C:
- ldr r1, _080239B4 @ =gLastUsedMove
- lsls r0, r4, 1
- adds r0, r1
- ldr r1, _080239B8 @ =0x0000ffff
- strh r1, [r0]
- ldr r1, _080239BC @ =gUnknown_2023DB0
- mov r4, r9
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- movs r1, 0x1
- negs r1, r1
- strh r1, [r0]
-_08023966:
- ldr r2, _080239C0 @ =gBattlerTarget
- ldrb r3, [r2]
- lsls r0, r3, 2
- adds r0, r6
- ldr r0, [r0]
- lsls r0, 28
- ldr r1, [r5]
- ands r1, r0
- cmp r1, 0
- bne _08023984
- ldr r0, _080239C4 @ =gUnknown_2023DC0
- adds r0, r3, r0
- mov r3, r9
- ldrb r1, [r3]
- strb r1, [r0]
-_08023984:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _08023A20
- ldr r0, _080239C8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _08023A20
- ldr r0, _080239CC @ =gUnknown_2023D4C
- ldrh r3, [r0]
- ldr r0, _080239B8 @ =0x0000ffff
- cmp r3, r0
- bne _080239D4
- ldr r1, _080239D0 @ =gUnknown_2023DA0
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- strh r3, [r0]
- b _08023A2C
- .align 2, 0
-_080239B4: .4byte gLastUsedMove
-_080239B8: .4byte 0x0000ffff
-_080239BC: .4byte gUnknown_2023DB0
-_080239C0: .4byte gBattlerTarget
-_080239C4: .4byte gUnknown_2023DC0
-_080239C8: .4byte gMoveResultFlags
-_080239CC: .4byte gUnknown_2023D4C
-_080239D0: .4byte gUnknown_2023DA0
-_080239D4:
- ldr r0, _080239F8 @ =gUnknown_2023DA0
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r4, _080239FC @ =gCurrentMove
- ldrh r0, [r4]
- strh r0, [r1]
- ldr r0, [r7]
- ldrb r3, [r0, 0x13]
- cmp r3, 0
- beq _08023A04
- ldr r0, _08023A00 @ =gUnknown_2023DA8
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- movs r0, 0x3F
- ands r0, r3
- b _08023A2A
- .align 2, 0
-_080239F8: .4byte gUnknown_2023DA0
-_080239FC: .4byte gCurrentMove
-_08023A00: .4byte gUnknown_2023DA8
-_08023A04:
- ldr r0, _08023A1C @ =gUnknown_2023DA8
- ldrb r2, [r2]
- lsls r2, 1
- adds r2, r0
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x2]
- strh r0, [r2]
- b _08023A2C
- .align 2, 0
-_08023A1C: .4byte gUnknown_2023DA8
-_08023A20:
- ldr r0, _08023A38 @ =gUnknown_2023DA0
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r0, _08023A3C @ =0x0000ffff
-_08023A2A:
- strh r0, [r1]
-_08023A2C:
- mov r4, r12
- ldrb r0, [r4, 0x14]
- adds r0, 0x1
- strb r0, [r4, 0x14]
- b _08023BB4
- .align 2, 0
-_08023A38: .4byte gUnknown_2023DA0
-_08023A3C: .4byte 0x0000ffff
-_08023A40:
- ldr r0, _08023B04 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r7, _08023B08 @ =gBitTable
- ldr r2, _08023B0C @ =sBattler_AI
- ldrb r3, [r2]
- lsls r0, r3, 2
- adds r0, r7
- ldr r4, [r0]
- ands r1, r4
- mov r9, r2
- cmp r1, 0
- bne _08023AFA
- ldr r6, _08023B10 @ =gBattleStruct
- ldr r5, [r6]
- adds r0, r5, 0
- adds r0, 0x91
- ldrb r0, [r0]
- ands r0, r4
- cmp r0, 0
- bne _08023AFA
- ldr r1, _08023B14 @ =gBattleMoves
- ldr r2, [sp, 0x18]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08023AFA
- ldr r0, _08023B18 @ =gUnknown_2023DD0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 18
- ands r0, r1
- cmp r0, 0
- beq _08023AFA
- ldr r4, _08023B1C @ =gBattlerTarget
- ldrb r0, [r4]
- cmp r3, r0
- beq _08023AFA
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- lsls r0, 28
- ands r1, r0
- cmp r1, 0
- bne _08023AFA
- ldr r0, _08023B20 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _08023AFA
- lsls r1, r2, 1
- adds r1, r5
- adds r1, 0x98
- ldr r3, _08023B24 @ =gUnknown_2023D4C
- ldrh r0, [r3]
- strb r0, [r1]
- ldrb r1, [r4]
- ldr r0, [r6]
- lsls r1, 1
- adds r1, r0
- adds r1, 0x99
- ldrh r0, [r3]
- lsrs r0, 8
- strb r0, [r1]
- ldrb r0, [r4]
- mov r2, r9
- ldrb r1, [r2]
- ldr r2, [r6]
- lsls r0, 3
- lsls r1, 1
- adds r0, r1
- adds r0, r2
- adds r0, 0xE0
- ldrh r1, [r3]
- strb r1, [r0]
- ldrb r1, [r4]
- mov r4, r9
- ldrb r0, [r4]
- ldr r2, [r6]
- lsls r1, 3
- lsls r0, 1
- adds r1, r0
- adds r1, r2
- adds r1, 0xE1
- ldrh r0, [r3]
- lsrs r0, 8
- strb r0, [r1]
-_08023AFA:
- mov r5, r12
- ldrb r0, [r5, 0x14]
- adds r0, 0x1
- strb r0, [r5, 0x14]
- b _08023BB4
- .align 2, 0
-_08023B04: .4byte gAbsentBattlerFlags
-_08023B08: .4byte gBitTable
-_08023B0C: .4byte sBattler_AI
-_08023B10: .4byte gBattleStruct
-_08023B14: .4byte gBattleMoves
-_08023B18: .4byte gUnknown_2023DD0
-_08023B1C: .4byte gBattlerTarget
-_08023B20: .4byte gMoveResultFlags
-_08023B24: .4byte gUnknown_2023D4C
-_08023B28:
- ldr r5, _08023C10 @ =gUnknown_2023DD0
- ldr r2, [r5]
- movs r0, 0x80
- lsls r0, 12
- ands r0, r2
- cmp r0, 0
- bne _08023BAC
- ldr r0, _08023C14 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08023BAC
- ldr r1, _08023C18 @ =gUnknown_2023E8C
- ldr r0, _08023C1C @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x1]
- lsls r0, 29
- cmp r0, 0
- blt _08023BAC
- ldr r0, _08023C20 @ =gBattleMoves
- mov r9, r0
- ldr r1, _08023C24 @ =gCurrentMove
- mov r8, r1
- ldrh r0, [r1]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- add r1, r9
- ldrb r0, [r1, 0x6]
- cmp r0, 0x8
- bne _08023BAC
- movs r6, 0x80
- lsls r6, 2
- adds r4, r6, 0
- ands r4, r2
- cmp r4, 0
- bne _08023BAC
- ldr r7, _08023C28 @ =gBattlerTarget
- ldrb r0, [r7]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _08023C2C @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08023BA2
- bl _080232F0
-_08023BA2:
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- ldr r2, _08023C30 @ =gBattleScripting
- mov r12, r2
-_08023BAC:
- mov r3, r12
- ldrb r0, [r3, 0x14]
- adds r0, 0x1
- strb r0, [r3, 0x14]
-_08023BB4:
- ldr r4, [sp, 0x10]
- cmp r4, 0x1
- bne _08023BC6
- mov r5, r10
- cmp r5, 0
- bne _08023BC6
- movs r0, 0x11
- mov r1, r12
- strb r0, [r1, 0x14]
-_08023BC6:
- ldr r2, [sp, 0x10]
- cmp r2, 0x2
- bne _08023BDC
- ldr r4, [sp, 0x14]
- mov r3, r12
- ldrb r3, [r3, 0x14]
- cmp r4, r3
- bne _08023BDC
- movs r0, 0x11
- mov r4, r12
- strb r0, [r4, 0x14]
-_08023BDC:
- mov r5, r12
- ldrb r0, [r5, 0x14]
- cmp r0, 0x11
- beq _08023BE8
- bl _08023358
-_08023BE8:
- mov r1, r12
- ldrb r0, [r1, 0x14]
- cmp r0, 0x11
- bne _08023BFE
- mov r2, r10
- cmp r2, 0
- bne _08023BFE
- ldr r1, _08023C34 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x3
-_08023BFC:
- str r0, [r1]
-_08023BFE:
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08023C10: .4byte gUnknown_2023DD0
-_08023C14: .4byte gBattleTypeFlags
-_08023C18: .4byte gUnknown_2023E8C
-_08023C1C: .4byte sBattler_AI
-_08023C20: .4byte gBattleMoves
-_08023C24: .4byte gCurrentMove
-_08023C28: .4byte gBattlerTarget
-_08023C2C: .4byte gBattleMons
-_08023C30: .4byte gBattleScripting
-_08023C34: .4byte gUnknown_2023D74
- thumb_func_end atk49_moveend
-
- thumb_func_start atk4A_typecalc2
-atk4A_typecalc2: @ 8023C38
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r4, 0
- movs r5, 0
- ldr r2, _08023C9C @ =gBattleMoves
- ldr r0, _08023CA0 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- mov r8, r0
- ldr r2, _08023CA4 @ =gBattleMons
- ldr r3, _08023CA8 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- mov r12, r2
- adds r7, r3, 0
- cmp r0, 0x1A
- bne _08023CCC
- mov r1, r8
- cmp r1, 0x4
- bne _08023CCC
- ldr r3, _08023CAC @ =gLastUsedAbility
- strb r0, [r3]
- ldr r2, _08023CB0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x9
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08023CB4 @ =gUnknown_2023DA0
- ldrb r0, [r7]
- lsls r0, 1
- adds r0, r1
- strh r4, [r0]
- ldr r0, _08023CB8 @ =gUnknown_2023E82
- mov r2, r8
- strb r2, [r0, 0x6]
- ldrb r0, [r7]
- ldrb r1, [r3]
- bl sub_80C71D0
- b _08023DAE
- .align 2, 0
-_08023C9C: .4byte gBattleMoves
-_08023CA0: .4byte gCurrentMove
-_08023CA4: .4byte gBattleMons
-_08023CA8: .4byte gBattlerTarget
-_08023CAC: .4byte gLastUsedAbility
-_08023CB0: .4byte gMoveResultFlags
-_08023CB4: .4byte gUnknown_2023DA0
-_08023CB8: .4byte gUnknown_2023E82
-_08023CBC:
- ldr r0, _08023CC8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0]
- b _08023DAE
- .align 2, 0
-_08023CC8: .4byte gMoveResultFlags
-_08023CCC:
- ldr r1, _08023CD8 @ =gUnknown_824F050
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r6, r1, 0
- b _08023D8E
- .align 2, 0
-_08023CD8: .4byte gUnknown_824F050
-_08023CDC:
- adds r0, r5, r6
- ldrb r0, [r0]
- cmp r0, r8
- bne _08023D88
- adds r2, r5, 0x1
- adds r3, r2, r6
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r12
- adds r0, 0x21
- ldrb r1, [r3]
- adds r3, r2, 0
- ldrb r0, [r0]
- cmp r1, r0
- bne _08023D1A
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r1, [r0]
- cmp r1, 0
- beq _08023CBC
- cmp r1, 0x5
- bne _08023D0E
- movs r0, 0x4
- orrs r4, r0
-_08023D0E:
- cmp r1, 0x14
- bne _08023D1A
- movs r0, 0x2
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08023D1A:
- adds r2, r3, r6
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r12
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _08023D88
- adds r0, 0x21
- ldrb r1, [r0]
- cmp r1, r2
- beq _08023D42
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0
- beq _08023CBC
-_08023D42:
- cmp r1, r2
- beq _08023D58
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0x5
- bne _08023D58
- movs r0, 0x4
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08023D58:
- adds r2, r3, r6
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r12
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _08023D88
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _08023D88
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _08023D88
- movs r0, 0x2
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08023D88:
- adds r5, 0x3
- adds r0, r5, r6
- ldrb r0, [r0]
-_08023D8E:
- cmp r0, 0xFF
- beq _08023DAE
- cmp r0, 0xFE
- bne _08023CDC
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- mov r1, r12
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _08023D88
-_08023DAE:
- ldr r2, _08023E5C @ =gBattleMons
- ldr r0, _08023E60 @ =gBattlerTarget
- mov r8, r0
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r6, [r0]
- cmp r6, 0x19
- bne _08023E2A
- movs r5, 0x29
- ands r5, r4
- cmp r5, 0
- bne _08023E2A
- ldr r0, _08023E64 @ =sBattler_AI
- ldrb r0, [r0]
- ldr r7, _08023E68 @ =gCurrentMove
- ldrh r1, [r7]
- bl AttacksThisTurn
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x2
- bne _08023E2A
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08023DF0
- movs r0, 0x6
- ands r4, r0
- cmp r4, 0x6
- bne _08023E2A
-_08023DF0:
- ldr r2, _08023E6C @ =gBattleMoves
- ldrh r1, [r7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _08023E2A
- ldr r3, _08023E70 @ =gLastUsedAbility
- strb r6, [r3]
- ldr r2, _08023E74 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08023E78 @ =gUnknown_2023DA0
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- strh r5, [r0]
- ldr r1, _08023E7C @ =gUnknown_2023E82
- movs r0, 0x3
- strb r0, [r1, 0x6]
- ldrb r0, [r2]
- ldrb r1, [r3]
- bl sub_80C71D0
-_08023E2A:
- ldr r0, _08023E74 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08023E48
- ldr r2, _08023E80 @ =gUnknown_2023E8C
- ldr r0, _08023E64 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r1, 4
- adds r1, r2
- ldrb r0, [r1, 0x1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1, 0x1]
-_08023E48:
- ldr r1, _08023E84 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08023E5C: .4byte gBattleMons
-_08023E60: .4byte gBattlerTarget
-_08023E64: .4byte sBattler_AI
-_08023E68: .4byte gCurrentMove
-_08023E6C: .4byte gBattleMoves
-_08023E70: .4byte gLastUsedAbility
-_08023E74: .4byte gMoveResultFlags
-_08023E78: .4byte gUnknown_2023DA0
-_08023E7C: .4byte gUnknown_2023E82
-_08023E80: .4byte gUnknown_2023E8C
-_08023E84: .4byte gUnknown_2023D74
- thumb_func_end atk4A_typecalc2
-
- thumb_func_start atk4B_returnatktoball
-atk4B_returnatktoball: @ 8023E88
- push {r4,lr}
- ldr r4, _08023EC4 @ =gActiveBattler
- ldr r0, _08023EC8 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r2, _08023ECC @ =gUnknown_2023DD0
- ldr r1, _08023ED0 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- ands r0, r1
- cmp r0, 0
- bne _08023EB6
- movs r0, 0
- movs r1, 0
- bl EmitReturnMonToBall
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08023EB6:
- ldr r1, _08023ED4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08023EC4: .4byte gActiveBattler
-_08023EC8: .4byte sBattler_AI
-_08023ECC: .4byte gUnknown_2023DD0
-_08023ED0: .4byte gBitTable
-_08023ED4: .4byte gUnknown_2023D74
- thumb_func_end atk4B_returnatktoball
-
- thumb_func_start atk4C_getswitchedmondata
-atk4C_getswitchedmondata: @ 8023ED8
- push {r4,r5,lr}
- ldr r0, _08023F30 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _08023F28
- ldr r5, _08023F34 @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _08023F38 @ =gActiveBattler
- strb r0, [r4]
- ldr r3, _08023F3C @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r2, r0, 1
- adds r2, r3
- ldr r1, _08023F40 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- strh r0, [r2]
- ldr r1, _08023F44 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0]
- movs r0, 0
- movs r1, 0
- bl BtlController_EmitGetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_08023F28:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08023F30: .4byte gUnknown_2023BC8
-_08023F34: .4byte gUnknown_2023D74
-_08023F38: .4byte gActiveBattler
-_08023F3C: .4byte gBattlerPartyIndexes
-_08023F40: .4byte gBattleStruct
-_08023F44: .4byte gBitTable
- thumb_func_end atk4C_getswitchedmondata
-
- thumb_func_start sub_8023F48
-sub_8023F48: @ 8023F48
- push {r4-r7,lr}
- sub sp, 0x58
- ldr r0, _080240A0 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _08023F56
- b _08024098
-_08023F56:
- ldr r0, _080240A4 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _080240A8 @ =gActiveBattler
- strb r0, [r4]
- ldr r6, _080240AC @ =gBattleMons
- ldrb r0, [r4]
- movs r5, 0x58
- adds r1, r0, 0
- muls r1, r5
- adds r1, r6
- mov r0, sp
- movs r2, 0x58
- bl memcpy
- ldrb r0, [r4]
- muls r0, r5
- adds r3, r0, r6
- movs r2, 0
- ldr r5, _080240B0 @ =gUnknown_20233C4
- adds r7, r4, 0
-_08023F84:
- adds r0, r3, r2
- ldrb r1, [r4]
- lsls r1, 9
- adds r1, 0x4
- adds r1, r2, r1
- adds r1, r5
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x57
- bls _08023F84
- ldr r4, _080240AC @ =gBattleMons
- ldrb r0, [r7]
- movs r6, 0x58
- adds r2, r0, 0
- muls r2, r6
- adds r2, r4
- ldr r3, _080240B4 @ =gBaseStats
- ldrh r1, [r2]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x6]
- adds r2, 0x21
- strb r0, [r2]
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r4
- ldrh r2, [r1]
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x7]
- adds r1, 0x22
- strb r0, [r1]
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r4
- ldrh r0, [r1]
- ldrb r1, [r1, 0x17]
- lsrs r1, 7
- bl GetAbilityBySpecies
- ldrb r1, [r7]
- muls r1, r6
- adds r1, r4
- adds r1, 0x20
- strb r0, [r1]
- ldrb r0, [r7]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080240B8 @ =gUnknown_2023F20
- adds r0, 0x29
- adds r0, r2, r0
- ldrb r1, [r0]
- ldr r3, _080240BC @ =gBitTable
- ldr r2, _080240C0 @ =gBattlerPartyIndexes
- ldrb r5, [r7]
- lsls r0, r5, 1
- adds r0, r2
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ands r1, r0
- mov r12, r4
- cmp r1, 0
- beq _08024022
- adds r0, r5, 0
- muls r0, r6
- add r0, r12
- movs r1, 0
- strh r1, [r0, 0x2E]
-_08024022:
- ldr r2, _080240C4 @ =gBattleMoves
- ldr r0, _080240C8 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7F
- bne _08024068
- movs r2, 0
- adds r4, r7, 0
- movs r6, 0x58
- mov r5, r12
- adds r5, 0x18
- add r3, sp, 0x18
-_08024042:
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r2, r1
- adds r1, r5
- adds r0, r3, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0x7
- ble _08024042
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- mov r1, r12
- adds r1, 0x50
- adds r0, r1
- ldr r1, [sp, 0x50]
- str r1, [r0]
-_08024068:
- bl sub_8012760
- ldr r0, _080240CC @ =gBattleScripting
- ldr r3, _080240A8 @ =gActiveBattler
- ldrb r2, [r3]
- strb r2, [r0, 0x17]
- ldr r1, _080240D0 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x7
- strb r0, [r1, 0x1]
- strb r2, [r1, 0x2]
- ldr r2, _080240C0 @ =gBattlerPartyIndexes
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _080240A4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_08024098:
- add sp, 0x58
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080240A0: .4byte gUnknown_2023BC8
-_080240A4: .4byte gUnknown_2023D74
-_080240A8: .4byte gActiveBattler
-_080240AC: .4byte gBattleMons
-_080240B0: .4byte gUnknown_20233C4
-_080240B4: .4byte gBaseStats
-_080240B8: .4byte gUnknown_2023F20
-_080240BC: .4byte gBitTable
-_080240C0: .4byte gBattlerPartyIndexes
-_080240C4: .4byte gBattleMoves
-_080240C8: .4byte gCurrentMove
-_080240CC: .4byte gBattleScripting
-_080240D0: .4byte gBattleTextBuff1
- thumb_func_end sub_8023F48
-
- thumb_func_start sub_80240D4
-sub_80240D4: @ 80240D4
- push {r4-r6,lr}
- ldr r0, _08024168 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _08024160
- ldr r0, _0802416C @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r6, _08024170 @ =gActiveBattler
- strb r0, [r6]
- ldrb r0, [r6]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0802412A
- ldr r0, _08024174 @ =gBattleTypeFlags
- ldr r0, [r0]
- ldr r1, _08024178 @ =0x0001aa02
- ands r0, r1
- cmp r0, 0
- bne _0802412A
- ldr r4, _0802417C @ =gBattleMons
- ldrb r0, [r6]
- movs r5, 0x58
- muls r0, r5
- adds r0, r4
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r6]
- muls r1, r5
- adds r4, 0x48
- adds r1, r4
- ldr r2, [r1]
- movs r1, 0x2
- bl HandleSetPokedexFlag
-_0802412A:
- ldr r2, _08024180 @ =gAbsentBattlerFlags
- ldr r1, _08024184 @ =gBitTable
- ldr r5, _08024170 @ =gActiveBattler
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- ldr r1, _08024188 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrb r1, [r0]
- ldr r4, _0802416C @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r2, [r0, 0x2]
- movs r0, 0
- bl EmitSwitchInAnim
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
-_08024160:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08024168: .4byte gUnknown_2023BC8
-_0802416C: .4byte gUnknown_2023D74
-_08024170: .4byte gActiveBattler
-_08024174: .4byte gBattleTypeFlags
-_08024178: .4byte 0x0001aa02
-_0802417C: .4byte gBattleMons
-_08024180: .4byte gAbsentBattlerFlags
-_08024184: .4byte gBitTable
-_08024188: .4byte gBattlerPartyIndexes
- thumb_func_end sub_80240D4
-
- thumb_func_start sub_802418C
-sub_802418C: @ 802418C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, _080241F0 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- movs r0, 0x7F
- ands r0, r1
- bl sub_8016E24
- ldr r3, _080241F4 @ =gActiveBattler
- strb r0, [r3]
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08024204
- ldr r1, _080241F8 @ =gBattleMons
- ldrb r3, [r3]
- movs r0, 0x58
- muls r0, r3
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080241FC @ =0x0400e000
- ands r0, r1
- cmp r0, 0
- bne _080241D8
- ldr r1, _08024200 @ =gStatuses3
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- beq _08024204
-_080241D8:
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08024388
- .align 2, 0
-_080241F0: .4byte gUnknown_2023D74
-_080241F4: .4byte gActiveBattler
-_080241F8: .4byte gBattleMons
-_080241FC: .4byte 0x0400e000
-_08024200: .4byte gStatuses3
-_08024204:
- ldr r5, _08024290 @ =gBattleTypeFlags
- ldr r0, [r5]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080242A4
- ldr r4, _08024294 @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08024298 @ =gPlayerParty
- mov r8, r1
- cmp r0, 0x1
- bne _08024228
- ldr r0, _0802429C @ =gEnemyParty
- mov r8, r0
-_08024228:
- movs r5, 0
- ldrb r0, [r4]
- bl GetBankMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- bl GetLinkTrainerFlankId
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _08024242
- movs r5, 0x3
-_08024242:
- adds r6, r5, 0x3
- cmp r5, r6
- bge _0802428A
- ldr r7, _080242A0 @ =gBattlerPartyIndexes
-_0802424A:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08024284
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08024284
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08024284
- ldr r0, _08024294 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- cmp r0, r5
- bne _0802428A
-_08024284:
- adds r5, 0x1
- cmp r5, r6
- blt _0802424A
-_0802428A:
- cmp r5, r6
- beq _08024358
- b _08024380
- .align 2, 0
-_08024290: .4byte gBattleTypeFlags
-_08024294: .4byte gActiveBattler
-_08024298: .4byte gPlayerParty
-_0802429C: .4byte gEnemyParty
-_080242A0: .4byte gBattlerPartyIndexes
-_080242A4:
- ldr r0, _080242D4 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bne _080242E4
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, [r5]
- ands r0, r4
- cmp r0, 0
- beq _080242D8
- movs r0, 0x3
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- b _080242DA
- .align 2, 0
-_080242D4: .4byte gActiveBattler
-_080242D8:
- adds r6, r7, 0
-_080242DA:
- ldr r0, _080242E0 @ =gEnemyParty
- mov r8, r0
- b _0802430A
- .align 2, 0
-_080242E0: .4byte gEnemyParty
-_080242E4:
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, [r5]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08024304
- movs r0, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- b _08024306
-_08024304:
- adds r6, r7, 0
-_08024306:
- ldr r1, _08024374 @ =gPlayerParty
- mov r8, r1
-_0802430A:
- movs r5, 0
-_0802430C:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0802434E
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0802434E
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0802434E
- ldr r1, _08024378 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r5, r0
- beq _0802434E
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r5, r0
- bne _08024354
-_0802434E:
- adds r5, 0x1
- cmp r5, 0x5
- ble _0802430C
-_08024354:
- cmp r5, 0x6
- bne _08024380
-_08024358:
- ldr r3, _0802437C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08024388
- .align 2, 0
-_08024374: .4byte gPlayerParty
-_08024378: .4byte gBattlerPartyIndexes
-_0802437C: .4byte gUnknown_2023D74
-_08024380:
- ldr r1, _08024394 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
-_08024388:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08024394: .4byte gUnknown_2023D74
- thumb_func_end sub_802418C
-
- thumb_func_start sub_8024398
-sub_8024398: @ 8024398
- push {r4,r5,lr}
- sub sp, 0x4
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r4, _080243E0 @ =gActiveBattler
- ldrb r0, [r4]
- ldr r5, _080243E4 @ =gBattleStruct
- ldr r1, [r5]
- adds r1, r0, r1
- adds r1, 0x58
- ldr r3, _080243E8 @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r4]
- lsls r1, r0, 1
- adds r1, r0
- adds r1, 0x60
- ldr r0, [r5]
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x1
- movs r3, 0
- bl EmitChoosePokemon
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080243E0: .4byte gActiveBattler
-_080243E4: .4byte gBattleStruct
-_080243E8: .4byte gBattlerPartyIndexes
- thumb_func_end sub_8024398
-
- thumb_func_start sub_80243EC
-sub_80243EC: @ 80243EC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r7, 0
- movs r0, 0
- mov r9, r0
- ldr r6, _08024498 @ =gUnknown_2023D74
- ldr r2, [r6]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- mov r8, r1
- ldrb r1, [r2, 0x1]
- adds r0, r1, 0
- mov r12, r6
- cmp r0, 0x5
- beq _08024422
- b _080248B8
-_08024422:
- ldr r0, _0802449C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x41
- ands r1, r0
- cmp r1, 0x1
- beq _08024510
- ldr r1, _080244A0 @ =gActiveBattler
- strb r7, [r1]
- ldr r0, _080244A4 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r7, r0
- bcc _0802443C
- b _080248A6
-_0802443C:
- ldr r7, _080244A8 @ =gUnknown_2023DD0
- ldr r6, _080244AC @ =gBitTable
- adds r4, r1, 0
- ldr r2, _080244B0 @ =gAbsentBattlerFlags
- mov r8, r2
-_08024446:
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r7]
- ands r0, r1
- cmp r0, 0
- beq _080244E8
- adds r0, r2, 0
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8019C10
- lsls r0, 24
- cmp r0, 0
- beq _080244B4
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- mov r2, r8
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r7]
- bics r0, r1
- str r0, [r7]
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _080244F6
- .align 2, 0
-_08024498: .4byte gUnknown_2023D74
-_0802449C: .4byte gBattleTypeFlags
-_080244A0: .4byte gActiveBattler
-_080244A4: .4byte gBattlersCount
-_080244A8: .4byte gUnknown_2023DD0
-_080244AC: .4byte gBitTable
-_080244B0: .4byte gAbsentBattlerFlags
-_080244B4:
- ldr r5, _080244E4 @ =gUnknown_2023ECC
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _080244F6
- movs r0, 0x6
- bl sub_8024398
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _080244F6
- .align 2, 0
-_080244E4: .4byte gUnknown_2023ECC
-_080244E8:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_080244F6:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _0802450C @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08024446
- b _080248A6
- .align 2, 0
-_0802450C: .4byte gBattlersCount
-_08024510:
- ands r0, r1
- cmp r0, 0
- bne _08024518
- b _080248A6
-_08024518:
- ldr r0, _08024570 @ =gUnknown_2023DD0
- mov r8, r0
- ldr r0, [r0]
- lsrs r5, r0, 28
- ldr r6, _08024574 @ =gBitTable
- ldr r0, [r6]
- ands r0, r5
- cmp r0, 0
- beq _080245CE
- ldr r4, _08024578 @ =gActiveBattler
- strb r7, [r4]
- movs r0, 0
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8019C10
- lsls r0, 24
- cmp r0, 0
- beq _08024580
- ldr r2, _0802457C @ =gAbsentBattlerFlags
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- mov r2, r8
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl EmitCmd42
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _080245CE
- .align 2, 0
-_08024570: .4byte gUnknown_2023DD0
-_08024574: .4byte gBitTable
-_08024578: .4byte gActiveBattler
-_0802457C: .4byte gAbsentBattlerFlags
-_08024580:
- ldr r6, _080245B4 @ =gUnknown_2023ECC
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _080245BC
- ldr r0, _080245B8 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x5E
- ldrb r0, [r0]
- bl sub_8024398
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _080245CE
- .align 2, 0
-_080245B4: .4byte gUnknown_2023ECC
-_080245B8: .4byte gBattleStruct
-_080245BC:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- movs r0, 0x1
- mov r9, r0
-_080245CE:
- ldr r6, _08024628 @ =gBitTable
- ldr r0, [r6, 0x8]
- ands r0, r5
- cmp r0, 0
- beq _0802468C
- ldr r0, [r6]
- ands r0, r5
- cmp r0, 0
- bne _0802468C
- ldr r4, _0802462C @ =gActiveBattler
- movs r0, 0x2
- strb r0, [r4]
- movs r0, 0x2
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8019C10
- lsls r0, 24
- cmp r0, 0
- beq _08024638
- ldr r2, _08024630 @ =gAbsentBattlerFlags
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, _08024634 @ =gUnknown_2023DD0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl EmitCmd42
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0802468C
- .align 2, 0
-_08024628: .4byte gBitTable
-_0802462C: .4byte gActiveBattler
-_08024630: .4byte gAbsentBattlerFlags
-_08024634: .4byte gUnknown_2023DD0
-_08024638:
- ldr r6, _0802466C @ =gUnknown_2023ECC
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08024674
- ldr r0, _08024670 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x5C
- ldrb r0, [r0]
- bl sub_8024398
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _0802468C
- .align 2, 0
-_0802466C: .4byte gUnknown_2023ECC
-_08024670: .4byte gBattleStruct
-_08024674:
- movs r0, 0x1
- mov r1, r9
- ands r0, r1
- cmp r0, 0
- bne _0802468C
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_0802468C:
- ldr r6, _080246DC @ =gBitTable
- ldr r0, [r6, 0x4]
- ands r0, r5
- cmp r0, 0
- beq _0802473E
- ldr r4, _080246E0 @ =gActiveBattler
- movs r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8019C10
- lsls r0, 24
- cmp r0, 0
- beq _080246EC
- ldr r2, _080246E4 @ =gAbsentBattlerFlags
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, _080246E8 @ =gUnknown_2023DD0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl EmitCmd42
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0802473E
- .align 2, 0
-_080246DC: .4byte gBitTable
-_080246E0: .4byte gActiveBattler
-_080246E4: .4byte gAbsentBattlerFlags
-_080246E8: .4byte gUnknown_2023DD0
-_080246EC:
- ldr r6, _08024720 @ =gUnknown_2023ECC
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08024728
- ldr r0, _08024724 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x5F
- ldrb r0, [r0]
- bl sub_8024398
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _0802473E
- .align 2, 0
-_08024720: .4byte gUnknown_2023ECC
-_08024724: .4byte gBattleStruct
-_08024728:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- movs r0, 0x2
- mov r2, r9
- orrs r2, r0
- mov r9, r2
-_0802473E:
- ldr r6, _08024798 @ =gBitTable
- ldr r0, [r6, 0xC]
- ands r0, r5
- cmp r0, 0
- beq _080247FC
- ldr r0, [r6, 0x4]
- ands r0, r5
- cmp r0, 0
- bne _080247FC
- ldr r4, _0802479C @ =gActiveBattler
- movs r0, 0x3
- strb r0, [r4]
- movs r0, 0x3
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8019C10
- lsls r0, 24
- cmp r0, 0
- beq _080247A8
- ldr r2, _080247A0 @ =gAbsentBattlerFlags
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, _080247A4 @ =gUnknown_2023DD0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl EmitCmd42
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _080247FC
- .align 2, 0
-_08024798: .4byte gBitTable
-_0802479C: .4byte gActiveBattler
-_080247A0: .4byte gAbsentBattlerFlags
-_080247A4: .4byte gUnknown_2023DD0
-_080247A8:
- ldr r6, _080247DC @ =gUnknown_2023ECC
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _080247E4
- ldr r0, _080247E0 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x5D
- ldrb r0, [r0]
- bl sub_8024398
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _080247FC
- .align 2, 0
-_080247DC: .4byte gUnknown_2023ECC
-_080247E0: .4byte gBattleStruct
-_080247E4:
- movs r0, 0x2
- mov r1, r9
- ands r1, r0
- cmp r1, 0
- bne _080247FC
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_080247FC:
- ldr r1, _0802482C @ =gUnknown_2023ECC
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08024850
- adds r0, r1, 0
- adds r0, 0x28
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- blt _08024850
- cmp r5, 0
- beq _08024850
- ldr r0, _08024830 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r0, _08024834 @ =gBitTable
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0802483C
- ldr r1, _08024838 @ =gActiveBattler
- movs r0, 0x2
- strb r0, [r1]
- b _08024840
- .align 2, 0
-_0802482C: .4byte gUnknown_2023ECC
-_08024830: .4byte gAbsentBattlerFlags
-_08024834: .4byte gBitTable
-_08024838: .4byte gActiveBattler
-_0802483C:
- ldr r0, _08024880 @ =gActiveBattler
- strb r1, [r0]
-_08024840:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldr r0, _08024880 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
-_08024850:
- ldr r1, _08024884 @ =gUnknown_2023ECC
- ldrb r0, [r1, 0x14]
- lsls r0, 25
- cmp r0, 0
- blt _080248A6
- adds r0, r1, 0
- adds r0, 0x3C
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- blt _080248A6
- cmp r5, 0
- beq _080248A6
- ldr r0, _08024888 @ =gAbsentBattlerFlags
- ldrb r0, [r0]
- ldr r1, _0802488C @ =gBitTable
- ldr r1, [r1, 0x4]
- ands r0, r1
- cmp r0, 0
- beq _08024890
- ldr r1, _08024880 @ =gActiveBattler
- movs r0, 0x3
- b _08024894
- .align 2, 0
-_08024880: .4byte gActiveBattler
-_08024884: .4byte gUnknown_2023ECC
-_08024888: .4byte gAbsentBattlerFlags
-_0802488C: .4byte gBitTable
-_08024890:
- ldr r1, _080248B0 @ =gActiveBattler
- movs r0, 0x1
-_08024894:
- strb r0, [r1]
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldr r0, _080248B0 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
-_080248A6:
- ldr r1, _080248B4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
- b _08024C2E
- .align 2, 0
-_080248B0: .4byte gActiveBattler
-_080248B4: .4byte gUnknown_2023D74
-_080248B8:
- cmp r0, 0x6
- beq _080248BE
- b _08024AAC
-_080248BE:
- ldr r0, _08024934 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080248CC
- b _08024A48
-_080248CC:
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- bne _080248D6
- b _08024A48
-_080248D6:
- ldr r7, _08024938 @ =gUnknown_2023DD0
- ldr r0, [r7]
- lsrs r5, r0, 28
- ldr r4, _0802493C @ =gBitTable
- ldr r0, [r4, 0x8]
- ands r0, r5
- cmp r0, 0
- beq _0802497E
- ldr r0, [r4]
- ands r0, r5
- cmp r0, 0
- beq _0802497E
- ldr r6, _08024940 @ =gActiveBattler
- movs r0, 0x2
- strb r0, [r6]
- ldr r0, _08024944 @ =gUnknown_20233C4
- ldrb r1, [r0, 0x1]
- movs r0, 0x2
- movs r2, 0x6
- bl sub_8019C10
- lsls r0, 24
- cmp r0, 0
- beq _0802494C
- ldr r2, _08024948 @ =gAbsentBattlerFlags
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r4
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r7]
- bics r0, r1
- str r0, [r7]
- movs r0, 0
- bl EmitCmd42
- ldrb r0, [r6]
- bl MarkBufferBankForExecution
- b _0802497E
- .align 2, 0
-_08024934: .4byte gBattleTypeFlags
-_08024938: .4byte gUnknown_2023DD0
-_0802493C: .4byte gBitTable
-_08024940: .4byte gActiveBattler
-_08024944: .4byte gUnknown_20233C4
-_08024948: .4byte gAbsentBattlerFlags
-_0802494C:
- ldr r4, _080249DC @ =gUnknown_2023ECC
- ldrb r0, [r6]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _0802497E
- ldr r0, _080249E0 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x5C
- ldrb r0, [r0]
- bl sub_8024398
- ldrb r1, [r6]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
-_0802497E:
- ldr r4, _080249E4 @ =gBitTable
- ldr r0, [r4, 0xC]
- ands r0, r5
- cmp r0, 0
- beq _08024A2E
- ldr r0, [r4, 0x4]
- ands r5, r0
- cmp r5, 0
- beq _08024A2E
- ldr r5, _080249E8 @ =gActiveBattler
- movs r0, 0x3
- strb r0, [r5]
- ldr r0, _080249EC @ =gUnknown_20233C4
- ldr r2, _080249F0 @ =0x00000201
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x3
- movs r2, 0x6
- bl sub_8019C10
- lsls r0, 24
- cmp r0, 0
- beq _080249FC
- ldr r2, _080249F4 @ =gAbsentBattlerFlags
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, _080249F8 @ =gUnknown_2023DD0
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r4
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- movs r0, 0
- bl EmitCmd42
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- b _08024A2E
- .align 2, 0
-_080249DC: .4byte gUnknown_2023ECC
-_080249E0: .4byte gBattleStruct
-_080249E4: .4byte gBitTable
-_080249E8: .4byte gActiveBattler
-_080249EC: .4byte gUnknown_20233C4
-_080249F0: .4byte 0x00000201
-_080249F4: .4byte gAbsentBattlerFlags
-_080249F8: .4byte gUnknown_2023DD0
-_080249FC:
- ldr r4, _08024A3C @ =gUnknown_2023ECC
- ldrb r0, [r5]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08024A2E
- ldr r0, _08024A40 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x5D
- ldrb r0, [r0]
- bl sub_8024398
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
-_08024A2E:
- ldr r1, _08024A44 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
- mov r12, r1
- b _08024A4C
- .align 2, 0
-_08024A3C: .4byte gUnknown_2023ECC
-_08024A40: .4byte gBattleStruct
-_08024A44: .4byte gUnknown_2023D74
-_08024A48:
- adds r0, r2, 0x6
- str r0, [r6]
-_08024A4C:
- ldr r0, _08024A9C @ =gUnknown_2023DD0
- ldr r0, [r0]
- lsrs r5, r0, 28
- ldr r1, _08024AA0 @ =gUnknown_2023D6D
- movs r0, 0
- strb r0, [r1]
- ldr r4, _08024AA4 @ =gBitTable
- ldr r2, [r4]
- ands r2, r5
- ldr r6, _08024AA8 @ =gBattlersCount
- cmp r2, 0
- bne _08024A88
- adds r7, r6, 0
- ldrb r0, [r6]
- cmp r2, r0
- bcs _08024A88
- adds r3, r1, 0
-_08024A6E:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- ldrb r2, [r3]
- lsls r0, r2, 2
- adds r0, r4
- ldr r0, [r0]
- ands r0, r5
- cmp r0, 0
- bne _08024A88
- ldrb r0, [r7]
- cmp r2, r0
- bcc _08024A6E
-_08024A88:
- ldrb r0, [r1]
- ldrb r6, [r6]
- cmp r0, r6
- beq _08024A92
- b _08024C2E
-_08024A92:
- mov r1, r8
- mov r2, r12
- str r1, [r2]
- b _08024C2E
- .align 2, 0
-_08024A9C: .4byte gUnknown_2023DD0
-_08024AA0: .4byte gUnknown_2023D6D
-_08024AA4: .4byte gBitTable
-_08024AA8: .4byte gBattlersCount
-_08024AAC:
- movs r0, 0x80
- ands r0, r1
- movs r5, 0x1
- cmp r0, 0
- beq _08024AB8
- movs r5, 0
-_08024AB8:
- movs r0, 0x7F
- ands r0, r1
- bl sub_8016E24
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, _08024AE0 @ =gUnknown_2023ECC
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- bge _08024AE4
- ldr r0, [r6]
- adds r0, 0x6
- str r0, [r6]
- b _08024C2E
- .align 2, 0
-_08024AE0: .4byte gUnknown_2023ECC
-_08024AE4:
- adds r0, r7, 0
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8019C10
- lsls r0, 24
- cmp r0, 0
- beq _08024B34
- ldr r2, _08024B24 @ =gActiveBattler
- strb r7, [r2]
- ldr r3, _08024B28 @ =gAbsentBattlerFlags
- ldr r4, _08024B2C @ =gBitTable
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- ldrb r1, [r3]
- orrs r0, r1
- strb r0, [r3]
- ldr r3, _08024B30 @ =gUnknown_2023DD0
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r4
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r3]
- bics r0, r1
- str r0, [r3]
- mov r0, r8
- str r0, [r6]
- b _08024C2E
- .align 2, 0
-_08024B24: .4byte gActiveBattler
-_08024B28: .4byte gAbsentBattlerFlags
-_08024B2C: .4byte gBitTable
-_08024B30: .4byte gUnknown_2023DD0
-_08024B34:
- ldr r4, _08024BD8 @ =gActiveBattler
- strb r7, [r4]
- ldrb r0, [r4]
- ldr r3, _08024BDC @ =gBattleStruct
- ldr r1, [r3]
- adds r1, r0, r1
- adds r1, 0x58
- ldr r2, _08024BE0 @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r1, [r4]
- movs r0, 0x2
- eors r0, r1
- ldr r3, [r3]
- adds r0, r3
- adds r0, 0x5C
- ldrb r2, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- adds r0, 0x60
- adds r3, r0
- str r3, [sp]
- movs r0, 0
- adds r1, r5, 0
- movs r3, 0
- bl EmitChoosePokemon
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r6]
- adds r0, 0x6
- str r0, [r6]
- ldrb r0, [r4]
- bl GetBattlerPosition
- lsls r0, 24
- cmp r0, 0
- bne _08024B94
- ldr r1, _08024BE4 @ =gBattleResults
- ldrb r0, [r1, 0x2]
- cmp r0, 0xFE
- bhi _08024B94
- adds r0, 0x1
- strb r0, [r1, 0x2]
-_08024B94:
- ldr r0, _08024BE8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08024BF0
- ldr r1, _08024BD8 @ =gActiveBattler
- movs r0, 0
- strb r0, [r1]
- ldr r0, _08024BEC @ =gBattlersCount
- ldrb r0, [r0]
- cmp r0, 0
- beq _08024C2E
- adds r4, r1, 0
-_08024BB0:
- ldrb r0, [r4]
- cmp r0, r7
- beq _08024BC4
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08024BC4:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _08024BEC @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08024BB0
- b _08024C2E
- .align 2, 0
-_08024BD8: .4byte gActiveBattler
-_08024BDC: .4byte gBattleStruct
-_08024BE0: .4byte gBattlerPartyIndexes
-_08024BE4: .4byte gBattleResults
-_08024BE8: .4byte gBattleTypeFlags
-_08024BEC: .4byte gBattlersCount
-_08024BF0:
- adds r0, r7, 0
- bl GetBattlerPosition
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r4, _08024C3C @ =gActiveBattler
- strb r0, [r4]
- ldr r0, _08024C40 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08024C44 @ =gBitTable
- ldrb r3, [r4]
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08024C20
- movs r0, 0x2
- eors r3, r0
- strb r3, [r4]
-_08024C20:
- movs r0, 0
- movs r1, 0x2
- bl EmitLinkStandbyMsg
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08024C2E:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08024C3C: .4byte gActiveBattler
-_08024C40: .4byte gAbsentBattlerFlags
-_08024C44: .4byte gBitTable
- thumb_func_end sub_80243EC
-
- thumb_func_start sub_8024C48
-sub_8024C48: @ 8024C48
- push {r4-r7,lr}
- ldr r0, _08024C74 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _08024C54
- b _08024E16
-_08024C54:
- ldr r4, _08024C78 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r7, _08024C7C @ =gActiveBattler
- strb r0, [r7]
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- cmp r0, 0x1
- beq _08024CC4
- cmp r0, 0x1
- bgt _08024C80
- cmp r0, 0
- beq _08024C86
- b _08024E0E
- .align 2, 0
-_08024C74: .4byte gUnknown_2023BC8
-_08024C78: .4byte gUnknown_2023D74
-_08024C7C: .4byte gActiveBattler
-_08024C80:
- cmp r0, 0x2
- beq _08024CE0
- b _08024E0E
-_08024C86:
- movs r3, 0
- ldr r0, _08024CB8 @ =gBattlersCount
- ldrb r1, [r0]
- cmp r3, r1
- blt _08024C92
- b _08024E0E
-_08024C92:
- ldr r6, _08024CBC @ =gBattleStruct
- ldr r2, _08024CC0 @ =gUnknown_20233C4
- movs r5, 0x80
- lsls r5, 2
- adds r4, r0, 0
-_08024C9C:
- ldrb r0, [r2]
- cmp r0, 0x22
- bne _08024CAC
- ldr r0, [r6]
- adds r0, r3, r0
- adds r0, 0x5C
- ldrb r1, [r2, 0x1]
- strb r1, [r0]
-_08024CAC:
- adds r2, r5
- adds r3, 0x1
- ldrb r0, [r4]
- cmp r3, r0
- blt _08024C9C
- b _08024E0E
- .align 2, 0
-_08024CB8: .4byte gBattlersCount
-_08024CBC: .4byte gBattleStruct
-_08024CC0: .4byte gUnknown_20233C4
-_08024CC4:
- ldr r0, _08024CDC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08024CD2
- b _08024E0E
-_08024CD2:
- ldrb r0, [r7]
- bl sub_8013F6C
- b _08024E0E
- .align 2, 0
-_08024CDC: .4byte gBattleTypeFlags
-_08024CE0:
- ldr r1, _08024DAC @ =gUnknown_2023E82
- ldr r4, _08024DB0 @ =gUnknown_20233C4
- ldrb r0, [r7]
- lsls r0, 9
- adds r2, r4, 0x1
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- ldr r6, _08024DB4 @ =gBattleStruct
- ldr r1, [r6]
- adds r1, r0, r1
- adds r1, 0x5C
- lsls r0, 9
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _08024DB8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08024DBC
- ldrb r0, [r7]
- ldr r2, [r6]
- lsls r1, r0, 1
- adds r1, r0
- adds r1, r2
- adds r1, 0x60
- ldrb r2, [r1]
- movs r0, 0xF
- ands r0, r2
- strb r0, [r1]
- ldrb r0, [r7]
- ldr r2, [r6]
- lsls r1, r0, 1
- adds r1, r0
- adds r1, r2
- adds r1, 0x60
- lsls r0, 9
- adds r5, r4, 0x2
- adds r0, r5
- ldrb r2, [r0]
- movs r3, 0xF0
- adds r0, r3, 0
- ands r0, r2
- ldrb r2, [r1]
- orrs r0, r2
- strb r0, [r1]
- ldrb r1, [r7]
- ldr r2, [r6]
- lsls r0, r1, 1
- adds r0, r1
- adds r0, r2
- adds r0, 0x61
- lsls r1, 9
- adds r4, 0x3
- mov r12, r4
- add r1, r12
- ldrb r1, [r1]
- strb r1, [r0]
- ldrb r0, [r7]
- movs r4, 0x2
- eors r0, r4
- ldr r2, [r6]
- lsls r1, r0, 1
- adds r1, r0
- adds r1, r2
- adds r1, 0x60
- ldrb r2, [r1]
- adds r0, r3, 0
- ands r0, r2
- strb r0, [r1]
- ldrb r0, [r7]
- eors r0, r4
- ldr r2, [r6]
- lsls r1, r0, 1
- adds r1, r0
- adds r1, r2
- adds r1, 0x60
- ldrb r0, [r7]
- lsls r0, 9
- adds r0, r5
- ldrb r0, [r0]
- ands r3, r0
- lsrs r3, 4
- ldrb r0, [r1]
- orrs r3, r0
- strb r3, [r1]
- ldrb r0, [r7]
- eors r4, r0
- ldr r0, [r6]
- lsls r1, r4, 1
- adds r1, r4
- adds r1, r0
- adds r1, 0x62
- ldrb r0, [r7]
- lsls r0, 9
- add r0, r12
- ldrb r0, [r0]
- strb r0, [r1]
- b _08024DC2
- .align 2, 0
-_08024DAC: .4byte gUnknown_2023E82
-_08024DB0: .4byte gUnknown_20233C4
-_08024DB4: .4byte gBattleStruct
-_08024DB8: .4byte gBattleTypeFlags
-_08024DBC:
- ldrb r0, [r7]
- bl sub_8013F6C
-_08024DC2:
- ldr r1, _08024E1C @ =gBattleTextBuff1
- movs r5, 0xFD
- strb r5, [r1]
- movs r0, 0x6
- strb r0, [r1, 0x1]
- ldr r4, _08024E20 @ =gBattleMons
- ldr r3, _08024E24 @ =sBattler_AI
- ldrb r0, [r3]
- movs r2, 0x58
- muls r0, r2
- adds r0, r4
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r3]
- muls r0, r2
- adds r0, r4
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r2, _08024E28 @ =gBattleTextBuff2
- strb r5, [r2]
- movs r0, 0x7
- strb r0, [r2, 0x1]
- ldr r3, _08024E2C @ =gActiveBattler
- ldrb r0, [r3]
- strb r0, [r2, 0x2]
- ldr r1, _08024E30 @ =gUnknown_20233C4
- ldrb r0, [r3]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2, 0x3]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r2, 0x4]
-_08024E0E:
- ldr r1, _08024E34 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x3
- str r0, [r1]
-_08024E16:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08024E1C: .4byte gBattleTextBuff1
-_08024E20: .4byte gBattleMons
-_08024E24: .4byte sBattler_AI
-_08024E28: .4byte gBattleTextBuff2
-_08024E2C: .4byte gActiveBattler
-_08024E30: .4byte gUnknown_20233C4
-_08024E34: .4byte gUnknown_2023D74
- thumb_func_end sub_8024C48
-
- thumb_func_start sub_8024E38
-sub_8024E38: @ 8024E38
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- ldr r6, _08024F40 @ =gUnknown_2023D74
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _08024F44 @ =gActiveBattler
- strb r0, [r4]
- ldrb r0, [r4]
- bl sub_80174B8
- ldr r2, _08024F48 @ =gUnknown_2023DD0
- ldr r1, _08024F4C @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- ldr r2, _08024F50 @ =gUnknown_2023ECC
- ldrb r0, [r4]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1]
- movs r0, 0x41
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- bl GetBattlerSide
- ldr r5, _08024F54 @ =gSideAffecting
- lsls r0, 24
- lsrs r0, 23
- adds r0, r5
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 2
- mov r8, r0
- ands r0, r1
- cmp r0, 0
- bne _08024F88
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 23
- adds r0, r5
- ldrh r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08024F88
- ldr r1, _08024F58 @ =gBattleMons
- mov r9, r1
- ldrb r2, [r4]
- movs r7, 0x58
- adds r0, r2, 0
- muls r0, r7
- adds r1, r0, r1
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _08024F88
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _08024F88
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1A
- beq _08024F88
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 23
- adds r0, r5
- ldrh r2, [r0]
- mov r1, r8
- orrs r1, r2
- strh r1, [r0]
- ldrb r0, [r4]
- bl GetBattlerSide
- ldr r2, _08024F5C @ =gSideTimers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0xA]
- movs r1, 0x5
- subs r1, r0
- lsls r1, 25
- lsrs r1, 24
- ldr r5, _08024F60 @ =gBattleMoveDamage
- ldrb r0, [r4]
- muls r0, r7
- add r0, r9
- ldrh r0, [r0, 0x2C]
- bl __divsi3
- str r0, [r5]
- cmp r0, 0
- bne _08024F28
- movs r0, 0x1
- str r0, [r5]
-_08024F28:
- ldr r0, _08024F64 @ =gBattleScripting
- ldrb r1, [r4]
- strb r1, [r0, 0x17]
- bl BattleScriptPushCursor
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _08024F6C
- ldr r0, _08024F68 @ =gUnknown_81D8CBE
- str r0, [r6]
- b _080250C6
- .align 2, 0
-_08024F40: .4byte gUnknown_2023D74
-_08024F44: .4byte gActiveBattler
-_08024F48: .4byte gUnknown_2023DD0
-_08024F4C: .4byte gBitTable
-_08024F50: .4byte gUnknown_2023ECC
-_08024F54: .4byte gSideAffecting
-_08024F58: .4byte gBattleMons
-_08024F5C: .4byte gSideTimers
-_08024F60: .4byte gBattleMoveDamage
-_08024F64: .4byte gBattleScripting
-_08024F68: .4byte gUnknown_81D8CBE
-_08024F6C:
- cmp r0, 0x1
- bne _08024F7C
- ldr r0, _08024F78 @ =gUnknown_81D8C87
- str r0, [r6]
- b _080250C6
- .align 2, 0
-_08024F78: .4byte gUnknown_81D8C87
-_08024F7C:
- ldr r0, _08024F84 @ =gUnknown_81D8CF5
- str r0, [r6]
- b _080250C6
- .align 2, 0
-_08024F84: .4byte gUnknown_81D8CF5
-_08024F88:
- ldr r1, _08025064 @ =gBattleMons
- ldr r5, _08025068 @ =gActiveBattler
- ldrb r2, [r5]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x36
- bne _08024FAE
- ldr r1, _0802506C @ =gDisableStructs
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x18]
-_08024FAE:
- ldrb r1, [r5]
- movs r0, 0
- str r0, [sp]
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08024FC4
- b _080250C6
-_08024FC4:
- ldrb r1, [r5]
- movs r0, 0
- movs r2, 0
- bl sub_801BC68
- lsls r0, 24
- cmp r0, 0
- bne _080250C6
- ldrb r0, [r5]
- bl GetBattlerSide
- ldr r1, _08025070 @ =gSideAffecting
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r2, [r0]
- ldr r1, _08025074 @ =0x0000fdff
- ands r1, r2
- strh r1, [r0]
- movs r4, 0
- ldr r0, _08025078 @ =gBattlersCount
- ldrb r3, [r0]
- cmp r4, r3
- bge _08025012
- ldr r6, _0802507C @ =gUnknown_2023BDE
- ldr r3, _08025080 @ =gUnknown_2023BDA
- movs r2, 0xC
- adds r1, r0, 0
-_08024FFC:
- adds r0, r4, r6
- ldrb r0, [r0]
- ldrb r7, [r5]
- cmp r0, r7
- bne _0802500A
- adds r0, r4, r3
- strb r2, [r0]
-_0802500A:
- adds r4, 0x1
- ldrb r0, [r1]
- cmp r4, r0
- blt _08024FFC
-_08025012:
- movs r4, 0
- ldr r0, _08025078 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- bge _08025046
- ldr r6, _08025084 @ =gBattleStruct
- ldr r5, _08025064 @ =gBattleMons
-_08025020:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 23
- adds r0, 0xA8
- ldr r1, [r6]
- adds r1, r0
- movs r0, 0x58
- muls r0, r4
- adds r0, r5
- ldrh r0, [r0, 0x28]
- strh r0, [r1]
- adds r4, 0x1
- ldr r0, _08025078 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- blt _08025020
-_08025046:
- ldr r0, _08025088 @ =gUnknown_2023D74
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r5, r0, 0
- cmp r1, 0x5
- bne _080250C0
- ldr r0, _0802508C @ =gUnknown_2023DD0
- ldr r0, [r0]
- lsrs r4, r0, 28
- ldr r1, _08025090 @ =gUnknown_2023D6D
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r2, _08025094 @ =gBitTable
- b _080250A6
- .align 2, 0
-_08025064: .4byte gBattleMons
-_08025068: .4byte gActiveBattler
-_0802506C: .4byte gDisableStructs
-_08025070: .4byte gSideAffecting
-_08025074: .4byte 0x0000fdff
-_08025078: .4byte gBattlersCount
-_0802507C: .4byte gUnknown_2023BDE
-_08025080: .4byte gUnknown_2023BDA
-_08025084: .4byte gBattleStruct
-_08025088: .4byte gUnknown_2023D74
-_0802508C: .4byte gUnknown_2023DD0
-_08025090: .4byte gUnknown_2023D6D
-_08025094: .4byte gBitTable
-_08025098:
- ldr r0, _080250D4 @ =gBattlersCount
- ldrb r3, [r1]
- ldrb r0, [r0]
- cmp r3, r0
- bcs _080250C0
- adds r0, r3, 0x1
- strb r0, [r1]
-_080250A6:
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r3, [r0]
- adds r0, r4, 0
- ands r0, r3
- cmp r0, 0
- beq _08025098
- ldr r0, _080250D8 @ =gAbsentBattlerFlags
- ldrb r0, [r0]
- ands r0, r3
- cmp r0, 0
- bne _08025098
-_080250C0:
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_080250C6:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080250D4: .4byte gBattlersCount
-_080250D8: .4byte gAbsentBattlerFlags
- thumb_func_end sub_8024E38
-
- thumb_func_start atk53_trainer_slide
-atk53_trainer_slide: @ 80250DC
- push {lr}
- ldr r0, _080250EC @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _080250F0
- movs r0, 0
- b _080250F2
- .align 2, 0
-_080250EC: .4byte gUnknown_2023D74
-_080250F0:
- movs r0, 0x1
-_080250F2:
- bl GetBattlerAtPosition
- ldr r1, _08025114 @ =gActiveBattler
- strb r0, [r1]
- movs r0, 0
- bl EmitTrainerSlide
- ldr r0, _08025114 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _08025118 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08025114: .4byte gActiveBattler
-_08025118: .4byte gUnknown_2023D74
- thumb_func_end atk53_trainer_slide
-
- thumb_func_start atk54_playse
-atk54_playse: @ 802511C
- push {r4,r5,lr}
- ldr r5, _0802514C @ =gActiveBattler
- ldr r0, _08025150 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r5]
- ldr r4, _08025154 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0
- bl EmitPlaySE
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802514C: .4byte gActiveBattler
-_08025150: .4byte sBattler_AI
-_08025154: .4byte gUnknown_2023D74
- thumb_func_end atk54_playse
-
- thumb_func_start atk55_play_sound
-atk55_play_sound: @ 8025158
- push {r4,r5,lr}
- ldr r5, _08025188 @ =gActiveBattler
- ldr r0, _0802518C @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r5]
- ldr r4, _08025190 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0
- bl Emitcmd44
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08025188: .4byte gActiveBattler
-_0802518C: .4byte sBattler_AI
-_08025190: .4byte gUnknown_2023D74
- thumb_func_end atk55_play_sound
-
- thumb_func_start atk56_playfaintcry
-atk56_playfaintcry: @ 8025194
- push {r4,r5,lr}
- ldr r5, _080251BC @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _080251C0 @ =gActiveBattler
- strb r0, [r4]
- movs r0, 0
- bl EmitFaintingCry
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080251BC: .4byte gUnknown_2023D74
-_080251C0: .4byte gActiveBattler
- thumb_func_end atk56_playfaintcry
-
- thumb_func_start atk57
-atk57: @ 80251C4
- push {r4,lr}
- movs r0, 0
- bl GetBattlerAtPosition
- ldr r4, _080251F0 @ =gActiveBattler
- strb r0, [r4]
- ldr r0, _080251F4 @ =gBattleOutcome
- ldrb r1, [r0]
- movs r0, 0
- bl EmitCmd55
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _080251F8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080251F0: .4byte gActiveBattler
-_080251F4: .4byte gBattleOutcome
-_080251F8: .4byte gUnknown_2023D74
- thumb_func_end atk57
-
- thumb_func_start atk58_returntoball
-atk58_returntoball: @ 80251FC
- push {r4,r5,lr}
- ldr r5, _08025228 @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _0802522C @ =gActiveBattler
- strb r0, [r4]
- movs r0, 0
- movs r1, 0x1
- bl EmitReturnMonToBall
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08025228: .4byte gUnknown_2023D74
-_0802522C: .4byte gActiveBattler
- thumb_func_end atk58_returntoball
-
- thumb_func_start atk59_handlelearnnewmove
-atk59_handlelearnnewmove: @ 8025230
- push {r4-r7,lr}
- ldr r0, _080252A4 @ =gUnknown_2023D74
- ldr r2, [r0]
- ldrb r6, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r6, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r6, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r6, r0
- ldrb r4, [r2, 0x5]
- ldrb r0, [r2, 0x6]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 24
- orrs r4, r0
- ldr r0, _080252A8 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r1, [r0, 0x10]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080252AC @ =gPlayerParty
- adds r0, r1
- ldrb r1, [r2, 0x9]
- bl MonTryLearningNewMove
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _080252B0 @ =0x0000fffe
- cmp r5, r0
- bne _0802529A
- adds r7, r5, 0
-_0802527E:
- ldr r0, _080252A8 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r1, [r0, 0x10]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080252AC @ =gPlayerParty
- adds r0, r1
- movs r1, 0
- bl MonTryLearningNewMove
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r7
- beq _0802527E
-_0802529A:
- cmp r5, 0
- bne _080252B4
- ldr r0, _080252A4 @ =gUnknown_2023D74
- str r4, [r0]
- b _0802535C
- .align 2, 0
-_080252A4: .4byte gUnknown_2023D74
-_080252A8: .4byte gBattleStruct
-_080252AC: .4byte gPlayerParty
-_080252B0: .4byte 0x0000fffe
-_080252B4:
- ldr r0, _080252C4 @ =0x0000ffff
- cmp r5, r0
- bne _080252CC
- ldr r1, _080252C8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
- b _0802535C
- .align 2, 0
-_080252C4: .4byte 0x0000ffff
-_080252C8: .4byte gUnknown_2023D74
-_080252CC:
- movs r0, 0
- bl GetBattlerAtPosition
- ldr r1, _08025364 @ =gActiveBattler
- strb r0, [r1]
- ldr r2, _08025368 @ =gBattlerPartyIndexes
- ldrb r3, [r1]
- lsls r0, r3, 1
- adds r0, r2
- ldr r1, _0802536C @ =gBattleStruct
- ldr r1, [r1]
- ldrh r0, [r0]
- ldrb r1, [r1, 0x10]
- cmp r0, r1
- bne _0802530C
- ldr r4, _08025370 @ =gBattleMons
- movs r0, 0x58
- adds r2, r3, 0
- muls r2, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _0802530C
- adds r0, r2, r4
- adds r1, r5, 0
- bl GiveMoveToBattleMon
-_0802530C:
- ldr r0, _08025374 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08025358
- movs r0, 0x2
- bl GetBattlerAtPosition
- ldr r1, _08025364 @ =gActiveBattler
- strb r0, [r1]
- ldr r2, _08025368 @ =gBattlerPartyIndexes
- ldrb r3, [r1]
- lsls r0, r3, 1
- adds r0, r2
- ldr r1, _0802536C @ =gBattleStruct
- ldr r1, [r1]
- ldrh r0, [r0]
- ldrb r1, [r1, 0x10]
- cmp r0, r1
- bne _08025358
- ldr r4, _08025370 @ =gBattleMons
- movs r0, 0x58
- adds r2, r3, 0
- muls r2, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _08025358
- adds r0, r2, r4
- adds r1, r5, 0
- bl GiveMoveToBattleMon
-_08025358:
- ldr r0, _08025378 @ =gUnknown_2023D74
- str r6, [r0]
-_0802535C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08025364: .4byte gActiveBattler
-_08025368: .4byte gBattlerPartyIndexes
-_0802536C: .4byte gBattleStruct
-_08025370: .4byte gBattleMons
-_08025374: .4byte gBattleTypeFlags
-_08025378: .4byte gUnknown_2023D74
- thumb_func_end atk59_handlelearnnewmove
-
- thumb_func_start sub_802537C
-sub_802537C: @ 802537C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- ldr r0, _080253A0 @ =gActiveBattler
- movs r1, 0
- strb r1, [r0]
- ldr r0, _080253A4 @ =gBattleScripting
- ldrb r1, [r0, 0x1F]
- adds r2, r0, 0
- cmp r1, 0x5
- bls _08025396
- b _080256D0
-_08025396:
- lsls r0, r1, 2
- ldr r1, _080253A8 @ =_080253AC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080253A0: .4byte gActiveBattler
-_080253A4: .4byte gBattleScripting
-_080253A8: .4byte _080253AC
- .align 2, 0
-_080253AC:
- .4byte _080253C4
- .4byte _080253FC
- .4byte _080254A8
- .4byte _08025500
- .4byte _080256A4
- .4byte _080256C4
-_080253C4:
- movs r4, 0
- str r4, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802DB7C
- ldr r0, _080253F0 @ =gUnknown_83FE791
- movs r1, 0xE
- bl sub_80D87BC
- ldr r1, _080253F4 @ =gBattleScripting
- ldrb r0, [r1, 0x1F]
- adds r0, 0x1
- strb r0, [r1, 0x1F]
- ldr r0, _080253F8 @ =gUnknown_2023E82
- strb r4, [r0, 0x1]
- bl sub_802DCB8
- b _080256D0
- .align 2, 0
-_080253F0: .4byte gUnknown_83FE791
-_080253F4: .4byte gBattleScripting
-_080253F8: .4byte gUnknown_2023E82
-_080253FC:
- ldr r0, _08025484 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08025422
- ldr r4, _08025488 @ =gUnknown_2023E82
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _08025422
- movs r0, 0x5
- bl PlaySE
- bl sub_802DCF8
- movs r0, 0
- strb r0, [r4, 0x1]
- bl sub_802DCB8
-_08025422:
- ldr r0, _08025484 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08025448
- ldr r4, _08025488 @ =gUnknown_2023E82
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08025448
- movs r0, 0x5
- bl PlaySE
- bl sub_802DCF8
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_802DCB8
-_08025448:
- ldr r0, _08025484 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r5, 0x1
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _0802548C
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08025488 @ =gUnknown_2023E82
- ldrb r4, [r0, 0x1]
- cmp r4, 0
- bne _0802549C
- str r5, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802DB7C
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _080254D8
- .align 2, 0
-_08025484: .4byte gMain
-_08025488: .4byte gUnknown_2023E82
-_0802548C:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08025496
- b _080256D0
-_08025496:
- movs r0, 0x5
- bl PlaySE
-_0802549C:
- ldr r1, _080254A4 @ =gBattleScripting
- movs r0, 0x4
- strb r0, [r1, 0x1F]
- b _080256D0
- .align 2, 0
-_080254A4: .4byte gBattleScripting
-_080254A8:
- ldr r0, _080254E4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080254B6
- b _080256D0
-_080254B6:
- bl FreeAllWindowBuffers
- ldr r0, _080254E8 @ =gPlayerParty
- ldr r1, _080254EC @ =gBattleStruct
- ldr r1, [r1]
- ldrb r1, [r1, 0x10]
- ldr r2, _080254F0 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _080254F4 @ =sub_8077764
- ldr r4, _080254F8 @ =gMoveToLearn
- ldrh r4, [r4]
- str r4, [sp]
- bl sub_8134738
-_080254D8:
- ldr r1, _080254FC @ =gBattleScripting
- ldrb r0, [r1, 0x1F]
- adds r0, 0x1
- strb r0, [r1, 0x1F]
- b _080256D0
- .align 2, 0
-_080254E4: .4byte gPaletteFade
-_080254E8: .4byte gPlayerParty
-_080254EC: .4byte gBattleStruct
-_080254F0: .4byte gPlayerPartyCount
-_080254F4: .4byte sub_8077764
-_080254F8: .4byte gMoveToLearn
-_080254FC: .4byte gBattleScripting
-_08025500:
- ldr r0, _0802552C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802550E
- b _080256D0
-_0802550E:
- ldr r0, _08025530 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _08025534 @ =sub_8011100
- cmp r1, r0
- beq _0802551A
- b _080256D0
-_0802551A:
- bl sub_8138B2C
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x4
- bne _0802553C
- ldr r0, _08025538 @ =gBattleScripting
- strb r5, [r0, 0x1F]
- b _080256D0
- .align 2, 0
-_0802552C: .4byte gPaletteFade
-_08025530: .4byte gMain
-_08025534: .4byte sub_8011100
-_08025538: .4byte gBattleScripting
-_0802553C:
- ldr r6, _08025578 @ =gBattleStruct
- ldr r0, [r6]
- ldrb r0, [r0, 0x10]
- movs r1, 0x64
- mov r8, r1
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- ldr r7, _0802557C @ =gPlayerParty
- adds r0, r7
- adds r1, r5, 0
- adds r1, 0xD
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl IsHMMove2
- cmp r0, 0
- beq _0802558C
- ldr r0, _08025580 @ =0x0000013f
- ldr r1, _08025584 @ =gActiveBattler
- ldrb r1, [r1]
- bl PrepareStringBattle
- ldr r1, _08025588 @ =gBattleScripting
- movs r0, 0x5
- strb r0, [r1, 0x1F]
- b _080256D0
- .align 2, 0
-_08025578: .4byte gBattleStruct
-_0802557C: .4byte gPlayerParty
-_08025580: .4byte 0x0000013f
-_08025584: .4byte gActiveBattler
-_08025588: .4byte gBattleScripting
-_0802558C:
- ldr r3, _08025680 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- ldr r1, _08025684 @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- lsrs r0, r4, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r0, [r6]
- ldrb r0, [r0, 0x10]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- adds r1, r5, 0
- bl RemoveMonPPBonus
- ldr r0, [r6]
- ldrb r0, [r0, 0x10]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- ldr r7, _08025688 @ =gMoveToLearn
- ldrh r1, [r7]
- adds r2, r5, 0
- bl SetMonMoveSlot
- ldr r0, _0802568C @ =gBattlerPartyIndexes
- ldr r1, [r6]
- ldrh r0, [r0]
- ldrb r1, [r1, 0x10]
- cmp r0, r1
- bne _08025622
- ldr r4, _08025690 @ =gBattleMons
- ldr r0, [r4, 0x50]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _08025622
- ldr r0, _08025694 @ =gDisableStructs
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _08025698 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08025622
- adds r0, r4, 0
- adds r1, r5, 0
- bl RemoveBattleMonPPBonus
- ldrh r1, [r7]
- adds r0, r4, 0
- adds r2, r5, 0
- bl SetBattleMonMoveSlot
-_08025622:
- ldr r0, _0802569C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080256D0
- ldr r2, _0802568C @ =gBattlerPartyIndexes
- ldr r0, _080256A0 @ =gBattleStruct
- ldr r1, [r0]
- ldrh r0, [r2, 0x4]
- ldrb r1, [r1, 0x10]
- cmp r0, r1
- bne _080256D0
- ldr r4, _08025690 @ =gBattleMons
- movs r1, 0x80
- lsls r1, 1
- adds r0, r4, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _080256D0
- ldr r0, _08025694 @ =gDisableStructs
- adds r0, 0x50
- ldrb r1, [r0]
- lsrs r1, 4
- ldr r2, _08025698 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080256D0
- adds r4, 0xB0
- adds r0, r4, 0
- adds r1, r5, 0
- bl RemoveBattleMonPPBonus
- ldr r0, _08025688 @ =gMoveToLearn
- ldrh r1, [r0]
- adds r0, r4, 0
- adds r2, r5, 0
- bl SetBattleMonMoveSlot
- b _080256D0
- .align 2, 0
-_08025680: .4byte gUnknown_2023D74
-_08025684: .4byte gBattleTextBuff2
-_08025688: .4byte gMoveToLearn
-_0802568C: .4byte gBattlerPartyIndexes
-_08025690: .4byte gBattleMons
-_08025694: .4byte gDisableStructs
-_08025698: .4byte gBitTable
-_0802569C: .4byte gBattleTypeFlags
-_080256A0: .4byte gBattleStruct
-_080256A4:
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802DB7C
- ldr r1, _080256C0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _080256D0
- .align 2, 0
-_080256C0: .4byte gUnknown_2023D74
-_080256C4:
- ldr r0, _080256DC @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _080256D0
- movs r0, 0x2
- strb r0, [r2, 0x1F]
-_080256D0:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080256DC: .4byte gUnknown_2023BC8
- thumb_func_end sub_802537C
-
- thumb_func_start sub_80256E0
-sub_80256E0: @ 80256E0
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _080256F4 @ =gBattleScripting
- ldrb r4, [r5, 0x1F]
- cmp r4, 0
- beq _080256F8
- cmp r4, 0x1
- beq _08025728
- b _0802580E
- .align 2, 0
-_080256F4: .4byte gBattleScripting
-_080256F8:
- str r4, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802DB7C
- ldr r0, _08025720 @ =gUnknown_83FE791
- movs r1, 0xE
- bl sub_80D87BC
- ldrb r0, [r5, 0x1F]
- adds r0, 0x1
- strb r0, [r5, 0x1F]
- ldr r0, _08025724 @ =gUnknown_2023E82
- strb r4, [r0, 0x1]
- bl sub_802DCB8
- b _0802580E
- .align 2, 0
-_08025720: .4byte gUnknown_83FE791
-_08025724: .4byte gUnknown_2023E82
-_08025728:
- ldr r0, _080257AC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802574E
- ldr r4, _080257B0 @ =gUnknown_2023E82
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _0802574E
- movs r0, 0x5
- bl PlaySE
- bl sub_802DCF8
- movs r0, 0
- strb r0, [r4, 0x1]
- bl sub_802DCB8
-_0802574E:
- ldr r0, _080257AC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08025774
- ldr r4, _080257B0 @ =gUnknown_2023E82
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08025774
- movs r0, 0x5
- bl PlaySE
- bl sub_802DCF8
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_802DCB8
-_08025774:
- ldr r0, _080257AC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _080257D8
- movs r0, 0x5
- bl PlaySE
- ldr r0, _080257B0 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080257B8
- ldr r3, _080257B4 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _080257C0
- .align 2, 0
-_080257AC: .4byte gMain
-_080257B0: .4byte gUnknown_2023E82
-_080257B4: .4byte gUnknown_2023D74
-_080257B8:
- ldr r1, _080257D4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_080257C0:
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802DB7C
- b _0802580E
- .align 2, 0
-_080257D4: .4byte gUnknown_2023D74
-_080257D8:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802580E
- movs r0, 0x5
- bl PlaySE
- ldr r3, _08025818 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- str r4, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802DB7C
-_0802580E:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08025818: .4byte gUnknown_2023D74
- thumb_func_end sub_80256E0
-
- thumb_func_start sub_802581C
-sub_802581C: @ 802581C
- push {r4,lr}
- ldr r4, _08025888 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r2, _0802588C @ =gActiveBattler
- strb r0, [r2]
- ldr r0, _08025890 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _080258A0
- ldr r0, _08025894 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 1
- ands r0, r1
- cmp r0, 0
- beq _0802586E
- ldr r1, _08025898 @ =gBattleMons
- ldrb r2, [r2]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _0802586E
- ldr r0, _0802589C @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- bne _080258A0
-_0802586E:
- movs r0, 0
- bl EmitHitAnimation
- ldr r0, _0802588C @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _08025888 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- b _080258A6
- .align 2, 0
-_08025888: .4byte gUnknown_2023D74
-_0802588C: .4byte gActiveBattler
-_08025890: .4byte gMoveResultFlags
-_08025894: .4byte gUnknown_2023DD0
-_08025898: .4byte gBattleMons
-_0802589C: .4byte gDisableStructs
-_080258A0:
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
-_080258A6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_802581C
-
- thumb_func_start sub_80258AC
-sub_80258AC: @ 80258AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- movs r5, 0
- ldr r0, _080258F0 @ =gBattleOutcome
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080258C0
- b _080259FA
-_080258C0:
- ldr r0, _080258F4 @ =gTrainerBattleOpponent_A
- ldrh r2, [r0]
- movs r1, 0x80
- lsls r1, 3
- cmp r2, r1
- bne _08025904
- ldr r0, _080258F8 @ =gBattleResources
- ldr r0, [r0]
- ldr r0, [r0]
- adds r0, 0x94
- ldrb r2, [r0]
- ldr r0, _080258FC @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x4A
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r4, r2, 0
- muls r4, r0
- ldr r0, _08025900 @ =gSaveBlock1Ptr
- mov r8, r0
- b _080259E8
- .align 2, 0
-_080258F0: .4byte gBattleOutcome
-_080258F4: .4byte gTrainerBattleOpponent_A
-_080258F8: .4byte gBattleResources
-_080258FC: .4byte gBattleStruct
-_08025900: .4byte gSaveBlock1Ptr
-_08025904:
- ldr r2, _08025920 @ =gTrainers
- ldrh r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r3, r0, 3
- adds r4, r3, r2
- ldrb r1, [r4]
- cmp r1, 0x1
- beq _0802595A
- cmp r1, 0x1
- bgt _08025924
- cmp r1, 0
- beq _0802592E
- b _08025970
- .align 2, 0
-_08025920: .4byte gTrainers
-_08025924:
- cmp r1, 0x2
- beq _08025944
- cmp r1, 0x3
- beq _0802595A
- b _08025970
-_0802592E:
- adds r0, r2, 0
- adds r0, 0x24
- adds r0, r3, r0
- ldr r1, [r0]
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r1
- subs r0, 0x8
- b _0802596E
-_08025944:
- adds r0, r2, 0
- adds r0, 0x24
- adds r0, r3, r0
- ldr r1, [r0]
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r1
- subs r0, 0x8
- b _0802596E
-_0802595A:
- adds r0, r2, 0
- adds r0, 0x24
- adds r0, r3, r0
- ldr r1, [r0]
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- subs r0, 0x10
-_0802596E:
- ldrb r5, [r0, 0x2]
-_08025970:
- ldr r0, _080259CC @ =gUnknown_824F220
- lsls r1, r6, 2
- adds r3, r1, r0
- ldrb r1, [r3]
- ldr r7, _080259D0 @ =gBattleStruct
- mov r12, r0
- lsls r4, r5, 2
- ldr r5, _080259D4 @ =gBattleTypeFlags
- ldr r0, _080259D8 @ =gSaveBlock1Ptr
- mov r8, r0
- cmp r1, 0xFF
- beq _080259AA
- ldr r2, _080259DC @ =gTrainers
- ldr r0, _080259E0 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r2, [r0, 0x1]
- adds r1, r3, 0
-_0802599A:
- ldrb r0, [r1]
- cmp r0, r2
- beq _080259AA
- adds r1, 0x4
- adds r6, 0x1
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _0802599A
-_080259AA:
- ldr r0, [r7]
- adds r0, 0x4A
- ldrb r0, [r0]
- adds r3, r4, 0
- muls r3, r0
- lsls r0, r6, 2
- add r0, r12
- ldrb r2, [r0, 0x1]
- ldr r0, [r5]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080259E4
- lsls r0, r2, 1
- adds r4, r3, 0
- muls r4, r0
- b _080259E8
- .align 2, 0
-_080259CC: .4byte gUnknown_824F220
-_080259D0: .4byte gBattleStruct
-_080259D4: .4byte gBattleTypeFlags
-_080259D8: .4byte gSaveBlock1Ptr
-_080259DC: .4byte gTrainers
-_080259E0: .4byte gTrainerBattleOpponent_A
-_080259E4:
- adds r4, r3, 0
- muls r4, r2
-_080259E8:
- mov r1, r8
- ldr r0, [r1]
- movs r1, 0xA4
- lsls r1, 2
- adds r0, r1
- adds r1, r4, 0
- bl AddMoney
- b _08025A00
-_080259FA:
- bl sub_8054C04
- adds r4, r0, 0
-_08025A00:
- ldr r1, _08025A40 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- movs r0, 0x4
- strb r0, [r1, 0x2]
- movs r0, 0x5
- strb r0, [r1, 0x3]
- strb r4, [r1, 0x4]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r4
- lsrs r0, 8
- strb r0, [r1, 0x5]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r4
- lsrs r0, 16
- strb r0, [r1, 0x6]
- lsrs r0, r4, 24
- strb r0, [r1, 0x7]
- movs r0, 0xFF
- strb r0, [r1, 0x8]
- cmp r4, 0
- beq _08025A48
- ldr r1, _08025A44 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08025A62
- .align 2, 0
-_08025A40: .4byte gBattleTextBuff1
-_08025A44: .4byte gUnknown_2023D74
-_08025A48:
- ldr r3, _08025A6C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_08025A62:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08025A6C: .4byte gUnknown_2023D74
- thumb_func_end sub_80258AC
-
- thumb_func_start atk5E
-atk5E: @ 8025A70
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, _08025A94 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r6, _08025A98 @ =gActiveBattler
- strb r0, [r6]
- ldr r5, _08025A9C @ =gUnknown_2023E82
- ldrb r0, [r5]
- mov r8, r4
- cmp r0, 0
- beq _08025AA0
- cmp r0, 0x1
- beq _08025AB8
- b _08025B0C
- .align 2, 0
-_08025A94: .4byte gUnknown_2023D74
-_08025A98: .4byte gActiveBattler
-_08025A9C: .4byte gUnknown_2023E82
-_08025AA0:
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl BtlController_EmitGetMonData
- ldrb r0, [r6]
- bl MarkBufferBankForExecution
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _08025B0C
-_08025AB8:
- ldr r0, _08025B18 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _08025B0C
- ldrb r0, [r6]
- lsls r0, 9
- ldr r1, _08025B1C @ =gUnknown_20233C8
- adds r0, r1
- mov r12, r0
- movs r2, 0
- adds r4, r6, 0
- movs r5, 0x58
- ldr r6, _08025B20 @ =gUnknown_2023C08
- adds r7, r6, 0
- subs r7, 0x18
- mov r3, r12
- adds r3, 0xC
-_08025ADA:
- lsls r1, r2, 1
- ldrb r0, [r4]
- muls r0, r5
- adds r1, r0
- adds r1, r7
- ldrh r0, [r3]
- strh r0, [r1]
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r2, r1
- adds r1, r6
- mov r0, r12
- adds r0, 0x24
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r3, 0x2
- adds r2, 0x1
- cmp r2, 0x3
- ble _08025ADA
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_08025B0C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08025B18: .4byte gUnknown_2023BC8
-_08025B1C: .4byte gUnknown_20233C8
-_08025B20: .4byte gUnknown_2023C08
- thumb_func_end atk5E
-
- thumb_func_start atk5F
-atk5F: @ 8025B24
- push {lr}
- ldr r0, _08025B4C @ =gActiveBattler
- ldr r2, _08025B50 @ =sBattler_AI
- ldrb r3, [r2]
- strb r3, [r0]
- ldr r1, _08025B54 @ =gBattlerTarget
- ldrb r0, [r1]
- strb r0, [r2]
- strb r3, [r1]
- ldr r2, _08025B58 @ =gUnknown_2023DD0
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 5
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _08025B60
- ldr r0, _08025B5C @ =0xffffefff
- ands r1, r0
- b _08025B62
- .align 2, 0
-_08025B4C: .4byte gActiveBattler
-_08025B50: .4byte sBattler_AI
-_08025B54: .4byte gBattlerTarget
-_08025B58: .4byte gUnknown_2023DD0
-_08025B5C: .4byte 0xffffefff
-_08025B60:
- orrs r1, r3
-_08025B62:
- str r1, [r2]
- ldr r1, _08025B70 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08025B70: .4byte gUnknown_2023D74
- thumb_func_end atk5F
-
- thumb_func_start atk60_incrementgamestat
-atk60_incrementgamestat: @ 8025B74
- push {lr}
- ldr r0, _08025B9C @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08025B8E
- ldr r0, _08025BA0 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl IncrementGameStat
-_08025B8E:
- ldr r1, _08025BA0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08025B9C: .4byte sBattler_AI
-_08025BA0: .4byte gUnknown_2023D74
- thumb_func_end atk60_incrementgamestat
-
- thumb_func_start atk61_drawpartystatussummary
-atk61_drawpartystatussummary: @ 8025BA4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x30
- ldr r0, _08025C08 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _08025C58
- ldr r0, _08025C0C @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r1, _08025C10 @ =gActiveBattler
- strb r0, [r1]
- ldrb r0, [r1]
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _08025C14 @ =gEnemyParty
- mov r8, r1
- cmp r0, 0
- bne _08025BD6
- ldr r0, _08025C18 @ =gPlayerParty
- mov r8, r0
-_08025BD6:
- movs r7, 0
- add r6, sp, 0x4
- mov r5, sp
-_08025BDC:
- movs r0, 0x64
- muls r0, r7
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08025C00
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- bne _08025C20
-_08025C00:
- ldr r0, _08025C1C @ =0x0000ffff
- strh r0, [r5]
- movs r0, 0
- b _08025C32
- .align 2, 0
-_08025C08: .4byte gUnknown_2023BC8
-_08025C0C: .4byte gUnknown_2023D74
-_08025C10: .4byte gActiveBattler
-_08025C14: .4byte gEnemyParty
-_08025C18: .4byte gPlayerParty
-_08025C1C: .4byte 0x0000ffff
-_08025C20:
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- strh r0, [r5]
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
-_08025C32:
- str r0, [r6]
- adds r6, 0x8
- adds r5, 0x8
- adds r7, 0x1
- cmp r7, 0x5
- ble _08025BDC
- movs r0, 0
- mov r1, sp
- movs r2, 0x1
- bl EmitDrawPartyStatusSummary
- ldr r0, _08025C64 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _08025C68 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_08025C58:
- add sp, 0x30
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08025C64: .4byte gActiveBattler
-_08025C68: .4byte gUnknown_2023D74
- thumb_func_end atk61_drawpartystatussummary
-
- thumb_func_start atk62
-atk62: @ 8025C6C
- push {r4,r5,lr}
- ldr r5, _08025C94 @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _08025C98 @ =gActiveBattler
- strb r0, [r4]
- movs r0, 0
- bl EmitCmd49
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08025C94: .4byte gUnknown_2023D74
-_08025C98: .4byte gActiveBattler
- thumb_func_end atk62
-
- thumb_func_start atk63_jumptorandomattack
-atk63_jumptorandomattack: @ 8025C9C
- push {r4,lr}
- ldr r0, _08025CB4 @ =gUnknown_2023D74
- ldr r1, [r0]
- ldrb r1, [r1, 0x1]
- adds r4, r0, 0
- cmp r1, 0
- beq _08025CC0
- ldr r0, _08025CB8 @ =gCurrentMove
- ldr r1, _08025CBC @ =gUnknown_2023D4E
- ldrh r1, [r1]
- strh r1, [r0]
- b _08025CCE
- .align 2, 0
-_08025CB4: .4byte gUnknown_2023D74
-_08025CB8: .4byte gCurrentMove
-_08025CBC: .4byte gUnknown_2023D4E
-_08025CC0:
- ldr r2, _08025CEC @ =gUnknown_2023D4C
- ldr r1, _08025CF0 @ =gCurrentMove
- ldr r0, _08025CF4 @ =gUnknown_2023D4E
- ldrh r0, [r0]
- strh r0, [r1]
- strh r0, [r2]
- adds r0, r1, 0
-_08025CCE:
- ldr r3, _08025CF8 @ =gUnknown_81D65A8
- ldr r2, _08025CFC @ =gBattleMoves
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08025CEC: .4byte gUnknown_2023D4C
-_08025CF0: .4byte gCurrentMove
-_08025CF4: .4byte gUnknown_2023D4E
-_08025CF8: .4byte gUnknown_81D65A8
-_08025CFC: .4byte gBattleMoves
- thumb_func_end atk63_jumptorandomattack
-
- thumb_func_start atk64_statusanimation
-atk64_statusanimation: @ 8025D00
- push {r4,lr}
- ldr r0, _08025D70 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _08025D68
- ldr r0, _08025D74 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _08025D78 @ =gActiveBattler
- strb r0, [r4]
- ldr r1, _08025D7C @ =gStatuses3
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08025D80 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08025D60
- ldr r0, _08025D84 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- bne _08025D60
- ldr r0, _08025D88 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08025D60
- ldr r1, _08025D8C @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r0, r1
- ldr r2, [r0]
- movs r0, 0
- movs r1, 0
- bl EmitStatusAnimation
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08025D60:
- ldr r1, _08025D74 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_08025D68:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08025D70: .4byte gUnknown_2023BC8
-_08025D74: .4byte gUnknown_2023D74
-_08025D78: .4byte gActiveBattler
-_08025D7C: .4byte gStatuses3
-_08025D80: .4byte 0x000400c0
-_08025D84: .4byte gDisableStructs
-_08025D88: .4byte gUnknown_2023DD0
-_08025D8C: .4byte gBattleMons
- thumb_func_end atk64_statusanimation
-
- thumb_func_start atk65_status2animation
-atk65_status2animation: @ 8025D90
- push {r4,r5,lr}
- ldr r0, _08025E18 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _08025E10
- ldr r4, _08025E1C @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r5, _08025E20 @ =gActiveBattler
- strb r0, [r5]
- ldr r1, [r4]
- ldrb r3, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- orrs r3, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- orrs r3, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- orrs r3, r0
- ldr r1, _08025E24 @ =gStatuses3
- ldrb r2, [r5]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08025E28 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08025E08
- ldr r0, _08025E2C @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- bne _08025E08
- ldr r0, _08025E30 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08025E08
- ldr r1, _08025E34 @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r2, [r0]
- ands r2, r3
- movs r0, 0
- movs r1, 0x1
- bl EmitStatusAnimation
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
-_08025E08:
- ldr r1, _08025E1C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
-_08025E10:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08025E18: .4byte gUnknown_2023BC8
-_08025E1C: .4byte gUnknown_2023D74
-_08025E20: .4byte gActiveBattler
-_08025E24: .4byte gStatuses3
-_08025E28: .4byte 0x000400c0
-_08025E2C: .4byte gDisableStructs
-_08025E30: .4byte gUnknown_2023DD0
-_08025E34: .4byte gBattleMons
- thumb_func_end atk65_status2animation
-
- thumb_func_start atk66_chosenstatusanimation
-atk66_chosenstatusanimation: @ 8025E38
- push {r4,r5,lr}
- ldr r0, _08025EB0 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _08025EAA
- ldr r4, _08025EB4 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r5, _08025EB8 @ =gActiveBattler
- strb r0, [r5]
- ldr r4, [r4]
- ldrb r2, [r4, 0x3]
- ldrb r0, [r4, 0x4]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r4, 0x5]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r4, 0x6]
- lsls r0, 24
- orrs r2, r0
- ldr r1, _08025EBC @ =gStatuses3
- ldrb r3, [r5]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08025EC0 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08025EA2
- ldr r0, _08025EC4 @ =gDisableStructs
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- bne _08025EA2
- ldr r0, _08025EC8 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08025EA2
- ldrb r1, [r4, 0x2]
- movs r0, 0
- bl EmitStatusAnimation
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
-_08025EA2:
- ldr r1, _08025EB4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x7
- str r0, [r1]
-_08025EAA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08025EB0: .4byte gUnknown_2023BC8
-_08025EB4: .4byte gUnknown_2023D74
-_08025EB8: .4byte gActiveBattler
-_08025EBC: .4byte gStatuses3
-_08025EC0: .4byte 0x000400c0
-_08025EC4: .4byte gDisableStructs
-_08025EC8: .4byte gUnknown_2023DD0
- thumb_func_end atk66_chosenstatusanimation
-
- thumb_func_start atk67_yesnobox
-atk67_yesnobox: @ 8025ECC
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _08025EE0 @ =gUnknown_2023E82
- ldrb r4, [r5]
- cmp r4, 0
- beq _08025EE4
- cmp r4, 0x1
- beq _08025F0C
- b _08025F9A
- .align 2, 0
-_08025EE0: .4byte gUnknown_2023E82
-_08025EE4:
- str r4, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802DB7C
- ldr r0, _08025F08 @ =gUnknown_83FE791
- movs r1, 0xE
- bl sub_80D87BC
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- strb r4, [r5, 0x1]
- bl sub_802DCB8
- b _08025F9A
- .align 2, 0
-_08025F08: .4byte gUnknown_83FE791
-_08025F0C:
- ldr r0, _08025F6C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08025F30
- ldrb r0, [r5, 0x1]
- cmp r0, 0
- beq _08025F30
- movs r0, 0x5
- bl PlaySE
- bl sub_802DCF8
- movs r0, 0
- strb r0, [r5, 0x1]
- bl sub_802DCB8
-_08025F30:
- ldr r0, _08025F6C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08025F56
- ldr r4, _08025F70 @ =gUnknown_2023E82
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08025F56
- movs r0, 0x5
- bl PlaySE
- bl sub_802DCF8
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_802DCB8
-_08025F56:
- ldr r0, _08025F6C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08025F74
- ldr r0, _08025F70 @ =gUnknown_2023E82
- movs r4, 0x1
- strb r4, [r0, 0x1]
- b _08025F7E
- .align 2, 0
-_08025F6C: .4byte gMain
-_08025F70: .4byte gUnknown_2023E82
-_08025F74:
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08025F9A
-_08025F7E:
- movs r0, 0x5
- bl PlaySE
- str r4, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802DB7C
- ldr r1, _08025FA4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_08025F9A:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08025FA4: .4byte gUnknown_2023D74
- thumb_func_end atk67_yesnobox
-
- thumb_func_start atk68_cancelallactions
-atk68_cancelallactions: @ 8025FA8
- push {r4,r5,lr}
- movs r1, 0
- ldr r2, _08025FD4 @ =gBattlersCount
- ldr r5, _08025FD8 @ =gUnknown_2023D74
- ldrb r0, [r2]
- cmp r1, r0
- bge _08025FC6
- ldr r4, _08025FDC @ =gUnknown_2023BDA
- movs r3, 0xC
-_08025FBA:
- adds r0, r1, r4
- strb r3, [r0]
- adds r1, 0x1
- ldrb r0, [r2]
- cmp r1, r0
- blt _08025FBA
-_08025FC6:
- ldr r0, [r5]
- adds r0, 0x1
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08025FD4: .4byte gBattlersCount
-_08025FD8: .4byte gUnknown_2023D74
-_08025FDC: .4byte gUnknown_2023BDA
- thumb_func_end atk68_cancelallactions
-
- thumb_func_start atk69_adjustsetdamage
-atk69_adjustsetdamage: @ 8025FE0
- push {r4-r7,lr}
- ldr r7, _08026008 @ =gBattleMons
- ldr r6, _0802600C @ =gBattlerTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _08026014
- ldr r1, _08026010 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _0802602E
- .align 2, 0
-_08026008: .4byte gBattleMons
-_0802600C: .4byte gBattlerTarget
-_08026010: .4byte gEnigmaBerries
-_08026014:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_0802602E:
- ldr r1, _080260F0 @ =gPotentialItemEffectBattler
- ldr r5, _080260F4 @ =gBattlerTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _0802606C
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _0802606C
- ldrb r0, [r5]
- movs r1, 0x27
- bl sub_80C7208
- ldr r2, _080260F8 @ =gUnknown_2023ECC
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_0802606C:
- ldr r2, _080260FC @ =gBattleMons
- ldr r3, _080260F4 @ =gBattlerTarget
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 17
- ands r1, r0
- adds r5, r2, 0
- cmp r1, 0
- bne _0802613C
- ldr r2, _08026100 @ =gBattleMoves
- ldr r0, _08026104 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x65
- beq _080260BE
- ldr r0, _08026108 @ =gUnknown_2023E8C
- lsls r1, r4, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _080260BE
- ldr r0, _080260F8 @ =gUnknown_2023ECC
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0802613C
-_080260BE:
- ldrb r0, [r3]
- movs r4, 0x58
- muls r0, r4
- adds r0, r5
- ldrh r1, [r0, 0x28]
- ldr r2, _0802610C @ =gBattleMoveDamage
- ldr r0, [r2]
- cmp r1, r0
- bgt _0802613C
- subs r0, r1, 0x1
- str r0, [r2]
- ldr r1, _08026108 @ =gUnknown_2023E8C
- ldrb r3, [r3]
- lsls r0, r3, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- bge _08026114
- ldr r0, _08026110 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _0802613C
- .align 2, 0
-_080260F0: .4byte gPotentialItemEffectBattler
-_080260F4: .4byte gBattlerTarget
-_080260F8: .4byte gUnknown_2023ECC
-_080260FC: .4byte gBattleMons
-_08026100: .4byte gBattleMoves
-_08026104: .4byte gCurrentMove
-_08026108: .4byte gUnknown_2023E8C
-_0802610C: .4byte gBattleMoveDamage
-_08026110: .4byte gMoveResultFlags
-_08026114:
- ldr r0, _0802614C @ =gUnknown_2023ECC
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0802613C
- ldr r2, _08026150 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08026154 @ =gUnknown_2023D68
- adds r0, r3, 0
- muls r0, r4
- adds r0, r5
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
-_0802613C:
- ldr r1, _08026158 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802614C: .4byte gUnknown_2023ECC
-_08026150: .4byte gMoveResultFlags
-_08026154: .4byte gUnknown_2023D68
-_08026158: .4byte gUnknown_2023D74
- thumb_func_end atk69_adjustsetdamage
-
- thumb_func_start atk6A_removeitem
-atk6A_removeitem: @ 802615C
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, _080261BC @ =gUnknown_2023D74
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r5, _080261C0 @ =gActiveBattler
- strb r0, [r5]
- ldr r1, _080261C4 @ =gBattleStruct
- ldrb r4, [r5]
- lsls r0, r4, 1
- adds r0, 0xB8
- ldr r1, [r1]
- adds r1, r0
- ldr r2, _080261C8 @ =gBattleMons
- movs r3, 0x58
- adds r0, r4, 0
- muls r0, r3
- adds r0, r2
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
- ldrb r0, [r5]
- muls r0, r3
- adds r0, r2
- movs r1, 0
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- muls r0, r3
- adds r2, 0x2E
- adds r0, r2
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetMonData
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r0, [r6]
- adds r0, 0x2
- str r0, [r6]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080261BC: .4byte gUnknown_2023D74
-_080261C0: .4byte gActiveBattler
-_080261C4: .4byte gBattleStruct
-_080261C8: .4byte gBattleMons
- thumb_func_end atk6A_removeitem
-
- thumb_func_start atk6B_atknameinbuff1
-atk6B_atknameinbuff1: @ 80261CC
- ldr r1, _080261F8 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x7
- strb r0, [r1, 0x1]
- ldr r2, _080261FC @ =sBattler_AI
- ldrb r0, [r2]
- strb r0, [r1, 0x2]
- ldr r3, _08026200 @ =gBattlerPartyIndexes
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _08026204 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_080261F8: .4byte gBattleTextBuff1
-_080261FC: .4byte sBattler_AI
-_08026200: .4byte gBattlerPartyIndexes
-_08026204: .4byte gUnknown_2023D74
- thumb_func_end atk6B_atknameinbuff1
-
- thumb_func_start atk6C_drawlvlupbox
-atk6C_drawlvlupbox: @ 8026208
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _08026224 @ =gBattleScripting
- ldrb r1, [r0, 0x1E]
- adds r4, r0, 0
- cmp r1, 0
- bne _0802622C
- bl IsMonGettingExpSentOut
- cmp r0, 0
- beq _08026228
- movs r0, 0x3
- b _0802622A
- .align 2, 0
-_08026224: .4byte gBattleScripting
-_08026228:
- movs r0, 0x1
-_0802622A:
- strb r0, [r4, 0x1E]
-_0802622C:
- ldrb r0, [r4, 0x1E]
- subs r0, 0x1
- cmp r0, 0x9
- bls _08026236
- b _080263F6
-_08026236:
- lsls r0, 2
- ldr r1, _08026240 @ =_08026244
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08026240: .4byte _08026244
- .align 2, 0
-_08026244:
- .4byte _0802626C
- .4byte _08026298
- .4byte _080262B0
- .4byte _08026304
- .4byte _08026318
- .4byte _08026330
- .4byte _08026318
- .4byte _08026350
- .4byte _08026380
- .4byte _080263C4
-_0802626C:
- ldr r1, _08026290 @ =gBattle_BG2_Y
- movs r0, 0x60
- strh r0, [r1]
- movs r0, 0x2
- movs r1, 0x7
- movs r2, 0
- bl SetBgAttribute
- movs r0, 0x2
- bl ShowBg
- bl sub_8026480
- ldr r1, _08026294 @ =gBattleScripting
- movs r0, 0x2
- strb r0, [r1, 0x1E]
- b _080263F6
- .align 2, 0
-_08026290: .4byte gBattle_BG2_Y
-_08026294: .4byte gBattleScripting
-_08026298:
- bl sub_80264D0
- lsls r0, 24
- cmp r0, 0
- beq _080262A4
- b _080263F6
-_080262A4:
- ldr r1, _080262AC @ =gBattleScripting
- movs r0, 0x3
- strb r0, [r1, 0x1E]
- b _080263F6
- .align 2, 0
-_080262AC: .4byte gBattleScripting
-_080262B0:
- ldr r1, _080262F8 @ =gBattle_BG1_X
- movs r0, 0
- strh r0, [r1]
- ldr r1, _080262FC @ =gBattle_BG1_Y
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- movs r0, 0
- movs r1, 0x7
- movs r2, 0x1
- bl SetBgAttribute
- movs r0, 0x1
- movs r1, 0x7
- movs r2, 0
- bl SetBgAttribute
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x80
- str r0, [sp]
- movs r0, 0x12
- movs r1, 0x7
- movs r2, 0x1D
- movs r3, 0x13
- bl sub_802DB7C
- ldr r1, _08026300 @ =gBattleScripting
- movs r0, 0x4
- strb r0, [r1, 0x1E]
- b _080263F6
- .align 2, 0
-_080262F8: .4byte gBattle_BG1_X
-_080262FC: .4byte gBattle_BG1_Y
-_08026300: .4byte gBattleScripting
-_08026304:
- bl sub_8026404
- movs r0, 0xC
- bl PutWindowTilemap
- movs r0, 0xC
- movs r1, 0x3
- bl CopyWindowToVram
- b _0802636E
-_08026318:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _080263F6
- ldr r0, _0802632C @ =gBattle_BG1_Y
- strh r1, [r0]
- b _0802636E
- .align 2, 0
-_0802632C: .4byte gBattle_BG1_Y
-_08026330:
- ldr r0, _0802634C @ =gMain
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- beq _080263F6
- movs r0, 0x5
- bl PlaySE
- bl sub_8026448
- movs r0, 0xC
- movs r1, 0x2
- bl CopyWindowToVram
- b _0802636E
- .align 2, 0
-_0802634C: .4byte gMain
-_08026350:
- ldr r0, _08026378 @ =gMain
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- beq _080263F6
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x81
- str r0, [sp]
- movs r0, 0x12
- movs r1, 0x7
- movs r2, 0x1D
- movs r3, 0x13
- bl sub_802DB7C
-_0802636E:
- ldr r1, _0802637C @ =gBattleScripting
- ldrb r0, [r1, 0x1E]
- adds r0, 0x1
- strb r0, [r1, 0x1E]
- b _080263F6
- .align 2, 0
-_08026378: .4byte gMain
-_0802637C: .4byte gBattleScripting
-_08026380:
- bl sub_8026648
- lsls r0, 24
- cmp r0, 0
- bne _080263F6
- movs r0, 0xD
- bl ClearWindowTilemap
- movs r0, 0xD
- movs r1, 0x1
- bl CopyWindowToVram
- movs r0, 0xC
- bl ClearWindowTilemap
- movs r0, 0xC
- movs r1, 0x1
- bl CopyWindowToVram
- movs r0, 0x2
- movs r1, 0x7
- movs r2, 0x2
- bl SetBgAttribute
- movs r0, 0x2
- bl ShowBg
- ldr r1, _080263C0 @ =gBattleScripting
- movs r0, 0xA
- strb r0, [r1, 0x1E]
- b _080263F6
- .align 2, 0
-_080263C0: .4byte gBattleScripting
-_080263C4:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _080263F6
- movs r0, 0
- movs r1, 0x7
- movs r2, 0
- bl SetBgAttribute
- movs r0, 0x1
- movs r1, 0x7
- movs r2, 0x1
- bl SetBgAttribute
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- ldr r1, _08026400 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_080263F6:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08026400: .4byte gUnknown_2023D74
- thumb_func_end atk6C_drawlvlupbox
-
- thumb_func_start sub_8026404
-sub_8026404: @ 8026404
- push {lr}
- sub sp, 0x14
- ldr r0, _0802643C @ =gBattleStruct
- ldr r0, [r0]
- ldrb r1, [r0, 0x10]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08026440 @ =gPlayerParty
- adds r0, r1
- add r1, sp, 0x8
- bl sub_811D130
- ldr r0, _08026444 @ =gBattleResources
- ldr r0, [r0]
- ldr r1, [r0, 0x10]
- movs r0, 0xD
- str r0, [sp]
- movs r0, 0xF
- str r0, [sp, 0x4]
- movs r0, 0xC
- add r2, sp, 0x8
- movs r3, 0xE
- bl sub_811E7F0
- add sp, 0x14
- pop {r0}
- bx r0
- .align 2, 0
-_0802643C: .4byte gBattleStruct
-_08026440: .4byte gPlayerParty
-_08026444: .4byte gBattleResources
- thumb_func_end sub_8026404
-
- thumb_func_start sub_8026448
-sub_8026448: @ 8026448
- push {lr}
- sub sp, 0x10
- ldr r0, _08026478 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r1, [r0, 0x10]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802647C @ =gPlayerParty
- adds r0, r1
- add r1, sp, 0x4
- bl sub_811D130
- movs r0, 0xF
- str r0, [sp]
- movs r0, 0xC
- add r1, sp, 0x4
- movs r2, 0xE
- movs r3, 0xD
- bl sub_811E93C
- add sp, 0x10
- pop {r0}
- bx r0
- .align 2, 0
-_08026478: .4byte gBattleStruct
-_0802647C: .4byte gPlayerParty
- thumb_func_end sub_8026448
-
- thumb_func_start sub_8026480
-sub_8026480: @ 8026480
- push {lr}
- ldr r1, _080264C0 @ =gBattle_BG2_Y
- movs r0, 0
- strh r0, [r1]
- ldr r1, _080264C4 @ =gBattle_BG2_X
- movs r2, 0xD0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _080264C8 @ =gUnknown_82506D0
- movs r1, 0x60
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _080264CC @ =gUnknown_82506F0
- movs r0, 0xD
- movs r2, 0
- movs r3, 0
- bl CopyToWindowPixelBuffer
- movs r0, 0xD
- bl PutWindowTilemap
- movs r0, 0xD
- movs r1, 0x3
- bl CopyWindowToVram
- bl PutMonIconOnLvlUpBox
- pop {r0}
- bx r0
- .align 2, 0
-_080264C0: .4byte gBattle_BG2_Y
-_080264C4: .4byte gBattle_BG2_X
-_080264C8: .4byte gUnknown_82506D0
-_080264CC: .4byte gUnknown_82506F0
- thumb_func_end sub_8026480
-
- thumb_func_start sub_80264D0
-sub_80264D0: @ 80264D0
- push {r4,r5,lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- beq _080264E0
- movs r0, 0x1
- b _0802651A
-_080264E0:
- ldr r4, _080264F0 @ =gBattle_BG2_X
- ldrh r1, [r4]
- movs r5, 0x80
- lsls r5, 2
- cmp r1, r5
- bne _080264F4
- movs r0, 0
- b _0802651A
- .align 2, 0
-_080264F0: .4byte gBattle_BG2_X
-_080264F4:
- movs r0, 0xD0
- lsls r0, 1
- cmp r1, r0
- bne _08026500
- bl PutLevelAndGenderOnLvlUpBox
-_08026500:
- ldrh r0, [r4]
- adds r0, 0x8
- strh r0, [r4]
- lsls r0, 16
- ldr r1, _08026520 @ =0x01ff0000
- cmp r0, r1
- bls _08026510
- strh r5, [r4]
-_08026510:
- ldrh r1, [r4]
- eors r1, r5
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
-_0802651A:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08026520: .4byte 0x01ff0000
- thumb_func_end sub_80264D0
-
- thumb_func_start PutLevelAndGenderOnLvlUpBox
-PutLevelAndGenderOnLvlUpBox: @ 8026524
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- ldr r6, _080265F8 @ =gBattleStruct
- ldr r0, [r6]
- ldrb r0, [r0, 0x10]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _080265FC @ =gPlayerParty
- adds r0, r4
- movs r1, 0x38
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, [r6]
- ldrb r0, [r0, 0x10]
- muls r0, r5
- adds r0, r4
- bl GetMonGender
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, [r6]
- ldrb r0, [r0, 0x10]
- muls r0, r5
- adds r0, r4
- ldr r6, _08026600 @ =gStringVar4
- adds r1, r6, 0
- bl GetMonNickname
- str r6, [sp]
- mov r1, sp
- movs r4, 0
- movs r0, 0xD
- strb r0, [r1, 0x4]
- mov r0, sp
- strb r4, [r0, 0x5]
- movs r5, 0x20
- strb r5, [r0, 0x6]
- strb r4, [r0, 0x7]
- strb r5, [r0, 0x8]
- strb r4, [r0, 0x9]
- strb r4, [r0, 0xA]
- strb r4, [r0, 0xB]
- mov r3, sp
- ldrb r2, [r3, 0xC]
- movs r1, 0x10
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r3, 0xC]
- mov r2, sp
- movs r0, 0x10
- strb r0, [r2, 0xC]
- ldrb r0, [r2, 0xD]
- ands r1, r0
- strb r1, [r2, 0xD]
- mov r0, sp
- strb r5, [r0, 0xD]
- movs r1, 0xFF
- movs r2, 0
- bl AddTextPrinter
- movs r0, 0xF9
- strb r0, [r6]
- adds r6, 0x1
- movs r0, 0x5
- strb r0, [r6]
- adds r6, 0x1
- strb r4, [r6]
- adds r6, 0x1
- adds r4, r6, 0
- adds r0, r4, 0
- mov r1, r8
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r6, r0, 0
- movs r1, 0
- movs r2, 0x5
- bl StringFill
- adds r6, r4, 0x4
- cmp r7, 0xFF
- beq _08026624
- cmp r7, 0
- bne _08026604
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0xC
- bl WriteColorChangeControlCode
- adds r6, r0, 0
- movs r1, 0x1
- movs r2, 0xD
- bl WriteColorChangeControlCode
- adds r6, r0, 0
- movs r0, 0xB5
- b _0802661C
- .align 2, 0
-_080265F8: .4byte gBattleStruct
-_080265FC: .4byte gPlayerParty
-_08026600: .4byte gStringVar4
-_08026604:
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0xE
- bl WriteColorChangeControlCode
- adds r6, r0, 0
- movs r1, 0x1
- movs r2, 0xF
- bl WriteColorChangeControlCode
- adds r6, r0, 0
- movs r0, 0xB6
-_0802661C:
- strb r0, [r6]
- adds r6, 0x1
- movs r0, 0xFF
- strb r0, [r6]
-_08026624:
- mov r0, sp
- movs r1, 0xA
- strb r1, [r0, 0x7]
- strb r1, [r0, 0x9]
- movs r1, 0xFF
- movs r2, 0
- bl AddTextPrinter
- movs r0, 0xD
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end PutLevelAndGenderOnLvlUpBox
-
- thumb_func_start sub_8026648
-sub_8026648: @ 8026648
- push {lr}
- ldr r0, _0802665C @ =gBattle_BG2_X
- ldrh r1, [r0]
- movs r3, 0xD0
- lsls r3, 1
- adds r2, r0, 0
- cmp r1, r3
- bne _08026660
- movs r0, 0
- b _08026684
- .align 2, 0
-_0802665C: .4byte gBattle_BG2_X
-_08026660:
- ldrh r0, [r2]
- adds r1, r0, 0
- subs r1, 0x10
- ldr r0, _08026670 @ =0x0000019f
- cmp r1, r0
- bgt _08026674
- strh r3, [r2]
- b _08026676
- .align 2, 0
-_08026670: .4byte 0x0000019f
-_08026674:
- strh r1, [r2]
-_08026676:
- ldrh r1, [r2]
- movs r0, 0xD0
- lsls r0, 1
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
-_08026684:
- pop {r1}
- bx r1
- thumb_func_end sub_8026648
-
- thumb_func_start PutMonIconOnLvlUpBox
-PutMonIconOnLvlUpBox: @ 8026688
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x10
- ldr r0, _08026730 @ =gBattleStruct
- mov r8, r0
- ldr r0, [r0]
- ldrb r0, [r0, 0x10]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _08026734 @ =gPlayerParty
- adds r0, r5
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r1, r8
- ldr r0, [r1]
- ldrb r0, [r0, 0x10]
- muls r0, r6
- adds r0, r5
- movs r1, 0
- bl GetMonData
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0x1
- bl GetMonIconPtr
- str r0, [sp]
- ldr r5, _08026738 @ =0xffff0000
- ldr r0, [sp, 0x4]
- ands r0, r5
- movs r1, 0x80
- lsls r1, 2
- orrs r0, r1
- ldr r1, _0802673C @ =0x0000ffff
- ands r0, r1
- ldr r1, _08026740 @ =0xd75a0000
- orrs r0, r1
- str r0, [sp, 0x4]
- adds r0, r4, 0
- bl GetValidMonIconPalettePtr
- str r0, [sp, 0x8]
- add r4, sp, 0x8
- ldr r0, [r4, 0x4]
- ands r0, r5
- ldr r1, _08026744 @ =0x0000d75a
- orrs r0, r1
- str r0, [r4, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- adds r0, r4, 0
- bl LoadSpritePalette
- ldr r0, _08026748 @ =gUnknown_82507C8
- movs r1, 0x80
- lsls r1, 1
- movs r2, 0xA
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0802674C @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x2E]
- ldr r0, _08026750 @ =gBattle_BG2_X
- ldrh r0, [r0]
- strh r0, [r1, 0x30]
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08026730: .4byte gBattleStruct
-_08026734: .4byte gPlayerParty
-_08026738: .4byte 0xffff0000
-_0802673C: .4byte 0x0000ffff
-_08026740: .4byte 0xd75a0000
-_08026744: .4byte 0x0000d75a
-_08026748: .4byte gUnknown_82507C8
-_0802674C: .4byte gSprites
-_08026750: .4byte gBattle_BG2_X
- thumb_func_end PutMonIconOnLvlUpBox
-
- thumb_func_start SpriteCB_MonIconOnLvlUpBox
-SpriteCB_MonIconOnLvlUpBox: @ 8026754
- push {r4,lr}
- adds r2, r0, 0
- ldr r0, _08026770 @ =gBattle_BG2_X
- ldrh r1, [r2, 0x30]
- ldrh r0, [r0]
- subs r1, r0
- strh r1, [r2, 0x24]
- lsls r1, 16
- cmp r1, 0
- beq _08026774
- movs r0, 0x1
- strh r0, [r2, 0x2E]
- b _08026790
- .align 2, 0
-_08026770: .4byte gBattle_BG2_X
-_08026774:
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _08026790
- adds r0, r2, 0
- bl DestroySprite
- ldr r4, _08026798 @ =0x0000d75a
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
-_08026790:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08026798: .4byte 0x0000d75a
- thumb_func_end SpriteCB_MonIconOnLvlUpBox
-
- thumb_func_start IsMonGettingExpSentOut
-IsMonGettingExpSentOut: @ 802679C
- push {lr}
- ldr r3, _080267C4 @ =gBattlerPartyIndexes
- ldr r0, _080267C8 @ =gBattleStruct
- ldr r0, [r0]
- ldrh r1, [r3]
- ldrb r2, [r0, 0x10]
- cmp r1, r2
- beq _080267BE
- ldr r0, _080267CC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080267D0
- ldrh r0, [r3, 0x4]
- cmp r0, r2
- bne _080267D0
-_080267BE:
- movs r0, 0x1
- b _080267D2
- .align 2, 0
-_080267C4: .4byte gBattlerPartyIndexes
-_080267C8: .4byte gBattleStruct
-_080267CC: .4byte gBattleTypeFlags
-_080267D0:
- movs r0, 0
-_080267D2:
- pop {r1}
- bx r1
- thumb_func_end IsMonGettingExpSentOut
-
- thumb_func_start atk6D_resetsentmonsvalue
-atk6D_resetsentmonsvalue: @ 80267D8
- push {lr}
- bl ResetSentPokesToOpponentValue
- ldr r1, _080267EC @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080267EC: .4byte gUnknown_2023D74
- thumb_func_end atk6D_resetsentmonsvalue
-
- thumb_func_start atk6E_setatktoplayer0
-atk6E_setatktoplayer0: @ 80267F0
- push {lr}
- movs r0, 0
- bl GetBattlerAtPosition
- ldr r1, _08026808 @ =sBattler_AI
- strb r0, [r1]
- ldr r1, _0802680C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08026808: .4byte sBattler_AI
-_0802680C: .4byte gUnknown_2023D74
- thumb_func_end atk6E_setatktoplayer0
-
- thumb_func_start atk6F_makevisible
-atk6F_makevisible: @ 8026810
- push {r4,r5,lr}
- ldr r5, _0802683C @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _08026840 @ =gActiveBattler
- strb r0, [r4]
- movs r0, 0
- movs r1, 0
- bl EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802683C: .4byte gUnknown_2023D74
-_08026840: .4byte gActiveBattler
- thumb_func_end atk6F_makevisible
-
- thumb_func_start atk70_recordlastability
-atk70_recordlastability: @ 8026844
- push {r4,lr}
- ldr r4, _0802686C @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r1, _08026870 @ =gActiveBattler
- strb r0, [r1]
- ldrb r0, [r1]
- ldr r1, _08026874 @ =gLastUsedAbility
- ldrb r1, [r1]
- bl sub_80C71D0
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802686C: .4byte gUnknown_2023D74
-_08026870: .4byte gActiveBattler
-_08026874: .4byte gLastUsedAbility
- thumb_func_end atk70_recordlastability
-
- thumb_func_start BufferMoveToLearnIntoBattleTextBuff2
-BufferMoveToLearnIntoBattleTextBuff2: @ 8026878
- ldr r2, _08026898 @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r2]
- movs r0, 0x2
- strb r0, [r2, 0x1]
- ldr r0, _0802689C @ =gMoveToLearn
- ldrh r1, [r0]
- strb r1, [r2, 0x2]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r0, 8
- strb r0, [r2, 0x3]
- movs r0, 0xFF
- strb r0, [r2, 0x4]
- bx lr
- .align 2, 0
-_08026898: .4byte gBattleTextBuff2
-_0802689C: .4byte gMoveToLearn
- thumb_func_end BufferMoveToLearnIntoBattleTextBuff2
-
- thumb_func_start atk71_buffermovetolearn
-atk71_buffermovetolearn: @ 80268A0
- push {lr}
- bl BufferMoveToLearnIntoBattleTextBuff2
- ldr r1, _080268B4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080268B4: .4byte gUnknown_2023D74
- thumb_func_end atk71_buffermovetolearn
-
- thumb_func_start atk72_jumpifplayerran
-atk72_jumpifplayerran: @ 80268B8
- push {lr}
- ldr r0, _080268E4 @ =gUnknown_2023D6D
- ldrb r0, [r0]
- bl sub_8016748
- lsls r0, 24
- cmp r0, 0
- beq _080268EC
- ldr r3, _080268E8 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _080268F4
- .align 2, 0
-_080268E4: .4byte gUnknown_2023D6D
-_080268E8: .4byte gUnknown_2023D74
-_080268EC:
- ldr r1, _080268F8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_080268F4:
- pop {r0}
- bx r0
- .align 2, 0
-_080268F8: .4byte gUnknown_2023D74
- thumb_func_end atk72_jumpifplayerran
-
- thumb_func_start atk73_hpthresholds
-atk73_hpthresholds: @ 80268FC
- push {r4-r6,lr}
- ldr r0, _0802694C @ =gBattleTypeFlags
- ldr r4, [r0]
- movs r6, 0x1
- ands r4, r6
- cmp r4, 0
- bne _08026992
- ldr r0, _08026950 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r1, _08026954 @ =gActiveBattler
- strb r0, [r1]
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08026958 @ =gBattleMons
- movs r1, 0x58
- muls r1, r0
- adds r1, r2
- ldrh r5, [r1, 0x28]
- movs r0, 0x64
- muls r0, r5
- ldrh r1, [r1, 0x2C]
- bl __divsi3
- cmp r0, 0
- bne _0802693A
- movs r0, 0x1
-_0802693A:
- cmp r0, 0x45
- bgt _08026942
- cmp r5, 0
- bne _08026960
-_08026942:
- ldr r0, _0802695C @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xAD
- strb r4, [r0]
- b _08026992
- .align 2, 0
-_0802694C: .4byte gBattleTypeFlags
-_08026950: .4byte gUnknown_2023D74
-_08026954: .4byte gActiveBattler
-_08026958: .4byte gBattleMons
-_0802695C: .4byte gBattleStruct
-_08026960:
- cmp r0, 0x27
- ble _08026974
- ldr r0, _08026970 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xAD
- strb r6, [r0]
- b _08026992
- .align 2, 0
-_08026970: .4byte gBattleStruct
-_08026974:
- cmp r0, 0x9
- ble _08026988
- ldr r0, _08026984 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xAD
- movs r1, 0x2
- b _08026990
- .align 2, 0
-_08026984: .4byte gBattleStruct
-_08026988:
- ldr r0, _080269A0 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xAD
- movs r1, 0x3
-_08026990:
- strb r1, [r0]
-_08026992:
- ldr r1, _080269A4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080269A0: .4byte gBattleStruct
-_080269A4: .4byte gUnknown_2023D74
- thumb_func_end atk73_hpthresholds
-
- thumb_func_start atk74_hpthresholds2
-atk74_hpthresholds2: @ 80269A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _08026A0C @ =gBattleTypeFlags
- ldr r7, [r0]
- movs r0, 0x1
- mov r8, r0
- ands r7, r0
- cmp r7, 0
- bne _08026A42
- ldr r0, _08026A10 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- adds r4, r0, 0
- ldr r0, _08026A14 @ =gActiveBattler
- strb r4, [r0]
- movs r0, 0x1
- eors r4, r0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _08026A18 @ =gBattleStruct
- ldr r6, [r1]
- lsrs r0, 23
- adds r0, r6
- adds r0, 0xA8
- ldrb r5, [r0]
- ldr r1, _08026A1C @ =gBattleMons
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- ldrh r4, [r0, 0x28]
- subs r1, r5, r4
- movs r0, 0x64
- muls r0, r1
- adds r1, r5, 0
- bl __divsi3
- adds r1, r0, 0
- cmp r4, r5
- bcc _08026A20
- adds r0, r6, 0
- adds r0, 0xAD
- strb r7, [r0]
- b _08026A42
- .align 2, 0
-_08026A0C: .4byte gBattleTypeFlags
-_08026A10: .4byte gUnknown_2023D74
-_08026A14: .4byte gActiveBattler
-_08026A18: .4byte gBattleStruct
-_08026A1C: .4byte gBattleMons
-_08026A20:
- cmp r0, 0x1D
- bgt _08026A2E
- adds r0, r6, 0
- adds r0, 0xAD
- mov r1, r8
- strb r1, [r0]
- b _08026A42
-_08026A2E:
- cmp r1, 0x45
- bgt _08026A3A
- adds r1, r6, 0
- adds r1, 0xAD
- movs r0, 0x2
- b _08026A40
-_08026A3A:
- adds r1, r6, 0
- adds r1, 0xAD
- movs r0, 0x3
-_08026A40:
- strb r0, [r1]
-_08026A42:
- ldr r1, _08026A54 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08026A54: .4byte gUnknown_2023D74
- thumb_func_end atk74_hpthresholds2
-
- thumb_func_start atk75_useitemonopponent
-atk75_useitemonopponent: @ 8026A58
- push {lr}
- sub sp, 0x4
- ldr r2, _08026A98 @ =gBattlerInMenuId
- ldr r1, _08026A9C @ =sBattler_AI
- ldrb r0, [r1]
- strb r0, [r2]
- ldr r2, _08026AA0 @ =gBattlerPartyIndexes
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r1, _08026AA4 @ =gEnemyParty
- adds r0, r1
- ldr r1, _08026AA8 @ =gUnknown_2023D68
- ldrh r1, [r1]
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0x1
- str r3, [sp]
- movs r3, 0
- bl PokemonUseItemEffects
- ldr r1, _08026AAC @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_08026A98: .4byte gBattlerInMenuId
-_08026A9C: .4byte sBattler_AI
-_08026AA0: .4byte gBattlerPartyIndexes
-_08026AA4: .4byte gEnemyParty
-_08026AA8: .4byte gUnknown_2023D68
-_08026AAC: .4byte gUnknown_2023D74
- thumb_func_end atk75_useitemonopponent
-
- thumb_func_start sub_8026AB0
-sub_8026AB0: @ 8026AB0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- ldr r4, _08026ADC @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r1, _08026AE0 @ =gActiveBattler
- strb r0, [r1]
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- cmp r0, 0xC
- bls _08026AD2
- b _08026F4E
-_08026AD2:
- lsls r0, 2
- ldr r1, _08026AE4 @ =_08026AE8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08026ADC: .4byte gUnknown_2023D74
-_08026AE0: .4byte gActiveBattler
-_08026AE4: .4byte _08026AE8
- .align 2, 0
-_08026AE8:
- .4byte _08026B1C
- .4byte _08026B2C
- .4byte _08026B8C
- .4byte _08026B9C
- .4byte _08026BB4
- .4byte _08026BF0
- .4byte _08026C28
- .4byte _08026CB4
- .4byte _08026CF4
- .4byte _08026D50
- .4byte _08026D64
- .4byte _08026DA0
- .4byte _08026F44
-_08026B1C:
- ldr r0, _08026B28 @ =gActiveBattler
- ldrb r0, [r0]
- bl CancelMultiTurnMoves
- b _08026F4E
- .align 2, 0
-_08026B28: .4byte gActiveBattler
-_08026B2C:
- ldr r1, _08026B68 @ =sBattler_AI
- ldr r4, _08026B6C @ =gBattlerTarget
- ldrb r0, [r4]
- strb r0, [r1]
- ldrb r0, [r1]
- bl GetBattlerSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08026B70 @ =gSideTimers
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r2, r1, r2
- ldrb r0, [r2, 0x8]
- cmp r0, 0
- beq _08026B78
- ldr r1, _08026B74 @ =gBattleMons
- ldrb r2, [r2, 0x9]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08026B78
- strb r2, [r4]
- b _08026F4E
- .align 2, 0
-_08026B68: .4byte sBattler_AI
-_08026B6C: .4byte gBattlerTarget
-_08026B70: .4byte gSideTimers
-_08026B74: .4byte gBattleMons
-_08026B78:
- ldr r0, _08026B84 @ =gBattlerTarget
- ldr r1, _08026B88 @ =gActiveBattler
- ldrb r1, [r1]
- strb r1, [r0]
- b _08026F4E
- .align 2, 0
-_08026B84: .4byte gBattlerTarget
-_08026B88: .4byte gActiveBattler
-_08026B8C:
- bl IsRunningFromBattleImpossible
- ldr r1, _08026B98 @ =gUnknown_2023E82
- strb r0, [r1]
- b _08026F4E
- .align 2, 0
-_08026B98: .4byte gUnknown_2023E82
-_08026B9C:
- ldr r0, _08026BAC @ =gCurrentMove
- ldrh r0, [r0]
- movs r1, 0
- bl GetMoveTarget
- ldr r1, _08026BB0 @ =gBattlerTarget
- strb r0, [r1]
- b _08026F4E
- .align 2, 0
-_08026BAC: .4byte gCurrentMove
-_08026BB0: .4byte gBattlerTarget
-_08026BB4:
- ldr r2, _08026BD4 @ =gUnknown_2023DD0
- ldr r1, _08026BD8 @ =gBitTable
- ldr r0, _08026BDC @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- lsls r0, 28
- ldr r2, [r2]
- ands r2, r0
- cmp r2, 0
- beq _08026BE4
- ldr r1, _08026BE0 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1]
- b _08026F4E
- .align 2, 0
-_08026BD4: .4byte gUnknown_2023DD0
-_08026BD8: .4byte gBitTable
-_08026BDC: .4byte gActiveBattler
-_08026BE0: .4byte gUnknown_2023E82
-_08026BE4:
- ldr r0, _08026BEC @ =gUnknown_2023E82
- strb r2, [r0]
- b _08026F4E
- .align 2, 0
-_08026BEC: .4byte gUnknown_2023E82
-_08026BF0:
- ldr r4, _08026C20 @ =gUnknown_2023ECC
- ldr r3, _08026C24 @ =gActiveBattler
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- b _08026F4E
- .align 2, 0
-_08026C20: .4byte gUnknown_2023ECC
-_08026C24: .4byte gActiveBattler
-_08026C28:
- ldr r4, _08026C4C @ =gBattlerPartyIndexes
- ldr r1, _08026C50 @ =gBattleStruct
- ldr r0, [r1]
- ldrh r3, [r4]
- ldrb r2, [r0, 0x10]
- adds r5, r1, 0
- cmp r3, r2
- beq _08026C44
- ldrh r0, [r4, 0x4]
- cmp r0, r2
- beq _08026C40
- b _08026F4E
-_08026C40:
- cmp r3, r0
- bne _08026C58
-_08026C44:
- ldr r1, _08026C54 @ =gActiveBattler
- movs r0, 0
- b _08026C5C
- .align 2, 0
-_08026C4C: .4byte gBattlerPartyIndexes
-_08026C50: .4byte gBattleStruct
-_08026C54: .4byte gActiveBattler
-_08026C58:
- ldr r1, _08026CAC @ =gActiveBattler
- movs r0, 0x2
-_08026C5C:
- strb r0, [r1]
- mov r8, r1
- mov r0, r8
- ldrb r2, [r0]
- lsls r0, r2, 1
- adds r0, 0xC8
- ldr r1, [r5]
- adds r3, r1, r0
- movs r7, 0
- ldr r1, _08026CB0 @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0xC
- adds r0, r1
- ldrh r0, [r0]
- ldrh r2, [r3]
- cmp r0, r2
- beq _08026C9E
- mov r5, r8
- movs r4, 0x58
- adds r2, r1, 0
-_08026C86:
- adds r7, 0x1
- cmp r7, 0x3
- bgt _08026C9E
- lsls r1, r7, 1
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0
- adds r1, r2
- ldrh r0, [r1]
- ldrh r1, [r3]
- cmp r0, r1
- bne _08026C86
-_08026C9E:
- cmp r7, 0x4
- beq _08026CA4
- b _08026F4E
-_08026CA4:
- movs r0, 0
- strh r0, [r3]
- b _08026F4E
- .align 2, 0
-_08026CAC: .4byte gActiveBattler
-_08026CB0: .4byte gBattleMons
-_08026CB4:
- ldr r0, _08026CE4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0xB
- ands r0, r1
- cmp r0, 0x8
- beq _08026CC2
- b _08026F4E
-_08026CC2:
- ldr r1, _08026CE8 @ =gBattleMons
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- bne _08026CCC
- b _08026F4E
-_08026CCC:
- adds r0, r1, 0
- adds r0, 0x80
- ldrh r0, [r0]
- cmp r0, 0
- bne _08026CD8
- b _08026F4E
-_08026CD8:
- ldr r0, _08026CEC @ =gUnknown_2023DD0
- ldr r1, [r0]
- ldr r2, _08026CF0 @ =0xffbfffff
- ands r1, r2
- str r1, [r0]
- b _08026F4E
- .align 2, 0
-_08026CE4: .4byte gBattleTypeFlags
-_08026CE8: .4byte gBattleMons
-_08026CEC: .4byte gUnknown_2023DD0
-_08026CF0: .4byte 0xffbfffff
-_08026CF4:
- movs r7, 0
- ldr r2, _08026D3C @ =gUnknown_2023E82
- strb r7, [r2, 0x5]
- ldr r1, _08026D40 @ =gActiveBattler
- movs r0, 0x1
- strb r0, [r1]
- mov r8, r1
- ldr r0, _08026D44 @ =gBattlersCount
- mov r4, r8
- ldrb r5, [r0]
- ldr r6, _08026D48 @ =gBattleMons
- ldr r3, _08026D4C @ =gBitTable
-_08026D0C:
- ldrb r0, [r4]
- cmp r0, r5
- bcs _08026D2A
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08026D2A
- ldr r0, [r3]
- ldrb r1, [r2, 0x5]
- orrs r0, r1
- strb r0, [r2, 0x5]
-_08026D2A:
- adds r3, 0x4
- ldrb r0, [r4]
- adds r0, 0x2
- strb r0, [r4]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _08026D0C
- b _08026F4E
- .align 2, 0
-_08026D3C: .4byte gUnknown_2023E82
-_08026D40: .4byte gActiveBattler
-_08026D44: .4byte gBattlersCount
-_08026D48: .4byte gBattleMons
-_08026D4C: .4byte gBitTable
-_08026D50:
- ldr r4, _08026D5C @ =gActiveBattler
- movs r0, 0x1
- strb r0, [r4]
- ldr r0, _08026D60 @ =gBattleMons
- adds r0, 0x58
- b _08026D7C
- .align 2, 0
-_08026D5C: .4byte gActiveBattler
-_08026D60: .4byte gBattleMons
-_08026D64:
- ldr r0, _08026D94 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r0, 0x3
- bhi _08026D6E
- b _08026F4E
-_08026D6E:
- ldr r4, _08026D98 @ =gActiveBattler
- movs r0, 0x3
- strb r0, [r4]
- ldr r0, _08026D9C @ =gBattleMons
- movs r1, 0x84
- lsls r1, 1
- adds r0, r1
-_08026D7C:
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08026D84
- b _08026F4E
-_08026D84:
- movs r0, 0
- movs r1, 0
- bl EmitReturnMonToBall
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08026F4E
- .align 2, 0
-_08026D94: .4byte gBattlersCount
-_08026D98: .4byte gActiveBattler
-_08026D9C: .4byte gBattleMons
-_08026DA0:
- ldr r0, _08026F28 @ =gUnknown_2023E82
- movs r1, 0
- strb r1, [r0, 0x5]
- mov r8, r1
- movs r7, 0
- ldr r0, _08026F2C @ =gBattlersCount
- mov r12, r0
- ldrb r2, [r0]
- cmp r8, r2
- bge _08026DEE
- ldr r4, _08026F30 @ =gBattleMons
- adds r3, r4, 0
- adds r3, 0x50
- adds r6, r4, 0
- adds r6, 0x20
- movs r5, 0
-_08026DC0:
- ldrb r0, [r6]
- cmp r0, 0x2B
- beq _08026DDE
- adds r2, r4, 0
- adds r2, 0x4C
- adds r2, r5, r2
- ldr r0, [r2]
- movs r1, 0x8
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- ldr r0, [r3]
- ldr r1, _08026F34 @ =0xf7ffffff
- ands r0, r1
- str r0, [r3]
-_08026DDE:
- adds r3, 0x58
- adds r6, 0x58
- adds r5, 0x58
- adds r7, 0x1
- mov r0, r12
- ldrb r0, [r0]
- cmp r7, r0
- blt _08026DC0
-_08026DEE:
- movs r7, 0
- movs r1, 0xCE
- lsls r1, 1
- mov r9, r1
-_08026DF6:
- movs r0, 0x64
- adds r4, r7, 0
- muls r4, r0
- ldr r0, _08026F38 @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- adds r1, r0, 0
- str r1, [sp, 0x4]
- cmp r5, 0
- beq _08026E4E
- cmp r5, r9
- beq _08026E4E
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08026E4E
- adds r0, r5, 0
- adds r1, r6, 0
- bl GetAbilityBySpecies
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2B
- beq _08026E4E
- movs r0, 0x1
- lsls r0, r7
- mov r2, r8
- orrs r2, r0
- mov r8, r2
-_08026E4E:
- adds r7, 0x1
- cmp r7, 0x5
- ble _08026DF6
- mov r0, r8
- cmp r0, 0
- beq _08026E88
- movs r0, 0
- bl GetBattlerAtPosition
- ldr r4, _08026F3C @ =gActiveBattler
- strb r0, [r4]
- movs r0, 0
- str r0, [sp, 0x4]
- mov r1, r8
- lsls r2, r1, 24
- lsrs r2, 24
- add r0, sp, 0x4
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _08026F28 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_08026E88:
- movs r1, 0
- mov r8, r1
- movs r7, 0
- movs r2, 0xCE
- lsls r2, 1
- mov r9, r2
-_08026E94:
- movs r0, 0x64
- adds r4, r7, 0
- muls r4, r0
- ldr r0, _08026F40 @ =gEnemyParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- adds r1, r0, 0
- str r1, [sp, 0x4]
- cmp r5, 0
- beq _08026EEC
- cmp r5, r9
- beq _08026EEC
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08026EEC
- adds r0, r5, 0
- adds r1, r6, 0
- bl GetAbilityBySpecies
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2B
- beq _08026EEC
- movs r0, 0x1
- lsls r0, r7
- mov r1, r8
- orrs r1, r0
- mov r8, r1
-_08026EEC:
- adds r7, 0x1
- cmp r7, 0x5
- ble _08026E94
- mov r2, r8
- cmp r2, 0
- beq _08026F4E
- movs r0, 0x1
- bl GetBattlerAtPosition
- ldr r4, _08026F3C @ =gActiveBattler
- strb r0, [r4]
- movs r0, 0
- str r0, [sp, 0x4]
- mov r0, r8
- lsls r2, r0, 24
- lsrs r2, 24
- add r1, sp, 0x4
- str r1, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _08026F28 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08026F4E
- .align 2, 0
-_08026F28: .4byte gUnknown_2023E82
-_08026F2C: .4byte gBattlersCount
-_08026F30: .4byte gBattleMons
-_08026F34: .4byte 0xf7ffffff
-_08026F38: .4byte gPlayerParty
-_08026F3C: .4byte gActiveBattler
-_08026F40: .4byte gEnemyParty
-_08026F44:
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _08026F56
-_08026F4E:
- ldr r1, _08026F64 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x3
- str r0, [r1]
-_08026F56:
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08026F64: .4byte gUnknown_2023D74
- thumb_func_end sub_8026AB0
-
- thumb_func_start atk77_setprotectlike
-atk77_setprotectlike: @ 8026F68
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0x1
- ldr r2, _08027034 @ =gUnknown_2023DB0
- ldr r1, _08027038 @ =sBattler_AI
- ldrb r3, [r1]
- lsls r0, r3, 1
- adds r0, r2
- ldrh r0, [r0]
- mov r8, r1
- ldr r7, _0802703C @ =gDisableStructs
- cmp r0, 0xB6
- beq _08026F98
- cmp r0, 0xC5
- beq _08026F98
- cmp r0, 0xCB
- beq _08026F98
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r7
- movs r1, 0
- strb r1, [r0, 0x8]
-_08026F98:
- ldr r0, _08027040 @ =gUnknown_2023BE2
- ldrb r1, [r0]
- ldr r0, _08027044 @ =gBattlersCount
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _08026FA8
- movs r6, 0
-_08026FA8:
- ldr r2, _08027048 @ =gUnknown_82507E0
- mov r5, r8
- ldrb r1, [r5]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r4, [r0, 0x8]
- lsls r4, 1
- adds r4, r2
- bl Random
- ldrh r1, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bcc _0802705C
- cmp r6, 0
- beq _0802705C
- ldr r4, _0802704C @ =gBattleMoves
- ldr r3, _08027050 @ =gCurrentMove
- ldrh r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- cmp r0, 0x6F
- bne _08026FF8
- ldr r0, _08027054 @ =gUnknown_2023E8C
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x1
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _08027058 @ =gUnknown_2023E82
- movs r0, 0
- strb r0, [r1, 0x5]
-_08026FF8:
- ldrh r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- cmp r0, 0x74
- bne _0802701E
- ldr r0, _08027054 @ =gUnknown_2023E8C
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _08027058 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_0802701E:
- mov r1, r8
- ldrb r0, [r1]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r7
- ldrb r0, [r1, 0x8]
- adds r0, 0x1
- strb r0, [r1, 0x8]
- b _0802707E
- .align 2, 0
-_08027034: .4byte gUnknown_2023DB0
-_08027038: .4byte sBattler_AI
-_0802703C: .4byte gDisableStructs
-_08027040: .4byte gUnknown_2023BE2
-_08027044: .4byte gBattlersCount
-_08027048: .4byte gUnknown_82507E0
-_0802704C: .4byte gBattleMoves
-_08027050: .4byte gCurrentMove
-_08027054: .4byte gUnknown_2023E8C
-_08027058: .4byte gUnknown_2023E82
-_0802705C:
- ldr r2, _08027090 @ =gDisableStructs
- ldr r0, _08027094 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x8]
- ldr r1, _08027098 @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- ldr r2, _0802709C @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
-_0802707E:
- ldr r1, _080270A0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08027090: .4byte gDisableStructs
-_08027094: .4byte sBattler_AI
-_08027098: .4byte gUnknown_2023E82
-_0802709C: .4byte gMoveResultFlags
-_080270A0: .4byte gUnknown_2023D74
- thumb_func_end atk77_setprotectlike
-
- thumb_func_start atk78_faintifabilitynotdamp
-atk78_faintifabilitynotdamp: @ 80270A4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _08027160 @ =gUnknown_2023BC8
- ldr r2, [r0]
- cmp r2, 0
- bne _080271A8
- ldr r1, _08027164 @ =gBattlerTarget
- strb r2, [r1]
- ldr r0, _08027168 @ =gBattlersCount
- ldrb r3, [r0]
- adds r5, r1, 0
- mov r8, r0
- ldr r6, _0802716C @ =gBattleMons
- cmp r2, r3
- bcs _080270F0
- adds r0, r6, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x6
- beq _080270F0
- adds r2, r3, 0
- adds r4, r6, 0
- movs r3, 0x58
-_080270D4:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r2
- bcs _080270F0
- ldrb r0, [r5]
- muls r0, r3
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _080270D4
-_080270F0:
- ldrb r0, [r5]
- mov r1, r8
- ldrb r1, [r1]
- cmp r0, r1
- bne _0802718C
- ldr r4, _08027170 @ =gActiveBattler
- ldr r7, _08027174 @ =sBattler_AI
- ldrb r0, [r7]
- strb r0, [r4]
- ldr r2, _08027178 @ =gBattleMoveDamage
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r0, r6
- ldrh r0, [r0, 0x28]
- str r0, [r2]
- ldr r1, _0802717C @ =0x00007fff
- movs r0, 0
- bl EmitHealthBarUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _08027180 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- movs r0, 0
- strb r0, [r5]
- mov r2, r8
- ldrb r0, [r2]
- cmp r0, 0
- beq _080271A8
- adds r3, r5, 0
- ldrb r5, [r7]
- ldr r7, _08027184 @ =gBitTable
- adds r4, r0, 0
- ldr r6, _08027188 @ =gAbsentBattlerFlags
-_0802713C:
- ldrb r2, [r3]
- cmp r2, r5
- beq _08027152
- ldrb r0, [r6]
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r7
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- beq _080271A8
-_08027152:
- adds r0, r2, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r4
- bcc _0802713C
- b _080271A8
- .align 2, 0
-_08027160: .4byte gUnknown_2023BC8
-_08027164: .4byte gBattlerTarget
-_08027168: .4byte gBattlersCount
-_0802716C: .4byte gBattleMons
-_08027170: .4byte gActiveBattler
-_08027174: .4byte sBattler_AI
-_08027178: .4byte gBattleMoveDamage
-_0802717C: .4byte 0x00007fff
-_08027180: .4byte gUnknown_2023D74
-_08027184: .4byte gBitTable
-_08027188: .4byte gAbsentBattlerFlags
-_0802718C:
- ldr r1, _080271B4 @ =gLastUsedAbility
- movs r0, 0x6
- strb r0, [r1]
- ldrb r0, [r5]
- movs r1, 0x58
- muls r1, r0
- adds r1, r6
- adds r1, 0x20
- ldrb r1, [r1]
- bl sub_80C71D0
- ldr r1, _080271B8 @ =gUnknown_2023D74
- ldr r0, _080271BC @ =gUnknown_81D93AF
- str r0, [r1]
-_080271A8:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080271B4: .4byte gLastUsedAbility
-_080271B8: .4byte gUnknown_2023D74
-_080271BC: .4byte gUnknown_81D93AF
- thumb_func_end atk78_faintifabilitynotdamp
-
- thumb_func_start atk79_setatkhptozero
-atk79_setatkhptozero: @ 80271C0
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0802720C @ =gUnknown_2023BC8
- ldr r3, [r0]
- cmp r3, 0
- bne _08027204
- ldr r4, _08027210 @ =gActiveBattler
- ldr r0, _08027214 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r1, _08027218 @ =gBattleMons
- ldrb r0, [r4]
- movs r2, 0x58
- muls r0, r2
- adds r0, r1
- strh r3, [r0, 0x28]
- ldrb r0, [r4]
- muls r0, r2
- adds r1, 0x28
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2A
- movs r2, 0
- movs r3, 0x2
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _0802721C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_08027204:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802720C: .4byte gUnknown_2023BC8
-_08027210: .4byte gActiveBattler
-_08027214: .4byte sBattler_AI
-_08027218: .4byte gBattleMons
-_0802721C: .4byte gUnknown_2023D74
- thumb_func_end atk79_setatkhptozero
-
- thumb_func_start atk7A_jumpifnexttargetvalid
-atk7A_jumpifnexttargetvalid: @ 8027220
- push {r4-r7,lr}
- ldr r3, _08027298 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r4, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r4, r0
- ldr r0, _0802729C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- adds r7, r3, 0
- cmp r0, 0
- beq _080272B8
- ldr r0, _080272A0 @ =gBattlerTarget
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- ldr r2, _080272A4 @ =sBattler_AI
- lsls r1, 24
- lsrs r1, 24
- adds r3, r0, 0
- ldr r6, _080272A8 @ =gAbsentBattlerFlags
- ldr r5, _080272AC @ =gBitTable
- ldr r0, _080272B0 @ =gBattlersCount
- mov r12, r0
- ldrb r0, [r2]
- cmp r1, r0
- bne _08027276
-_08027266:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r2]
- cmp r0, r1
- beq _08027266
-_08027276:
- ldrb r0, [r6]
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r5
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- bne _08027266
- ldrb r0, [r3]
- mov r2, r12
- ldrb r2, [r2]
- cmp r0, r2
- bcc _080272B4
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- b _080272BC
- .align 2, 0
-_08027298: .4byte gUnknown_2023D74
-_0802729C: .4byte gBattleTypeFlags
-_080272A0: .4byte gBattlerTarget
-_080272A4: .4byte sBattler_AI
-_080272A8: .4byte gAbsentBattlerFlags
-_080272AC: .4byte gBitTable
-_080272B0: .4byte gBattlersCount
-_080272B4:
- str r4, [r7]
- b _080272BC
-_080272B8:
- adds r0, r2, 0x5
- str r0, [r3]
-_080272BC:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk7A_jumpifnexttargetvalid
-
- thumb_func_start atk7B_tryhealhalfhealth
-atk7B_tryhealhalfhealth: @ 80272C4
- push {r4-r6,lr}
- ldr r4, _08027320 @ =gUnknown_2023D74
- ldr r1, [r4]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r2, r0
- ldrb r0, [r1, 0x5]
- ldr r3, _08027324 @ =gBattlerTarget
- cmp r0, 0x1
- bne _080272EC
- ldr r0, _08027328 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r3]
-_080272EC:
- ldr r1, _0802732C @ =gBattleMoveDamage
- ldr r6, _08027330 @ =gBattleMons
- ldrb r0, [r3]
- movs r5, 0x58
- muls r0, r5
- adds r0, r6
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _08027306
- movs r0, 0x1
- str r0, [r1]
-_08027306:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- ldrb r0, [r3]
- muls r0, r5
- adds r0, r6
- ldrh r1, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- cmp r1, r0
- bne _08027334
- str r2, [r4]
- b _0802733A
- .align 2, 0
-_08027320: .4byte gUnknown_2023D74
-_08027324: .4byte gBattlerTarget
-_08027328: .4byte sBattler_AI
-_0802732C: .4byte gBattleMoveDamage
-_08027330: .4byte gBattleMons
-_08027334:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_0802733A:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk7B_tryhealhalfhealth
-
- thumb_func_start atk7C_trymirrormove
-atk7C_trymirrormove: @ 8027340
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r2, _080273E0 @ =gBattlersCount
- ldr r0, _080273E4 @ =gBattleStruct
- mov r10, r0
- movs r1, 0
- add r0, sp, 0x4
-_08027356:
- strh r1, [r0]
- subs r0, 0x2
- cmp r0, sp
- bge _08027356
- movs r1, 0
- mov r8, r1
- movs r5, 0
- ldrb r1, [r2]
- cmp r5, r1
- bge _080273AC
- ldr r0, _080273E8 @ =sBattler_AI
- ldrb r6, [r0]
- ldr r2, _080273EC @ =0x0000ffff
- mov r9, r2
- lsls r4, r6, 3
- mov r2, sp
- ldr r0, _080273E4 @ =gBattleStruct
- mov r12, r0
- adds r7, r1, 0
-_0802737C:
- cmp r5, r6
- beq _080273A4
- mov r1, r12
- ldr r0, [r1]
- adds r0, r4, r0
- adds r1, r0, 0
- adds r1, 0xE0
- ldrb r3, [r1]
- adds r0, 0xE1
- ldrb r0, [r0]
- lsls r0, 8
- orrs r3, r0
- cmp r3, 0
- beq _080273A4
- cmp r3, r9
- beq _080273A4
- strh r3, [r2]
- adds r2, 0x2
- movs r0, 0x1
- add r8, r0
-_080273A4:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, r7
- blt _0802737C
-_080273AC:
- ldr r1, _080273E8 @ =sBattler_AI
- ldrb r0, [r1]
- mov r2, r10
- ldr r1, [r2]
- lsls r0, 1
- adds r0, r1
- adds r1, r0, 0
- adds r1, 0x98
- ldrb r3, [r1]
- adds r0, 0x99
- ldrb r0, [r0]
- lsls r0, 8
- orrs r3, r0
- cmp r3, 0
- beq _080273FC
- ldr r0, _080273EC @ =0x0000ffff
- cmp r3, r0
- beq _080273FC
- ldr r2, _080273F0 @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _080273F4 @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r4, _080273F8 @ =gCurrentMove
- strh r3, [r4]
- b _08027426
- .align 2, 0
-_080273E0: .4byte gBattlersCount
-_080273E4: .4byte gBattleStruct
-_080273E8: .4byte sBattler_AI
-_080273EC: .4byte 0x0000ffff
-_080273F0: .4byte gUnknown_2023DD0
-_080273F4: .4byte 0xfffffbff
-_080273F8: .4byte gCurrentMove
-_080273FC:
- mov r0, r8
- cmp r0, 0
- beq _0802746C
- ldr r2, _08027450 @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _08027454 @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- mov r1, r8
- bl __modsi3
- adds r5, r0, 0
- ldr r4, _08027458 @ =gCurrentMove
- lsls r0, r5, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r4]
-_08027426:
- ldrh r0, [r4]
- movs r1, 0
- bl GetMoveTarget
- ldr r1, _0802745C @ =gBattlerTarget
- strb r0, [r1]
- ldr r5, _08027460 @ =gUnknown_2023D74
- ldr r3, _08027464 @ =gUnknown_81D65A8
- ldr r2, _08027468 @ =gBattleMoves
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- str r0, [r5]
- b _0802748A
- .align 2, 0
-_08027450: .4byte gUnknown_2023DD0
-_08027454: .4byte 0xfffffbff
-_08027458: .4byte gCurrentMove
-_0802745C: .4byte gBattlerTarget
-_08027460: .4byte gUnknown_2023D74
-_08027464: .4byte gUnknown_81D65A8
-_08027468: .4byte gBattleMoves
-_0802746C:
- ldr r2, _0802749C @ =gUnknown_2023ECC
- ldr r0, _080274A0 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r1, _080274A4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0802748A:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802749C: .4byte gUnknown_2023ECC
-_080274A0: .4byte sBattler_AI
-_080274A4: .4byte gUnknown_2023D74
- thumb_func_end atk7C_trymirrormove
-
- thumb_func_start atk7D_setrain
-atk7D_setrain: @ 80274A8
- push {lr}
- ldr r2, _080274C8 @ =gBattleWeather
- ldrh r0, [r2]
- movs r1, 0x7
- ands r1, r0
- cmp r1, 0
- beq _080274D4
- ldr r2, _080274CC @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _080274D0 @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _080274E4
- .align 2, 0
-_080274C8: .4byte gBattleWeather
-_080274CC: .4byte gMoveResultFlags
-_080274D0: .4byte gUnknown_2023E82
-_080274D4:
- movs r0, 0x1
- strh r0, [r2]
- ldr r0, _080274F0 @ =gUnknown_2023E82
- strb r1, [r0, 0x5]
- ldr r0, _080274F4 @ =gUnknown_2023F20
- adds r0, 0x28
- movs r1, 0x5
- strb r1, [r0]
-_080274E4:
- ldr r1, _080274F8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080274F0: .4byte gUnknown_2023E82
-_080274F4: .4byte gUnknown_2023F20
-_080274F8: .4byte gUnknown_2023D74
- thumb_func_end atk7D_setrain
-
- thumb_func_start atk7E_setreflect
-atk7E_setreflect: @ 80274FC
- push {r4-r6,lr}
- ldr r6, _0802752C @ =sBattler_AI
- ldrb r0, [r6]
- bl GetBattlerPosition
- ldr r4, _08027530 @ =gSideAffecting
- movs r5, 0x1
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r1, [r1]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _0802753C
- ldr r2, _08027534 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08027538 @ =gUnknown_2023E82
- movs r0, 0
- b _080275B0
- .align 2, 0
-_0802752C: .4byte sBattler_AI
-_08027530: .4byte gSideAffecting
-_08027534: .4byte gMoveResultFlags
-_08027538: .4byte gUnknown_2023E82
-_0802753C:
- ldrb r0, [r6]
- bl GetBattlerPosition
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r0, [r1]
- movs r2, 0x1
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r6]
- bl GetBattlerPosition
- ldr r4, _080275A0 @ =gSideTimers
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x5
- strb r1, [r0]
- ldrb r0, [r6]
- bl GetBattlerPosition
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r6]
- strb r1, [r0, 0x1]
- ldr r0, _080275A4 @ =gBattleTypeFlags
- ldr r0, [r0]
- ands r0, r5
- cmp r0, 0
- beq _080275AC
- movs r0, 0x1
- bl CountAliveMonsInBattle
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x2
- bne _080275AC
- ldr r0, _080275A8 @ =gUnknown_2023E82
- strb r1, [r0, 0x5]
- b _080275B2
- .align 2, 0
-_080275A0: .4byte gSideTimers
-_080275A4: .4byte gBattleTypeFlags
-_080275A8: .4byte gUnknown_2023E82
-_080275AC:
- ldr r1, _080275C0 @ =gUnknown_2023E82
- movs r0, 0x1
-_080275B0:
- strb r0, [r1, 0x5]
-_080275B2:
- ldr r1, _080275C4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080275C0: .4byte gUnknown_2023E82
-_080275C4: .4byte gUnknown_2023D74
- thumb_func_end atk7E_setreflect
-
- thumb_func_start atk7F_setseeded
-atk7F_setseeded: @ 80275C8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r7, _08027608 @ =gMoveResultFlags
- ldrb r5, [r7]
- movs r0, 0x29
- ands r0, r5
- cmp r0, 0
- bne _080275FA
- ldr r0, _0802760C @ =gStatuses3
- mov r9, r0
- ldr r1, _08027610 @ =gBattlerTarget
- mov r8, r1
- ldrb r4, [r1]
- lsls r0, r4, 2
- mov r2, r9
- adds r6, r0, r2
- ldr r2, [r6]
- movs r0, 0x4
- mov r12, r0
- adds r3, r2, 0
- ands r3, r0
- cmp r3, 0
- beq _08027618
-_080275FA:
- movs r0, 0x1
- orrs r0, r5
- strb r0, [r7]
- ldr r1, _08027614 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08027668
- .align 2, 0
-_08027608: .4byte gMoveResultFlags
-_0802760C: .4byte gStatuses3
-_08027610: .4byte gBattlerTarget
-_08027614: .4byte gUnknown_2023E82
-_08027618:
- ldr r1, _08027644 @ =gBattleMons
- movs r0, 0x58
- muls r0, r4
- adds r1, r0, r1
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xC
- beq _08027634
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xC
- bne _0802764C
-_08027634:
- movs r0, 0x1
- orrs r0, r5
- strb r0, [r7]
- ldr r1, _08027648 @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _08027668
- .align 2, 0
-_08027644: .4byte gBattleMons
-_08027648: .4byte gUnknown_2023E82
-_0802764C:
- ldr r0, _0802767C @ =sBattler_AI
- ldrb r0, [r0]
- orrs r2, r0
- str r2, [r6]
- mov r2, r8
- ldrb r1, [r2]
- lsls r1, 2
- add r1, r9
- ldr r0, [r1]
- mov r2, r12
- orrs r0, r2
- str r0, [r1]
- ldr r0, _08027680 @ =gUnknown_2023E82
- strb r3, [r0, 0x5]
-_08027668:
- ldr r1, _08027684 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802767C: .4byte sBattler_AI
-_08027680: .4byte gUnknown_2023E82
-_08027684: .4byte gUnknown_2023D74
- thumb_func_end atk7F_setseeded
-
- thumb_func_start atk80_manipulatedamage
-atk80_manipulatedamage: @ 8027688
- push {r4,lr}
- ldr r1, _080276A0 @ =gUnknown_2023D74
- ldr r0, [r1]
- ldrb r2, [r0, 0x1]
- adds r4, r1, 0
- cmp r2, 0x1
- beq _080276B8
- cmp r2, 0x1
- bgt _080276A4
- cmp r2, 0
- beq _080276AA
- b _080276F8
- .align 2, 0
-_080276A0: .4byte gUnknown_2023D74
-_080276A4:
- cmp r2, 0x2
- beq _080276F0
- b _080276F8
-_080276AA:
- ldr r1, _080276B4 @ =gBattleMoveDamage
- ldr r0, [r1]
- negs r0, r0
- b _080276F6
- .align 2, 0
-_080276B4: .4byte gBattleMoveDamage
-_080276B8:
- ldr r3, _080276E4 @ =gBattleMoveDamage
- ldr r0, [r3]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- str r0, [r3]
- cmp r0, 0
- bne _080276CA
- str r2, [r3]
-_080276CA:
- ldr r2, _080276E8 @ =gBattleMons
- ldr r0, _080276EC @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2C]
- lsrs r1, r0, 1
- ldr r0, [r3]
- cmp r1, r0
- bge _080276F8
- str r1, [r3]
- b _080276F8
- .align 2, 0
-_080276E4: .4byte gBattleMoveDamage
-_080276E8: .4byte gBattleMons
-_080276EC: .4byte gBattlerTarget
-_080276F0:
- ldr r1, _08027704 @ =gBattleMoveDamage
- ldr r0, [r1]
- lsls r0, 1
-_080276F6:
- str r0, [r1]
-_080276F8:
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08027704: .4byte gBattleMoveDamage
- thumb_func_end atk80_manipulatedamage
-
- thumb_func_start atk81_trysetrest
-atk81_trysetrest: @ 8027708
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r0, _08027760 @ =gUnknown_2023D74
- mov r12, r0
- ldr r1, [r0]
- ldrb r6, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r6, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r6, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r6, r0
- ldr r5, _08027764 @ =gActiveBattler
- ldr r2, _08027768 @ =gBattlerTarget
- ldr r0, _0802776C @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r2]
- strb r0, [r5]
- ldr r4, _08027770 @ =gBattleMoveDamage
- ldr r1, _08027774 @ =gBattleMons
- ldrb r0, [r2]
- movs r3, 0x58
- muls r0, r3
- adds r0, r1
- ldrh r0, [r0, 0x2C]
- negs r0, r0
- str r0, [r4]
- ldrb r0, [r2]
- adds r4, r0, 0
- muls r4, r3
- adds r0, r4, r1
- ldrh r3, [r0, 0x28]
- adds r7, r5, 0
- adds r5, r2, 0
- adds r2, r1, 0
- ldrh r0, [r0, 0x2C]
- cmp r3, r0
- bne _08027778
- mov r0, r12
- str r6, [r0]
- b _080277C8
- .align 2, 0
-_08027760: .4byte gUnknown_2023D74
-_08027764: .4byte gActiveBattler
-_08027768: .4byte gBattlerTarget
-_0802776C: .4byte sBattler_AI
-_08027770: .4byte gBattleMoveDamage
-_08027774: .4byte gBattleMons
-_08027778:
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r4, r0
- ldr r1, [r0]
- movs r0, 0xF8
- ands r1, r0
- cmp r1, 0
- beq _08027794
- ldr r1, _08027790 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08027798
- .align 2, 0
-_08027790: .4byte gUnknown_2023E82
-_08027794:
- ldr r0, _080277D0 @ =gUnknown_2023E82
- strb r1, [r0, 0x5]
-_08027798:
- ldrb r0, [r5]
- movs r3, 0x58
- muls r0, r3
- adds r2, 0x4C
- adds r0, r2
- movs r1, 0x3
- str r1, [r0]
- ldrb r0, [r7]
- muls r0, r3
- adds r0, r2
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldr r1, _080277D4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_080277C8:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080277D0: .4byte gUnknown_2023E82
-_080277D4: .4byte gUnknown_2023D74
- thumb_func_end atk81_trysetrest
-
- thumb_func_start atk82_jumpifnotfirstturn
-atk82_jumpifnotfirstturn: @ 80277D8
- push {r4,r5,lr}
- ldr r5, _0802780C @ =gUnknown_2023D74
- ldr r4, [r5]
- ldrb r3, [r4, 0x1]
- ldrb r0, [r4, 0x2]
- lsls r0, 8
- orrs r3, r0
- ldrb r0, [r4, 0x3]
- lsls r0, 16
- orrs r3, r0
- ldrb r0, [r4, 0x4]
- lsls r0, 24
- orrs r3, r0
- ldr r2, _08027810 @ =gDisableStructs
- ldr r0, _08027814 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x16]
- cmp r0, 0
- beq _08027818
- adds r0, r4, 0x5
- str r0, [r5]
- b _0802781A
- .align 2, 0
-_0802780C: .4byte gUnknown_2023D74
-_08027810: .4byte gDisableStructs
-_08027814: .4byte sBattler_AI
-_08027818:
- str r3, [r5]
-_0802781A:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end atk82_jumpifnotfirstturn
-
- thumb_func_start atk83_nop
-atk83_nop: @ 8027820
- ldr r1, _0802782C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802782C: .4byte gUnknown_2023D74
- thumb_func_end atk83_nop
-
- thumb_func_start UproarWakeUpCheck
-UproarWakeUpCheck: @ 8027830
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r2, 0
- ldr r0, _08027888 @ =gBattlersCount
- ldrb r1, [r0]
- mov r8, r0
- cmp r2, r1
- bge _080278A4
- ldr r0, _0802788C @ =gBattleMons
- mov r12, r0
- movs r0, 0x58
- muls r0, r3
- add r0, r12
- adds r5, r0, 0
- adds r5, 0x20
- adds r4, r1, 0
- movs r3, 0
- ldr r6, _08027890 @ =gBattleScripting
- ldr r7, _08027894 @ =gUnknown_2023E82
-_0802785C:
- mov r0, r12
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x70
- ands r0, r1
- cmp r0, 0
- beq _0802789C
- ldrb r0, [r5]
- cmp r0, 0x2B
- beq _0802789C
- movs r3, 0
- strb r2, [r6, 0x17]
- ldr r1, _08027898 @ =gBattlerTarget
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _080278BC
- cmp r0, r2
- beq _080278B0
- movs r0, 0x1
- strb r0, [r7, 0x5]
- b _080278A4
- .align 2, 0
-_08027888: .4byte gBattlersCount
-_0802788C: .4byte gBattleMons
-_08027890: .4byte gBattleScripting
-_08027894: .4byte gUnknown_2023E82
-_08027898: .4byte gBattlerTarget
-_0802789C:
- adds r3, 0x58
- adds r2, 0x1
- cmp r2, r4
- blt _0802785C
-_080278A4:
- mov r1, r8
- ldrb r1, [r1]
- cmp r2, r1
- beq _080278C0
- movs r0, 0x1
- b _080278C2
-_080278B0:
- ldr r0, _080278B8 @ =gUnknown_2023E82
- strb r3, [r0, 0x5]
- b _080278A4
- .align 2, 0
-_080278B8: .4byte gUnknown_2023E82
-_080278BC:
- strb r2, [r1]
- b _080278A4
-_080278C0:
- movs r0, 0
-_080278C2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end UproarWakeUpCheck
-
- thumb_func_start atk84_jumpifcantmakeasleep
-atk84_jumpifcantmakeasleep: @ 80278CC
- push {r4-r6,lr}
- ldr r5, _080278F8 @ =gUnknown_2023D74
- ldr r1, [r5]
- ldrb r4, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r4, r0
- ldr r6, _080278FC @ =gBattlerTarget
- ldrb r0, [r6]
- bl UproarWakeUpCheck
- lsls r0, 24
- cmp r0, 0
- beq _08027900
- str r4, [r5]
- b _08027942
- .align 2, 0
-_080278F8: .4byte gUnknown_2023D74
-_080278FC: .4byte gBattlerTarget
-_08027900:
- ldr r1, _08027930 @ =gBattleMons
- ldrb r3, [r6]
- movs r0, 0x58
- muls r0, r3
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- adds r1, r0, 0
- cmp r1, 0xF
- beq _08027918
- cmp r1, 0x48
- bne _0802793C
-_08027918:
- ldr r2, _08027934 @ =gLastUsedAbility
- strb r0, [r2]
- ldr r1, _08027938 @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- str r4, [r5]
- ldrb r1, [r2]
- adds r0, r3, 0
- bl sub_80C71D0
- b _08027942
- .align 2, 0
-_08027930: .4byte gBattleMons
-_08027934: .4byte gLastUsedAbility
-_08027938: .4byte gUnknown_2023E82
-_0802793C:
- ldr r0, [r5]
- adds r0, 0x5
- str r0, [r5]
-_08027942:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk84_jumpifcantmakeasleep
-
- thumb_func_start atk85_stockpile
-atk85_stockpile: @ 8027948
- push {r4,r5,lr}
- ldr r5, _08027970 @ =gDisableStructs
- ldr r4, _08027974 @ =sBattler_AI
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1, 0x9]
- cmp r0, 0x3
- bne _08027980
- ldr r2, _08027978 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802797C @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _080279AA
- .align 2, 0
-_08027970: .4byte gDisableStructs
-_08027974: .4byte sBattler_AI
-_08027978: .4byte gMoveResultFlags
-_0802797C: .4byte gUnknown_2023E82
-_08027980:
- adds r0, 0x1
- movs r3, 0
- strb r0, [r1, 0x9]
- ldr r2, _080279B8 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r2]
- movs r0, 0x1
- strb r0, [r2, 0x1]
- strb r0, [r2, 0x2]
- strb r0, [r2, 0x3]
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r0, [r0, 0x9]
- strb r0, [r2, 0x4]
- movs r0, 0xFF
- strb r0, [r2, 0x5]
- ldr r0, _080279BC @ =gUnknown_2023E82
- strb r3, [r0, 0x5]
-_080279AA:
- ldr r1, _080279C0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080279B8: .4byte gBattleTextBuff1
-_080279BC: .4byte gUnknown_2023E82
-_080279C0: .4byte gUnknown_2023D74
- thumb_func_end atk85_stockpile
-
- thumb_func_start atk86_stockpiletobasedamage
-atk86_stockpiletobasedamage: @ 80279C4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- ldr r3, _080279FC @ =gUnknown_2023D74
- ldr r1, [r3]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r2, r0
- ldr r7, _08027A00 @ =gDisableStructs
- ldr r6, _08027A04 @ =sBattler_AI
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r0, [r0, 0x9]
- cmp r0, 0
- bne _08027A08
- str r2, [r3]
- b _08027AAA
- .align 2, 0
-_080279FC: .4byte gUnknown_2023D74
-_08027A00: .4byte gDisableStructs
-_08027A04: .4byte sBattler_AI
-_08027A08:
- ldr r0, _08027AB8 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x6]
- cmp r0, 0x1
- beq _08027A90
- ldr r0, _08027ABC @ =gBattleMoveDamage
- mov r8, r0
- ldr r4, _08027AC0 @ =gSideAffecting
- ldr r5, _08027AC4 @ =gBattlerTarget
- ldrb r0, [r5]
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldrb r0, [r6]
- movs r4, 0x58
- muls r0, r4
- ldr r2, _08027AC8 @ =gBattleMons
- adds r0, r2
- ldrb r1, [r5]
- muls r1, r4
- adds r1, r2
- ldr r2, _08027ACC @ =gCurrentMove
- ldrh r2, [r2]
- movs r4, 0
- str r4, [sp]
- str r4, [sp, 0x4]
- ldrb r4, [r6]
- str r4, [sp, 0x8]
- ldrb r4, [r5]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- ldrb r2, [r6]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r7
- ldrb r1, [r1, 0x9]
- adds r3, r0, 0
- muls r3, r1
- mov r1, r8
- str r3, [r1]
- ldr r2, _08027AD0 @ =gBattleScripting
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r0, [r0, 0x9]
- strb r0, [r2, 0x18]
- ldr r1, _08027AD4 @ =gUnknown_2023E8C
- ldrb r0, [r6]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- bge _08027A90
- lsls r0, r3, 4
- subs r0, r3
- movs r1, 0xA
- bl __divsi3
- mov r1, r8
- str r0, [r1]
-_08027A90:
- ldr r2, _08027AD8 @ =gDisableStructs
- ldr r0, _08027ADC @ =sBattler_AI
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x9]
- ldr r1, _08027AE0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08027AAA:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08027AB8: .4byte gUnknown_2023E82
-_08027ABC: .4byte gBattleMoveDamage
-_08027AC0: .4byte gSideAffecting
-_08027AC4: .4byte gBattlerTarget
-_08027AC8: .4byte gBattleMons
-_08027ACC: .4byte gCurrentMove
-_08027AD0: .4byte gBattleScripting
-_08027AD4: .4byte gUnknown_2023E8C
-_08027AD8: .4byte gDisableStructs
-_08027ADC: .4byte sBattler_AI
-_08027AE0: .4byte gUnknown_2023D74
- thumb_func_end atk86_stockpiletobasedamage
-
- thumb_func_start atk87_stockpiletohpheal
-atk87_stockpiletohpheal: @ 8027AE4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _08027B24 @ =gUnknown_2023D74
- ldr r1, [r7]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- orrs r2, r0
- ldr r0, _08027B28 @ =gDisableStructs
- mov r8, r0
- ldr r6, _08027B2C @ =sBattler_AI
- ldrb r3, [r6]
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- mov r1, r8
- adds r4, r0, r1
- ldrb r1, [r4, 0x9]
- cmp r1, 0
- bne _08027B34
- str r2, [r7]
- ldr r0, _08027B30 @ =gUnknown_2023E82
- strb r1, [r0, 0x5]
- b _08027BB0
- .align 2, 0
-_08027B24: .4byte gUnknown_2023D74
-_08027B28: .4byte gDisableStructs
-_08027B2C: .4byte sBattler_AI
-_08027B30: .4byte gUnknown_2023E82
-_08027B34:
- ldr r1, _08027B58 @ =gBattleMons
- movs r0, 0x58
- muls r0, r3
- adds r1, r0, r1
- ldrh r0, [r1, 0x2C]
- ldrh r3, [r1, 0x28]
- cmp r0, r3
- bne _08027B64
- movs r0, 0
- strb r0, [r4, 0x9]
- str r2, [r7]
- ldr r1, _08027B5C @ =gBattlerTarget
- ldrb r0, [r6]
- strb r0, [r1]
- ldr r1, _08027B60 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08027BB0
- .align 2, 0
-_08027B58: .4byte gBattleMons
-_08027B5C: .4byte gBattlerTarget
-_08027B60: .4byte gUnknown_2023E82
-_08027B64:
- ldr r5, _08027BBC @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- ldrb r1, [r4, 0x9]
- movs r2, 0x3
- subs r2, r1
- movs r4, 0x1
- adds r1, r4, 0
- lsls r1, r2
- bl __divsi3
- str r0, [r5]
- cmp r0, 0
- bne _08027B80
- str r4, [r5]
-_08027B80:
- ldr r0, [r5]
- negs r0, r0
- str r0, [r5]
- ldr r3, _08027BC0 @ =gBattleScripting
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x9]
- movs r2, 0
- strb r0, [r3, 0x18]
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r8
- strb r2, [r0, 0x9]
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- ldr r1, _08027BC4 @ =gBattlerTarget
- ldrb r0, [r6]
- strb r0, [r1]
-_08027BB0:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08027BBC: .4byte gBattleMoveDamage
-_08027BC0: .4byte gBattleScripting
-_08027BC4: .4byte gBattlerTarget
- thumb_func_end atk87_stockpiletohpheal
-
- thumb_func_start atk88_negativedamage
-atk88_negativedamage: @ 8027BC8
- push {lr}
- ldr r2, _08027BF0 @ =gBattleMoveDamage
- ldr r0, _08027BF4 @ =gUnknown_2023D54
- ldr r0, [r0]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- negs r0, r0
- str r0, [r2]
- cmp r0, 0
- bne _08027BE4
- movs r0, 0x1
- negs r0, r0
- str r0, [r2]
-_08027BE4:
- ldr r1, _08027BF8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08027BF0: .4byte gBattleMoveDamage
-_08027BF4: .4byte gUnknown_2023D54
-_08027BF8: .4byte gUnknown_2023D74
- thumb_func_end atk88_negativedamage
-
- thumb_func_start ChangeStatBuffs
-ChangeStatBuffs: @ 8027BFC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r8, r3
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r5, r2, 24
- movs r0, 0
- mov r9, r0
- mov r10, r0
- movs r0, 0x40
- ands r0, r5
- cmp r0, 0
- beq _08027C30
- ldr r0, _08027C28 @ =gActiveBattler
- ldr r1, _08027C2C @ =sBattler_AI
- b _08027C34
- .align 2, 0
-_08027C28: .4byte gActiveBattler
-_08027C2C: .4byte sBattler_AI
-_08027C30:
- ldr r0, _08027CD4 @ =gActiveBattler
- ldr r1, _08027CD8 @ =gBattlerTarget
-_08027C34:
- ldrb r1, [r1]
- strb r1, [r0]
- movs r0, 0xBF
- ands r5, r0
- movs r0, 0x80
- ands r0, r5
- cmp r0, 0
- beq _08027C4E
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08027C4E:
- movs r0, 0x7F
- ands r5, r0
- movs r0, 0x20
- ands r0, r5
- cmp r0, 0
- beq _08027C64
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
-_08027C64:
- movs r0, 0xDF
- ands r5, r0
- ldr r1, _08027CDC @ =gBattleTextBuff1
- movs r4, 0
- movs r2, 0xFD
- strb r2, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- strb r7, [r1, 0x2]
- movs r3, 0x1
- negs r3, r3
- mov r12, r3
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- lsls r0, r6, 24
- cmp r0, 0
- blt _08027C88
- b _08027F6C
-_08027C88:
- ldr r4, _08027CE0 @ =gSideTimers
- ldr r1, _08027CD4 @ =gActiveBattler
- ldrb r0, [r1]
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _08027D28
- mov r2, r9
- cmp r2, 0
- bne _08027D28
- ldr r0, _08027CE4 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xAE
- beq _08027D58
- cmp r5, 0x1
- bne _08027D48
- ldr r4, _08027CE8 @ =gUnknown_2023ECC
- ldr r3, _08027CD4 @ =gActiveBattler
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r0, [r1]
- lsls r0, 31
- cmp r0, 0
- beq _08027CF0
- ldr r0, _08027CEC @ =gUnknown_2023D74
- mov r4, r8
- str r4, [r0]
- b _08027D48
- .align 2, 0
-_08027CD4: .4byte gActiveBattler
-_08027CD8: .4byte gBattlerTarget
-_08027CDC: .4byte gBattleTextBuff1
-_08027CE0: .4byte gSideTimers
-_08027CE4: .4byte gCurrentMove
-_08027CE8: .4byte gUnknown_2023ECC
-_08027CEC: .4byte gUnknown_2023D74
-_08027CF0:
- mov r0, r8
- bl BattleScriptPush
- ldr r1, _08027D18 @ =gBattleScripting
- ldr r6, _08027D1C @ =gActiveBattler
- ldrb r0, [r6]
- strb r0, [r1, 0x17]
- ldr r1, _08027D20 @ =gUnknown_2023D74
- ldr r0, _08027D24 @ =gUnknown_81D8C3E
- str r0, [r1]
- ldrb r1, [r6]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _08027D48
- .align 2, 0
-_08027D18: .4byte gBattleScripting
-_08027D1C: .4byte gActiveBattler
-_08027D20: .4byte gUnknown_2023D74
-_08027D24: .4byte gUnknown_81D8C3E
-_08027D28:
- ldr r0, _08027D4C @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xAE
- beq _08027D58
- mov r0, r10
- cmp r0, 0x1
- beq _08027D58
- movs r0, 0
- bl JumpIfMoveAffectedByProtect
- lsls r0, 24
- cmp r0, 0
- beq _08027D58
- ldr r1, _08027D50 @ =gUnknown_2023D74
- ldr r0, _08027D54 @ =gUnknown_81D7DF2
- str r0, [r1]
-_08027D48:
- movs r0, 0x1
- b _08028060
- .align 2, 0
-_08027D4C: .4byte gCurrentMove
-_08027D50: .4byte gUnknown_2023D74
-_08027D54: .4byte gUnknown_81D7DF2
-_08027D58:
- ldr r2, _08027DA0 @ =gBattleMons
- ldr r1, _08027DA4 @ =gActiveBattler
- ldrb r3, [r1]
- movs r4, 0x58
- adds r0, r3, 0
- muls r0, r4
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- mov r10, r2
- cmp r0, 0x1D
- beq _08027D74
- cmp r0, 0x49
- bne _08027E0C
-_08027D74:
- mov r0, r9
- cmp r0, 0
- bne _08027E0C
- ldr r0, _08027DA8 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xAE
- beq _08027E0C
- cmp r5, 0x1
- bne _08027D48
- ldr r4, _08027DAC @ =gUnknown_2023ECC
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _08027DB4
- ldr r0, _08027DB0 @ =gUnknown_2023D74
- mov r1, r8
- str r1, [r0]
- b _08027D48
- .align 2, 0
-_08027DA0: .4byte gBattleMons
-_08027DA4: .4byte gActiveBattler
-_08027DA8: .4byte gCurrentMove
-_08027DAC: .4byte gUnknown_2023ECC
-_08027DB0: .4byte gUnknown_2023D74
-_08027DB4:
- mov r0, r8
- bl BattleScriptPush
- ldr r1, _08027DF8 @ =gBattleScripting
- ldr r2, _08027DFC @ =gActiveBattler
- ldrb r0, [r2]
- strb r0, [r1, 0x17]
- ldr r1, _08027E00 @ =gUnknown_2023D74
- ldr r0, _08027E04 @ =gUnknown_81D9416
- str r0, [r1]
- ldr r1, _08027E08 @ =gLastUsedAbility
- ldrb r0, [r2]
- movs r3, 0x58
- muls r0, r3
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- ldrb r1, [r1]
- bl sub_80C71D0
- ldr r6, _08027DFC @ =gActiveBattler
- ldrb r1, [r6]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _08027D48
- .align 2, 0
-_08027DF8: .4byte gBattleScripting
-_08027DFC: .4byte gActiveBattler
-_08027E00: .4byte gUnknown_2023D74
-_08027E04: .4byte gUnknown_81D9416
-_08027E08: .4byte gLastUsedAbility
-_08027E0C:
- ldr r1, _08027E58 @ =gActiveBattler
- ldrb r0, [r1]
- movs r4, 0x58
- muls r0, r4
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x33
- bne _08027E6C
- mov r2, r9
- cmp r2, 0
- bne _08027E6C
- cmp r7, 0x6
- bne _08027E6C
- cmp r5, 0x1
- bne _08027D48
- mov r0, r8
- bl BattleScriptPush
- ldr r1, _08027E5C @ =gBattleScripting
- ldr r3, _08027E58 @ =gActiveBattler
- ldrb r0, [r3]
- strb r0, [r1, 0x17]
- ldr r1, _08027E60 @ =gUnknown_2023D74
- ldr r0, _08027E64 @ =gUnknown_81D947E
- str r0, [r1]
- ldr r1, _08027E68 @ =gLastUsedAbility
- ldrb r0, [r3]
- muls r0, r4
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r3]
- ldrb r1, [r1]
- bl sub_80C71D0
- b _08027D48
- .align 2, 0
-_08027E58: .4byte gActiveBattler
-_08027E5C: .4byte gBattleScripting
-_08027E60: .4byte gUnknown_2023D74
-_08027E64: .4byte gUnknown_81D947E
-_08027E68: .4byte gLastUsedAbility
-_08027E6C:
- ldr r4, _08027EBC @ =gActiveBattler
- ldrb r0, [r4]
- movs r4, 0x58
- muls r0, r4
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x34
- bne _08027ED0
- mov r0, r9
- cmp r0, 0
- bne _08027ED0
- cmp r7, 0x1
- bne _08027ED0
- cmp r5, 0x1
- beq _08027E8E
- b _08027D48
-_08027E8E:
- mov r0, r8
- bl BattleScriptPush
- ldr r1, _08027EC0 @ =gBattleScripting
- ldr r2, _08027EBC @ =gActiveBattler
- ldrb r0, [r2]
- strb r0, [r1, 0x17]
- ldr r1, _08027EC4 @ =gUnknown_2023D74
- ldr r0, _08027EC8 @ =gUnknown_81D947E
- str r0, [r1]
- ldr r1, _08027ECC @ =gLastUsedAbility
- ldrb r0, [r2]
- muls r0, r4
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- ldrb r1, [r1]
- bl sub_80C71D0
- b _08027D48
- .align 2, 0
-_08027EBC: .4byte gActiveBattler
-_08027EC0: .4byte gBattleScripting
-_08027EC4: .4byte gUnknown_2023D74
-_08027EC8: .4byte gUnknown_81D947E
-_08027ECC: .4byte gLastUsedAbility
-_08027ED0:
- ldr r3, _08027F5C @ =gActiveBattler
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- add r0, r10
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x13
- bne _08027EE8
- cmp r5, 0
- bne _08027EE8
- b _08027D48
-_08027EE8:
- lsls r0, r6, 24
- asrs r0, 28
- movs r1, 0x7
- ands r0, r1
- negs r0, r0
- lsls r0, 24
- ldr r3, _08027F60 @ =gBattleTextBuff2
- movs r4, 0
- movs r1, 0xFD
- strb r1, [r3]
- movs r2, 0x1
- lsrs r6, r0, 24
- asrs r0, 24
- subs r1, 0xFF
- cmp r0, r1
- bne _08027F12
- strb r4, [r3, 0x1]
- movs r0, 0xD3
- strb r0, [r3, 0x2]
- strb r4, [r3, 0x3]
- movs r2, 0x4
-_08027F12:
- adds r0, r2, r3
- strb r4, [r0]
- adds r2, 0x1
- adds r1, r2, r3
- movs r0, 0xD4
- strb r0, [r1]
- adds r2, 0x1
- adds r0, r2, r3
- strb r4, [r0]
- adds r2, 0x1
- adds r1, r2, r3
- movs r0, 0xFF
- strb r0, [r1]
- ldr r4, _08027F5C @ =gActiveBattler
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r0, r7, r0
- mov r1, r10
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08027FC2
- movs r1, 0
- ldr r0, _08027F64 @ =gBattlerTarget
- ldrb r0, [r0]
- ldr r3, _08027F68 @ =gUnknown_2023E82
- mov r8, r3
- cmp r0, r2
- bne _08027F56
- movs r1, 0x1
-_08027F56:
- mov r4, r8
- strb r1, [r4, 0x5]
- b _08027FF0
- .align 2, 0
-_08027F5C: .4byte gActiveBattler
-_08027F60: .4byte gBattleTextBuff2
-_08027F64: .4byte gBattlerTarget
-_08027F68: .4byte gUnknown_2023E82
-_08027F6C:
- asrs r6, r0, 28
- movs r0, 0x7
- ands r6, r0
- ldr r3, _08027FCC @ =gBattleTextBuff2
- strb r2, [r3]
- movs r2, 0x1
- cmp r6, 0x2
- bne _08027F86
- strb r4, [r3, 0x1]
- movs r0, 0xD1
- strb r0, [r3, 0x2]
- strb r4, [r3, 0x3]
- movs r2, 0x4
-_08027F86:
- adds r0, r2, r3
- strb r4, [r0]
- adds r2, 0x1
- adds r1, r2, r3
- movs r0, 0xD2
- strb r0, [r1]
- adds r2, 0x1
- adds r0, r2, r3
- strb r4, [r0]
- adds r2, 0x1
- adds r1, r2, r3
- ldrb r0, [r1]
- mov r2, r12
- orrs r0, r2
- strb r0, [r1]
- ldr r2, _08027FD0 @ =gBattleMons
- ldr r4, _08027FD4 @ =gActiveBattler
- ldrb r3, [r4]
- movs r0, 0x58
- muls r0, r3
- adds r0, r7, r0
- adds r1, r2, 0
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- mov r10, r2
- cmp r0, 0xC
- bne _08027FDC
-_08027FC2:
- ldr r1, _08027FD8 @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- mov r8, r1
- b _08027FF0
- .align 2, 0
-_08027FCC: .4byte gBattleTextBuff2
-_08027FD0: .4byte gBattleMons
-_08027FD4: .4byte gActiveBattler
-_08027FD8: .4byte gUnknown_2023E82
-_08027FDC:
- movs r1, 0
- ldr r0, _08028070 @ =gBattlerTarget
- ldrb r0, [r0]
- ldr r2, _08028074 @ =gUnknown_2023E82
- mov r8, r2
- cmp r0, r3
- bne _08027FEC
- movs r1, 0x1
-_08027FEC:
- mov r3, r8
- strb r1, [r3, 0x5]
-_08027FF0:
- ldr r2, _08028078 @ =gActiveBattler
- ldrb r0, [r2]
- movs r4, 0x58
- adds r1, r0, 0
- muls r1, r4
- adds r1, r7, r1
- mov r3, r10
- adds r3, 0x18
- adds r1, r3
- lsls r0, r6, 24
- asrs r0, 24
- ldrb r6, [r1]
- adds r0, r6
- strb r0, [r1]
- ldrb r0, [r2]
- muls r0, r4
- adds r0, r7, r0
- adds r1, r0, r3
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0
- bge _08028020
- movs r0, 0
- strb r0, [r1]
-_08028020:
- ldr r1, _08028078 @ =gActiveBattler
- ldrb r0, [r1]
- muls r0, r4
- adds r0, r7, r0
- adds r1, r0, r3
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _08028036
- movs r0, 0xC
- strb r0, [r1]
-_08028036:
- mov r2, r8
- ldrb r0, [r2, 0x5]
- cmp r0, 0x2
- bne _0802805E
- movs r3, 0x1
- ands r3, r5
- cmp r3, 0
- beq _08028050
- ldr r0, _0802807C @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
-_08028050:
- mov r4, r8
- ldrb r0, [r4, 0x5]
- cmp r0, 0x2
- bne _0802805E
- cmp r3, 0
- bne _0802805E
- b _08027D48
-_0802805E:
- movs r0, 0
-_08028060:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08028070: .4byte gBattlerTarget
-_08028074: .4byte gUnknown_2023E82
-_08028078: .4byte gActiveBattler
-_0802807C: .4byte gMoveResultFlags
- thumb_func_end ChangeStatBuffs
-
- thumb_func_start atk89_statbuffchange
-atk89_statbuffchange: @ 8028080
- push {r4,r5,lr}
- ldr r5, _080280C4 @ =gUnknown_2023D74
- ldr r2, [r5]
- ldrb r3, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r3, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r3, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r3, r0
- ldr r0, _080280C8 @ =gBattleScripting
- ldrb r4, [r0, 0x1A]
- movs r0, 0xF0
- ands r0, r4
- lsls r0, 24
- asrs r0, 24
- movs r1, 0xF
- ands r1, r4
- ldrb r2, [r2, 0x1]
- bl ChangeStatBuffs
- lsls r0, 24
- cmp r0, 0
- bne _080280BC
- ldr r0, [r5]
- adds r0, 0x6
- str r0, [r5]
-_080280BC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080280C4: .4byte gUnknown_2023D74
-_080280C8: .4byte gBattleScripting
- thumb_func_end atk89_statbuffchange
-
- thumb_func_start atk8A_normalisebuffs
-atk8A_normalisebuffs: @ 80280CC
- push {r4-r7,lr}
- movs r2, 0
- ldr r0, _08028114 @ =gBattlersCount
- ldrb r1, [r0]
- ldr r0, _08028118 @ =gUnknown_2023D74
- mov r12, r0
- cmp r2, r1
- bge _08028104
- ldr r0, _0802811C @ =gBattleMons
- movs r4, 0x6
- adds r5, r1, 0
- movs r7, 0x58
- adds r6, r0, 0
- adds r6, 0x18
-_080280E8:
- adds r3, r2, 0x1
- movs r1, 0x7
- adds r0, r2, 0
- muls r0, r7
- adds r0, r6
- adds r0, 0x7
-_080280F4:
- strb r4, [r0]
- subs r0, 0x1
- subs r1, 0x1
- cmp r1, 0
- bge _080280F4
- adds r2, r3, 0
- cmp r2, r5
- blt _080280E8
-_08028104:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028114: .4byte gBattlersCount
-_08028118: .4byte gUnknown_2023D74
-_0802811C: .4byte gBattleMons
- thumb_func_end atk8A_normalisebuffs
-
- thumb_func_start atk8B_setbide
-atk8B_setbide: @ 8028120
- push {r4,r5,lr}
- ldr r4, _08028178 @ =gBattleMons
- ldr r3, _0802817C @ =sBattler_AI
- ldrb r0, [r3]
- movs r5, 0x58
- adds r2, r0, 0
- muls r2, r5
- adds r4, 0x50
- adds r2, r4
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 5
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08028180 @ =gUnknown_2023DB8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldr r1, _08028184 @ =gCurrentMove
- ldrh r1, [r1]
- movs r2, 0
- strh r1, [r0]
- ldr r1, _08028188 @ =gUnknown_2023D58
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- str r2, [r0]
- ldrb r0, [r3]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r4
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 2
- orrs r0, r2
- str r0, [r1]
- ldr r1, _0802818C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08028178: .4byte gBattleMons
-_0802817C: .4byte sBattler_AI
-_08028180: .4byte gUnknown_2023DB8
-_08028184: .4byte gCurrentMove
-_08028188: .4byte gUnknown_2023D58
-_0802818C: .4byte gUnknown_2023D74
- thumb_func_end atk8B_setbide
-
- thumb_func_start atk8C_confuseifrepeatingattackends
-atk8C_confuseifrepeatingattackends: @ 8028190
- push {lr}
- ldr r1, _080281C0 @ =gBattleMons
- ldr r0, _080281C4 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0xC0
- lsls r1, 4
- ands r0, r1
- cmp r0, 0
- bne _080281B2
- ldr r1, _080281C8 @ =gUnknown_2023E82
- movs r0, 0x75
- strb r0, [r1, 0x3]
-_080281B2:
- ldr r1, _080281CC @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080281C0: .4byte gBattleMons
-_080281C4: .4byte sBattler_AI
-_080281C8: .4byte gUnknown_2023E82
-_080281CC: .4byte gUnknown_2023D74
- thumb_func_end atk8C_confuseifrepeatingattackends
-
- thumb_func_start atk8D_setmultihitcounter
-atk8D_setmultihitcounter: @ 80281D0
- push {r4,r5,lr}
- ldr r0, _080281E4 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r1, [r0, 0x1]
- cmp r1, 0
- beq _080281EC
- ldr r0, _080281E8 @ =gUnknown_2023D72
- strb r1, [r0]
- b _08028206
- .align 2, 0
-_080281E4: .4byte gUnknown_2023D74
-_080281E8: .4byte gUnknown_2023D72
-_080281EC:
- ldr r4, _08028214 @ =gUnknown_2023D72
- bl Random
- movs r5, 0x3
- ands r0, r5
- strb r0, [r4]
- cmp r0, 0x1
- bls _08028202
- bl Random
- ands r0, r5
-_08028202:
- adds r0, 0x2
- strb r0, [r4]
-_08028206:
- ldr r1, _08028218 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08028214: .4byte gUnknown_2023D72
-_08028218: .4byte gUnknown_2023D74
- thumb_func_end atk8D_setmultihitcounter
-
- thumb_func_start atk8E_initmultihitstring
-atk8E_initmultihitstring: @ 802821C
- ldr r1, _0802823C @ =gBattleScripting
- movs r2, 0
- movs r0, 0xFD
- strb r0, [r1, 0x8]
- movs r0, 0x1
- strb r0, [r1, 0x9]
- strb r0, [r1, 0xA]
- strb r0, [r1, 0xB]
- strb r2, [r1, 0xC]
- movs r0, 0xFF
- strb r0, [r1, 0xD]
- ldr r1, _08028240 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802823C: .4byte gBattleScripting
-_08028240: .4byte gUnknown_2023D74
- thumb_func_end atk8E_initmultihitstring
-
- thumb_func_start TryDoForceSwitchOut
-TryDoForceSwitchOut: @ 8028244
- push {r4-r7,lr}
- ldr r6, _08028278 @ =gBattleMons
- ldr r7, _0802827C @ =sBattler_AI
- ldrb r0, [r7]
- movs r5, 0x58
- adds r1, r0, 0
- muls r1, r5
- adds r1, r6
- adds r1, 0x2A
- ldr r4, _08028280 @ =gBattlerTarget
- ldrb r3, [r4]
- adds r0, r3, 0
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bcc _0802828C
- ldr r0, _08028284 @ =gBattleStruct
- ldr r1, [r0]
- adds r1, r3, r1
- adds r1, 0x58
- ldr r2, _08028288 @ =gBattlerPartyIndexes
- lsls r0, r3, 1
- b _080282E8
- .align 2, 0
-_08028278: .4byte gBattleMons
-_0802827C: .4byte sBattler_AI
-_08028280: .4byte gBattlerTarget
-_08028284: .4byte gBattleStruct
-_08028288: .4byte gBattlerPartyIndexes
-_0802828C:
- bl Random
- movs r3, 0xFF
- ands r3, r0
- ldrb r0, [r7]
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r2, [r0]
- ldrb r4, [r4]
- adds r0, r4, 0
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r1, [r0]
- adds r2, r1
- adds r0, r3, 0
- muls r0, r2
- asrs r0, 8
- adds r0, 0x1
- lsrs r1, 2
- cmp r0, r1
- bhi _080282DC
- ldr r3, _080282D8 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- movs r0, 0
- b _080282F6
- .align 2, 0
-_080282D8: .4byte gUnknown_2023D74
-_080282DC:
- ldr r0, _080282FC @ =gBattleStruct
- ldr r1, [r0]
- adds r1, r4, r1
- adds r1, 0x58
- ldr r2, _08028300 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
-_080282E8:
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1]
- ldr r1, _08028304 @ =gUnknown_2023D74
- ldr r0, _08028308 @ =gUnknown_81D8C10
- str r0, [r1]
- movs r0, 0x1
-_080282F6:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080282FC: .4byte gBattleStruct
-_08028300: .4byte gBattlerPartyIndexes
-_08028304: .4byte gUnknown_2023D74
-_08028308: .4byte gUnknown_81D8C10
- thumb_func_end TryDoForceSwitchOut
-
- thumb_func_start sub_802830C
-sub_802830C: @ 802830C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, _080283A4 @ =gBattleTypeFlags
- ldr r0, [r4]
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08028320
- b _080285F4
-_08028320:
- ldr r5, _080283A8 @ =gBattlerTarget
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _080283AC @ =gEnemyParty
- mov r8, r1
- cmp r0, 0
- bne _08028336
- ldr r0, _080283B0 @ =gPlayerParty
- mov r8, r0
-_08028336:
- ldr r0, [r4]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080283B4
- movs r7, 0
- movs r6, 0
- ldrb r0, [r5]
- bl GetBankMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- bl GetLinkTrainerFlankId
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _0802835C
- movs r6, 0x3
-_0802835C:
- adds r5, r6, 0
- adds r0, r5, 0x3
- cmp r5, r0
- bge _080283F4
-_08028364:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08028396
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08028396
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08028396
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_08028396:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r6, 0x3
- cmp r5, r0
- blt _08028364
- b _080283F4
- .align 2, 0
-_080283A4: .4byte gBattleTypeFlags
-_080283A8: .4byte gBattlerTarget
-_080283AC: .4byte gEnemyParty
-_080283B0: .4byte gPlayerParty
-_080283B4:
- movs r7, 0
- movs r5, 0
-_080283B8:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _080283EA
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _080283EA
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080283EA
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_080283EA:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _080283B8
-_080283F4:
- cmp r7, 0x1
- bhi _08028404
- ldr r0, _08028438 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x41
- ands r0, r1
- cmp r0, 0x1
- bne _0802841C
-_08028404:
- cmp r7, 0x2
- bhi _08028440
- ldr r0, _08028438 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08028440
- movs r0, 0x40
- ands r1, r0
- cmp r1, 0
- bne _08028440
-_0802841C:
- ldr r3, _0802843C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _080285F8
- .align 2, 0
-_08028438: .4byte gBattleTypeFlags
-_0802843C: .4byte gUnknown_2023D74
-_08028440:
- bl TryDoForceSwitchOut
- lsls r0, 24
- cmp r0, 0
- bne _0802844C
- b _080285F8
-_0802844C:
- ldr r0, _0802848C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080284F0
-_08028458:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08028490 @ =gBattlerTarget
- ldrb r0, [r0]
- bl GetBankMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- bl GetLinkTrainerFlankId
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _08028494
- adds r0, r6, 0x3
- lsls r0, 24
- lsrs r5, r0, 24
- b _08028496
- .align 2, 0
-_0802848C: .4byte gBattleTypeFlags
-_08028490: .4byte gBattlerTarget
-_08028494:
- adds r5, r6, 0
-_08028496:
- ldr r4, _080284E8 @ =gBattlerPartyIndexes
- ldr r0, _080284EC @ =gBattlerTarget
- ldrb r2, [r0]
- lsls r1, r2, 1
- adds r1, r4
- lsls r0, r5, 16
- lsrs r3, r0, 16
- ldrh r1, [r1]
- cmp r3, r1
- beq _08028458
- movs r0, 0x2
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r4
- ldrh r0, [r0]
- cmp r3, r0
- beq _08028458
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08028458
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _08028458
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08028458
- b _080285AE
- .align 2, 0
-_080284E8: .4byte gBattlerPartyIndexes
-_080284EC: .4byte gBattlerTarget
-_080284F0:
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08028560
- ldr r6, _08028558 @ =gBattlerPartyIndexes
-_080284FA:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0802855C @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r6
- adds r2, r5, 0
- ldrh r0, [r0]
- cmp r2, r0
- beq _080284FA
- movs r0, 0x2
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r6
- ldrh r0, [r0]
- cmp r2, r0
- beq _080284FA
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _080284FA
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _080284FA
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080284FA
- b _080285AE
- .align 2, 0
-_08028558: .4byte gBattlerPartyIndexes
-_0802855C: .4byte gBattlerTarget
-_08028560:
- ldr r6, _080285E8 @ =gBattlerPartyIndexes
-_08028562:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080285EC @ =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- cmp r5, r0
- beq _08028562
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08028562
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _08028562
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08028562
-_080285AE:
- ldr r4, _080285EC @ =gBattlerTarget
- ldrb r0, [r4]
- ldr r1, _080285F0 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x5C
- strb r5, [r0]
- bl sub_811FA20
- lsls r0, 24
- cmp r0, 0
- bne _080285CC
- ldrb r0, [r4]
- bl sub_8013F6C
-_080285CC:
- ldrb r0, [r4]
- adds r1, r5, 0
- movs r2, 0
- bl sub_8127EC4
- ldrb r1, [r4]
- movs r0, 0x2
- eors r0, r1
- adds r1, r5, 0
- movs r2, 0x1
- bl sub_8127EC4
- b _080285F8
- .align 2, 0
-_080285E8: .4byte gBattlerPartyIndexes
-_080285EC: .4byte gBattlerTarget
-_080285F0: .4byte gBattleStruct
-_080285F4:
- bl TryDoForceSwitchOut
-_080285F8:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_802830C
-
- thumb_func_start atk90_tryconversiontypechange
-atk90_tryconversiontypechange: @ 8028604
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- ldr r2, _08028698 @ =gBattleMons
- ldr r3, _0802869C @ =sBattler_AI
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r1, r2, 0
- adds r1, 0xC
- adds r0, r1
- ldrh r0, [r0]
- mov r8, r2
- cmp r0, 0
- beq _08028646
- movs r5, 0x58
- adds r2, r1, 0
-_0802862C:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bhi _08028646
- lsls r1, r6, 1
- ldrb r0, [r3]
- muls r0, r5
- adds r1, r0
- adds r1, r2
- ldrh r0, [r1]
- cmp r0, 0
- bne _0802862C
-_08028646:
- movs r3, 0
- cmp r3, r6
- bcs _080286C8
- ldr r0, _080286A0 @ =gBattleMoves
- mov r10, r0
- ldr r5, _08028698 @ =gBattleMons
- mov r12, r5
- ldr r7, _0802869C @ =sBattler_AI
- ldrb r0, [r7]
- movs r4, 0x58
- adds r5, r0, 0
- muls r5, r4
- movs r0, 0xC
- add r0, r12
- mov r9, r0
-_08028664:
- lsls r0, r3, 1
- adds r0, r5
- add r0, r9
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r10
- ldrb r2, [r0, 0x2]
- cmp r2, 0x9
- bne _080286A6
- mov r0, r8
- adds r1, r5, r0
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _08028692
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _080286A4
-_08028692:
- movs r2, 0x7
- b _080286A6
- .align 2, 0
-_08028698: .4byte gBattleMons
-_0802869C: .4byte sBattler_AI
-_080286A0: .4byte gBattleMoves
-_080286A4:
- movs r2, 0
-_080286A6:
- ldrb r0, [r7]
- muls r0, r4
- add r0, r12
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r1, [r1]
- cmp r2, r1
- beq _080286BE
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r2, r0
- bne _080286C8
-_080286BE:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r6
- bcc _08028664
-_080286C8:
- cmp r3, r6
- bne _080286EC
- ldr r3, _080286E8 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08028790
- .align 2, 0
-_080286E8: .4byte gUnknown_2023D74
-_080286EC:
- movs r7, 0x3
- ldr r5, _08028744 @ =gBattleMoves
- mov r9, r5
-_080286F2:
- bl Random
- adds r3, r0, 0
- ands r3, r7
- cmp r3, r6
- bcs _080286F2
- ldr r4, _08028748 @ =gBattleMons
- lsls r1, r3, 1
- ldr r3, _0802874C @ =sBattler_AI
- ldrb r2, [r3]
- movs r0, 0x58
- adds r5, r2, 0
- muls r5, r0
- adds r1, r5
- adds r0, r4, 0
- adds r0, 0xC
- adds r1, r0
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrb r2, [r0, 0x2]
- mov r8, r4
- adds r4, r3, 0
- cmp r2, 0x9
- bne _08028752
- mov r0, r8
- adds r2, r5, r0
- adds r0, r2, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _08028740
- adds r0, r2, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _08028750
-_08028740:
- movs r2, 0x7
- b _08028752
- .align 2, 0
-_08028744: .4byte gBattleMoves
-_08028748: .4byte gBattleMons
-_0802874C: .4byte sBattler_AI
-_08028750:
- movs r2, 0
-_08028752:
- ldrb r0, [r4]
- movs r3, 0x58
- muls r0, r3
- add r0, r8
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r5, [r1]
- cmp r2, r5
- beq _080286F2
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r2, r0
- beq _080286F2
- strb r2, [r1]
- ldrb r0, [r4]
- muls r0, r3
- add r0, r8
- adds r0, 0x22
- strb r2, [r0]
- ldr r1, _080287A0 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- strb r2, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r1, _080287A4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_08028790:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080287A0: .4byte gBattleTextBuff1
-_080287A4: .4byte gUnknown_2023D74
- thumb_func_end atk90_tryconversiontypechange
-
- thumb_func_start atk91_givepaydaymoney
-atk91_givepaydaymoney: @ 80287A8
- push {r4,r5,lr}
- ldr r0, _0802880C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r5, 0x2
- ands r0, r5
- cmp r0, 0
- bne _08028828
- ldr r1, _08028810 @ =gUnknown_2023E7E
- ldrh r0, [r1]
- cmp r0, 0
- beq _08028828
- adds r1, r0, 0
- ldr r0, _08028814 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x4A
- ldrb r0, [r0]
- adds r4, r1, 0
- muls r4, r0
- ldr r0, _08028818 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xA4
- lsls r1, 2
- adds r0, r1
- adds r1, r4, 0
- bl AddMoney
- ldr r1, _0802881C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- strb r5, [r1, 0x2]
- movs r0, 0x5
- strb r0, [r1, 0x3]
- strb r4, [r1, 0x4]
- movs r0, 0xFF
- lsls r0, 8
- ands r4, r0
- lsrs r4, 8
- strb r4, [r1, 0x5]
- movs r0, 0xFF
- strb r0, [r1, 0x6]
- ldr r4, _08028820 @ =gUnknown_2023D74
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _08028824 @ =gUnknown_81D911D
- str r0, [r4]
- b _08028830
- .align 2, 0
-_0802880C: .4byte gBattleTypeFlags
-_08028810: .4byte gUnknown_2023E7E
-_08028814: .4byte gBattleStruct
-_08028818: .4byte gSaveBlock1Ptr
-_0802881C: .4byte gBattleTextBuff1
-_08028820: .4byte gUnknown_2023D74
-_08028824: .4byte gUnknown_81D911D
-_08028828:
- ldr r1, _08028838 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_08028830:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08028838: .4byte gUnknown_2023D74
- thumb_func_end atk91_givepaydaymoney
-
- thumb_func_start atk92_setlightscreen
-atk92_setlightscreen: @ 802883C
- push {r4-r6,lr}
- ldr r5, _0802886C @ =sBattler_AI
- ldrb r0, [r5]
- bl GetBattlerPosition
- ldr r4, _08028870 @ =gSideAffecting
- movs r6, 0x1
- adds r1, r6, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r1, [r1]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802887C
- ldr r2, _08028874 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08028878 @ =gUnknown_2023E82
- movs r0, 0
- b _080288F0
- .align 2, 0
-_0802886C: .4byte sBattler_AI
-_08028870: .4byte gSideAffecting
-_08028874: .4byte gMoveResultFlags
-_08028878: .4byte gUnknown_2023E82
-_0802887C:
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r6, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r5]
- bl GetBattlerPosition
- ldr r4, _080288E0 @ =gSideTimers
- adds r1, r6, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x5
- strb r1, [r0, 0x2]
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r1, r6, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r5]
- strb r1, [r0, 0x3]
- ldr r0, _080288E4 @ =gBattleTypeFlags
- ldr r0, [r0]
- ands r0, r6
- cmp r0, 0
- beq _080288EC
- movs r0, 0x1
- bl CountAliveMonsInBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _080288EC
- ldr r1, _080288E8 @ =gUnknown_2023E82
- movs r0, 0x4
- b _080288F0
- .align 2, 0
-_080288E0: .4byte gSideTimers
-_080288E4: .4byte gBattleTypeFlags
-_080288E8: .4byte gUnknown_2023E82
-_080288EC:
- ldr r1, _08028900 @ =gUnknown_2023E82
- movs r0, 0x3
-_080288F0:
- strb r0, [r1, 0x5]
- ldr r1, _08028904 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08028900: .4byte gUnknown_2023E82
-_08028904: .4byte gUnknown_2023D74
- thumb_func_end atk92_setlightscreen
-
- thumb_func_start atk93_tryKO
-atk93_tryKO: @ 8028908
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r7, _08028934 @ =gBattleMons
- ldr r6, _08028938 @ =gBattlerTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _08028940
- ldr r1, _0802893C @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _0802895A
- .align 2, 0
-_08028934: .4byte gBattleMons
-_08028938: .4byte gBattlerTarget
-_0802893C: .4byte gEnigmaBerries
-_08028940:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_0802895A:
- ldr r1, _080289D4 @ =gPotentialItemEffectBattler
- ldr r5, _080289D8 @ =gBattlerTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _08028998
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _08028998
- ldrb r0, [r5]
- movs r1, 0x27
- bl sub_80C7208
- ldr r2, _080289DC @ =gUnknown_2023ECC
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_08028998:
- ldr r1, _080289E0 @ =gBattleMons
- ldr r2, _080289D8 @ =gBattlerTarget
- ldrb r3, [r2]
- movs r6, 0x58
- adds r0, r3, 0
- muls r0, r6
- adds r5, r0, r1
- adds r0, r5, 0
- adds r0, 0x20
- ldrb r4, [r0]
- mov r8, r1
- mov r9, r2
- cmp r4, 0x5
- bne _080289F4
- ldr r2, _080289E4 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080289E8 @ =gLastUsedAbility
- strb r4, [r0]
- ldr r1, _080289EC @ =gUnknown_2023D74
- ldr r0, _080289F0 @ =gUnknown_81D93A1
- str r0, [r1]
- mov r1, r9
- ldrb r0, [r1]
- movs r1, 0x5
- bl sub_80C71D0
- b _08028C48
- .align 2, 0
-_080289D4: .4byte gPotentialItemEffectBattler
-_080289D8: .4byte gBattlerTarget
-_080289DC: .4byte gUnknown_2023ECC
-_080289E0: .4byte gBattleMons
-_080289E4: .4byte gMoveResultFlags
-_080289E8: .4byte gLastUsedAbility
-_080289EC: .4byte gUnknown_2023D74
-_080289F0: .4byte gUnknown_81D93A1
-_080289F4:
- ldr r1, _08028A68 @ =gStatuses3
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x18
- ands r0, r1
- cmp r0, 0
- bne _08028A78
- ldr r1, _08028A6C @ =gBattleMoves
- ldr r0, _08028A70 @ =gCurrentMove
- ldrh r0, [r0]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldr r7, _08028A74 @ =sBattler_AI
- ldrb r0, [r7]
- muls r0, r6
- add r0, r8
- adds r0, 0x2A
- ldrb r0, [r0]
- adds r1, r5, 0
- adds r1, 0x2A
- ldrb r1, [r1]
- subs r0, r1
- ldrb r2, [r2, 0x3]
- adds r0, r2
- lsls r0, 16
- lsrs r4, r0, 16
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- adds r0, 0x1
- cmp r0, r4
- blt _08028A48
- b _08028BE0
-_08028A48:
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- add r1, r8
- adds r1, 0x2A
- mov r2, r9
- ldrb r0, [r2]
- muls r0, r6
- add r0, r8
- adds r0, 0x2A
- ldrb r1, [r1]
- movs r4, 0x1
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08028B0E
- b _08028BE0
- .align 2, 0
-_08028A68: .4byte gStatuses3
-_08028A6C: .4byte gBattleMoves
-_08028A70: .4byte gCurrentMove
-_08028A74: .4byte sBattler_AI
-_08028A78:
- ldr r1, _08028B44 @ =gDisableStructs
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldr r1, _08028B48 @ =sBattler_AI
- ldrb r0, [r0, 0x15]
- adds r7, r1, 0
- ldrb r3, [r7]
- cmp r0, r3
- bne _08028AA2
- ldrb r0, [r7]
- muls r0, r6
- add r0, r8
- adds r0, 0x2A
- adds r1, r5, 0
- adds r1, 0x2A
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bcs _08028B1A
-_08028AA2:
- ldr r1, _08028B4C @ =gBattleMoves
- ldr r0, _08028B50 @ =gCurrentMove
- ldrh r0, [r0]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldr r6, _08028B54 @ =gBattleMons
- ldrb r0, [r7]
- movs r5, 0x58
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r1, [r0]
- ldr r0, _08028B58 @ =gBattlerTarget
- mov r8, r0
- ldrb r0, [r0]
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r0, [r0]
- subs r1, r0
- ldrb r2, [r2, 0x3]
- adds r1, r2
- lsls r1, 16
- lsrs r4, r1, 16
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- adds r0, 0x1
- cmp r0, r4
- bge _08028B0C
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r6
- adds r1, 0x2A
- mov r2, r8
- ldrb r0, [r2]
- muls r0, r5
- adds r0, r6
- adds r0, 0x2A
- ldrb r1, [r1]
- movs r4, 0x1
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08028B0E
-_08028B0C:
- movs r4, 0
-_08028B0E:
- ldr r3, _08028B54 @ =gBattleMons
- mov r8, r3
- ldr r0, _08028B58 @ =gBattlerTarget
- mov r9, r0
- cmp r4, 0
- beq _08028BE0
-_08028B1A:
- ldr r0, _08028B5C @ =gUnknown_2023E8C
- mov r1, r9
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- bge _08028B68
- ldr r1, _08028B60 @ =gBattleMoveDamage
- movs r0, 0x58
- muls r0, r2
- add r0, r8
- ldrh r0, [r0, 0x28]
- subs r0, 0x1
- str r0, [r1]
- ldr r2, _08028B64 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x40
- b _08028BC6
- .align 2, 0
-_08028B44: .4byte gDisableStructs
-_08028B48: .4byte sBattler_AI
-_08028B4C: .4byte gBattleMoves
-_08028B50: .4byte gCurrentMove
-_08028B54: .4byte gBattleMons
-_08028B58: .4byte gBattlerTarget
-_08028B5C: .4byte gUnknown_2023E8C
-_08028B60: .4byte gBattleMoveDamage
-_08028B64: .4byte gMoveResultFlags
-_08028B68:
- ldr r0, _08028BA4 @ =gUnknown_2023ECC
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _08028BB4
- ldr r1, _08028BA8 @ =gBattleMoveDamage
- movs r3, 0x58
- adds r0, r2, 0
- muls r0, r3
- add r0, r8
- ldrh r0, [r0, 0x28]
- subs r0, 0x1
- str r0, [r1]
- ldr r2, _08028BAC @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08028BB0 @ =gUnknown_2023D68
- mov r2, r9
- ldrb r0, [r2]
- muls r0, r3
- add r0, r8
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
- b _08028BCA
- .align 2, 0
-_08028BA4: .4byte gUnknown_2023ECC
-_08028BA8: .4byte gBattleMoveDamage
-_08028BAC: .4byte gMoveResultFlags
-_08028BB0: .4byte gUnknown_2023D68
-_08028BB4:
- ldr r1, _08028BD4 @ =gBattleMoveDamage
- movs r0, 0x58
- muls r0, r2
- add r0, r8
- ldrh r0, [r0, 0x28]
- str r0, [r1]
- ldr r2, _08028BD8 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x10
-_08028BC6:
- orrs r0, r1
- strb r0, [r2]
-_08028BCA:
- ldr r1, _08028BDC @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08028C48
- .align 2, 0
-_08028BD4: .4byte gBattleMoveDamage
-_08028BD8: .4byte gMoveResultFlags
-_08028BDC: .4byte gUnknown_2023D74
-_08028BE0:
- ldr r2, _08028C14 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r3, _08028C18 @ =gBattleMons
- ldr r0, _08028C1C @ =sBattler_AI
- ldrb r0, [r0]
- movs r2, 0x58
- adds r1, r0, 0
- muls r1, r2
- adds r1, r3
- adds r1, 0x2A
- ldr r0, _08028C20 @ =gBattlerTarget
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- adds r0, 0x2A
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bcc _08028C28
- ldr r1, _08028C24 @ =gUnknown_2023E82
- movs r0, 0
- b _08028C2C
- .align 2, 0
-_08028C14: .4byte gMoveResultFlags
-_08028C18: .4byte gBattleMons
-_08028C1C: .4byte sBattler_AI
-_08028C20: .4byte gBattlerTarget
-_08028C24: .4byte gUnknown_2023E82
-_08028C28:
- ldr r1, _08028C54 @ =gUnknown_2023E82
- movs r0, 0x1
-_08028C2C:
- strb r0, [r1, 0x5]
- ldr r3, _08028C58 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_08028C48:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08028C54: .4byte gUnknown_2023E82
-_08028C58: .4byte gUnknown_2023D74
- thumb_func_end atk93_tryKO
-
- thumb_func_start atk94_damagetohalftargethp
-atk94_damagetohalftargethp: @ 8028C5C
- push {lr}
- ldr r3, _08028C88 @ =gBattleMoveDamage
- ldr r2, _08028C8C @ =gBattleMons
- ldr r0, _08028C90 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- lsrs r0, 1
- str r0, [r3]
- cmp r0, 0
- bne _08028C7A
- movs r0, 0x1
- str r0, [r3]
-_08028C7A:
- ldr r1, _08028C94 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08028C88: .4byte gBattleMoveDamage
-_08028C8C: .4byte gBattleMons
-_08028C90: .4byte gBattlerTarget
-_08028C94: .4byte gUnknown_2023D74
- thumb_func_end atk94_damagetohalftargethp
-
- thumb_func_start atk95_setsandstorm
-atk95_setsandstorm: @ 8028C98
- push {lr}
- ldr r2, _08028CB8 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x18
- ands r0, r1
- cmp r0, 0
- beq _08028CC4
- ldr r2, _08028CBC @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08028CC0 @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _08028CD6
- .align 2, 0
-_08028CB8: .4byte gBattleWeather
-_08028CBC: .4byte gMoveResultFlags
-_08028CC0: .4byte gUnknown_2023E82
-_08028CC4:
- movs r0, 0x8
- strh r0, [r2]
- ldr r1, _08028CE4 @ =gUnknown_2023E82
- movs r0, 0x3
- strb r0, [r1, 0x5]
- ldr r0, _08028CE8 @ =gUnknown_2023F20
- adds r0, 0x28
- movs r1, 0x5
- strb r1, [r0]
-_08028CD6:
- ldr r1, _08028CEC @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08028CE4: .4byte gUnknown_2023E82
-_08028CE8: .4byte gUnknown_2023F20
-_08028CEC: .4byte gUnknown_2023D74
- thumb_func_end atk95_setsandstorm
-
- thumb_func_start sub_8028CF0
-sub_8028CF0: @ 8028CF0
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, _08028DBC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0xA0
- lsls r1, 8
- ands r0, r1
- movs r1, 0x80
- lsls r1, 8
- cmp r0, r1
- bne _08028D18
- ldr r0, _08028DC0 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08028D18
- b _08028E64
-_08028D18:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08028D32
- b _08028E48
-_08028D32:
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08028D48
- b _08028E48
-_08028D48:
- ldr r2, _08028DC4 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x18
- ands r0, r1
- ldr r5, _08028DC0 @ =sBattler_AI
- adds r4, r2, 0
- cmp r0, 0
- beq _08028DDA
- ldr r0, _08028DC8 @ =gBattleMons
- ldrb r2, [r5]
- movs r1, 0x58
- muls r1, r2
- adds r3, r1, r0
- adds r0, r3, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x5
- beq _08028DD4
- cmp r0, 0x8
- beq _08028DD4
- cmp r0, 0x4
- beq _08028DD4
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x5
- beq _08028DD4
- cmp r0, 0x8
- beq _08028DD4
- cmp r0, 0x4
- beq _08028DD4
- adds r0, r3, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x8
- beq _08028DD4
- ldr r0, _08028DCC @ =gStatuses3
- lsls r1, r2, 2
- adds r1, r0
- ldr r1, [r1]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08028DD4
- movs r0, 0x80
- lsls r0, 11
- ands r1, r0
- cmp r1, 0
- bne _08028DD4
- ldr r1, _08028DD0 @ =gBattleMoveDamage
- ldrh r0, [r3, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _08028DDA
- movs r0, 0x1
- b _08028DD8
- .align 2, 0
-_08028DBC: .4byte gBattleTypeFlags
-_08028DC0: .4byte sBattler_AI
-_08028DC4: .4byte gBattleWeather
-_08028DC8: .4byte gBattleMons
-_08028DCC: .4byte gStatuses3
-_08028DD0: .4byte gBattleMoveDamage
-_08028DD4:
- ldr r1, _08028E30 @ =gBattleMoveDamage
- movs r0, 0
-_08028DD8:
- str r0, [r1]
-_08028DDA:
- ldrh r1, [r4]
- movs r4, 0x80
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08028E50
- ldr r1, _08028E34 @ =gBattleMons
- ldrb r3, [r5]
- movs r0, 0x58
- muls r0, r3
- adds r2, r0, r1
- adds r0, r2, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0xF
- beq _08028E3C
- adds r0, r2, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xF
- beq _08028E3C
- ldr r0, _08028E38 @ =gStatuses3
- lsls r1, r3, 2
- adds r1, r0
- ldr r1, [r1]
- adds r0, r1, 0
- ands r0, r4
- cmp r0, 0
- bne _08028E3C
- movs r0, 0x80
- lsls r0, 11
- ands r1, r0
- cmp r1, 0
- bne _08028E3C
- ldr r1, _08028E30 @ =gBattleMoveDamage
- ldrh r0, [r2, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _08028E50
- movs r0, 0x1
- str r0, [r1]
- b _08028E50
- .align 2, 0
-_08028E30: .4byte gBattleMoveDamage
-_08028E34: .4byte gBattleMons
-_08028E38: .4byte gStatuses3
-_08028E3C:
- ldr r1, _08028E44 @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
- b _08028E50
- .align 2, 0
-_08028E44: .4byte gBattleMoveDamage
-_08028E48:
- ldr r1, _08028E7C @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
- ldr r5, _08028E80 @ =sBattler_AI
-_08028E50:
- ldr r0, _08028E84 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08028E88 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08028E6A
-_08028E64:
- ldr r1, _08028E7C @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
-_08028E6A:
- ldr r1, _08028E8C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08028E7C: .4byte gBattleMoveDamage
-_08028E80: .4byte sBattler_AI
-_08028E84: .4byte gAbsentBattlerFlags
-_08028E88: .4byte gBitTable
-_08028E8C: .4byte gUnknown_2023D74
- thumb_func_end sub_8028CF0
-
- thumb_func_start sub_8028E90
-sub_8028E90: @ 8028E90
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, _08028EBC @ =sBattler_AI
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08028EC8
- ldr r1, _08028EC0 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08028EC4 @ =gPlayerParty
- b _08028ED8
- .align 2, 0
-_08028EBC: .4byte sBattler_AI
-_08028EC0: .4byte gBattlerPartyIndexes
-_08028EC4: .4byte gPlayerParty
-_08028EC8:
- ldr r1, _08028EFC @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08028F00 @ =gEnemyParty
-_08028ED8:
- adds r5, r1, r0
- ldr r4, _08028F04 @ =gBattlerTarget
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08028F0C
- ldr r1, _08028EFC @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08028F08 @ =gPlayerParty
- b _08028F1C
- .align 2, 0
-_08028EFC: .4byte gBattlerPartyIndexes
-_08028F00: .4byte gEnemyParty
-_08028F04: .4byte gBattlerTarget
-_08028F08: .4byte gPlayerParty
-_08028F0C:
- ldr r1, _08028F78 @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08028F7C @ =gEnemyParty
-_08028F1C:
- adds r4, r1, r0
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- adds r0, r5, 0
- movs r1, 0
- bl GetMonData
- mov r9, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r7, r0, 0
- ldr r5, _08028F80 @ =gBattlerTarget
- ldrb r0, [r5]
- movs r6, 0x58
- muls r0, r6
- ldr r1, _08028F84 @ =gBattleMons
- adds r0, r1
- adds r0, 0x20
- ldrb r2, [r0]
- cmp r2, 0xC
- bne _08028F94
- ldr r1, _08028F88 @ =gUnknown_2023D74
- ldr r0, _08028F8C @ =gUnknown_81D9444
- str r0, [r1]
- ldr r0, _08028F90 @ =gLastUsedAbility
- strb r2, [r0]
- ldrb r0, [r5]
- movs r1, 0xC
- bl sub_80C71D0
- b _0802902C
- .align 2, 0
-_08028F78: .4byte gBattlerPartyIndexes
-_08028F7C: .4byte gEnemyParty
-_08028F80: .4byte gBattlerTarget
-_08028F84: .4byte gBattleMons
-_08028F88: .4byte gUnknown_2023D74
-_08028F8C: .4byte gUnknown_81D9444
-_08028F90: .4byte gLastUsedAbility
-_08028F94:
- mov r0, r10
- mov r1, r9
- bl GetGenderFromSpeciesAndPersonality
- adds r4, r0, 0
- mov r0, r8
- adds r1, r7, 0
- bl GetGenderFromSpeciesAndPersonality
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- beq _08028FE4
- ldrb r0, [r5]
- muls r0, r6
- ldr r4, _08029000 @ =gBattleMons
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0xF0
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- bne _08028FE4
- mov r0, r10
- mov r1, r9
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _08028FE4
- mov r0, r8
- adds r1, r7, 0
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _08029008
-_08028FE4:
- ldr r3, _08029004 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802902C
- .align 2, 0
-_08029000: .4byte gBattleMons
-_08029004: .4byte gUnknown_2023D74
-_08029008:
- ldrb r0, [r5]
- adds r2, r0, 0
- muls r2, r6
- adds r2, r4
- ldr r1, _0802903C @ =gBitTable
- ldr r0, _08029040 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 16
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08029044 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802902C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802903C: .4byte gBitTable
-_08029040: .4byte sBattler_AI
-_08029044: .4byte gUnknown_2023D74
- thumb_func_end sub_8028E90
-
- thumb_func_start sub_8029048
-sub_8029048: @ 8029048
- push {r4-r7,lr}
- ldr r0, _080290B8 @ =gUnknown_2023BC8
- ldr r1, [r0]
- cmp r1, 0
- beq _08029054
- b _080291C0
-_08029054:
- ldr r5, _080290BC @ =gUnknown_2023D74
- ldr r2, [r5]
- ldrb r0, [r2, 0x1]
- cmp r0, 0xD
- bne _080290D4
- ldr r2, _080290C0 @ =gActiveBattler
- strb r1, [r2]
- ldr r0, _080290C4 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08029164
- ldr r7, _080290C8 @ =gBitTable
- adds r4, r2, 0
- ldr r5, _080290CC @ =gBattleMons
- adds r6, r5, 0
- adds r6, 0x50
-_08029074:
- ldr r0, _080290D0 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080290A2
- movs r0, 0x58
- muls r2, r0
- adds r0, r5, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r1, [r0]
- adds r2, r6
- ldr r2, [r2]
- movs r0, 0
- bl EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_080290A2:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _080290C4 @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08029074
- b _08029164
- .align 2, 0
-_080290B8: .4byte gUnknown_2023BC8
-_080290BC: .4byte gUnknown_2023D74
-_080290C0: .4byte gActiveBattler
-_080290C4: .4byte gBattlersCount
-_080290C8: .4byte gBitTable
-_080290CC: .4byte gBattleMons
-_080290D0: .4byte gAbsentBattlerFlags
-_080290D4:
- cmp r0, 0x4
- bne _0802918C
- ldr r4, _08029170 @ =gActiveBattler
- ldr r5, _08029174 @ =sBattler_AI
- ldrb r0, [r5]
- strb r0, [r4]
- ldr r6, _08029178 @ =gAbsentBattlerFlags
- ldrb r1, [r6]
- ldr r7, _0802917C @ =gBitTable
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08029114
- ldr r3, _08029180 @ =gBattleMons
- movs r0, 0x58
- muls r2, r0
- adds r0, r3, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r1, [r0]
- adds r3, 0x50
- adds r2, r3
- ldr r2, [r2]
- movs r0, 0
- bl EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08029114:
- ldr r0, _08029184 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08029164
- ldrb r0, [r5]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- strb r0, [r4]
- ldrb r1, [r6]
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08029164
- ldr r3, _08029180 @ =gBattleMons
- movs r0, 0x58
- muls r2, r0
- adds r0, r3, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r1, [r0]
- adds r3, 0x50
- adds r2, r3
- ldr r2, [r2]
- movs r0, 0
- bl EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08029164:
- ldr r1, _08029188 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- b _080291C0
- .align 2, 0
-_08029170: .4byte gActiveBattler
-_08029174: .4byte sBattler_AI
-_08029178: .4byte gAbsentBattlerFlags
-_0802917C: .4byte gBitTable
-_08029180: .4byte gBattleMons
-_08029184: .4byte gBattleTypeFlags
-_08029188: .4byte gUnknown_2023D74
-_0802918C:
- ldrb r0, [r2, 0x1]
- bl sub_8016E24
- ldr r4, _080291C8 @ =gActiveBattler
- strb r0, [r4]
- ldr r3, _080291CC @ =gBattleMons
- ldrb r1, [r4]
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- adds r0, r3, 0
- adds r0, 0x4C
- adds r0, r2, r0
- ldr r1, [r0]
- adds r3, 0x50
- adds r2, r3
- ldr r2, [r2]
- movs r0, 0
- bl EmitStatusIconUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_080291C0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080291C8: .4byte gActiveBattler
-_080291CC: .4byte gBattleMons
- thumb_func_end sub_8029048
-
- thumb_func_start atk99_setmist
-atk99_setmist: @ 80291D0
- push {r4-r6,lr}
- ldr r6, _08029200 @ =gSideTimers
- ldr r4, _08029204 @ =sBattler_AI
- ldrb r0, [r4]
- bl GetBattlerPosition
- movs r5, 0x1
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _08029210
- ldr r2, _08029208 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0802920C @ =gUnknown_2023E82
- strb r5, [r0, 0x5]
- b _0802925E
- .align 2, 0
-_08029200: .4byte gSideTimers
-_08029204: .4byte sBattler_AI
-_08029208: .4byte gMoveResultFlags
-_0802920C: .4byte gUnknown_2023E82
-_08029210:
- ldrb r0, [r4]
- bl GetBattlerPosition
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r1, 0x5
- strb r1, [r0, 0x4]
- ldrb r0, [r4]
- bl GetBattlerPosition
- adds r1, r5, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r4]
- strb r1, [r0, 0x5]
- ldrb r0, [r4]
- bl GetBattlerPosition
- ldr r2, _0802926C @ =gSideAffecting
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r3, 0x80
- lsls r3, 1
- adds r0, r3, 0
- movs r3, 0
- orrs r0, r2
- strh r0, [r1]
- ldr r0, _08029270 @ =gUnknown_2023E82
- strb r3, [r0, 0x5]
-_0802925E:
- ldr r1, _08029274 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802926C: .4byte gSideAffecting
-_08029270: .4byte gUnknown_2023E82
-_08029274: .4byte gUnknown_2023D74
- thumb_func_end atk99_setmist
-
- thumb_func_start atk9A_setfocusenergy
-atk9A_setfocusenergy: @ 8029278
- push {lr}
- ldr r1, _080292A8 @ =gBattleMons
- ldr r0, _080292AC @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r3, 0x80
- lsls r3, 13
- adds r2, r1, 0
- ands r2, r3
- cmp r2, 0
- beq _080292B8
- ldr r2, _080292B0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _080292B4 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _080292C0
- .align 2, 0
-_080292A8: .4byte gBattleMons
-_080292AC: .4byte sBattler_AI
-_080292B0: .4byte gMoveResultFlags
-_080292B4: .4byte gUnknown_2023E82
-_080292B8:
- orrs r1, r3
- str r1, [r0]
- ldr r0, _080292CC @ =gUnknown_2023E82
- strb r2, [r0, 0x5]
-_080292C0:
- ldr r1, _080292D0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080292CC: .4byte gUnknown_2023E82
-_080292D0: .4byte gUnknown_2023D74
- thumb_func_end atk9A_setfocusenergy
-
- thumb_func_start atk9B_transformdataexecution
-atk9B_transformdataexecution: @ 80292D4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r1, _0802932C @ =gUnknown_2023D4C
- ldr r2, _08029330 @ =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _08029334 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- ldr r7, _08029338 @ =gBattleMons
- ldr r0, _0802933C @ =gBattlerTarget
- mov r12, r0
- ldrb r1, [r0]
- movs r6, 0x58
- adds r0, r1, 0
- muls r0, r6
- adds r5, r7, 0
- adds r5, 0x50
- adds r0, r5
- ldr r0, [r0]
- movs r4, 0x80
- lsls r4, 14
- ands r0, r4
- cmp r0, 0
- bne _0802931A
- ldr r0, _08029340 @ =gStatuses3
- lsls r1, 2
- adds r1, r0
- ldr r2, [r1]
- ldr r0, _08029344 @ =0x000400c0
- ands r2, r0
- cmp r2, 0
- beq _08029350
-_0802931A:
- ldr r2, _08029348 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802934C @ =gUnknown_2023E82
- movs r0, 0x1
- b _08029464
- .align 2, 0
-_0802932C: .4byte gUnknown_2023D4C
-_08029330: .4byte 0x0000ffff
-_08029334: .4byte gUnknown_2023D74
-_08029338: .4byte gBattleMons
-_0802933C: .4byte gBattlerTarget
-_08029340: .4byte gStatuses3
-_08029344: .4byte 0x000400c0
-_08029348: .4byte gMoveResultFlags
-_0802934C: .4byte gUnknown_2023E82
-_08029350:
- ldr r3, _08029424 @ =sBattler_AI
- ldrb r0, [r3]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r5
- ldr r0, [r1]
- orrs r0, r4
- str r0, [r1]
- ldr r4, _08029428 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- strh r2, [r0, 0x4]
- ldrb r0, [r3]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0xB]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0xB]
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- mov r2, r12
- ldrb r1, [r2]
- muls r1, r6
- adds r2, r7, 0
- adds r2, 0x48
- adds r1, r2
- ldr r1, [r1]
- str r1, [r0]
- ldrb r0, [r3]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x18]
- movs r0, 0xF
- ands r0, r2
- strb r0, [r1, 0x18]
- ldr r1, _0802942C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x6
- strb r0, [r1, 0x1]
- mov r2, r12
- ldrb r0, [r2]
- muls r0, r6
- adds r0, r7
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r2]
- muls r0, r6
- adds r0, r7
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldrb r0, [r3]
- muls r0, r6
- adds r5, r0, r7
- ldrb r0, [r2]
- muls r0, r6
- adds r2, r0, r7
- movs r4, 0
- adds r6, r3, 0
- ldr r0, _08029430 @ =gActiveBattler
- mov r8, r0
-_080293E8:
- adds r0, r5, r4
- adds r1, r2, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x23
- bls _080293E8
- movs r4, 0
- ldr r7, _08029434 @ =gBattleMoves
- ldr r3, _08029438 @ =gUnknown_2023BF0
- adds r5, r3, 0
- adds r5, 0x18
-_08029400:
- lsls r1, r4, 1
- ldrb r2, [r6]
- movs r0, 0x58
- muls r2, r0
- adds r1, r2
- adds r1, r3
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r1, [r0, 0x4]
- cmp r1, 0x4
- bhi _0802943C
- adds r0, r4, r2
- adds r0, r5
- b _08029442
- .align 2, 0
-_08029424: .4byte sBattler_AI
-_08029428: .4byte gDisableStructs
-_0802942C: .4byte gBattleTextBuff1
-_08029430: .4byte gActiveBattler
-_08029434: .4byte gBattleMoves
-_08029438: .4byte gUnknown_2023BF0
-_0802943C:
- adds r0, r4, r2
- adds r0, r5
- movs r1, 0x5
-_08029442:
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x3
- ble _08029400
- ldrb r0, [r6]
- mov r1, r8
- strb r0, [r1]
- movs r0, 0
- movs r1, 0x2
- bl EmitResetActionMoveSelection
- mov r2, r8
- ldrb r0, [r2]
- bl MarkBufferBankForExecution
- ldr r1, _08029470 @ =gUnknown_2023E82
- movs r0, 0
-_08029464:
- strb r0, [r1, 0x5]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029470: .4byte gUnknown_2023E82
- thumb_func_end atk9B_transformdataexecution
-
- thumb_func_start atk9C_setsubstitute
-atk9C_setsubstitute: @ 8029474
- push {r4-r7,lr}
- ldr r7, _080294A4 @ =gBattleMons
- ldr r6, _080294A8 @ =sBattler_AI
- ldrb r0, [r6]
- movs r5, 0x58
- muls r0, r5
- adds r3, r0, r7
- ldrh r0, [r3, 0x2C]
- lsrs r1, r0, 2
- adds r2, r1, 0
- cmp r1, 0
- bne _0802948E
- movs r2, 0x1
-_0802948E:
- ldrh r0, [r3, 0x28]
- cmp r0, r2
- bhi _080294B4
- ldr r1, _080294AC @ =gBattleMoveDamage
- movs r0, 0
- str r0, [r1]
- ldr r1, _080294B0 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08029508
- .align 2, 0
-_080294A4: .4byte gBattleMons
-_080294A8: .4byte sBattler_AI
-_080294AC: .4byte gBattleMoveDamage
-_080294B0: .4byte gUnknown_2023E82
-_080294B4:
- ldr r4, _08029518 @ =gBattleMoveDamage
- str r1, [r4]
- cmp r1, 0
- bne _080294C0
- movs r0, 0x1
- str r0, [r4]
-_080294C0:
- ldrb r0, [r6]
- adds r2, r0, 0
- muls r2, r5
- adds r3, r7, 0
- adds r3, 0x50
- adds r2, r3
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 17
- orrs r0, r1
- str r0, [r2]
- ldrb r0, [r6]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r3
- ldr r0, [r1]
- ldr r2, _0802951C @ =0xffff1fff
- ands r0, r2
- str r0, [r1]
- ldr r2, _08029520 @ =gDisableStructs
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, [r4]
- movs r2, 0
- strb r1, [r0, 0xA]
- ldr r0, _08029524 @ =gUnknown_2023E82
- strb r2, [r0, 0x5]
- ldr r2, _08029528 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 1
- orrs r0, r1
- str r0, [r2]
-_08029508:
- ldr r1, _0802952C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029518: .4byte gBattleMoveDamage
-_0802951C: .4byte 0xffff1fff
-_08029520: .4byte gDisableStructs
-_08029524: .4byte gUnknown_2023E82
-_08029528: .4byte gUnknown_2023DD0
-_0802952C: .4byte gUnknown_2023D74
- thumb_func_end atk9C_setsubstitute
-
- thumb_func_start IsMoveUncopyableByMimic
-IsMoveUncopyableByMimic: @ 8029530
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r3, 0
- ldr r0, _08029570 @ =gUnknown_82507E8
- ldrh r1, [r0]
- ldr r4, _08029574 @ =0x0000fffe
- adds r5, r0, 0
- cmp r1, r4
- beq _08029558
- cmp r1, r2
- beq _08029558
- adds r1, r5, 0
-_0802954A:
- adds r1, 0x2
- adds r3, 0x1
- ldrh r0, [r1]
- cmp r0, r4
- beq _08029558
- cmp r0, r2
- bne _0802954A
-_08029558:
- lsls r0, r3, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r0, _08029574 @ =0x0000fffe
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08029570: .4byte gUnknown_82507E8
-_08029574: .4byte 0x0000fffe
- thumb_func_end IsMoveUncopyableByMimic
-
- thumb_func_start atk9D_mimicattackcopy
-atk9D_mimicattackcopy: @ 8029578
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _080295F0 @ =gUnknown_2023D4C
- ldr r1, _080295F4 @ =0x0000ffff
- adds r7, r1, 0
- strh r7, [r0]
- ldr r5, _080295F8 @ =gLastUsedMove
- ldr r6, _080295FC @ =gBattlerTarget
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- bl IsMoveUncopyableByMimic
- lsls r0, 24
- cmp r0, 0
- bne _080295D2
- ldr r3, _08029600 @ =gBattleMons
- ldr r2, _08029604 @ =sBattler_AI
- ldrb r1, [r2]
- movs r0, 0x58
- adds r4, r1, 0
- muls r4, r0
- adds r0, r3, 0
- adds r0, 0x50
- adds r0, r4, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 14
- ands r1, r0
- mov r12, r3
- mov r9, r2
- cmp r1, 0
- bne _080295D2
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- cmp r1, 0
- beq _080295D2
- cmp r1, r7
- bne _0802960C
-_080295D2:
- ldr r3, _08029608 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08029744
- .align 2, 0
-_080295F0: .4byte gUnknown_2023D4C
-_080295F4: .4byte 0x0000ffff
-_080295F8: .4byte gLastUsedMove
-_080295FC: .4byte gBattlerTarget
-_08029600: .4byte gBattleMons
-_08029604: .4byte sBattler_AI
-_08029608: .4byte gUnknown_2023D74
-_0802960C:
- movs r2, 0
- mov r3, r12
- adds r3, 0xC
- adds r0, r4, r3
- ldrh r0, [r0]
- ldr r4, _0802969C @ =gUnknown_2023D74
- mov r10, r4
- cmp r0, r1
- beq _08029646
- mov r8, r3
- adds r7, r5, 0
- adds r5, r6, 0
- mov r4, r9
- movs r3, 0x58
-_08029628:
- adds r2, 0x1
- cmp r2, 0x3
- bgt _08029646
- lsls r1, r2, 1
- ldrb r0, [r4]
- muls r0, r3
- adds r1, r0
- add r1, r8
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r7
- ldrh r1, [r1]
- ldrh r0, [r0]
- cmp r1, r0
- bne _08029628
-_08029646:
- cmp r2, 0x4
- bne _08029728
- ldr r5, _080296A0 @ =gUnknown_2023D48
- ldrb r1, [r5]
- lsls r1, 1
- mov r2, r9
- ldrb r0, [r2]
- movs r6, 0x58
- muls r0, r6
- adds r1, r0
- mov r0, r12
- adds r0, 0xC
- adds r1, r0
- ldr r2, _080296A4 @ =gLastUsedMove
- ldr r3, _080296A8 @ =gBattlerTarget
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r4, _080296AC @ =gBattleMoves
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r4, [r0, 0x4]
- cmp r4, 0x4
- bhi _080296B0
- mov r1, r9
- ldrb r0, [r1]
- muls r0, r6
- ldrb r1, [r5]
- adds r0, r1
- mov r1, r12
- adds r1, 0x24
- adds r0, r1
- strb r4, [r0]
- b _080296C4
- .align 2, 0
-_0802969C: .4byte gUnknown_2023D74
-_080296A0: .4byte gUnknown_2023D48
-_080296A4: .4byte gLastUsedMove
-_080296A8: .4byte gBattlerTarget
-_080296AC: .4byte gBattleMoves
-_080296B0:
- mov r4, r9
- ldrb r0, [r4]
- muls r0, r6
- ldrb r1, [r5]
- adds r0, r1
- mov r1, r12
- adds r1, 0x24
- adds r0, r1
- movs r1, 0x5
- strb r1, [r0]
-_080296C4:
- ldr r1, _0802971C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _08029720 @ =gDisableStructs
- mov r2, r9
- ldrb r0, [r2]
- lsls r2, r0, 3
- subs r2, r0
- lsls r2, 2
- adds r2, r1
- ldrb r4, [r2, 0x18]
- lsrs r3, r4, 4
- ldr r1, _08029724 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- orrs r1, r3
- lsls r1, 4
- movs r0, 0xF
- ands r0, r4
- orrs r0, r1
- strb r0, [r2, 0x18]
- mov r4, r10
- ldr r0, [r4]
- adds r0, 0x5
- str r0, [r4]
- b _08029744
- .align 2, 0
-_0802971C: .4byte gBattleTextBuff1
-_08029720: .4byte gDisableStructs
-_08029724: .4byte gBitTable
-_08029728:
- mov r0, r10
- ldr r2, [r0]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- mov r2, r10
- str r1, [r2]
-_08029744:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk9D_mimicattackcopy
-
- thumb_func_start atk9E_metronome
-atk9E_metronome: @ 8029754
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _080297D4 @ =gCurrentMove
- movs r6, 0xB1
- lsls r6, 1
- ldr r5, _080297D8 @ =gUnknown_82507E8
- ldr r0, _080297DC @ =gUnknown_2023D74
- mov r8, r0
-_08029766:
- bl Random
- ldr r2, _080297E0 @ =0x000001ff
- adds r1, r2, 0
- ands r0, r1
- adds r0, 0x1
- strh r0, [r7]
- cmp r0, r6
- bhi _08029766
- movs r0, 0x3
-_0802977A:
- subs r0, 0x1
- cmp r0, 0
- bge _0802977A
- ldr r4, _080297D4 @ =gCurrentMove
- ldrh r2, [r4]
- ldr r3, _080297E4 @ =0x0000ffff
- subs r0, r5, 0x2
-_08029788:
- adds r0, 0x2
- ldrh r1, [r0]
- cmp r1, r2
- beq _08029794
- cmp r1, r3
- bne _08029788
-_08029794:
- ldr r0, _080297E4 @ =0x0000ffff
- cmp r1, r0
- bne _08029766
- ldr r2, _080297E8 @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _080297EC @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r3, _080297F0 @ =gUnknown_81D65A8
- ldr r2, _080297F4 @ =gBattleMoves
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- mov r1, r8
- str r0, [r1]
- ldrh r0, [r4]
- movs r1, 0
- bl GetMoveTarget
- ldr r1, _080297F8 @ =gBattlerTarget
- strb r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080297D4: .4byte gCurrentMove
-_080297D8: .4byte gUnknown_82507E8
-_080297DC: .4byte gUnknown_2023D74
-_080297E0: .4byte 0x000001ff
-_080297E4: .4byte 0x0000ffff
-_080297E8: .4byte gUnknown_2023DD0
-_080297EC: .4byte 0xfffffbff
-_080297F0: .4byte gUnknown_81D65A8
-_080297F4: .4byte gBattleMoves
-_080297F8: .4byte gBattlerTarget
- thumb_func_end atk9E_metronome
-
- thumb_func_start atk9F_dmgtolevel
-atk9F_dmgtolevel: @ 80297FC
- ldr r3, _0802981C @ =gBattleMoveDamage
- ldr r2, _08029820 @ =gBattleMons
- ldr r0, _08029824 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r0, [r0]
- str r0, [r3]
- ldr r1, _08029828 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802981C: .4byte gBattleMoveDamage
-_08029820: .4byte gBattleMons
-_08029824: .4byte sBattler_AI
-_08029828: .4byte gUnknown_2023D74
- thumb_func_end atk9F_dmgtolevel
-
- thumb_func_start atkA0_psywavedamageeffect
-atkA0_psywavedamageeffect: @ 802982C
- push {r4,lr}
- movs r4, 0xF
-_08029830:
- bl Random
- adds r3, r4, 0
- ands r3, r0
- cmp r3, 0xA
- bgt _08029830
- lsls r0, r3, 2
- adds r0, r3
- lsls r3, r0, 1
- ldr r4, _08029870 @ =gBattleMoveDamage
- ldr r2, _08029874 @ =gBattleMons
- ldr r0, _08029878 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r1, [r0]
- adds r0, r3, 0
- adds r0, 0x32
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- ldr r1, _0802987C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08029870: .4byte gBattleMoveDamage
-_08029874: .4byte gBattleMons
-_08029878: .4byte sBattler_AI
-_0802987C: .4byte gUnknown_2023D74
- thumb_func_end atkA0_psywavedamageeffect
-
- thumb_func_start atkA1_counterdamagecalculator
-atkA1_counterdamagecalculator: @ 8029880
- push {r4-r6,lr}
- ldr r4, _080298F0 @ =sBattler_AI
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _080298F4 @ =gUnknown_2023E8C
- ldrb r0, [r4]
- lsls r0, 4
- adds r0, r5
- ldrb r0, [r0, 0xC]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r0, r5, 0x4
- adds r0, r1, r0
- ldr r3, [r0]
- cmp r3, 0
- beq _08029934
- cmp r6, r2
- beq _08029934
- ldr r6, _080298F8 @ =gBattleMons
- adds r0, r1, r5
- ldrb r0, [r0, 0xC]
- movs r4, 0x58
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08029934
- ldr r1, _080298FC @ =gBattleMoveDamage
- lsls r0, r3, 1
- str r0, [r1]
- ldr r1, _08029900 @ =gSideTimers
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- beq _08029908
- ldrb r1, [r1, 0x9]
- adds r0, r1, 0
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08029908
- ldr r0, _08029904 @ =gBattlerTarget
- strb r1, [r0]
- b _08029918
- .align 2, 0
-_080298F0: .4byte sBattler_AI
-_080298F4: .4byte gUnknown_2023E8C
-_080298F8: .4byte gBattleMons
-_080298FC: .4byte gBattleMoveDamage
-_08029900: .4byte gSideTimers
-_08029904: .4byte gBattlerTarget
-_08029908:
- ldr r2, _08029924 @ =gBattlerTarget
- ldr r1, _08029928 @ =gUnknown_2023E8C
- ldr r0, _0802992C @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0xC]
- strb r0, [r2]
-_08029918:
- ldr r1, _08029930 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029964
- .align 2, 0
-_08029924: .4byte gBattlerTarget
-_08029928: .4byte gUnknown_2023E8C
-_0802992C: .4byte sBattler_AI
-_08029930: .4byte gUnknown_2023D74
-_08029934:
- ldr r2, _0802996C @ =gUnknown_2023ECC
- ldr r0, _08029970 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r3, _08029974 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_08029964:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802996C: .4byte gUnknown_2023ECC
-_08029970: .4byte sBattler_AI
-_08029974: .4byte gUnknown_2023D74
- thumb_func_end atkA1_counterdamagecalculator
-
- thumb_func_start atkA2_mirrorcoatdamagecalculator
-atkA2_mirrorcoatdamagecalculator: @ 8029978
- push {r4-r6,lr}
- ldr r4, _080299E8 @ =sBattler_AI
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _080299EC @ =gUnknown_2023E8C
- ldrb r0, [r4]
- lsls r0, 4
- adds r0, r5
- ldrb r0, [r0, 0xD]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r0, r5, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r3, [r0]
- cmp r3, 0
- beq _08029A2C
- cmp r6, r2
- beq _08029A2C
- ldr r6, _080299F0 @ =gBattleMons
- adds r0, r1, r5
- ldrb r0, [r0, 0xD]
- movs r4, 0x58
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08029A2C
- ldr r1, _080299F4 @ =gBattleMoveDamage
- lsls r0, r3, 1
- str r0, [r1]
- ldr r1, _080299F8 @ =gSideTimers
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- beq _08029A00
- ldrb r1, [r1, 0x9]
- adds r0, r1, 0
- muls r0, r4
- adds r0, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08029A00
- ldr r0, _080299FC @ =gBattlerTarget
- strb r1, [r0]
- b _08029A10
- .align 2, 0
-_080299E8: .4byte sBattler_AI
-_080299EC: .4byte gUnknown_2023E8C
-_080299F0: .4byte gBattleMons
-_080299F4: .4byte gBattleMoveDamage
-_080299F8: .4byte gSideTimers
-_080299FC: .4byte gBattlerTarget
-_08029A00:
- ldr r2, _08029A1C @ =gBattlerTarget
- ldr r1, _08029A20 @ =gUnknown_2023E8C
- ldr r0, _08029A24 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0xD]
- strb r0, [r2]
-_08029A10:
- ldr r1, _08029A28 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029A5C
- .align 2, 0
-_08029A1C: .4byte gBattlerTarget
-_08029A20: .4byte gUnknown_2023E8C
-_08029A24: .4byte sBattler_AI
-_08029A28: .4byte gUnknown_2023D74
-_08029A2C:
- ldr r2, _08029A64 @ =gUnknown_2023ECC
- ldr r0, _08029A68 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r3, _08029A6C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_08029A5C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08029A64: .4byte gUnknown_2023ECC
-_08029A68: .4byte sBattler_AI
-_08029A6C: .4byte gUnknown_2023D74
- thumb_func_end atkA2_mirrorcoatdamagecalculator
-
- thumb_func_start atkA3_disablelastusedattack
-atkA3_disablelastusedattack: @ 8029A70
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r4, 0
- ldr r2, _08029B70 @ =gBattleMons
- ldr r3, _08029B74 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r7, r2, 0
- adds r7, 0xC
- adds r0, r7
- ldr r5, _08029B78 @ =gLastUsedMove
- lsls r1, 1
- adds r1, r5
- ldrh r0, [r0]
- mov r9, r2
- adds r6, r3, 0
- ldr r2, _08029B7C @ =gDisableStructs
- mov r8, r2
- ldrh r1, [r1]
- cmp r0, r1
- beq _08029AC4
- mov r12, r6
- movs r3, 0x58
-_08029AA4:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08029AC4
- lsls r2, r4, 1
- mov r0, r12
- ldrb r1, [r0]
- adds r0, r1, 0
- muls r0, r3
- adds r2, r0
- adds r2, r7
- lsls r1, 1
- adds r1, r5
- ldrh r0, [r2]
- ldrh r1, [r1]
- cmp r0, r1
- bne _08029AA4
-_08029AC4:
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r8
- ldrh r0, [r0, 0x4]
- cmp r0, 0
- bne _08029B88
- cmp r4, 0x4
- beq _08029B88
- movs r5, 0x58
- adds r0, r1, 0
- muls r0, r5
- adds r0, r4, r0
- mov r1, r9
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08029B88
- ldr r1, _08029B80 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- lsls r2, r4, 1
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r2, r0
- mov r3, r9
- adds r3, 0xC
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r2, r0
- adds r0, r3
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r8
- muls r1, r5
- adds r2, r1
- adds r2, r3
- ldrh r1, [r2]
- strh r1, [r0, 0x4]
- bl Random
- ldrb r2, [r6]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- add r1, r8
- movs r2, 0x3
- ands r2, r0
- adds r2, 0x2
- ldrb r3, [r1, 0xB]
- movs r0, 0x10
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0xB]
- ldrb r0, [r6]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- add r1, r8
- ldrb r3, [r1, 0xB]
- lsls r2, r3, 28
- lsrs r2, 24
- movs r0, 0xF
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0xB]
- ldr r1, _08029B84 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029BA2
- .align 2, 0
-_08029B70: .4byte gBattleMons
-_08029B74: .4byte gBattlerTarget
-_08029B78: .4byte gLastUsedMove
-_08029B7C: .4byte gDisableStructs
-_08029B80: .4byte gBattleTextBuff1
-_08029B84: .4byte gUnknown_2023D74
-_08029B88:
- ldr r3, _08029BB0 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_08029BA2:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029BB0: .4byte gUnknown_2023D74
- thumb_func_end atkA3_disablelastusedattack
-
- thumb_func_start atkA4_trysetencore
-atkA4_trysetencore: @ 8029BB4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r5, 0
- ldr r3, _08029CA8 @ =gBattleMons
- ldr r4, _08029CAC @ =gBattlerTarget
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r6, r3, 0
- adds r6, 0xC
- adds r0, r6
- ldr r2, _08029CB0 @ =gLastUsedMove
- lsls r1, 1
- adds r1, r2
- ldrh r0, [r0]
- mov r10, r3
- mov r8, r2
- ldr r2, _08029CB4 @ =gDisableStructs
- mov r9, r2
- ldrh r1, [r1]
- cmp r0, r1
- beq _08029C0E
- mov r12, r4
- adds r7, r6, 0
- mov r6, r8
- movs r3, 0x58
-_08029BEE:
- adds r5, 0x1
- cmp r5, 0x3
- bgt _08029C0E
- lsls r2, r5, 1
- mov r0, r12
- ldrb r1, [r0]
- adds r0, r1, 0
- muls r0, r3
- adds r2, r0
- adds r2, r7
- lsls r1, 1
- adds r1, r6
- ldrh r0, [r2]
- ldrh r1, [r1]
- cmp r0, r1
- bne _08029BEE
-_08029C0E:
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r2, [r0]
- cmp r2, 0xA5
- beq _08029C22
- cmp r2, 0xE3
- beq _08029C22
- cmp r2, 0x77
- bne _08029C24
-_08029C22:
- movs r5, 0x4
-_08029C24:
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- mov r2, r9
- adds r3, r0, r2
- ldrh r0, [r3, 0x6]
- cmp r0, 0
- bne _08029CBC
- cmp r5, 0x4
- beq _08029CBC
- movs r0, 0x58
- adds r2, r1, 0
- muls r2, r0
- adds r0, r5, r2
- mov r1, r10
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08029CBC
- lsls r0, r5, 1
- adds r0, r2
- subs r1, 0x18
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r3, 0x6]
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r9
- strb r5, [r0, 0xC]
- bl Random
- ldrb r2, [r4]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- add r1, r9
- movs r2, 0x3
- ands r2, r0
- adds r2, 0x3
- ldrb r3, [r1, 0xE]
- movs r0, 0x10
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0xE]
- ldrb r0, [r4]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- add r1, r9
- ldrb r3, [r1, 0xE]
- lsls r2, r3, 28
- lsrs r2, 24
- movs r0, 0xF
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0xE]
- ldr r1, _08029CB8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029CD6
- .align 2, 0
-_08029CA8: .4byte gBattleMons
-_08029CAC: .4byte gBattlerTarget
-_08029CB0: .4byte gLastUsedMove
-_08029CB4: .4byte gDisableStructs
-_08029CB8: .4byte gUnknown_2023D74
-_08029CBC:
- ldr r3, _08029CE4 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_08029CD6:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029CE4: .4byte gUnknown_2023D74
- thumb_func_end atkA4_trysetencore
-
- thumb_func_start atkA5_painsplitdmgcalc
-atkA5_painsplitdmgcalc: @ 8029CE8
- push {r4-r7,lr}
- ldr r6, _08029D68 @ =gBattleMons
- ldr r0, _08029D6C @ =gBattlerTarget
- mov r12, r0
- ldrb r0, [r0]
- movs r7, 0x58
- adds r2, r0, 0
- muls r2, r7
- adds r0, r6, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- bne _08029D88
- ldr r5, _08029D70 @ =sBattler_AI
- ldrb r0, [r5]
- muls r0, r7
- adds r0, r6
- ldrh r3, [r0, 0x28]
- adds r0, r2, r6
- ldrh r1, [r0, 0x28]
- adds r3, r1
- asrs r3, 1
- ldr r4, _08029D74 @ =gBattleMoveDamage
- subs r1, r3
- str r1, [r4]
- ldr r2, _08029D78 @ =gBattleScripting
- strb r1, [r2]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- asrs r0, 8
- strb r0, [r2, 0x1]
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- asrs r0, 16
- strb r0, [r2, 0x2]
- lsrs r1, 24
- strb r1, [r2, 0x3]
- ldrb r0, [r5]
- muls r0, r7
- adds r0, r6
- ldrh r0, [r0, 0x28]
- subs r0, r3
- str r0, [r4]
- ldr r2, _08029D7C @ =gUnknown_2023ECC
- mov r0, r12
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x4
- adds r0, r2
- ldr r1, _08029D80 @ =0x0000ffff
- str r1, [r0]
- ldr r1, _08029D84 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029DA2
- .align 2, 0
-_08029D68: .4byte gBattleMons
-_08029D6C: .4byte gBattlerTarget
-_08029D70: .4byte sBattler_AI
-_08029D74: .4byte gBattleMoveDamage
-_08029D78: .4byte gBattleScripting
-_08029D7C: .4byte gUnknown_2023ECC
-_08029D80: .4byte 0x0000ffff
-_08029D84: .4byte gUnknown_2023D74
-_08029D88:
- ldr r3, _08029DA8 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_08029DA2:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029DA8: .4byte gUnknown_2023D74
- thumb_func_end atkA5_painsplitdmgcalc
-
- thumb_func_start atkA6_settypetorandomresistance
-atkA6_settypetorandomresistance: @ 8029DAC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r1, _08029E14 @ =gUnknown_2023DA0
- ldr r4, _08029E18 @ =sBattler_AI
- ldrb r0, [r4]
- lsls r0, 1
- adds r2, r0, r1
- ldrh r1, [r2]
- cmp r1, 0
- beq _08029DF6
- ldr r0, _08029E1C @ =0x0000ffff
- cmp r1, r0
- beq _08029DF6
- ldrh r0, [r2]
- bl IsTwoTurnsMove
- lsls r0, 24
- cmp r0, 0
- beq _08029E94
- ldr r1, _08029E20 @ =gBattleMons
- ldr r2, _08029E24 @ =gUnknown_2023DC0
- ldrb r0, [r4]
- adds r0, r2
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- beq _08029E94
-_08029DF6:
- ldr r3, _08029E28 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08029F80
- .align 2, 0
-_08029E14: .4byte gUnknown_2023DA0
-_08029E18: .4byte sBattler_AI
-_08029E1C: .4byte 0x0000ffff
-_08029E20: .4byte gBattleMons
-_08029E24: .4byte gUnknown_2023DC0
-_08029E28: .4byte gUnknown_2023D74
-_08029E2C:
- mov r0, r12
- strb r5, [r0]
- mov r1, r10
- ldrb r0, [r1]
- muls r0, r2
- adds r0, r7
- adds r0, 0x22
- strb r5, [r0]
- ldr r1, _08029E50 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- strb r5, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r1, _08029E54 @ =gUnknown_2023D74
- b _08029E82
- .align 2, 0
-_08029E50: .4byte gBattleTextBuff1
-_08029E54: .4byte gUnknown_2023D74
-_08029E58:
- mov r0, r8
- adds r0, 0x1
- adds r0, r3
- ldrb r2, [r0]
- strb r2, [r4]
- mov r4, r10
- ldrb r0, [r4]
- muls r0, r6
- ldr r7, _08029E8C @ =gBattleMons
- adds r0, r7
- adds r0, 0x22
- strb r2, [r0]
- ldr r1, _08029E90 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- strb r2, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- mov r1, r12
-_08029E82:
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08029F80
- .align 2, 0
-_08029E8C: .4byte gBattleMons
-_08029E90: .4byte gBattleTextBuff1
-_08029E94:
- movs r4, 0
- mov r8, r4
- movs r7, 0x7F
- mov r9, r7
-_08029E9C:
- bl Random
- mov r4, r9
- ands r4, r0
- cmp r4, 0x70
- bhi _08029E9C
- lsls r0, r4, 1
- adds r4, r0, r4
- ldr r6, _08029F90 @ =gUnknown_824F050
- adds r3, r4, r6
- ldr r1, _08029F94 @ =gUnknown_2023DA8
- ldr r2, _08029F98 @ =sBattler_AI
- ldrb r5, [r2]
- lsls r0, r5, 1
- adds r0, r1
- ldrb r1, [r3]
- mov r10, r2
- ldrh r0, [r0]
- cmp r1, r0
- bne _08029EF8
- adds r0, r4, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _08029EF8
- ldr r7, _08029F9C @ =gBattleMons
- movs r2, 0x58
- adds r0, r5, 0
- muls r0, r2
- adds r3, r0, r7
- movs r0, 0x21
- adds r0, r3
- mov r12, r0
- adds r0, r4, 0x1
- adds r0, r6
- ldrb r5, [r0]
- mov r1, r12
- ldrb r0, [r1]
- adds r1, r5, 0
- cmp r0, r1
- beq _08029EF8
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- bne _08029E2C
-_08029EF8:
- movs r7, 0x1
- add r8, r7
- ldr r0, _08029FA0 @ =0x000003e7
- cmp r8, r0
- ble _08029E9C
- movs r0, 0
- mov r8, r0
- ldr r1, _08029FA4 @ =gUnknown_2023D74
- mov r12, r1
- ldr r3, _08029F90 @ =gUnknown_824F050
- adds r0, r4, 0x1
- adds r0, r3
- mov r9, r0
- adds r5, r3, 0
-_08029F14:
- ldrb r1, [r5]
- cmp r1, 0xFF
- bgt _08029F1E
- cmp r1, 0xFE
- bge _08029F58
-_08029F1E:
- mov r4, r10
- ldrb r2, [r4]
- lsls r0, r2, 1
- ldr r7, _08029F94 @ =gUnknown_2023DA8
- adds r0, r7
- ldrh r0, [r0]
- cmp r1, r0
- bne _08029F58
- ldrb r0, [r5, 0x2]
- cmp r0, 0x5
- bhi _08029F58
- movs r6, 0x58
- adds r0, r2, 0
- muls r0, r6
- ldr r1, _08029F9C @ =gBattleMons
- adds r2, r0, r1
- adds r4, r2, 0
- adds r4, 0x21
- ldrb r0, [r4]
- mov r7, r9
- ldrb r1, [r7]
- cmp r0, r1
- beq _08029F58
- adds r0, r2, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- beq _08029F58
- b _08029E58
-_08029F58:
- adds r5, 0x3
- movs r0, 0x3
- add r8, r0
- ldr r0, _08029FA8 @ =0x0000014f
- cmp r8, r0
- bls _08029F14
- mov r1, r12
- ldr r2, [r1]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- mov r4, r12
- str r1, [r4]
-_08029F80:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08029F90: .4byte gUnknown_824F050
-_08029F94: .4byte gUnknown_2023DA8
-_08029F98: .4byte sBattler_AI
-_08029F9C: .4byte gBattleMons
-_08029FA0: .4byte 0x000003e7
-_08029FA4: .4byte gUnknown_2023D74
-_08029FA8: .4byte 0x0000014f
- thumb_func_end atkA6_settypetorandomresistance
-
- thumb_func_start atkA7_setalwayshitflag
-atkA7_setalwayshitflag: @ 8029FAC
- push {r4,lr}
- ldr r4, _08029FF0 @ =gStatuses3
- ldr r3, _08029FF4 @ =gBattlerTarget
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r4
- ldr r0, [r1]
- movs r2, 0x19
- negs r2, r2
- ands r0, r2
- str r0, [r1]
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r4
- ldr r0, [r1]
- movs r2, 0x10
- orrs r0, r2
- str r0, [r1]
- ldr r2, _08029FF8 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _08029FFC @ =sBattler_AI
- ldrb r1, [r1]
- strb r1, [r0, 0x15]
- ldr r1, _0802A000 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08029FF0: .4byte gStatuses3
-_08029FF4: .4byte gBattlerTarget
-_08029FF8: .4byte gDisableStructs
-_08029FFC: .4byte sBattler_AI
-_0802A000: .4byte gUnknown_2023D74
- thumb_func_end atkA7_setalwayshitflag
-
- thumb_func_start atkA8_copymovepermanently
-atkA8_copymovepermanently: @ 802A004
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r0, _0802A164 @ =gUnknown_2023D4C
- ldr r1, _0802A168 @ =0x0000ffff
- adds r5, r1, 0
- strh r5, [r0]
- ldr r3, _0802A16C @ =gBattleMons
- ldr r2, _0802A170 @ =sBattler_AI
- ldrb r1, [r2]
- movs r0, 0x58
- adds r4, r1, 0
- muls r4, r0
- adds r0, r3, 0
- adds r0, 0x50
- adds r0, r4, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 14
- ands r1, r0
- mov r12, r3
- mov r10, r2
- cmp r1, 0
- beq _0802A03C
- b _0802A190
-_0802A03C:
- ldr r0, _0802A174 @ =gUnknown_2023D90
- ldr r2, _0802A178 @ =gBattlerTarget
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldrh r1, [r1]
- mov r9, r0
- mov r8, r2
- cmp r1, 0xA5
- bne _0802A052
- b _0802A190
-_0802A052:
- cmp r1, 0
- bne _0802A058
- b _0802A190
-_0802A058:
- cmp r1, r5
- bne _0802A05E
- b _0802A190
-_0802A05E:
- cmp r1, 0xA6
- bne _0802A064
- b _0802A190
-_0802A064:
- movs r7, 0
- mov r5, r9
- mov r0, r12
- adds r0, 0xC
- adds r1, r4, r0
- mov r3, r8
-_0802A070:
- ldrh r2, [r1]
- cmp r2, 0xA6
- beq _0802A082
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r2, r0
- beq _0802A08A
-_0802A082:
- adds r1, 0x2
- adds r7, 0x1
- cmp r7, 0x3
- ble _0802A070
-_0802A08A:
- cmp r7, 0x4
- beq _0802A090
- b _0802A190
-_0802A090:
- ldr r4, _0802A17C @ =gUnknown_2023D48
- ldrb r1, [r4]
- lsls r1, 1
- mov r2, r10
- ldrb r0, [r2]
- movs r3, 0x58
- muls r0, r3
- adds r1, r0
- mov r6, r12
- adds r6, 0xC
- adds r1, r6
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- strh r0, [r1]
- mov r1, r10
- ldrb r0, [r1]
- adds r2, r0, 0
- muls r2, r3
- ldrb r4, [r4]
- adds r2, r4
- mov r5, r12
- adds r5, 0x24
- adds r2, r5
- ldr r4, _0802A180 @ =gBattleMoves
- mov r1, r8
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r9
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x4]
- strb r0, [r2]
- ldr r1, _0802A184 @ =gActiveBattler
- mov r2, r10
- ldrb r0, [r2]
- strb r0, [r1]
- movs r7, 0
- ldrb r0, [r2]
- muls r0, r3
- adds r4, r0, r5
- adds r3, r0, 0
- add r2, sp, 0x4
- add r5, sp, 0xC
-_0802A0F2:
- adds r0, r3, r6
- ldrh r0, [r0]
- strh r0, [r2]
- adds r1, r5, r7
- ldrb r0, [r4]
- strb r0, [r1]
- adds r4, 0x1
- adds r3, 0x2
- adds r2, 0x2
- adds r7, 0x1
- cmp r7, 0x3
- ble _0802A0F2
- add r2, sp, 0x4
- mov r0, r10
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- add r0, r12
- adds r0, 0x3B
- ldrb r0, [r0]
- strb r0, [r2, 0xC]
- str r2, [sp]
- movs r0, 0
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x10
- bl EmitSetMonData
- ldr r0, _0802A184 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _0802A188 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldr r3, _0802A174 @ =gUnknown_2023D90
- ldr r2, _0802A178 @ =gBattlerTarget
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _0802A18C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802A1AA
- .align 2, 0
-_0802A164: .4byte gUnknown_2023D4C
-_0802A168: .4byte 0x0000ffff
-_0802A16C: .4byte gBattleMons
-_0802A170: .4byte sBattler_AI
-_0802A174: .4byte gUnknown_2023D90
-_0802A178: .4byte gBattlerTarget
-_0802A17C: .4byte gUnknown_2023D48
-_0802A180: .4byte gBattleMoves
-_0802A184: .4byte gActiveBattler
-_0802A188: .4byte gBattleTextBuff1
-_0802A18C: .4byte gUnknown_2023D74
-_0802A190:
- ldr r3, _0802A1BC @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802A1AA:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A1BC: .4byte gUnknown_2023D74
- thumb_func_end atkA8_copymovepermanently
-
- thumb_func_start IsTwoTurnsMove
-IsTwoTurnsMove: @ 802A1C0
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _0802A1F0 @ =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1]
- cmp r0, 0x91
- beq _0802A1EA
- cmp r0, 0x27
- beq _0802A1EA
- cmp r0, 0x4B
- beq _0802A1EA
- cmp r0, 0x97
- beq _0802A1EA
- cmp r0, 0x9B
- beq _0802A1EA
- cmp r0, 0x1A
- bne _0802A1F4
-_0802A1EA:
- movs r0, 0x1
- b _0802A1F6
- .align 2, 0
-_0802A1F0: .4byte gBattleMoves
-_0802A1F4:
- movs r0, 0
-_0802A1F6:
- pop {r1}
- bx r1
- thumb_func_end IsTwoTurnsMove
-
- thumb_func_start IsInvalidForSleepTalkOrAssist
-IsInvalidForSleepTalkOrAssist: @ 802A1FC
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _0802A21A
- cmp r1, 0xD6
- beq _0802A21A
- movs r0, 0x89
- lsls r0, 1
- cmp r1, r0
- beq _0802A21A
- cmp r1, 0x77
- beq _0802A21A
- cmp r1, 0x76
- bne _0802A21E
-_0802A21A:
- movs r0, 0x1
- b _0802A220
-_0802A21E:
- movs r0, 0
-_0802A220:
- pop {r1}
- bx r1
- thumb_func_end IsInvalidForSleepTalkOrAssist
-
- thumb_func_start AttacksThisTurn
-AttacksThisTurn: @ 802A224
- push {lr}
- lsls r1, 16
- lsrs r2, r1, 16
- ldr r1, _0802A27C @ =gBattleMoves
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- adds r3, r1, 0
- cmp r0, 0x97
- bne _0802A248
- ldr r0, _0802A280 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- bne _0802A288
-_0802A248:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, 0x91
- beq _0802A26A
- cmp r0, 0x27
- beq _0802A26A
- cmp r0, 0x4B
- beq _0802A26A
- cmp r0, 0x97
- beq _0802A26A
- cmp r0, 0x9B
- beq _0802A26A
- cmp r0, 0x1A
- bne _0802A288
-_0802A26A:
- ldr r0, _0802A284 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 20
- ands r0, r1
- cmp r0, 0
- beq _0802A288
- movs r0, 0x1
- b _0802A28A
- .align 2, 0
-_0802A27C: .4byte gBattleMoves
-_0802A280: .4byte gBattleWeather
-_0802A284: .4byte gUnknown_2023DD0
-_0802A288:
- movs r0, 0x2
-_0802A28A:
- pop {r1}
- bx r1
- thumb_func_end AttacksThisTurn
-
- thumb_func_start atkA9_trychoosesleeptalkmove
-atkA9_trychoosesleeptalkmove: @ 802A290
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- movs r5, 0
- ldr r0, _0802A320 @ =sBattler_AI
- mov r9, r0
- movs r1, 0x58
- mov r8, r1
- ldr r7, _0802A324 @ =gUnknown_2023BF0
- movs r0, 0x84
- lsls r0, 1
- mov r10, r0
-_0802A2AE:
- lsls r4, r5, 1
- mov r1, r9
- ldrb r0, [r1]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r4, r0
- adds r0, r7
- ldrh r0, [r0]
- bl IsInvalidForSleepTalkOrAssist
- lsls r0, 24
- cmp r0, 0
- bne _0802A2EE
- mov r1, r9
- ldrb r0, [r1]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r4, r0
- adds r0, r7
- ldrh r1, [r0]
- cmp r1, r10
- beq _0802A2EE
- cmp r1, 0xFD
- beq _0802A2EE
- adds r0, r1, 0
- bl IsTwoTurnsMove
- lsls r0, 24
- cmp r0, 0
- beq _0802A2FC
-_0802A2EE:
- ldr r1, _0802A328 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r1
- ldr r0, [r0]
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0802A2FC:
- adds r5, 0x1
- cmp r5, 0x3
- ble _0802A2AE
- ldr r0, _0802A320 @ =sBattler_AI
- ldrb r0, [r0]
- adds r1, r6, 0
- movs r2, 0xFD
- bl CheckMoveLimitations
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xF
- bne _0802A330
- ldr r1, _0802A32C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802A394
- .align 2, 0
-_0802A320: .4byte sBattler_AI
-_0802A324: .4byte gUnknown_2023BF0
-_0802A328: .4byte gBitTable
-_0802A32C: .4byte gUnknown_2023D74
-_0802A330:
- movs r7, 0x3
- ldr r4, _0802A3A4 @ =gBitTable
-_0802A334:
- bl Random
- adds r5, r7, 0
- ands r5, r0
- lsls r0, r5, 2
- adds r0, r4
- ldr r0, [r0]
- ands r0, r6
- cmp r0, 0
- bne _0802A334
- ldr r4, _0802A3A8 @ =gUnknown_2023D4E
- ldr r2, _0802A3AC @ =gBattleMons
- lsls r1, r5, 1
- ldr r0, _0802A3B0 @ =sBattler_AI
- ldrb r3, [r0]
- movs r0, 0x58
- muls r0, r3
- adds r1, r0
- adds r2, 0xC
- adds r1, r2
- ldrh r0, [r1]
- strh r0, [r4]
- ldr r0, _0802A3B4 @ =gUnknown_2023D48
- strb r5, [r0]
- ldr r2, _0802A3B8 @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _0802A3BC @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldrh r0, [r4]
- movs r1, 0
- bl GetMoveTarget
- ldr r1, _0802A3C0 @ =gBattlerTarget
- strb r0, [r1]
- ldr r3, _0802A3C4 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802A394:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A3A4: .4byte gBitTable
-_0802A3A8: .4byte gUnknown_2023D4E
-_0802A3AC: .4byte gBattleMons
-_0802A3B0: .4byte sBattler_AI
-_0802A3B4: .4byte gUnknown_2023D48
-_0802A3B8: .4byte gUnknown_2023DD0
-_0802A3BC: .4byte 0xfffffbff
-_0802A3C0: .4byte gBattlerTarget
-_0802A3C4: .4byte gUnknown_2023D74
- thumb_func_end atkA9_trychoosesleeptalkmove
-
- thumb_func_start atkAA_setdestinybond
-atkAA_setdestinybond: @ 802A3C8
- ldr r1, _0802A3EC @ =gBattleMons
- ldr r0, _0802A3F0 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 18
- orrs r0, r1
- str r0, [r2]
- ldr r1, _0802A3F4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802A3EC: .4byte gBattleMons
-_0802A3F0: .4byte sBattler_AI
-_0802A3F4: .4byte gUnknown_2023D74
- thumb_func_end atkAA_setdestinybond
-
- thumb_func_start TrySetDestinyBondToHappen
-TrySetDestinyBondToHappen: @ 802A3F8
- push {r4,r5,lr}
- ldr r0, _0802A448 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _0802A44C @ =gBattlerTarget
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, _0802A450 @ =gBattleMons
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _0802A442
- cmp r5, r3
- beq _0802A442
- ldr r2, _0802A454 @ =gUnknown_2023DD0
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 17
- ands r0, r1
- cmp r0, 0
- bne _0802A442
- movs r0, 0x40
- orrs r1, r0
- str r1, [r2]
-_0802A442:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A448: .4byte sBattler_AI
-_0802A44C: .4byte gBattlerTarget
-_0802A450: .4byte gBattleMons
-_0802A454: .4byte gUnknown_2023DD0
- thumb_func_end TrySetDestinyBondToHappen
-
- thumb_func_start atkAB_trysetdestinybondtohappen
-atkAB_trysetdestinybondtohappen: @ 802A458
- push {lr}
- bl TrySetDestinyBondToHappen
- ldr r1, _0802A46C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802A46C: .4byte gUnknown_2023D74
- thumb_func_end atkAB_trysetdestinybondtohappen
-
- thumb_func_start atkAC_remaininghptopower
-atkAC_remaininghptopower: @ 802A470
- push {lr}
- ldr r2, _0802A4C4 @ =gBattleMons
- ldr r0, _0802A4C8 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r1, r2
- movs r2, 0x28
- ldrsh r0, [r1, r2]
- movs r2, 0x2C
- ldrsh r1, [r1, r2]
- movs r2, 0x30
- bl GetScaledHPFraction
- lsls r0, 24
- lsrs r1, r0, 24
- movs r3, 0
- ldr r0, _0802A4CC @ =gUnknown_8250810
- ldrb r2, [r0]
- cmp r1, r2
- ble _0802A4AA
- adds r2, r0, 0
-_0802A49C:
- adds r3, 0x2
- cmp r3, 0xB
- bgt _0802A4AA
- adds r0, r3, r2
- ldrb r0, [r0]
- cmp r1, r0
- bgt _0802A49C
-_0802A4AA:
- ldr r2, _0802A4D0 @ =gDynamicBasePower
- ldr r1, _0802A4CC @ =gUnknown_8250810
- adds r0, r3, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strh r0, [r2]
- ldr r1, _0802A4D4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802A4C4: .4byte gBattleMons
-_0802A4C8: .4byte sBattler_AI
-_0802A4CC: .4byte gUnknown_8250810
-_0802A4D0: .4byte gDynamicBasePower
-_0802A4D4: .4byte gUnknown_2023D74
- thumb_func_end atkAC_remaininghptopower
-
- thumb_func_start atkAD_tryspiteppreduce
-atkAD_tryspiteppreduce: @ 802A4D8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r4, _0802A658 @ =gLastUsedMove
- ldr r1, _0802A65C @ =gBattlerTarget
- ldrb r3, [r1]
- lsls r0, r3, 1
- adds r0, r4
- ldrh r2, [r0]
- mov r8, r1
- cmp r2, 0
- bne _0802A4F8
- b _0802A680
-_0802A4F8:
- ldr r0, _0802A660 @ =0x0000ffff
- cmp r2, r0
- bne _0802A500
- b _0802A680
-_0802A500:
- movs r7, 0
- ldr r0, _0802A664 @ =gBattleMons
- movs r1, 0x58
- muls r1, r3
- adds r3, r0, 0
- adds r3, 0xC
- adds r1, r3
- ldrh r1, [r1]
- cmp r2, r1
- beq _0802A538
- adds r6, r4, 0
- mov r5, r8
- adds r4, r3, 0
- movs r3, 0x58
-_0802A51C:
- adds r7, 0x1
- cmp r7, 0x3
- bgt _0802A538
- ldrb r0, [r5]
- lsls r2, r0, 1
- adds r2, r6
- lsls r1, r7, 1
- muls r0, r3
- adds r1, r0
- adds r1, r4
- ldrh r0, [r2]
- ldrh r1, [r1]
- cmp r0, r1
- bne _0802A51C
-_0802A538:
- cmp r7, 0x4
- bne _0802A53E
- b _0802A680
-_0802A53E:
- mov r4, r8
- ldrb r0, [r4]
- movs r1, 0x58
- mov r9, r1
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7, r0
- ldr r1, _0802A664 @ =gBattleMons
- adds r1, 0x24
- mov r10, r1
- add r0, r10
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _0802A55E
- b _0802A680
-_0802A55E:
- bl Random
- movs r1, 0x3
- ands r1, r0
- adds r6, r1, 0x2
- ldrb r0, [r4]
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- adds r0, r7, r0
- add r0, r10
- ldrb r0, [r0]
- cmp r0, r6
- bge _0802A57C
- adds r6, r0, 0
-_0802A57C:
- ldr r1, _0802A668 @ =gBattleTextBuff1
- movs r5, 0xFD
- strb r5, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldr r2, _0802A658 @ =gLastUsedMove
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r4, _0802A66C @ =gBattleTextBuff2
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- strb r5, [r4]
- movs r0, 0x1
- strb r0, [r4, 0x1]
- strb r0, [r4, 0x2]
- strb r0, [r4, 0x3]
- strb r6, [r4, 0x4]
- subs r0, 0x2
- strb r0, [r4, 0x5]
- mov r1, r8
- ldrb r0, [r1]
- mov r1, r9
- muls r1, r0
- adds r1, r7, r1
- add r1, r10
- ldrb r0, [r1]
- subs r0, r6
- strb r0, [r1]
- ldr r4, _0802A670 @ =gActiveBattler
- mov r3, r8
- ldrb r0, [r3]
- strb r0, [r4]
- ldr r1, _0802A674 @ =gDisableStructs
- ldrb r3, [r4]
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _0802A678 @ =gBitTable
- lsls r0, r7, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802A630
- mov r2, r9
- muls r2, r3
- ldr r0, _0802A664 @ =gBattleMons
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _0802A630
- adds r1, r7, 0
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- mov r3, r10
- adds r0, r2, r3
- adds r0, r7
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_0802A630:
- ldr r1, _0802A67C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- ldr r1, _0802A664 @ =gBattleMons
- ldr r0, _0802A65C @ =gBattlerTarget
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r7, r0
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802A69A
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- b _0802A69A
- .align 2, 0
-_0802A658: .4byte gLastUsedMove
-_0802A65C: .4byte gBattlerTarget
-_0802A660: .4byte 0x0000ffff
-_0802A664: .4byte gBattleMons
-_0802A668: .4byte gBattleTextBuff1
-_0802A66C: .4byte gBattleTextBuff2
-_0802A670: .4byte gActiveBattler
-_0802A674: .4byte gDisableStructs
-_0802A678: .4byte gBitTable
-_0802A67C: .4byte gUnknown_2023D74
-_0802A680:
- ldr r3, _0802A6AC @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802A69A:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A6AC: .4byte gUnknown_2023D74
- thumb_func_end atkAD_tryspiteppreduce
-
- thumb_func_start atkAE_healpartystatus
-atkAE_healpartystatus: @ 802A6B0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r4, 0
- str r4, [sp, 0x4]
- mov r8, r4
- ldr r0, _0802A720 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xD7
- beq _0802A6CC
- b _0802A8B6
-_0802A6CC:
- ldr r6, _0802A724 @ =gUnknown_2023E82
- mov r0, r8
- strb r0, [r6, 0x5]
- ldr r5, _0802A728 @ =sBattler_AI
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _0802A72C @ =gEnemyParty
- mov r10, r1
- cmp r0, 0
- bne _0802A6E8
- ldr r2, _0802A730 @ =gPlayerParty
- mov r10, r2
-_0802A6E8:
- ldr r4, _0802A734 @ =gBattleMons
- ldrb r3, [r5]
- movs r7, 0x58
- adds r2, r3, 0
- muls r2, r7
- adds r0, r2, r4
- adds r1, r0, 0
- adds r1, 0x20
- ldrb r0, [r1]
- cmp r0, 0x2B
- beq _0802A73C
- adds r0, r4, 0
- adds r0, 0x4C
- adds r0, r2, r0
- mov r1, r8
- str r1, [r0]
- ldrb r0, [r5]
- adds r2, r0, 0
- muls r2, r7
- adds r0, r4, 0
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _0802A738 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- b _0802A74C
- .align 2, 0
-_0802A720: .4byte gCurrentMove
-_0802A724: .4byte gUnknown_2023E82
-_0802A728: .4byte sBattler_AI
-_0802A72C: .4byte gEnemyParty
-_0802A730: .4byte gPlayerParty
-_0802A734: .4byte gBattleMons
-_0802A738: .4byte 0xf7ffffff
-_0802A73C:
- ldrb r1, [r1]
- adds r0, r3, 0
- bl sub_80C71D0
- ldrb r0, [r6, 0x5]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r6, 0x5]
-_0802A74C:
- ldr r7, _0802A7C0 @ =gActiveBattler
- ldr r0, _0802A7C4 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerPosition
- movs r2, 0x2
- mov r9, r2
- mov r1, r9
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r1, _0802A7C8 @ =gBattleScripting
- strb r0, [r1, 0x17]
- strb r0, [r7]
- ldr r0, _0802A7CC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802A7F2
- ldr r0, _0802A7D0 @ =gAbsentBattlerFlags
- ldrb r2, [r0]
- ldr r1, _0802A7D4 @ =gBitTable
- ldrb r3, [r7]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- bne _0802A7F2
- ldr r5, _0802A7D8 @ =gBattleMons
- movs r6, 0x58
- adds r4, r3, 0
- muls r4, r6
- adds r0, r4, r5
- adds r1, r0, 0
- adds r1, 0x20
- ldrb r0, [r1]
- cmp r0, 0x2B
- beq _0802A7E0
- adds r0, r5, 0
- adds r0, 0x4C
- adds r0, r4, r0
- str r2, [r0]
- ldrb r0, [r7]
- adds r2, r0, 0
- muls r2, r6
- adds r0, r5, 0
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _0802A7DC @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- b _0802A7F2
- .align 2, 0
-_0802A7C0: .4byte gActiveBattler
-_0802A7C4: .4byte sBattler_AI
-_0802A7C8: .4byte gBattleScripting
-_0802A7CC: .4byte gBattleTypeFlags
-_0802A7D0: .4byte gAbsentBattlerFlags
-_0802A7D4: .4byte gBitTable
-_0802A7D8: .4byte gBattleMons
-_0802A7DC: .4byte 0xf7ffffff
-_0802A7E0:
- ldrb r1, [r1]
- adds r0, r3, 0
- bl sub_80C71D0
- ldr r1, _0802A838 @ =gUnknown_2023E82
- ldrb r0, [r1, 0x5]
- mov r2, r9
- orrs r0, r2
- strb r0, [r1, 0x5]
-_0802A7F2:
- movs r6, 0
- ldr r7, _0802A83C @ =gBattleMons
-_0802A7F6:
- movs r0, 0x64
- adds r4, r6, 0
- muls r4, r0
- add r4, r10
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r5, 0
- beq _0802A8AE
- movs r0, 0xCE
- lsls r0, 1
- cmp r5, r0
- beq _0802A8AE
- ldr r2, _0802A840 @ =gBattlerPartyIndexes
- ldr r0, _0802A844 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r6
- bne _0802A848
- movs r0, 0x58
- muls r0, r1
- b _0802A878
- .align 2, 0
-_0802A838: .4byte gUnknown_2023E82
-_0802A83C: .4byte gBattleMons
-_0802A840: .4byte gBattlerPartyIndexes
-_0802A844: .4byte sBattler_AI
-_0802A848:
- ldr r0, _0802A880 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802A890
- ldr r0, _0802A884 @ =gActiveBattler
- ldrb r3, [r0]
- lsls r0, r3, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r6
- bne _0802A890
- ldr r0, _0802A888 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0802A88C @ =gBitTable
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802A890
- movs r0, 0x58
- muls r0, r3
-_0802A878:
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- b _0802A89C
- .align 2, 0
-_0802A880: .4byte gBattleTypeFlags
-_0802A884: .4byte gActiveBattler
-_0802A888: .4byte gAbsentBattlerFlags
-_0802A88C: .4byte gBitTable
-_0802A890:
- adds r0, r5, 0
- adds r1, r4, 0
- bl GetAbilityBySpecies
- lsls r0, 24
- lsrs r0, 24
-_0802A89C:
- cmp r0, 0x2B
- beq _0802A8AE
- movs r0, 0x1
- lsls r0, r6
- mov r1, r8
- orrs r1, r0
- lsls r0, r1, 24
- lsrs r0, 24
- mov r8, r0
-_0802A8AE:
- adds r6, 0x1
- cmp r6, 0x5
- ble _0802A7F6
- b _0802A934
-_0802A8B6:
- ldr r1, _0802A970 @ =gUnknown_2023E82
- movs r0, 0x4
- strb r0, [r1, 0x5]
- movs r2, 0x3F
- mov r8, r2
- ldr r3, _0802A974 @ =gBattleMons
- ldr r2, _0802A978 @ =sBattler_AI
- ldrb r0, [r2]
- movs r5, 0x58
- muls r0, r5
- movs r1, 0x4C
- adds r1, r3
- mov r9, r1
- add r0, r9
- str r4, [r0]
- ldrb r0, [r2]
- adds r1, r0, 0
- muls r1, r5
- adds r7, r3, 0
- adds r7, 0x50
- adds r1, r7
- ldr r0, [r1]
- ldr r6, _0802A97C @ =0xf7ffffff
- ands r0, r6
- str r0, [r1]
- ldrb r0, [r2]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r4, _0802A980 @ =gActiveBattler
- strb r0, [r4]
- ldr r0, _0802A984 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802A934
- ldr r0, _0802A988 @ =gAbsentBattlerFlags
- ldrb r2, [r0]
- ldr r1, _0802A98C @ =gBitTable
- ldrb r3, [r4]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- bne _0802A934
- adds r0, r3, 0
- muls r0, r5
- add r0, r9
- str r2, [r0]
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r7
- ldr r0, [r1]
- ands r0, r6
- str r0, [r1]
-_0802A934:
- mov r2, r8
- cmp r2, 0
- beq _0802A956
- ldr r4, _0802A980 @ =gActiveBattler
- ldr r0, _0802A978 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r4]
- add r0, sp, 0x4
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_0802A956:
- ldr r1, _0802A990 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802A970: .4byte gUnknown_2023E82
-_0802A974: .4byte gBattleMons
-_0802A978: .4byte sBattler_AI
-_0802A97C: .4byte 0xf7ffffff
-_0802A980: .4byte gActiveBattler
-_0802A984: .4byte gBattleTypeFlags
-_0802A988: .4byte gAbsentBattlerFlags
-_0802A98C: .4byte gBitTable
-_0802A990: .4byte gUnknown_2023D74
- thumb_func_end atkAE_healpartystatus
-
- thumb_func_start atkAF_cursetarget
-atkAF_cursetarget: @ 802A994
- push {r4,r5,lr}
- ldr r5, _0802A9D4 @ =gBattleMons
- ldr r0, _0802A9D8 @ =gBattlerTarget
- ldrb r0, [r0]
- movs r4, 0x58
- adds r1, r0, 0
- muls r1, r4
- adds r0, r5, 0
- adds r0, 0x50
- adds r1, r0
- ldr r2, [r1]
- movs r3, 0x80
- lsls r3, 21
- adds r0, r2, 0
- ands r0, r3
- cmp r0, 0
- beq _0802A9E0
- ldr r3, _0802A9DC @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802AA04
- .align 2, 0
-_0802A9D4: .4byte gBattleMons
-_0802A9D8: .4byte gBattlerTarget
-_0802A9DC: .4byte gUnknown_2023D74
-_0802A9E0:
- orrs r2, r3
- str r2, [r1]
- ldr r1, _0802AA0C @ =gBattleMoveDamage
- ldr r0, _0802AA10 @ =sBattler_AI
- ldrb r0, [r0]
- muls r0, r4
- adds r0, r5
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _0802A9FC
- movs r0, 0x1
- str r0, [r1]
-_0802A9FC:
- ldr r1, _0802AA14 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802AA04:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AA0C: .4byte gBattleMoveDamage
-_0802AA10: .4byte sBattler_AI
-_0802AA14: .4byte gUnknown_2023D74
- thumb_func_end atkAF_cursetarget
-
- thumb_func_start atkB0_trysetspikes
-atkB0_trysetspikes: @ 802AA18
- push {r4,lr}
- ldr r4, _0802AA6C @ =sBattler_AI
- ldrb r0, [r4]
- bl GetBattlerSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0802AA70 @ =gSideTimers
- lsls r2, r0, 1
- adds r0, r2, r0
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3, 0xA]
- cmp r0, 0x3
- bne _0802AA7C
- ldr r2, _0802AA74 @ =gUnknown_2023ECC
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r3, _0802AA78 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802AA96
- .align 2, 0
-_0802AA6C: .4byte sBattler_AI
-_0802AA70: .4byte gSideTimers
-_0802AA74: .4byte gUnknown_2023ECC
-_0802AA78: .4byte gUnknown_2023D74
-_0802AA7C:
- ldr r1, _0802AA9C @ =gSideAffecting
- adds r1, r2, r1
- ldrh r2, [r1]
- movs r0, 0x10
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r3, 0xA]
- adds r0, 0x1
- strb r0, [r3, 0xA]
- ldr r1, _0802AAA0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802AA96:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AA9C: .4byte gSideAffecting
-_0802AAA0: .4byte gUnknown_2023D74
- thumb_func_end atkB0_trysetspikes
-
- thumb_func_start atkB1_setforesight
-atkB1_setforesight: @ 802AAA4
- ldr r1, _0802AAC8 @ =gBattleMons
- ldr r0, _0802AACC @ =gBattlerTarget
- ldrb r2, [r0]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 22
- orrs r0, r1
- str r0, [r2]
- ldr r1, _0802AAD0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802AAC8: .4byte gBattleMons
-_0802AACC: .4byte gBattlerTarget
-_0802AAD0: .4byte gUnknown_2023D74
- thumb_func_end atkB1_setforesight
-
- thumb_func_start atkB2_trysetperishsong
-atkB2_trysetperishsong: @ 802AAD4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r6, 0
- movs r3, 0
- ldr r0, _0802AB18 @ =gBattlersCount
- adds r7, r0, 0
- ldr r0, _0802AB1C @ =sBattler_AI
- mov r8, r0
- ldrb r1, [r7]
- cmp r6, r1
- bge _0802AB40
- movs r5, 0x20
- ldr r0, _0802AB20 @ =gBattleMons
- mov r12, r0
- ldr r0, _0802AB24 @ =gDisableStructs
- adds r4, r0, 0
- adds r4, 0xF
- ldr r2, _0802AB28 @ =gStatuses3
-_0802AAFC:
- ldr r1, [r2]
- adds r0, r1, 0
- ands r0, r5
- cmp r0, 0
- bne _0802AB14
- movs r0, 0x58
- muls r0, r3
- add r0, r12
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2B
- bne _0802AB2C
-_0802AB14:
- adds r6, 0x1
- b _0802AB34
- .align 2, 0
-_0802AB18: .4byte gBattlersCount
-_0802AB1C: .4byte sBattler_AI
-_0802AB20: .4byte gBattleMons
-_0802AB24: .4byte gDisableStructs
-_0802AB28: .4byte gStatuses3
-_0802AB2C:
- orrs r1, r5
- str r1, [r2]
- movs r0, 0x33
- strb r0, [r4]
-_0802AB34:
- adds r4, 0x1C
- adds r2, 0x4
- adds r3, 0x1
- ldrb r0, [r7]
- cmp r3, r0
- blt _0802AAFC
-_0802AB40:
- mov r1, r8
- ldrb r0, [r1]
- bl PressurePPLoseOnUsingPerishSong
- ldr r0, _0802AB6C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r6, r0
- bne _0802AB74
- ldr r3, _0802AB70 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802AB7C
- .align 2, 0
-_0802AB6C: .4byte gBattlersCount
-_0802AB70: .4byte gUnknown_2023D74
-_0802AB74:
- ldr r1, _0802AB88 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802AB7C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AB88: .4byte gUnknown_2023D74
- thumb_func_end atkB2_trysetperishsong
-
- thumb_func_start atkB3_rolloutdamagecalculation
-atkB3_rolloutdamagecalculation: @ 802AB8C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _0802ABB0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0802ABC0
- ldr r0, _0802ABB4 @ =sBattler_AI
- ldrb r0, [r0]
- bl CancelMultiTurnMoves
- ldr r1, _0802ABB8 @ =gUnknown_2023D74
- ldr r0, _0802ABBC @ =gUnknown_81D6960
- str r0, [r1]
- b _0802ACD8
- .align 2, 0
-_0802ABB0: .4byte gMoveResultFlags
-_0802ABB4: .4byte sBattler_AI
-_0802ABB8: .4byte gUnknown_2023D74
-_0802ABBC: .4byte gUnknown_81D6960
-_0802ABC0:
- ldr r2, _0802ACE4 @ =gBattleMons
- ldr r1, _0802ACE8 @ =sBattler_AI
- ldrb r3, [r1]
- movs r5, 0x58
- adds r0, r3, 0
- muls r0, r5
- adds r4, r2, 0
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r7, 0x80
- lsls r7, 5
- ands r0, r7
- adds r6, r1, 0
- mov r9, r2
- ldr r1, _0802ACEC @ =gDisableStructs
- mov r12, r1
- ldr r2, _0802ACF0 @ =gCurrentMove
- mov r8, r2
- cmp r0, 0
- bne _0802AC32
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- add r0, r12
- ldrb r2, [r0, 0x11]
- movs r1, 0x10
- negs r1, r1
- ands r1, r2
- movs r2, 0x5
- orrs r1, r2
- strb r1, [r0, 0x11]
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r2, [r0, 0x11]
- movs r1, 0xF
- ands r1, r2
- movs r2, 0x50
- orrs r1, r2
- strb r1, [r0, 0x11]
- ldrb r0, [r6]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r4
- ldr r0, [r1]
- orrs r0, r7
- str r0, [r1]
- ldr r1, _0802ACF4 @ =gUnknown_2023DB8
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r1
- mov r2, r8
- ldrh r1, [r2]
- strh r1, [r0]
-_0802AC32:
- ldrb r0, [r6]
- lsls r2, r0, 3
- subs r2, r0
- lsls r2, 2
- add r2, r12
- ldrb r3, [r2, 0x11]
- lsls r1, r3, 28
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r0, 0x10
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x11]
- cmp r1, 0
- bne _0802AC66
- ldrb r0, [r6]
- adds r1, r0, 0
- muls r1, r5
- adds r1, r4
- ldr r0, [r1]
- ldr r2, _0802ACF8 @ =0xffffefff
- ands r0, r2
- str r0, [r1]
-_0802AC66:
- ldr r3, _0802ACFC @ =gDynamicBasePower
- ldr r2, _0802AD00 @ =gBattleMoves
- mov r0, r8
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- strh r0, [r3]
- movs r2, 0x1
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- mov r1, r12
- adds r4, r0, r1
- ldrb r0, [r4, 0x11]
- lsls r0, 28
- lsrs r0, 28
- movs r1, 0x5
- subs r1, r0
- ldr r7, _0802AD04 @ =gUnknown_2023D74
- adds r5, r3, 0
- cmp r2, r1
- bge _0802ACB4
- adds r1, r5, 0
- adds r3, r4, 0
- movs r4, 0x5
-_0802ACA0:
- ldrh r0, [r1]
- lsls r0, 1
- strh r0, [r1]
- adds r2, 0x1
- ldrb r0, [r3, 0x11]
- lsls r0, 28
- lsrs r0, 28
- subs r0, r4, r0
- cmp r2, r0
- blt _0802ACA0
-_0802ACB4:
- ldrb r1, [r6]
- movs r0, 0x58
- muls r0, r1
- mov r1, r9
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 23
- ands r0, r1
- cmp r0, 0
- beq _0802ACD2
- ldrh r0, [r5]
- lsls r0, 1
- strh r0, [r5]
-_0802ACD2:
- ldr r0, [r7]
- adds r0, 0x1
- str r0, [r7]
-_0802ACD8:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802ACE4: .4byte gBattleMons
-_0802ACE8: .4byte sBattler_AI
-_0802ACEC: .4byte gDisableStructs
-_0802ACF0: .4byte gCurrentMove
-_0802ACF4: .4byte gUnknown_2023DB8
-_0802ACF8: .4byte 0xffffefff
-_0802ACFC: .4byte gDynamicBasePower
-_0802AD00: .4byte gBattleMoves
-_0802AD04: .4byte gUnknown_2023D74
- thumb_func_end atkB3_rolloutdamagecalculation
-
- thumb_func_start atkB4_jumpifconfusedandstatmaxed
-atkB4_jumpifconfusedandstatmaxed: @ 802AD08
- push {r4,r5,lr}
- ldr r5, _0802AD58 @ =gBattleMons
- ldr r0, _0802AD5C @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- adds r3, r1, 0
- muls r3, r0
- adds r0, r5, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- ldr r4, _0802AD60 @ =gUnknown_2023D74
- cmp r0, 0
- beq _0802AD64
- ldr r2, [r4]
- ldrb r0, [r2, 0x1]
- adds r0, r3
- adds r1, r5, 0
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xC
- bne _0802AD64
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _0802AD6A
- .align 2, 0
-_0802AD58: .4byte gBattleMons
-_0802AD5C: .4byte gBattlerTarget
-_0802AD60: .4byte gUnknown_2023D74
-_0802AD64:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_0802AD6A:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end atkB4_jumpifconfusedandstatmaxed
-
- thumb_func_start atkB5_furycuttercalc
-atkB5_furycuttercalc: @ 802AD70
- push {r4,r5,lr}
- ldr r0, _0802AD98 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0802ADAC
- ldr r2, _0802AD9C @ =gDisableStructs
- ldr r0, _0802ADA0 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x10]
- ldr r1, _0802ADA4 @ =gUnknown_2023D74
- ldr r0, _0802ADA8 @ =gUnknown_81D6960
- str r0, [r1]
- b _0802AE04
- .align 2, 0
-_0802AD98: .4byte gMoveResultFlags
-_0802AD9C: .4byte gDisableStructs
-_0802ADA0: .4byte sBattler_AI
-_0802ADA4: .4byte gUnknown_2023D74
-_0802ADA8: .4byte gUnknown_81D6960
-_0802ADAC:
- ldr r5, _0802AE0C @ =gDisableStructs
- ldr r4, _0802AE10 @ =sBattler_AI
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1, 0x10]
- cmp r0, 0x5
- beq _0802ADC4
- adds r0, 0x1
- strb r0, [r1, 0x10]
-_0802ADC4:
- ldr r3, _0802AE14 @ =gDynamicBasePower
- ldr r2, _0802AE18 @ =gBattleMoves
- ldr r0, _0802AE1C @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- strh r0, [r3]
- movs r2, 0x1
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r4, _0802AE20 @ =gUnknown_2023D74
- ldrb r1, [r0, 0x10]
- cmp r2, r1
- bge _0802ADFE
- adds r1, r3, 0
- adds r3, r0, 0
-_0802ADF0:
- ldrh r0, [r1]
- lsls r0, 1
- strh r0, [r1]
- adds r2, 0x1
- ldrb r0, [r3, 0x10]
- cmp r2, r0
- blt _0802ADF0
-_0802ADFE:
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
-_0802AE04:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AE0C: .4byte gDisableStructs
-_0802AE10: .4byte sBattler_AI
-_0802AE14: .4byte gDynamicBasePower
-_0802AE18: .4byte gBattleMoves
-_0802AE1C: .4byte gCurrentMove
-_0802AE20: .4byte gUnknown_2023D74
- thumb_func_end atkB5_furycuttercalc
-
- thumb_func_start atkB6_happinesstodamagecalculation
-atkB6_happinesstodamagecalculation: @ 802AE24
- push {r4,lr}
- ldr r2, _0802AE50 @ =gBattleMoves
- ldr r0, _0802AE54 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x79
- bne _0802AE64
- ldr r4, _0802AE58 @ =gDynamicBasePower
- ldr r2, _0802AE5C @ =gBattleMons
- ldr r0, _0802AE60 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2B
- ldrb r1, [r0]
- b _0802AE7A
- .align 2, 0
-_0802AE50: .4byte gBattleMoves
-_0802AE54: .4byte gCurrentMove
-_0802AE58: .4byte gDynamicBasePower
-_0802AE5C: .4byte gBattleMons
-_0802AE60: .4byte sBattler_AI
-_0802AE64:
- ldr r4, _0802AE98 @ =gDynamicBasePower
- ldr r2, _0802AE9C @ =gBattleMons
- ldr r0, _0802AEA0 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2B
- ldrb r0, [r0]
- movs r1, 0xFF
- subs r1, r0
-_0802AE7A:
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- movs r1, 0x19
- bl __divsi3
- strh r0, [r4]
- ldr r1, _0802AEA4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AE98: .4byte gDynamicBasePower
-_0802AE9C: .4byte gBattleMons
-_0802AEA0: .4byte sBattler_AI
-_0802AEA4: .4byte gUnknown_2023D74
- thumb_func_end atkB6_happinesstodamagecalculation
-
- thumb_func_start atkB7_presentdamagecalculation
-atkB7_presentdamagecalculation: @ 802AEA8
- push {r4,lr}
- bl Random
- movs r4, 0xFF
- ands r4, r0
- cmp r4, 0x65
- bgt _0802AEC4
- ldr r1, _0802AEC0 @ =gDynamicBasePower
- movs r0, 0x28
- strh r0, [r1]
- b _0802AF06
- .align 2, 0
-_0802AEC0: .4byte gDynamicBasePower
-_0802AEC4:
- cmp r4, 0xB1
- bgt _0802AED4
- ldr r1, _0802AED0 @ =gDynamicBasePower
- movs r0, 0x50
- strh r0, [r1]
- b _0802AF06
- .align 2, 0
-_0802AED0: .4byte gDynamicBasePower
-_0802AED4:
- cmp r4, 0xCB
- bgt _0802AEE4
- ldr r1, _0802AEE0 @ =gDynamicBasePower
- movs r0, 0x78
- strh r0, [r1]
- b _0802AF06
- .align 2, 0
-_0802AEE0: .4byte gDynamicBasePower
-_0802AEE4:
- ldr r3, _0802AF10 @ =gBattleMoveDamage
- ldr r2, _0802AF14 @ =gBattleMons
- ldr r0, _0802AF18 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2C]
- lsrs r0, 2
- str r0, [r3]
- cmp r0, 0
- bne _0802AF00
- movs r0, 0x1
- str r0, [r3]
-_0802AF00:
- ldr r0, [r3]
- negs r0, r0
- str r0, [r3]
-_0802AF06:
- cmp r4, 0xCB
- bgt _0802AF24
- ldr r1, _0802AF1C @ =gUnknown_2023D74
- ldr r0, _0802AF20 @ =gUnknown_81D6930
- b _0802AF5E
- .align 2, 0
-_0802AF10: .4byte gBattleMoveDamage
-_0802AF14: .4byte gBattleMons
-_0802AF18: .4byte gBattlerTarget
-_0802AF1C: .4byte gUnknown_2023D74
-_0802AF20: .4byte gUnknown_81D6930
-_0802AF24:
- ldr r2, _0802AF40 @ =gBattleMons
- ldr r0, _0802AF44 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r1, [r0, 0x2C]
- ldrh r0, [r0, 0x28]
- cmp r1, r0
- bne _0802AF50
- ldr r1, _0802AF48 @ =gUnknown_2023D74
- ldr r0, _0802AF4C @ =gUnknown_81D7DD1
- b _0802AF5E
- .align 2, 0
-_0802AF40: .4byte gBattleMons
-_0802AF44: .4byte gBattlerTarget
-_0802AF48: .4byte gUnknown_2023D74
-_0802AF4C: .4byte gUnknown_81D7DD1
-_0802AF50:
- ldr r2, _0802AF68 @ =gMoveResultFlags
- ldrb r1, [r2]
- movs r0, 0xF7
- ands r0, r1
- strb r0, [r2]
- ldr r1, _0802AF6C @ =gUnknown_2023D74
- ldr r0, _0802AF70 @ =gUnknown_81D7DB7
-_0802AF5E:
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802AF68: .4byte gMoveResultFlags
-_0802AF6C: .4byte gUnknown_2023D74
-_0802AF70: .4byte gUnknown_81D7DB7
- thumb_func_end atkB7_presentdamagecalculation
-
- thumb_func_start atkB8_setsafeguard
-atkB8_setsafeguard: @ 802AF74
- push {r4-r7,lr}
- ldr r7, _0802AFA8 @ =sBattler_AI
- ldrb r0, [r7]
- bl GetBattlerPosition
- ldr r4, _0802AFAC @ =gSideAffecting
- movs r6, 0x1
- adds r1, r6, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r1, [r1]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802AFB8
- ldr r2, _0802AFB0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802AFB4 @ =gUnknown_2023E82
- movs r0, 0
- strb r0, [r1, 0x5]
- b _0802B000
- .align 2, 0
-_0802AFA8: .4byte sBattler_AI
-_0802AFAC: .4byte gSideAffecting
-_0802AFB0: .4byte gMoveResultFlags
-_0802AFB4: .4byte gUnknown_2023E82
-_0802AFB8:
- ldrb r0, [r7]
- bl GetBattlerPosition
- adds r1, r6, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r0, [r1]
- movs r2, 0x20
- orrs r0, r2
- strh r0, [r1]
- ldrb r0, [r7]
- bl GetBattlerPosition
- ldr r5, _0802B010 @ =gSideTimers
- adds r1, r6, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r4, 0x5
- strb r4, [r0, 0x6]
- ldrb r0, [r7]
- bl GetBattlerPosition
- adds r1, r6, 0
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r7]
- strb r1, [r0, 0x7]
- ldr r0, _0802B014 @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
-_0802B000:
- ldr r1, _0802B018 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B010: .4byte gSideTimers
-_0802B014: .4byte gUnknown_2023E82
-_0802B018: .4byte gUnknown_2023D74
- thumb_func_end atkB8_setsafeguard
-
- thumb_func_start atkB9_magnitudedamagecalculation
-atkB9_magnitudedamagecalculation: @ 802B01C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x4
- bgt _0802B048
- ldr r1, _0802B044 @ =gDynamicBasePower
- movs r0, 0xA
- strh r0, [r1]
- movs r3, 0x4
- b _0802B0B4
- .align 2, 0
-_0802B044: .4byte gDynamicBasePower
-_0802B048:
- cmp r3, 0xE
- bgt _0802B05C
- ldr r1, _0802B058 @ =gDynamicBasePower
- movs r0, 0x1E
- strh r0, [r1]
- movs r3, 0x5
- b _0802B0B4
- .align 2, 0
-_0802B058: .4byte gDynamicBasePower
-_0802B05C:
- cmp r3, 0x22
- bgt _0802B070
- ldr r1, _0802B06C @ =gDynamicBasePower
- movs r0, 0x32
- strh r0, [r1]
- movs r3, 0x6
- b _0802B0B4
- .align 2, 0
-_0802B06C: .4byte gDynamicBasePower
-_0802B070:
- cmp r3, 0x40
- bgt _0802B084
- ldr r1, _0802B080 @ =gDynamicBasePower
- movs r0, 0x46
- strh r0, [r1]
- movs r3, 0x7
- b _0802B0B4
- .align 2, 0
-_0802B080: .4byte gDynamicBasePower
-_0802B084:
- cmp r3, 0x54
- bgt _0802B098
- ldr r1, _0802B094 @ =gDynamicBasePower
- movs r0, 0x5A
- strh r0, [r1]
- movs r3, 0x8
- b _0802B0B4
- .align 2, 0
-_0802B094: .4byte gDynamicBasePower
-_0802B098:
- cmp r3, 0x5E
- bgt _0802B0AC
- ldr r1, _0802B0A8 @ =gDynamicBasePower
- movs r0, 0x6E
- strh r0, [r1]
- movs r3, 0x9
- b _0802B0B4
- .align 2, 0
-_0802B0A8: .4byte gDynamicBasePower
-_0802B0AC:
- ldr r1, _0802B120 @ =gDynamicBasePower
- movs r0, 0x96
- strh r0, [r1]
- movs r3, 0xA
-_0802B0B4:
- ldr r1, _0802B124 @ =gBattleTextBuff1
- movs r2, 0
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- strb r0, [r1, 0x2]
- movs r0, 0x2
- strb r0, [r1, 0x3]
- strb r3, [r1, 0x4]
- movs r0, 0xFF
- strb r0, [r1, 0x5]
- ldr r1, _0802B128 @ =gBattlerTarget
- strb r2, [r1]
- ldr r0, _0802B12C @ =gBattlersCount
- ldrb r3, [r0]
- adds r6, r1, 0
- ldr r0, _0802B130 @ =gUnknown_2023D74
- mov r8, r0
- cmp r2, r3
- bcs _0802B10C
- adds r4, r6, 0
- ldr r0, _0802B134 @ =sBattler_AI
- ldrb r5, [r0]
- ldr r1, _0802B138 @ =gBitTable
- mov r12, r1
- ldr r7, _0802B13C @ =gAbsentBattlerFlags
-_0802B0EA:
- ldrb r2, [r4]
- cmp r2, r5
- beq _0802B100
- ldrb r0, [r7]
- ldrb r1, [r6]
- lsls r1, 2
- add r1, r12
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- beq _0802B10C
-_0802B100:
- adds r0, r2, 0x1
- strb r0, [r4]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r3
- bcc _0802B0EA
-_0802B10C:
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B120: .4byte gDynamicBasePower
-_0802B124: .4byte gBattleTextBuff1
-_0802B128: .4byte gBattlerTarget
-_0802B12C: .4byte gBattlersCount
-_0802B130: .4byte gUnknown_2023D74
-_0802B134: .4byte sBattler_AI
-_0802B138: .4byte gBitTable
-_0802B13C: .4byte gAbsentBattlerFlags
- thumb_func_end atkB9_magnitudedamagecalculation
-
- thumb_func_start atkBA_jumpifnopursuitswitchdmg
-atkBA_jumpifnopursuitswitchdmg: @ 802B140
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0802B164 @ =gUnknown_2023D72
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0802B170
- ldr r0, _0802B168 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0802B16C
- movs r0, 0x1
- b _0802B18A
- .align 2, 0
-_0802B164: .4byte gUnknown_2023D72
-_0802B168: .4byte sBattler_AI
-_0802B16C:
- movs r0, 0
- b _0802B18A
-_0802B170:
- ldr r0, _0802B184 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0802B188
- movs r0, 0x3
- b _0802B18A
- .align 2, 0
-_0802B184: .4byte sBattler_AI
-_0802B188:
- movs r0, 0x2
-_0802B18A:
- bl GetBattlerAtPosition
- ldr r1, _0802B264 @ =gBattlerTarget
- strb r0, [r1]
- ldr r0, _0802B268 @ =gUnknown_2023D7C
- ldr r1, _0802B264 @ =gBattlerTarget
- ldrb r3, [r1]
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802B1A2
- b _0802B2A8
-_0802B1A2:
- ldr r5, _0802B26C @ =sBattler_AI
- ldr r0, _0802B270 @ =gBattleStruct
- ldr r1, [r0]
- adds r1, r3, r1
- ldrb r2, [r5]
- ldrb r1, [r1, 0xC]
- cmp r2, r1
- bne _0802B2A8
- ldr r4, _0802B274 @ =gBattleMons
- movs r2, 0x58
- adds r0, r3, 0
- muls r0, r2
- adds r1, r4, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x27
- ands r0, r1
- cmp r0, 0
- bne _0802B2A8
- ldrb r0, [r5]
- muls r0, r2
- adds r0, r4
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0802B2A8
- ldr r0, _0802B278 @ =gDisableStructs
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x18]
- lsls r0, 31
- cmp r0, 0
- bne _0802B2A8
- ldr r0, _0802B27C @ =gUnknown_2023DC4
- lsls r1, r3, 1
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0xE4
- bne _0802B2A8
- movs r1, 0
- ldr r0, _0802B280 @ =gBattlersCount
- ldr r2, _0802B284 @ =gCurrentMove
- mov r8, r2
- ldr r7, _0802B288 @ =gUnknown_2023D48
- mov r10, r7
- ldr r2, _0802B28C @ =gUnknown_2023D49
- mov r9, r2
- ldr r7, _0802B290 @ =gUnknown_2023DD0
- mov r12, r7
- ldrb r2, [r0]
- cmp r1, r2
- bge _0802B22E
- ldr r6, _0802B294 @ =gUnknown_2023BDE
- ldr r5, _0802B264 @ =gBattlerTarget
- ldr r4, _0802B298 @ =gUnknown_2023BDA
- movs r3, 0xB
- adds r2, r0, 0
-_0802B218:
- adds r0, r1, r6
- ldrb r0, [r0]
- ldrb r7, [r5]
- cmp r0, r7
- bne _0802B226
- adds r0, r1, r4
- strb r3, [r0]
-_0802B226:
- adds r1, 0x1
- ldrb r0, [r2]
- cmp r1, r0
- blt _0802B218
-_0802B22E:
- movs r0, 0xE4
- mov r1, r8
- strh r0, [r1]
- ldr r2, _0802B264 @ =gBattlerTarget
- ldrb r0, [r2]
- ldr r7, _0802B270 @ =gBattleStruct
- ldr r1, [r7]
- adds r0, r1
- adds r0, 0x80
- ldrb r0, [r0]
- mov r1, r9
- strb r0, [r1]
- mov r2, r10
- strb r0, [r2]
- ldr r7, _0802B29C @ =gUnknown_2023D74
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- movs r0, 0x1
- ldr r1, _0802B2A0 @ =gBattleScripting
- strb r0, [r1, 0x18]
- mov r2, r12
- ldr r0, [r2]
- ldr r1, _0802B2A4 @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- b _0802B2C2
- .align 2, 0
-_0802B264: .4byte gBattlerTarget
-_0802B268: .4byte gUnknown_2023D7C
-_0802B26C: .4byte sBattler_AI
-_0802B270: .4byte gBattleStruct
-_0802B274: .4byte gBattleMons
-_0802B278: .4byte gDisableStructs
-_0802B27C: .4byte gUnknown_2023DC4
-_0802B280: .4byte gBattlersCount
-_0802B284: .4byte gCurrentMove
-_0802B288: .4byte gUnknown_2023D48
-_0802B28C: .4byte gUnknown_2023D49
-_0802B290: .4byte gUnknown_2023DD0
-_0802B294: .4byte gUnknown_2023BDE
-_0802B298: .4byte gUnknown_2023BDA
-_0802B29C: .4byte gUnknown_2023D74
-_0802B2A0: .4byte gBattleScripting
-_0802B2A4: .4byte 0xfffffbff
-_0802B2A8:
- ldr r3, _0802B2D0 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802B2C2:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B2D0: .4byte gUnknown_2023D74
- thumb_func_end atkBA_jumpifnopursuitswitchdmg
-
- thumb_func_start atkBB_setsunny
-atkBB_setsunny: @ 802B2D4
- push {lr}
- ldr r2, _0802B2F4 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0802B300
- ldr r2, _0802B2F8 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802B2FC @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _0802B312
- .align 2, 0
-_0802B2F4: .4byte gBattleWeather
-_0802B2F8: .4byte gMoveResultFlags
-_0802B2FC: .4byte gUnknown_2023E82
-_0802B300:
- movs r0, 0x20
- strh r0, [r2]
- ldr r1, _0802B320 @ =gUnknown_2023E82
- movs r0, 0x4
- strb r0, [r1, 0x5]
- ldr r0, _0802B324 @ =gUnknown_2023F20
- adds r0, 0x28
- movs r1, 0x5
- strb r1, [r0]
-_0802B312:
- ldr r1, _0802B328 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802B320: .4byte gUnknown_2023E82
-_0802B324: .4byte gUnknown_2023F20
-_0802B328: .4byte gUnknown_2023D74
- thumb_func_end atkBB_setsunny
-
- thumb_func_start atkBC_maxattackhalvehp
-atkBC_maxattackhalvehp: @ 802B32C
- push {r4,r5,lr}
- ldr r5, _0802B378 @ =gBattleMons
- ldr r4, _0802B37C @ =sBattler_AI
- ldrb r0, [r4]
- movs r3, 0x58
- muls r0, r3
- adds r2, r0, r5
- ldrh r0, [r2, 0x2C]
- lsrs r1, r0, 1
- cmp r1, 0
- bne _0802B344
- movs r1, 0x1
-_0802B344:
- movs r0, 0x19
- ldrsb r0, [r2, r0]
- cmp r0, 0xB
- bgt _0802B388
- ldrh r0, [r2, 0x28]
- cmp r0, r1
- bls _0802B388
- movs r0, 0xC
- strb r0, [r2, 0x19]
- ldr r1, _0802B380 @ =gBattleMoveDamage
- ldrb r0, [r4]
- muls r0, r3
- adds r0, r5
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _0802B36C
- movs r0, 0x1
- str r0, [r1]
-_0802B36C:
- ldr r1, _0802B384 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802B3A2
- .align 2, 0
-_0802B378: .4byte gBattleMons
-_0802B37C: .4byte sBattler_AI
-_0802B380: .4byte gBattleMoveDamage
-_0802B384: .4byte gUnknown_2023D74
-_0802B388:
- ldr r3, _0802B3A8 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802B3A2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B3A8: .4byte gUnknown_2023D74
- thumb_func_end atkBC_maxattackhalvehp
-
- thumb_func_start atkBD_copyfoestats
-atkBD_copyfoestats: @ 802B3AC
- push {r4-r7,lr}
- movs r2, 0
- ldr r7, _0802B3E4 @ =gUnknown_2023D74
- ldr r6, _0802B3E8 @ =sBattler_AI
- movs r4, 0x58
- ldr r3, _0802B3EC @ =gUnknown_2023BFC
- ldr r5, _0802B3F0 @ =gBattlerTarget
-_0802B3BA:
- ldrb r0, [r6]
- adds r1, r0, 0
- muls r1, r4
- adds r1, r2, r1
- adds r1, r3
- ldrb r0, [r5]
- muls r0, r4
- adds r0, r2, r0
- adds r0, r3
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0x7
- ble _0802B3BA
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B3E4: .4byte gUnknown_2023D74
-_0802B3E8: .4byte sBattler_AI
-_0802B3EC: .4byte gUnknown_2023BFC
-_0802B3F0: .4byte gBattlerTarget
- thumb_func_end atkBD_copyfoestats
-
- thumb_func_start atkBE_rapidspinfree
-atkBE_rapidspinfree: @ 802B3F4
- push {r4-r6,lr}
- ldr r1, _0802B464 @ =gBattleMons
- ldr r5, _0802B468 @ =sBattler_AI
- ldrb r2, [r5]
- movs r6, 0x58
- adds r0, r2, 0
- muls r0, r6
- adds r4, r1, 0
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0xE0
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _0802B488
- ldr r1, _0802B46C @ =gBattleScripting
- ldr r3, _0802B470 @ =gBattlerTarget
- ldrb r0, [r3]
- strb r0, [r1, 0x17]
- ldrb r0, [r5]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r4
- ldr r0, [r1]
- ldr r2, _0802B474 @ =0xffff1fff
- ands r0, r2
- str r0, [r1]
- ldrb r0, [r5]
- ldr r1, _0802B478 @ =gBattleStruct
- ldr r2, [r1]
- adds r0, r2
- ldrb r0, [r0, 0x14]
- strb r0, [r3]
- ldr r1, _0802B47C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrb r0, [r0, 0x4]
- strb r0, [r1, 0x2]
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrb r0, [r0, 0x5]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- bl BattleScriptPushCursor
- ldr r1, _0802B480 @ =gUnknown_2023D74
- ldr r0, _0802B484 @ =gUnknown_81D8DF3
- b _0802B532
- .align 2, 0
-_0802B464: .4byte gBattleMons
-_0802B468: .4byte sBattler_AI
-_0802B46C: .4byte gBattleScripting
-_0802B470: .4byte gBattlerTarget
-_0802B474: .4byte 0xffff1fff
-_0802B478: .4byte gBattleStruct
-_0802B47C: .4byte gBattleTextBuff1
-_0802B480: .4byte gUnknown_2023D74
-_0802B484: .4byte gUnknown_81D8DF3
-_0802B488:
- ldr r4, _0802B4BC @ =gStatuses3
- lsls r0, r2, 2
- adds r3, r0, r4
- ldr r1, [r3]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0802B4C8
- movs r0, 0x5
- negs r0, r0
- ands r1, r0
- str r1, [r3]
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r4
- ldr r0, [r1]
- movs r2, 0x4
- negs r2, r2
- ands r0, r2
- str r0, [r1]
- bl BattleScriptPushCursor
- ldr r1, _0802B4C0 @ =gUnknown_2023D74
- ldr r0, _0802B4C4 @ =gUnknown_81D8E04
- b _0802B532
- .align 2, 0
-_0802B4BC: .4byte gStatuses3
-_0802B4C0: .4byte gUnknown_2023D74
-_0802B4C4: .4byte gUnknown_81D8E04
-_0802B4C8:
- adds r0, r2, 0
- bl GetBattlerSide
- ldr r4, _0802B518 @ =gSideAffecting
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802B52C
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r2, [r0]
- ldr r1, _0802B51C @ =0x0000ffef
- ands r1, r2
- movs r4, 0
- strh r1, [r0]
- ldrb r0, [r5]
- bl GetBattlerSide
- ldr r2, _0802B520 @ =gSideTimers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- strb r4, [r1, 0xA]
- bl BattleScriptPushCursor
- ldr r1, _0802B524 @ =gUnknown_2023D74
- ldr r0, _0802B528 @ =gUnknown_81D8E0B
- b _0802B532
- .align 2, 0
-_0802B518: .4byte gSideAffecting
-_0802B51C: .4byte 0x0000ffef
-_0802B520: .4byte gSideTimers
-_0802B524: .4byte gUnknown_2023D74
-_0802B528: .4byte gUnknown_81D8E0B
-_0802B52C:
- ldr r1, _0802B53C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
-_0802B532:
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B53C: .4byte gUnknown_2023D74
- thumb_func_end atkBE_rapidspinfree
-
- thumb_func_start atkBF_setdefensecurlbit
-atkBF_setdefensecurlbit: @ 802B540
- ldr r1, _0802B564 @ =gBattleMons
- ldr r0, _0802B568 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 23
- orrs r0, r1
- str r0, [r2]
- ldr r1, _0802B56C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802B564: .4byte gBattleMons
-_0802B568: .4byte sBattler_AI
-_0802B56C: .4byte gUnknown_2023D74
- thumb_func_end atkBF_setdefensecurlbit
-
- thumb_func_start atkC0_recoverbasedonsunlight
-atkC0_recoverbasedonsunlight: @ 802B570
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r1, _0802B5DC @ =gBattlerTarget
- ldr r5, _0802B5E0 @ =sBattler_AI
- ldrb r0, [r5]
- strb r0, [r1]
- ldr r7, _0802B5E4 @ =gBattleMons
- ldrb r0, [r5]
- movs r6, 0x58
- muls r0, r6
- adds r0, r7
- ldrh r1, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- cmp r1, r0
- beq _0802B650
- ldr r4, _0802B5E8 @ =gBattleWeather
- ldrh r0, [r4]
- cmp r0, 0
- beq _0802B5C2
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0802B5C2
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0802B5F0
-_0802B5C2:
- ldr r3, _0802B5EC @ =gBattleMoveDamage
- ldr r2, _0802B5E4 @ =gBattleMons
- ldr r0, _0802B5E0 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r3]
- adds r1, r3, 0
- b _0802B62A
- .align 2, 0
-_0802B5DC: .4byte gBattlerTarget
-_0802B5E0: .4byte sBattler_AI
-_0802B5E4: .4byte gBattleMons
-_0802B5E8: .4byte gBattleWeather
-_0802B5EC: .4byte gBattleMoveDamage
-_0802B5F0:
- ldrh r1, [r4]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0802B61C
- ldr r4, _0802B618 @ =gBattleMoveDamage
- ldrb r0, [r5]
- muls r0, r6
- adds r0, r7
- ldrh r1, [r0, 0x2C]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- movs r1, 0x1E
- bl __divsi3
- str r0, [r4]
- adds r1, r4, 0
- b _0802B62A
- .align 2, 0
-_0802B618: .4byte gBattleMoveDamage
-_0802B61C:
- ldr r1, _0802B648 @ =gBattleMoveDamage
- ldrb r0, [r5]
- muls r0, r6
- adds r0, r7
- ldrh r0, [r0, 0x2C]
- lsrs r0, 2
- str r0, [r1]
-_0802B62A:
- adds r2, r1, 0
- ldr r0, [r2]
- cmp r0, 0
- bne _0802B636
- movs r0, 0x1
- str r0, [r2]
-_0802B636:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- ldr r1, _0802B64C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802B66A
- .align 2, 0
-_0802B648: .4byte gBattleMoveDamage
-_0802B64C: .4byte gUnknown_2023D74
-_0802B650:
- ldr r3, _0802B674 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802B66A:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B674: .4byte gUnknown_2023D74
- thumb_func_end atkC0_recoverbasedonsunlight
-
- thumb_func_start sub_802B678
-sub_802B678: @ 802B678
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r2, _0802B760 @ =gBattleMons
- ldr r0, _0802B764 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r1, r2
- ldrb r0, [r1, 0x14]
- mov r9, r0
- mov r7, r9
- lsls r7, 27
- adds r0, r7, 0
- lsrs r0, 27
- mov r9, r0
- movs r4, 0x2
- mov r2, r9
- ands r2, r4
- asrs r2, 1
- ldrh r7, [r1, 0x14]
- mov r8, r7
- mov r0, r8
- lsls r0, 22
- lsrs r0, 27
- mov r8, r0
- ands r0, r4
- orrs r2, r0
- ldrb r6, [r1, 0x15]
- lsls r6, 25
- lsrs r6, 27
- adds r0, r6, 0
- ands r0, r4
- lsls r0, 1
- orrs r2, r0
- ldr r5, [r1, 0x14]
- lsls r5, 12
- lsrs r5, 27
- adds r0, r5, 0
- ands r0, r4
- lsls r0, 2
- orrs r2, r0
- ldrh r3, [r1, 0x16]
- lsls r3, 23
- lsrs r3, 27
- adds r0, r3, 0
- ands r0, r4
- lsls r0, 3
- orrs r2, r0
- ldrb r1, [r1, 0x17]
- lsls r1, 26
- lsrs r1, 27
- adds r0, r1, 0
- ands r0, r4
- lsls r0, 4
- orrs r2, r0
- movs r0, 0x1
- adds r4, r0, 0
- mov r7, r9
- ands r4, r7
- mov r7, r8
- ands r7, r0
- lsls r7, 1
- orrs r4, r7
- ands r6, r0
- lsls r6, 2
- orrs r4, r6
- ands r5, r0
- lsls r5, 3
- orrs r4, r5
- ands r3, r0
- lsls r3, 4
- orrs r4, r3
- ands r1, r0
- lsls r1, 5
- orrs r4, r1
- ldr r5, _0802B768 @ =gDynamicBasePower
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- movs r1, 0x3F
- bl __divsi3
- adds r0, 0x1E
- strh r0, [r5]
- ldr r6, _0802B76C @ =gBattleStruct
- ldr r5, [r6]
- lsls r0, r4, 4
- subs r0, r4
- movs r1, 0x3F
- bl __divsi3
- adds r0, 0x1
- strb r0, [r5, 0x13]
- ldr r1, [r6]
- ldrb r0, [r1, 0x13]
- cmp r0, 0x8
- bls _0802B742
- adds r0, 0x1
- strb r0, [r1, 0x13]
-_0802B742:
- ldr r2, [r6]
- ldrb r0, [r2, 0x13]
- movs r1, 0xC0
- orrs r0, r1
- strb r0, [r2, 0x13]
- ldr r1, _0802B770 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B760: .4byte gBattleMons
-_0802B764: .4byte sBattler_AI
-_0802B768: .4byte gDynamicBasePower
-_0802B76C: .4byte gBattleStruct
-_0802B770: .4byte gUnknown_2023D74
- thumb_func_end sub_802B678
-
- thumb_func_start atkC2_selectfirstvalidtarget
-atkC2_selectfirstvalidtarget: @ 802B774
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _0802B7D0 @ =gBattlerTarget
- movs r1, 0
- strb r1, [r0]
- ldr r1, _0802B7D4 @ =gBattlersCount
- ldrb r1, [r1]
- adds r6, r0, 0
- ldr r0, _0802B7D8 @ =gUnknown_2023D74
- mov r8, r0
- cmp r1, 0
- beq _0802B7BE
- adds r3, r6, 0
- ldr r0, _0802B7DC @ =sBattler_AI
- ldrb r5, [r0]
- ldr r0, _0802B7E0 @ =gBitTable
- mov r12, r0
- adds r4, r1, 0
- ldr r7, _0802B7E4 @ =gAbsentBattlerFlags
-_0802B79C:
- ldrb r2, [r3]
- cmp r2, r5
- beq _0802B7B2
- ldrb r0, [r7]
- ldrb r1, [r6]
- lsls r1, 2
- add r1, r12
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- beq _0802B7BE
-_0802B7B2:
- adds r0, r2, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r4
- bcc _0802B79C
-_0802B7BE:
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B7D0: .4byte gBattlerTarget
-_0802B7D4: .4byte gBattlersCount
-_0802B7D8: .4byte gUnknown_2023D74
-_0802B7DC: .4byte sBattler_AI
-_0802B7E0: .4byte gBitTable
-_0802B7E4: .4byte gAbsentBattlerFlags
- thumb_func_end atkC2_selectfirstvalidtarget
-
- thumb_func_start atkC3_trysetfutureattack
-atkC3_trysetfutureattack: @ 802B7E8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- ldr r0, _0802B820 @ =gUnknown_2023F20
- mov r8, r0
- ldr r7, _0802B824 @ =gBattlerTarget
- ldrb r1, [r7]
- adds r0, r1, r0
- ldrb r6, [r0]
- cmp r6, 0
- beq _0802B82C
- ldr r3, _0802B828 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802B8F6
- .align 2, 0
-_0802B820: .4byte gUnknown_2023F20
-_0802B824: .4byte gBattlerTarget
-_0802B828: .4byte gUnknown_2023D74
-_0802B82C:
- lsls r1, 1
- mov r0, r8
- adds r0, 0x18
- adds r1, r0
- ldr r2, _0802B8CC @ =gCurrentMove
- mov r9, r2
- ldrh r0, [r2]
- strh r0, [r1]
- mov r0, r8
- adds r0, 0x4
- ldrb r4, [r7]
- adds r0, r4
- ldr r5, _0802B8D0 @ =sBattler_AI
- ldrb r1, [r5]
- strb r1, [r0]
- ldrb r0, [r7]
- add r0, r8
- movs r1, 0x3
- strb r1, [r0]
- ldr r4, _0802B8D4 @ =gSideAffecting
- ldrb r0, [r7]
- bl GetBattlerPosition
- movs r1, 0x1
- mov r10, r1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- ldr r2, _0802B8D8 @ =gBattleMons
- adds r0, r2
- ldrb r1, [r7]
- muls r1, r4
- adds r1, r2
- mov r4, r9
- ldrh r2, [r4]
- str r6, [sp]
- str r6, [sp, 0x4]
- ldrb r4, [r5]
- str r4, [sp, 0x8]
- ldrb r4, [r7]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- ldrb r1, [r7]
- lsls r1, 2
- mov r2, r8
- adds r2, 0x8
- adds r1, r2
- str r0, [r1]
- ldr r1, _0802B8DC @ =gUnknown_2023E8C
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- bge _0802B8BA
- ldrb r4, [r7]
- lsls r4, 2
- adds r4, r2
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0802B8BA:
- mov r0, r9
- ldrh r1, [r0]
- ldr r0, _0802B8E0 @ =0x00000161
- cmp r1, r0
- bne _0802B8E8
- ldr r0, _0802B8E4 @ =gUnknown_2023E82
- mov r1, r10
- strb r1, [r0, 0x5]
- b _0802B8EE
- .align 2, 0
-_0802B8CC: .4byte gCurrentMove
-_0802B8D0: .4byte sBattler_AI
-_0802B8D4: .4byte gSideAffecting
-_0802B8D8: .4byte gBattleMons
-_0802B8DC: .4byte gUnknown_2023E8C
-_0802B8E0: .4byte 0x00000161
-_0802B8E4: .4byte gUnknown_2023E82
-_0802B8E8:
- ldr r1, _0802B908 @ =gUnknown_2023E82
- movs r0, 0
- strb r0, [r1, 0x5]
-_0802B8EE:
- ldr r1, _0802B90C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802B8F6:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802B908: .4byte gUnknown_2023E82
-_0802B90C: .4byte gUnknown_2023D74
- thumb_func_end atkC3_trysetfutureattack
-
- thumb_func_start atkC4_trydobeatup
-atkC4_trydobeatup: @ 802B910
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _0802B954 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- ldr r7, _0802B958 @ =gEnemyParty
- cmp r0, 0
- bne _0802B92A
- ldr r7, _0802B95C @ =gPlayerParty
-_0802B92A:
- ldr r2, _0802B960 @ =gBattleMons
- ldr r0, _0802B964 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0802B96C
- ldr r3, _0802B968 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- b _0802BB08
- .align 2, 0
-_0802B954: .4byte sBattler_AI
-_0802B958: .4byte gEnemyParty
-_0802B95C: .4byte gPlayerParty
-_0802B960: .4byte gBattleMons
-_0802B964: .4byte gBattlerTarget
-_0802B968: .4byte gUnknown_2023D74
-_0802B96C:
- ldr r6, _0802BAA8 @ =gUnknown_2023E82
- ldrb r0, [r6]
- mov r8, r0
- cmp r0, 0x5
- bls _0802B978
- b _0802BAD4
-_0802B978:
- adds r4, r6, 0
- movs r5, 0x64
-_0802B97C:
- ldrb r0, [r4]
- muls r0, r5
- adds r0, r7, r0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0802B9C0
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7, r0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _0802B9C0
- ldrb r0, [r4]
- muls r0, r5
- adds r0, r7, r0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0802B9C0
- ldrb r0, [r4]
- muls r0, r5
- adds r0, r7, r0
- movs r1, 0x37
- bl GetMonData
- cmp r0, 0
- beq _0802B9D0
-_0802B9C0:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- adds r6, r4, 0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bls _0802B97C
-_0802B9D0:
- ldr r1, _0802BAA8 @ =gUnknown_2023E82
- mov r9, r1
- ldrb r2, [r1]
- cmp r2, 0x5
- bhi _0802BAD4
- ldr r1, _0802BAAC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- ldr r6, _0802BAB0 @ =sBattler_AI
- ldrb r0, [r6]
- strb r0, [r1, 0x2]
- strb r2, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _0802BAB4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x9
- str r0, [r1]
- ldr r2, _0802BAB8 @ =gBattleMoveDamage
- mov r8, r2
- ldr r5, _0802BABC @ =gBaseStats
- mov r1, r9
- ldrb r0, [r1]
- movs r4, 0x64
- muls r0, r4
- adds r0, r7, r0
- movs r1, 0xB
- bl GetMonData
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r3, [r1, 0x1]
- mov r2, r8
- str r3, [r2]
- ldr r2, _0802BAC0 @ =gBattleMoves
- ldr r0, _0802BAC4 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- muls r0, r3
- mov r1, r8
- str r0, [r1]
- mov r2, r9
- ldrb r0, [r2]
- muls r0, r4
- adds r0, r7, r0
- movs r1, 0x38
- bl GetMonData
- lsls r0, 1
- movs r1, 0x5
- bl __udivsi3
- adds r0, 0x2
- mov r2, r8
- ldr r1, [r2]
- muls r0, r1
- str r0, [r2]
- ldr r3, _0802BAC8 @ =gBattleMons
- ldr r1, _0802BACC @ =gBattlerTarget
- ldrb r2, [r1]
- movs r1, 0x58
- muls r1, r2
- adds r1, r3
- ldrh r2, [r1]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r5
- ldrb r1, [r1, 0x2]
- bl __divsi3
- mov r1, r8
- str r0, [r1]
- movs r1, 0x32
- bl __divsi3
- adds r2, r0, 0x2
- mov r0, r8
- str r2, [r0]
- ldr r1, _0802BAD0 @ =gUnknown_2023E8C
- ldrb r0, [r6]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- bge _0802BA9C
- lsls r0, r2, 4
- subs r0, r2
- movs r1, 0xA
- bl __divsi3
- mov r1, r8
- str r0, [r1]
-_0802BA9C:
- mov r2, r9
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- b _0802BB0E
- .align 2, 0
-_0802BAA8: .4byte gUnknown_2023E82
-_0802BAAC: .4byte gBattleTextBuff1
-_0802BAB0: .4byte sBattler_AI
-_0802BAB4: .4byte gUnknown_2023D74
-_0802BAB8: .4byte gBattleMoveDamage
-_0802BABC: .4byte gBaseStats
-_0802BAC0: .4byte gBattleMoves
-_0802BAC4: .4byte gCurrentMove
-_0802BAC8: .4byte gBattleMons
-_0802BACC: .4byte gBattlerTarget
-_0802BAD0: .4byte gUnknown_2023E8C
-_0802BAD4:
- mov r0, r8
- cmp r0, 0
- beq _0802BAF4
- ldr r3, _0802BAF0 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- b _0802BB08
- .align 2, 0
-_0802BAF0: .4byte gUnknown_2023D74
-_0802BAF4:
- ldr r3, _0802BB1C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x5]
- ldrb r0, [r2, 0x6]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x8]
-_0802BB08:
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802BB0E:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BB1C: .4byte gUnknown_2023D74
- thumb_func_end atkC4_trydobeatup
-
- thumb_func_start atkC5_setsemiinvulnerablebit
-atkC5_setsemiinvulnerablebit: @ 802BB20
- push {lr}
- ldr r0, _0802BB34 @ =gCurrentMove
- ldrh r1, [r0]
- cmp r1, 0x5B
- beq _0802BB60
- cmp r1, 0x5B
- bgt _0802BB38
- cmp r1, 0x13
- beq _0802BB44
- b _0802BB8C
- .align 2, 0
-_0802BB34: .4byte gCurrentMove
-_0802BB38:
- ldr r0, _0802BB54 @ =0x00000123
- cmp r1, r0
- beq _0802BB78
- adds r0, 0x31
- cmp r1, r0
- bne _0802BB8C
-_0802BB44:
- ldr r2, _0802BB58 @ =gStatuses3
- ldr r0, _0802BB5C @ =sBattler_AI
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x40
- b _0802BB88
- .align 2, 0
-_0802BB54: .4byte 0x00000123
-_0802BB58: .4byte gStatuses3
-_0802BB5C: .4byte sBattler_AI
-_0802BB60:
- ldr r2, _0802BB70 @ =gStatuses3
- ldr r0, _0802BB74 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x80
- b _0802BB88
- .align 2, 0
-_0802BB70: .4byte gStatuses3
-_0802BB74: .4byte sBattler_AI
-_0802BB78:
- ldr r2, _0802BB98 @ =gStatuses3
- ldr r0, _0802BB9C @ =sBattler_AI
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 11
-_0802BB88:
- orrs r0, r2
- str r0, [r1]
-_0802BB8C:
- ldr r1, _0802BBA0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802BB98: .4byte gStatuses3
-_0802BB9C: .4byte sBattler_AI
-_0802BBA0: .4byte gUnknown_2023D74
- thumb_func_end atkC5_setsemiinvulnerablebit
-
- thumb_func_start atkC6_clearsemiinvulnerablebit
-atkC6_clearsemiinvulnerablebit: @ 802BBA4
- push {lr}
- ldr r0, _0802BBB8 @ =gCurrentMove
- ldrh r1, [r0]
- cmp r1, 0x5B
- beq _0802BBE8
- cmp r1, 0x5B
- bgt _0802BBBC
- cmp r1, 0x13
- beq _0802BBC8
- b _0802BC16
- .align 2, 0
-_0802BBB8: .4byte gCurrentMove
-_0802BBBC:
- ldr r0, _0802BBDC @ =0x00000123
- cmp r1, r0
- beq _0802BC04
- adds r0, 0x31
- cmp r1, r0
- bne _0802BC16
-_0802BBC8:
- ldr r2, _0802BBE0 @ =gStatuses3
- ldr r0, _0802BBE4 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x41
- negs r2, r2
- b _0802BC12
- .align 2, 0
-_0802BBDC: .4byte 0x00000123
-_0802BBE0: .4byte gStatuses3
-_0802BBE4: .4byte sBattler_AI
-_0802BBE8:
- ldr r2, _0802BBFC @ =gStatuses3
- ldr r0, _0802BC00 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x81
- negs r2, r2
- b _0802BC12
- .align 2, 0
-_0802BBFC: .4byte gStatuses3
-_0802BC00: .4byte sBattler_AI
-_0802BC04:
- ldr r2, _0802BC24 @ =gStatuses3
- ldr r0, _0802BC28 @ =sBattler_AI
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- ldr r2, _0802BC2C @ =0xfffbffff
-_0802BC12:
- ands r0, r2
- str r0, [r1]
-_0802BC16:
- ldr r1, _0802BC30 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802BC24: .4byte gStatuses3
-_0802BC28: .4byte sBattler_AI
-_0802BC2C: .4byte 0xfffbffff
-_0802BC30: .4byte gUnknown_2023D74
- thumb_func_end atkC6_clearsemiinvulnerablebit
-
- thumb_func_start atkC7_setminimize
-atkC7_setminimize: @ 802BC34
- push {lr}
- ldr r0, _0802BC64 @ =gUnknown_2023DD0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _0802BC58
- ldr r2, _0802BC68 @ =gStatuses3
- ldr r0, _0802BC6C @ =sBattler_AI
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r2
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 1
- orrs r0, r2
- str r0, [r1]
-_0802BC58:
- ldr r1, _0802BC70 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802BC64: .4byte gUnknown_2023DD0
-_0802BC68: .4byte gStatuses3
-_0802BC6C: .4byte sBattler_AI
-_0802BC70: .4byte gUnknown_2023D74
- thumb_func_end atkC7_setminimize
-
- thumb_func_start atkC8_sethail
-atkC8_sethail: @ 802BC74
- push {lr}
- ldr r3, _0802BC98 @ =gBattleWeather
- ldrh r1, [r3]
- movs r2, 0x80
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0802BCA4
- ldr r2, _0802BC9C @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802BCA0 @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _0802BCB2
- .align 2, 0
-_0802BC98: .4byte gBattleWeather
-_0802BC9C: .4byte gMoveResultFlags
-_0802BCA0: .4byte gUnknown_2023E82
-_0802BCA4:
- strh r2, [r3]
- ldr r0, _0802BCC0 @ =gUnknown_2023E82
- movs r1, 0x5
- strb r1, [r0, 0x5]
- ldr r0, _0802BCC4 @ =gUnknown_2023F20
- adds r0, 0x28
- strb r1, [r0]
-_0802BCB2:
- ldr r1, _0802BCC8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802BCC0: .4byte gUnknown_2023E82
-_0802BCC4: .4byte gUnknown_2023F20
-_0802BCC8: .4byte gUnknown_2023D74
- thumb_func_end atkC8_sethail
-
- thumb_func_start atkC9_jumpifattackandspecialattackcannotfall
-atkC9_jumpifattackandspecialattackcannotfall: @ 802BCCC
- push {r4,lr}
- ldr r2, _0802BD10 @ =gBattleMons
- ldr r0, _0802BD14 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- adds r3, r2, 0
- cmp r0, 0
- bne _0802BD20
- movs r0, 0x1C
- ldrsb r0, [r1, r0]
- cmp r0, 0
- bne _0802BD20
- ldr r0, _0802BD18 @ =gUnknown_2023E82
- ldrb r0, [r0, 0x6]
- cmp r0, 0x1
- beq _0802BD20
- ldr r3, _0802BD1C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802BD4C
- .align 2, 0
-_0802BD10: .4byte gBattleMons
-_0802BD14: .4byte gBattlerTarget
-_0802BD18: .4byte gUnknown_2023E82
-_0802BD1C: .4byte gUnknown_2023D74
-_0802BD20:
- ldr r4, _0802BD54 @ =gActiveBattler
- ldr r0, _0802BD58 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r2, _0802BD5C @ =gBattleMoveDamage
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x28]
- str r0, [r2]
- ldr r1, _0802BD60 @ =0x00007fff
- movs r0, 0
- bl EmitHealthBarUpdate
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _0802BD64 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802BD4C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BD54: .4byte gActiveBattler
-_0802BD58: .4byte sBattler_AI
-_0802BD5C: .4byte gBattleMoveDamage
-_0802BD60: .4byte 0x00007fff
-_0802BD64: .4byte gUnknown_2023D74
- thumb_func_end atkC9_jumpifattackandspecialattackcannotfall
-
- thumb_func_start atkCA_setforcedtarget
-atkCA_setforcedtarget: @ 802BD68
- push {r4,r5,lr}
- ldr r4, _0802BDA8 @ =sBattler_AI
- ldrb r0, [r4]
- bl GetBattlerSide
- ldr r5, _0802BDAC @ =gSideTimers
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- movs r0, 0x1
- strb r0, [r1, 0x8]
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r4]
- strb r0, [r1, 0x9]
- ldr r1, _0802BDB0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BDA8: .4byte sBattler_AI
-_0802BDAC: .4byte gSideTimers
-_0802BDB0: .4byte gUnknown_2023D74
- thumb_func_end atkCA_setforcedtarget
-
- thumb_func_start atkCB_setcharge
-atkCB_setcharge: @ 802BDB4
- push {r4,lr}
- ldr r0, _0802BE08 @ =gStatuses3
- ldr r3, _0802BE0C @ =sBattler_AI
- ldrb r1, [r3]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 2
- orrs r0, r2
- str r0, [r1]
- ldr r4, _0802BE10 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r2, [r0, 0x12]
- movs r1, 0x10
- negs r1, r1
- ands r1, r2
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0, 0x12]
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r2, [r0, 0x12]
- movs r1, 0xF
- ands r1, r2
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x12]
- ldr r1, _0802BE14 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BE08: .4byte gStatuses3
-_0802BE0C: .4byte sBattler_AI
-_0802BE10: .4byte gDisableStructs
-_0802BE14: .4byte gUnknown_2023D74
- thumb_func_end atkCB_setcharge
-
- thumb_func_start atkCC_callterrainattack
-atkCC_callterrainattack: @ 802BE18
- push {r4,lr}
- ldr r2, _0802BE68 @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _0802BE6C @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r4, _0802BE70 @ =gCurrentMove
- ldr r1, _0802BE74 @ =gUnknown_825081C
- ldr r0, _0802BE78 @ =gUnknown_2022B50
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4]
- ldrh r0, [r4]
- movs r1, 0
- bl GetMoveTarget
- ldr r1, _0802BE7C @ =gBattlerTarget
- strb r0, [r1]
- ldr r3, _0802BE80 @ =gUnknown_81D65A8
- ldr r2, _0802BE84 @ =gBattleMoves
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- bl BattleScriptPush
- ldr r1, _0802BE88 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BE68: .4byte gUnknown_2023DD0
-_0802BE6C: .4byte 0xfffffbff
-_0802BE70: .4byte gCurrentMove
-_0802BE74: .4byte gUnknown_825081C
-_0802BE78: .4byte gUnknown_2022B50
-_0802BE7C: .4byte gBattlerTarget
-_0802BE80: .4byte gUnknown_81D65A8
-_0802BE84: .4byte gBattleMoves
-_0802BE88: .4byte gUnknown_2023D74
- thumb_func_end atkCC_callterrainattack
-
- thumb_func_start atkCD_cureifburnedparalysedorpoisoned
-atkCD_cureifburnedparalysedorpoisoned: @ 802BE8C
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r1, _0802BED8 @ =gBattleMons
- ldr r3, _0802BEDC @ =sBattler_AI
- ldrb r0, [r3]
- movs r6, 0x58
- muls r0, r6
- adds r5, r1, 0
- adds r5, 0x4C
- adds r2, r0, r5
- ldr r0, [r2]
- movs r1, 0xD8
- ands r0, r1
- cmp r0, 0
- beq _0802BEE8
- movs r0, 0
- str r0, [r2]
- ldr r1, _0802BEE0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- ldr r4, _0802BEE4 @ =gActiveBattler
- ldrb r0, [r3]
- strb r0, [r4]
- ldrb r0, [r4]
- muls r0, r6
- adds r0, r5
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0802BF02
- .align 2, 0
-_0802BED8: .4byte gBattleMons
-_0802BEDC: .4byte sBattler_AI
-_0802BEE0: .4byte gUnknown_2023D74
-_0802BEE4: .4byte gActiveBattler
-_0802BEE8:
- ldr r3, _0802BF0C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802BF02:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802BF0C: .4byte gUnknown_2023D74
- thumb_func_end atkCD_cureifburnedparalysedorpoisoned
-
- thumb_func_start atkCE_settorment
-atkCE_settorment: @ 802BF10
- push {lr}
- ldr r1, _0802BF48 @ =gBattleMons
- ldr r0, _0802BF4C @ =gBattlerTarget
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 24
- cmp r1, 0
- bge _0802BF54
- ldr r3, _0802BF50 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802BF60
- .align 2, 0
-_0802BF48: .4byte gBattleMons
-_0802BF4C: .4byte gBattlerTarget
-_0802BF50: .4byte gUnknown_2023D74
-_0802BF54:
- orrs r1, r2
- str r1, [r0]
- ldr r1, _0802BF64 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802BF60:
- pop {r0}
- bx r0
- .align 2, 0
-_0802BF64: .4byte gUnknown_2023D74
- thumb_func_end atkCE_settorment
-
- thumb_func_start atkCF_jumpifnodamage
-atkCF_jumpifnodamage: @ 802BF68
- push {lr}
- ldr r2, _0802BF94 @ =gUnknown_2023E8C
- ldr r0, _0802BF98 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r0, r2, 0x4
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0802BF88
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0802BFA0
-_0802BF88:
- ldr r1, _0802BF9C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802BFBA
- .align 2, 0
-_0802BF94: .4byte gUnknown_2023E8C
-_0802BF98: .4byte sBattler_AI
-_0802BF9C: .4byte gUnknown_2023D74
-_0802BFA0:
- ldr r3, _0802BFC0 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802BFBA:
- pop {r0}
- bx r0
- .align 2, 0
-_0802BFC0: .4byte gUnknown_2023D74
- thumb_func_end atkCF_jumpifnodamage
-
- thumb_func_start atkD0_settaunt
-atkD0_settaunt: @ 802BFC4
- push {r4,lr}
- ldr r4, _0802C008 @ =gDisableStructs
- ldr r3, _0802C00C @ =gBattlerTarget
- ldrb r0, [r3]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r2, r1, r4
- ldrb r1, [r2, 0x13]
- lsls r0, r1, 28
- cmp r0, 0
- bne _0802C014
- movs r0, 0x10
- negs r0, r0
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2, 0x13]
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r2, [r0, 0x13]
- movs r1, 0xF
- ands r1, r2
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x13]
- ldr r1, _0802C010 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802C02E
- .align 2, 0
-_0802C008: .4byte gDisableStructs
-_0802C00C: .4byte gBattlerTarget
-_0802C010: .4byte gUnknown_2023D74
-_0802C014:
- ldr r3, _0802C034 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802C02E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C034: .4byte gUnknown_2023D74
- thumb_func_end atkD0_settaunt
-
- thumb_func_start atkD1_trysethelpinghand
-atkD1_trysethelpinghand: @ 802C038
- push {r4,lr}
- ldr r4, _0802C0A0 @ =sBattler_AI
- ldrb r0, [r4]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r3, _0802C0A4 @ =gBattlerTarget
- strb r0, [r3]
- ldr r0, _0802C0A8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802C0BC
- ldr r0, _0802C0AC @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0802C0B0 @ =gBitTable
- ldrb r3, [r3]
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802C0BC
- ldr r1, _0802C0B4 @ =gUnknown_2023E8C
- ldrb r0, [r4]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- blt _0802C0BC
- lsls r0, r3, 4
- adds r2, r0, r1
- ldrb r1, [r2]
- lsls r0, r1, 28
- cmp r0, 0
- blt _0802C0BC
- movs r0, 0x8
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0802C0B8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802C0D6
- .align 2, 0
-_0802C0A0: .4byte sBattler_AI
-_0802C0A4: .4byte gBattlerTarget
-_0802C0A8: .4byte gBattleTypeFlags
-_0802C0AC: .4byte gAbsentBattlerFlags
-_0802C0B0: .4byte gBitTable
-_0802C0B4: .4byte gUnknown_2023E8C
-_0802C0B8: .4byte gUnknown_2023D74
-_0802C0BC:
- ldr r3, _0802C0DC @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802C0D6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C0DC: .4byte gUnknown_2023D74
- thumb_func_end atkD1_trysethelpinghand
-
- thumb_func_start sub_802C0E0
-sub_802C0E0: @ 802C0E0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r4, _0802C1FC @ =gBattleTypeFlags
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- bne _0802C1DE
- ldr r0, _0802C200 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0802C120
- ldr r0, [r4]
- ldr r1, _0802C204 @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _0802C120
- ldr r0, _0802C208 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _0802C1DE
-_0802C120:
- ldr r6, _0802C200 @ =sBattler_AI
- ldrb r0, [r6]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r7, _0802C20C @ =gBattlerTarget
- ldrb r0, [r7]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0802C1FC @ =gBattleTypeFlags
- ldr r0, [r0]
- ldr r1, _0802C204 @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _0802C18A
- ldr r0, _0802C208 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _0802C18A
- ldr r0, _0802C210 @ =gUnknown_2023F20
- adds r2, r0, 0
- adds r2, 0x29
- adds r0, r4, r2
- ldrb r1, [r0]
- ldr r4, _0802C214 @ =gBitTable
- ldr r3, _0802C218 @ =gBattlerPartyIndexes
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802C1DE
- adds r0, r5, r2
- ldrb r1, [r0]
- ldrb r0, [r7]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802C1DE
-_0802C18A:
- ldr r0, _0802C21C @ =gBattleMons
- mov r8, r0
- ldr r1, _0802C200 @ =sBattler_AI
- ldrb r4, [r1]
- movs r5, 0x58
- adds r0, r4, 0
- muls r0, r5
- add r0, r8
- mov r9, r0
- ldrh r3, [r0, 0x2E]
- adds r1, r3, 0
- cmp r1, 0
- bne _0802C1B2
- ldr r0, _0802C20C @ =gBattlerTarget
- ldrb r0, [r0]
- muls r0, r5
- add r0, r8
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- beq _0802C1DE
-_0802C1B2:
- cmp r1, 0xAF
- beq _0802C1DE
- ldr r7, _0802C20C @ =gBattlerTarget
- ldrb r0, [r7]
- muls r0, r5
- mov r2, r8
- adds r1, r0, r2
- ldrh r2, [r1, 0x2E]
- cmp r2, 0xAF
- beq _0802C1DE
- adds r0, r3, 0
- subs r0, 0x79
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xB
- bls _0802C1DE
- adds r0, r2, 0
- subs r0, 0x79
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xB
- bhi _0802C224
-_0802C1DE:
- ldr r3, _0802C220 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802C37A
- .align 2, 0
-_0802C1FC: .4byte gBattleTypeFlags
-_0802C200: .4byte sBattler_AI
-_0802C204: .4byte 0x00000902
-_0802C208: .4byte gTrainerBattleOpponent_A
-_0802C20C: .4byte gBattlerTarget
-_0802C210: .4byte gUnknown_2023F20
-_0802C214: .4byte gBitTable
-_0802C218: .4byte gBattlerPartyIndexes
-_0802C21C: .4byte gBattleMons
-_0802C220: .4byte gUnknown_2023D74
-_0802C224:
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3C
- bne _0802C258
- ldr r1, _0802C24C @ =gUnknown_2023D74
- ldr r0, _0802C250 @ =gUnknown_81D948E
- str r0, [r1]
- ldr r1, _0802C254 @ =gLastUsedAbility
- ldrb r0, [r7]
- muls r0, r5
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r7]
- ldrb r1, [r1]
- bl sub_80C71D0
- b _0802C37A
- .align 2, 0
-_0802C24C: .4byte gUnknown_2023D74
-_0802C250: .4byte gUnknown_81D948E
-_0802C254: .4byte gLastUsedAbility
-_0802C258:
- ldr r3, _0802C344 @ =gBattleStruct
- mov r10, r3
- lsls r0, r4, 1
- adds r0, 0xD0
- ldr r1, [r3]
- adds r6, r1, r0
- mov r0, r9
- ldrh r0, [r0, 0x2E]
- mov r9, r0
- strh r2, [r6]
- ldr r1, _0802C348 @ =sBattler_AI
- ldrb r0, [r1]
- muls r0, r5
- add r0, r8
- movs r1, 0
- strh r1, [r0, 0x2E]
- ldrb r0, [r7]
- muls r0, r5
- add r0, r8
- mov r2, r9
- strh r2, [r0, 0x2E]
- ldr r4, _0802C34C @ =gActiveBattler
- ldr r3, _0802C348 @ =sBattler_AI
- ldrb r0, [r3]
- strb r0, [r4]
- str r6, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetMonData
- ldr r1, _0802C348 @ =sBattler_AI
- ldrb r0, [r1]
- bl MarkBufferBankForExecution
- ldrb r0, [r7]
- strb r0, [r4]
- ldrb r0, [r7]
- muls r0, r5
- mov r1, r8
- adds r1, 0x2E
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetMonData
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldrb r0, [r7]
- mov r2, r10
- ldr r1, [r2]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC8
- movs r3, 0
- strb r3, [r0]
- ldrb r0, [r7]
- ldr r1, [r2]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC9
- strb r3, [r0]
- ldr r1, _0802C348 @ =sBattler_AI
- ldrb r0, [r1]
- ldr r1, [r2]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC8
- strb r3, [r0]
- ldr r2, _0802C348 @ =sBattler_AI
- ldrb r0, [r2]
- mov r3, r10
- ldr r1, [r3]
- lsls r0, 1
- adds r0, r1
- adds r0, 0xC9
- movs r1, 0
- strb r1, [r0]
- ldr r1, _0802C350 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- ldr r1, _0802C354 @ =gBattleTextBuff1
- movs r3, 0xFD
- strb r3, [r1]
- movs r2, 0xA
- strb r2, [r1, 0x1]
- ldrh r0, [r6]
- strb r0, [r1, 0x2]
- ldrh r0, [r6]
- lsrs r0, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _0802C358 @ =gBattleTextBuff2
- strb r3, [r1]
- strb r2, [r1, 0x1]
- mov r2, r9
- strb r2, [r1, 0x2]
- mov r3, r9
- lsrs r0, r3, 8
- strb r0, [r1, 0x3]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r1, 0x4]
- cmp r3, 0
- beq _0802C360
- ldrh r0, [r6]
- cmp r0, 0
- beq _0802C374
- ldr r1, _0802C35C @ =gUnknown_2023E82
- movs r0, 0x2
- b _0802C378
- .align 2, 0
-_0802C344: .4byte gBattleStruct
-_0802C348: .4byte sBattler_AI
-_0802C34C: .4byte gActiveBattler
-_0802C350: .4byte gUnknown_2023D74
-_0802C354: .4byte gBattleTextBuff1
-_0802C358: .4byte gBattleTextBuff2
-_0802C35C: .4byte gUnknown_2023E82
-_0802C360:
- ldrh r0, [r6]
- cmp r0, 0
- beq _0802C374
- ldr r0, _0802C370 @ =gUnknown_2023E82
- movs r1, 0
- strb r1, [r0, 0x5]
- b _0802C37A
- .align 2, 0
-_0802C370: .4byte gUnknown_2023E82
-_0802C374:
- ldr r1, _0802C38C @ =gUnknown_2023E82
- movs r0, 0x1
-_0802C378:
- strb r0, [r1, 0x5]
-_0802C37A:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C38C: .4byte gUnknown_2023E82
- thumb_func_end sub_802C0E0
-
- thumb_func_start atkD3_trycopyability
-atkD3_trycopyability: @ 802C390
- push {r4,lr}
- ldr r3, _0802C3D0 @ =gBattleMons
- ldr r4, _0802C3D4 @ =gBattlerTarget
- ldrb r0, [r4]
- movs r2, 0x58
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r1, [r0]
- adds r0, r1, 0
- cmp r0, 0
- beq _0802C3E4
- cmp r0, 0x19
- beq _0802C3E4
- ldr r0, _0802C3D8 @ =sBattler_AI
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- strb r1, [r0]
- ldr r1, _0802C3DC @ =gLastUsedAbility
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r1, _0802C3E0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802C3FE
- .align 2, 0
-_0802C3D0: .4byte gBattleMons
-_0802C3D4: .4byte gBattlerTarget
-_0802C3D8: .4byte sBattler_AI
-_0802C3DC: .4byte gLastUsedAbility
-_0802C3E0: .4byte gUnknown_2023D74
-_0802C3E4:
- ldr r3, _0802C404 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802C3FE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C404: .4byte gUnknown_2023D74
- thumb_func_end atkD3_trycopyability
-
- thumb_func_start atkD4_trywish
-atkD4_trywish: @ 802C408
- push {r4-r7,lr}
- ldr r7, _0802C41C @ =gUnknown_2023D74
- ldr r2, [r7]
- ldrb r3, [r2, 0x1]
- cmp r3, 0
- beq _0802C420
- cmp r3, 0x1
- beq _0802C458
- b _0802C4D4
- .align 2, 0
-_0802C41C: .4byte gUnknown_2023D74
-_0802C420:
- ldr r1, _0802C44C @ =gUnknown_2023F20
- ldr r4, _0802C450 @ =sBattler_AI
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r5, [r4]
- adds r3, r0, r5
- ldrb r0, [r3]
- cmp r0, 0
- bne _0802C4A4
- movs r0, 0x2
- strb r0, [r3]
- ldrb r0, [r4]
- adds r1, 0x24
- adds r1, r0, r1
- ldr r2, _0802C454 @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1]
- ldr r0, [r7]
- adds r0, 0x6
- b _0802C4D2
- .align 2, 0
-_0802C44C: .4byte gUnknown_2023F20
-_0802C450: .4byte sBattler_AI
-_0802C454: .4byte gBattlerPartyIndexes
-_0802C458:
- ldr r1, _0802C4BC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- ldr r4, _0802C4C0 @ =gBattlerTarget
- ldrb r0, [r4]
- strb r0, [r1, 0x2]
- ldr r0, _0802C4C4 @ =gUnknown_2023F20
- adds r0, 0x24
- ldrb r5, [r4]
- adds r0, r5
- ldrb r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _0802C4C8 @ =gBattleMoveDamage
- ldr r6, _0802C4CC @ =gBattleMons
- ldrb r0, [r4]
- movs r5, 0x58
- muls r0, r5
- adds r0, r6
- ldrh r0, [r0, 0x2C]
- lsrs r0, 1
- str r0, [r1]
- cmp r0, 0
- bne _0802C490
- str r3, [r1]
-_0802C490:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- ldrb r0, [r4]
- muls r0, r5
- adds r0, r6
- ldrh r1, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- cmp r1, r0
- bne _0802C4D0
-_0802C4A4:
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r7]
- b _0802C4D4
- .align 2, 0
-_0802C4BC: .4byte gBattleTextBuff1
-_0802C4C0: .4byte gBattlerTarget
-_0802C4C4: .4byte gUnknown_2023F20
-_0802C4C8: .4byte gBattleMoveDamage
-_0802C4CC: .4byte gBattleMons
-_0802C4D0:
- adds r0, r2, 0x6
-_0802C4D2:
- str r0, [r7]
-_0802C4D4:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atkD4_trywish
-
- thumb_func_start atkD5_trysetroots
-atkD5_trysetroots: @ 802C4DC
- push {lr}
- ldr r1, _0802C514 @ =gStatuses3
- ldr r0, _0802C518 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 2
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 3
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _0802C520
- ldr r3, _0802C51C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802C52C
- .align 2, 0
-_0802C514: .4byte gStatuses3
-_0802C518: .4byte sBattler_AI
-_0802C51C: .4byte gUnknown_2023D74
-_0802C520:
- orrs r1, r3
- str r1, [r2]
- ldr r1, _0802C530 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802C52C:
- pop {r0}
- bx r0
- .align 2, 0
-_0802C530: .4byte gUnknown_2023D74
- thumb_func_end atkD5_trysetroots
-
- thumb_func_start atkD6_doubledamagedealtifdamaged
-atkD6_doubledamagedealtifdamaged: @ 802C534
- push {lr}
- ldr r3, _0802C580 @ =gUnknown_2023E8C
- ldr r0, _0802C584 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r0, r3, 0x4
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0802C554
- adds r0, r2, r3
- ldr r1, _0802C588 @ =gBattlerTarget
- ldrb r0, [r0, 0xC]
- ldrb r1, [r1]
- cmp r0, r1
- beq _0802C56C
-_0802C554:
- adds r0, r3, 0
- adds r0, 0x8
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0802C572
- adds r0, r2, r3
- ldr r1, _0802C588 @ =gBattlerTarget
- ldrb r0, [r0, 0xD]
- ldrb r1, [r1]
- cmp r0, r1
- bne _0802C572
-_0802C56C:
- ldr r1, _0802C58C @ =gBattleScripting
- movs r0, 0x2
- strb r0, [r1, 0xE]
-_0802C572:
- ldr r1, _0802C590 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802C580: .4byte gUnknown_2023E8C
-_0802C584: .4byte sBattler_AI
-_0802C588: .4byte gBattlerTarget
-_0802C58C: .4byte gBattleScripting
-_0802C590: .4byte gUnknown_2023D74
- thumb_func_end atkD6_doubledamagedealtifdamaged
-
- thumb_func_start atkD7_setyawn
-atkD7_setyawn: @ 802C594
- push {r4,lr}
- ldr r1, _0802C5D8 @ =gStatuses3
- ldr r0, _0802C5DC @ =gBattlerTarget
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r4, r0, r1
- ldr r2, [r4]
- movs r0, 0xC0
- lsls r0, 5
- ands r0, r2
- cmp r0, 0
- bne _0802C5BC
- ldr r1, _0802C5E0 @ =gBattleMons
- movs r0, 0x58
- muls r0, r3
- adds r1, 0x4C
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802C5E8
-_0802C5BC:
- ldr r3, _0802C5E4 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802C5F8
- .align 2, 0
-_0802C5D8: .4byte gStatuses3
-_0802C5DC: .4byte gBattlerTarget
-_0802C5E0: .4byte gBattleMons
-_0802C5E4: .4byte gUnknown_2023D74
-_0802C5E8:
- movs r0, 0x80
- lsls r0, 5
- orrs r2, r0
- str r2, [r4]
- ldr r1, _0802C600 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802C5F8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C600: .4byte gUnknown_2023D74
- thumb_func_end atkD7_setyawn
-
- thumb_func_start atkD8_setdamagetohealthdifference
-atkD8_setdamagetohealthdifference: @ 802C604
- push {lr}
- ldr r2, _0802C640 @ =gBattleMons
- ldr r0, _0802C644 @ =gBattlerTarget
- ldrb r0, [r0]
- movs r1, 0x58
- muls r0, r1
- adds r3, r0, r2
- ldr r0, _0802C648 @ =sBattler_AI
- ldrb r0, [r0]
- muls r0, r1
- adds r1, r0, r2
- ldrh r0, [r3, 0x28]
- ldrh r2, [r1, 0x28]
- cmp r0, r2
- bhi _0802C650
- ldr r3, _0802C64C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802C662
- .align 2, 0
-_0802C640: .4byte gBattleMons
-_0802C644: .4byte gBattlerTarget
-_0802C648: .4byte sBattler_AI
-_0802C64C: .4byte gUnknown_2023D74
-_0802C650:
- ldr r2, _0802C668 @ =gBattleMoveDamage
- ldrh r0, [r3, 0x28]
- ldrh r1, [r1, 0x28]
- subs r0, r1
- str r0, [r2]
- ldr r1, _0802C66C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802C662:
- pop {r0}
- bx r0
- .align 2, 0
-_0802C668: .4byte gBattleMoveDamage
-_0802C66C: .4byte gUnknown_2023D74
- thumb_func_end atkD8_setdamagetohealthdifference
-
- thumb_func_start atkD9_scaledamagebyhealthratio
-atkD9_scaledamagebyhealthratio: @ 802C670
- push {r4,lr}
- ldr r4, _0802C6BC @ =gDynamicBasePower
- ldrh r0, [r4]
- cmp r0, 0
- bne _0802C6AC
- ldr r2, _0802C6C0 @ =gBattleMoves
- ldr r0, _0802C6C4 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r3, [r0, 0x1]
- ldr r2, _0802C6C8 @ =gBattleMons
- ldr r0, _0802C6CC @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r1, r2
- ldrh r0, [r1, 0x28]
- muls r0, r3
- ldrh r1, [r1, 0x2C]
- bl __divsi3
- strh r0, [r4]
- lsls r0, 16
- cmp r0, 0
- bne _0802C6AC
- movs r0, 0x1
- strh r0, [r4]
-_0802C6AC:
- ldr r1, _0802C6D0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C6BC: .4byte gDynamicBasePower
-_0802C6C0: .4byte gBattleMoves
-_0802C6C4: .4byte gCurrentMove
-_0802C6C8: .4byte gBattleMons
-_0802C6CC: .4byte sBattler_AI
-_0802C6D0: .4byte gUnknown_2023D74
- thumb_func_end atkD9_scaledamagebyhealthratio
-
- thumb_func_start atkDA_tryswapabilities
-atkDA_tryswapabilities: @ 802C6D4
- push {r4-r6,lr}
- ldr r5, _0802C738 @ =gBattleMons
- ldr r0, _0802C73C @ =sBattler_AI
- ldrb r0, [r0]
- movs r4, 0x58
- muls r0, r4
- adds r0, r5
- adds r2, r0, 0
- adds r2, 0x20
- ldrb r1, [r2]
- cmp r1, 0
- bne _0802C6FC
- ldr r0, _0802C740 @ =gBattlerTarget
- ldrb r0, [r0]
- muls r0, r4
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802C71C
-_0802C6FC:
- cmp r1, 0x19
- beq _0802C71C
- ldr r6, _0802C740 @ =gBattlerTarget
- ldrb r0, [r6]
- muls r0, r4
- adds r0, r5
- adds r0, 0x20
- ldrb r3, [r0]
- cmp r3, 0x19
- beq _0802C71C
- ldr r0, _0802C744 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0802C74C
-_0802C71C:
- ldr r3, _0802C748 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802C762
- .align 2, 0
-_0802C738: .4byte gBattleMons
-_0802C73C: .4byte sBattler_AI
-_0802C740: .4byte gBattlerTarget
-_0802C744: .4byte gMoveResultFlags
-_0802C748: .4byte gUnknown_2023D74
-_0802C74C:
- ldrb r1, [r2]
- strb r3, [r2]
- ldrb r0, [r6]
- muls r0, r4
- adds r0, r5
- adds r0, 0x20
- strb r1, [r0]
- ldr r1, _0802C768 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802C762:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C768: .4byte gUnknown_2023D74
- thumb_func_end atkDA_tryswapabilities
-
- thumb_func_start atkDB_tryimprision
-atkDB_tryimprision: @ 802C76C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r1, _0802C78C @ =gStatuses3
- ldr r4, _0802C790 @ =sBattler_AI
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _0802C7BC
- b _0802C83E
- .align 2, 0
-_0802C78C: .4byte gStatuses3
-_0802C790: .4byte sBattler_AI
-_0802C794:
- ldr r0, _0802C7B4 @ =gStatuses3
- mov r2, r9
- ldrb r1, [r2]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 6
- orrs r0, r2
- str r0, [r1]
- ldr r1, _0802C7B8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802C836
- .align 2, 0
-_0802C7B4: .4byte gStatuses3
-_0802C7B8: .4byte gUnknown_2023D74
-_0802C7BC:
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldrb r0, [r4]
- bl PressurePPLoseOnUsingImprision
- movs r6, 0
- b _0802C82E
-_0802C7D2:
- adds r0, r6, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r8, r0
- beq _0802C828
- movs r4, 0
- ldr r7, _0802C864 @ =sBattler_AI
- mov r9, r7
- ldr r0, _0802C868 @ =gBattleMons
- mov r12, r0
- mov r1, r9
- ldrb r0, [r1]
- mov r2, r12
- adds r2, 0xC
- movs r1, 0x58
- muls r0, r1
- adds r3, r0, r2
- adds r5, r6, 0
- muls r5, r1
-_0802C7FC:
- movs r2, 0
- ldrh r1, [r3]
- mov r0, r12
- adds r0, 0xC
- adds r0, r5, r0
-_0802C806:
- ldrh r7, [r0]
- cmp r1, r7
- bne _0802C810
- cmp r1, 0
- bne _0802C818
-_0802C810:
- adds r0, 0x2
- adds r2, 0x1
- cmp r2, 0x3
- ble _0802C806
-_0802C818:
- cmp r2, 0x4
- bne _0802C824
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _0802C7FC
-_0802C824:
- cmp r4, 0x4
- bne _0802C794
-_0802C828:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0802C82E:
- ldr r0, _0802C86C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r6, r0
- bcc _0802C7D2
-_0802C836:
- ldr r0, _0802C86C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r6, r0
- bne _0802C858
-_0802C83E:
- ldr r3, _0802C870 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802C858:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C864: .4byte sBattler_AI
-_0802C868: .4byte gBattleMons
-_0802C86C: .4byte gBattlersCount
-_0802C870: .4byte gUnknown_2023D74
- thumb_func_end atkDB_tryimprision
-
- thumb_func_start atkDC_trysetgrudge
-atkDC_trysetgrudge: @ 802C874
- push {lr}
- ldr r1, _0802C8AC @ =gStatuses3
- ldr r0, _0802C8B0 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 2
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 7
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _0802C8B8
- ldr r3, _0802C8B4 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802C8C4
- .align 2, 0
-_0802C8AC: .4byte gStatuses3
-_0802C8B0: .4byte sBattler_AI
-_0802C8B4: .4byte gUnknown_2023D74
-_0802C8B8:
- orrs r1, r3
- str r1, [r2]
- ldr r1, _0802C8C8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802C8C4:
- pop {r0}
- bx r0
- .align 2, 0
-_0802C8C8: .4byte gUnknown_2023D74
- thumb_func_end atkDC_trysetgrudge
-
- thumb_func_start atkDD_weightdamagecalculation
-atkDD_weightdamagecalculation: @ 802C8CC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r5, 0
- ldr r2, _0802C930 @ =gUnknown_8250830
- ldrh r0, [r2]
- ldr r1, _0802C934 @ =0x0000ffff
- cmp r0, r1
- beq _0802C944
- adds r6, r2, 0
- ldr r0, _0802C938 @ =gBattleMons
- mov r8, r0
- adds r7, r1, 0
- adds r4, r6, 0
-_0802C8E8:
- ldr r0, _0802C93C @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- add r0, r8
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetPokedexHeightWeight
- ldrh r1, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bhi _0802C916
- adds r4, 0x4
- adds r5, 0x2
- ldrh r0, [r4]
- cmp r0, r7
- bne _0802C8E8
-_0802C916:
- lsls r0, r5, 1
- adds r0, r6
- ldrh r1, [r0]
- ldr r0, _0802C934 @ =0x0000ffff
- cmp r1, r0
- beq _0802C944
- ldr r0, _0802C940 @ =gDynamicBasePower
- adds r1, r5, 0x1
- lsls r1, 1
- adds r1, r6
- ldrh r1, [r1]
- strh r1, [r0]
- b _0802C94A
- .align 2, 0
-_0802C930: .4byte gUnknown_8250830
-_0802C934: .4byte 0x0000ffff
-_0802C938: .4byte gBattleMons
-_0802C93C: .4byte gBattlerTarget
-_0802C940: .4byte gDynamicBasePower
-_0802C944:
- ldr r1, _0802C95C @ =gDynamicBasePower
- movs r0, 0x78
- strh r0, [r1]
-_0802C94A:
- ldr r1, _0802C960 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C95C: .4byte gDynamicBasePower
-_0802C960: .4byte gUnknown_2023D74
- thumb_func_end atkDD_weightdamagecalculation
-
- thumb_func_start atkDE_asistattackselect
-atkDE_asistattackselect: @ 802C964
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- movs r0, 0
- mov r10, r0
- ldr r0, _0802CA84 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x18
- str r0, [sp, 0x4]
- ldr r0, _0802CA88 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- ldr r0, _0802CA8C @ =gPlayerParty
- str r0, [sp]
- cmp r1, 0
- beq _0802C994
- ldr r1, _0802CA90 @ =gEnemyParty
- str r1, [sp]
-_0802C994:
- movs r2, 0
-_0802C996:
- ldr r1, _0802CA94 @ =gBattlerPartyIndexes
- ldr r0, _0802CA88 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- adds r1, r2, 0x1
- str r1, [sp, 0x8]
- ldrh r0, [r0]
- cmp r2, r0
- beq _0802CA3C
- movs r0, 0x64
- adds r6, r2, 0
- muls r6, r0
- ldr r0, [sp]
- adds r4, r0, r6
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _0802CA3C
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0802CA3C
- movs r5, 0
- ldr r1, _0802CA98 @ =0x0000ffff
- mov r8, r1
- mov r9, r6
- mov r1, r10
- lsls r0, r1, 1
- ldr r1, [sp, 0x4]
- adds r6, r0, r1
-_0802C9E0:
- movs r7, 0
- adds r1, r5, 0
- adds r1, 0xD
- ldr r0, [sp]
- add r0, r9
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl IsInvalidForSleepTalkOrAssist
- lsls r0, 24
- adds r1, r5, 0x1
- cmp r0, 0
- bne _0802CA36
- ldr r0, _0802CA9C @ =gUnknown_82507E8
- ldrh r2, [r0]
- adds r3, r0, 0
- cmp r2, r8
- beq _0802CA2A
- cmp r4, r2
- beq _0802CA20
- ldr r5, _0802CA98 @ =0x0000ffff
- adds r2, r3, 0
-_0802CA12:
- adds r2, 0x2
- adds r7, 0x1
- ldrh r0, [r2]
- cmp r0, r5
- beq _0802CA2A
- cmp r4, r0
- bne _0802CA12
-_0802CA20:
- lsls r0, r7, 1
- adds r0, r3
- ldrh r0, [r0]
- cmp r0, r8
- bne _0802CA36
-_0802CA2A:
- cmp r4, 0
- beq _0802CA36
- strh r4, [r6]
- adds r6, 0x2
- movs r0, 0x1
- add r10, r0
-_0802CA36:
- adds r5, r1, 0
- cmp r5, 0x3
- ble _0802C9E0
-_0802CA3C:
- ldr r2, [sp, 0x8]
- cmp r2, 0x5
- ble _0802C996
- mov r1, r10
- cmp r1, 0
- beq _0802CAB4
- ldr r2, _0802CAA0 @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _0802CAA4 @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
- ldr r4, _0802CAA8 @ =gUnknown_2023D4E
- bl Random
- movs r1, 0xFF
- ands r1, r0
- mov r0, r10
- muls r0, r1
- asrs r0, 8
- lsls r0, 1
- ldr r1, [sp, 0x4]
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4]
- ldrh r0, [r4]
- movs r1, 0
- bl GetMoveTarget
- ldr r1, _0802CAAC @ =gBattlerTarget
- strb r0, [r1]
- ldr r1, _0802CAB0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802CACE
- .align 2, 0
-_0802CA84: .4byte gBattleStruct
-_0802CA88: .4byte sBattler_AI
-_0802CA8C: .4byte gPlayerParty
-_0802CA90: .4byte gEnemyParty
-_0802CA94: .4byte gBattlerPartyIndexes
-_0802CA98: .4byte 0x0000ffff
-_0802CA9C: .4byte gUnknown_82507E8
-_0802CAA0: .4byte gUnknown_2023DD0
-_0802CAA4: .4byte 0xfffffbff
-_0802CAA8: .4byte gUnknown_2023D4E
-_0802CAAC: .4byte gBattlerTarget
-_0802CAB0: .4byte gUnknown_2023D74
-_0802CAB4:
- ldr r3, _0802CAE0 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802CACE:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802CAE0: .4byte gUnknown_2023D74
- thumb_func_end atkDE_asistattackselect
-
- thumb_func_start atkDF_trysetmagiccoat
-atkDF_trysetmagiccoat: @ 802CAE4
- push {lr}
- ldr r1, _0802CB2C @ =gBattlerTarget
- ldr r3, _0802CB30 @ =sBattler_AI
- ldrb r0, [r3]
- strb r0, [r1]
- ldr r2, _0802CB34 @ =gUnknown_2023ECC
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r0, _0802CB38 @ =gUnknown_2023BE2
- ldrb r1, [r0]
- ldr r0, _0802CB3C @ =gBattlersCount
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _0802CB44
- ldr r3, _0802CB40 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802CB5C
- .align 2, 0
-_0802CB2C: .4byte gBattlerTarget
-_0802CB30: .4byte sBattler_AI
-_0802CB34: .4byte gUnknown_2023ECC
-_0802CB38: .4byte gUnknown_2023BE2
-_0802CB3C: .4byte gBattlersCount
-_0802CB40: .4byte gUnknown_2023D74
-_0802CB44:
- ldr r0, _0802CB60 @ =gUnknown_2023E8C
- ldrb r1, [r3]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x10
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _0802CB64 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802CB5C:
- pop {r0}
- bx r0
- .align 2, 0
-_0802CB60: .4byte gUnknown_2023E8C
-_0802CB64: .4byte gUnknown_2023D74
- thumb_func_end atkDF_trysetmagiccoat
-
- thumb_func_start atkE0_trysetsnatch
-atkE0_trysetsnatch: @ 802CB68
- push {lr}
- ldr r2, _0802CBAC @ =gUnknown_2023ECC
- ldr r3, _0802CBB0 @ =sBattler_AI
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0]
- ldr r0, _0802CBB4 @ =gUnknown_2023BE2
- ldrb r1, [r0]
- ldr r0, _0802CBB8 @ =gBattlersCount
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _0802CBC0
- ldr r3, _0802CBBC @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802CBD6
- .align 2, 0
-_0802CBAC: .4byte gUnknown_2023ECC
-_0802CBB0: .4byte sBattler_AI
-_0802CBB4: .4byte gUnknown_2023BE2
-_0802CBB8: .4byte gBattlersCount
-_0802CBBC: .4byte gUnknown_2023D74
-_0802CBC0:
- ldr r0, _0802CBDC @ =gUnknown_2023E8C
- ldrb r1, [r3]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _0802CBE0 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802CBD6:
- pop {r0}
- bx r0
- .align 2, 0
-_0802CBDC: .4byte gUnknown_2023E8C
-_0802CBE0: .4byte gUnknown_2023D74
- thumb_func_end atkE0_trysetsnatch
-
- thumb_func_start atkE1_trygetintimidatetarget
-atkE1_trygetintimidatetarget: @ 802CBE4
- push {r4-r6,lr}
- ldr r4, _0802CC88 @ =gBattleScripting
- ldr r0, _0802CC8C @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xD8
- ldrb r0, [r0]
- strb r0, [r4, 0x17]
- ldrb r0, [r4, 0x17]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r2, _0802CC90 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r2]
- movs r0, 0x9
- strb r0, [r2, 0x1]
- ldr r3, _0802CC94 @ =gBattleMons
- ldrb r1, [r4, 0x17]
- movs r0, 0x58
- muls r0, r1
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r2, 0x2]
- movs r0, 0xFF
- strb r0, [r2, 0x3]
- ldr r2, _0802CC98 @ =gBattlerTarget
- ldr r1, _0802CC9C @ =gBattlersCount
- ldrb r0, [r2]
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802CC6A
- adds r4, r2, 0
- ldr r6, _0802CCA0 @ =gBitTable
-_0802CC2A:
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r5
- beq _0802CC4C
- ldr r0, _0802CCA4 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ands r1, r0
- ldr r2, _0802CC9C @ =gBattlersCount
- cmp r1, 0
- beq _0802CC60
-_0802CC4C:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _0802CC9C @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- adds r2, r1, 0
- ldrb r1, [r2]
- cmp r0, r1
- bcc _0802CC2A
-_0802CC60:
- ldr r0, _0802CC98 @ =gBattlerTarget
- ldrb r0, [r0]
- ldrb r2, [r2]
- cmp r0, r2
- bcc _0802CCAC
-_0802CC6A:
- ldr r3, _0802CCA8 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802CCB4
- .align 2, 0
-_0802CC88: .4byte gBattleScripting
-_0802CC8C: .4byte gBattleStruct
-_0802CC90: .4byte gBattleTextBuff1
-_0802CC94: .4byte gBattleMons
-_0802CC98: .4byte gBattlerTarget
-_0802CC9C: .4byte gBattlersCount
-_0802CCA0: .4byte gBitTable
-_0802CCA4: .4byte gAbsentBattlerFlags
-_0802CCA8: .4byte gUnknown_2023D74
-_0802CCAC:
- ldr r1, _0802CCBC @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802CCB4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802CCBC: .4byte gUnknown_2023D74
- thumb_func_end atkE1_trygetintimidatetarget
-
- thumb_func_start atkE2_switchoutabilities
-atkE2_switchoutabilities: @ 802CCC0
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r5, _0802CD28 @ =gUnknown_2023D74
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r4, _0802CD2C @ =gActiveBattler
- strb r0, [r4]
- ldr r3, _0802CD30 @ =gBattleMons
- ldrb r0, [r4]
- movs r6, 0x58
- adds r1, r0, 0
- muls r1, r6
- adds r0, r1, r3
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1E
- bne _0802CD1A
- adds r3, 0x4C
- adds r1, r3
- movs r0, 0
- str r0, [r1]
- ldr r2, _0802CD34 @ =gBitTable
- ldrb r1, [r4]
- ldr r0, _0802CD38 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, r1, r0
- adds r0, 0x58
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0]
- adds r0, r1, 0
- muls r0, r6
- adds r0, r3
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_0802CD1A:
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802CD28: .4byte gUnknown_2023D74
-_0802CD2C: .4byte gActiveBattler
-_0802CD30: .4byte gBattleMons
-_0802CD34: .4byte gBitTable
-_0802CD38: .4byte gBattleStruct
- thumb_func_end atkE2_switchoutabilities
-
- thumb_func_start atkE3_jumpifhasnohp
-atkE3_jumpifhasnohp: @ 802CD3C
- push {r4,lr}
- ldr r4, _0802CD78 @ =gUnknown_2023D74
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl sub_8016E24
- ldr r1, _0802CD7C @ =gActiveBattler
- strb r0, [r1]
- ldr r2, _0802CD80 @ =gBattleMons
- ldrb r1, [r1]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0802CD84
- ldr r2, [r4]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _0802CD8A
- .align 2, 0
-_0802CD78: .4byte gUnknown_2023D74
-_0802CD7C: .4byte gActiveBattler
-_0802CD80: .4byte gBattleMons
-_0802CD84:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_0802CD8A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end atkE3_jumpifhasnohp
-
- thumb_func_start atkE4_getsecretpowereffect
-atkE4_getsecretpowereffect: @ 802CD90
- push {lr}
- ldr r0, _0802CDA4 @ =gUnknown_2022B50
- ldrb r0, [r0]
- cmp r0, 0x7
- bhi _0802CE2C
- lsls r0, 2
- ldr r1, _0802CDA8 @ =_0802CDAC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802CDA4: .4byte gUnknown_2022B50
-_0802CDA8: .4byte _0802CDAC
- .align 2, 0
-_0802CDAC:
- .4byte _0802CDCC
- .4byte _0802CDD8
- .4byte _0802CDE4
- .4byte _0802CDF0
- .4byte _0802CDFC
- .4byte _0802CE08
- .4byte _0802CE14
- .4byte _0802CE20
-_0802CDCC:
- ldr r1, _0802CDD4 @ =gUnknown_2023E82
- movs r0, 0x2
- b _0802CE30
- .align 2, 0
-_0802CDD4: .4byte gUnknown_2023E82
-_0802CDD8:
- ldr r1, _0802CDE0 @ =gUnknown_2023E82
- movs r0, 0x1
- b _0802CE30
- .align 2, 0
-_0802CDE0: .4byte gUnknown_2023E82
-_0802CDE4:
- ldr r1, _0802CDEC @ =gUnknown_2023E82
- movs r0, 0x1B
- b _0802CE30
- .align 2, 0
-_0802CDEC: .4byte gUnknown_2023E82
-_0802CDF0:
- ldr r1, _0802CDF8 @ =gUnknown_2023E82
- movs r0, 0x17
- b _0802CE30
- .align 2, 0
-_0802CDF8: .4byte gUnknown_2023E82
-_0802CDFC:
- ldr r1, _0802CE04 @ =gUnknown_2023E82
- movs r0, 0x16
- b _0802CE30
- .align 2, 0
-_0802CE04: .4byte gUnknown_2023E82
-_0802CE08:
- ldr r1, _0802CE10 @ =gUnknown_2023E82
- movs r0, 0x18
- b _0802CE30
- .align 2, 0
-_0802CE10: .4byte gUnknown_2023E82
-_0802CE14:
- ldr r1, _0802CE1C @ =gUnknown_2023E82
- movs r0, 0x7
- b _0802CE30
- .align 2, 0
-_0802CE1C: .4byte gUnknown_2023E82
-_0802CE20:
- ldr r1, _0802CE28 @ =gUnknown_2023E82
- movs r0, 0x8
- b _0802CE30
- .align 2, 0
-_0802CE28: .4byte gUnknown_2023E82
-_0802CE2C:
- ldr r1, _0802CE40 @ =gUnknown_2023E82
- movs r0, 0x5
-_0802CE30:
- strb r0, [r1, 0x3]
- ldr r1, _0802CE44 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0802CE40: .4byte gUnknown_2023E82
-_0802CE44: .4byte gUnknown_2023D74
- thumb_func_end atkE4_getsecretpowereffect
-
- thumb_func_start sub_802CE48
-sub_802CE48: @ 802CE48
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r7, 0
- ldr r0, _0802CE90 @ =gBaseStats
- mov r8, r0
-_0802CE54:
- movs r0, 0x64
- adds r4, r7, 0
- muls r4, r0
- ldr r0, _0802CE94 @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r4, 0
- movs r1, 0x2E
- bl GetMonData
- cmp r0, 0
- beq _0802CE98
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x17]
- b _0802CEA2
- .align 2, 0
-_0802CE90: .4byte gBaseStats
-_0802CE94: .4byte gPlayerParty
-_0802CE98:
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x16]
-_0802CEA2:
- adds r4, r7, 0x1
- cmp r0, 0x35
- bne _0802CF0A
- cmp r5, 0
- beq _0802CF0A
- movs r0, 0xCE
- lsls r0, 1
- cmp r5, r0
- beq _0802CF0A
- cmp r6, 0
- bne _0802CF0A
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _0802CF0A
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0
- ldr r1, _0802CEE4 @ =gUnknown_8250848
- b _0802CEF0
- .align 2, 0
-_0802CEE4: .4byte gUnknown_8250848
-_0802CEE8:
- adds r1, 0x4
- adds r2, 0x1
- cmp r2, 0xE
- bhi _0802CEF6
-_0802CEF0:
- ldrb r0, [r1, 0x2]
- cmp r0, r3
- ble _0802CEE8
-_0802CEF6:
- movs r0, 0x64
- muls r0, r7
- ldr r1, _0802CF24 @ =gPlayerParty
- adds r0, r1
- lsls r2, 2
- ldr r1, _0802CF28 @ =gUnknown_8250848
- adds r2, r1
- movs r1, 0xC
- bl SetMonData
-_0802CF0A:
- adds r7, r4, 0
- cmp r7, 0x5
- ble _0802CE54
- ldr r1, _0802CF2C @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802CF24: .4byte gPlayerParty
-_0802CF28: .4byte gUnknown_8250848
-_0802CF2C: .4byte gUnknown_2023D74
- thumb_func_end sub_802CE48
-
- thumb_func_start atkE6_docastformchangeanimation
-atkE6_docastformchangeanimation: @ 802CF30
- push {r4,lr}
- ldr r4, _0802CF84 @ =gActiveBattler
- ldr r0, _0802CF88 @ =gBattleScripting
- ldrb r0, [r0, 0x17]
- strb r0, [r4]
- ldr r1, _0802CF8C @ =gBattleMons
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- ldr r3, _0802CF90 @ =gBattleStruct
- cmp r0, 0
- beq _0802CF60
- ldr r0, [r3]
- adds r0, 0x7F
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_0802CF60:
- ldr r0, [r3]
- adds r0, 0x7F
- ldrb r2, [r0]
- movs r0, 0
- movs r1, 0
- bl EmitBattleAnimation
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r1, _0802CF94 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802CF84: .4byte gActiveBattler
-_0802CF88: .4byte gBattleScripting
-_0802CF8C: .4byte gBattleMons
-_0802CF90: .4byte gBattleStruct
-_0802CF94: .4byte gUnknown_2023D74
- thumb_func_end atkE6_docastformchangeanimation
-
- thumb_func_start atkE7_trycastformdatachange
-atkE7_trycastformdatachange: @ 802CF98
- push {r4,lr}
- ldr r1, _0802CFC8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- ldr r0, _0802CFCC @ =gBattleScripting
- ldrb r0, [r0, 0x17]
- bl sub_8019DAC
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _0802CFC2
- ldr r0, _0802CFD0 @ =gUnknown_81D92F8
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0802CFD4 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x7F
- subs r1, r4, 0x1
- strb r1, [r0]
-_0802CFC2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802CFC8: .4byte gUnknown_2023D74
-_0802CFCC: .4byte gBattleScripting
-_0802CFD0: .4byte gUnknown_81D92F8
-_0802CFD4: .4byte gBattleStruct
- thumb_func_end atkE7_trycastformdatachange
-
- thumb_func_start atkE8_settypebasedhalvers
-atkE8_settypebasedhalvers: @ 802CFD8
- push {r4,lr}
- movs r4, 0
- ldr r2, _0802D014 @ =gBattleMoves
- ldr r0, _0802D018 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0xC9
- bne _0802D028
- ldr r1, _0802D01C @ =gStatuses3
- ldr r0, _0802D020 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 2
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 9
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- bne _0802D04C
- orrs r1, r3
- str r1, [r2]
- ldr r0, _0802D024 @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
- b _0802D050
- .align 2, 0
-_0802D014: .4byte gBattleMoves
-_0802D018: .4byte gCurrentMove
-_0802D01C: .4byte gStatuses3
-_0802D020: .4byte sBattler_AI
-_0802D024: .4byte gUnknown_2023E82
-_0802D028:
- ldr r1, _0802D05C @ =gStatuses3
- ldr r0, _0802D060 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 2
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 10
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- bne _0802D04C
- orrs r1, r3
- str r1, [r2]
- ldr r1, _0802D064 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- movs r4, 0x1
-_0802D04C:
- cmp r4, 0
- beq _0802D06C
-_0802D050:
- ldr r1, _0802D068 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802D086
- .align 2, 0
-_0802D05C: .4byte gStatuses3
-_0802D060: .4byte sBattler_AI
-_0802D064: .4byte gUnknown_2023E82
-_0802D068: .4byte gUnknown_2023D74
-_0802D06C:
- ldr r3, _0802D08C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802D086:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D08C: .4byte gUnknown_2023D74
- thumb_func_end atkE8_settypebasedhalvers
-
- thumb_func_start atkE9_setweatherballtype
-atkE9_setweatherballtype: @ 802D090
- push {lr}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0802D130
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0802D130
- ldr r2, _0802D0E0 @ =gBattleWeather
- ldrb r0, [r2]
- cmp r0, 0
- beq _0802D0CE
- ldr r1, _0802D0E4 @ =gBattleScripting
- movs r0, 0x2
- strb r0, [r1, 0xE]
-_0802D0CE:
- ldrh r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0802D0EC
- ldr r0, _0802D0E8 @ =gBattleStruct
- ldr r1, [r0]
- movs r0, 0x8B
- b _0802D12E
- .align 2, 0
-_0802D0E0: .4byte gBattleWeather
-_0802D0E4: .4byte gBattleScripting
-_0802D0E8: .4byte gBattleStruct
-_0802D0EC:
- movs r0, 0x18
- ands r0, r1
- cmp r0, 0
- beq _0802D100
- ldr r0, _0802D0FC @ =gBattleStruct
- ldr r1, [r0]
- movs r0, 0x85
- b _0802D12E
- .align 2, 0
-_0802D0FC: .4byte gBattleStruct
-_0802D100:
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0802D114
- ldr r0, _0802D110 @ =gBattleStruct
- ldr r1, [r0]
- movs r0, 0x8A
- b _0802D12E
- .align 2, 0
-_0802D110: .4byte gBattleStruct
-_0802D114:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802D128
- ldr r0, _0802D124 @ =gBattleStruct
- ldr r1, [r0]
- movs r0, 0x8F
- b _0802D12E
- .align 2, 0
-_0802D124: .4byte gBattleStruct
-_0802D128:
- ldr r0, _0802D140 @ =gBattleStruct
- ldr r1, [r0]
- movs r0, 0x80
-_0802D12E:
- strb r0, [r1, 0x13]
-_0802D130:
- ldr r1, _0802D144 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0802D140: .4byte gBattleStruct
-_0802D144: .4byte gUnknown_2023D74
- thumb_func_end atkE9_setweatherballtype
-
- thumb_func_start atkEA_tryrecycleitem
-atkEA_tryrecycleitem: @ 802D148
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r7, _0802D1B0 @ =gActiveBattler
- ldr r0, _0802D1B4 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r7]
- ldr r1, _0802D1B8 @ =gBattleStruct
- ldrb r2, [r7]
- lsls r0, r2, 1
- adds r0, 0xB8
- ldr r1, [r1]
- adds r6, r1, r0
- ldrh r5, [r6]
- cmp r5, 0
- beq _0802D1C8
- ldr r4, _0802D1BC @ =gBattleMons
- movs r3, 0x58
- adds r0, r2, 0
- muls r0, r3
- adds r0, r4
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- bne _0802D1C8
- ldr r1, _0802D1C0 @ =gUnknown_2023D68
- strh r5, [r1]
- strh r0, [r6]
- ldrb r0, [r7]
- muls r0, r3
- adds r0, r4
- ldrh r1, [r1]
- strh r1, [r0, 0x2E]
- ldrb r0, [r7]
- muls r0, r3
- adds r1, r4, 0
- adds r1, 0x2E
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl EmitSetMonData
- ldrb r0, [r7]
- bl MarkBufferBankForExecution
- ldr r1, _0802D1C4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802D1E2
- .align 2, 0
-_0802D1B0: .4byte gActiveBattler
-_0802D1B4: .4byte sBattler_AI
-_0802D1B8: .4byte gBattleStruct
-_0802D1BC: .4byte gBattleMons
-_0802D1C0: .4byte gUnknown_2023D68
-_0802D1C4: .4byte gUnknown_2023D74
-_0802D1C8:
- ldr r3, _0802D1EC @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802D1E2:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D1EC: .4byte gUnknown_2023D74
- thumb_func_end atkEA_tryrecycleitem
-
- thumb_func_start atkEB_settypetoterrain
-atkEB_settypetoterrain: @ 802D1F0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _0802D260 @ =gBattleMons
- mov r8, r0
- ldr r7, _0802D264 @ =sBattler_AI
- ldrb r0, [r7]
- movs r6, 0x58
- muls r0, r6
- mov r1, r8
- adds r3, r0, r1
- movs r0, 0x21
- adds r0, r3
- mov r12, r0
- ldr r5, _0802D268 @ =gUnknown_8250888
- ldr r4, _0802D26C @ =gUnknown_2022B50
- ldrb r0, [r4]
- adds r0, r5
- ldrb r2, [r0]
- mov r1, r12
- ldrb r0, [r1]
- adds r1, r2, 0
- cmp r0, r1
- beq _0802D278
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- beq _0802D278
- mov r0, r12
- strb r2, [r0]
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- add r1, r8
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- adds r1, 0x22
- strb r0, [r1]
- ldr r1, _0802D270 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r1, _0802D274 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802D292
- .align 2, 0
-_0802D260: .4byte gBattleMons
-_0802D264: .4byte sBattler_AI
-_0802D268: .4byte gUnknown_8250888
-_0802D26C: .4byte gUnknown_2022B50
-_0802D270: .4byte gBattleTextBuff1
-_0802D274: .4byte gUnknown_2023D74
-_0802D278:
- ldr r3, _0802D29C @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802D292:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D29C: .4byte gUnknown_2023D74
- thumb_func_end atkEB_settypetoterrain
-
- thumb_func_start atkEC_pursuitrelated
-atkEC_pursuitrelated: @ 802D2A0
- push {r4-r6,lr}
- ldr r5, _0802D314 @ =sBattler_AI
- ldrb r0, [r5]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r4, _0802D318 @ =gActiveBattler
- strb r0, [r4]
- ldr r0, _0802D31C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r6, 0x1
- ands r0, r6
- cmp r0, 0
- beq _0802D340
- ldr r0, _0802D320 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0802D324 @ =gBitTable
- ldrb r3, [r4]
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802D340
- ldr r0, _0802D328 @ =gUnknown_2023D7C
- adds r0, r3, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802D340
- ldr r1, _0802D32C @ =gUnknown_2023DC4
- lsls r0, r3, 1
- adds r0, r1
- ldrh r2, [r0]
- cmp r2, 0xE4
- bne _0802D340
- ldr r0, _0802D330 @ =gUnknown_2023BDA
- adds r0, r3, r0
- movs r1, 0xB
- strb r1, [r0]
- ldr r0, _0802D334 @ =gCurrentMove
- strh r2, [r0]
- ldr r1, _0802D338 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- ldr r0, _0802D33C @ =gBattleScripting
- strb r6, [r0, 0x18]
- ldrb r1, [r5]
- adds r0, 0x20
- strb r1, [r0]
- ldrb r0, [r4]
- strb r0, [r5]
- b _0802D35A
- .align 2, 0
-_0802D314: .4byte sBattler_AI
-_0802D318: .4byte gActiveBattler
-_0802D31C: .4byte gBattleTypeFlags
-_0802D320: .4byte gAbsentBattlerFlags
-_0802D324: .4byte gBitTable
-_0802D328: .4byte gUnknown_2023D7C
-_0802D32C: .4byte gUnknown_2023DC4
-_0802D330: .4byte gUnknown_2023BDA
-_0802D334: .4byte gCurrentMove
-_0802D338: .4byte gUnknown_2023D74
-_0802D33C: .4byte gBattleScripting
-_0802D340:
- ldr r3, _0802D360 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802D35A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D360: .4byte gUnknown_2023D74
- thumb_func_end atkEC_pursuitrelated
-
- thumb_func_start atkEF_snatchsetbanks
-atkEF_snatchsetbanks: @ 802D364
- push {r4,lr}
- ldr r1, _0802D388 @ =gUnknown_2023D6E
- ldr r3, _0802D38C @ =sBattler_AI
- ldrb r0, [r3]
- strb r0, [r1]
- ldr r2, _0802D390 @ =gBattlerTarget
- lsls r0, 24
- lsrs r0, 24
- adds r4, r1, 0
- ldrb r1, [r2]
- cmp r0, r1
- bne _0802D398
- ldr r1, _0802D394 @ =gBattleScripting
- ldrb r0, [r1, 0x17]
- strb r0, [r2]
- strb r0, [r3]
- b _0802D39E
- .align 2, 0
-_0802D388: .4byte gUnknown_2023D6E
-_0802D38C: .4byte sBattler_AI
-_0802D390: .4byte gBattlerTarget
-_0802D394: .4byte gBattleScripting
-_0802D398:
- ldr r1, _0802D3B0 @ =gBattleScripting
- ldrb r0, [r1, 0x17]
- strb r0, [r2]
-_0802D39E:
- ldrb r0, [r4]
- strb r0, [r1, 0x17]
- ldr r1, _0802D3B4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D3B0: .4byte gBattleScripting
-_0802D3B4: .4byte gUnknown_2023D74
- thumb_func_end atkEF_snatchsetbanks
-
- thumb_func_start atkEE_removelightscreenreflect
-atkEE_removelightscreenreflect: @ 802D3B8
- push {r4,lr}
- ldr r0, _0802D400 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0802D404 @ =gSideTimers
- lsls r3, r0, 1
- adds r0, r3, r0
- lsls r0, 2
- adds r4, r0, r1
- ldrb r0, [r4]
- cmp r0, 0
- bne _0802D3E0
- ldrb r1, [r4, 0x2]
- cmp r1, 0
- beq _0802D418
-_0802D3E0:
- ldr r2, _0802D408 @ =gSideAffecting
- adds r2, r3, r2
- ldrh r1, [r2]
- ldr r0, _0802D40C @ =0x0000fffe
- ands r0, r1
- movs r3, 0
- ldr r1, _0802D410 @ =0x0000fffd
- ands r0, r1
- strh r0, [r2]
- strb r3, [r4]
- strb r3, [r4, 0x2]
- ldr r1, _0802D414 @ =gBattleScripting
- movs r0, 0x1
- strb r0, [r1, 0x18]
- strb r0, [r1, 0x19]
- b _0802D41E
- .align 2, 0
-_0802D400: .4byte sBattler_AI
-_0802D404: .4byte gSideTimers
-_0802D408: .4byte gSideAffecting
-_0802D40C: .4byte 0x0000fffe
-_0802D410: .4byte 0x0000fffd
-_0802D414: .4byte gBattleScripting
-_0802D418:
- ldr r0, _0802D42C @ =gBattleScripting
- strb r1, [r0, 0x18]
- strb r1, [r0, 0x19]
-_0802D41E:
- ldr r1, _0802D430 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D42C: .4byte gBattleScripting
-_0802D430: .4byte gUnknown_2023D74
- thumb_func_end atkEE_removelightscreenreflect
-
- thumb_func_start sub_802D434
-sub_802D434: @ 802D434
- push {r4-r6,lr}
- movs r4, 0
- ldr r0, _0802D474 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- beq _0802D442
- b _0802D7EE
-_0802D442:
- ldr r5, _0802D478 @ =gActiveBattler
- ldr r0, _0802D47C @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r5]
- ldr r6, _0802D480 @ =gBattlerTarget
- movs r1, 0x1
- eors r0, r1
- strb r0, [r6]
- ldr r0, _0802D484 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _0802D490
- movs r0, 0
- movs r1, 0x6
- bl EmitBallThrowAnim
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r1, _0802D488 @ =gUnknown_2023D74
- ldr r0, _0802D48C @ =gUnknown_81D9AD1
- b _0802D7EC
- .align 2, 0
-_0802D474: .4byte gUnknown_2023BC8
-_0802D478: .4byte gActiveBattler
-_0802D47C: .4byte sBattler_AI
-_0802D480: .4byte gBattlerTarget
-_0802D484: .4byte gBattleTypeFlags
-_0802D488: .4byte gUnknown_2023D74
-_0802D48C: .4byte gUnknown_81D9AD1
-_0802D490:
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0802D4B4
- movs r0, 0
- movs r1, 0x5
- bl EmitBallThrowAnim
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r1, _0802D4AC @ =gUnknown_2023D74
- ldr r0, _0802D4B0 @ =gUnknown_81D9AC1
- b _0802D7EC
- .align 2, 0
-_0802D4AC: .4byte gUnknown_2023D74
-_0802D4B0: .4byte gUnknown_81D9AC1
-_0802D4B4:
- movs r0, 0x81
- lsls r0, 9
- ands r1, r0
- cmp r1, 0
- beq _0802D4DC
- movs r0, 0
- movs r1, 0x4
- bl EmitBallThrowAnim
- ldrb r0, [r5]
- bl MarkBufferBankForExecution
- ldr r1, _0802D4D4 @ =gUnknown_2023D74
- ldr r0, _0802D4D8 @ =gUnknown_81D9A88
- b _0802D7EC
- .align 2, 0
-_0802D4D4: .4byte gUnknown_2023D74
-_0802D4D8: .4byte gUnknown_81D9A88
-_0802D4DC:
- ldr r0, _0802D500 @ =gUnknown_2023D68
- ldrh r0, [r0]
- cmp r0, 0x5
- bne _0802D508
- ldr r0, _0802D504 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x7C
- ldrb r0, [r0]
- lsls r1, r0, 2
- adds r1, r0
- lsls r0, r1, 8
- subs r0, r1
- movs r1, 0x64
- bl __divsi3
- lsls r0, 24
- lsrs r5, r0, 24
- b _0802D520
- .align 2, 0
-_0802D500: .4byte gUnknown_2023D68
-_0802D504: .4byte gBattleStruct
-_0802D508:
- ldr r3, _0802D53C @ =gBaseStats
- ldr r2, _0802D540 @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r5, [r0, 0x8]
-_0802D520:
- ldr r2, _0802D544 @ =gUnknown_2023D68
- ldrh r0, [r2]
- cmp r0, 0x5
- bhi _0802D52A
- b _0802D620
-_0802D52A:
- subs r0, 0x6
- cmp r0, 0x6
- bls _0802D532
- b _0802D62A
-_0802D532:
- lsls r0, 2
- ldr r1, _0802D548 @ =_0802D54C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802D53C: .4byte gBaseStats
-_0802D540: .4byte gBattleMons
-_0802D544: .4byte gUnknown_2023D68
-_0802D548: .4byte _0802D54C
- .align 2, 0
-_0802D54C:
- .4byte _0802D568
- .4byte _0802D598
- .4byte _0802D5AA
- .4byte _0802D5D8
- .4byte _0802D608
- .4byte _0802D5CA
- .4byte _0802D5CA
-_0802D568:
- ldr r2, _0802D590 @ =gBattleMons
- ldr r0, _0802D594 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r1, [r1]
- cmp r1, 0xB
- beq _0802D5FC
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0xB
- beq _0802D5FC
- cmp r1, 0x6
- beq _0802D5FC
- cmp r0, 0x6
- beq _0802D5FC
- b _0802D5CA
- .align 2, 0
-_0802D590: .4byte gBattleMons
-_0802D594: .4byte gBattlerTarget
-_0802D598:
- bl sav1_map_get_light_level
- lsls r0, 24
- lsrs r0, 24
- movs r4, 0xA
- cmp r0, 0x5
- bne _0802D62A
- movs r4, 0x23
- b _0802D62A
-_0802D5AA:
- ldr r2, _0802D5D0 @ =gBattleMons
- ldr r0, _0802D5D4 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r1, [r0]
- cmp r1, 0x27
- bhi _0802D5CA
- movs r0, 0x28
- subs r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x9
- bhi _0802D62A
-_0802D5CA:
- movs r4, 0xA
- b _0802D62A
- .align 2, 0
-_0802D5D0: .4byte gBattleMons
-_0802D5D4: .4byte gBattlerTarget
-_0802D5D8:
- ldr r2, _0802D600 @ =gBattleMons
- ldr r0, _0802D604 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetSetPokedexFlag
- lsls r0, 24
- movs r4, 0xA
- cmp r0, 0
- beq _0802D62A
-_0802D5FC:
- movs r4, 0x1E
- b _0802D62A
- .align 2, 0
-_0802D600: .4byte gBattleMons
-_0802D604: .4byte gBattlerTarget
-_0802D608:
- ldr r0, _0802D61C @ =gBattleResults
- ldrb r0, [r0, 0x13]
- adds r0, 0xA
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x28
- bls _0802D62A
- movs r4, 0x28
- b _0802D62A
- .align 2, 0
-_0802D61C: .4byte gBattleResults
-_0802D620:
- ldr r1, _0802D694 @ =gUnknown_8250892
- ldrh r0, [r2]
- subs r0, 0x2
- adds r0, r1
- ldrb r4, [r0]
-_0802D62A:
- adds r0, r5, 0
- muls r0, r4
- movs r1, 0xA
- bl __divsi3
- ldr r5, _0802D698 @ =gBattleMons
- ldr r1, _0802D69C @ =gBattlerTarget
- ldrb r2, [r1]
- movs r1, 0x58
- adds r4, r2, 0
- muls r4, r1
- adds r3, r4, r5
- ldrh r2, [r3, 0x2C]
- lsls r1, r2, 1
- adds r1, r2
- ldrh r2, [r3, 0x28]
- lsls r2, 1
- subs r2, r1, r2
- muls r0, r2
- bl __divsi3
- adds r6, r0, 0
- adds r5, 0x4C
- adds r4, r5
- ldr r4, [r4]
- movs r0, 0x27
- ands r0, r4
- cmp r0, 0
- beq _0802D666
- lsls r6, 1
-_0802D666:
- movs r0, 0xD8
- ands r4, r0
- cmp r4, 0
- beq _0802D67A
- lsls r0, r6, 4
- subs r0, r6
- movs r1, 0xA
- bl __udivsi3
- adds r6, r0, 0
-_0802D67A:
- ldr r1, _0802D6A0 @ =gUnknown_2023D68
- ldrh r0, [r1]
- cmp r0, 0x5
- beq _0802D6BC
- cmp r0, 0x1
- bne _0802D6A8
- ldr r0, _0802D6A4 @ =gBattleResults
- ldrb r1, [r0, 0x5]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0, 0x5]
- b _0802D6BC
- .align 2, 0
-_0802D694: .4byte gUnknown_8250892
-_0802D698: .4byte gBattleMons
-_0802D69C: .4byte gBattlerTarget
-_0802D6A0: .4byte gUnknown_2023D68
-_0802D6A4: .4byte gBattleResults
-_0802D6A8:
- ldr r0, _0802D700 @ =gBattleResults
- ldrh r1, [r1]
- adds r0, r1
- adds r1, r0, 0
- adds r1, 0x34
- ldrb r0, [r1]
- cmp r0, 0xFE
- bhi _0802D6BC
- adds r0, 0x1
- strb r0, [r1]
-_0802D6BC:
- cmp r6, 0xFE
- bls _0802D720
- movs r0, 0
- movs r1, 0x4
- bl EmitBallThrowAnim
- ldr r0, _0802D704 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r1, _0802D708 @ =gUnknown_2023D74
- ldr r0, _0802D70C @ =gUnknown_81D9A42
- str r0, [r1]
- ldr r1, _0802D710 @ =gBattlerPartyIndexes
- ldr r0, _0802D714 @ =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802D718 @ =gEnemyParty
- adds r0, r1
- ldr r2, _0802D71C @ =gUnknown_2023D68
- movs r1, 0x26
- bl SetMonData
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- beq _0802D7AE
- b _0802D7D8
- .align 2, 0
-_0802D700: .4byte gBattleResults
-_0802D704: .4byte gActiveBattler
-_0802D708: .4byte gUnknown_2023D74
-_0802D70C: .4byte gUnknown_81D9A42
-_0802D710: .4byte gBattlerPartyIndexes
-_0802D714: .4byte gBattlerTarget
-_0802D718: .4byte gEnemyParty
-_0802D71C: .4byte gUnknown_2023D68
-_0802D720:
- movs r0, 0xFF
- lsls r0, 16
- adds r1, r6, 0
- bl __udivsi3
- bl Sqrt
- lsls r0, 16
- lsrs r0, 16
- bl Sqrt
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, _0802D748 @ =0x000ffff0
- adds r1, r6, 0
- bl __udivsi3
- adds r6, r0, 0
- movs r4, 0
- b _0802D752
- .align 2, 0
-_0802D748: .4byte 0x000ffff0
-_0802D74C:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_0802D752:
- cmp r4, 0x3
- bhi _0802D762
- bl Random
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcc _0802D74C
-_0802D762:
- ldr r5, _0802D7B8 @ =gUnknown_2023D68
- ldrh r0, [r5]
- cmp r0, 0x1
- bne _0802D76C
- movs r4, 0x4
-_0802D76C:
- movs r0, 0
- adds r1, r4, 0
- bl EmitBallThrowAnim
- ldr r0, _0802D7BC @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- cmp r4, 0x4
- bne _0802D7E4
- ldr r1, _0802D7C0 @ =gUnknown_2023D74
- ldr r0, _0802D7C4 @ =gUnknown_81D9A42
- str r0, [r1]
- ldr r1, _0802D7C8 @ =gBattlerPartyIndexes
- ldr r0, _0802D7CC @ =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802D7D0 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x26
- adds r2, r5, 0
- bl SetMonData
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- bne _0802D7D8
-_0802D7AE:
- ldr r1, _0802D7D4 @ =gUnknown_2023E82
- movs r0, 0
- strb r0, [r1, 0x5]
- b _0802D7EE
- .align 2, 0
-_0802D7B8: .4byte gUnknown_2023D68
-_0802D7BC: .4byte gActiveBattler
-_0802D7C0: .4byte gUnknown_2023D74
-_0802D7C4: .4byte gUnknown_81D9A42
-_0802D7C8: .4byte gBattlerPartyIndexes
-_0802D7CC: .4byte gBattlerTarget
-_0802D7D0: .4byte gEnemyParty
-_0802D7D4: .4byte gUnknown_2023E82
-_0802D7D8:
- ldr r1, _0802D7E0 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _0802D7EE
- .align 2, 0
-_0802D7E0: .4byte gUnknown_2023E82
-_0802D7E4:
- ldr r0, _0802D7F4 @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
- ldr r1, _0802D7F8 @ =gUnknown_2023D74
- ldr r0, _0802D7FC @ =gUnknown_81D9A93
-_0802D7EC:
- str r0, [r1]
-_0802D7EE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D7F4: .4byte gUnknown_2023E82
-_0802D7F8: .4byte gUnknown_2023D74
-_0802D7FC: .4byte gUnknown_81D9A93
- thumb_func_end sub_802D434
-
- thumb_func_start sub_802D800
-sub_802D800: @ 802D800
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _0802D870 @ =gBattlerPartyIndexes
- mov r9, r0
- ldr r5, _0802D874 @ =sBattler_AI
- ldrb r0, [r5]
- movs r6, 0x1
- eors r0, r6
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- movs r7, 0x64
- muls r0, r7
- ldr r1, _0802D878 @ =gEnemyParty
- mov r8, r1
- add r0, r8
- bl GiveMonToPlayer
- lsls r0, 24
- cmp r0, 0
- beq _0802D8EA
- bl sub_80CC7B4
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _0802D88C
- ldr r0, _0802D87C @ =gUnknown_2023E82
- strb r1, [r0, 0x5]
- ldr r4, _0802D880 @ =gStringVar1
- ldr r0, _0802D884 @ =0x00004037
- bl VarGet
- lsls r0, 24
- lsrs r0, 24
- bl GetBoxNamePtr
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- ldrb r0, [r5]
- eors r0, r6
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- add r0, r8
- ldr r2, _0802D888 @ =gStringVar2
- movs r1, 0x2
- bl GetMonData
- b _0802D8D6
- .align 2, 0
-_0802D870: .4byte gBattlerPartyIndexes
-_0802D874: .4byte sBattler_AI
-_0802D878: .4byte gEnemyParty
-_0802D87C: .4byte gUnknown_2023E82
-_0802D880: .4byte gStringVar1
-_0802D884: .4byte 0x00004037
-_0802D888: .4byte gStringVar2
-_0802D88C:
- ldr r4, _0802D92C @ =gStringVar1
- ldr r0, _0802D930 @ =0x00004037
- bl VarGet
- lsls r0, 24
- lsrs r0, 24
- bl GetBoxNamePtr
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- ldrb r0, [r5]
- eors r0, r6
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- add r0, r8
- ldr r2, _0802D934 @ =gStringVar2
- movs r1, 0x2
- bl GetMonData
- ldr r4, _0802D938 @ =gStringVar3
- bl get_unknown_box_id
- lsls r0, 24
- lsrs r0, 24
- bl GetBoxNamePtr
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- ldr r1, _0802D93C @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
-_0802D8D6:
- ldr r0, _0802D940 @ =0x00000834
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0802D8EA
- ldr r1, _0802D93C @ =gUnknown_2023E82
- ldrb r0, [r1, 0x5]
- adds r0, 0x1
- strb r0, [r1, 0x5]
-_0802D8EA:
- ldr r2, _0802D944 @ =gBattleResults
- ldr r3, _0802D948 @ =gBattleMons
- ldr r0, _0802D94C @ =sBattler_AI
- ldrb r0, [r0]
- movs r1, 0x1
- eors r1, r0
- movs r0, 0x58
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r2, 0x28]
- ldr r0, _0802D950 @ =gBattlerPartyIndexes
- lsls r1, 1
- adds r1, r0
- ldrh r1, [r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802D954 @ =gEnemyParty
- adds r0, r1
- adds r2, 0x2A
- movs r1, 0x2
- bl GetMonData
- ldr r1, _0802D958 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D92C: .4byte gStringVar1
-_0802D930: .4byte 0x00004037
-_0802D934: .4byte gStringVar2
-_0802D938: .4byte gStringVar3
-_0802D93C: .4byte gUnknown_2023E82
-_0802D940: .4byte 0x00000834
-_0802D944: .4byte gBattleResults
-_0802D948: .4byte gBattleMons
-_0802D94C: .4byte sBattler_AI
-_0802D950: .4byte gBattlerPartyIndexes
-_0802D954: .4byte gEnemyParty
-_0802D958: .4byte gUnknown_2023D74
- thumb_func_end sub_802D800
-
- thumb_func_start sub_802D95C
-sub_802D95C: @ 802D95C
- push {r4,r5,lr}
- ldr r4, _0802D9AC @ =gEnemyParty
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- adds r0, r5, 0
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetSetPokedexFlag
- lsls r0, 24
- cmp r0, 0
- beq _0802D9B4
- ldr r3, _0802D9B0 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0802D9CE
- .align 2, 0
-_0802D9AC: .4byte gEnemyParty
-_0802D9B0: .4byte gUnknown_2023D74
-_0802D9B4:
- adds r0, r5, 0
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- adds r2, r4, 0
- bl HandleSetPokedexFlag
- ldr r1, _0802D9D4 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802D9CE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D9D4: .4byte gUnknown_2023D74
- thumb_func_end sub_802D95C
-
- thumb_func_start sub_802D9D8
-sub_802D9D8: @ 802D9D8
- push {r4,r5,lr}
- sub sp, 0x18
- ldr r0, _0802DA00 @ =gEnemyParty
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _0802DA04 @ =gUnknown_2023E82
- ldrb r0, [r0]
- cmp r0, 0x5
- bls _0802D9F4
- b _0802DB6C
-_0802D9F4:
- lsls r0, 2
- ldr r1, _0802DA08 @ =_0802DA0C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802DA00: .4byte gEnemyParty
-_0802DA04: .4byte gUnknown_2023E82
-_0802DA08: .4byte _0802DA0C
- .align 2, 0
-_0802DA0C:
- .4byte _0802DA24
- .4byte _0802DA3C
- .4byte _0802DA64
- .4byte _0802DAC8
- .4byte _0802DAE0
- .4byte _0802DB58
-_0802DA24:
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0802DA38 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _0802DB34
- .align 2, 0
-_0802DA38: .4byte 0x00007fff
-_0802DA3C:
- ldr r0, _0802DA5C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802DA4A
- b _0802DB6C
-_0802DA4A:
- bl FreeAllWindowBuffers
- adds r0, r5, 0
- bl sub_8106B60
- ldr r1, _0802DA60 @ =gUnknown_2023E82
- strb r0, [r1, 0x1]
- b _0802DB36
- .align 2, 0
-_0802DA5C: .4byte gPaletteFade
-_0802DA60: .4byte gUnknown_2023E82
-_0802DA64:
- ldr r0, _0802DAAC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802DA72
- b _0802DB6C
-_0802DA72:
- ldr r0, _0802DAB0 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0802DAB4 @ =sub_8011100
- cmp r1, r0
- bne _0802DB6C
- ldr r2, _0802DAB8 @ =gTasks
- ldr r4, _0802DABC @ =gUnknown_2023E82
- ldrb r1, [r4, 0x1]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- bne _0802DB6C
- str r0, [sp, 0x10]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _0802DAC0 @ =0x05006000
- add r0, sp, 0x10
- bl CpuSet
- ldr r0, _0802DAC4 @ =sub_80116F4
- bl SetVBlankCallback
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0802DB6C
- .align 2, 0
-_0802DAAC: .4byte gPaletteFade
-_0802DAB0: .4byte gMain
-_0802DAB4: .4byte sub_8011100
-_0802DAB8: .4byte gTasks
-_0802DABC: .4byte gUnknown_2023E82
-_0802DAC0: .4byte 0x05006000
-_0802DAC4: .4byte sub_80116F4
-_0802DAC8:
- bl sub_800F34C
- bl LoadBattleTextboxAndBackground
- ldr r1, _0802DADC @ =gBattle_BG3_X
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- b _0802DB34
- .align 2, 0
-_0802DADC: .4byte gBattle_BG3_X
-_0802DAE0:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0802DB6C
- ldr r0, _0802DB40 @ =gBattleMons
- adds r1, r0, 0
- adds r1, 0xAC
- ldr r1, [r1]
- adds r0, 0xA0
- ldr r2, [r0]
- movs r0, 0x78
- str r0, [sp]
- movs r0, 0x40
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- ldr r0, _0802DB44 @ =0x0000ffff
- str r0, [sp, 0xC]
- adds r0, r5, 0
- movs r3, 0x1
- bl CreateMonPicSprite_HandleDeoxys
- str r4, [sp, 0x14]
- add r0, sp, 0x14
- ldr r1, _0802DB48 @ =gPlttBufferFaded
- ldr r2, _0802DB4C @ =0x05000080
- bl CpuSet
- ldr r0, _0802DB50 @ =0x0001ffff
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
-_0802DB34:
- ldr r1, _0802DB54 @ =gUnknown_2023E82
-_0802DB36:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0802DB6C
- .align 2, 0
-_0802DB40: .4byte gBattleMons
-_0802DB44: .4byte 0x0000ffff
-_0802DB48: .4byte gPlttBufferFaded
-_0802DB4C: .4byte 0x05000080
-_0802DB50: .4byte 0x0001ffff
-_0802DB54: .4byte gUnknown_2023E82
-_0802DB58:
- ldr r0, _0802DB74 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802DB6C
- ldr r1, _0802DB78 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0802DB6C:
- add sp, 0x18
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DB74: .4byte gPaletteFade
-_0802DB78: .4byte gUnknown_2023D74
- thumb_func_end sub_802D9D8
-
- thumb_func_start sub_802DB7C
-sub_802DB7C: @ 802DB7C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- ldr r4, [sp, 0x40]
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp, 0x10]
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x1C]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x14]
- lsls r4, 24
- lsrs r4, 24
- mov r10, r4
- movs r1, 0
- add r0, sp, 0xC
- strh r1, [r0]
- ldr r6, [sp, 0x10]
- cmp r6, r3
- ble _0802DBB6
- b _0802DCA2
-_0802DBB6:
- mov r4, r8
- adds r0, r6, 0x1
- str r0, [sp, 0x18]
- ldr r2, [sp, 0x1C]
- cmp r4, r2
- bgt _0802DC98
- add r5, sp, 0xC
- lsls r7, r6, 24
- mov r9, r7
-_0802DBC8:
- ldr r0, [sp, 0x10]
- cmp r6, r0
- bne _0802DBF4
- cmp r4, r8
- bne _0802DBDC
- ldr r0, _0802DBD8 @ =0x00001022
- b _0802DC3E
- .align 2, 0
-_0802DBD8: .4byte 0x00001022
-_0802DBDC:
- ldr r2, [sp, 0x1C]
- cmp r4, r2
- bne _0802DBEC
- ldr r0, _0802DBE8 @ =0x00001024
- b _0802DC3E
- .align 2, 0
-_0802DBE8: .4byte 0x00001024
-_0802DBEC:
- ldr r0, _0802DBF0 @ =0x00001023
- b _0802DC3E
- .align 2, 0
-_0802DBF0: .4byte 0x00001023
-_0802DBF4:
- ldr r7, [sp, 0x14]
- cmp r6, r7
- bne _0802DC20
- cmp r4, r8
- bne _0802DC08
- ldr r0, _0802DC04 @ =0x00001028
- b _0802DC3E
- .align 2, 0
-_0802DC04: .4byte 0x00001028
-_0802DC08:
- ldr r0, [sp, 0x1C]
- cmp r4, r0
- bne _0802DC18
- ldr r0, _0802DC14 @ =0x0000102a
- b _0802DC3E
- .align 2, 0
-_0802DC14: .4byte 0x0000102a
-_0802DC18:
- ldr r0, _0802DC1C @ =0x00001029
- b _0802DC3E
- .align 2, 0
-_0802DC1C: .4byte 0x00001029
-_0802DC20:
- cmp r4, r8
- bne _0802DC2C
- ldr r0, _0802DC28 @ =0x00001025
- b _0802DC3E
- .align 2, 0
-_0802DC28: .4byte 0x00001025
-_0802DC2C:
- ldr r2, [sp, 0x1C]
- cmp r4, r2
- bne _0802DC3C
- ldr r0, _0802DC38 @ =0x00001027
- b _0802DC3E
- .align 2, 0
-_0802DC38: .4byte 0x00001027
-_0802DC3C:
- ldr r0, _0802DC74 @ =0x00001026
-_0802DC3E:
- strh r0, [r5]
- movs r1, 0x1
- mov r0, r10
- ands r0, r1
- cmp r0, 0
- beq _0802DC4E
- movs r0, 0
- strh r0, [r5]
-_0802DC4E:
- movs r0, 0x80
- mov r7, r10
- ands r0, r7
- cmp r0, 0
- beq _0802DC78
- lsls r2, r4, 24
- lsrs r2, 24
- str r1, [sp]
- str r1, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0x1
- add r1, sp, 0xC
- mov r7, r9
- lsrs r3, r7, 24
- bl CopyToBgTilemapBufferRect_ChangePalette
- b _0802DC90
- .align 2, 0
-_0802DC74: .4byte 0x00001026
-_0802DC78:
- lsls r2, r4, 24
- lsrs r2, 24
- str r1, [sp]
- str r1, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- mov r7, r9
- lsrs r3, r7, 24
- bl CopyToBgTilemapBufferRect_ChangePalette
-_0802DC90:
- adds r4, 0x1
- ldr r0, [sp, 0x1C]
- cmp r4, r0
- ble _0802DBC8
-_0802DC98:
- ldr r6, [sp, 0x18]
- ldr r2, [sp, 0x14]
- cmp r6, r2
- bgt _0802DCA2
- b _0802DBB6
-_0802DCA2:
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_802DB7C
-
- thumb_func_start sub_802DCB8
-sub_802DCB8: @ 802DCB8
- push {lr}
- sub sp, 0x10
- add r0, sp, 0xC
- movs r2, 0x1
- strh r2, [r0]
- movs r1, 0x2
- strh r1, [r0, 0x2]
- ldr r0, _0802DCF4 @ =gUnknown_2023E82
- ldrb r3, [r0, 0x1]
- lsls r3, 25
- movs r0, 0x90
- lsls r0, 20
- adds r3, r0
- lsrs r3, 24
- str r2, [sp]
- str r1, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- movs r2, 0x18
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- .align 2, 0
-_0802DCF4: .4byte gUnknown_2023E82
- thumb_func_end sub_802DCB8
-
- thumb_func_start sub_802DCF8
-sub_802DCF8: @ 802DCF8
- push {lr}
- sub sp, 0x10
- add r0, sp, 0xC
- movs r1, 0x20
- strh r1, [r0]
- strh r1, [r0, 0x2]
- ldr r0, _0802DD34 @ =gUnknown_2023E82
- ldrb r3, [r0, 0x1]
- lsls r3, 25
- movs r0, 0x90
- lsls r0, 20
- adds r3, r0
- lsrs r3, 24
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- add r1, sp, 0xC
- movs r2, 0x18
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x10
- pop {r0}
- bx r0
- .align 2, 0
-_0802DD34: .4byte gUnknown_2023E82
- thumb_func_end sub_802DCF8
-
- thumb_func_start sub_802DD38
-sub_802DD38: @ 802DD38
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, _0802DD5C @ =gUnknown_2023E82
- ldrb r1, [r0]
- adds r4, r0, 0
- cmp r1, 0x4
- bls _0802DD50
- b _0802DFA6
-_0802DD50:
- lsls r0, r1, 2
- ldr r1, _0802DD60 @ =_0802DD64
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802DD5C: .4byte gUnknown_2023E82
-_0802DD60: .4byte _0802DD64
- .align 2, 0
-_0802DD64:
- .4byte _0802DD78
- .4byte _0802DDA8
- .4byte _0802DE40
- .4byte _0802DF18
- .4byte _0802DF70
-_0802DD78:
- movs r4, 0
- str r4, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl sub_802DB7C
- ldr r0, _0802DDA0 @ =gUnknown_83FE791
- movs r1, 0xE
- bl sub_80D87BC
- ldr r1, _0802DDA4 @ =gUnknown_2023E82
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- strb r4, [r1, 0x1]
- bl sub_802DCB8
- b _0802DFA6
- .align 2, 0
-_0802DDA0: .4byte gUnknown_83FE791
-_0802DDA4: .4byte gUnknown_2023E82
-_0802DDA8:
- ldr r0, _0802DE1C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802DDCC
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _0802DDCC
- movs r0, 0x5
- bl PlaySE
- bl sub_802DCF8
- movs r0, 0
- strb r0, [r4, 0x1]
- bl sub_802DCB8
-_0802DDCC:
- ldr r0, _0802DE1C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802DDF2
- ldr r4, _0802DE20 @ =gUnknown_2023E82
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _0802DDF2
- movs r0, 0x5
- bl PlaySE
- bl sub_802DCF8
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_802DCB8
-_0802DDF2:
- ldr r0, _0802DE1C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802DE24
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802DE20 @ =gUnknown_2023E82
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0802DE36
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r0, 0x3
- bl BeginFastPaletteFade
- b _0802DFA6
- .align 2, 0
-_0802DE1C: .4byte gMain
-_0802DE20: .4byte gUnknown_2023E82
-_0802DE24:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0802DE2E
- b _0802DFA6
-_0802DE2E:
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802DE3C @ =gUnknown_2023E82
-_0802DE36:
- movs r0, 0x4
- strb r0, [r1]
- b _0802DFA6
- .align 2, 0
-_0802DE3C: .4byte gUnknown_2023E82
-_0802DE40:
- ldr r0, _0802DEFC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802DE4E
- b _0802DFA6
-_0802DE4E:
- ldr r7, _0802DF00 @ =gBattlerPartyIndexes
- ldr r0, _0802DF04 @ =sBattler_AI
- mov r10, r0
- ldrb r0, [r0]
- movs r4, 0x1
- eors r0, r4
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r1, 0x64
- mov r9, r1
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- ldr r1, _0802DF08 @ =gEnemyParty
- mov r8, r1
- add r0, r8
- ldr r1, _0802DF0C @ =gBattleStruct
- ldr r2, [r1]
- adds r2, 0x6D
- movs r1, 0x2
- bl GetMonData
- bl FreeAllWindowBuffers
- mov r2, r10
- ldrb r0, [r2]
- eors r0, r4
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- movs r1, 0xB
- bl GetMonData
- adds r6, r0, 0
- lsls r6, 16
- lsrs r6, 16
- mov r2, r10
- ldrb r0, [r2]
- eors r0, r4
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- bl GetMonGender
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- mov r2, r10
- ldrb r0, [r2]
- eors r4, r0
- lsls r4, 1
- adds r4, r7
- ldrh r0, [r4]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- movs r1, 0
- movs r2, 0
- bl GetMonData
- ldr r2, _0802DF0C @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0x6D
- str r0, [sp]
- ldr r0, _0802DF10 @ =sub_8011100
- str r0, [sp, 0x4]
- movs r0, 0x2
- adds r2, r6, 0
- adds r3, r5, 0
- bl DoNamingScreen
- ldr r1, _0802DF14 @ =gUnknown_2023E82
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0802DFA6
- .align 2, 0
-_0802DEFC: .4byte gPaletteFade
-_0802DF00: .4byte gBattlerPartyIndexes
-_0802DF04: .4byte sBattler_AI
-_0802DF08: .4byte gEnemyParty
-_0802DF0C: .4byte gBattleStruct
-_0802DF10: .4byte sub_8011100
-_0802DF14: .4byte gUnknown_2023E82
-_0802DF18:
- ldr r0, _0802DF54 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0802DF58 @ =sub_8011100
- cmp r1, r0
- bne _0802DFA6
- ldr r0, _0802DF5C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802DFA6
- ldr r2, _0802DF60 @ =gBattlerPartyIndexes
- ldr r0, _0802DF64 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x1
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802DF68 @ =gEnemyParty
- adds r0, r1
- ldr r1, _0802DF6C @ =gBattleStruct
- ldr r2, [r1]
- adds r2, 0x6D
- movs r1, 0x2
- bl SetMonData
- b _0802DF8C
- .align 2, 0
-_0802DF54: .4byte gMain
-_0802DF58: .4byte sub_8011100
-_0802DF5C: .4byte gPaletteFade
-_0802DF60: .4byte gBattlerPartyIndexes
-_0802DF64: .4byte sBattler_AI
-_0802DF68: .4byte gEnemyParty
-_0802DF6C: .4byte gBattleStruct
-_0802DF70:
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- bne _0802DF8C
- ldr r1, _0802DF88 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _0802DFA6
- .align 2, 0
-_0802DF88: .4byte gUnknown_2023D74
-_0802DF8C:
- ldr r3, _0802DFB8 @ =gUnknown_2023D74
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
-_0802DFA6:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DFB8: .4byte gUnknown_2023D74
- thumb_func_end sub_802DD38
-
- thumb_func_start atkF4_subattackerhpbydmg
-atkF4_subattackerhpbydmg: @ 802DFBC
- ldr r2, _0802DFDC @ =gBattleMons
- ldr r0, _0802DFE0 @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r1, r2
- ldr r0, _0802DFE4 @ =gBattleMoveDamage
- ldr r2, [r0]
- ldrh r0, [r1, 0x28]
- subs r0, r2
- strh r0, [r1, 0x28]
- ldr r1, _0802DFE8 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802DFDC: .4byte gBattleMons
-_0802DFE0: .4byte sBattler_AI
-_0802DFE4: .4byte gBattleMoveDamage
-_0802DFE8: .4byte gUnknown_2023D74
- thumb_func_end atkF4_subattackerhpbydmg
-
- thumb_func_start atkF5_removeattackerstatus1
-atkF5_removeattackerstatus1: @ 802DFEC
- ldr r1, _0802E008 @ =gBattleMons
- ldr r0, _0802E00C @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r0, r1
- movs r1, 0
- str r1, [r0]
- ldr r1, _0802E010 @ =gUnknown_2023D74
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- bx lr
- .align 2, 0
-_0802E008: .4byte gBattleMons
-_0802E00C: .4byte sBattler_AI
-_0802E010: .4byte gUnknown_2023D74
- thumb_func_end atkF5_removeattackerstatus1
-
- thumb_func_start sub_802E014
-sub_802E014: @ 802E014
- ldr r1, _0802E01C @ =gUnknown_2023BE3
- movs r0, 0xC
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0802E01C: .4byte gUnknown_2023BE3
- thumb_func_end sub_802E014
-
- thumb_func_start sub_802E020
-sub_802E020: @ 802E020
- ldr r1, _0802E030 @ =gUnknown_2023BE3
- movs r0, 0xC
- strb r0, [r1]
- ldr r1, _0802E034 @ =gUnknown_2023BE2
- ldr r0, _0802E038 @ =gBattlersCount
- ldrb r0, [r0]
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0802E030: .4byte gUnknown_2023BE3
-_0802E034: .4byte gUnknown_2023BE2
-_0802E038: .4byte gBattlersCount
- thumb_func_end sub_802E020
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_setup.s b/asm/battle_setup.s
index 787b0fb8e..c5b4510b7 100644
--- a/asm/battle_setup.s
+++ b/asm/battle_setup.s
@@ -2107,12 +2107,12 @@ sub_80806C8: @ 80806C8
push {lr}
cmp r0, 0
bne _080806D0
- ldr r0, _080806D4 @ =gUnknown_84161CD
+ ldr r0, _080806D4 @ =gString_Dummy
_080806D0:
pop {r1}
bx r1
.align 2, 0
-_080806D4: .4byte gUnknown_84161CD
+_080806D4: .4byte gString_Dummy
thumb_func_end sub_80806C8
thumb_func_start sub_80806D8
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/battle_util.s b/asm/battle_util.s
deleted file mode 100644
index 50f5210aa..000000000
--- a/asm/battle_util.s
+++ /dev/null
@@ -1,12796 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8016E24
-sub_8016E24: @ 8016E24
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0
- cmp r0, 0xC
- bhi _08016EC2
- lsls r0, 2
- ldr r1, _08016E3C @ =_08016E40
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08016E3C: .4byte _08016E40
- .align 2, 0
-_08016E40:
- .4byte _08016E74
- .4byte _08016E80
- .4byte _08016E8C
- .4byte _08016EA8
- .4byte _08016EC2
- .4byte _08016EA8
- .4byte _08016EC2
- .4byte _08016E98
- .4byte _08016EC2
- .4byte _08016EC2
- .4byte _08016E9C
- .4byte _08016EB4
- .4byte _08016EB8
-_08016E74:
- ldr r0, _08016E7C @ =gBattlerTarget
- ldrb r2, [r0]
- b _08016EC2
- .align 2, 0
-_08016E7C: .4byte gBattlerTarget
-_08016E80:
- ldr r0, _08016E88 @ =sBattler_AI
- ldrb r2, [r0]
- b _08016EC2
- .align 2, 0
-_08016E88: .4byte sBattler_AI
-_08016E8C:
- ldr r0, _08016E94 @ =gUnknown_2023D6E
- ldrb r2, [r0]
- b _08016EC2
- .align 2, 0
-_08016E94: .4byte gUnknown_2023D6E
-_08016E98:
- movs r2, 0
- b _08016EC2
-_08016E9C:
- ldr r0, _08016EA4 @ =gBattleScripting
- ldrb r2, [r0, 0x17]
- b _08016EC2
- .align 2, 0
-_08016EA4: .4byte gBattleScripting
-_08016EA8:
- ldr r0, _08016EB0 @ =gUnknown_2023D6D
- ldrb r2, [r0]
- b _08016EC2
- .align 2, 0
-_08016EB0: .4byte gUnknown_2023D6D
-_08016EB4:
- movs r0, 0
- b _08016EBA
-_08016EB8:
- movs r0, 0x1
-_08016EBA:
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r2, r0, 24
-_08016EC2:
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end sub_8016E24
-
- thumb_func_start PressurePPLose
-PressurePPLose: @ 8016EC8
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 16
- lsrs r2, 16
- ldr r1, _08016EF8 @ =gBattleMons
- movs r4, 0x58
- muls r0, r4
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- mov r12, r1
- cmp r0, 0x2E
- bne _08016F7A
- movs r3, 0
- adds r0, r5, 0
- muls r0, r4
- adds r1, 0xC
- adds r1, r0, r1
- b _08016F04
- .align 2, 0
-_08016EF8: .4byte gBattleMons
-_08016EFC:
- adds r1, 0x2
- adds r3, 0x1
- cmp r3, 0x3
- bgt _08016F0A
-_08016F04:
- ldrh r0, [r1]
- cmp r0, r2
- bne _08016EFC
-_08016F0A:
- cmp r3, 0x4
- beq _08016F7A
- movs r7, 0x58
- adds r2, r5, 0
- muls r2, r7
- adds r0, r3, r2
- mov r6, r12
- adds r6, 0x24
- adds r1, r0, r6
- ldrb r0, [r1]
- cmp r0, 0
- beq _08016F26
- subs r0, 0x1
- strb r0, [r1]
-_08016F26:
- mov r0, r12
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _08016F7A
- ldr r1, _08016F84 @ =gDisableStructs
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _08016F88 @ =gBitTable
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08016F7A
- ldr r4, _08016F8C @ =gActiveBattler
- strb r5, [r4]
- adds r1, r3, 0
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r4]
- muls r0, r7
- adds r0, r6
- adds r0, r3
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08016F7A:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08016F84: .4byte gDisableStructs
-_08016F88: .4byte gBitTable
-_08016F8C: .4byte gActiveBattler
- thumb_func_end PressurePPLose
-
- thumb_func_start PressurePPLoseOnUsingImprision
-PressurePPLoseOnUsingImprision: @ 8016F90
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0x4
- mov r8, r0
- adds r0, r5, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r4, 0
- ldr r0, _080170B0 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- bge _08017038
- ldr r1, _080170B4 @ =gBattleMons
- movs r0, 0x58
- adds r7, r5, 0
- muls r7, r0
- adds r1, 0xC
- mov r10, r1
-_08016FC6:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- adds r6, r4, 0x1
- cmp r9, r0
- beq _0801702E
- ldr r0, _080170B4 @ =gBattleMons
- movs r3, 0x58
- adds r1, r4, 0
- muls r1, r3
- adds r1, r0
- adds r1, 0x20
- ldrb r1, [r1]
- adds r4, r0, 0
- cmp r1, 0x2E
- bne _0801702E
- movs r2, 0
- adds r0, r5, 0
- muls r0, r3
- adds r1, r4, 0
- adds r1, 0xC
- adds r0, r1
- ldrh r0, [r0]
- movs r1, 0x8F
- lsls r1, 1
- cmp r0, r1
- beq _08017016
- adds r3, r1, 0
- mov r0, r10
- adds r1, r7, r0
-_08017008:
- adds r1, 0x2
- adds r2, 0x1
- cmp r2, 0x3
- bgt _08017016
- ldrh r0, [r1]
- cmp r0, r3
- bne _08017008
-_08017016:
- cmp r2, 0x4
- beq _0801702E
- mov r8, r2
- adds r1, r2, r7
- adds r0, r4, 0
- adds r0, 0x24
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _0801702E
- subs r0, 0x1
- strb r0, [r1]
-_0801702E:
- adds r4, r6, 0
- ldr r0, _080170B0 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- blt _08016FC6
-_08017038:
- mov r1, r8
- cmp r1, 0x4
- beq _080170A0
- ldr r6, _080170B4 @ =gBattleMons
- movs r3, 0x58
- adds r0, r5, 0
- muls r0, r3
- adds r1, r6, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _080170A0
- ldr r1, _080170B8 @ =gDisableStructs
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _080170BC @ =gBitTable
- mov r4, r8
- lsls r0, r4, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080170A0
- ldr r4, _080170C0 @ =gActiveBattler
- strb r5, [r4]
- mov r1, r8
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r4]
- muls r0, r3
- adds r2, r6, 0
- adds r2, 0x24
- adds r0, r2
- add r0, r8
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_080170A0:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080170B0: .4byte gBattlersCount
-_080170B4: .4byte gBattleMons
-_080170B8: .4byte gDisableStructs
-_080170BC: .4byte gBitTable
-_080170C0: .4byte gActiveBattler
- thumb_func_end PressurePPLoseOnUsingImprision
-
- thumb_func_start PressurePPLoseOnUsingPerishSong
-PressurePPLoseOnUsingPerishSong: @ 80170C4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r3, r0, 24
- movs r6, 0x4
- movs r1, 0
- ldr r0, _080171BC @ =gBattlersCount
- mov r8, r0
- ldrb r0, [r0]
- cmp r1, r0
- bge _08017146
- ldr r7, _080171C0 @ =gBattleMons
- movs r2, 0x58
- mov r12, r2
- mov r5, r12
- muls r5, r3
- adds r0, r7, 0
- adds r0, 0xC
- adds r2, r5, r0
- mov r10, r2
- mov r9, r5
-_080170F6:
- mov r0, r12
- muls r0, r1
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r1, 0x1
- cmp r0, 0x2E
- bne _0801713C
- cmp r1, r3
- beq _0801713C
- movs r2, 0
- mov r1, r10
- ldrh r0, [r1]
- cmp r0, 0xC3
- beq _08017126
- ldr r1, _080171C4 @ =gUnknown_2023BF0
- add r1, r9
-_08017118:
- adds r1, 0x2
- adds r2, 0x1
- cmp r2, 0x3
- bgt _08017126
- ldrh r0, [r1]
- cmp r0, 0xC3
- bne _08017118
-_08017126:
- cmp r2, 0x4
- beq _0801713C
- adds r6, r2, 0
- adds r0, r6, r5
- ldr r2, _080171C8 @ =gUnknown_2023C08
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0
- beq _0801713C
- subs r0, 0x1
- strb r0, [r1]
-_0801713C:
- adds r1, r4, 0
- mov r0, r8
- ldrb r0, [r0]
- cmp r1, r0
- blt _080170F6
-_08017146:
- cmp r6, 0x4
- beq _080171AA
- ldr r7, _080171C0 @ =gBattleMons
- movs r5, 0x58
- adds r0, r3, 0
- muls r0, r5
- adds r1, r7, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _080171AA
- ldr r1, _080171CC @ =gDisableStructs
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _080171D0 @ =gBitTable
- lsls r0, r6, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080171AA
- ldr r4, _080171D4 @ =gActiveBattler
- strb r3, [r4]
- adds r1, r6, 0
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r4]
- muls r0, r5
- adds r2, r7, 0
- adds r2, 0x24
- adds r0, r2
- adds r0, r6
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_080171AA:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080171BC: .4byte gBattlersCount
-_080171C0: .4byte gBattleMons
-_080171C4: .4byte gUnknown_2023BF0
-_080171C8: .4byte gUnknown_2023C08
-_080171CC: .4byte gDisableStructs
-_080171D0: .4byte gBitTable
-_080171D4: .4byte gActiveBattler
- thumb_func_end PressurePPLoseOnUsingPerishSong
-
- thumb_func_start MarkAllBufferBanksForExecution
-MarkAllBufferBanksForExecution: @ 80171D8
- push {r4,r5,lr}
- ldr r0, _08017208 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08017218
- movs r2, 0
- ldr r4, _0801720C @ =gBattlersCount
- ldrb r0, [r4]
- cmp r2, r0
- bge _08017236
- ldr r3, _08017210 @ =gUnknown_2023BC8
- ldr r5, _08017214 @ =gBitTable
-_080171F4:
- ldm r5!, {r1}
- lsls r1, 28
- ldr r0, [r3]
- orrs r0, r1
- str r0, [r3]
- adds r2, 0x1
- ldrb r0, [r4]
- cmp r2, r0
- blt _080171F4
- b _08017236
- .align 2, 0
-_08017208: .4byte gBattleTypeFlags
-_0801720C: .4byte gBattlersCount
-_08017210: .4byte gUnknown_2023BC8
-_08017214: .4byte gBitTable
-_08017218:
- movs r2, 0
- ldr r4, _0801723C @ =gBattlersCount
- ldrb r0, [r4]
- cmp r2, r0
- bge _08017236
- ldr r3, _08017240 @ =gUnknown_2023BC8
- ldr r5, _08017244 @ =gBitTable
-_08017226:
- ldr r0, [r3]
- ldm r5!, {r1}
- orrs r0, r1
- str r0, [r3]
- adds r2, 0x1
- ldrb r0, [r4]
- cmp r2, r0
- blt _08017226
-_08017236:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801723C: .4byte gBattlersCount
-_08017240: .4byte gUnknown_2023BC8
-_08017244: .4byte gBitTable
- thumb_func_end MarkAllBufferBanksForExecution
-
- thumb_func_start MarkBufferBankForExecution
-MarkBufferBankForExecution: @ 8017248
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _08017270 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801727C
- ldr r2, _08017274 @ =gUnknown_2023BC8
- ldr r1, _08017278 @ =gBitTable
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- b _0801728C
- .align 2, 0
-_08017270: .4byte gBattleTypeFlags
-_08017274: .4byte gUnknown_2023BC8
-_08017278: .4byte gBitTable
-_0801727C:
- ldr r2, _08017290 @ =gUnknown_2023BC8
- ldr r1, _08017294 @ =gBitTable
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- orrs r1, r0
- str r1, [r2]
-_0801728C:
- pop {r0}
- bx r0
- .align 2, 0
-_08017290: .4byte gUnknown_2023BC8
-_08017294: .4byte gBitTable
- thumb_func_end MarkBufferBankForExecution
-
- thumb_func_start sub_8017298
-sub_8017298: @ 8017298
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- movs r4, 0
- ldr r5, _080172AC @ =gUnknown_2023BC8
- ldr r1, _080172B0 @ =gBitTable
- lsls r0, r7, 2
- adds r6, r0, r1
- b _080172C2
- .align 2, 0
-_080172AC: .4byte gUnknown_2023BC8
-_080172B0: .4byte gBitTable
-_080172B4:
- lsls r0, r4, 2
- ldr r1, [r6]
- lsls r1, r0
- ldr r0, [r5]
- orrs r0, r1
- str r0, [r5]
- adds r4, 0x1
-_080172C2:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- blt _080172B4
- ldr r2, _080172E4 @ =gUnknown_2023BC8
- movs r1, 0x80
- lsls r1, 21
- lsls r1, r7
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080172E4: .4byte gUnknown_2023BC8
- thumb_func_end sub_8017298
-
- thumb_func_start CancelMultiTurnMoves
-CancelMultiTurnMoves: @ 80172E8
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08017338 @ =gBattleMons
- movs r2, 0x58
- adds r3, r0, 0
- muls r3, r2
- adds r1, 0x50
- adds r3, r1
- ldr r1, [r3]
- ldr r2, _0801733C @ =0xffffefff
- ands r1, r2
- ldr r2, _08017340 @ =0xfffff3ff
- ands r1, r2
- movs r2, 0x71
- negs r2, r2
- ands r1, r2
- ldr r2, _08017344 @ =0xfffffcff
- ands r1, r2
- str r1, [r3]
- ldr r1, _08017348 @ =gStatuses3
- lsls r2, r0, 2
- adds r2, r1
- ldr r1, [r2]
- ldr r3, _0801734C @ =0xfffbff3f
- ands r1, r3
- str r1, [r2]
- ldr r2, _08017350 @ =gDisableStructs
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x11]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x11]
- movs r0, 0
- strb r0, [r1, 0x10]
- bx lr
- .align 2, 0
-_08017338: .4byte gBattleMons
-_0801733C: .4byte 0xffffefff
-_08017340: .4byte 0xfffff3ff
-_08017344: .4byte 0xfffffcff
-_08017348: .4byte gStatuses3
-_0801734C: .4byte 0xfffbff3f
-_08017350: .4byte gDisableStructs
- thumb_func_end CancelMultiTurnMoves
-
- thumb_func_start WasUnableToUseMove
-WasUnableToUseMove: @ 8017354
- push {lr}
- lsls r0, 24
- ldr r1, _080173A0 @ =gUnknown_2023E8C
- lsrs r0, 20
- adds r1, r0, r1
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- bne _0801739A
- ldrb r2, [r1, 0x1]
- lsls r0, r2, 30
- cmp r0, 0
- blt _0801739A
- lsls r0, r2, 26
- cmp r0, 0
- blt _0801739A
- lsls r0, r2, 25
- cmp r0, 0
- blt _0801739A
- lsrs r0, r2, 7
- cmp r0, 0
- bne _0801739A
- ldrb r1, [r1, 0x2]
- lsls r0, r1, 31
- cmp r0, 0
- bne _0801739A
- lsls r0, r1, 30
- cmp r0, 0
- blt _0801739A
- lsls r0, r1, 29
- cmp r0, 0
- blt _0801739A
- lsls r0, r2, 31
- cmp r0, 0
- beq _080173A4
-_0801739A:
- movs r0, 0x1
- b _080173A6
- .align 2, 0
-_080173A0: .4byte gUnknown_2023E8C
-_080173A4:
- movs r0, 0
-_080173A6:
- pop {r1}
- bx r1
- thumb_func_end WasUnableToUseMove
-
- thumb_func_start PrepareStringBattle
-PrepareStringBattle: @ 80173AC
- push {r4,lr}
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- ldr r4, _080173CC @ =gActiveBattler
- strb r1, [r4]
- movs r0, 0
- adds r1, r2, 0
- bl EmitPrintString
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080173CC: .4byte gActiveBattler
- thumb_func_end PrepareStringBattle
-
- thumb_func_start ResetSentPokesToOpponentValue
-ResetSentPokesToOpponentValue: @ 80173D0
- push {r4-r6,lr}
- movs r3, 0
- ldr r0, _08017424 @ =gUnknown_2023F4E
- strb r3, [r0]
- strb r3, [r0, 0x1]
- movs r1, 0
- ldr r0, _08017428 @ =gBattlersCount
- ldrb r2, [r0]
- adds r6, r0, 0
- cmp r1, r2
- bge _080173FE
- ldr r5, _0801742C @ =gBitTable
- adds r4, r2, 0
- ldr r2, _08017430 @ =gBattlerPartyIndexes
-_080173EC:
- ldrh r0, [r2]
- lsls r0, 2
- adds r0, r5
- ldr r0, [r0]
- orrs r3, r0
- adds r2, 0x4
- adds r1, 0x2
- cmp r1, r4
- blt _080173EC
-_080173FE:
- movs r1, 0x1
- adds r2, r6, 0
- ldrb r0, [r2]
- cmp r1, r0
- bge _0801741E
- ldr r5, _08017424 @ =gUnknown_2023F4E
- movs r4, 0x2
-_0801740C:
- adds r0, r1, 0
- ands r0, r4
- asrs r0, 1
- adds r0, r5
- strb r3, [r0]
- adds r1, 0x2
- ldrb r0, [r2]
- cmp r1, r0
- blt _0801740C
-_0801741E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08017424: .4byte gUnknown_2023F4E
-_08017428: .4byte gBattlersCount
-_0801742C: .4byte gBitTable
-_08017430: .4byte gBattlerPartyIndexes
- thumb_func_end ResetSentPokesToOpponentValue
-
- thumb_func_start sub_8017434
-sub_8017434: @ 8017434
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- adds r0, r5, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08017498
- movs r0, 0x2
- ands r0, r5
- lsls r0, 24
- lsrs r0, 25
- mov r12, r0
- ldr r1, _080174A4 @ =gUnknown_2023F4E
- adds r0, r1
- strb r4, [r0]
- adds r5, r4, 0
- ldr r0, _080174A8 @ =gBattlersCount
- ldrb r2, [r0]
- mov r8, r1
- cmp r4, r2
- bge _08017492
- ldr r0, _080174AC @ =gAbsentBattlerFlags
- ldrb r7, [r0]
- ldr r1, _080174B0 @ =gBitTable
- adds r6, r2, 0
- ldr r3, _080174B4 @ =gBattlerPartyIndexes
- adds r2, r1, 0
-_08017476:
- ldr r0, [r2]
- ands r0, r7
- cmp r0, 0
- bne _08017488
- ldrh r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- orrs r4, r0
-_08017488:
- adds r3, 0x4
- adds r2, 0x8
- adds r5, 0x2
- cmp r5, r6
- blt _08017476
-_08017492:
- mov r0, r12
- add r0, r8
- strb r4, [r0]
-_08017498:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080174A4: .4byte gUnknown_2023F4E
-_080174A8: .4byte gBattlersCount
-_080174AC: .4byte gAbsentBattlerFlags
-_080174B0: .4byte gBitTable
-_080174B4: .4byte gBattlerPartyIndexes
- thumb_func_end sub_8017434
-
- thumb_func_start sub_80174B8
-sub_80174B8: @ 80174B8
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080174D4
- adds r0, r4, 0
- bl sub_8017434
- b _0801750A
-_080174D4:
- movs r3, 0x1
- ldr r5, _08017510 @ =gBattlersCount
- ldrb r0, [r5]
- cmp r3, r0
- bge _0801750A
- ldr r0, _08017514 @ =gUnknown_2023F4E
- mov r12, r0
- movs r7, 0x2
- ldr r6, _08017518 @ =gBitTable
- ldr r1, _0801751C @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r4, r0, r1
-_080174EC:
- adds r2, r3, 0
- ands r2, r7
- asrs r2, 1
- add r2, r12
- ldrh r0, [r4]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r3, 0x1
- ldrb r0, [r5]
- cmp r3, r0
- blt _080174EC
-_0801750A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08017510: .4byte gBattlersCount
-_08017514: .4byte gUnknown_2023F4E
-_08017518: .4byte gBitTable
-_0801751C: .4byte gBattlerPartyIndexes
- thumb_func_end sub_80174B8
-
- thumb_func_start BattleScriptPush
-BattleScriptPush: @ 8017520
- push {r4,lr}
- ldr r1, _08017540 @ =gBattleResources
- ldr r1, [r1]
- ldr r3, [r1, 0x8]
- adds r4, r3, 0
- adds r4, 0x20
- ldrb r1, [r4]
- adds r2, r1, 0x1
- strb r2, [r4]
- lsls r1, 24
- lsrs r1, 22
- adds r3, r1
- str r0, [r3]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08017540: .4byte gBattleResources
- thumb_func_end BattleScriptPush
-
- thumb_func_start BattleScriptPushCursor
-BattleScriptPushCursor: @ 8017544
- ldr r0, _08017564 @ =gBattleResources
- ldr r0, [r0]
- ldr r2, [r0, 0x8]
- adds r3, r2, 0
- adds r3, 0x20
- ldrb r0, [r3]
- adds r1, r0, 0x1
- strb r1, [r3]
- lsls r0, 24
- lsrs r0, 22
- adds r2, r0
- ldr r0, _08017568 @ =gUnknown_2023D74
- ldr r0, [r0]
- str r0, [r2]
- bx lr
- .align 2, 0
-_08017564: .4byte gBattleResources
-_08017568: .4byte gUnknown_2023D74
- thumb_func_end BattleScriptPushCursor
-
- thumb_func_start BattleScriptPop
-BattleScriptPop: @ 801756C
- ldr r3, _0801758C @ =gUnknown_2023D74
- ldr r0, _08017590 @ =gBattleResources
- ldr r0, [r0]
- ldr r1, [r0, 0x8]
- adds r2, r1, 0
- adds r2, 0x20
- ldrb r0, [r2]
- subs r0, 0x1
- strb r0, [r2]
- lsls r0, 24
- lsrs r0, 22
- adds r1, r0
- ldr r0, [r1]
- str r0, [r3]
- bx lr
- .align 2, 0
-_0801758C: .4byte gUnknown_2023D74
-_08017590: .4byte gBattleResources
- thumb_func_end BattleScriptPop
-
- thumb_func_start sub_8017594
-sub_8017594: @ 8017594
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- ldr r2, _080176AC @ =gBattleMons
- ldr r1, _080176B0 @ =gUnknown_20233C4
- ldr r5, _080176B4 @ =gActiveBattler
- ldrb r3, [r5]
- lsls r0, r3, 9
- adds r1, 0x2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- movs r1, 0x58
- muls r1, r3
- adds r0, r1
- adds r2, 0xC
- adds r0, r2
- ldrh r4, [r0]
- ldr r1, _080176B8 @ =gBattleStruct
- lsls r0, r3, 1
- adds r0, 0xC8
- ldr r1, [r1]
- adds r1, r0
- mov r8, r1
- ldr r1, _080176BC @ =gDisableStructs
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x4]
- cmp r0, r4
- bne _080175F0
- cmp r4, 0
- beq _080175F0
- ldr r0, _080176C0 @ =gBattleScripting
- strb r3, [r0, 0x17]
- ldr r0, _080176C4 @ =gCurrentMove
- strh r4, [r0]
- ldr r1, _080176C8 @ =gUnknown_2023D80
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080176CC @ =gUnknown_81D8C5A
- str r1, [r0]
- movs r6, 0x1
-_080175F0:
- ldr r1, _080176D0 @ =gLastUsedMove
- ldr r5, _080176B4 @ =gActiveBattler
- ldrb r2, [r5]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _0801762C
- cmp r4, 0xA5
- beq _0801762C
- ldr r1, _080176AC @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bge _0801762C
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- ldr r1, _080176C8 @ =gUnknown_2023D80
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080176D4 @ =gUnknown_81D8EB7
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0801762C:
- ldr r2, _080176BC @ =gDisableStructs
- ldr r3, _080176B4 @ =gActiveBattler
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x13]
- lsls r0, 28
- cmp r0, 0
- beq _08017668
- ldr r0, _080176D8 @ =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _08017668
- ldr r0, _080176C4 @ =gCurrentMove
- strh r4, [r0]
- ldr r1, _080176C8 @ =gUnknown_2023D80
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080176DC @ =gUnknown_81D8EC6
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08017668:
- ldr r5, _080176B4 @ =gActiveBattler
- ldrb r0, [r5]
- adds r1, r4, 0
- bl GetImprisonedMovesCount
- lsls r0, 24
- cmp r0, 0
- beq _0801768E
- ldr r0, _080176C4 @ =gCurrentMove
- strh r4, [r0]
- ldr r1, _080176C8 @ =gUnknown_2023D80
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080176E0 @ =gUnknown_81D8F9F
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0801768E:
- ldr r1, _080176AC @ =gBattleMons
- ldrb r2, [r5]
- movs r0, 0x58
- muls r0, r2
- adds r1, r0, r1
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _080176E8
- ldr r1, _080176E4 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r3, [r0, 0x7]
- b _080176F2
- .align 2, 0
-_080176AC: .4byte gBattleMons
-_080176B0: .4byte gUnknown_20233C4
-_080176B4: .4byte gActiveBattler
-_080176B8: .4byte gBattleStruct
-_080176BC: .4byte gDisableStructs
-_080176C0: .4byte gBattleScripting
-_080176C4: .4byte gCurrentMove
-_080176C8: .4byte gUnknown_2023D80
-_080176CC: .4byte gUnknown_81D8C5A
-_080176D0: .4byte gLastUsedMove
-_080176D4: .4byte gUnknown_81D8EB7
-_080176D8: .4byte gBattleMoves
-_080176DC: .4byte gUnknown_81D8EC6
-_080176E0: .4byte gUnknown_81D8F9F
-_080176E4: .4byte gEnigmaBerries
-_080176E8:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r3, r0, 24
-_080176F2:
- ldr r2, _08017774 @ =gPotentialItemEffectBattler
- ldr r1, _08017778 @ =gActiveBattler
- ldrb r0, [r1]
- strb r0, [r2]
- ldr r7, _0801777C @ =gBattleMons
- adds r5, r1, 0
- cmp r3, 0x1D
- bne _0801773A
- mov r0, r8
- ldrh r1, [r0]
- adds r2, r1, 0
- cmp r2, 0
- beq _0801773A
- ldr r0, _08017780 @ =0x0000ffff
- cmp r2, r0
- beq _0801773A
- cmp r2, r4
- beq _0801773A
- ldr r0, _08017784 @ =gCurrentMove
- strh r1, [r0]
- ldr r2, _08017788 @ =gUnknown_2023D68
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- strh r0, [r2]
- ldr r1, _0801778C @ =gUnknown_2023D80
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08017790 @ =gUnknown_81D963D
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0801773A:
- ldr r0, _08017794 @ =gUnknown_20233C4
- ldrb r2, [r5]
- lsls r1, r2, 9
- adds r0, 0x2
- adds r1, r0
- movs r0, 0x58
- muls r0, r2
- ldrb r1, [r1]
- adds r0, r1
- adds r1, r7, 0
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08017768
- ldr r1, _0801778C @ =gUnknown_2023D80
- lsls r0, r2, 2
- adds r0, r1
- ldr r1, _08017798 @ =gUnknown_81D8EA4
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08017768:
- adds r0, r6, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08017774: .4byte gPotentialItemEffectBattler
-_08017778: .4byte gActiveBattler
-_0801777C: .4byte gBattleMons
-_08017780: .4byte 0x0000ffff
-_08017784: .4byte gCurrentMove
-_08017788: .4byte gUnknown_2023D68
-_0801778C: .4byte gUnknown_2023D80
-_08017790: .4byte gUnknown_81D963D
-_08017794: .4byte gUnknown_20233C4
-_08017798: .4byte gUnknown_81D8EA4
- thumb_func_end sub_8017594
-
- thumb_func_start CheckMoveLimitations
-CheckMoveLimitations: @ 801779C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 24
- lsrs r3, r2, 24
- ldr r1, _080177E0 @ =gBattleStruct
- lsls r0, r7, 1
- adds r0, 0xC8
- ldr r1, [r1]
- adds r1, r0
- str r1, [sp, 0x4]
- ldr r1, _080177E4 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, r0, r1
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _080177EC
- ldr r2, _080177E8 @ =gEnigmaBerries
- lsls r1, r7, 3
- subs r0, r1, r7
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x7]
- str r0, [sp]
- b _080177FE
- .align 2, 0
-_080177E0: .4byte gBattleStruct
-_080177E4: .4byte gBattleMons
-_080177E8: .4byte gEnigmaBerries
-_080177EC:
- ldrh r0, [r1, 0x2E]
- str r3, [sp, 0x14]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- lsls r1, r7, 3
- ldr r3, [sp, 0x14]
-_080177FE:
- ldr r0, _08017978 @ =gPotentialItemEffectBattler
- strb r7, [r0]
- movs r0, 0
- mov r9, r0
- lsls r2, r7, 1
- str r2, [sp, 0xC]
- ldr r5, _0801797C @ =gDisableStructs
- mov r12, r5
- ldr r0, _08017980 @ =gBattleMons
- movs r2, 0x58
- adds r6, r7, 0
- muls r6, r2
- str r6, [sp, 0x8]
- ldr r2, _08017984 @ =gUnknown_2023BF0
- adds r5, r6, r2
- movs r6, 0
- str r6, [sp, 0x10]
- mov r10, r0
- subs r0, r1, r7
- lsls r0, 2
- mov r8, r0
- ldr r6, _08017988 @ =gBitTable
-_0801782A:
- ldrh r0, [r5]
- cmp r0, 0
- bne _08017840
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _08017840
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08017840:
- ldr r0, [sp, 0x8]
- add r0, r9
- mov r1, r10
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08017860
- movs r0, 0x2
- ands r0, r3
- cmp r0, 0
- beq _08017860
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08017860:
- mov r1, r8
- add r1, r12
- ldrh r0, [r5]
- ldrh r1, [r1, 0x4]
- cmp r0, r1
- bne _0801787C
- movs r0, 0x4
- ands r0, r3
- cmp r0, 0
- beq _0801787C
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0801787C:
- movs r0, 0x58
- adds r2, r7, 0
- muls r2, r0
- ldr r1, [sp, 0x10]
- adds r0, r1, r2
- ldr r1, _08017984 @ =gUnknown_2023BF0
- adds r0, r1
- mov r12, r0
- ldr r1, _0801798C @ =gLastUsedMove
- ldr r0, [sp, 0xC]
- adds r1, r0, r1
- str r1, [sp, 0x18]
- mov r1, r12
- ldrh r1, [r1]
- mov r12, r1
- ldr r0, [sp, 0x18]
- ldrh r0, [r0]
- cmp r12, r0
- bne _080178BE
- movs r0, 0x8
- ands r0, r3
- cmp r0, 0
- beq _080178BE
- mov r0, r10
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- bge _080178BE
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_080178BE:
- ldr r0, _0801797C @ =gDisableStructs
- add r0, r8
- ldrb r0, [r0, 0x13]
- lsls r0, 28
- cmp r0, 0
- beq _080178EC
- movs r0, 0x10
- ands r0, r3
- cmp r0, 0
- beq _080178EC
- ldr r2, _08017990 @ =gBattleMoves
- ldrh r1, [r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _080178EC
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_080178EC:
- ldrh r1, [r5]
- adds r0, r7, 0
- str r3, [sp, 0x14]
- bl GetImprisonedMovesCount
- lsls r0, 24
- ldr r3, [sp, 0x14]
- cmp r0, 0
- beq _0801790E
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- beq _0801790E
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0801790E:
- ldr r1, _0801797C @ =gDisableStructs
- mov r0, r8
- adds r2, r0, r1
- ldrb r0, [r2, 0xE]
- lsls r0, 28
- mov r12, r1
- cmp r0, 0
- beq _0801792E
- ldrh r0, [r2, 0x6]
- ldrh r1, [r5]
- cmp r0, r1
- beq _0801792E
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0801792E:
- ldr r2, [sp]
- cmp r2, 0x1D
- bne _08017950
- ldr r0, [sp, 0x4]
- ldrh r1, [r0]
- cmp r1, 0
- beq _08017950
- ldr r0, _08017994 @ =0x0000ffff
- cmp r1, r0
- beq _08017950
- ldrh r2, [r5]
- cmp r1, r2
- beq _08017950
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08017950:
- adds r6, 0x4
- adds r5, 0x2
- ldr r0, [sp, 0x10]
- adds r0, 0x2
- str r0, [sp, 0x10]
- movs r1, 0x1
- add r9, r1
- mov r2, r9
- cmp r2, 0x3
- bgt _08017966
- b _0801782A
-_08017966:
- adds r0, r4, 0
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08017978: .4byte gPotentialItemEffectBattler
-_0801797C: .4byte gDisableStructs
-_08017980: .4byte gBattleMons
-_08017984: .4byte gUnknown_2023BF0
-_08017988: .4byte gBitTable
-_0801798C: .4byte gLastUsedMove
-_08017990: .4byte gBattleMoves
-_08017994: .4byte 0x0000ffff
- thumb_func_end CheckMoveLimitations
-
- thumb_func_start sub_8017998
-sub_8017998: @ 8017998
- push {r4-r6,lr}
- ldr r5, _08017A04 @ =gActiveBattler
- ldrb r0, [r5]
- movs r1, 0
- movs r2, 0xFF
- bl CheckMoveLimitations
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xF
- bne _08017A40
- ldr r0, _08017A08 @ =gUnknown_2023E8C
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _08017A0C @ =gUnknown_2023D80
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08017A10 @ =gUnknown_81D8EA0
- str r1, [r0]
- ldr r0, _08017A14 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08017A1C
- ldrb r0, [r5]
- bl GetBattlerPosition
- adds r4, r0, 0
- bl Random
- movs r1, 0x1
- eors r4, r1
- movs r1, 0x2
- ands r1, r0
- orrs r4, r1
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl GetBattlerAtPosition
- ldr r2, _08017A18 @ =gUnknown_20233C4
- ldrb r1, [r5]
- lsls r1, 9
- adds r2, 0x3
- adds r1, r2
- b _08017A50
- .align 2, 0
-_08017A04: .4byte gActiveBattler
-_08017A08: .4byte gUnknown_2023E8C
-_08017A0C: .4byte gUnknown_2023D80
-_08017A10: .4byte gUnknown_81D8EA0
-_08017A14: .4byte gBattleTypeFlags
-_08017A18: .4byte gUnknown_20233C4
-_08017A1C:
- ldrb r0, [r5]
- bl GetBattlerPosition
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- ldr r2, _08017A3C @ =gUnknown_20233C4
- ldrb r1, [r5]
- lsls r1, 9
- adds r2, 0x3
- adds r1, r2
- b _08017A50
- .align 2, 0
-_08017A3C: .4byte gUnknown_20233C4
-_08017A40:
- ldr r0, _08017A60 @ =gUnknown_2023E8C
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
-_08017A50:
- strb r0, [r1]
- movs r0, 0
- cmp r6, 0xF
- bne _08017A5A
- movs r0, 0x1
-_08017A5A:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08017A60: .4byte gUnknown_2023E8C
- thumb_func_end sub_8017998
-
- thumb_func_start GetImprisonedMovesCount
-GetImprisonedMovesCount: @ 8017A64
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- movs r6, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r4, 0
- ldr r0, _08017AF8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r6, r0
- bge _08017AE8
- ldr r7, _08017AFC @ =gUnknown_2023BF0
- mov r8, r7
-_08017A8E:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- adds r3, r4, 0x1
- cmp r9, r0
- beq _08017ADE
- ldr r1, _08017B00 @ =gStatuses3
- lsls r0, r4, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _08017ADE
- movs r2, 0
- movs r0, 0x58
- adds r1, r4, 0
- muls r1, r0
- adds r0, r1, r7
- ldrh r0, [r0]
- cmp r5, r0
- beq _08017AD4
- mov r4, r8
- adds r0, r1, r4
-_08017AC6:
- adds r0, 0x2
- adds r2, 0x1
- cmp r2, 0x3
- bgt _08017ADE
- ldrh r1, [r0]
- cmp r5, r1
- bne _08017AC6
-_08017AD4:
- cmp r2, 0x3
- bgt _08017ADE
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08017ADE:
- adds r4, r3, 0
- ldr r0, _08017AF8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- blt _08017A8E
-_08017AE8:
- adds r0, r6, 0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08017AF8: .4byte gBattlersCount
-_08017AFC: .4byte gUnknown_2023BF0
-_08017B00: .4byte gStatuses3
- thumb_func_end GetImprisonedMovesCount
-
- thumb_func_start UpdateTurnCounters
-UpdateTurnCounters: @ 8017B04
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0
- mov r9, r0
- ldr r1, _08017BA8 @ =sBattler_AI
- mov r2, r9
- strb r2, [r1]
- ldr r0, _08017BAC @ =gBattlersCount
- ldrb r4, [r0]
- adds r6, r1, 0
- mov r10, r0
- ldr r7, _08017BB0 @ =gBattlerTarget
- ldr r3, _08017BB4 @ =gBattleStruct
- mov r12, r3
- cmp r9, r4
- bcs _08017B58
- ldr r2, _08017BB8 @ =gAbsentBattlerFlags
- ldrb r1, [r2]
- ldr r5, _08017BBC @ =gBitTable
- ldr r0, [r5]
- ands r1, r0
- cmp r1, 0
- beq _08017B58
- adds r3, r6, 0
-_08017B3A:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r4
- bcs _08017B58
- ldrb r0, [r2]
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r5
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- bne _08017B3A
-_08017B58:
- movs r0, 0
- strb r0, [r7]
- mov r0, r10
- ldrb r4, [r0]
- cmp r4, 0
- beq _08017B92
- ldr r2, _08017BB8 @ =gAbsentBattlerFlags
- ldrb r1, [r2]
- ldr r5, _08017BBC @ =gBitTable
- ldr r0, [r5]
- ands r1, r0
- cmp r1, 0
- beq _08017B92
- adds r3, r7, 0
-_08017B74:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r4
- bcs _08017B92
- ldrb r0, [r2]
- ldrb r1, [r7]
- lsls r1, 2
- adds r1, r5
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- bne _08017B74
-_08017B92:
- mov r1, r12
- ldr r0, [r1]
- ldrb r0, [r0, 0x3]
- cmp r0, 0xA
- bls _08017B9E
- b _0801822A
-_08017B9E:
- lsls r0, 2
- ldr r1, _08017BC0 @ =_08017BC4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08017BA8: .4byte sBattler_AI
-_08017BAC: .4byte gBattlersCount
-_08017BB0: .4byte gBattlerTarget
-_08017BB4: .4byte gBattleStruct
-_08017BB8: .4byte gAbsentBattlerFlags
-_08017BBC: .4byte gBitTable
-_08017BC0: .4byte _08017BC4
- .align 2, 0
-_08017BC4:
- .4byte _08017BF0
- .4byte _08017C76
- .4byte _08017D3C
- .4byte _08017E08
- .4byte _08017EE4
- .4byte _08017F9C
- .4byte _08018050
- .4byte _080180D4
- .4byte _08018144
- .4byte _0801819C
- .4byte _08018220
-_08017BF0:
- movs r5, 0
- ldr r1, _08017C10 @ =gBattlersCount
- mov r10, r1
- ldrb r2, [r1]
- cmp r5, r2
- bge _08017C0A
- ldr r2, _08017C14 @ =gUnknown_2023BDE
-_08017BFE:
- adds r0, r5, r2
- strb r5, [r0]
- adds r5, 0x1
- ldrb r3, [r1]
- cmp r5, r3
- blt _08017BFE
-_08017C0A:
- movs r5, 0
- b _08017C58
- .align 2, 0
-_08017C10: .4byte gBattlersCount
-_08017C14: .4byte gUnknown_2023BDE
-_08017C18:
- adds r4, r5, 0x1
- adds r6, r4, 0
- ldrb r1, [r1]
- cmp r6, r1
- bge _08017C56
- ldr r7, _08017D14 @ =gUnknown_2023BDE
- ldr r0, _08017D18 @ =gBattlersCount
- mov r10, r0
- lsls r1, r5, 24
- mov r8, r1
-_08017C2C:
- adds r0, r5, r7
- ldrb r0, [r0]
- adds r1, r4, r7
- ldrb r1, [r1]
- movs r2, 0
- bl GetWhoStrikesFirst
- lsls r0, 24
- cmp r0, 0
- beq _08017C4C
- lsls r1, r4, 24
- lsrs r1, 24
- mov r2, r8
- lsrs r0, r2, 24
- bl SwapTurnOrder
-_08017C4C:
- adds r4, 0x1
- ldr r0, _08017D18 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- blt _08017C2C
-_08017C56:
- adds r5, r6, 0
-_08017C58:
- mov r1, r10
- ldrb r0, [r1]
- subs r0, 0x1
- cmp r5, r0
- blt _08017C18
- ldr r2, _08017D1C @ =gBattleStruct
- ldr r1, [r2]
- ldrb r0, [r1, 0x3]
- adds r0, 0x1
- strb r0, [r1, 0x3]
- ldr r0, [r2]
- adds r0, 0xDB
- movs r1, 0
- strb r1, [r0]
- mov r12, r2
-_08017C76:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _08017C84
- b _08017F60
-_08017C84:
- ldr r3, _08017D20 @ =gActiveBattler
- mov r8, r3
- movs r7, 0
- ldr r6, _08017D24 @ =sBattler_AI
- ldr r5, _08017D28 @ =gBattleTextBuff1
-_08017C8E:
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r4, [r0]
- ldr r2, _08017D2C @ =gSideTimers
- lsls r1, r4, 1
- adds r0, r1, r4
- lsls r0, 2
- adds r2, r0, r2
- ldrb r0, [r2, 0x1]
- strb r0, [r6]
- mov r3, r8
- strb r0, [r3]
- ldr r0, _08017D30 @ =gSideAffecting
- adds r3, r1, r0
- ldrh r1, [r3]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08017CF0
- ldrb r0, [r2]
- subs r0, 0x1
- strb r0, [r2]
- movs r4, 0xFF
- lsls r0, 24
- cmp r0, 0
- bne _08017CF0
- ldrh r0, [r3]
- ldr r2, _08017D34 @ =0x0000fffe
- adds r1, r2, 0
- ands r0, r1
- strh r0, [r3]
- ldr r0, _08017D38 @ =gUnknown_81D8B32
- bl BattleScriptExecute
- movs r0, 0xFD
- strb r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0x1]
- movs r0, 0x73
- strb r0, [r5, 0x2]
- strb r7, [r5, 0x3]
- ldrb r0, [r5, 0x4]
- orrs r0, r4
- strb r0, [r5, 0x4]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08017CF0:
- ldr r2, _08017D1C @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0xDB
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r12, r2
- mov r3, r9
- cmp r3, 0
- beq _08017D06
- b _08018232
-_08017D06:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _08017C8E
- b _08017F60
- .align 2, 0
-_08017D14: .4byte gUnknown_2023BDE
-_08017D18: .4byte gBattlersCount
-_08017D1C: .4byte gBattleStruct
-_08017D20: .4byte gActiveBattler
-_08017D24: .4byte sBattler_AI
-_08017D28: .4byte gBattleTextBuff1
-_08017D2C: .4byte gSideTimers
-_08017D30: .4byte gSideAffecting
-_08017D34: .4byte 0x0000fffe
-_08017D38: .4byte gUnknown_81D8B32
-_08017D3C:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _08017D4A
- b _08017EA4
-_08017D4A:
- movs r0, 0x2
- mov r10, r0
- movs r2, 0
- mov r8, r2
- ldr r7, _08017DE4 @ =sBattler_AI
- ldr r5, _08017DE8 @ =gBattleTextBuff1
-_08017D56:
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r4, [r0]
- ldr r2, _08017DEC @ =gSideTimers
- lsls r1, r4, 1
- adds r0, r1, r4
- lsls r0, 2
- adds r2, r0, r2
- ldrb r0, [r2, 0x3]
- strb r0, [r7]
- ldr r3, _08017DF0 @ =gActiveBattler
- strb r0, [r3]
- ldr r0, _08017DF4 @ =gSideAffecting
- adds r3, r1, r0
- ldrh r1, [r3]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08017DBE
- ldrb r0, [r2, 0x2]
- subs r0, 0x1
- strb r0, [r2, 0x2]
- movs r6, 0xFF
- lsls r0, 24
- cmp r0, 0
- bne _08017DBE
- ldrh r0, [r3]
- ldr r2, _08017DF8 @ =0x0000fffd
- adds r1, r2, 0
- ands r0, r1
- strh r0, [r3]
- ldr r0, _08017DFC @ =gUnknown_81D8B32
- bl BattleScriptExecute
- ldr r0, _08017E00 @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
- movs r0, 0xFD
- strb r0, [r5]
- mov r3, r10
- strb r3, [r5, 0x1]
- movs r0, 0x71
- strb r0, [r5, 0x2]
- mov r0, r8
- strb r0, [r5, 0x3]
- ldrb r0, [r5, 0x4]
- orrs r0, r6
- strb r0, [r5, 0x4]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08017DBE:
- ldr r2, _08017E04 @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0xDB
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r12, r2
- mov r1, r9
- cmp r1, 0
- beq _08017DD4
- b _08018232
-_08017DD4:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _08017D56
- b _08017EA4
- .align 2, 0
-_08017DE4: .4byte sBattler_AI
-_08017DE8: .4byte gBattleTextBuff1
-_08017DEC: .4byte gSideTimers
-_08017DF0: .4byte gActiveBattler
-_08017DF4: .4byte gSideAffecting
-_08017DF8: .4byte 0x0000fffd
-_08017DFC: .4byte gUnknown_81D8B32
-_08017E00: .4byte gUnknown_2023E82
-_08017E04: .4byte gBattleStruct
-_08017E08:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _08017EA4
- ldr r0, _08017EC0 @ =gActiveBattler
- mov r10, r0
- movs r2, 0
- mov r8, r2
- ldr r7, _08017EC4 @ =sBattler_AI
- ldr r5, _08017EC8 @ =gBattleTextBuff1
-_08017E20:
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r4, [r0]
- ldr r1, _08017ECC @ =gSideTimers
- lsls r3, r4, 1
- adds r0, r3, r4
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x5]
- strb r0, [r7]
- mov r2, r10
- strb r0, [r2]
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _08017E82
- subs r0, 0x1
- strb r0, [r1, 0x4]
- movs r6, 0xFF
- lsls r0, 24
- cmp r0, 0
- bne _08017E82
- ldr r2, _08017ED0 @ =gSideAffecting
- adds r2, r3, r2
- ldrh r0, [r2]
- ldr r3, _08017ED4 @ =0x0000feff
- adds r1, r3, 0
- ands r0, r1
- strh r0, [r2]
- ldr r0, _08017ED8 @ =gUnknown_81D8B32
- bl BattleScriptExecute
- ldr r0, _08017EDC @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
- movs r0, 0xFD
- strb r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0x1]
- movs r0, 0x36
- strb r0, [r5, 0x2]
- mov r0, r8
- strb r0, [r5, 0x3]
- ldrb r0, [r5, 0x4]
- orrs r0, r6
- strb r0, [r5, 0x4]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08017E82:
- ldr r2, _08017EE0 @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0xDB
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r12, r2
- mov r1, r9
- cmp r1, 0
- beq _08017E98
- b _08018232
-_08017E98:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _08017E20
-_08017EA4:
- mov r2, r9
- cmp r2, 0
- beq _08017EAC
- b _08018232
-_08017EAC:
- mov r3, r12
- ldr r0, [r3]
- ldrb r1, [r0, 0x3]
- adds r1, 0x1
- strb r1, [r0, 0x3]
- ldr r0, [r3]
- adds r0, 0xDB
- strb r2, [r0]
- b _0801822A
- .align 2, 0
-_08017EC0: .4byte gActiveBattler
-_08017EC4: .4byte sBattler_AI
-_08017EC8: .4byte gBattleTextBuff1
-_08017ECC: .4byte gSideTimers
-_08017ED0: .4byte gSideAffecting
-_08017ED4: .4byte 0x0000feff
-_08017ED8: .4byte gUnknown_81D8B32
-_08017EDC: .4byte gUnknown_2023E82
-_08017EE0: .4byte gBattleStruct
-_08017EE4:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _08017F60
- ldr r6, _08017F80 @ =gActiveBattler
- ldr r5, _08017F84 @ =sBattler_AI
-_08017EF4:
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r4, [r0]
- ldr r2, _08017F88 @ =gSideTimers
- lsls r1, r4, 1
- adds r0, r1, r4
- lsls r0, 2
- adds r2, r0, r2
- ldrb r0, [r2, 0x7]
- strb r0, [r5]
- strb r0, [r6]
- ldr r0, _08017F8C @ =gSideAffecting
- adds r3, r1, r0
- ldrh r1, [r3]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08017F3E
- ldrb r0, [r2, 0x6]
- subs r0, 0x1
- strb r0, [r2, 0x6]
- lsls r0, 24
- cmp r0, 0
- bne _08017F3E
- ldrh r0, [r3]
- ldr r2, _08017F90 @ =0x0000ffdf
- adds r1, r2, 0
- ands r0, r1
- strh r0, [r3]
- ldr r0, _08017F94 @ =gUnknown_81D8B43
- bl BattleScriptExecute
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08017F3E:
- ldr r2, _08017F98 @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0xDB
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r12, r2
- mov r3, r9
- cmp r3, 0
- beq _08017F54
- b _08018232
-_08017F54:
- mov r1, r12
- ldr r0, [r1]
- adds r0, 0xDB
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _08017EF4
-_08017F60:
- mov r0, r9
- cmp r0, 0
- beq _08017F68
- b _08018232
-_08017F68:
- mov r1, r12
- ldr r0, [r1]
- ldrb r1, [r0, 0x3]
- adds r1, 0x1
- strb r1, [r0, 0x3]
- mov r2, r12
- ldr r0, [r2]
- adds r0, 0xDB
- mov r3, r9
- strb r3, [r0]
- b _0801822A
- .align 2, 0
-_08017F80: .4byte gActiveBattler
-_08017F84: .4byte sBattler_AI
-_08017F88: .4byte gSideTimers
-_08017F8C: .4byte gSideAffecting
-_08017F90: .4byte 0x0000ffdf
-_08017F94: .4byte gUnknown_81D8B43
-_08017F98: .4byte gBattleStruct
-_08017F9C:
- mov r2, r12
- ldr r0, [r2]
- adds r0, 0xDB
- ldr r1, _08018030 @ =gBattlersCount
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0801801C
- ldr r4, _08018034 @ =gActiveBattler
- ldr r5, _08018038 @ =gUnknown_2023BDE
-_08017FB0:
- ldr r0, [r2]
- adds r0, 0xDB
- ldrb r0, [r0]
- adds r0, r5
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r0, _0801803C @ =gUnknown_2023F20
- adds r0, 0x20
- ldrb r2, [r4]
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0
- beq _08017FF8
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _08017FF8
- ldr r1, _08018040 @ =gBattleMons
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08017FF8
- ldr r0, _08018044 @ =gBattlerTarget
- strb r2, [r0]
- ldr r0, _08018048 @ =gUnknown_81D8ED5
- bl BattleScriptExecute
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08017FF8:
- ldr r2, _0801804C @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0xDB
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r12, r2
- mov r3, r9
- cmp r3, 0
- beq _0801800E
- b _08018232
-_0801800E:
- ldr r0, [r2]
- adds r0, 0xDB
- ldr r1, _08018030 @ =gBattlersCount
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08017FB0
-_0801801C:
- mov r0, r9
- cmp r0, 0
- beq _08018024
- b _08018232
-_08018024:
- mov r2, r12
- ldr r1, [r2]
- ldrb r0, [r1, 0x3]
- adds r0, 0x1
- strb r0, [r1, 0x3]
- b _0801822A
- .align 2, 0
-_08018030: .4byte gBattlersCount
-_08018034: .4byte gActiveBattler
-_08018038: .4byte gUnknown_2023BDE
-_0801803C: .4byte gUnknown_2023F20
-_08018040: .4byte gBattleMons
-_08018044: .4byte gBattlerTarget
-_08018048: .4byte gUnknown_81D8ED5
-_0801804C: .4byte gBattleStruct
-_08018050:
- ldr r3, _08018088 @ =gBattleWeather
- ldrh r2, [r3]
- movs r0, 0x7
- ands r0, r2
- cmp r0, 0
- bne _0801805E
- b _080181FC
-_0801805E:
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- bne _080180AA
- ldr r1, _0801808C @ =gUnknown_2023F20
- adds r1, 0x28
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _0801809C
- ldr r0, _08018090 @ =0x0000fffe
- ands r0, r2
- ldr r1, _08018094 @ =0x0000fffd
- ands r0, r1
- strh r0, [r3]
- ldr r1, _08018098 @ =gUnknown_2023E82
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _080180C8
- .align 2, 0
-_08018088: .4byte gBattleWeather
-_0801808C: .4byte gUnknown_2023F20
-_08018090: .4byte 0x0000fffe
-_08018094: .4byte 0x0000fffd
-_08018098: .4byte gUnknown_2023E82
-_0801809C:
- movs r0, 0x2
- ands r0, r2
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _080180B6
- b _080180C4
-_080180AA:
- movs r0, 0x2
- ands r0, r2
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _080180C4
-_080180B6:
- ldr r1, _080180C0 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _080180C8
- .align 2, 0
-_080180C0: .4byte gUnknown_2023E82
-_080180C4:
- ldr r0, _080180CC @ =gUnknown_2023E82
- strb r1, [r0, 0x5]
-_080180C8:
- ldr r0, _080180D0 @ =gUnknown_81D8A64
- b _080181EE
- .align 2, 0
-_080180CC: .4byte gUnknown_2023E82
-_080180D0: .4byte gUnknown_81D8A64
-_080180D4:
- ldr r3, _08018108 @ =gBattleWeather
- ldrh r2, [r3]
- movs r0, 0x18
- ands r0, r2
- cmp r0, 0
- bne _080180E2
- b _080181FC
-_080180E2:
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- bne _0801811C
- ldr r1, _0801810C @ =gUnknown_2023F20
- adds r1, 0x28
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _0801811C
- ldr r0, _08018110 @ =0x0000fff7
- ands r0, r2
- strh r0, [r3]
- ldr r1, _08018114 @ =gUnknown_2023D74
- ldr r0, _08018118 @ =gUnknown_81D8B01
- b _08018120
- .align 2, 0
-_08018108: .4byte gBattleWeather
-_0801810C: .4byte gUnknown_2023F20
-_08018110: .4byte 0x0000fff7
-_08018114: .4byte gUnknown_2023D74
-_08018118: .4byte gUnknown_81D8B01
-_0801811C:
- ldr r1, _08018134 @ =gUnknown_2023D74
- ldr r0, _08018138 @ =gUnknown_81D8A7F
-_08018120:
- str r0, [r1]
- adds r3, r1, 0
- ldr r1, _0801813C @ =gBattleScripting
- movs r2, 0
- movs r0, 0xC
- strb r0, [r1, 0x10]
- ldr r0, _08018140 @ =gUnknown_2023E82
- strb r2, [r0, 0x5]
- b _080181EC
- .align 2, 0
-_08018134: .4byte gUnknown_2023D74
-_08018138: .4byte gUnknown_81D8A7F
-_0801813C: .4byte gBattleScripting
-_08018140: .4byte gUnknown_2023E82
-_08018144:
- ldr r3, _08018174 @ =gBattleWeather
- ldrh r2, [r3]
- movs r0, 0x60
- ands r0, r2
- cmp r0, 0
- beq _080181FC
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- bne _08018188
- ldr r1, _08018178 @ =gUnknown_2023F20
- adds r1, 0x28
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _08018188
- ldr r0, _0801817C @ =0x0000ffdf
- ands r0, r2
- strh r0, [r3]
- ldr r1, _08018180 @ =gUnknown_2023D74
- ldr r0, _08018184 @ =gUnknown_81D8B18
- b _0801818C
- .align 2, 0
-_08018174: .4byte gBattleWeather
-_08018178: .4byte gUnknown_2023F20
-_0801817C: .4byte 0x0000ffdf
-_08018180: .4byte gUnknown_2023D74
-_08018184: .4byte gUnknown_81D8B18
-_08018188:
- ldr r1, _08018194 @ =gUnknown_2023D74
- ldr r0, _08018198 @ =gUnknown_81D8B0A
-_0801818C:
- str r0, [r1]
- adds r3, r1, 0
- b _080181EC
- .align 2, 0
-_08018194: .4byte gUnknown_2023D74
-_08018198: .4byte gUnknown_81D8B0A
-_0801819C:
- ldr r3, _080181C4 @ =gBattleWeather
- ldrh r2, [r3]
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _080181FC
- ldr r1, _080181C8 @ =gUnknown_2023F20
- adds r1, 0x28
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _080181D8
- ldr r0, _080181CC @ =0x0000ff7f
- ands r0, r2
- strh r0, [r3]
- ldr r1, _080181D0 @ =gUnknown_2023D74
- ldr r0, _080181D4 @ =gUnknown_81D8B01
- b _080181DC
- .align 2, 0
-_080181C4: .4byte gBattleWeather
-_080181C8: .4byte gUnknown_2023F20
-_080181CC: .4byte 0x0000ff7f
-_080181D0: .4byte gUnknown_2023D74
-_080181D4: .4byte gUnknown_81D8B01
-_080181D8:
- ldr r1, _0801820C @ =gUnknown_2023D74
- ldr r0, _08018210 @ =gUnknown_81D8A7F
-_080181DC:
- str r0, [r1]
- adds r3, r1, 0
- ldr r1, _08018214 @ =gBattleScripting
- movs r0, 0xD
- strb r0, [r1, 0x10]
- ldr r1, _08018218 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_080181EC:
- ldr r0, [r3]
-_080181EE:
- bl BattleScriptExecute
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_080181FC:
- ldr r2, _0801821C @ =gBattleStruct
- ldr r1, [r2]
- ldrb r0, [r1, 0x3]
- adds r0, 0x1
- strb r0, [r1, 0x3]
- mov r12, r2
- b _0801822A
- .align 2, 0
-_0801820C: .4byte gUnknown_2023D74
-_08018210: .4byte gUnknown_81D8A7F
-_08018214: .4byte gBattleScripting
-_08018218: .4byte gUnknown_2023E82
-_0801821C: .4byte gBattleStruct
-_08018220:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801822A:
- mov r3, r9
- cmp r3, 0
- bne _08018232
- b _08017B92
-_08018232:
- ldr r0, _08018250 @ =gUnknown_3004F84
- ldr r1, [r0]
- ldr r0, _08018254 @ =sub_8013BD4
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08018250: .4byte gUnknown_3004F84
-_08018254: .4byte sub_8013BD4
- thumb_func_end UpdateTurnCounters
-
- thumb_func_start TurnBasedEffects
-TurnBasedEffects: @ 8018258
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r0, 0
- mov r9, r0
- ldr r2, _0801828C @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _08018290 @ =0x01000020
- orrs r0, r1
- str r0, [r2]
- ldr r5, _08018294 @ =gBattleStruct
- ldr r2, [r5]
- ldr r0, _08018298 @ =gBattlersCount
- ldrb r1, [r2, 0x1]
- adds r7, r5, 0
- mov r8, r0
- ldrb r3, [r0]
- cmp r1, r3
- bcc _08018288
- bl _08018C6C
-_08018288:
- bl _08018C62
- .align 2, 0
-_0801828C: .4byte gUnknown_2023DD0
-_08018290: .4byte 0x01000020
-_08018294: .4byte gBattleStruct
-_08018298: .4byte gBattlersCount
-_0801829C:
- ldr r3, _080182D0 @ =gActiveBattler
- ldr r4, _080182D4 @ =sBattler_AI
- ldr r1, _080182D8 @ =gUnknown_2023BDE
- ldr r5, [r5]
- ldrb r0, [r5, 0x1]
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r4]
- strb r0, [r3]
- ldr r0, _080182DC @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _080182E0 @ =gBitTable
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- adds r6, r3, 0
- cmp r1, 0
- beq _080182E4
- ldrb r0, [r5, 0x1]
- adds r0, 0x1
- strb r0, [r5, 0x1]
- bl _08018C50
- .align 2, 0
-_080182D0: .4byte gActiveBattler
-_080182D4: .4byte sBattler_AI
-_080182D8: .4byte gUnknown_2023BDE
-_080182DC: .4byte gAbsentBattlerFlags
-_080182E0: .4byte gBitTable
-_080182E4:
- ldrb r0, [r5]
- cmp r0, 0x13
- bls _080182EE
- bl _08018C46
-_080182EE:
- lsls r0, 2
- ldr r1, _080182F8 @ =_080182FC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080182F8: .4byte _080182FC
- .align 2, 0
-_080182FC:
- .4byte _0801834C
- .4byte _080183AC
- .4byte _080183CA
- .4byte _080183FA
- .4byte _08018478
- .4byte _080184C0
- .4byte _08018540
- .4byte _08018588
- .4byte _080185EC
- .4byte _08018634
- .4byte _08018794
- .4byte _080188B0
- .4byte _08018958
- .4byte _08018A1C
- .4byte _08018AD0
- .4byte _08018AF0
- .4byte _08018B3C
- .4byte _08018B6C
- .4byte _080183E2
- .4byte _08018C38
-_0801834C:
- ldr r1, _0801839C @ =gStatuses3
- ldrb r3, [r6]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- bne _08018364
- bl _08018C12
-_08018364:
- ldr r0, _080183A0 @ =gBattleMons
- movs r1, 0x58
- muls r1, r3
- adds r0, r1, r0
- ldrh r2, [r0, 0x28]
- ldrh r5, [r0, 0x2C]
- cmp r2, r5
- bne _08018378
- bl _08018C12
-_08018378:
- cmp r2, 0
- bne _08018380
- bl _08018C12
-_08018380:
- ldr r1, _080183A4 @ =gBattleMoveDamage
- ldrh r0, [r0, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _08018390
- movs r0, 0x1
- str r0, [r1]
-_08018390:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- ldr r0, _080183A8 @ =gUnknown_81D8F0C
- bl _08018C04
- .align 2, 0
-_0801839C: .4byte gStatuses3
-_080183A0: .4byte gBattleMons
-_080183A4: .4byte gBattleMoveDamage
-_080183A8: .4byte gUnknown_81D8F0C
-_080183AC:
- ldrb r1, [r6]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _080183C6
- bl _08018C12
-_080183C6:
- bl _08018C08
-_080183CA:
- ldrb r1, [r6]
- movs r0, 0x1
- movs r2, 0
- bl sub_801BC68
- lsls r0, 24
- cmp r0, 0
- bne _080183DE
- bl _08018C12
-_080183DE:
- bl _08018C08
-_080183E2:
- ldrb r1, [r6]
- movs r0, 0x1
- movs r2, 0x1
- bl sub_801BC68
- lsls r0, 24
- cmp r0, 0
- bne _080183F6
- bl _08018C12
-_080183F6:
- bl _08018C08
-_080183FA:
- ldr r0, _08018460 @ =gStatuses3
- ldrb r2, [r6]
- lsls r1, r2, 2
- adds r1, r0
- ldr r1, [r1]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _08018410
- bl _08018C12
-_08018410:
- ldr r3, _08018464 @ =gBattleMons
- movs r5, 0x3
- ands r5, r1
- movs r1, 0x58
- adds r0, r5, 0
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08018428
- bl _08018C12
-_08018428:
- adds r0, r2, 0
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08018438
- bl _08018C12
-_08018438:
- ldr r0, _08018468 @ =gBattlerTarget
- strb r5, [r0]
- ldr r2, _0801846C @ =gBattleMoveDamage
- ldrb r0, [r6]
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x2C]
- lsrs r0, 3
- str r0, [r2]
- cmp r0, 0
- bne _08018452
- movs r0, 0x1
- str r0, [r2]
-_08018452:
- ldr r1, _08018470 @ =gBattleScripting
- strb r5, [r1, 0x10]
- ldrb r0, [r4]
- strb r0, [r1, 0x11]
- ldr r0, _08018474 @ =gUnknown_81D8B4D
- b _08018C04
- .align 2, 0
-_08018460: .4byte gStatuses3
-_08018464: .4byte gBattleMons
-_08018468: .4byte gBattlerTarget
-_0801846C: .4byte gBattleMoveDamage
-_08018470: .4byte gBattleScripting
-_08018474: .4byte gUnknown_81D8B4D
-_08018478:
- ldr r2, _080184B4 @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- adds r3, r1, 0
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08018494
- b _08018C12
-_08018494:
- adds r1, r3, r2
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- bne _0801849E
- b _08018C12
-_0801849E:
- ldr r2, _080184B8 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 3
- str r0, [r2]
- cmp r0, 0
- bne _080184AE
- movs r0, 0x1
- str r0, [r2]
-_080184AE:
- ldr r0, _080184BC @ =gUnknown_81D9053
- b _08018C04
- .align 2, 0
-_080184B4: .4byte gBattleMons
-_080184B8: .4byte gBattleMoveDamage
-_080184BC: .4byte gUnknown_81D9053
-_080184C0:
- ldr r4, _08018534 @ =gBattleMons
- ldrb r0, [r6]
- movs r7, 0x58
- mov r8, r7
- mov r2, r8
- muls r2, r0
- adds r3, r4, 0
- adds r3, 0x4C
- adds r0, r2, r3
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080184DE
- b _08018C12
-_080184DE:
- adds r1, r2, r4
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- bne _080184E8
- b _08018C12
-_080184E8:
- ldr r5, _08018538 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 4
- str r0, [r5]
- cmp r0, 0
- bne _080184F8
- movs r0, 0x1
- str r0, [r5]
-_080184F8:
- ldrb r0, [r6]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r2, r0, r3
- ldr r1, [r2]
- movs r4, 0xF0
- lsls r4, 4
- adds r0, r1, 0
- ands r0, r4
- cmp r0, r4
- beq _08018518
- movs r7, 0x80
- lsls r7, 1
- adds r0, r1, r7
- str r0, [r2]
-_08018518:
- ldrb r0, [r6]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r3
- ldr r0, [r0]
- ands r0, r4
- lsrs r0, 8
- ldr r1, [r5]
- muls r0, r1
- str r0, [r5]
- ldr r0, _0801853C @ =gUnknown_81D9053
- b _08018C04
- .align 2, 0
-_08018534: .4byte gBattleMons
-_08018538: .4byte gBattleMoveDamage
-_0801853C: .4byte gUnknown_81D9053
-_08018540:
- ldr r2, _0801857C @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- adds r3, r1, 0
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0801855C
- b _08018C12
-_0801855C:
- adds r1, r3, r2
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- bne _08018566
- b _08018C12
-_08018566:
- ldr r2, _08018580 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 3
- str r0, [r2]
- cmp r0, 0
- bne _08018576
- movs r0, 0x1
- str r0, [r2]
-_08018576:
- ldr r0, _08018584 @ =gUnknown_81D9075
- b _08018C04
- .align 2, 0
-_0801857C: .4byte gBattleMons
-_08018580: .4byte gBattleMoveDamage
-_08018584: .4byte gUnknown_81D9075
-_08018588:
- ldr r4, _080185D4 @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- muls r1, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r5, r1, r0
- ldr r2, [r5]
- movs r0, 0x80
- lsls r0, 20
- ands r0, r2
- cmp r0, 0
- bne _080185A4
- b _08018C12
-_080185A4:
- adds r3, r1, r4
- ldrh r0, [r3, 0x28]
- cmp r0, 0
- bne _080185AE
- b _08018C12
-_080185AE:
- adds r0, r4, 0
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _080185E0
- ldr r1, _080185D8 @ =gBattleMoveDamage
- ldrh r0, [r3, 0x2C]
- lsrs r0, 2
- str r0, [r1]
- cmp r0, 0
- bne _080185CE
- movs r0, 0x1
- str r0, [r1]
-_080185CE:
- ldr r0, _080185DC @ =gUnknown_81D9155
- b _08018C04
- .align 2, 0
-_080185D4: .4byte gBattleMons
-_080185D8: .4byte gBattleMoveDamage
-_080185DC: .4byte gUnknown_81D9155
-_080185E0:
- ldr r0, _080185E8 @ =0xf7ffffff
- ands r2, r0
- str r2, [r5]
- b _08018C12
- .align 2, 0
-_080185E8: .4byte 0xf7ffffff
-_080185EC:
- ldr r2, _08018628 @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- adds r3, r1, 0
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 21
- ands r0, r1
- cmp r0, 0
- bne _0801860A
- b _08018C12
-_0801860A:
- adds r1, r3, r2
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- bne _08018614
- b _08018C12
-_08018614:
- ldr r2, _0801862C @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 2
- str r0, [r2]
- cmp r0, 0
- bne _08018624
- movs r0, 0x1
- str r0, [r2]
-_08018624:
- ldr r0, _08018630 @ =gUnknown_81D9166
- b _08018C04
- .align 2, 0
-_08018628: .4byte gBattleMons
-_0801862C: .4byte gBattleMoveDamage
-_08018630: .4byte gUnknown_81D9166
-_08018634:
- ldr r3, _080186D4 @ =gBattleMons
- mov r8, r3
- ldrb r0, [r6]
- movs r3, 0x58
- adds r1, r0, 0
- muls r1, r3
- movs r5, 0x50
- add r5, r8
- mov r10, r5
- adds r4, r1, r5
- ldr r2, [r4]
- movs r5, 0xE0
- lsls r5, 8
- adds r0, r2, 0
- ands r0, r5
- cmp r0, 0
- bne _08018658
- b _08018C12
-_08018658:
- mov r7, r8
- adds r0, r1, r7
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08018664
- b _08018C12
-_08018664:
- ldr r1, _080186D8 @ =0xffffe000
- adds r0, r2, r1
- str r0, [r4]
- ldrb r4, [r6]
- adds r0, r4, 0
- muls r0, r3
- add r0, r10
- ldr r0, [r0]
- ands r0, r5
- cmp r0, 0
- beq _080186F4
- ldr r1, _080186DC @ =gBattleScripting
- ldr r0, _080186E0 @ =gBattleStruct
- ldr r2, [r0]
- lsls r0, r4, 1
- adds r0, r2
- ldrb r0, [r0, 0x4]
- strb r0, [r1, 0x10]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r2
- ldrb r0, [r0, 0x5]
- strb r0, [r1, 0x11]
- ldr r1, _080186E4 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r2
- ldrb r0, [r0, 0x4]
- strb r0, [r1, 0x2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r2
- ldrb r0, [r0, 0x5]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _080186E8 @ =gUnknown_2023D74
- ldr r0, _080186EC @ =gUnknown_81D9124
- str r0, [r1]
- ldr r2, _080186F0 @ =gBattleMoveDamage
- ldrb r0, [r6]
- muls r0, r3
- add r0, r8
- ldrh r0, [r0, 0x2C]
- lsrs r0, 4
- str r0, [r2]
- cmp r0, 0
- bne _08018720
- movs r0, 0x1
- str r0, [r2]
- b _08018720
- .align 2, 0
-_080186D4: .4byte gBattleMons
-_080186D8: .4byte 0xffffe000
-_080186DC: .4byte gBattleScripting
-_080186E0: .4byte gBattleStruct
-_080186E4: .4byte gBattleTextBuff1
-_080186E8: .4byte gUnknown_2023D74
-_080186EC: .4byte gUnknown_81D9124
-_080186F0: .4byte gBattleMoveDamage
-_080186F4:
- ldr r2, _08018724 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r2]
- movs r0, 0x2
- strb r0, [r2, 0x1]
- ldrb r1, [r6]
- ldr r0, _08018728 @ =gBattleStruct
- ldr r3, [r0]
- lsls r1, 1
- adds r1, r3
- ldrb r0, [r1, 0x4]
- strb r0, [r2, 0x2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r3
- ldrb r0, [r0, 0x5]
- strb r0, [r2, 0x3]
- movs r0, 0xFF
- strb r0, [r2, 0x4]
- ldr r1, _0801872C @ =gUnknown_2023D74
- ldr r0, _08018730 @ =gUnknown_81D9136
- str r0, [r1]
-_08018720:
- ldr r0, [r1]
- b _08018C04
- .align 2, 0
-_08018724: .4byte gBattleTextBuff1
-_08018728: .4byte gBattleStruct
-_0801872C: .4byte gUnknown_2023D74
-_08018730: .4byte gUnknown_81D9136
-_08018734:
- movs r0, 0x8
- negs r0, r0
- ands r3, r0
- str r3, [r2]
- ldrb r0, [r6]
- mov r2, r8
- muls r2, r0
- mov r0, r10
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _08018784 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- ldr r1, _08018788 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- ldr r0, _0801878C @ =gUnknown_81D904A
- bl BattleScriptExecute
- ldr r4, _08018790 @ =gActiveBattler
- ldrb r0, [r6]
- strb r0, [r4]
- ldrb r0, [r4]
- mov r3, r8
- muls r3, r0
- adds r0, r3, 0
- add r0, r9
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _080187FC
- .align 2, 0
-_08018784: .4byte 0xf7ffffff
-_08018788: .4byte gUnknown_2023E82
-_0801878C: .4byte gUnknown_81D904A
-_08018790: .4byte gActiveBattler
-_08018794:
- ldr r2, _08018810 @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- muls r0, r1
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0x70
- ands r1, r0
- adds r7, r2, 0
- cmp r1, 0
- beq _0801889E
- movs r0, 0
- strb r0, [r4]
- mov r5, r8
- ldrb r0, [r5]
- cmp r0, 0
- beq _080187FC
- mov r10, r7
- adds r6, r4, 0
- movs r1, 0x58
- mov r8, r1
- movs r3, 0x4C
- adds r3, r7
- mov r9, r3
- str r0, [sp, 0x4]
- movs r5, 0x7
- mov r12, r5
-_080187CE:
- ldrb r4, [r6]
- mov r1, r8
- muls r1, r4
- mov r0, r9
- adds r2, r1, r0
- ldr r3, [r2]
- adds r0, r3, 0
- mov r5, r12
- ands r0, r5
- cmp r0, 0
- beq _080187EE
- adds r0, r1, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2B
- bne _08018734
-_080187EE:
- adds r0, r4, 0x1
- strb r0, [r6]
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp, 0x4]
- cmp r0, r1
- bcc _080187CE
-_080187FC:
- ldr r2, _08018814 @ =sBattler_AI
- ldr r1, _08018818 @ =gBattlersCount
- ldrb r0, [r2]
- ldrb r1, [r1]
- cmp r0, r1
- beq _0801881C
- movs r3, 0x2
- mov r9, r3
- b _08018C4C
- .align 2, 0
-_08018810: .4byte gBattleMons
-_08018814: .4byte sBattler_AI
-_08018818: .4byte gBattlersCount
-_0801881C:
- ldr r5, _08018854 @ =gActiveBattler
- ldrb r0, [r5]
- strb r0, [r2]
- ldr r2, _08018858 @ =gBattleMons
- ldrb r0, [r5]
- movs r7, 0x58
- adds r1, r0, 0
- muls r1, r7
- adds r6, r2, 0
- adds r6, 0x50
- adds r1, r6
- ldr r0, [r1]
- subs r0, 0x10
- str r0, [r1]
- ldrb r0, [r5]
- bl WasUnableToUseMove
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _08018860
- ldrb r0, [r5]
- bl CancelMultiTurnMoves
- ldr r1, _0801885C @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08018894
- .align 2, 0
-_08018854: .4byte gActiveBattler
-_08018858: .4byte gBattleMons
-_0801885C: .4byte gUnknown_2023E82
-_08018860:
- ldrb r3, [r5]
- adds r0, r3, 0
- muls r0, r7
- adds r2, r0, r6
- ldr r0, [r2]
- movs r1, 0x70
- ands r0, r1
- cmp r0, 0
- beq _08018888
- ldr r0, _08018884 @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 5
- orrs r0, r1
- str r0, [r2]
- b _08018894
- .align 2, 0
-_08018884: .4byte gUnknown_2023E82
-_08018888:
- ldr r1, _080188A8 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- adds r0, r3, 0
- bl CancelMultiTurnMoves
-_08018894:
- ldr r0, _080188AC @ =gUnknown_81D90BC
- bl BattleScriptExecute
- movs r5, 0x1
- mov r9, r5
-_0801889E:
- mov r7, r9
- cmp r7, 0x2
- bne _080188A6
- b _08018C46
-_080188A6:
- b _08018C12
- .align 2, 0
-_080188A8: .4byte gUnknown_2023E82
-_080188AC: .4byte gUnknown_81D90BC
-_080188B0:
- ldr r1, _080188E8 @ =gBattleMons
- ldrb r0, [r6]
- movs r7, 0x58
- muls r0, r7
- adds r5, r1, 0
- adds r5, 0x50
- adds r2, r0, r5
- ldr r1, [r2]
- movs r4, 0xC0
- lsls r4, 4
- adds r0, r1, 0
- ands r0, r4
- cmp r0, 0
- bne _080188CE
- b _08018C12
-_080188CE:
- ldr r3, _080188EC @ =0xfffffc00
- adds r0, r1, r3
- str r0, [r2]
- ldrb r0, [r6]
- bl WasUnableToUseMove
- lsls r0, 24
- cmp r0, 0
- beq _080188F0
- ldrb r0, [r6]
- bl CancelMultiTurnMoves
- b _08018C12
- .align 2, 0
-_080188E8: .4byte gBattleMons
-_080188EC: .4byte 0xfffffc00
-_080188F0:
- ldrb r0, [r6]
- muls r0, r7
- adds r2, r0, r5
- ldr r1, [r2]
- adds r0, r1, 0
- ands r0, r4
- cmp r0, 0
- beq _08018902
- b _08018C12
-_08018902:
- movs r0, 0x80
- lsls r0, 5
- ands r0, r1
- cmp r0, 0
- bne _0801890E
- b _08018C12
-_0801890E:
- ldr r0, _0801894C @ =0xffffefff
- ands r1, r0
- str r1, [r2]
- ldrb r0, [r6]
- muls r0, r7
- adds r0, r5
- ldr r0, [r0]
- movs r4, 0x7
- ands r0, r4
- cmp r0, 0
- beq _08018926
- b _08018C12
-_08018926:
- ldr r1, _08018950 @ =gUnknown_2023E82
- movs r0, 0x47
- strb r0, [r1, 0x3]
- movs r0, 0x1
- movs r1, 0
- bl sub_801FF20
- ldrb r0, [r6]
- muls r0, r7
- adds r0, r5
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- bne _08018944
- b _08018C08
-_08018944:
- ldr r0, _08018954 @ =gUnknown_81D90C5
- bl BattleScriptExecute
- b _08018C08
- .align 2, 0
-_0801894C: .4byte 0xffffefff
-_08018950: .4byte gUnknown_2023E82
-_08018954: .4byte gUnknown_81D90C5
-_08018958:
- ldr r0, _080189D8 @ =gDisableStructs
- ldrb r3, [r6]
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r5, r1, r0
- ldrb r1, [r5, 0xB]
- lsls r1, 28
- adds r7, r0, 0
- cmp r1, 0
- bne _08018970
- b _08018C12
-_08018970:
- movs r4, 0
- ldr r2, _080189DC @ =gBattleMons
- movs r0, 0x58
- adds r1, r3, 0
- muls r1, r0
- adds r2, 0xC
- adds r1, r2
- ldrh r0, [r5, 0x4]
- ldrh r1, [r1]
- cmp r0, r1
- beq _080189AE
- mov r12, r7
- mov r8, r2
- adds r5, r6, 0
- movs r3, 0x58
-_0801898E:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _080189AE
- ldrb r2, [r5]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- add r1, r12
- lsls r0, r4, 1
- muls r2, r3
- adds r0, r2
- add r0, r8
- ldrh r1, [r1, 0x4]
- ldrh r0, [r0]
- cmp r1, r0
- bne _0801898E
-_080189AE:
- cmp r4, 0x4
- bne _080189E0
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- movs r1, 0
- strh r1, [r0, 0x4]
- ldrb r0, [r6]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r7
- ldrb r2, [r1, 0xB]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0xB]
- b _08018C12
- .align 2, 0
-_080189D8: .4byte gDisableStructs
-_080189DC: .4byte gBattleMons
-_080189E0:
- ldrb r0, [r6]
- lsls r2, r0, 3
- subs r2, r0
- lsls r2, 2
- adds r2, r7
- ldrb r3, [r2, 0xB]
- lsls r1, r3, 28
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r0, 0x10
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0xB]
- adds r2, r1, 0
- cmp r2, 0
- beq _08018A08
- b _08018C12
-_08018A08:
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- strh r2, [r0, 0x4]
- ldr r0, _08018A18 @ =gUnknown_81D8C5E
- b _08018C04
- .align 2, 0
-_08018A18: .4byte gUnknown_81D8C5E
-_08018A1C:
- ldr r3, _08018A68 @ =gDisableStructs
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r2, r0, r3
- ldrb r5, [r2, 0xE]
- lsls r4, r5, 28
- cmp r4, 0
- bne _08018A32
- b _08018C12
-_08018A32:
- ldr r7, _08018A6C @ =gBattleMons
- mov r8, r7
- ldrb r0, [r2, 0xC]
- lsls r0, 1
- movs r7, 0x58
- muls r1, r7
- adds r0, r1
- mov r1, r8
- adds r1, 0xC
- adds r0, r1
- ldrh r0, [r0]
- ldrh r1, [r2, 0x6]
- cmp r0, r1
- beq _08018A70
- movs r0, 0
- strh r0, [r2, 0x6]
- ldrb r0, [r6]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r2, [r1, 0xE]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0xE]
- b _08018C12
- .align 2, 0
-_08018A68: .4byte gDisableStructs
-_08018A6C: .4byte gBattleMons
-_08018A70:
- lsrs r1, r4, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r4, 0x10
- negs r4, r4
- adds r0, r4, 0
- ands r0, r5
- orrs r0, r1
- strb r0, [r2, 0xE]
- cmp r1, 0
- beq _08018AA6
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r3
- muls r1, r7
- ldrb r0, [r0, 0xC]
- adds r1, r0
- mov r0, r8
- adds r0, 0x24
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _08018AA6
- b _08018C12
-_08018AA6:
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0
- strh r1, [r0, 0x6]
- ldrb r0, [r6]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r2, [r1, 0xE]
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0xE]
- ldr r0, _08018ACC @ =gUnknown_81D8C65
- b _08018C04
- .align 2, 0
-_08018ACC: .4byte gUnknown_81D8C65
-_08018AD0:
- ldr r0, _08018AEC @ =gStatuses3
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x18
- ands r0, r2
- cmp r0, 0
- beq _08018AE8
- adds r0, r2, 0
- subs r0, 0x8
- str r0, [r1]
-_08018AE8:
- ldr r1, [r7]
- b _08018C16
- .align 2, 0
-_08018AEC: .4byte gStatuses3
-_08018AF0:
- ldr r2, _08018B30 @ =gDisableStructs
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r3, r0, r2
- ldrb r2, [r3, 0x12]
- lsls r1, r2, 28
- cmp r1, 0
- beq _08018B2A
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x12]
- cmp r1, 0
- bne _08018B2A
- ldr r0, _08018B34 @ =gStatuses3
- ldrb r2, [r6]
- lsls r2, 2
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _08018B38 @ =0xfffffdff
- ands r0, r1
- str r0, [r2]
-_08018B2A:
- ldr r1, [r7]
- b _08018C16
- .align 2, 0
-_08018B30: .4byte gDisableStructs
-_08018B34: .4byte gStatuses3
-_08018B38: .4byte 0xfffffdff
-_08018B3C:
- ldr r2, _08018B68 @ =gDisableStructs
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r3, r0, r2
- ldrb r2, [r3, 0x13]
- lsls r1, r2, 28
- cmp r1, 0
- beq _08018B62
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x13]
-_08018B62:
- ldr r1, [r7]
- b _08018C16
- .align 2, 0
-_08018B68: .4byte gDisableStructs
-_08018B6C:
- ldr r4, _08018C20 @ =gStatuses3
- ldrb r0, [r6]
- lsls r0, 2
- adds r2, r0, r4
- ldr r1, [r2]
- movs r3, 0xC0
- lsls r3, 5
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _08018C12
- ldr r5, _08018C24 @ =0xfffff800
- adds r0, r1, r5
- str r0, [r2]
- ldrb r2, [r6]
- lsls r0, r2, 2
- adds r0, r4
- ldr r0, [r0]
- ands r0, r3
- cmp r0, 0
- bne _08018C12
- ldr r3, _08018C28 @ =gBattleMons
- movs r5, 0x58
- adds r1, r2, 0
- muls r1, r5
- adds r4, r3, 0
- adds r4, 0x4C
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _08018C12
- adds r0, r1, r3
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x48
- beq _08018C12
- cmp r0, 0xF
- beq _08018C12
- adds r0, r2, 0
- bl UproarWakeUpCheck
- lsls r0, 24
- cmp r0, 0
- bne _08018C12
- ldrb r0, [r6]
- bl CancelMultiTurnMoves
- bl Random
- ldrb r1, [r6]
- adds r2, r1, 0
- muls r2, r5
- adds r2, r4
- movs r1, 0x3
- ands r1, r0
- adds r1, 0x2
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r6]
- bl MarkBufferBankForExecution
- ldr r1, _08018C2C @ =gUnknown_2023D6E
- ldrb r0, [r6]
- strb r0, [r1]
- ldr r0, _08018C30 @ =gUnknown_81D91C7
-_08018C04:
- bl BattleScriptExecute
-_08018C08:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08018C12:
- ldr r0, _08018C34 @ =gBattleStruct
- ldr r1, [r0]
-_08018C16:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08018C46
- .align 2, 0
-_08018C20: .4byte gStatuses3
-_08018C24: .4byte 0xfffff800
-_08018C28: .4byte gBattleMons
-_08018C2C: .4byte gUnknown_2023D6E
-_08018C30: .4byte gUnknown_81D91C7
-_08018C34: .4byte gBattleStruct
-_08018C38:
- ldr r1, [r7]
- movs r0, 0
- strb r0, [r1]
- ldr r1, [r7]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
-_08018C46:
- mov r7, r9
- cmp r7, 0
- beq _08018C50
-_08018C4C:
- mov r0, r9
- b _08018C78
-_08018C50:
- ldr r5, _08018C88 @ =gBattleStruct
- ldr r2, [r5]
- ldr r0, _08018C8C @ =gBattlersCount
- ldrb r1, [r2, 0x1]
- adds r7, r5, 0
- mov r8, r0
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08018C6C
-_08018C62:
- ldrb r0, [r2]
- cmp r0, 0x13
- bhi _08018C6C
- bl _0801829C
-_08018C6C:
- ldr r0, _08018C90 @ =gUnknown_2023DD0
- ldr r1, [r0]
- ldr r2, _08018C94 @ =0xfeffffdf
- ands r1, r2
- str r1, [r0]
- movs r0, 0
-_08018C78:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08018C88: .4byte gBattleStruct
-_08018C8C: .4byte gBattlersCount
-_08018C90: .4byte gUnknown_2023DD0
-_08018C94: .4byte 0xfeffffdf
- thumb_func_end TurnBasedEffects
-
- thumb_func_start sub_8018C98
-sub_8018C98: @ 8018C98
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, _08018CC8 @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _08018CCC @ =0x01000020
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08018CD0 @ =gBattleStruct
- ldr r3, [r1]
- movs r4, 0xC0
- lsls r4, 1
- adds r0, r3, r4
- ldrb r0, [r0]
- adds r7, r1, 0
- cmp r0, 0
- beq _08018CD4
- cmp r0, 0x1
- bne _08018CC4
- b _08018E2C
-_08018CC4:
- b _08018F68
- .align 2, 0
-_08018CC8: .4byte gUnknown_2023DD0
-_08018CCC: .4byte 0x01000020
-_08018CD0: .4byte gBattleStruct
-_08018CD4:
- ldr r2, _08018D20 @ =0x00000181
- adds r0, r3, r2
- ldr r1, _08018D24 @ =gBattlersCount
- ldrb r0, [r0]
- mov r8, r1
- ldrb r6, [r1]
- cmp r0, r6
- bcc _08018CE6
- b _08018E16
-_08018CE6:
- ldr r4, _08018D28 @ =gActiveBattler
- ldr r5, _08018D2C @ =gBattleTextBuff1
- ldr r6, _08018D30 @ =gUnknown_2023F20
- movs r0, 0x8
- adds r0, r6
- mov r10, r0
- movs r1, 0x18
- adds r1, r6
- mov r12, r1
- ldr r3, _08018D34 @ =gBattlerTarget
- mov r9, r3
-_08018CFC:
- ldr r0, [r7]
- adds r3, r0, r2
- ldrb r0, [r3]
- strb r0, [r4]
- ldr r0, _08018D38 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08018D3C @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08018D40
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- b _08018E04
- .align 2, 0
-_08018D20: .4byte 0x00000181
-_08018D24: .4byte gBattlersCount
-_08018D28: .4byte gActiveBattler
-_08018D2C: .4byte gBattleTextBuff1
-_08018D30: .4byte gUnknown_2023F20
-_08018D34: .4byte gBattlerTarget
-_08018D38: .4byte gAbsentBattlerFlags
-_08018D3C: .4byte gBitTable
-_08018D40:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- ldr r1, _08018D80 @ =gUnknown_2023F20
- ldrb r0, [r4]
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- beq _08018E04
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- bne _08018E04
- ldr r1, _08018D84 @ =gBattleMons
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08018E04
- lsls r0, r2, 1
- add r0, r12
- ldrh r0, [r0]
- cmp r0, 0xF8
- bne _08018D8C
- ldr r0, _08018D88 @ =gUnknown_2023E82
- strb r3, [r0, 0x5]
- b _08018D92
- .align 2, 0
-_08018D80: .4byte gUnknown_2023F20
-_08018D84: .4byte gBattleMons
-_08018D88: .4byte gUnknown_2023E82
-_08018D8C:
- ldr r1, _08018DEC @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_08018D92:
- movs r0, 0xFD
- strb r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0x1]
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r12
- ldrh r0, [r0]
- strb r0, [r5, 0x2]
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r12
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r5, 0x3]
- movs r0, 0xFF
- strb r0, [r5, 0x4]
- ldrb r0, [r4]
- mov r1, r9
- strb r0, [r1]
- ldr r1, _08018DF0 @ =sBattler_AI
- adds r0, r6, 0x4
- ldrb r2, [r4]
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r1, _08018DF4 @ =gBattleMoveDamage
- ldrb r0, [r4]
- lsls r0, 2
- add r0, r10
- ldr r0, [r0]
- str r0, [r1]
- ldr r2, _08018DF8 @ =gUnknown_2023ECC
- mov r3, r9
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x4
- adds r0, r2
- ldr r1, _08018DFC @ =0x0000ffff
- str r1, [r0]
- ldr r0, _08018E00 @ =gUnknown_81D8E12
- b _08018F44
- .align 2, 0
-_08018DEC: .4byte gUnknown_2023E82
-_08018DF0: .4byte sBattler_AI
-_08018DF4: .4byte gBattleMoveDamage
-_08018DF8: .4byte gUnknown_2023ECC
-_08018DFC: .4byte 0x0000ffff
-_08018E00: .4byte gUnknown_81D8E12
-_08018E04:
- ldr r0, [r7]
- ldr r2, _08018E7C @ =0x00000181
- adds r0, r2
- ldrb r0, [r0]
- mov r1, r8
- ldrb r1, [r1]
- cmp r0, r1
- bcs _08018E16
- b _08018CFC
-_08018E16:
- ldr r0, [r7]
- movs r2, 0xC0
- lsls r2, 1
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, [r7]
- ldr r3, _08018E7C @ =0x00000181
- adds r1, r0, r3
- movs r0, 0
- strb r0, [r1]
-_08018E2C:
- adds r3, r7, 0
- ldr r0, [r3]
- ldr r2, _08018E7C @ =0x00000181
- adds r0, r2
- ldr r1, _08018E80 @ =gBattlersCount
- ldrb r0, [r0]
- mov r8, r1
- ldrb r4, [r1]
- cmp r0, r4
- bcc _08018E42
- b _08018F68
-_08018E42:
- ldr r5, _08018E84 @ =gActiveBattler
- ldr r4, _08018E88 @ =gBattleTextBuff1
- ldr r6, _08018E8C @ =gDisableStructs
- mov r12, r6
- ldr r0, _08018E90 @ =sBattler_AI
- mov r9, r0
-_08018E4E:
- ldr r1, _08018E94 @ =gUnknown_2023BDE
- ldr r0, [r3]
- adds r3, r0, r2
- ldrb r0, [r3]
- adds r0, r1
- ldrb r0, [r0]
- mov r1, r9
- strb r0, [r1]
- strb r0, [r5]
- ldr r0, _08018E98 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08018E9C @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08018EA0
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- b _08018F54
- .align 2, 0
-_08018E7C: .4byte 0x00000181
-_08018E80: .4byte gBattlersCount
-_08018E84: .4byte gActiveBattler
-_08018E88: .4byte gBattleTextBuff1
-_08018E8C: .4byte gDisableStructs
-_08018E90: .4byte sBattler_AI
-_08018E94: .4byte gUnknown_2023BDE
-_08018E98: .4byte gAbsentBattlerFlags
-_08018E9C: .4byte gBitTable
-_08018EA0:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- ldr r6, _08018F14 @ =gStatuses3
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08018F54
- movs r0, 0xFD
- strb r0, [r4]
- movs r0, 0x1
- strb r0, [r4, 0x1]
- strb r0, [r4, 0x2]
- strb r0, [r4, 0x3]
- ldrb r1, [r5]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r0, [r0, 0xF]
- lsls r0, 28
- lsrs r0, 28
- strb r0, [r4, 0x4]
- movs r0, 0xFF
- strb r0, [r4, 0x5]
- ldrb r2, [r5]
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- mov r3, r12
- adds r4, r0, r3
- ldrb r3, [r4, 0xF]
- lsls r1, r3, 28
- cmp r1, 0
- bne _08018F28
- lsls r2, 2
- adds r2, r6
- ldr r0, [r2]
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- ldr r3, _08018F18 @ =gBattleMoveDamage
- ldr r2, _08018F1C @ =gBattleMons
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- str r0, [r3]
- ldr r1, _08018F20 @ =gUnknown_2023D74
- ldr r0, _08018F24 @ =gUnknown_81D8D33
- b _08018F40
- .align 2, 0
-_08018F14: .4byte gStatuses3
-_08018F18: .4byte gBattleMoveDamage
-_08018F1C: .4byte gBattleMons
-_08018F20: .4byte gUnknown_2023D74
-_08018F24: .4byte gUnknown_81D8D33
-_08018F28:
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r6, 0x10
- negs r6, r6
- adds r0, r6, 0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4, 0xF]
- ldr r1, _08018F4C @ =gUnknown_2023D74
- ldr r0, _08018F50 @ =gUnknown_81D8D4E
-_08018F40:
- str r0, [r1]
- ldr r0, [r1]
-_08018F44:
- bl BattleScriptExecute
- movs r0, 0x1
- b _08018F74
- .align 2, 0
-_08018F4C: .4byte gUnknown_2023D74
-_08018F50: .4byte gUnknown_81D8D4E
-_08018F54:
- adds r3, r7, 0
- ldr r0, [r3]
- ldr r2, _08018F84 @ =0x00000181
- adds r0, r2
- ldrb r0, [r0]
- mov r1, r8
- ldrb r1, [r1]
- cmp r0, r1
- bcs _08018F68
- b _08018E4E
-_08018F68:
- ldr r2, _08018F88 @ =gUnknown_2023DD0
- ldr r0, [r2]
- ldr r1, _08018F8C @ =0xfeffffdf
- ands r0, r1
- str r0, [r2]
- movs r0, 0
-_08018F74:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08018F84: .4byte 0x00000181
-_08018F88: .4byte gUnknown_2023DD0
-_08018F8C: .4byte 0xfeffffdf
- thumb_func_end sub_8018C98
-
- thumb_func_start HandleFaintedMonActions
-HandleFaintedMonActions: @ 8018F90
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- ldr r0, _08018FA8 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08018FD8
- b _08019272
- .align 2, 0
-_08018FA8: .4byte gBattleTypeFlags
-_08018FAC:
- ldr r0, _08018FBC @ =gUnknown_81D8694
- bl BattleScriptExecute
- ldr r0, [r5]
- adds r0, 0x4D
- movs r1, 0x2
- b _08018FCC
- .align 2, 0
-_08018FBC: .4byte gUnknown_81D8694
-_08018FC0:
- ldr r0, _08018FD4 @ =gUnknown_81D869D
- bl BattleScriptExecute
- ldr r0, [r5]
- adds r0, 0x4D
- movs r1, 0x5
-_08018FCC:
- strb r1, [r0]
-_08018FCE:
- movs r0, 0x1
- b _08019274
- .align 2, 0
-_08018FD4: .4byte gUnknown_81D869D
-_08018FD8:
- ldr r0, _08018FF4 @ =gBattleStruct
- mov r8, r0
-_08018FDC:
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x4D
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _08018FEA
- b _08019264
-_08018FEA:
- lsls r0, 2
- ldr r1, _08018FF8 @ =_08018FFC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08018FF4: .4byte gBattleStruct
-_08018FF8: .4byte _08018FFC
- .align 2, 0
-_08018FFC:
- .4byte _0801901C
- .4byte _0801906E
- .4byte _08019108
- .4byte _0801914A
- .4byte _0801915E
- .4byte _080191C8
- .4byte _080191FC
- .4byte _08019264
-_0801901C:
- mov r4, r8
- ldr r0, [r4]
- adds r0, 0x4E
- movs r1, 0
- strb r1, [r0]
- ldr r1, [r4]
- adds r1, 0x4D
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r5, 0
- ldr r0, _080190E8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- bge _0801906E
- ldr r6, _080190EC @ =gAbsentBattlerFlags
-_0801903C:
- ldrb r0, [r6]
- ldr r2, _080190F0 @ =gBitTable
- lsls r1, r5, 2
- adds r1, r2
- ldr r4, [r1]
- ands r0, r4
- cmp r0, 0
- beq _08019064
- lsls r0, r5, 24
- lsrs r0, 24
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8019C10
- lsls r0, 24
- cmp r0, 0
- bne _08019064
- ldrb r0, [r6]
- bics r0, r4
- strb r0, [r6]
-_08019064:
- adds r5, 0x1
- ldr r0, _080190E8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801903C
-_0801906E:
- ldr r0, _080190F4 @ =gBattleStruct
- mov r8, r0
- ldr r1, _080190F8 @ =gUnknown_2023D6D
- mov r12, r1
- ldr r2, _080190FC @ =gBattlerTarget
- mov r5, r8
- ldr r7, _08019100 @ =gBattleMons
- ldr r6, _08019104 @ =gBattlerPartyIndexes
-_0801907E:
- ldr r3, [r5]
- adds r1, r3, 0
- adds r1, 0x4E
- ldrb r0, [r1]
- strb r0, [r2]
- mov r4, r12
- strb r0, [r4]
- ldrb r4, [r1]
- movs r0, 0x58
- muls r0, r4
- adds r0, r7
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _080190C6
- adds r0, r3, 0
- adds r0, 0xDF
- ldrb r1, [r0]
- ldr r3, _080190F0 @ =gBitTable
- lsls r0, r4, 1
- adds r0, r6
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080190C6
- ldr r0, _080190EC @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- lsls r0, r4, 2
- adds r0, r3
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080190C6
- b _08018FAC
-_080190C6:
- ldr r0, [r5]
- adds r0, 0x4E
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- ldr r0, _080190E8 @ =gBattlersCount
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801907E
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x4D
- movs r1, 0x3
- strb r1, [r0]
- b _08019264
- .align 2, 0
-_080190E8: .4byte gBattlersCount
-_080190EC: .4byte gAbsentBattlerFlags
-_080190F0: .4byte gBitTable
-_080190F4: .4byte gBattleStruct
-_080190F8: .4byte gUnknown_2023D6D
-_080190FC: .4byte gBattlerTarget
-_08019100: .4byte gBattleMons
-_08019104: .4byte gBattlerPartyIndexes
-_08019108:
- ldr r0, _08019134 @ =gUnknown_2023D6D
- ldrb r0, [r0]
- bl sub_8017434
- ldr r2, _08019138 @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0x4E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r1, _0801913C @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bne _08019140
- ldr r0, [r2]
- adds r0, 0x4D
- movs r1, 0x3
- strb r1, [r0]
- b _08019262
- .align 2, 0
-_08019134: .4byte gUnknown_2023D6D
-_08019138: .4byte gBattleStruct
-_0801913C: .4byte gBattlersCount
-_08019140:
- ldr r0, [r2]
- adds r0, 0x4D
- movs r1, 0x1
- strb r1, [r0]
- b _08019262
-_0801914A:
- mov r4, r8
- ldr r0, [r4]
- adds r0, 0x4E
- movs r1, 0
- strb r1, [r0]
- ldr r1, [r4]
- adds r1, 0x4D
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0801915E:
- ldr r0, _080191AC @ =gUnknown_2023D6D
- mov r12, r0
- ldr r7, _080191B0 @ =gBattlerTarget
- ldr r5, _080191B4 @ =gBattleStruct
- ldr r2, _080191B8 @ =gBattleMons
- ldr r6, _080191BC @ =gBitTable
-_0801916A:
- ldr r0, [r5]
- adds r4, r0, 0
- adds r4, 0x4E
- ldrb r0, [r4]
- strb r0, [r7]
- mov r1, r12
- strb r0, [r1]
- ldrb r3, [r4]
- movs r0, 0x58
- muls r0, r3
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08019198
- ldr r0, _080191C0 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- lsls r0, r3, 2
- adds r0, r6
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _08019198
- b _08018FC0
-_08019198:
- adds r0, r3, 0x1
- strb r0, [r4]
- ldr r1, _080191C4 @ =gBattlersCount
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bne _0801916A
- b _080191E0
- .align 2, 0
-_080191AC: .4byte gUnknown_2023D6D
-_080191B0: .4byte gBattlerTarget
-_080191B4: .4byte gBattleStruct
-_080191B8: .4byte gBattleMons
-_080191BC: .4byte gBitTable
-_080191C0: .4byte gAbsentBattlerFlags
-_080191C4: .4byte gBattlersCount
-_080191C8:
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x4E
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- ldr r0, _080191EC @ =gBattlersCount
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r0]
- cmp r1, r0
- bne _080191F0
-_080191E0:
- mov r4, r8
- ldr r0, [r4]
- adds r0, 0x4D
- movs r1, 0x6
- strb r1, [r0]
- b _08019264
- .align 2, 0
-_080191EC: .4byte gBattlersCount
-_080191F0:
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x4D
- movs r1, 0x4
- strb r1, [r0]
- b _08019264
-_080191FC:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x9
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08019216
- b _08018FCE
-_08019216:
- str r0, [sp]
- movs r0, 0xB
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0801922C
- b _08018FCE
-_0801922C:
- movs r0, 0x1
- movs r1, 0
- movs r2, 0x1
- bl sub_801BC68
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08019240
- b _08018FCE
-_08019240:
- str r0, [sp]
- movs r0, 0x6
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08019256
- b _08018FCE
-_08019256:
- ldr r2, _08019280 @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0x4D
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08019262:
- mov r8, r2
-_08019264:
- mov r4, r8
- ldr r0, [r4]
- adds r0, 0x4D
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _08019272
- b _08018FDC
-_08019272:
- movs r0, 0
-_08019274:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08019280: .4byte gBattleStruct
- thumb_func_end HandleFaintedMonActions
-
- thumb_func_start TryClearRageStatuses
-TryClearRageStatuses: @ 8019284
- push {r4-r6,lr}
- movs r3, 0
- ldr r0, _080192C4 @ =gBattlersCount
- adds r5, r0, 0
- ldrb r0, [r5]
- cmp r3, r0
- bge _080192BC
- ldr r4, _080192C8 @ =gUnknown_2023DC4
- movs r6, 0x80
- lsls r6, 16
- ldr r2, _080192CC @ =gUnknown_2023C34
-_0801929A:
- ldr r1, [r2]
- adds r0, r1, 0
- ands r0, r6
- cmp r0, 0
- beq _080192B0
- ldrh r0, [r4]
- cmp r0, 0x63
- beq _080192B0
- ldr r0, _080192D0 @ =0xff7fffff
- ands r1, r0
- str r1, [r2]
-_080192B0:
- adds r4, 0x2
- adds r2, 0x58
- adds r3, 0x1
- ldrb r0, [r5]
- cmp r3, r0
- blt _0801929A
-_080192BC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080192C4: .4byte gBattlersCount
-_080192C8: .4byte gUnknown_2023DC4
-_080192CC: .4byte gUnknown_2023C34
-_080192D0: .4byte 0xff7fffff
- thumb_func_end TryClearRageStatuses
-
- thumb_func_start sub_80192D4
-sub_80192D4: @ 80192D4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- movs r0, 0
- mov r9, r0
- ldr r1, _080192F0 @ =gUnknown_2023FC8
- mov r10, r1
- ldr r2, _080192F4 @ =gBattleStruct
- mov r8, r2
- b _08019302
- .align 2, 0
-_080192F0: .4byte gUnknown_2023FC8
-_080192F4: .4byte gBattleStruct
-_080192F8:
- mov r4, r9
- cmp r4, 0
- beq _08019302
- bl _08019BA8
-_08019302:
- mov r7, r8
- ldr r0, [r7]
- adds r0, 0xB7
- ldrb r0, [r0]
- cmp r0, 0xF
- bls _08019312
- bl _08019B98
-_08019312:
- lsls r0, 2
- ldr r1, _0801931C @ =_08019320
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801931C: .4byte _08019320
- .align 2, 0
-_08019320:
- .4byte _08019360
- .4byte _080193A4
- .4byte _080194E0
- .4byte _08019598
- .4byte _0801960C
- .4byte _08019678
- .4byte _080196E0
- .4byte _08019754
- .4byte _080197B8
- .4byte _08019814
- .4byte _080198F8
- .4byte _08019974
- .4byte _080199C8
- .4byte _08019A60
- .4byte _08019B40
- .4byte _08019B98
-_08019360:
- ldr r1, _08019390 @ =gBattleMons
- ldr r3, _08019394 @ =sBattler_AI
- ldrb r2, [r3]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- ldr r1, _08019398 @ =0xfdffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801939C @ =gStatuses3
- ldrb r2, [r3]
- lsls r2, 2
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _080193A0 @ =0xffffbfff
- ands r0, r1
- str r0, [r2]
- mov r0, r8
- ldr r1, [r0]
- bl _08019B90
- .align 2, 0
-_08019390: .4byte gBattleMons
-_08019394: .4byte sBattler_AI
-_08019398: .4byte 0xfdffffff
-_0801939C: .4byte gStatuses3
-_080193A0: .4byte 0xffffbfff
-_080193A4:
- ldr r7, _0801940C @ =gBattleMons
- ldr r4, _08019410 @ =sBattler_AI
- ldrb r1, [r4]
- movs r5, 0x58
- adds r0, r1, 0
- muls r0, r5
- adds r6, r7, 0
- adds r6, 0x4C
- adds r0, r6
- ldr r0, [r0]
- movs r2, 0x7
- mov r8, r2
- ands r0, r2
- cmp r0, 0
- bne _080193C4
- b _08019946
-_080193C4:
- adds r0, r1, 0
- bl UproarWakeUpCheck
- lsls r0, 24
- cmp r0, 0
- beq _08019424
- ldrb r0, [r4]
- adds r2, r0, 0
- muls r2, r5
- adds r2, r6
- ldr r0, [r2]
- movs r1, 0x8
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- ldrb r0, [r4]
- adds r2, r0, 0
- muls r2, r5
- adds r0, r7, 0
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _08019414 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _08019418 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
- ldr r1, _0801941C @ =gUnknown_2023D74
- ldr r0, _08019420 @ =gUnknown_81D9036
- str r0, [r1]
- movs r4, 0x2
- mov r9, r4
- b _08019946
- .align 2, 0
-_0801940C: .4byte gBattleMons
-_08019410: .4byte sBattler_AI
-_08019414: .4byte 0xf7ffffff
-_08019418: .4byte gUnknown_2023E82
-_0801941C: .4byte gUnknown_2023D74
-_08019420: .4byte gUnknown_81D9036
-_08019424:
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r5
- adds r0, r1, r7
- adds r0, 0x20
- ldrb r0, [r0]
- movs r3, 0x1
- cmp r0, 0x30
- bne _08019438
- movs r3, 0x2
-_08019438:
- adds r2, r1, r6
- ldr r1, [r2]
- adds r0, r1, 0
- mov r7, r8
- ands r0, r7
- cmp r0, r3
- bcs _08019450
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- b _08019454
-_08019450:
- subs r0, r1, r3
- str r0, [r2]
-_08019454:
- ldr r2, _08019498 @ =gBattleMons
- ldr r0, _0801949C @ =sBattler_AI
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r4, [r0]
- movs r0, 0x7
- ands r4, r0
- cmp r4, 0
- beq _080194B0
- ldr r0, _080194A0 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xAD
- bne _08019478
- b _08019946
-_08019478:
- cmp r0, 0xD6
- bne _0801947E
- b _08019946
-_0801947E:
- ldr r1, _080194A4 @ =gUnknown_2023D74
- ldr r0, _080194A8 @ =gUnknown_81D9029
- str r0, [r1]
- ldr r2, _080194AC @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r0, 0x2
- mov r9, r0
- b _08019946
- .align 2, 0
-_08019498: .4byte gBattleMons
-_0801949C: .4byte sBattler_AI
-_080194A0: .4byte gCurrentMove
-_080194A4: .4byte gUnknown_2023D74
-_080194A8: .4byte gUnknown_81D9029
-_080194AC: .4byte gUnknown_2023DD0
-_080194B0:
- adds r2, 0x50
- adds r2, r1, r2
- ldr r0, [r2]
- ldr r1, _080194D0 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r0, _080194D4 @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
- ldr r1, _080194D8 @ =gUnknown_2023D74
- ldr r0, _080194DC @ =gUnknown_81D9036
- str r0, [r1]
- movs r1, 0x2
- mov r9, r1
- b _08019946
- .align 2, 0
-_080194D0: .4byte 0xf7ffffff
-_080194D4: .4byte gUnknown_2023E82
-_080194D8: .4byte gUnknown_2023D74
-_080194DC: .4byte gUnknown_81D9036
-_080194E0:
- ldr r1, _0801953C @ =gBattleMons
- ldr r7, _08019540 @ =sBattler_AI
- ldrb r0, [r7]
- movs r6, 0x58
- muls r0, r6
- adds r5, r1, 0
- adds r5, 0x4C
- adds r0, r5
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08019580
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _08019558
- ldr r2, _08019544 @ =gBattleMoves
- ldr r0, _08019548 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7D
- bne _08019526
- b _08019946
-_08019526:
- ldr r1, _0801954C @ =gUnknown_2023D74
- ldr r0, _08019550 @ =gUnknown_81D9080
- str r0, [r1]
- ldr r2, _08019554 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 2
- orrs r0, r1
- str r0, [r2]
- b _08019578
- .align 2, 0
-_0801953C: .4byte gBattleMons
-_08019540: .4byte sBattler_AI
-_08019544: .4byte gBattleMoves
-_08019548: .4byte gCurrentMove
-_0801954C: .4byte gUnknown_2023D74
-_08019550: .4byte gUnknown_81D9080
-_08019554: .4byte gUnknown_2023DD0
-_08019558:
- ldrb r0, [r7]
- adds r2, r0, 0
- muls r2, r6
- adds r2, r5
- ldr r0, [r2]
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _08019588 @ =gUnknown_2023D74
- ldr r0, _0801958C @ =gUnknown_81D908D
- str r0, [r1]
- ldr r0, _08019590 @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
-_08019578:
- movs r2, 0x2
- mov r9, r2
- ldr r4, _08019594 @ =gBattleStruct
- mov r8, r4
-_08019580:
- mov r7, r8
- ldr r1, [r7]
- b _08019B90
- .align 2, 0
-_08019588: .4byte gUnknown_2023D74
-_0801958C: .4byte gUnknown_81D908D
-_08019590: .4byte gUnknown_2023E82
-_08019594: .4byte gBattleStruct
-_08019598:
- ldr r1, _080195EC @ =gBattleMons
- ldr r0, _080195F0 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x36
- beq _080195AE
- b _08019946
-_080195AE:
- ldr r0, _080195F4 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x18]
- lsls r0, 31
- cmp r0, 0
- bne _080195C2
- b _08019946
-_080195C2:
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- ldr r2, _080195F8 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- ldr r1, _080195FC @ =gUnknown_2023E82
- movs r0, 0
- strb r0, [r1, 0x5]
- ldr r1, _08019600 @ =gUnknown_2023D74
- ldr r0, _08019604 @ =gUnknown_81D94F2
- str r0, [r1]
- ldr r2, _08019608 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- b _080197F4
- .align 2, 0
-_080195EC: .4byte gBattleMons
-_080195F0: .4byte sBattler_AI
-_080195F4: .4byte gDisableStructs
-_080195F8: .4byte gUnknown_2023DD0
-_080195FC: .4byte gUnknown_2023E82
-_08019600: .4byte gUnknown_2023D74
-_08019604: .4byte gUnknown_81D94F2
-_08019608: .4byte gMoveResultFlags
-_0801960C:
- ldr r1, _0801965C @ =gBattleMons
- ldr r3, _08019660 @ =sBattler_AI
- ldrb r2, [r3]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 15
- ands r0, r1
- cmp r0, 0
- bne _08019628
- b _08019946
-_08019628:
- ldr r0, _08019664 @ =0xffbfffff
- ands r1, r0
- str r1, [r2]
- ldr r2, _08019668 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x19]
- ldrb r0, [r3]
- bl CancelMultiTurnMoves
- ldr r1, _0801966C @ =gUnknown_2023D74
- ldr r0, _08019670 @ =gUnknown_81D7342
- str r0, [r1]
- ldr r2, _08019674 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r1, 0x1
- mov r9, r1
- b _08019946
- .align 2, 0
-_0801965C: .4byte gBattleMons
-_08019660: .4byte sBattler_AI
-_08019664: .4byte 0xffbfffff
-_08019668: .4byte gDisableStructs
-_0801966C: .4byte gUnknown_2023D74
-_08019670: .4byte gUnknown_81D7342
-_08019674: .4byte gUnknown_2023DD0
-_08019678:
- ldr r1, _080196C8 @ =gBattleMons
- ldr r3, _080196CC @ =sBattler_AI
- ldrb r2, [r3]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08019692
- b _08019946
-_08019692:
- movs r0, 0x9
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- ldr r0, _080196D0 @ =gUnknown_2023E8C
- ldrb r2, [r3]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x2]
- ldrb r0, [r3]
- bl CancelMultiTurnMoves
- ldr r1, _080196D4 @ =gUnknown_2023D74
- ldr r0, _080196D8 @ =gUnknown_81D90B1
- str r0, [r1]
- ldr r2, _080196DC @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r2, 0x1
- mov r9, r2
- b _08019946
- .align 2, 0
-_080196C8: .4byte gBattleMons
-_080196CC: .4byte sBattler_AI
-_080196D0: .4byte gUnknown_2023E8C
-_080196D4: .4byte gUnknown_2023D74
-_080196D8: .4byte gUnknown_81D90B1
-_080196DC: .4byte gUnknown_2023DD0
-_080196E0:
- ldr r0, _08019734 @ =gDisableStructs
- ldr r3, _08019738 @ =sBattler_AI
- ldrb r2, [r3]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldr r0, _0801973C @ =gCurrentMove
- ldrh r1, [r1, 0x4]
- ldrh r0, [r0]
- cmp r1, r0
- beq _080196FA
- b _08019946
-_080196FA:
- cmp r1, 0
- bne _08019700
- b _08019946
-_08019700:
- ldr r0, _08019740 @ =gUnknown_2023E8C
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x1]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldr r1, _08019744 @ =gBattleScripting
- ldrb r0, [r3]
- strb r0, [r1, 0x17]
- ldrb r0, [r3]
- bl CancelMultiTurnMoves
- ldr r1, _08019748 @ =gUnknown_2023D74
- ldr r0, _0801974C @ =gUnknown_81D8C4F
- str r0, [r1]
- ldr r2, _08019750 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r4, 0x1
- mov r9, r4
- b _08019946
- .align 2, 0
-_08019734: .4byte gDisableStructs
-_08019738: .4byte sBattler_AI
-_0801973C: .4byte gCurrentMove
-_08019740: .4byte gUnknown_2023E8C
-_08019744: .4byte gBattleScripting
-_08019748: .4byte gUnknown_2023D74
-_0801974C: .4byte gUnknown_81D8C4F
-_08019750: .4byte gUnknown_2023DD0
-_08019754:
- ldr r0, _0801979C @ =gDisableStructs
- ldr r4, _080197A0 @ =sBattler_AI
- ldrb r3, [r4]
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x13]
- lsls r0, 28
- cmp r0, 0
- bne _0801976C
- b _08019946
-_0801976C:
- ldr r2, _080197A4 @ =gBattleMoves
- ldr r0, _080197A8 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _08019782
- b _08019946
-_08019782:
- ldr r0, _080197AC @ =gUnknown_2023E8C
- lsls r2, r3, 4
- adds r2, r0
- ldrb r0, [r2, 0x2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x2]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
- ldr r1, _080197B0 @ =gUnknown_2023D74
- ldr r0, _080197B4 @ =gUnknown_81D8ECA
- b _08019934
- .align 2, 0
-_0801979C: .4byte gDisableStructs
-_080197A0: .4byte sBattler_AI
-_080197A4: .4byte gBattleMoves
-_080197A8: .4byte gCurrentMove
-_080197AC: .4byte gUnknown_2023E8C
-_080197B0: .4byte gUnknown_2023D74
-_080197B4: .4byte gUnknown_81D8ECA
-_080197B8:
- ldr r4, _080197FC @ =sBattler_AI
- ldrb r0, [r4]
- ldr r1, _08019800 @ =gCurrentMove
- ldrh r1, [r1]
- bl GetImprisonedMovesCount
- lsls r0, 24
- cmp r0, 0
- bne _080197CC
- b _08019946
-_080197CC:
- ldr r0, _08019804 @ =gUnknown_2023E8C
- ldrb r2, [r4]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
- ldr r1, _08019808 @ =gUnknown_2023D74
- ldr r0, _0801980C @ =gUnknown_81D8F94
- str r0, [r1]
- ldr r2, _08019810 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
-_080197F4:
- movs r0, 0x1
- mov r9, r0
- b _08019946
- .align 2, 0
-_080197FC: .4byte sBattler_AI
-_08019800: .4byte gCurrentMove
-_08019804: .4byte gUnknown_2023E8C
-_08019808: .4byte gUnknown_2023D74
-_0801980C: .4byte gUnknown_81D8F94
-_08019810: .4byte gUnknown_2023DD0
-_08019814:
- ldr r7, _0801985C @ =gBattleMons
- ldr r5, _08019860 @ =sBattler_AI
- ldrb r0, [r5]
- movs r6, 0x58
- muls r0, r6
- adds r4, r7, 0
- adds r4, 0x50
- adds r2, r0, r4
- ldr r1, [r2]
- movs r3, 0x7
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _080198E6
- subs r0, r1, 0x1
- str r0, [r2]
- ldrb r0, [r5]
- muls r0, r6
- adds r0, r4
- ldr r0, [r0]
- ands r0, r3
- cmp r0, 0
- beq _080198D4
- bl Random
- movs r1, 0x1
- movs r2, 0x1
- ands r2, r0
- cmp r2, 0
- beq _08019868
- ldr r1, _08019864 @ =gUnknown_2023E82
- movs r0, 0
- strb r0, [r1, 0x5]
- bl BattleScriptPushCursor
- b _080198B2
- .align 2, 0
-_0801985C: .4byte gBattleMons
-_08019860: .4byte sBattler_AI
-_08019864: .4byte gUnknown_2023E82
-_08019868:
- ldr r0, _080198B8 @ =gUnknown_2023E82
- movs r4, 0x1
- strb r1, [r0, 0x5]
- ldr r1, _080198BC @ =gBattlerTarget
- ldrb r0, [r5]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r7
- movs r0, 0x28
- str r0, [sp]
- str r2, [sp, 0x4]
- ldrb r0, [r5]
- str r0, [sp, 0x8]
- ldrb r0, [r5]
- str r0, [sp, 0xC]
- adds r0, r1, 0
- movs r2, 0x1
- movs r3, 0
- bl CalculateBaseDamage
- ldr r1, _080198C0 @ =gBattleMoveDamage
- str r0, [r1]
- ldr r0, _080198C4 @ =gUnknown_2023E8C
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- orrs r0, r4
- strb r0, [r1, 0x1]
- ldr r2, _080198C8 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
-_080198B2:
- ldr r1, _080198CC @ =gUnknown_2023D74
- ldr r0, _080198D0 @ =gUnknown_81D90D3
- b _080198DC
- .align 2, 0
-_080198B8: .4byte gUnknown_2023E82
-_080198BC: .4byte gBattlerTarget
-_080198C0: .4byte gBattleMoveDamage
-_080198C4: .4byte gUnknown_2023E8C
-_080198C8: .4byte gUnknown_2023DD0
-_080198CC: .4byte gUnknown_2023D74
-_080198D0: .4byte gUnknown_81D90D3
-_080198D4:
- bl BattleScriptPushCursor
- ldr r1, _080198EC @ =gUnknown_2023D74
- ldr r0, _080198F0 @ =gUnknown_81D9116
-_080198DC:
- str r0, [r1]
- movs r1, 0x1
- mov r9, r1
- ldr r2, _080198F4 @ =gBattleStruct
- mov r8, r2
-_080198E6:
- mov r4, r8
- ldr r1, [r4]
- b _08019B90
- .align 2, 0
-_080198EC: .4byte gUnknown_2023D74
-_080198F0: .4byte gUnknown_81D9116
-_080198F4: .4byte gBattleStruct
-_080198F8:
- ldr r1, _08019958 @ =gBattleMons
- ldr r4, _0801995C @ =sBattler_AI
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08019946
- bl Random
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- cmp r1, 0
- bne _08019946
- ldr r0, _08019960 @ =gUnknown_2023E8C
- ldrb r2, [r4]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08019964 @ =gUnknown_2023D74
- ldr r0, _08019968 @ =gUnknown_81D90A1
-_08019934:
- str r0, [r1]
- ldr r2, _0801996C @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r7, 0x1
- mov r9, r7
-_08019946:
- ldr r2, _08019970 @ =gBattleStruct
- ldr r1, [r2]
- adds r1, 0xB7
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r8, r2
- b _08019B98
- .align 2, 0
-_08019958: .4byte gBattleMons
-_0801995C: .4byte sBattler_AI
-_08019960: .4byte gUnknown_2023E8C
-_08019964: .4byte gUnknown_2023D74
-_08019968: .4byte gUnknown_81D90A1
-_0801996C: .4byte gUnknown_2023DD0
-_08019970: .4byte gBattleStruct
-_08019974:
- ldr r0, _0801999C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0xA0
- lsls r0, 8
- ands r1, r0
- movs r0, 0x80
- lsls r0, 8
- cmp r1, r0
- beq _08019988
- b _08019B8C
-_08019988:
- ldr r0, _080199A0 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080199AC
- ldr r1, _080199A4 @ =gUnknown_2023D74
- ldr r0, _080199A8 @ =gUnknown_81D9180
- b _080199B0
- .align 2, 0
-_0801999C: .4byte gBattleTypeFlags
-_080199A0: .4byte sBattler_AI
-_080199A4: .4byte gUnknown_2023D74
-_080199A8: .4byte gUnknown_81D9180
-_080199AC:
- ldr r1, _080199BC @ =gUnknown_2023D74
- ldr r0, _080199C0 @ =gUnknown_81D9192
-_080199B0:
- str r0, [r1]
- ldr r1, _080199C4 @ =gUnknown_2023E82
- movs r0, 0
- strb r0, [r1, 0x5]
- movs r0, 0x1
- b _08019B86
- .align 2, 0
-_080199BC: .4byte gUnknown_2023D74
-_080199C0: .4byte gUnknown_81D9192
-_080199C4: .4byte gUnknown_2023E82
-_080199C8:
- ldr r1, _08019A00 @ =gBattleMons
- ldr r4, _08019A04 @ =sBattler_AI
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0xF0
- lsls r0, 12
- ands r1, r0
- cmp r1, 0
- beq _08019A42
- lsrs r0, r1, 16
- bl CountTrailingZeroBits
- ldr r1, _08019A08 @ =gBattleScripting
- strb r0, [r1, 0x17]
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08019A0C
- bl BattleScriptPushCursor
- b _08019A34
- .align 2, 0
-_08019A00: .4byte gBattleMons
-_08019A04: .4byte sBattler_AI
-_08019A08: .4byte gBattleScripting
-_08019A0C:
- ldr r0, _08019A48 @ =gUnknown_81D914A
- bl BattleScriptPush
- ldr r2, _08019A4C @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- ldr r0, _08019A50 @ =gUnknown_2023E8C
- ldrb r2, [r4]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x1]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
-_08019A34:
- ldr r1, _08019A54 @ =gUnknown_2023D74
- ldr r0, _08019A58 @ =gUnknown_81D913D
- str r0, [r1]
- movs r4, 0x1
- mov r9, r4
- ldr r7, _08019A5C @ =gBattleStruct
- mov r8, r7
-_08019A42:
- mov r0, r8
- ldr r1, [r0]
- b _08019B90
- .align 2, 0
-_08019A48: .4byte gUnknown_81D914A
-_08019A4C: .4byte gUnknown_2023DD0
-_08019A50: .4byte gUnknown_2023E8C
-_08019A54: .4byte gUnknown_2023D74
-_08019A58: .4byte gUnknown_81D913D
-_08019A5C: .4byte gBattleStruct
-_08019A60:
- ldr r1, _08019A98 @ =gBattleMons
- ldr r6, _08019A9C @ =sBattler_AI
- ldrb r0, [r6]
- movs r5, 0x58
- muls r0, r5
- adds r1, 0x50
- adds r3, r0, r1
- ldr r2, [r3]
- movs r4, 0xC0
- lsls r4, 2
- adds r0, r2, 0
- ands r0, r4
- cmp r0, 0
- beq _08019B32
- ldr r7, _08019AA0 @ =0xffffff00
- adds r0, r2, r7
- str r0, [r3]
- ldrb r2, [r6]
- adds r0, r2, 0
- muls r0, r5
- adds r0, r1
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _08019AAC
- ldr r1, _08019AA4 @ =gUnknown_2023D74
- ldr r0, _08019AA8 @ =gUnknown_81D8BA9
- b _08019B2C
- .align 2, 0
-_08019A98: .4byte gBattleMons
-_08019A9C: .4byte sBattler_AI
-_08019AA0: .4byte 0xffffff00
-_08019AA4: .4byte gUnknown_2023D74
-_08019AA8: .4byte gUnknown_81D8BA9
-_08019AAC:
- ldr r3, _08019B04 @ =gUnknown_2023D58
- lsls r0, r2, 2
- adds r0, r3
- ldr r0, [r0]
- cmp r0, 0
- beq _08019B28
- ldr r1, _08019B08 @ =gCurrentMove
- movs r0, 0x75
- strh r0, [r1]
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- lsls r0, 1
- mov r1, r10
- str r0, [r1]
- ldr r4, _08019B0C @ =gBattlerTarget
- ldr r1, _08019B10 @ =gUnknown_2023DD8
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r0, _08019B14 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08019B18 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08019AF6
- movs r0, 0x75
- movs r1, 0x1
- bl GetMoveTarget
- strb r0, [r4]
-_08019AF6:
- ldr r1, _08019B1C @ =gUnknown_2023D74
- ldr r0, _08019B20 @ =gUnknown_81D8BB4
- str r0, [r1]
- ldr r2, _08019B24 @ =gBattleStruct
- mov r8, r2
- b _08019B2E
- .align 2, 0
-_08019B04: .4byte gUnknown_2023D58
-_08019B08: .4byte gCurrentMove
-_08019B0C: .4byte gBattlerTarget
-_08019B10: .4byte gUnknown_2023DD8
-_08019B14: .4byte gAbsentBattlerFlags
-_08019B18: .4byte gBitTable
-_08019B1C: .4byte gUnknown_2023D74
-_08019B20: .4byte gUnknown_81D8BB4
-_08019B24: .4byte gBattleStruct
-_08019B28:
- ldr r1, _08019B38 @ =gUnknown_2023D74
- ldr r0, _08019B3C @ =gUnknown_81D8BFC
-_08019B2C:
- str r0, [r1]
-_08019B2E:
- movs r4, 0x1
- mov r9, r4
-_08019B32:
- mov r7, r8
- ldr r1, [r7]
- b _08019B90
- .align 2, 0
-_08019B38: .4byte gUnknown_2023D74
-_08019B3C: .4byte gUnknown_81D8BFC
-_08019B40:
- ldr r1, _08019BE8 @ =gBattleMons
- ldr r0, _08019BEC @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r4, r0, r1
- ldr r3, [r4]
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- beq _08019B8C
- ldr r2, _08019BF0 @ =gBattleMoves
- ldr r0, _08019BF4 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7D
- bne _08019B84
- movs r0, 0x21
- negs r0, r0
- ands r3, r0
- str r3, [r4]
- bl BattleScriptPushCursor
- ldr r1, _08019BF8 @ =gUnknown_2023D74
- ldr r0, _08019BFC @ =gUnknown_81D908D
- str r0, [r1]
- ldr r1, _08019C00 @ =gUnknown_2023E82
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_08019B84:
- movs r0, 0x2
-_08019B86:
- mov r9, r0
- ldr r1, _08019C04 @ =gBattleStruct
- mov r8, r1
-_08019B8C:
- mov r2, r8
- ldr r1, [r2]
-_08019B90:
- adds r1, 0xB7
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08019B98:
- mov r4, r8
- ldr r0, [r4]
- adds r0, 0xB7
- ldrb r0, [r0]
- cmp r0, 0xF
- beq _08019BA8
- bl _080192F8
-_08019BA8:
- mov r7, r9
- cmp r7, 0x2
- bne _08019BD4
- ldr r4, _08019C08 @ =gActiveBattler
- ldr r0, _08019BEC @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r4]
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _08019C0C @ =gUnknown_2023C30
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08019BD4:
- mov r0, r9
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08019BE8: .4byte gBattleMons
-_08019BEC: .4byte sBattler_AI
-_08019BF0: .4byte gBattleMoves
-_08019BF4: .4byte gCurrentMove
-_08019BF8: .4byte gUnknown_2023D74
-_08019BFC: .4byte gUnknown_81D908D
-_08019C00: .4byte gUnknown_2023E82
-_08019C04: .4byte gBattleStruct
-_08019C08: .4byte gActiveBattler
-_08019C0C: .4byte gUnknown_2023C30
- thumb_func_end sub_80192D4
-
- thumb_func_start sub_8019C10
-sub_8019C10: @ 8019C10
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r3, r4, 0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- ldr r0, _08019C3C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08019C40
- movs r0, 0
- b _08019D90
- .align 2, 0
-_08019C3C: .4byte gBattleTypeFlags
-_08019C40:
- movs r0, 0x40
- ands r1, r0
- cmp r1, 0
- beq _08019CCC
- adds r0, r4, 0
- bl GetBankMultiplayerId
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- ldr r1, _08019CC4 @ =gEnemyParty
- mov r8, r1
- cmp r0, 0
- bne _08019C66
- ldr r0, _08019CC8 @ =gPlayerParty
- mov r8, r0
-_08019C66:
- adds r0, r7, 0
- bl GetLinkTrainerFlankId
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 1
- adds r5, r0, r6
- adds r0, r5, 0x3
- cmp r5, r0
- bge _08019CB2
- adds r7, r0, 0
-_08019C7C:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08019CAC
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08019CAC
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- bne _08019CB2
-_08019CAC:
- adds r5, 0x1
- cmp r5, r7
- blt _08019C7C
-_08019CB2:
- movs r1, 0
- lsls r0, r6, 1
- adds r0, r6
- adds r0, 0x3
- cmp r5, r0
- bne _08019CC0
- movs r1, 0x1
-_08019CC0:
- adds r0, r1, 0
- b _08019D90
- .align 2, 0
-_08019CC4: .4byte gEnemyParty
-_08019CC8: .4byte gPlayerParty
-_08019CCC:
- adds r0, r3, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08019CF8
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x3
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08019CF4 @ =gEnemyParty
- mov r8, r0
- b _08019D10
- .align 2, 0
-_08019CF4: .4byte gEnemyParty
-_08019CF8:
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _08019DA0 @ =gPlayerParty
- mov r8, r1
-_08019D10:
- mov r0, r10
- cmp r0, 0x6
- bne _08019D20
- ldr r1, _08019DA4 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrb r0, [r0]
- mov r10, r0
-_08019D20:
- mov r1, r9
- cmp r1, 0x6
- bne _08019D30
- ldr r1, _08019DA4 @ =gBattlerPartyIndexes
- lsls r0, r6, 1
- adds r0, r1
- ldrb r0, [r0]
- mov r9, r0
-_08019D30:
- movs r5, 0
-_08019D32:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08019D82
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _08019D82
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _08019D82
- cmp r5, r10
- beq _08019D82
- cmp r5, r9
- beq _08019D82
- ldr r0, _08019DA8 @ =gBattleStruct
- ldr r1, [r0]
- adds r0, r7, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r5, r0
- beq _08019D82
- adds r0, r6, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- cmp r5, r0
- bne _08019D88
-_08019D82:
- adds r5, 0x1
- cmp r5, 0x5
- ble _08019D32
-_08019D88:
- movs r0, 0
- cmp r5, 0x6
- bne _08019D90
- movs r0, 0x1
-_08019D90:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08019DA0: .4byte gPlayerParty
-_08019DA4: .4byte gBattlerPartyIndexes
-_08019DA8: .4byte gBattleStruct
- thumb_func_end sub_8019C10
-
- thumb_func_start sub_8019DAC
-sub_8019DAC: @ 8019DAC
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r1, _08019E1C @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r4, r0, r1
- ldrh r1, [r4]
- ldr r0, _08019E20 @ =0x00000181
- cmp r1, r0
- bne _08019E50
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3B
- bne _08019E50
- ldrh r0, [r4, 0x28]
- cmp r0, 0
- beq _08019E50
- str r5, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _08019DFE
- str r5, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08019E24
-_08019DFE:
- adds r2, r4, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0
- beq _08019E24
- adds r1, r4, 0
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0
- beq _08019E24
- strb r5, [r2]
- strb r5, [r1]
- movs r0, 0x1
- b _08019F08
- .align 2, 0
-_08019E1C: .4byte gBattleMons
-_08019E20: .4byte 0x00000181
-_08019E24:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08019E50
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08019E54
-_08019E50:
- movs r0, 0
- b _08019F08
-_08019E54:
- ldr r1, _08019F10 @ =gBattleWeather
- ldrh r0, [r1]
- movs r2, 0xE7
- ands r2, r0
- adds r4, r1, 0
- cmp r2, 0
- bne _08019E82
- ldr r1, _08019F14 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r3, r1, 0
- adds r3, 0x21
- ldrb r0, [r3]
- cmp r0, 0
- beq _08019E82
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0
- beq _08019E82
- strb r2, [r3]
- strb r2, [r1]
- movs r5, 0x1
-_08019E82:
- ldrh r1, [r4]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _08019EAE
- ldr r1, _08019F14 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r2, r1, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0xA
- beq _08019EAE
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0xA
- beq _08019EAE
- movs r0, 0xA
- strb r0, [r2]
- strb r0, [r1]
- movs r5, 0x2
-_08019EAE:
- ldrh r1, [r4]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08019EDA
- ldr r1, _08019F14 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r2, r1, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0xB
- beq _08019EDA
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0xB
- beq _08019EDA
- movs r0, 0xB
- strb r0, [r2]
- strb r0, [r1]
- movs r5, 0x3
-_08019EDA:
- ldrh r1, [r4]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08019F06
- ldr r1, _08019F14 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r2, r1, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0xF
- beq _08019F06
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0xF
- beq _08019F06
- movs r0, 0xF
- strb r0, [r2]
- strb r0, [r1]
- movs r5, 0x4
-_08019F06:
- adds r0, r5, 0
-_08019F08:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08019F10: .4byte gBattleWeather
-_08019F14: .4byte gBattleMons
- thumb_func_end sub_8019DAC
-
- thumb_func_start AbilityBattleEffects
-AbilityBattleEffects: @ 8019F18
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- ldr r4, [sp, 0x48]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0
- mov r9, r0
- ldr r5, _08019F74 @ =sBattler_AI
- ldr r1, _08019F78 @ =gBattlersCount
- ldrb r0, [r5]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08019F54
- mov r1, r10
- strb r1, [r5]
-_08019F54:
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08019F84
- ldr r1, _08019F7C @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08019F80 @ =gPlayerParty
- b _08019F94
- .align 2, 0
-_08019F74: .4byte sBattler_AI
-_08019F78: .4byte gBattlersCount
-_08019F7C: .4byte gBattlerPartyIndexes
-_08019F80: .4byte gPlayerParty
-_08019F84:
- ldr r1, _08019FC4 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08019FC8 @ =gEnemyParty
-_08019F94:
- adds r6, r1, r0
- ldr r5, _08019FCC @ =gBattlerTarget
- ldr r1, _08019FD0 @ =gBattlersCount
- ldrb r0, [r5]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08019FA6
- mov r2, r10
- strb r2, [r5]
-_08019FA6:
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08019FD8
- ldr r1, _08019FC4 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08019FD4 @ =gPlayerParty
- b _08019FE8
- .align 2, 0
-_08019FC4: .4byte gBattlerPartyIndexes
-_08019FC8: .4byte gEnemyParty
-_08019FCC: .4byte gBattlerTarget
-_08019FD0: .4byte gBattlersCount
-_08019FD4: .4byte gPlayerParty
-_08019FD8:
- ldr r1, _0801A038 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0801A03C @ =gEnemyParty
-_08019FE8:
- adds r5, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- adds r0, r5, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x14]
- ldr r0, _0801A040 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0801A02A
- bl _0801BBC6
-_0801A02A:
- mov r3, r8
- cmp r3, 0
- beq _0801A048
- ldr r0, _0801A044 @ =gLastUsedAbility
- strb r3, [r0]
- mov r8, r0
- b _0801A05E
- .align 2, 0
-_0801A038: .4byte gBattlerPartyIndexes
-_0801A03C: .4byte gEnemyParty
-_0801A040: .4byte gBattleTypeFlags
-_0801A044: .4byte gLastUsedAbility
-_0801A048:
- ldr r2, _0801A078 @ =gLastUsedAbility
- ldr r1, _0801A07C @ =gBattleMons
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r2]
- mov r8, r2
-_0801A05E:
- cmp r4, 0
- bne _0801A066
- ldr r0, _0801A080 @ =gCurrentMove
- ldrh r4, [r0]
-_0801A066:
- ldr r1, _0801A084 @ =gBattleStruct
- ldr r0, [r1]
- ldrb r0, [r0, 0x13]
- adds r6, r1, 0
- cmp r0, 0
- beq _0801A088
- movs r5, 0x3F
- ands r5, r0
- b _0801A094
- .align 2, 0
-_0801A078: .4byte gLastUsedAbility
-_0801A07C: .4byte gBattleMons
-_0801A080: .4byte gCurrentMove
-_0801A084: .4byte gBattleStruct
-_0801A088:
- ldr r1, _0801A0D0 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x2]
-_0801A094:
- ldr r0, _0801A0D4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0xA0
- lsls r1, 8
- ands r0, r1
- movs r1, 0x80
- lsls r1, 8
- cmp r0, r1
- bne _0801A0BA
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x16
- bne _0801A0B2
- bl _0801BBC6
-_0801A0B2:
- cmp r0, 0x24
- bne _0801A0BA
- bl _0801BBC6
-_0801A0BA:
- ldr r2, [sp, 0x4]
- cmp r2, 0x13
- bls _0801A0C4
- bl _0801BBAA
-_0801A0C4:
- lsls r0, r2, 2
- ldr r1, _0801A0D8 @ =_0801A0DC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801A0D0: .4byte gBattleMoves
-_0801A0D4: .4byte gBattleTypeFlags
-_0801A0D8: .4byte _0801A0DC
- .align 2, 0
-_0801A0DC:
- .4byte _0801A12C
- .4byte _0801A3E0
- .4byte _0801A600
- .4byte _0801A698
- .4byte _0801A8B8
- .4byte _0801B010
- .4byte _0801B374
- .4byte _0801B3C8
- .4byte _0801B450
- .4byte _0801B4D4
- .4byte _0801B6FC
- .4byte _0801B518
- .4byte _0801B740
- .4byte _0801B79C
- .4byte _0801B7F8
- .4byte _0801B90C
- .4byte _0801B9A8
- .4byte _0801BA04
- .4byte _0801BB78
- .4byte _0801B8B4
-_0801A12C:
- ldr r2, _0801A160 @ =sBattler_AI
- ldr r0, _0801A164 @ =gBattlersCount
- ldrb r1, [r2]
- adds r3, r0, 0
- ldrb r4, [r3]
- cmp r1, r4
- bcc _0801A13E
- mov r0, r10
- strb r0, [r2]
-_0801A13E:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x2D
- bne _0801A148
- b _0801A2AC
-_0801A148:
- cmp r0, 0x2D
- bgt _0801A178
- cmp r0, 0xD
- bne _0801A152
- b _0801A3A8
-_0801A152:
- cmp r0, 0xD
- bgt _0801A168
- cmp r0, 0x2
- bne _0801A15C
- b _0801A27C
-_0801A15C:
- bl _0801BBAA
- .align 2, 0
-_0801A160: .4byte sBattler_AI
-_0801A164: .4byte gBattlersCount
-_0801A168:
- cmp r0, 0x16
- bne _0801A16E
- b _0801A30C
-_0801A16E:
- cmp r0, 0x24
- bne _0801A174
- b _0801A36C
-_0801A174:
- bl _0801BBAA
-_0801A178:
- cmp r0, 0x46
- bne _0801A17E
- b _0801A2DC
-_0801A17E:
- cmp r0, 0x46
- bgt _0801A18C
- cmp r0, 0x3B
- bne _0801A188
- b _0801A340
-_0801A188:
- bl _0801BBAA
-_0801A18C:
- cmp r0, 0x4D
- bne _0801A192
- b _0801A3A8
-_0801A192:
- cmp r0, 0xFF
- beq _0801A19A
- bl _0801BBAA
-_0801A19A:
- bl weather_get_current
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x3
- cmp r0, 0xA
- bhi _0801A250
- lsls r0, 2
- ldr r1, _0801A1B4 @ =_0801A1B8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801A1B4: .4byte _0801A1B8
- .align 2, 0
-_0801A1B8:
- .4byte _0801A1E4
- .4byte _0801A250
- .4byte _0801A1E4
- .4byte _0801A250
- .4byte _0801A250
- .4byte _0801A208
- .4byte _0801A250
- .4byte _0801A250
- .4byte _0801A250
- .4byte _0801A22C
- .4byte _0801A1E4
-_0801A1E4:
- ldr r2, _0801A200 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801A250
- movs r0, 0x5
- strh r0, [r2]
- ldr r1, _0801A204 @ =gBattleScripting
- movs r0, 0xA
- strb r0, [r1, 0x10]
- mov r2, r10
- strb r2, [r1, 0x17]
- b _0801A246
- .align 2, 0
-_0801A200: .4byte gBattleWeather
-_0801A204: .4byte gBattleScripting
-_0801A208:
- ldr r3, _0801A224 @ =gBattleWeather
- ldrh r1, [r3]
- movs r2, 0x18
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0801A250
- strh r2, [r3]
- ldr r1, _0801A228 @ =gBattleScripting
- movs r0, 0xC
- strb r0, [r1, 0x10]
- mov r3, r10
- strb r3, [r1, 0x17]
- b _0801A246
- .align 2, 0
-_0801A224: .4byte gBattleWeather
-_0801A228: .4byte gBattleScripting
-_0801A22C:
- ldr r3, _0801A26C @ =gBattleWeather
- ldrh r1, [r3]
- movs r2, 0x60
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0801A250
- strh r2, [r3]
- ldr r1, _0801A270 @ =gBattleScripting
- movs r0, 0xB
- strb r0, [r1, 0x10]
- mov r4, r10
- strb r4, [r1, 0x17]
-_0801A246:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801A250:
- mov r0, r9
- cmp r0, 0
- bne _0801A25A
- bl _0801BBC6
-_0801A25A:
- bl weather_get_current
- ldr r1, _0801A274 @ =gUnknown_2023E82
- strb r0, [r1, 0x5]
- ldr r0, _0801A278 @ =gUnknown_81D8B1F
- bl BattleScriptPushCursorAndCallback
- bl _0801BBAA
- .align 2, 0
-_0801A26C: .4byte gBattleWeather
-_0801A270: .4byte gBattleScripting
-_0801A274: .4byte gUnknown_2023E82
-_0801A278: .4byte gUnknown_81D8B1F
-_0801A27C:
- ldr r2, _0801A2A0 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801A28C
- bl _0801BBAA
-_0801A28C:
- movs r0, 0x5
- strh r0, [r2]
- ldr r0, _0801A2A4 @ =gUnknown_81D927F
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801A2A8 @ =gBattleScripting
- mov r1, r10
- strb r1, [r0, 0x17]
- bl _0801BB5A
- .align 2, 0
-_0801A2A0: .4byte gBattleWeather
-_0801A2A4: .4byte gUnknown_81D927F
-_0801A2A8: .4byte gBattleScripting
-_0801A2AC:
- ldr r2, _0801A2D0 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801A2BC
- bl _0801BBAA
-_0801A2BC:
- movs r0, 0x18
- strh r0, [r2]
- ldr r0, _0801A2D4 @ =gUnknown_81D92BF
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801A2D8 @ =gBattleScripting
- mov r2, r10
- strb r2, [r0, 0x17]
- bl _0801BB5A
- .align 2, 0
-_0801A2D0: .4byte gBattleWeather
-_0801A2D4: .4byte gUnknown_81D92BF
-_0801A2D8: .4byte gBattleScripting
-_0801A2DC:
- ldr r2, _0801A300 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801A2EC
- bl _0801BBAA
-_0801A2EC:
- movs r0, 0x60
- strh r0, [r2]
- ldr r0, _0801A304 @ =gUnknown_81D9379
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801A308 @ =gBattleScripting
- mov r3, r10
- strb r3, [r0, 0x17]
- bl _0801BB5A
- .align 2, 0
-_0801A300: .4byte gBattleWeather
-_0801A304: .4byte gUnknown_81D9379
-_0801A308: .4byte gBattleScripting
-_0801A30C:
- ldr r0, _0801A338 @ =gUnknown_2023ECC
- mov r4, r10
- lsls r2, r4, 2
- adds r1, r2, r4
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3]
- lsls r0, 28
- cmp r0, 0
- bge _0801A324
- bl _0801BBAA
-_0801A324:
- ldr r1, _0801A33C @ =gStatuses3
- adds r1, r2, r1
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 12
- orrs r0, r2
- str r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x8
- b _0801A396
- .align 2, 0
-_0801A338: .4byte gUnknown_2023ECC
-_0801A33C: .4byte gStatuses3
-_0801A340:
- mov r0, r10
- bl sub_8019DAC
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0
- bne _0801A354
- bl _0801BBC6
-_0801A354:
- ldr r0, _0801A364 @ =gUnknown_81D92F8
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801A368 @ =gBattleScripting
- mov r1, r10
- strb r1, [r0, 0x17]
- bl _0801BA6A
- .align 2, 0
-_0801A364: .4byte gUnknown_81D92F8
-_0801A368: .4byte gBattleScripting
-_0801A36C:
- ldr r0, _0801A3A0 @ =gUnknown_2023ECC
- mov r3, r10
- lsls r2, r3, 2
- adds r1, r2, r3
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3]
- lsls r0, 27
- cmp r0, 0
- bge _0801A384
- bl _0801BBAA
-_0801A384:
- ldr r1, _0801A3A4 @ =gStatuses3
- adds r1, r2, r1
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 13
- orrs r0, r2
- str r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x10
-_0801A396:
- orrs r0, r1
- strb r0, [r3]
- bl _0801BBAA
- .align 2, 0
-_0801A3A0: .4byte gUnknown_2023ECC
-_0801A3A4: .4byte gStatuses3
-_0801A3A8:
- movs r4, 0
- ldrb r3, [r3]
- cmp r4, r3
- bcc _0801A3B4
- bl _0801BBAA
-_0801A3B4:
- adds r0, r4, 0
- bl sub_8019DAC
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0
- beq _0801A3C8
- bl _0801BA60
-_0801A3C8:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0801A3DC @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- bcc _0801A3B4
- bl _0801BBAA
- .align 2, 0
-_0801A3DC: .4byte gBattlersCount
-_0801A3E0:
- ldr r7, _0801A410 @ =gBattleMons
- movs r0, 0x58
- mov r6, r10
- muls r6, r0
- adds r4, r6, r7
- ldrh r0, [r4, 0x28]
- cmp r0, 0
- bne _0801A3F4
- bl _0801BBAA
-_0801A3F4:
- ldr r0, _0801A414 @ =sBattler_AI
- mov r1, r10
- strb r1, [r0]
- mov r2, r8
- ldrb r5, [r2]
- cmp r5, 0x2C
- beq _0801A426
- cmp r5, 0x2C
- bgt _0801A418
- cmp r5, 0x3
- bne _0801A40C
- b _0801A58C
-_0801A40C:
- bl _0801BBAA
- .align 2, 0
-_0801A410: .4byte gBattleMons
-_0801A414: .4byte sBattler_AI
-_0801A418:
- cmp r5, 0x36
- bne _0801A41E
- b _0801A5D8
-_0801A41E:
- cmp r5, 0x3D
- beq _0801A4A8
- bl _0801BBAA
-_0801A426:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _0801A442
- bl _0801BBAA
-_0801A442:
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0801A45A
- bl _0801BBAA
-_0801A45A:
- ldr r0, _0801A49C @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801A46A
- bl _0801BBAA
-_0801A46A:
- ldrh r0, [r4, 0x2C]
- ldrh r3, [r4, 0x28]
- cmp r0, r3
- bhi _0801A476
- bl _0801BBAA
-_0801A476:
- mov r0, r8
- strb r5, [r0]
- ldr r0, _0801A4A0 @ =gUnknown_81D92AB
- bl BattleScriptPushCursorAndCallback
- ldr r1, _0801A4A4 @ =gBattleMoveDamage
- ldrh r0, [r4, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _0801A490
- movs r0, 0x1
- str r0, [r1]
-_0801A490:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- bl _0801BB5A
- .align 2, 0
-_0801A49C: .4byte gBattleWeather
-_0801A4A0: .4byte gUnknown_81D92AB
-_0801A4A4: .4byte gBattleMoveDamage
-_0801A4A8:
- adds r0, r7, 0
- adds r0, 0x4C
- adds r5, r6, r0
- ldrb r0, [r5]
- cmp r0, 0
- bne _0801A4B8
- bl _0801BBAA
-_0801A4B8:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _0801A4D2
- bl _0801BBAA
-_0801A4D2:
- ldr r0, [r5]
- movs r1, 0x88
- ands r0, r1
- cmp r0, 0
- beq _0801A4E4
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A568 @ =gUnknown_8250094
- bl StringCopy
-_0801A4E4:
- ldr r0, [r5]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801A4F6
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A56C @ =gUnknown_825009C
- bl StringCopy
-_0801A4F6:
- ldr r0, [r5]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801A508
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A570 @ =gUnknown_82500A4
- bl StringCopy
-_0801A508:
- ldr r0, [r5]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801A51A
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A574 @ =gUnknown_82500AC
- bl StringCopy
-_0801A51A:
- ldr r0, [r5]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801A52C
- ldr r0, _0801A564 @ =gBattleTextBuff1
- ldr r1, _0801A578 @ =gUnknown_82500B4
- bl StringCopy
-_0801A52C:
- str r4, [r5]
- adds r1, r7, 0
- adds r1, 0x50
- adds r1, r6, r1
- ldr r0, [r1]
- ldr r2, _0801A57C @ =0xf7ffffff
- ands r0, r2
- str r0, [r1]
- ldr r0, _0801A580 @ =gBattleScripting
- ldr r4, _0801A584 @ =gActiveBattler
- mov r1, r10
- strb r1, [r4]
- strb r1, [r0, 0x17]
- ldr r0, _0801A588 @ =gUnknown_81D92D3
- bl BattleScriptPushCursorAndCallback
- str r5, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- bl _0801BB5A
- .align 2, 0
-_0801A564: .4byte gBattleTextBuff1
-_0801A568: .4byte gUnknown_8250094
-_0801A56C: .4byte gUnknown_825009C
-_0801A570: .4byte gUnknown_82500A4
-_0801A574: .4byte gUnknown_82500AC
-_0801A578: .4byte gUnknown_82500B4
-_0801A57C: .4byte 0xf7ffffff
-_0801A580: .4byte gBattleScripting
-_0801A584: .4byte gActiveBattler
-_0801A588: .4byte gUnknown_81D92D3
-_0801A58C:
- ldrb r2, [r4, 0x1B]
- movs r0, 0x1B
- ldrsb r0, [r4, r0]
- cmp r0, 0xB
- ble _0801A59A
- bl _0801BBAA
-_0801A59A:
- ldr r0, _0801A5CC @ =gDisableStructs
- mov r3, r10
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x16]
- cmp r0, 0x2
- bne _0801A5B0
- bl _0801BBAA
-_0801A5B0:
- adds r0, r2, 0x1
- movs r1, 0
- strb r0, [r4, 0x1B]
- ldr r4, _0801A5D0 @ =gBattleScripting
- movs r0, 0x11
- strb r0, [r4, 0x10]
- strb r1, [r4, 0x11]
- ldr r0, _0801A5D4 @ =gUnknown_81D9293
- bl BattleScriptPushCursorAndCallback
- mov r0, r10
- strb r0, [r4, 0x17]
- bl _0801BB5A
- .align 2, 0
-_0801A5CC: .4byte gDisableStructs
-_0801A5D0: .4byte gBattleScripting
-_0801A5D4: .4byte gUnknown_81D9293
-_0801A5D8:
- ldr r2, _0801A5FC @ =gDisableStructs
- ldrb r0, [r0]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r3, [r1, 0x18]
- lsls r0, r3, 31
- lsrs r0, 31
- movs r2, 0x1
- eors r2, r0
- movs r0, 0x2
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x18]
- bl _0801BBAA
- .align 2, 0
-_0801A5FC: .4byte gDisableStructs
-_0801A600:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x2B
- beq _0801A60C
- bl _0801BBAA
-_0801A60C:
- movs r5, 0
- ldr r0, _0801A67C @ =gUnknown_8250104
- ldrh r2, [r0]
- ldr r3, _0801A680 @ =0x0000ffff
- adds r1, r0, 0
- cmp r2, r3
- bne _0801A61E
- bl _0801BBAA
-_0801A61E:
- cmp r2, r4
- beq _0801A636
- adds r2, r1, 0
-_0801A624:
- adds r2, 0x2
- adds r5, 0x1
- ldrh r0, [r2]
- cmp r0, r3
- bne _0801A632
- bl _0801BBAA
-_0801A632:
- cmp r0, r4
- bne _0801A624
-_0801A636:
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, _0801A680 @ =0x0000ffff
- cmp r1, r0
- bne _0801A646
- bl _0801BBAA
-_0801A646:
- ldr r1, _0801A684 @ =gBattleMons
- ldr r0, _0801A688 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- beq _0801A66C
- ldr r0, _0801A68C @ =gUnknown_2023DD0
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 4
- orrs r1, r2
- str r1, [r0]
-_0801A66C:
- ldr r1, _0801A690 @ =gUnknown_2023D74
- ldr r0, _0801A694 @ =gUnknown_81D946E
- str r0, [r1]
- movs r2, 0x1
- mov r9, r2
- bl _0801BBB0
- .align 2, 0
-_0801A67C: .4byte gUnknown_8250104
-_0801A680: .4byte 0x0000ffff
-_0801A684: .4byte gBattleMons
-_0801A688: .4byte sBattler_AI
-_0801A68C: .4byte gUnknown_2023DD0
-_0801A690: .4byte gUnknown_2023D74
-_0801A694: .4byte gUnknown_81D946E
-_0801A698:
- cmp r4, 0
- bne _0801A6A0
- bl _0801BBAA
-_0801A6A0:
- mov r3, r8
- ldrb r0, [r3]
- cmp r0, 0xB
- beq _0801A710
- cmp r0, 0xB
- bgt _0801A6B2
- cmp r0, 0xA
- beq _0801A6B8
- b _0801A832
-_0801A6B2:
- cmp r0, 0x12
- beq _0801A768
- b _0801A832
-_0801A6B8:
- cmp r5, 0xD
- beq _0801A6BE
- b _0801A832
-_0801A6BE:
- ldr r0, _0801A6E8 @ =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801A6D0
- b _0801A832
-_0801A6D0:
- ldr r1, _0801A6EC @ =gUnknown_2023E8C
- ldr r0, _0801A6F0 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A6FC
- ldr r1, _0801A6F4 @ =gUnknown_2023D74
- ldr r0, _0801A6F8 @ =gUnknown_81D93BE
- b _0801A700
- .align 2, 0
-_0801A6E8: .4byte gBattleMoves
-_0801A6EC: .4byte gUnknown_2023E8C
-_0801A6F0: .4byte sBattler_AI
-_0801A6F4: .4byte gUnknown_2023D74
-_0801A6F8: .4byte gUnknown_81D93BE
-_0801A6FC:
- ldr r1, _0801A708 @ =gUnknown_2023D74
- ldr r0, _0801A70C @ =gUnknown_81D93BD
-_0801A700:
- str r0, [r1]
- movs r4, 0x1
- mov r9, r4
- b _0801A832
- .align 2, 0
-_0801A708: .4byte gUnknown_2023D74
-_0801A70C: .4byte gUnknown_81D93BD
-_0801A710:
- cmp r5, 0xB
- beq _0801A716
- b _0801A832
-_0801A716:
- ldr r0, _0801A740 @ =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801A728
- b _0801A832
-_0801A728:
- ldr r1, _0801A744 @ =gUnknown_2023E8C
- ldr r0, _0801A748 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A754
- ldr r1, _0801A74C @ =gUnknown_2023D74
- ldr r0, _0801A750 @ =gUnknown_81D93BE
- b _0801A758
- .align 2, 0
-_0801A740: .4byte gBattleMoves
-_0801A744: .4byte gUnknown_2023E8C
-_0801A748: .4byte sBattler_AI
-_0801A74C: .4byte gUnknown_2023D74
-_0801A750: .4byte gUnknown_81D93BE
-_0801A754:
- ldr r1, _0801A760 @ =gUnknown_2023D74
- ldr r0, _0801A764 @ =gUnknown_81D93BD
-_0801A758:
- str r0, [r1]
- movs r0, 0x1
- b _0801A830
- .align 2, 0
-_0801A760: .4byte gUnknown_2023D74
-_0801A764: .4byte gUnknown_81D93BD
-_0801A768:
- cmp r5, 0xA
- bne _0801A832
- ldr r1, _0801A7B8 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0801A832
- ldr r2, _0801A7BC @ =gBattleResources
- ldr r0, [r2]
- ldr r0, [r0, 0x4]
- mov r3, r10
- lsls r1, r3, 2
- adds r0, r1
- ldr r3, [r0]
- movs r4, 0x1
- ands r3, r4
- adds r5, r1, 0
- cmp r3, 0
- bne _0801A7F8
- ldr r0, _0801A7C0 @ =gUnknown_2023E82
- strb r3, [r0, 0x5]
- ldr r1, _0801A7C4 @ =gUnknown_2023E8C
- ldr r0, _0801A7C8 @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A7D4
- ldr r1, _0801A7CC @ =gUnknown_2023D74
- ldr r0, _0801A7D0 @ =gUnknown_81D93F7
- b _0801A7D8
- .align 2, 0
-_0801A7B8: .4byte gBattleMons
-_0801A7BC: .4byte gBattleResources
-_0801A7C0: .4byte gUnknown_2023E82
-_0801A7C4: .4byte gUnknown_2023E8C
-_0801A7C8: .4byte sBattler_AI
-_0801A7CC: .4byte gUnknown_2023D74
-_0801A7D0: .4byte gUnknown_81D93F7
-_0801A7D4:
- ldr r1, _0801A7F0 @ =gUnknown_2023D74
- ldr r0, _0801A7F4 @ =gUnknown_81D93F6
-_0801A7D8:
- str r0, [r1]
- ldr r0, [r2]
- ldr r1, [r0, 0x4]
- adds r1, r5
- ldr r0, [r1]
- movs r2, 0x1
- orrs r0, r2
- str r0, [r1]
- movs r4, 0x2
- mov r9, r4
- b _0801A832
- .align 2, 0
-_0801A7F0: .4byte gUnknown_2023D74
-_0801A7F4: .4byte gUnknown_81D93F6
-_0801A7F8:
- ldr r0, _0801A814 @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
- ldr r1, _0801A818 @ =gUnknown_2023E8C
- ldr r0, _0801A81C @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A828
- ldr r1, _0801A820 @ =gUnknown_2023D74
- ldr r0, _0801A824 @ =gUnknown_81D93F7
- b _0801A82C
- .align 2, 0
-_0801A814: .4byte gUnknown_2023E82
-_0801A818: .4byte gUnknown_2023E8C
-_0801A81C: .4byte sBattler_AI
-_0801A820: .4byte gUnknown_2023D74
-_0801A824: .4byte gUnknown_81D93F7
-_0801A828:
- ldr r1, _0801A86C @ =gUnknown_2023D74
- ldr r0, _0801A870 @ =gUnknown_81D93F6
-_0801A82C:
- str r0, [r1]
- movs r0, 0x2
-_0801A830:
- mov r9, r0
-_0801A832:
- mov r1, r9
- cmp r1, 0x1
- beq _0801A83C
- bl _0801BBAA
-_0801A83C:
- ldr r1, _0801A874 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r1, r0, r1
- ldrh r0, [r1, 0x2C]
- ldrh r3, [r1, 0x28]
- cmp r0, r3
- bne _0801A898
- ldr r1, _0801A878 @ =gUnknown_2023E8C
- ldr r0, _0801A87C @ =sBattler_AI
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _0801A884
- ldr r1, _0801A86C @ =gUnknown_2023D74
- ldr r0, _0801A880 @ =gUnknown_81D93E1
- str r0, [r1]
- bl _0801BBAA
- .align 2, 0
-_0801A86C: .4byte gUnknown_2023D74
-_0801A870: .4byte gUnknown_81D93F6
-_0801A874: .4byte gBattleMons
-_0801A878: .4byte gUnknown_2023E8C
-_0801A87C: .4byte sBattler_AI
-_0801A880: .4byte gUnknown_81D93E1
-_0801A884:
- ldr r1, _0801A890 @ =gUnknown_2023D74
- ldr r0, _0801A894 @ =gUnknown_81D93E0
- str r0, [r1]
- bl _0801BBAA
- .align 2, 0
-_0801A890: .4byte gUnknown_2023D74
-_0801A894: .4byte gUnknown_81D93E0
-_0801A898:
- ldr r2, _0801A8B4 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 2
- str r0, [r2]
- cmp r0, 0
- bne _0801A8A8
- mov r4, r9
- str r4, [r2]
-_0801A8A8:
- ldr r0, [r2]
- negs r0, r0
- str r0, [r2]
- bl _0801BBAA
- .align 2, 0
-_0801A8B4: .4byte gBattleMoveDamage
-_0801A8B8:
- mov r1, r8
- ldrb r0, [r1]
- subs r0, 0x9
- cmp r0, 0x2F
- bls _0801A8C6
- bl _0801BBAA
-_0801A8C6:
- lsls r0, 2
- ldr r1, _0801A8D0 @ =_0801A8D4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801A8D0: .4byte _0801A8D4
- .align 2, 0
-_0801A8D4:
- .4byte _0801ACF0
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801A994
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801AA5C
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801AB1C
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801AC14
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801ADCC
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801BBAA
- .4byte _0801AEA8
-_0801A994:
- ldr r0, _0801AA3C @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801A9A4
- bl _0801BBAA
-_0801A9A4:
- cmp r4, 0xA5
- bne _0801A9AC
- bl _0801BBAA
-_0801A9AC:
- ldr r0, _0801AA40 @ =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801A9C0
- bl _0801BBAA
-_0801A9C0:
- ldr r2, _0801AA44 @ =gUnknown_2023ECC
- ldr r0, _0801AA48 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801A9E8
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801A9E8
- bl _0801BBAA
-_0801A9E8:
- ldr r1, _0801AA4C @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r1, r0, r1
- adds r3, r1, 0
- adds r3, 0x21
- ldrb r0, [r3]
- cmp r0, r5
- bne _0801AA02
- bl _0801BBAA
-_0801AA02:
- adds r2, r1, 0
- adds r2, 0x22
- ldrb r0, [r2]
- cmp r0, r5
- bne _0801AA10
- bl _0801BBAA
-_0801AA10:
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- bne _0801AA1A
- bl _0801BBAA
-_0801AA1A:
- strb r5, [r3]
- strb r5, [r2]
- ldr r1, _0801AA50 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- strb r5, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- ldr r1, _0801AA54 @ =gUnknown_2023D74
- ldr r0, _0801AA58 @ =gUnknown_81D949C
- str r0, [r1]
- bl _0801BB5A
- .align 2, 0
-_0801AA3C: .4byte gMoveResultFlags
-_0801AA40: .4byte gBattleMoves
-_0801AA44: .4byte gUnknown_2023ECC
-_0801AA48: .4byte gBattlerTarget
-_0801AA4C: .4byte gBattleMons
-_0801AA50: .4byte gBattleTextBuff1
-_0801AA54: .4byte gUnknown_2023D74
-_0801AA58: .4byte gUnknown_81D949C
-_0801AA5C:
- ldr r0, _0801AAF4 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AA6C
- bl _0801BBAA
-_0801AA6C:
- ldr r1, _0801AAF8 @ =gBattleMons
- ldr r0, _0801AAFC @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r3, r0, r1
- ldrh r0, [r3, 0x28]
- cmp r0, 0
- bne _0801AA82
- bl _0801BBAA
-_0801AA82:
- ldr r0, _0801AB00 @ =gUnknown_2023E8C
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AA94
- bl _0801BBAA
-_0801AA94:
- ldr r2, _0801AB04 @ =gUnknown_2023ECC
- ldr r0, _0801AB08 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AABC
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AABC
- bl _0801BBAA
-_0801AABC:
- ldr r1, _0801AB0C @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0801AAD6
- bl _0801BBAA
-_0801AAD6:
- ldr r1, _0801AB10 @ =gBattleMoveDamage
- ldrh r0, [r3, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _0801AAE4
- str r2, [r1]
-_0801AAE4:
- bl BattleScriptPushCursor
- ldr r1, _0801AB14 @ =gUnknown_2023D74
- ldr r0, _0801AB18 @ =gUnknown_81D94A3
- str r0, [r1]
- bl _0801BB5A
- .align 2, 0
-_0801AAF4: .4byte gMoveResultFlags
-_0801AAF8: .4byte gBattleMons
-_0801AAFC: .4byte sBattler_AI
-_0801AB00: .4byte gUnknown_2023E8C
-_0801AB04: .4byte gUnknown_2023ECC
-_0801AB08: .4byte gBattlerTarget
-_0801AB0C: .4byte gBattleMoves
-_0801AB10: .4byte gBattleMoveDamage
-_0801AB14: .4byte gUnknown_2023D74
-_0801AB18: .4byte gUnknown_81D94A3
-_0801AB1C:
- ldr r0, _0801ABE8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AB2C
- bl _0801BBAA
-_0801AB2C:
- ldr r1, _0801ABEC @ =gBattleMons
- ldr r0, _0801ABF0 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AB42
- bl _0801BBAA
-_0801AB42:
- ldr r0, _0801ABF4 @ =gUnknown_2023E8C
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AB54
- bl _0801BBAA
-_0801AB54:
- ldr r2, _0801ABF8 @ =gUnknown_2023ECC
- ldr r0, _0801ABFC @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AB7C
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AB7C
- bl _0801BBAA
-_0801AB7C:
- ldr r1, _0801AC00 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AB94
- bl _0801BBAA
-_0801AB94:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801ABAC
- bl _0801BBAA
-_0801ABAC:
- ldr r5, _0801AC04 @ =gUnknown_2023E82
- movs r4, 0x3
-_0801ABB0:
- bl Random
- ands r0, r4
- strb r0, [r5, 0x3]
- cmp r0, 0
- beq _0801ABB0
- ldr r1, _0801AC04 @ =gUnknown_2023E82
- ldrb r0, [r1, 0x3]
- cmp r0, 0x3
- bne _0801ABC8
- adds r0, 0x2
- strb r0, [r1, 0x3]
-_0801ABC8:
- ldrb r0, [r1, 0x3]
- adds r0, 0x40
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- ldr r1, _0801AC08 @ =gUnknown_2023D74
- ldr r0, _0801AC0C @ =gUnknown_81D94CB
- str r0, [r1]
- ldr r2, _0801AC10 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _0801BB5A
- .align 2, 0
-_0801ABE8: .4byte gMoveResultFlags
-_0801ABEC: .4byte gBattleMons
-_0801ABF0: .4byte sBattler_AI
-_0801ABF4: .4byte gUnknown_2023E8C
-_0801ABF8: .4byte gUnknown_2023ECC
-_0801ABFC: .4byte gBattlerTarget
-_0801AC00: .4byte gBattleMoves
-_0801AC04: .4byte gUnknown_2023E82
-_0801AC08: .4byte gUnknown_2023D74
-_0801AC0C: .4byte gUnknown_81D94CB
-_0801AC10: .4byte gUnknown_2023DD0
-_0801AC14:
- ldr r0, _0801ACC4 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AC24
- bl _0801BBAA
-_0801AC24:
- ldr r1, _0801ACC8 @ =gBattleMons
- ldr r0, _0801ACCC @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AC3A
- bl _0801BBAA
-_0801AC3A:
- ldr r0, _0801ACD0 @ =gUnknown_2023E8C
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AC4C
- bl _0801BBAA
-_0801AC4C:
- ldr r2, _0801ACD4 @ =gUnknown_2023ECC
- ldr r0, _0801ACD8 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AC74
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AC74
- bl _0801BBAA
-_0801AC74:
- ldr r1, _0801ACDC @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AC8C
- bl _0801BBAA
-_0801AC8C:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801ACA4
- bl _0801BBAA
-_0801ACA4:
- ldr r1, _0801ACE0 @ =gUnknown_2023E82
- movs r0, 0x42
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- ldr r1, _0801ACE4 @ =gUnknown_2023D74
- ldr r0, _0801ACE8 @ =gUnknown_81D94CB
- str r0, [r1]
- ldr r2, _0801ACEC @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _0801BB5A
- .align 2, 0
-_0801ACC4: .4byte gMoveResultFlags
-_0801ACC8: .4byte gBattleMons
-_0801ACCC: .4byte sBattler_AI
-_0801ACD0: .4byte gUnknown_2023E8C
-_0801ACD4: .4byte gUnknown_2023ECC
-_0801ACD8: .4byte gBattlerTarget
-_0801ACDC: .4byte gBattleMoves
-_0801ACE0: .4byte gUnknown_2023E82
-_0801ACE4: .4byte gUnknown_2023D74
-_0801ACE8: .4byte gUnknown_81D94CB
-_0801ACEC: .4byte gUnknown_2023DD0
-_0801ACF0:
- ldr r0, _0801ADA0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AD00
- bl _0801BBAA
-_0801AD00:
- ldr r1, _0801ADA4 @ =gBattleMons
- ldr r0, _0801ADA8 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AD16
- bl _0801BBAA
-_0801AD16:
- ldr r0, _0801ADAC @ =gUnknown_2023E8C
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AD28
- bl _0801BBAA
-_0801AD28:
- ldr r2, _0801ADB0 @ =gUnknown_2023ECC
- ldr r0, _0801ADB4 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AD50
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AD50
- bl _0801BBAA
-_0801AD50:
- ldr r1, _0801ADB8 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AD68
- bl _0801BBAA
-_0801AD68:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801AD80
- bl _0801BBAA
-_0801AD80:
- ldr r1, _0801ADBC @ =gUnknown_2023E82
- movs r0, 0x45
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- ldr r1, _0801ADC0 @ =gUnknown_2023D74
- ldr r0, _0801ADC4 @ =gUnknown_81D94CB
- str r0, [r1]
- ldr r2, _0801ADC8 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _0801BB5A
- .align 2, 0
-_0801ADA0: .4byte gMoveResultFlags
-_0801ADA4: .4byte gBattleMons
-_0801ADA8: .4byte sBattler_AI
-_0801ADAC: .4byte gUnknown_2023E8C
-_0801ADB0: .4byte gUnknown_2023ECC
-_0801ADB4: .4byte gBattlerTarget
-_0801ADB8: .4byte gBattleMoves
-_0801ADBC: .4byte gUnknown_2023E82
-_0801ADC0: .4byte gUnknown_2023D74
-_0801ADC4: .4byte gUnknown_81D94CB
-_0801ADC8: .4byte gUnknown_2023DD0
-_0801ADCC:
- ldr r0, _0801AE7C @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801ADDC
- bl _0801BBAA
-_0801ADDC:
- ldr r1, _0801AE80 @ =gBattleMons
- ldr r0, _0801AE84 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801ADF2
- bl _0801BBAA
-_0801ADF2:
- ldr r0, _0801AE88 @ =gUnknown_2023E8C
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AE04
- bl _0801BBAA
-_0801AE04:
- ldr r1, _0801AE8C @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AE1C
- bl _0801BBAA
-_0801AE1C:
- ldr r2, _0801AE90 @ =gUnknown_2023ECC
- ldr r0, _0801AE94 @ =gBattlerTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AE44
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AE44
- bl _0801BBAA
-_0801AE44:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801AE5C
- bl _0801BBAA
-_0801AE5C:
- ldr r1, _0801AE98 @ =gUnknown_2023E82
- movs r0, 0x43
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- ldr r1, _0801AE9C @ =gUnknown_2023D74
- ldr r0, _0801AEA0 @ =gUnknown_81D94CB
- str r0, [r1]
- ldr r2, _0801AEA4 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _0801BB5A
- .align 2, 0
-_0801AE7C: .4byte gMoveResultFlags
-_0801AE80: .4byte gBattleMons
-_0801AE84: .4byte sBattler_AI
-_0801AE88: .4byte gUnknown_2023E8C
-_0801AE8C: .4byte gBattleMoves
-_0801AE90: .4byte gUnknown_2023ECC
-_0801AE94: .4byte gBattlerTarget
-_0801AE98: .4byte gUnknown_2023E82
-_0801AE9C: .4byte gUnknown_2023D74
-_0801AEA0: .4byte gUnknown_81D94CB
-_0801AEA4: .4byte gUnknown_2023DD0
-_0801AEA8:
- ldr r0, _0801AFE8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801AEB8
- bl _0801BBAA
-_0801AEB8:
- ldr r5, _0801AFEC @ =gBattleMons
- ldr r7, _0801AFF0 @ =sBattler_AI
- ldrb r1, [r7]
- movs r6, 0x58
- adds r0, r1, 0
- muls r0, r6
- adds r0, r5
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AED0
- bl _0801BBAA
-_0801AED0:
- ldr r0, _0801AFF4 @ =gUnknown_2023E8C
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801AEE2
- bl _0801BBAA
-_0801AEE2:
- ldr r1, _0801AFF8 @ =gBattleMoves
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801AEFA
- bl _0801BBAA
-_0801AEFA:
- ldr r3, _0801AFFC @ =gUnknown_2023ECC
- ldr r4, _0801B000 @ =gBattlerTarget
- mov r8, r4
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r2, r0, 2
- adds r0, r3, 0
- adds r0, 0x8
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AF24
- adds r0, r3, 0
- adds r0, 0xC
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801AF24
- bl _0801BBAA
-_0801AF24:
- adds r0, r1, 0
- muls r0, r6
- adds r0, r5
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801AF34
- bl _0801BBAA
-_0801AF34:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _0801AF4C
- bl _0801BBAA
-_0801AF4C:
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0xC
- bne _0801AF5E
- bl _0801BBAA
-_0801AF5E:
- ldr r0, [sp, 0x8]
- ldr r1, [sp, 0x10]
- bl GetGenderFromSpeciesAndPersonality
- adds r4, r0, 0
- ldr r0, [sp, 0xC]
- ldr r1, [sp, 0x14]
- bl GetGenderFromSpeciesAndPersonality
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _0801AF7C
- bl _0801BBAA
-_0801AF7C:
- ldrb r0, [r7]
- muls r0, r6
- adds r4, r5, 0
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0xF0
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _0801AF96
- bl _0801BBAA
-_0801AF96:
- ldr r0, [sp, 0x8]
- ldr r1, [sp, 0x10]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0801AFAA
- bl _0801BBAA
-_0801AFAA:
- ldr r0, [sp, 0xC]
- ldr r1, [sp, 0x14]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0801AFBE
- bl _0801BBAA
-_0801AFBE:
- ldrb r0, [r7]
- adds r2, r0, 0
- muls r2, r6
- adds r2, r4
- ldr r1, _0801B004 @ =gBitTable
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 16
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801B008 @ =gUnknown_2023D74
- ldr r0, _0801B00C @ =gUnknown_81D94BE
- str r0, [r1]
- bl _0801BB5A
- .align 2, 0
-_0801AFE8: .4byte gMoveResultFlags
-_0801AFEC: .4byte gBattleMons
-_0801AFF0: .4byte sBattler_AI
-_0801AFF4: .4byte gUnknown_2023E8C
-_0801AFF8: .4byte gBattleMoves
-_0801AFFC: .4byte gUnknown_2023ECC
-_0801B000: .4byte gBattlerTarget
-_0801B004: .4byte gBitTable
-_0801B008: .4byte gUnknown_2023D74
-_0801B00C: .4byte gUnknown_81D94BE
-_0801B010:
- movs r4, 0
- mov r10, r4
- ldr r0, _0801B044 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r10, r0
- bcc _0801B020
- bl _0801BBAA
-_0801B020:
- ldr r1, _0801B048 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- subs r0, 0x7
- adds r2, r1, 0
- cmp r0, 0x41
- bls _0801B03A
- b _0801B29E
-_0801B03A:
- lsls r0, 2
- ldr r1, _0801B04C @ =_0801B050
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801B044: .4byte gBattlersCount
-_0801B048: .4byte gBattleMons
-_0801B04C: .4byte _0801B050
- .align 2, 0
-_0801B050:
- .4byte _0801B1B4
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B278
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B1DC
- .4byte _0801B29E
- .4byte _0801B158
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B184
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B248
- .4byte _0801B218
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B29E
- .4byte _0801B1DC
-_0801B158:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _0801B178 @ =0x00000f88
- ands r0, r1
- cmp r0, 0
- bne _0801B172
- b _0801B29E
-_0801B172:
- ldr r0, _0801B17C @ =gBattleTextBuff1
- ldr r1, _0801B180 @ =gUnknown_8250094
- b _0801B264
- .align 2, 0
-_0801B178: .4byte 0x00000f88
-_0801B17C: .4byte gBattleTextBuff1
-_0801B180: .4byte gUnknown_8250094
-_0801B184:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801B19E
- b _0801B29E
-_0801B19E:
- ldr r0, _0801B1AC @ =gBattleTextBuff1
- ldr r1, _0801B1B0 @ =gUnknown_82500BC
- bl StringCopy
- movs r2, 0x2
- mov r9, r2
- b _0801B2A4
- .align 2, 0
-_0801B1AC: .4byte gBattleTextBuff1
-_0801B1B0: .4byte gUnknown_82500BC
-_0801B1B4:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- ldr r0, _0801B1D4 @ =gBattleTextBuff1
- ldr r1, _0801B1D8 @ =gUnknown_82500A4
- b _0801B264
- .align 2, 0
-_0801B1D4: .4byte gBattleTextBuff1
-_0801B1D8: .4byte gUnknown_82500A4
-_0801B1DC:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- adds r2, 0x50
- adds r2, r3, r2
- ldr r0, [r2]
- ldr r1, _0801B20C @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801B210 @ =gBattleTextBuff1
- ldr r1, _0801B214 @ =gUnknown_825009C
- bl StringCopy
- movs r0, 0x1
- mov r9, r0
- b _0801B2A4
- .align 2, 0
-_0801B20C: .4byte 0xf7ffffff
-_0801B210: .4byte gBattleTextBuff1
-_0801B214: .4byte gUnknown_825009C
-_0801B218:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- ldr r0, _0801B240 @ =gBattleTextBuff1
- ldr r1, _0801B244 @ =gUnknown_82500AC
- bl StringCopy
- movs r2, 0x1
- mov r9, r2
- b _0801B2A4
- .align 2, 0
-_0801B240: .4byte gBattleTextBuff1
-_0801B244: .4byte gUnknown_82500AC
-_0801B248:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- ldr r0, _0801B270 @ =gBattleTextBuff1
- ldr r1, _0801B274 @ =gUnknown_82500B4
-_0801B264:
- bl StringCopy
- movs r4, 0x1
- mov r9, r4
- b _0801B2A4
- .align 2, 0
-_0801B270: .4byte gBattleTextBuff1
-_0801B274: .4byte gUnknown_82500B4
-_0801B278:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0xF0
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _0801B29E
- ldr r0, _0801B2B4 @ =gBattleTextBuff1
- ldr r1, _0801B2B8 @ =gUnknown_82500C4
- bl StringCopy
- movs r2, 0x3
- mov r9, r2
-_0801B29E:
- mov r3, r9
- cmp r3, 0
- beq _0801B358
-_0801B2A4:
- mov r4, r9
- cmp r4, 0x2
- beq _0801B2D8
- cmp r4, 0x2
- bgt _0801B2BC
- cmp r4, 0x1
- beq _0801B2C4
- b _0801B304
- .align 2, 0
-_0801B2B4: .4byte gBattleTextBuff1
-_0801B2B8: .4byte gUnknown_82500C4
-_0801B2BC:
- mov r0, r9
- cmp r0, 0x3
- beq _0801B2F0
- b _0801B304
-_0801B2C4:
- ldr r1, _0801B2D4 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r1, 0x4C
- adds r2, r1
- movs r0, 0
- b _0801B302
- .align 2, 0
-_0801B2D4: .4byte gBattleMons
-_0801B2D8:
- ldr r1, _0801B2EC @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- movs r1, 0x8
- negs r1, r1
- b _0801B300
- .align 2, 0
-_0801B2EC: .4byte gBattleMons
-_0801B2F0:
- ldr r1, _0801B33C @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- ldr r1, _0801B340 @ =0xfff0ffff
-_0801B300:
- ands r0, r1
-_0801B302:
- str r0, [r2]
-_0801B304:
- bl BattleScriptPushCursor
- ldr r1, _0801B344 @ =gUnknown_2023D74
- ldr r0, _0801B348 @ =gUnknown_81D94D1
- str r0, [r1]
- ldr r0, _0801B34C @ =gBattleScripting
- mov r1, r10
- strb r1, [r0, 0x17]
- ldr r4, _0801B350 @ =gActiveBattler
- strb r1, [r4]
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _0801B354 @ =gUnknown_2023C30
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- bl _0801BBC6
- .align 2, 0
-_0801B33C: .4byte gBattleMons
-_0801B340: .4byte 0xfff0ffff
-_0801B344: .4byte gUnknown_2023D74
-_0801B348: .4byte gUnknown_81D94D1
-_0801B34C: .4byte gBattleScripting
-_0801B350: .4byte gActiveBattler
-_0801B354: .4byte gUnknown_2023C30
-_0801B358:
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _0801B370 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r10, r0
- bcs _0801B36C
- b _0801B020
-_0801B36C:
- bl _0801BBAA
- .align 2, 0
-_0801B370: .4byte gBattlersCount
-_0801B374:
- movs r2, 0
- mov r10, r2
- ldr r0, _0801B3C0 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r10, r0
- bcc _0801B384
- bl _0801BBAA
-_0801B384:
- ldr r4, _0801B3C4 @ =gBattleMons
-_0801B386:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3B
- bne _0801B3AA
- mov r0, r10
- bl sub_8019DAC
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0
- beq _0801B3AA
- b _0801BA84
-_0801B3AA:
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _0801B3C0 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r10, r0
- bcc _0801B386
- bl _0801BBAA
- .align 2, 0
-_0801B3C0: .4byte gBattlersCount
-_0801B3C4: .4byte gBattleMons
-_0801B3C8:
- mov r4, r8
- ldrb r0, [r4]
- cmp r0, 0x1C
- beq _0801B3D4
- bl _0801BBAA
-_0801B3D4:
- ldr r4, _0801B434 @ =gUnknown_2023DD0
- ldr r1, [r4]
- movs r0, 0x80
- lsls r0, 7
- ands r0, r1
- cmp r0, 0
- bne _0801B3E6
- bl _0801BBAA
-_0801B3E6:
- ldr r0, _0801B438 @ =0xffffbfff
- ands r1, r0
- str r1, [r4]
- ldr r1, [r6]
- adds r1, 0xB4
- ldrb r2, [r1]
- movs r0, 0x3F
- ands r0, r2
- strb r0, [r1]
- ldr r0, [r6]
- adds r1, r0, 0
- adds r1, 0xB4
- ldrb r0, [r1]
- cmp r0, 0x6
- bne _0801B408
- movs r0, 0x2
- strb r0, [r1]
-_0801B408:
- ldr r1, _0801B43C @ =gUnknown_2023E82
- ldr r0, [r6]
- adds r0, 0xB4
- ldrb r0, [r0]
- adds r0, 0x40
- strb r0, [r1, 0x3]
- ldr r1, _0801B440 @ =gBattleScripting
- ldr r0, _0801B444 @ =gBattlerTarget
- ldrb r0, [r0]
- strb r0, [r1, 0x17]
- bl BattleScriptPushCursor
- ldr r1, _0801B448 @ =gUnknown_2023D74
- ldr r0, _0801B44C @ =gUnknown_81D94CE
- str r0, [r1]
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r4]
- b _0801BB5A
- .align 2, 0
-_0801B434: .4byte gUnknown_2023DD0
-_0801B438: .4byte 0xffffbfff
-_0801B43C: .4byte gUnknown_2023E82
-_0801B440: .4byte gBattleScripting
-_0801B444: .4byte gBattlerTarget
-_0801B448: .4byte gUnknown_2023D74
-_0801B44C: .4byte gUnknown_81D94CE
-_0801B450:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x1C
- beq _0801B45A
- b _0801BBAA
-_0801B45A:
- ldr r4, _0801B4B8 @ =gUnknown_2023DD0
- ldr r1, [r4]
- movs r0, 0x80
- lsls r0, 7
- ands r0, r1
- cmp r0, 0
- bne _0801B46A
- b _0801BBAA
-_0801B46A:
- ldr r0, _0801B4BC @ =0xffffbfff
- ands r1, r0
- str r1, [r4]
- adds r3, r6, 0
- ldr r1, [r3]
- adds r1, 0xB4
- ldrb r2, [r1]
- movs r0, 0x3F
- ands r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r1, r0, 0
- adds r1, 0xB4
- ldrb r0, [r1]
- cmp r0, 0x6
- bne _0801B48E
- movs r0, 0x2
- strb r0, [r1]
-_0801B48E:
- ldr r1, _0801B4C0 @ =gUnknown_2023E82
- ldr r0, [r6]
- adds r0, 0xB4
- ldrb r0, [r0]
- strb r0, [r1, 0x3]
- ldr r1, _0801B4C4 @ =gBattleScripting
- ldr r0, _0801B4C8 @ =sBattler_AI
- ldrb r0, [r0]
- strb r0, [r1, 0x17]
- bl BattleScriptPushCursor
- ldr r1, _0801B4CC @ =gUnknown_2023D74
- ldr r0, _0801B4D0 @ =gUnknown_81D94CE
- str r0, [r1]
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r4]
- b _0801BB5A
- .align 2, 0
-_0801B4B8: .4byte gUnknown_2023DD0
-_0801B4BC: .4byte 0xffffbfff
-_0801B4C0: .4byte gUnknown_2023E82
-_0801B4C4: .4byte gBattleScripting
-_0801B4C8: .4byte sBattler_AI
-_0801B4CC: .4byte gUnknown_2023D74
-_0801B4D0: .4byte gUnknown_81D94CE
-_0801B4D4:
- movs r5, 0
- ldr r0, _0801B50C @ =gBattlersCount
- ldrb r1, [r0]
- cmp r5, r1
- blt _0801B4E0
- b _0801BBAA
-_0801B4E0:
- ldr r0, _0801B510 @ =gBattleMons
- adds r4, r1, 0
- ldr r2, _0801B514 @ =gStatuses3
- adds r3, r0, 0
- adds r3, 0x20
- movs r6, 0x80
- lsls r6, 12
-_0801B4EE:
- ldrb r1, [r3]
- cmp r1, 0x16
- bne _0801B4FE
- ldr r0, [r2]
- ands r0, r6
- cmp r0, 0
- beq _0801B4FE
- b _0801BAAC
-_0801B4FE:
- adds r2, 0x4
- adds r3, 0x58
- adds r5, 0x1
- cmp r5, r4
- blt _0801B4EE
- b _0801BBAA
- .align 2, 0
-_0801B50C: .4byte gBattlersCount
-_0801B510: .4byte gBattleMons
-_0801B514: .4byte gStatuses3
-_0801B518:
- movs r5, 0
- ldr r0, _0801B5F4 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B524
- b _0801BBAA
-_0801B524:
- ldr r2, _0801B5F8 @ =gActiveBattler
- mov r8, r2
- ldr r3, _0801B5FC @ =gBattleMons
- adds r3, 0x20
- str r3, [sp, 0x1C]
- movs r4, 0
- str r4, [sp, 0x20]
-_0801B532:
- ldr r1, [sp, 0x1C]
- ldrb r0, [r1]
- cmp r0, 0x24
- beq _0801B53C
- b _0801B6D6
-_0801B53C:
- ldr r0, _0801B600 @ =gStatuses3
- ldr r2, [sp, 0x20]
- adds r0, r2, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 13
- ands r1, r0
- str r2, [sp, 0x18]
- cmp r1, 0
- bne _0801B552
- b _0801B6D6
-_0801B552:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerPosition
- movs r1, 0x1
- adds r6, r0, 0
- eors r6, r1
- ands r6, r1
- adds r0, r6, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r6, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0801B604 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r2, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0801B584
- b _0801B69C
-_0801B584:
- movs r3, 0x58
- adds r0, r4, 0
- muls r0, r3
- ldr r3, _0801B5FC @ =gBattleMons
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801B658
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B60C
- movs r1, 0x58
- adds r0, r7, 0
- muls r0, r1
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801B60C
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B60C
- str r2, [sp, 0x24]
- bl Random
- ldr r2, [sp, 0x24]
- adds r1, r2, 0
- ands r1, r0
- lsls r1, 1
- orrs r6, r1
- adds r0, r6, 0
- bl GetBattlerAtPosition
- mov r2, r8
- strb r0, [r2]
- ldrb r0, [r2]
- movs r3, 0x58
- muls r0, r3
- ldr r4, _0801B5FC @ =gBattleMons
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- ldr r1, [sp, 0x1C]
- strb r0, [r1]
- ldrb r0, [r2]
- muls r0, r3
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- ldr r2, _0801B608 @ =gLastUsedAbility
- strb r0, [r2]
- b _0801B6C4
- .align 2, 0
-_0801B5F4: .4byte gBattlersCount
-_0801B5F8: .4byte gActiveBattler
-_0801B5FC: .4byte gBattleMons
-_0801B600: .4byte gStatuses3
-_0801B604: .4byte gBattleTypeFlags
-_0801B608: .4byte gLastUsedAbility
-_0801B60C:
- ldr r3, _0801B650 @ =gBattleMons
- movs r2, 0x58
- adds r0, r4, 0
- muls r0, r2
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801B658
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B658
- mov r0, r8
- strb r4, [r0]
- adds r1, r5, 0
- muls r1, r2
- adds r1, r3
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- adds r1, 0x20
- strb r0, [r1]
- mov r1, r8
- ldrb r0, [r1]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- ldr r2, _0801B654 @ =gLastUsedAbility
- strb r0, [r2]
- b _0801B6C4
- .align 2, 0
-_0801B650: .4byte gBattleMons
-_0801B654: .4byte gLastUsedAbility
-_0801B658:
- ldr r3, _0801B698 @ =gBattleMons
- movs r2, 0x58
- adds r0, r7, 0
- muls r0, r2
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801B6CE
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B6CE
- mov r4, r8
- strb r7, [r4]
- adds r1, r5, 0
- muls r1, r2
- adds r1, r3
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- adds r1, 0x20
- strb r0, [r1]
- ldrb r0, [r4]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- b _0801B6C0
- .align 2, 0
-_0801B698: .4byte gBattleMons
-_0801B69C:
- mov r2, r8
- strb r4, [r2]
- movs r3, 0x58
- adds r0, r4, 0
- muls r0, r3
- ldr r4, _0801B6F0 @ =gBattleMons
- adds r0, r4
- adds r2, r0, 0
- adds r2, 0x20
- ldrb r1, [r2]
- cmp r1, 0
- beq _0801B6CE
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801B6CE
- ldr r0, [sp, 0x1C]
- strb r1, [r0]
- ldrb r0, [r2]
-_0801B6C0:
- ldr r1, _0801B6F4 @ =gLastUsedAbility
- strb r0, [r1]
-_0801B6C4:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801B6CE:
- mov r2, r9
- cmp r2, 0
- beq _0801B6D6
- b _0801BAC8
-_0801B6D6:
- ldr r3, [sp, 0x1C]
- adds r3, 0x58
- str r3, [sp, 0x1C]
- ldr r4, [sp, 0x20]
- adds r4, 0x4
- str r4, [sp, 0x20]
- adds r5, 0x1
- ldr r0, _0801B6F8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- bge _0801B6EE
- b _0801B532
-_0801B6EE:
- b _0801BBAA
- .align 2, 0
-_0801B6F0: .4byte gBattleMons
-_0801B6F4: .4byte gLastUsedAbility
-_0801B6F8: .4byte gBattlersCount
-_0801B6FC:
- movs r5, 0
- ldr r0, _0801B734 @ =gBattlersCount
- ldrb r1, [r0]
- cmp r5, r1
- blt _0801B708
- b _0801BBAA
-_0801B708:
- ldr r0, _0801B738 @ =gBattleMons
- adds r4, r1, 0
- ldr r2, _0801B73C @ =gStatuses3
- adds r3, r0, 0
- adds r3, 0x20
- movs r6, 0x80
- lsls r6, 12
-_0801B716:
- ldrb r1, [r3]
- cmp r1, 0x16
- bne _0801B726
- ldr r0, [r2]
- ands r0, r6
- cmp r0, 0
- beq _0801B726
- b _0801BB3C
-_0801B726:
- adds r2, 0x4
- adds r3, 0x58
- adds r5, 0x1
- cmp r5, r4
- blt _0801B716
- b _0801BBAA
- .align 2, 0
-_0801B734: .4byte gBattlersCount
-_0801B738: .4byte gBattleMons
-_0801B73C: .4byte gStatuses3
-_0801B740:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801B790 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B756
- b _0801BBAA
-_0801B756:
- ldr r0, _0801B794 @ =gBattleMons
- mov r8, r0
-_0801B75A:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- adds r4, r5, 0x1
- cmp r0, r6
- beq _0801B784
- movs r0, 0x58
- muls r0, r5
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- bne _0801B784
- ldr r0, _0801B798 @ =gLastUsedAbility
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B784:
- adds r5, r4, 0
- ldr r0, _0801B790 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B75A
- b _0801BBAA
- .align 2, 0
-_0801B790: .4byte gBattlersCount
-_0801B794: .4byte gBattleMons
-_0801B798: .4byte gLastUsedAbility
-_0801B79C:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801B7EC @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B7B2
- b _0801BBAA
-_0801B7B2:
- ldr r1, _0801B7F0 @ =gBattleMons
- mov r8, r1
-_0801B7B6:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- adds r4, r5, 0x1
- cmp r0, r6
- bne _0801B7E0
- movs r0, 0x58
- muls r0, r5
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- bne _0801B7E0
- ldr r0, _0801B7F4 @ =gLastUsedAbility
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B7E0:
- adds r5, r4, 0
- ldr r0, _0801B7EC @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B7B6
- b _0801BBAA
- .align 2, 0
-_0801B7EC: .4byte gBattlersCount
-_0801B7F0: .4byte gBattleMons
-_0801B7F4: .4byte gLastUsedAbility
-_0801B7F8:
- mov r2, r8
- ldrb r0, [r2]
- cmp r0, 0xFD
- beq _0801B820
- cmp r0, 0xFE
- beq _0801B858
- movs r5, 0
- ldr r0, _0801B818 @ =gBattlersCount
- adds r3, r0, 0
- ldrb r4, [r3]
- cmp r5, r4
- blt _0801B812
- b _0801BBAA
-_0801B812:
- ldr r2, _0801B81C @ =gBattleMons
- b _0801B890
- .align 2, 0
-_0801B818: .4byte gBattlersCount
-_0801B81C: .4byte gBattleMons
-_0801B820:
- movs r5, 0
- ldr r0, _0801B850 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B82C
- b _0801BBAA
-_0801B82C:
- ldr r3, _0801B854 @ =gStatuses3
- movs r2, 0x80
- lsls r2, 9
- adds r1, r0, 0
-_0801B834:
- lsls r0, r5, 2
- adds r0, r3
- ldr r0, [r0]
- ands r0, r2
- adds r4, r5, 0x1
- cmp r0, 0
- beq _0801B848
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B848:
- adds r5, r4, 0
- cmp r5, r1
- blt _0801B834
- b _0801BBAA
- .align 2, 0
-_0801B850: .4byte gBattlersCount
-_0801B854: .4byte gStatuses3
-_0801B858:
- movs r5, 0
- ldr r0, _0801B888 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B864
- b _0801BBAA
-_0801B864:
- ldr r3, _0801B88C @ =gStatuses3
- movs r2, 0x80
- lsls r2, 10
- adds r1, r0, 0
-_0801B86C:
- lsls r0, r5, 2
- adds r0, r3
- ldr r0, [r0]
- ands r0, r2
- adds r4, r5, 0x1
- cmp r0, 0
- beq _0801B880
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B880:
- adds r5, r4, 0
- cmp r5, r1
- blt _0801B86C
- b _0801BBAA
- .align 2, 0
-_0801B888: .4byte gBattlersCount
-_0801B88C: .4byte gStatuses3
-_0801B890:
- movs r0, 0x58
- muls r0, r5
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r5, 0x1
- cmp r0, r7
- bne _0801B8AA
- mov r0, r8
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B8AA:
- adds r5, r4, 0
- ldrb r1, [r3]
- cmp r5, r1
- blt _0801B890
- b _0801BBAA
-_0801B8B4:
- movs r5, 0
- ldr r0, _0801B8F0 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B8C0
- b _0801BBAA
-_0801B8C0:
- ldr r6, _0801B8F4 @ =gBattleMons
- adds r2, r0, 0
- movs r3, 0x58
-_0801B8C6:
- adds r0, r5, 0
- muls r0, r3
- adds r1, r0, r6
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r5, 0x1
- cmp r0, r7
- bne _0801B8E8
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801B8E8
- mov r0, r8
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B8E8:
- adds r5, r4, 0
- cmp r5, r2
- blt _0801B8C6
- b _0801BBAA
- .align 2, 0
-_0801B8F0: .4byte gBattlersCount
-_0801B8F4: .4byte gBattleMons
-_0801B8F8:
- ldr r0, _0801B908 @ =gLastUsedAbility
- strb r7, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- b _0801B94A
- .align 2, 0
-_0801B908: .4byte gLastUsedAbility
-_0801B90C:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801B99C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- bge _0801B94A
- ldr r4, _0801B9A0 @ =gBattleMons
-_0801B922:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r6
- beq _0801B940
- movs r0, 0x58
- muls r0, r5
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- beq _0801B8F8
-_0801B940:
- adds r5, 0x1
- ldr r0, _0801B99C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B922
-_0801B94A:
- mov r1, r9
- cmp r1, 0
- beq _0801B952
- b _0801BBB0
-_0801B952:
- movs r5, 0
- ldr r0, _0801B99C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r9, r0
- blt _0801B95E
- b _0801BBAA
-_0801B95E:
- ldr r2, _0801B9A0 @ =gBattleMons
- mov r8, r2
-_0801B962:
- movs r0, 0x58
- muls r0, r5
- add r0, r8
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r5, 0x1
- cmp r0, r7
- bne _0801B990
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r6
- bne _0801B990
- cmp r5, r10
- beq _0801B990
- ldr r0, _0801B9A4 @ =gLastUsedAbility
- strb r7, [r0]
- lsls r0, r4, 24
- lsrs r0, 24
- mov r9, r0
-_0801B990:
- adds r5, r4, 0
- ldr r0, _0801B99C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B962
- b _0801BBAA
- .align 2, 0
-_0801B99C: .4byte gBattlersCount
-_0801B9A0: .4byte gBattleMons
-_0801B9A4: .4byte gLastUsedAbility
-_0801B9A8:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801B9F8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B9BE
- b _0801BBAA
-_0801B9BE:
- ldr r4, _0801B9FC @ =gBattleMons
-_0801B9C0:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r6
- beq _0801B9EC
- movs r0, 0x58
- muls r0, r5
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- bne _0801B9EC
- ldr r0, _0801BA00 @ =gLastUsedAbility
- strb r7, [r0]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801B9EC:
- adds r5, 0x1
- ldr r0, _0801B9F8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801B9C0
- b _0801BBAA
- .align 2, 0
-_0801B9F8: .4byte gBattlersCount
-_0801B9FC: .4byte gBattleMons
-_0801BA00: .4byte gLastUsedAbility
-_0801BA04:
- mov r0, r10
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r0, _0801BA54 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801BA1A
- b _0801BBAA
-_0801BA1A:
- ldr r4, _0801BA58 @ =gBattleMons
-_0801BA1C:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r6
- bne _0801BA48
- movs r0, 0x58
- muls r0, r5
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r7
- bne _0801BA48
- ldr r0, _0801BA5C @ =gLastUsedAbility
- strb r7, [r0]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801BA48:
- adds r5, 0x1
- ldr r0, _0801BA54 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801BA1C
- b _0801BBAA
- .align 2, 0
-_0801BA54: .4byte gBattlersCount
-_0801BA58: .4byte gBattleMons
-_0801BA5C: .4byte gLastUsedAbility
-_0801BA60:
- ldr r0, _0801BA78 @ =gUnknown_81D92F8
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801BA7C @ =gBattleScripting
- strb r4, [r0, 0x17]
-_0801BA6A:
- ldr r0, _0801BA80 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x7F
- mov r1, r9
- subs r1, 0x1
- strb r1, [r0]
- b _0801BBAA
- .align 2, 0
-_0801BA78: .4byte gUnknown_81D92F8
-_0801BA7C: .4byte gBattleScripting
-_0801BA80: .4byte gBattleStruct
-_0801BA84:
- ldr r0, _0801BAA0 @ =gUnknown_81D92F8
- bl BattleScriptPushCursorAndCallback
- ldr r0, _0801BAA4 @ =gBattleScripting
- mov r3, r10
- strb r3, [r0, 0x17]
- ldr r0, _0801BAA8 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x7F
- mov r1, r9
- subs r1, 0x1
- strb r1, [r0]
- b _0801BBC6
- .align 2, 0
-_0801BAA0: .4byte gUnknown_81D92F8
-_0801BAA4: .4byte gBattleScripting
-_0801BAA8: .4byte gBattleStruct
-_0801BAAC:
- mov r4, r8
- strb r1, [r4]
- ldr r0, [r2]
- ldr r1, _0801BAC0 @ =0xfff7ffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801BAC4 @ =gUnknown_81D9307
- bl BattleScriptPushCursorAndCallback
- b _0801BB52
- .align 2, 0
-_0801BAC0: .4byte 0xfff7ffff
-_0801BAC4: .4byte gUnknown_81D9307
-_0801BAC8:
- ldr r0, _0801BB18 @ =gUnknown_81D92A1
- bl BattleScriptPushCursorAndCallback
- ldr r1, _0801BB1C @ =gStatuses3
- ldr r0, [sp, 0x18]
- adds r1, r0, r1
- ldr r0, [r1]
- ldr r2, _0801BB20 @ =0xffefffff
- ands r0, r2
- str r0, [r1]
- ldr r0, _0801BB24 @ =gBattleScripting
- strb r5, [r0, 0x17]
- ldr r1, _0801BB28 @ =gBattleTextBuff1
- movs r4, 0xFD
- strb r4, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- ldr r2, _0801BB2C @ =gActiveBattler
- ldrb r0, [r2]
- strb r0, [r1, 0x2]
- ldr r3, _0801BB30 @ =gBattlerPartyIndexes
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _0801BB34 @ =gBattleTextBuff2
- strb r4, [r1]
- movs r0, 0x9
- strb r0, [r1, 0x1]
- ldr r0, _0801BB38 @ =gLastUsedAbility
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r1, 0x3]
- b _0801BBAA
- .align 2, 0
-_0801BB18: .4byte gUnknown_81D92A1
-_0801BB1C: .4byte gStatuses3
-_0801BB20: .4byte 0xffefffff
-_0801BB24: .4byte gBattleScripting
-_0801BB28: .4byte gBattleTextBuff1
-_0801BB2C: .4byte gActiveBattler
-_0801BB30: .4byte gBattlerPartyIndexes
-_0801BB34: .4byte gBattleTextBuff2
-_0801BB38: .4byte gLastUsedAbility
-_0801BB3C:
- mov r3, r8
- strb r1, [r3]
- ldr r0, [r2]
- ldr r1, _0801BB68 @ =0xfff7ffff
- ands r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801BB6C @ =gUnknown_2023D74
- ldr r0, _0801BB70 @ =gUnknown_81D9310
- str r0, [r1]
-_0801BB52:
- ldr r0, _0801BB74 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xD8
- strb r5, [r0]
-_0801BB5A:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- b _0801BBAA
- .align 2, 0
-_0801BB68: .4byte 0xfff7ffff
-_0801BB6C: .4byte gUnknown_2023D74
-_0801BB70: .4byte gUnknown_81D9310
-_0801BB74: .4byte gBattleStruct
-_0801BB78:
- movs r5, 0
- ldr r0, _0801BBD8 @ =gBattlersCount
- ldrb r1, [r0]
- cmp r5, r1
- bge _0801BBAA
- ldr r0, _0801BBDC @ =gBattleMons
- adds r2, r1, 0
- adds r1, r0, 0
- adds r1, 0x20
- ldr r3, _0801BBE0 @ =gLastUsedAbility
-_0801BB8C:
- ldrb r0, [r1]
- cmp r0, r7
- bne _0801BBA2
- cmp r5, r10
- beq _0801BBA2
- strb r7, [r3]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801BBA2:
- adds r1, 0x58
- adds r5, 0x1
- cmp r5, r2
- blt _0801BB8C
-_0801BBAA:
- mov r4, r9
- cmp r4, 0
- beq _0801BBC6
-_0801BBB0:
- ldr r0, [sp, 0x4]
- cmp r0, 0xB
- bhi _0801BBC6
- ldr r1, _0801BBE0 @ =gLastUsedAbility
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _0801BBC6
- adds r1, r0, 0
- mov r0, r10
- bl sub_80C71D0
-_0801BBC6:
- mov r0, r9
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801BBD8: .4byte gBattlersCount
-_0801BBDC: .4byte gBattleMons
-_0801BBE0: .4byte gLastUsedAbility
- thumb_func_end AbilityBattleEffects
-
- thumb_func_start BattleScriptExecute
-BattleScriptExecute: @ 801BBE4
- ldr r1, _0801BC10 @ =gUnknown_2023D74
- str r0, [r1]
- ldr r0, _0801BC14 @ =gBattleResources
- ldr r0, [r0]
- ldr r2, [r0, 0xC]
- adds r3, r2, 0
- adds r3, 0x20
- ldrb r0, [r3]
- adds r1, r0, 0x1
- strb r1, [r3]
- lsls r0, 24
- lsrs r0, 22
- adds r2, r0
- ldr r1, _0801BC18 @ =gUnknown_3004F84
- ldr r0, [r1]
- str r0, [r2]
- ldr r0, _0801BC1C @ =RunBattleScriptCommands_PopCallbacksStack
- str r0, [r1]
- ldr r1, _0801BC20 @ =gUnknown_2023BE3
- movs r0, 0
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0801BC10: .4byte gUnknown_2023D74
-_0801BC14: .4byte gBattleResources
-_0801BC18: .4byte gUnknown_3004F84
-_0801BC1C: .4byte RunBattleScriptCommands_PopCallbacksStack
-_0801BC20: .4byte gUnknown_2023BE3
- thumb_func_end BattleScriptExecute
-
- thumb_func_start BattleScriptPushCursorAndCallback
-BattleScriptPushCursorAndCallback: @ 801BC24
- push {r4,lr}
- adds r4, r0, 0
- bl BattleScriptPushCursor
- ldr r0, _0801BC58 @ =gUnknown_2023D74
- str r4, [r0]
- ldr r0, _0801BC5C @ =gBattleResources
- ldr r0, [r0]
- ldr r2, [r0, 0xC]
- adds r3, r2, 0
- adds r3, 0x20
- ldrb r0, [r3]
- adds r1, r0, 0x1
- strb r1, [r3]
- lsls r0, 24
- lsrs r0, 22
- adds r2, r0
- ldr r1, _0801BC60 @ =gUnknown_3004F84
- ldr r0, [r1]
- str r0, [r2]
- ldr r0, _0801BC64 @ =sub_8015C74
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801BC58: .4byte gUnknown_2023D74
-_0801BC5C: .4byte gBattleResources
-_0801BC60: .4byte gUnknown_3004F84
-_0801BC64: .4byte sub_8015C74
- thumb_func_end BattleScriptPushCursorAndCallback
-
- thumb_func_start sub_801BC68
-sub_801BC68: @ 801BC68
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- movs r0, 0
- mov r10, r0
- movs r1, 0
- str r1, [sp, 0xC]
- add r0, sp, 0x4
- strb r1, [r0]
- ldr r4, _0801BCB4 @ =gUnknown_2023D68
- ldr r1, _0801BCB8 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0801BCC0
- ldr r1, _0801BCBC @ =gEnigmaBerries
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x7]
- ldrb r0, [r0, 0x1A]
- b _0801BCD4
- .align 2, 0
-_0801BCB4: .4byte gUnknown_2023D68
-_0801BCB8: .4byte gBattleMons
-_0801BCBC: .4byte gEnigmaBerries
-_0801BCC0:
- ldrh r0, [r4]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r4]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r0, 24
-_0801BCD4:
- mov r9, r0
- ldr r1, _0801BCFC @ =gBattleMons
- ldr r0, _0801BD00 @ =sBattler_AI
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- str r0, [sp, 0x14]
- cmp r0, 0xAF
- bne _0801BD08
- ldr r1, _0801BD04 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r3, [r0, 0x7]
- mov r8, r3
- ldrb r0, [r0, 0x1A]
- b _0801BD1E
- .align 2, 0
-_0801BCFC: .4byte gBattleMons
-_0801BD00: .4byte sBattler_AI
-_0801BD04: .4byte gEnigmaBerries
-_0801BD08:
- ldr r0, [sp, 0x14]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, [sp, 0x14]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r0, 24
-_0801BD1E:
- str r0, [sp, 0x10]
- ldr r2, _0801BD54 @ =gBattleMons
- ldr r0, _0801BD58 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r4, [r0, 0x2E]
- cmp r4, 0xAF
- beq _0801BD3E
- adds r0, r4, 0
- bl ItemId_GetHoldEffect
- adds r0, r4, 0
- bl ItemId_GetHoldEffectParam
-_0801BD3E:
- ldr r0, [sp, 0x8]
- cmp r0, 0x4
- bls _0801BD48
- bl _0801CFA6
-_0801BD48:
- lsls r0, 2
- ldr r1, _0801BD5C @ =_0801BD60
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801BD54: .4byte gBattleMons
-_0801BD58: .4byte gBattlerTarget
-_0801BD5C: .4byte _0801BD60
- .align 2, 0
-_0801BD60:
- .4byte _0801BD74
- .4byte _0801BE04
- .4byte _0801CFA6
- .4byte _0801C9FC
- .4byte _0801CE4C
-_0801BD74:
- cmp r5, 0x17
- beq _0801BD94
- cmp r5, 0x20
- beq _0801BD80
- bl _0801CFA6
-_0801BD80:
- ldr r0, _0801BD90 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x4A
- movs r1, 0x2
- strb r1, [r0]
- bl _0801CFA6
- .align 2, 0
-_0801BD90: .4byte gBattleStruct
-_0801BD94:
- ldr r1, _0801BDEC @ =gBattleMons
- mov r8, r1
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x18
- adds r1, r0
- movs r2, 0x6
- movs r3, 0x7
- mov r10, r3
-_0801BDAA:
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _0801BDB8
- strb r2, [r1]
- movs r5, 0x5
- str r5, [sp, 0xC]
-_0801BDB8:
- adds r1, 0x1
- movs r0, 0x1
- negs r0, r0
- add r10, r0
- mov r3, r10
- cmp r3, 0
- bge _0801BDAA
- ldr r5, [sp, 0xC]
- cmp r5, 0
- bne _0801BDD0
- bl _0801CFA6
-_0801BDD0:
- ldr r0, _0801BDF0 @ =gBattleScripting
- strb r7, [r0, 0x17]
- ldr r0, _0801BDF4 @ =gPotentialItemEffectBattler
- strb r7, [r0]
- ldr r1, _0801BDF8 @ =gActiveBattler
- ldr r0, _0801BDFC @ =sBattler_AI
- strb r7, [r0]
- strb r7, [r1]
- ldr r0, _0801BE00 @ =gUnknown_81D95D9
- bl BattleScriptExecute
- bl _0801CFA6
- .align 2, 0
-_0801BDEC: .4byte gBattleMons
-_0801BDF0: .4byte gBattleScripting
-_0801BDF4: .4byte gPotentialItemEffectBattler
-_0801BDF8: .4byte gActiveBattler
-_0801BDFC: .4byte sBattler_AI
-_0801BE00: .4byte gUnknown_81D95D9
-_0801BE04:
- ldr r1, _0801BE2C @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r0, r1
- ldrh r0, [r0, 0x28]
- mov r8, r1
- cmp r0, 0
- bne _0801BE18
- bl _0801CFA6
-_0801BE18:
- subs r0, r5, 0x1
- cmp r0, 0x2A
- bls _0801BE22
- bl _0801C952
-_0801BE22:
- lsls r0, 2
- ldr r1, _0801BE30 @ =_0801BE34
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801BE2C: .4byte gBattleMons
-_0801BE30: .4byte _0801BE34
- .align 2, 0
-_0801BE34:
- .4byte _0801BEE0
- .4byte _0801C6C0
- .4byte _0801C784
- .4byte _0801C6F0
- .4byte _0801C724
- .4byte _0801C754
- .4byte _0801BF2C
- .4byte _0801C7C0
- .4byte _0801C7F0
- .4byte _0801C0F8
- .4byte _0801C178
- .4byte _0801C1F4
- .4byte _0801C288
- .4byte _0801C31C
- .4byte _0801C3B0
- .4byte _0801C418
- .4byte _0801C46C
- .4byte _0801C4C0
- .4byte _0801C528
- .4byte _0801C58C
- .4byte _0801C5D8
- .4byte _0801C952
- .4byte _0801C02C
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C91C
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C952
- .4byte _0801C098
-_0801BEE0:
- movs r0, 0x58
- muls r0, r7
- mov r1, r8
- adds r2, r0, r1
- ldrh r0, [r2, 0x2C]
- ldrh r1, [r2, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801BEF6
- bl _0801C952
-_0801BEF6:
- cmp r6, 0
- beq _0801BEFE
- bl _0801C952
-_0801BEFE:
- ldr r4, _0801BF24 @ =gBattleMoveDamage
- mov r3, r9
- str r3, [r4]
- ldrh r3, [r2, 0x28]
- mov r5, r9
- adds r0, r3, r5
- ldrh r1, [r2, 0x2C]
- cmp r0, r1
- ble _0801BF14
- subs r0, r1, r3
- str r0, [r4]
-_0801BF14:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- ldr r0, _0801BF28 @ =gUnknown_81D95EF
- bl BattleScriptExecute
- b _0801C27E
- .align 2, 0
-_0801BF24: .4byte gBattleMoveDamage
-_0801BF28: .4byte gUnknown_81D95EF
-_0801BF2C:
- cmp r6, 0
- beq _0801BF34
- bl _0801C952
-_0801BF34:
- adds r0, r7, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0801BF58
- ldr r1, _0801BF50 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0801BF54 @ =gPlayerParty
- b _0801BF66
- .align 2, 0
-_0801BF50: .4byte gBattlerPartyIndexes
-_0801BF54: .4byte gPlayerParty
-_0801BF58:
- ldr r1, _0801BFD4 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0801BFD8 @ =gEnemyParty
-_0801BF66:
- adds r4, r1, r0
- movs r1, 0
- mov r10, r1
- add r5, sp, 0x4
-_0801BF6E:
- mov r1, r10
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- lsls r0, 16
- lsrs r6, r0, 16
- mov r1, r10
- adds r1, 0x11
- adds r0, r4, 0
- bl GetMonData
- strb r0, [r5]
- adds r0, r4, 0
- movs r1, 0x15
- bl GetMonData
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r6, 0
- beq _0801BF9E
- ldrb r0, [r5]
- cmp r0, 0
- beq _0801BFA8
-_0801BF9E:
- movs r2, 0x1
- add r10, r2
- mov r3, r10
- cmp r3, 0x3
- ble _0801BF6E
-_0801BFA8:
- mov r5, r10
- cmp r5, 0x4
- bne _0801BFB2
- bl _0801C952
-_0801BFB2:
- lsls r2, r5, 24
- lsrs r2, 24
- adds r0, r6, 0
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r2, r0, 24
- add r0, sp, 0x4
- ldrb r0, [r0]
- mov r3, r9
- adds r1, r0, r3
- cmp r1, r2
- ble _0801BFDC
- add r0, sp, 0x4
- strb r2, [r0]
- b _0801BFE0
- .align 2, 0
-_0801BFD4: .4byte gBattlerPartyIndexes
-_0801BFD8: .4byte gEnemyParty
-_0801BFDC:
- add r0, sp, 0x4
- strb r1, [r0]
-_0801BFE0:
- ldr r1, _0801C020 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r6, [r1, 0x2]
- lsrs r0, r6, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r0, _0801C024 @ =gUnknown_81D960C
- bl BattleScriptExecute
- mov r1, r10
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- add r5, sp, 0x4
- str r5, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetMonData
- ldr r0, _0801C028 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- movs r0, 0x3
- str r0, [sp, 0xC]
- bl _0801C95A
- .align 2, 0
-_0801C020: .4byte gBattleTextBuff1
-_0801C024: .4byte gUnknown_81D960C
-_0801C028: .4byte gActiveBattler
-_0801C02C:
- ldr r0, _0801C080 @ =gBattleMons
- movs r1, 0x58
- muls r1, r7
- adds r0, 0x18
- adds r1, r0
- movs r2, 0x6
- movs r3, 0x7
- mov r10, r3
-_0801C03C:
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _0801C04A
- strb r2, [r1]
- movs r5, 0x5
- str r5, [sp, 0xC]
-_0801C04A:
- adds r1, 0x1
- movs r0, 0x1
- negs r0, r0
- add r10, r0
- mov r3, r10
- cmp r3, 0
- bge _0801C03C
- movs r5, 0x8
- mov r10, r5
- ldr r0, [sp, 0xC]
- cmp r0, 0
- bne _0801C066
- bl _0801CFA6
-_0801C066:
- ldr r0, _0801C084 @ =gBattleScripting
- strb r7, [r0, 0x17]
- ldr r0, _0801C088 @ =gPotentialItemEffectBattler
- strb r7, [r0]
- ldr r1, _0801C08C @ =gActiveBattler
- ldr r0, _0801C090 @ =sBattler_AI
- strb r7, [r0]
- strb r7, [r1]
- ldr r0, _0801C094 @ =gUnknown_81D95D9
- bl BattleScriptExecute
- bl _0801C952
- .align 2, 0
-_0801C080: .4byte gBattleMons
-_0801C084: .4byte gBattleScripting
-_0801C088: .4byte gPotentialItemEffectBattler
-_0801C08C: .4byte gActiveBattler
-_0801C090: .4byte sBattler_AI
-_0801C094: .4byte gUnknown_81D95D9
-_0801C098:
- movs r0, 0x58
- muls r0, r7
- mov r2, r8
- adds r1, r0, r2
- ldrh r0, [r1, 0x28]
- ldrh r3, [r1, 0x2C]
- cmp r0, r3
- bcc _0801C0AC
- bl _0801C952
-_0801C0AC:
- cmp r6, 0
- beq _0801C0B4
- bl _0801C952
-_0801C0B4:
- ldr r3, _0801C0F0 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 4
- str r0, [r3]
- cmp r0, 0
- bne _0801C0C4
- movs r0, 0x1
- str r0, [r3]
-_0801C0C4:
- ldrh r2, [r1, 0x28]
- ldr r0, [r3]
- adds r0, r2, r0
- ldrh r1, [r1, 0x2C]
- cmp r0, r1
- ble _0801C0D4
- subs r0, r1, r2
- str r0, [r3]
-_0801C0D4:
- ldr r0, [r3]
- negs r0, r0
- str r0, [r3]
- ldr r0, _0801C0F4 @ =gUnknown_81D961C
- bl BattleScriptExecute
- movs r0, 0x4
- str r0, [sp, 0xC]
- adds r0, r7, 0
- adds r1, r5, 0
- bl sub_80C7208
- bl _0801C952
- .align 2, 0
-_0801C0F0: .4byte gBattleMoveDamage
-_0801C0F4: .4byte gUnknown_81D961C
-_0801C0F8:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- str r1, [sp, 0x18]
- adds r4, r1, 0
- add r4, r8
- ldrh r0, [r4, 0x2C]
- ldrh r1, [r4, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801C112
- bl _0801C952
-_0801C112:
- cmp r6, 0
- beq _0801C11A
- bl _0801C952
-_0801C11A:
- ldr r1, _0801C170 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- strb r6, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r5, _0801C174 @ =gBattleMoveDamage
- ldrh r0, [r4, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r5]
- cmp r0, 0
- bne _0801C13E
- movs r0, 0x1
- str r0, [r5]
-_0801C13E:
- ldrh r2, [r4, 0x28]
- ldr r0, [r5]
- adds r0, r2, r0
- ldrh r1, [r4, 0x2C]
- cmp r0, r1
- ble _0801C14E
- subs r0, r1, r2
- str r0, [r5]
-_0801C14E:
- ldr r0, [r5]
- negs r0, r0
- str r0, [r5]
- mov r0, r8
- adds r0, 0x48
- ldr r2, [sp, 0x18]
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0
- bl GetFlavorRelationByPersonality
- lsls r0, 24
- cmp r0, 0
- bge _0801C16C
- b _0801C2F8
-_0801C16C:
- b _0801C30C
- .align 2, 0
-_0801C170: .4byte gBattleTextBuff1
-_0801C174: .4byte gBattleMoveDamage
-_0801C178:
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- str r5, [sp, 0x1C]
- add r5, r8
- ldrh r0, [r5, 0x2C]
- ldrh r1, [r5, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801C190
- bl _0801C952
-_0801C190:
- cmp r6, 0
- beq _0801C198
- bl _0801C952
-_0801C198:
- ldr r1, _0801C1EC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- movs r6, 0x1
- strb r6, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r4, _0801C1F0 @ =gBattleMoveDamage
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801C1BC
- str r6, [r4]
-_0801C1BC:
- ldrh r2, [r5, 0x28]
- ldr r0, [r4]
- adds r0, r2, r0
- ldrh r1, [r5, 0x2C]
- cmp r0, r1
- ble _0801C1CC
- subs r0, r1, r2
- str r0, [r4]
-_0801C1CC:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- mov r0, r8
- adds r0, 0x48
- ldr r1, [sp, 0x1C]
- adds r0, r1, r0
- ldr r0, [r0]
- movs r1, 0x1
- bl GetFlavorRelationByPersonality
- lsls r0, 24
- cmp r0, 0
- bge _0801C1EA
- b _0801C38A
-_0801C1EA:
- b _0801C3A0
- .align 2, 0
-_0801C1EC: .4byte gBattleTextBuff1
-_0801C1F0: .4byte gBattleMoveDamage
-_0801C1F4:
- movs r0, 0x58
- adds r3, r7, 0
- muls r3, r0
- str r3, [sp, 0x20]
- adds r5, r3, 0
- add r5, r8
- ldrh r0, [r5, 0x2C]
- ldrh r1, [r5, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801C20C
- b _0801C952
-_0801C20C:
- cmp r6, 0
- beq _0801C212
- b _0801C952
-_0801C212:
- ldr r1, _0801C26C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r4, _0801C270 @ =gBattleMoveDamage
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801C238
- movs r0, 0x1
- str r0, [r4]
-_0801C238:
- ldrh r2, [r5, 0x28]
- ldr r0, [r4]
- adds r0, r2, r0
- ldrh r1, [r5, 0x2C]
- cmp r0, r1
- ble _0801C248
- subs r0, r1, r2
- str r0, [r4]
-_0801C248:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- mov r0, r8
- adds r0, 0x48
- ldr r5, [sp, 0x20]
- adds r0, r5, r0
- ldr r0, [r0]
- movs r1, 0x2
- bl GetFlavorRelationByPersonality
- lsls r0, 24
- cmp r0, 0
- bge _0801C278
- ldr r0, _0801C274 @ =gUnknown_81D964F
- bl BattleScriptExecute
- b _0801C27E
- .align 2, 0
-_0801C26C: .4byte gBattleTextBuff1
-_0801C270: .4byte gBattleMoveDamage
-_0801C274: .4byte gUnknown_81D964F
-_0801C278:
- ldr r0, _0801C284 @ =gUnknown_81D95EF
- bl BattleScriptExecute
-_0801C27E:
- movs r0, 0x4
- str r0, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C284: .4byte gUnknown_81D95EF
-_0801C288:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- str r1, [sp, 0x24]
- adds r5, r1, 0
- add r5, r8
- ldrh r0, [r5, 0x2C]
- ldrh r1, [r5, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801C2A0
- b _0801C952
-_0801C2A0:
- cmp r6, 0
- beq _0801C2A6
- b _0801C952
-_0801C2A6:
- ldr r1, _0801C300 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- movs r0, 0x3
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r4, _0801C304 @ =gBattleMoveDamage
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801C2CC
- movs r0, 0x1
- str r0, [r4]
-_0801C2CC:
- ldrh r2, [r5, 0x28]
- ldr r0, [r4]
- adds r0, r2, r0
- ldrh r1, [r5, 0x2C]
- cmp r0, r1
- ble _0801C2DC
- subs r0, r1, r2
- str r0, [r4]
-_0801C2DC:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- mov r0, r8
- adds r0, 0x48
- ldr r2, [sp, 0x24]
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x3
- bl GetFlavorRelationByPersonality
- lsls r0, 24
- cmp r0, 0
- bge _0801C30C
-_0801C2F8:
- ldr r0, _0801C308 @ =gUnknown_81D964F
- bl BattleScriptExecute
- b _0801C312
- .align 2, 0
-_0801C300: .4byte gBattleTextBuff1
-_0801C304: .4byte gBattleMoveDamage
-_0801C308: .4byte gUnknown_81D964F
-_0801C30C:
- ldr r0, _0801C318 @ =gUnknown_81D95EF
- bl BattleScriptExecute
-_0801C312:
- movs r3, 0x4
- str r3, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C318: .4byte gUnknown_81D95EF
-_0801C31C:
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- str r5, [sp, 0x28]
- add r5, r8
- ldrh r0, [r5, 0x2C]
- ldrh r1, [r5, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801C332
- b _0801C952
-_0801C332:
- cmp r6, 0
- beq _0801C338
- b _0801C952
-_0801C338:
- ldr r1, _0801C394 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- movs r0, 0x4
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r4, _0801C398 @ =gBattleMoveDamage
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801C35E
- movs r0, 0x1
- str r0, [r4]
-_0801C35E:
- ldrh r2, [r5, 0x28]
- ldr r0, [r4]
- adds r0, r2, r0
- ldrh r1, [r5, 0x2C]
- cmp r0, r1
- ble _0801C36E
- subs r0, r1, r2
- str r0, [r4]
-_0801C36E:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- mov r0, r8
- adds r0, 0x48
- ldr r1, [sp, 0x28]
- adds r0, r1, r0
- ldr r0, [r0]
- movs r1, 0x4
- bl GetFlavorRelationByPersonality
- lsls r0, 24
- cmp r0, 0
- bge _0801C3A0
-_0801C38A:
- ldr r0, _0801C39C @ =gUnknown_81D964F
- bl BattleScriptExecute
- b _0801C3A6
- .align 2, 0
-_0801C394: .4byte gBattleTextBuff1
-_0801C398: .4byte gBattleMoveDamage
-_0801C39C: .4byte gUnknown_81D964F
-_0801C3A0:
- ldr r0, _0801C3AC @ =gUnknown_81D95EF
- bl BattleScriptExecute
-_0801C3A6:
- movs r2, 0x4
- str r2, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C3AC: .4byte gUnknown_81D95EF
-_0801C3B0:
- movs r0, 0x58
- muls r0, r7
- mov r3, r8
- adds r5, r0, r3
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801C3C8
- b _0801C952
-_0801C3C8:
- cmp r6, 0
- beq _0801C3CE
- b _0801C952
-_0801C3CE:
- movs r0, 0x19
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801C3D8
- b _0801C952
-_0801C3D8:
- ldr r1, _0801C408 @ =gBattleTextBuff1
- movs r2, 0xFD
- strb r2, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- movs r0, 0x1
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r1, _0801C40C @ =gBattleTextBuff2
- strb r2, [r1]
- strb r6, [r1, 0x1]
- movs r0, 0xD2
- strb r0, [r1, 0x2]
- strb r6, [r1, 0x3]
- subs r0, 0xD3
- strb r0, [r1, 0x4]
- ldr r0, _0801C410 @ =gUnknown_2023D6E
- strb r7, [r0]
- ldr r1, _0801C414 @ =gBattleScripting
- movs r0, 0x11
- strb r0, [r1, 0x1A]
- movs r0, 0xF
- b _0801C56C
- .align 2, 0
-_0801C408: .4byte gBattleTextBuff1
-_0801C40C: .4byte gBattleTextBuff2
-_0801C410: .4byte gUnknown_2023D6E
-_0801C414: .4byte gBattleScripting
-_0801C418:
- movs r0, 0x58
- muls r0, r7
- mov r1, r8
- adds r5, r0, r1
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801C430
- b _0801C952
-_0801C430:
- cmp r6, 0
- beq _0801C436
- b _0801C952
-_0801C436:
- movs r0, 0x1A
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801C440
- b _0801C952
-_0801C440:
- ldr r1, _0801C460 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801C464 @ =gUnknown_2023D6E
- strb r7, [r0]
- ldr r1, _0801C468 @ =gBattleScripting
- movs r0, 0x12
- strb r0, [r1, 0x1A]
- movs r0, 0x10
- b _0801C506
- .align 2, 0
-_0801C460: .4byte gBattleTextBuff1
-_0801C464: .4byte gUnknown_2023D6E
-_0801C468: .4byte gBattleScripting
-_0801C46C:
- movs r0, 0x58
- muls r0, r7
- mov r3, r8
- adds r5, r0, r3
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801C484
- b _0801C952
-_0801C484:
- cmp r6, 0
- beq _0801C48A
- b _0801C952
-_0801C48A:
- movs r0, 0x1B
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801C494
- b _0801C952
-_0801C494:
- ldr r1, _0801C4B4 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- movs r0, 0x3
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801C4B8 @ =gUnknown_2023D6E
- strb r7, [r0]
- ldr r1, _0801C4BC @ =gBattleScripting
- movs r0, 0x13
- strb r0, [r1, 0x1A]
- movs r0, 0x11
- b _0801C56C
- .align 2, 0
-_0801C4B4: .4byte gBattleTextBuff1
-_0801C4B8: .4byte gUnknown_2023D6E
-_0801C4BC: .4byte gBattleScripting
-_0801C4C0:
- movs r0, 0x58
- muls r0, r7
- mov r1, r8
- adds r5, r0, r1
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801C4D8
- b _0801C952
-_0801C4D8:
- cmp r6, 0
- beq _0801C4DE
- b _0801C952
-_0801C4DE:
- movs r0, 0x1C
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801C4E8
- b _0801C952
-_0801C4E8:
- ldr r1, _0801C518 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- movs r0, 0x4
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801C51C @ =gUnknown_2023D6E
- strb r7, [r0]
- ldr r1, _0801C520 @ =gBattleScripting
- movs r0, 0x14
- strb r0, [r1, 0x1A]
- movs r0, 0x12
-_0801C506:
- strb r0, [r1, 0x10]
- strb r6, [r1, 0x11]
- ldr r0, _0801C524 @ =gUnknown_81D9679
- bl BattleScriptExecute
- movs r2, 0x5
- str r2, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C518: .4byte gBattleTextBuff1
-_0801C51C: .4byte gUnknown_2023D6E
-_0801C520: .4byte gBattleScripting
-_0801C524: .4byte gUnknown_81D9679
-_0801C528:
- movs r0, 0x58
- muls r0, r7
- mov r3, r8
- adds r5, r0, r3
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801C540
- b _0801C952
-_0801C540:
- cmp r6, 0
- beq _0801C546
- b _0801C952
-_0801C546:
- movs r0, 0x1D
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801C550
- b _0801C952
-_0801C550:
- ldr r1, _0801C57C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801C580 @ =gUnknown_2023D6E
- strb r7, [r0]
- ldr r1, _0801C584 @ =gBattleScripting
- movs r0, 0x15
- strb r0, [r1, 0x1A]
- movs r0, 0x13
-_0801C56C:
- strb r0, [r1, 0x10]
- strb r6, [r1, 0x11]
- ldr r0, _0801C588 @ =gUnknown_81D9679
- bl BattleScriptExecute
- movs r5, 0x5
- str r5, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C57C: .4byte gBattleTextBuff1
-_0801C580: .4byte gUnknown_2023D6E
-_0801C584: .4byte gBattleScripting
-_0801C588: .4byte gUnknown_81D9679
-_0801C58C:
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- mov r1, r8
- adds r0, r5, r1
- ldrh r4, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801C5A6
- b _0801C952
-_0801C5A6:
- cmp r6, 0
- beq _0801C5AC
- b _0801C952
-_0801C5AC:
- mov r0, r8
- adds r0, 0x50
- adds r1, r5, r0
- ldr r2, [r1]
- movs r3, 0x80
- lsls r3, 13
- adds r0, r2, 0
- ands r0, r3
- cmp r0, 0
- beq _0801C5C2
- b _0801C952
-_0801C5C2:
- orrs r2, r3
- str r2, [r1]
- ldr r0, _0801C5D4 @ =gUnknown_81D9694
- bl BattleScriptExecute
- movs r2, 0x2
- str r2, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C5D4: .4byte gUnknown_81D9694
-_0801C5D8:
- cmp r6, 0
- beq _0801C5DE
- b _0801C952
-_0801C5DE:
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- mov r3, r8
- adds r0, r5, r3
- ldrh r4, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801C5F8
- b _0801C952
-_0801C5F8:
- movs r0, 0
- mov r10, r0
- adds r0, r5, 0x1
- mov r1, r8
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xB
- ble _0801C628
- mov r0, r8
- adds r0, 0x19
- adds r1, r5, r0
-_0801C614:
- adds r1, 0x1
- movs r2, 0x1
- add r10, r2
- mov r3, r10
- cmp r3, 0x4
- bgt _0801C628
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- bgt _0801C614
-_0801C628:
- mov r5, r10
- cmp r5, 0x5
- bne _0801C630
- b _0801C952
-_0801C630:
- movs r0, 0x58
- muls r0, r7
- adds r4, r0, 0x1
- ldr r5, _0801C6A8 @ =gUnknown_2023BFC
-_0801C638:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- adds r0, r4
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xC
- beq _0801C638
- ldr r1, _0801C6AC @ =gBattleTextBuff1
- movs r2, 0
- movs r3, 0xFD
- strb r3, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- mov r0, r10
- adds r0, 0x1
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801C6B0 @ =gBattleTextBuff2
- strb r3, [r0]
- strb r2, [r0, 0x1]
- movs r1, 0xD1
- strb r1, [r0, 0x2]
- strb r2, [r0, 0x3]
- strb r2, [r0, 0x4]
- movs r1, 0xD2
- strb r1, [r0, 0x5]
- strb r2, [r0, 0x6]
- subs r1, 0xD3
- strb r1, [r0, 0x7]
- ldr r0, _0801C6B4 @ =gUnknown_2023D6E
- strb r7, [r0]
- ldr r1, _0801C6B8 @ =gBattleScripting
- mov r0, r10
- adds r0, 0x21
- strb r0, [r1, 0x1A]
- adds r0, 0x6
- strb r0, [r1, 0x10]
- strb r2, [r1, 0x11]
- ldr r0, _0801C6BC @ =gUnknown_81D9679
- bl BattleScriptExecute
- movs r0, 0x5
- str r0, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C6A8: .4byte gUnknown_2023BFC
-_0801C6AC: .4byte gBattleTextBuff1
-_0801C6B0: .4byte gBattleTextBuff2
-_0801C6B4: .4byte gUnknown_2023D6E
-_0801C6B8: .4byte gBattleScripting
-_0801C6BC: .4byte gUnknown_81D9679
-_0801C6C0:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x4C
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- bne _0801C6D8
- b _0801C952
-_0801C6D8:
- movs r0, 0x41
- negs r0, r0
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801C6EC @ =gUnknown_81D9531
- bl BattleScriptExecute
- movs r1, 0x1
- str r1, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C6EC: .4byte gUnknown_81D9531
-_0801C6F0:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x4C
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x88
- ands r0, r2
- cmp r0, 0
- bne _0801C708
- b _0801C952
-_0801C708:
- ldr r0, _0801C71C @ =0xfffff077
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801C720 @ =gUnknown_81D9549
- bl BattleScriptExecute
- movs r2, 0x1
- str r2, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C71C: .4byte 0xfffff077
-_0801C720: .4byte gUnknown_81D9549
-_0801C724:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x4C
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- bne _0801C73C
- b _0801C952
-_0801C73C:
- movs r0, 0x11
- negs r0, r0
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801C750 @ =gUnknown_81D9561
- bl BattleScriptExecute
- movs r3, 0x1
- str r3, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C750: .4byte gUnknown_81D9561
-_0801C754:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x4C
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- bne _0801C76C
- b _0801C952
-_0801C76C:
- movs r0, 0x21
- negs r0, r0
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801C780 @ =gUnknown_81D9579
- bl BattleScriptExecute
- movs r5, 0x1
- str r5, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C780: .4byte gUnknown_81D9579
-_0801C784:
- movs r0, 0x58
- adds r3, r7, 0
- muls r3, r0
- mov r0, r8
- adds r0, 0x4C
- adds r2, r3, r0
- ldr r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801C79C
- b _0801C952
-_0801C79C:
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- mov r1, r8
- adds r1, 0x50
- adds r1, r3, r1
- ldr r0, [r1]
- ldr r2, _0801C7B8 @ =0xf7ffffff
- ands r0, r2
- str r0, [r1]
- ldr r0, _0801C7BC @ =gUnknown_81D9591
- b _0801C906
- .align 2, 0
-_0801C7B8: .4byte 0xf7ffffff
-_0801C7BC: .4byte gUnknown_81D9591
-_0801C7C0:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x50
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x7
- ands r0, r2
- cmp r0, 0
- bne _0801C7D8
- b _0801C952
-_0801C7D8:
- movs r0, 0x8
- negs r0, r0
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801C7EC @ =gUnknown_81D95A9
- bl BattleScriptExecute
- movs r1, 0x2
- str r1, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C7EC: .4byte gUnknown_81D95A9
-_0801C7F0:
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- mov r0, r8
- adds r0, 0x4C
- adds r4, r5, r0
- ldr r2, [r4]
- ldrb r0, [r4]
- cmp r0, 0
- bne _0801C816
- mov r0, r8
- adds r0, 0x50
- adds r0, r5, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801C816
- b _0801C952
-_0801C816:
- movs r3, 0
- mov r10, r3
- movs r0, 0x88
- ands r2, r0
- cmp r2, 0
- beq _0801C82E
- ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8C0 @ =gUnknown_8250094
- bl StringCopy
- movs r0, 0x1
- mov r10, r0
-_0801C82E:
- ldr r0, [r4]
- movs r1, 0x7
- mov r9, r1
- ands r0, r1
- mov r6, r8
- adds r6, 0x50
- cmp r0, 0
- beq _0801C854
- adds r2, r5, r6
- ldr r0, [r2]
- ldr r1, _0801C8C4 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8C8 @ =gUnknown_825009C
- bl StringCopy
- movs r2, 0x1
- add r10, r2
-_0801C854:
- ldr r0, [r4]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801C86A
- ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8CC @ =gUnknown_82500A4
- bl StringCopy
- movs r3, 0x1
- add r10, r3
-_0801C86A:
- ldr r0, [r4]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801C880
- ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8D0 @ =gUnknown_82500AC
- bl StringCopy
- movs r0, 0x1
- add r10, r0
-_0801C880:
- ldr r0, [r4]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801C896
- ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8D4 @ =gUnknown_82500B4
- bl StringCopy
- movs r1, 0x1
- add r10, r1
-_0801C896:
- adds r0, r5, r6
- ldr r0, [r0]
- mov r2, r9
- ands r0, r2
- cmp r0, 0
- beq _0801C8AE
- ldr r0, _0801C8BC @ =gBattleTextBuff1
- ldr r1, _0801C8D8 @ =gUnknown_82500BC
- bl StringCopy
- movs r3, 0x1
- add r10, r3
-_0801C8AE:
- mov r5, r10
- cmp r5, 0x1
- bgt _0801C8E0
- ldr r1, _0801C8DC @ =gUnknown_2023E82
- movs r0, 0
- b _0801C8E4
- .align 2, 0
-_0801C8BC: .4byte gBattleTextBuff1
-_0801C8C0: .4byte gUnknown_8250094
-_0801C8C4: .4byte 0xf7ffffff
-_0801C8C8: .4byte gUnknown_825009C
-_0801C8CC: .4byte gUnknown_82500A4
-_0801C8D0: .4byte gUnknown_82500AC
-_0801C8D4: .4byte gUnknown_82500B4
-_0801C8D8: .4byte gUnknown_82500BC
-_0801C8DC: .4byte gUnknown_2023E82
-_0801C8E0:
- ldr r1, _0801C910 @ =gUnknown_2023E82
- movs r0, 0x1
-_0801C8E4:
- strb r0, [r1, 0x5]
- ldr r2, _0801C914 @ =gBattleMons
- movs r0, 0x58
- adds r3, r7, 0
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r3, r0
- movs r1, 0
- str r1, [r0]
- adds r2, 0x50
- adds r3, r2
- ldr r0, [r3]
- subs r1, 0x8
- ands r0, r1
- str r0, [r3]
- ldr r0, _0801C918 @ =gUnknown_81D95BF
-_0801C906:
- bl BattleScriptExecute
- movs r0, 0x1
- str r0, [sp, 0xC]
- b _0801C95A
- .align 2, 0
-_0801C910: .4byte gUnknown_2023E82
-_0801C914: .4byte gBattleMons
-_0801C918: .4byte gUnknown_81D95BF
-_0801C91C:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x50
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0xF0
- lsls r0, 12
- ands r0, r2
- cmp r0, 0
- beq _0801C952
- ldr r0, _0801C978 @ =0xfff0ffff
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801C97C @ =gBattleTextBuff1
- ldr r1, _0801C980 @ =gUnknown_82500C4
- bl StringCopy
- ldr r0, _0801C984 @ =gUnknown_81D95BF
- bl BattleScriptExecute
- ldr r1, _0801C988 @ =gUnknown_2023E82
- movs r0, 0
- strb r0, [r1, 0x5]
- movs r1, 0x2
- str r1, [sp, 0xC]
-_0801C952:
- ldr r2, [sp, 0xC]
- cmp r2, 0
- bne _0801C95A
- b _0801CFA6
-_0801C95A:
- ldr r0, _0801C98C @ =gBattleScripting
- strb r7, [r0, 0x17]
- ldr r0, _0801C990 @ =gPotentialItemEffectBattler
- strb r7, [r0]
- ldr r4, _0801C994 @ =gActiveBattler
- ldr r0, _0801C998 @ =sBattler_AI
- strb r7, [r0]
- strb r7, [r4]
- ldr r3, [sp, 0xC]
- cmp r3, 0x1
- beq _0801C99C
- cmp r3, 0x3
- beq _0801C9A2
- b _0801CFA6
- .align 2, 0
-_0801C978: .4byte 0xfff0ffff
-_0801C97C: .4byte gBattleTextBuff1
-_0801C980: .4byte gUnknown_82500C4
-_0801C984: .4byte gUnknown_81D95BF
-_0801C988: .4byte gUnknown_2023E82
-_0801C98C: .4byte gBattleScripting
-_0801C990: .4byte gPotentialItemEffectBattler
-_0801C994: .4byte gActiveBattler
-_0801C998: .4byte sBattler_AI
-_0801C99C:
- movs r0, 0x58
- muls r0, r7
- b _0801CE08
-_0801C9A2:
- ldr r4, _0801C9F0 @ =gBattleMons
- movs r0, 0x58
- adds r3, r7, 0
- muls r3, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _0801C9BE
- b _0801CFA6
-_0801C9BE:
- ldr r1, _0801C9F4 @ =gDisableStructs
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _0801C9F8 @ =gBitTable
- mov r5, r10
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0801C9DE
- b _0801CFA6
-_0801C9DE:
- adds r1, r5, r3
- adds r0, r4, 0
- adds r0, 0x24
- adds r1, r0
- add r0, sp, 0x4
- ldrb r0, [r0]
- strb r0, [r1]
- b _0801CFA6
- .align 2, 0
-_0801C9F0: .4byte gBattleMons
-_0801C9F4: .4byte gDisableStructs
-_0801C9F8: .4byte gBitTable
-_0801C9FC:
- movs r7, 0
- ldr r0, _0801CA2C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r7, r0
- bcc _0801CA08
- b _0801CFA6
-_0801CA08:
- ldr r4, _0801CA30 @ =gUnknown_2023D68
- ldr r1, _0801CA34 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0801CA3C
- ldr r1, _0801CA38 @ =gEnigmaBerries
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x7]
- b _0801CA4C
- .align 2, 0
-_0801CA2C: .4byte gBattlersCount
-_0801CA30: .4byte gUnknown_2023D68
-_0801CA34: .4byte gBattleMons
-_0801CA38: .4byte gEnigmaBerries
-_0801CA3C:
- ldrh r0, [r4]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r4]
- bl ItemId_GetHoldEffectParam
-_0801CA4C:
- subs r0, r5, 0x2
- cmp r0, 0x1A
- bls _0801CA54
- b _0801CDF0
-_0801CA54:
- lsls r0, 2
- ldr r1, _0801CA60 @ =_0801CA64
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801CA60: .4byte _0801CA64
- .align 2, 0
-_0801CA64:
- .4byte _0801CAD0
- .4byte _0801CBC0
- .4byte _0801CB0C
- .4byte _0801CB48
- .4byte _0801CB84
- .4byte _0801CDF0
- .4byte _0801CC08
- .4byte _0801CC9C
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CD90
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CDF0
- .4byte _0801CC44
-_0801CAD0:
- ldr r1, _0801CB00 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x4C
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0801CAE6
- b _0801CDF0
-_0801CAE6:
- movs r0, 0x41
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801CB04 @ =gUnknown_2023D74
- ldr r0, _0801CB08 @ =gUnknown_81D9537
- str r0, [r1]
- movs r0, 0x1
- str r0, [sp, 0xC]
- b _0801CDF6
- .align 2, 0
-_0801CB00: .4byte gBattleMons
-_0801CB04: .4byte gUnknown_2023D74
-_0801CB08: .4byte gUnknown_81D9537
-_0801CB0C:
- ldr r1, _0801CB38 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x4C
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _0801CB22
- b _0801CDF0
-_0801CB22:
- ldr r0, _0801CB3C @ =0xfffff077
- ands r1, r0
- str r1, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801CB40 @ =gUnknown_2023D74
- ldr r0, _0801CB44 @ =gUnknown_81D954F
- str r0, [r1]
- movs r1, 0x1
- str r1, [sp, 0xC]
- b _0801CDF6
- .align 2, 0
-_0801CB38: .4byte gBattleMons
-_0801CB3C: .4byte 0xfffff077
-_0801CB40: .4byte gUnknown_2023D74
-_0801CB44: .4byte gUnknown_81D954F
-_0801CB48:
- ldr r1, _0801CB78 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x4C
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0801CB5E
- b _0801CDF0
-_0801CB5E:
- movs r0, 0x11
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801CB7C @ =gUnknown_2023D74
- ldr r0, _0801CB80 @ =gUnknown_81D9567
- str r0, [r1]
- movs r2, 0x1
- str r2, [sp, 0xC]
- b _0801CDF6
- .align 2, 0
-_0801CB78: .4byte gBattleMons
-_0801CB7C: .4byte gUnknown_2023D74
-_0801CB80: .4byte gUnknown_81D9567
-_0801CB84:
- ldr r1, _0801CBB4 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x4C
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0801CB9A
- b _0801CDF0
-_0801CB9A:
- movs r0, 0x21
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801CBB8 @ =gUnknown_2023D74
- ldr r0, _0801CBBC @ =gUnknown_81D957F
- str r0, [r1]
- movs r3, 0x1
- str r3, [sp, 0xC]
- b _0801CDF6
- .align 2, 0
-_0801CBB4: .4byte gBattleMons
-_0801CBB8: .4byte gUnknown_2023D74
-_0801CBBC: .4byte gUnknown_81D957F
-_0801CBC0:
- ldr r2, _0801CBF8 @ =gBattleMons
- movs r0, 0x58
- adds r4, r7, 0
- muls r4, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r3, r4, r0
- ldr r1, [r3]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801CBDA
- b _0801CDF0
-_0801CBDA:
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r3]
- adds r2, 0x50
- adds r2, r4, r2
- ldr r0, [r2]
- ldr r1, _0801CBFC @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801CC00 @ =gUnknown_2023D74
- ldr r0, _0801CC04 @ =gUnknown_81D9597
- b _0801CD58
- .align 2, 0
-_0801CBF8: .4byte gBattleMons
-_0801CBFC: .4byte 0xf7ffffff
-_0801CC00: .4byte gUnknown_2023D74
-_0801CC04: .4byte gUnknown_81D9597
-_0801CC08:
- ldr r1, _0801CC38 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801CC1E
- b _0801CDF0
-_0801CC1E:
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801CC3C @ =gUnknown_2023D74
- ldr r0, _0801CC40 @ =gUnknown_81D95AF
- str r0, [r1]
- movs r0, 0x2
- str r0, [sp, 0xC]
- b _0801CDF6
- .align 2, 0
-_0801CC38: .4byte gBattleMons
-_0801CC3C: .4byte gUnknown_2023D74
-_0801CC40: .4byte gUnknown_81D95AF
-_0801CC44:
- ldr r1, _0801CC80 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0xF0
- lsls r0, 12
- ands r0, r1
- cmp r0, 0
- bne _0801CC5C
- b _0801CDF0
-_0801CC5C:
- ldr r0, _0801CC84 @ =0xfff0ffff
- ands r1, r0
- str r1, [r2]
- ldr r0, _0801CC88 @ =gBattleTextBuff1
- ldr r1, _0801CC8C @ =gUnknown_82500C4
- bl StringCopy
- bl BattleScriptPushCursor
- ldr r1, _0801CC90 @ =gUnknown_2023E82
- movs r0, 0
- strb r0, [r1, 0x5]
- ldr r1, _0801CC94 @ =gUnknown_2023D74
- ldr r0, _0801CC98 @ =gUnknown_81D95C5
- str r0, [r1]
- movs r1, 0x2
- str r1, [sp, 0xC]
- b _0801CDF6
- .align 2, 0
-_0801CC80: .4byte gBattleMons
-_0801CC84: .4byte 0xfff0ffff
-_0801CC88: .4byte gBattleTextBuff1
-_0801CC8C: .4byte gUnknown_82500C4
-_0801CC90: .4byte gUnknown_2023E82
-_0801CC94: .4byte gUnknown_2023D74
-_0801CC98: .4byte gUnknown_81D95C5
-_0801CC9C:
- ldr r4, _0801CD60 @ =gBattleMons
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- adds r0, r4, 0
- adds r0, 0x4C
- adds r6, r5, r0
- ldr r2, [r6]
- ldrb r0, [r6]
- cmp r0, 0
- bne _0801CCC4
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r5, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801CCC4
- b _0801CDF0
-_0801CCC4:
- movs r0, 0x88
- ands r2, r0
- cmp r2, 0
- beq _0801CCD4
- ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD68 @ =gUnknown_8250094
- bl StringCopy
-_0801CCD4:
- ldr r0, [r6]
- movs r2, 0x7
- mov r8, r2
- ands r0, r2
- adds r4, 0x50
- cmp r0, 0
- beq _0801CCF4
- adds r2, r5, r4
- ldr r0, [r2]
- ldr r1, _0801CD6C @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD70 @ =gUnknown_825009C
- bl StringCopy
-_0801CCF4:
- ldr r0, [r6]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801CD06
- ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD74 @ =gUnknown_82500A4
- bl StringCopy
-_0801CD06:
- ldr r0, [r6]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801CD18
- ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD78 @ =gUnknown_82500AC
- bl StringCopy
-_0801CD18:
- ldr r0, [r6]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801CD2A
- ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD7C @ =gUnknown_82500B4
- bl StringCopy
-_0801CD2A:
- adds r5, r4
- ldr r0, [r5]
- mov r3, r8
- ands r0, r3
- cmp r0, 0
- beq _0801CD3E
- ldr r0, _0801CD64 @ =gBattleTextBuff1
- ldr r1, _0801CD80 @ =gUnknown_82500BC
- bl StringCopy
-_0801CD3E:
- movs r4, 0
- str r4, [r6]
- ldr r0, [r5]
- movs r1, 0x8
- negs r1, r1
- ands r0, r1
- str r0, [r5]
- bl BattleScriptPushCursor
- ldr r0, _0801CD84 @ =gUnknown_2023E82
- strb r4, [r0, 0x5]
- ldr r1, _0801CD88 @ =gUnknown_2023D74
- ldr r0, _0801CD8C @ =gUnknown_81D95C5
-_0801CD58:
- str r0, [r1]
- movs r5, 0x1
- str r5, [sp, 0xC]
- b _0801CDF6
- .align 2, 0
-_0801CD60: .4byte gBattleMons
-_0801CD64: .4byte gBattleTextBuff1
-_0801CD68: .4byte gUnknown_8250094
-_0801CD6C: .4byte 0xf7ffffff
-_0801CD70: .4byte gUnknown_825009C
-_0801CD74: .4byte gUnknown_82500A4
-_0801CD78: .4byte gUnknown_82500AC
-_0801CD7C: .4byte gUnknown_82500B4
-_0801CD80: .4byte gUnknown_82500BC
-_0801CD84: .4byte gUnknown_2023E82
-_0801CD88: .4byte gUnknown_2023D74
-_0801CD8C: .4byte gUnknown_81D95C5
-_0801CD90:
- ldr r0, _0801CDDC @ =gBattleMons
- mov r8, r0
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x18
- adds r1, r0
- movs r2, 0x6
- movs r3, 0x7
- mov r10, r3
-_0801CDA6:
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _0801CDB4
- strb r2, [r1]
- movs r5, 0x5
- str r5, [sp, 0xC]
-_0801CDB4:
- adds r1, 0x1
- movs r0, 0x1
- negs r0, r0
- add r10, r0
- mov r3, r10
- cmp r3, 0
- bge _0801CDA6
- ldr r5, [sp, 0xC]
- cmp r5, 0
- beq _0801CE34
- ldr r0, _0801CDE0 @ =gBattleScripting
- strb r7, [r0, 0x17]
- ldr r0, _0801CDE4 @ =gPotentialItemEffectBattler
- strb r7, [r0]
- bl BattleScriptPushCursor
- ldr r1, _0801CDE8 @ =gUnknown_2023D74
- ldr r0, _0801CDEC @ =gUnknown_81D95DF
- str r0, [r1]
- b _0801CFA6
- .align 2, 0
-_0801CDDC: .4byte gBattleMons
-_0801CDE0: .4byte gBattleScripting
-_0801CDE4: .4byte gPotentialItemEffectBattler
-_0801CDE8: .4byte gUnknown_2023D74
-_0801CDEC: .4byte gUnknown_81D95DF
-_0801CDF0:
- ldr r0, [sp, 0xC]
- cmp r0, 0
- beq _0801CE34
-_0801CDF6:
- ldr r0, _0801CE24 @ =gBattleScripting
- strb r7, [r0, 0x17]
- ldr r0, _0801CE28 @ =gPotentialItemEffectBattler
- strb r7, [r0]
- ldr r4, _0801CE2C @ =gActiveBattler
- strb r7, [r4]
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
-_0801CE08:
- ldr r1, _0801CE30 @ =gUnknown_2023C30
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetMonData
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0801CFA6
- .align 2, 0
-_0801CE24: .4byte gBattleScripting
-_0801CE28: .4byte gPotentialItemEffectBattler
-_0801CE2C: .4byte gActiveBattler
-_0801CE30: .4byte gUnknown_2023C30
-_0801CE34:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0801CE48 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r7, r0
- bcs _0801CE44
- b _0801CA08
-_0801CE44:
- b _0801CFA6
- .align 2, 0
-_0801CE48: .4byte gBattlersCount
-_0801CE4C:
- ldr r7, _0801CE64 @ =gBattleMoveDamage
- ldr r0, [r7]
- cmp r0, 0
- bne _0801CE56
- b _0801CFA6
-_0801CE56:
- mov r1, r8
- cmp r1, 0x1E
- beq _0801CE68
- cmp r1, 0x3E
- beq _0801CF10
- b _0801CFA6
- .align 2, 0
-_0801CE64: .4byte gBattleMoveDamage
-_0801CE68:
- ldr r0, _0801CEF4 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801CE76
- b _0801CFA6
-_0801CE76:
- ldr r2, _0801CEF8 @ =gUnknown_2023ECC
- ldr r4, _0801CEFC @ =gBattlerTarget
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801CE9C
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801CE9C
- b _0801CFA6
-_0801CE9C:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r9
- bcs _0801CFA6
- ldr r2, _0801CF00 @ =gBattleMoves
- ldr r0, _0801CF04 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801CFA6
- ldr r2, _0801CF08 @ =gBattleMons
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801CFA6
- ldr r1, _0801CF0C @ =gUnknown_2023E82
- movs r0, 0x8
- strb r0, [r1, 0x3]
- bl BattleScriptPushCursor
- movs r0, 0
- movs r1, 0
- bl sub_801FF20
- bl BattleScriptPop
- b _0801CFA6
- .align 2, 0
-_0801CEF4: .4byte gMoveResultFlags
-_0801CEF8: .4byte gUnknown_2023ECC
-_0801CEFC: .4byte gBattlerTarget
-_0801CF00: .4byte gBattleMoves
-_0801CF04: .4byte gCurrentMove
-_0801CF08: .4byte gBattleMons
-_0801CF0C: .4byte gUnknown_2023E82
-_0801CF10:
- ldr r0, _0801CFB8 @ =gMoveResultFlags
- ldrb r0, [r0]
- movs r5, 0x29
- ands r5, r0
- cmp r5, 0
- bne _0801CFA6
- ldr r1, _0801CFBC @ =gUnknown_2023ECC
- ldr r4, _0801CFC0 @ =gBattlerTarget
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 2
- adds r6, r1, 0x4
- adds r0, r6
- ldr r1, [r0]
- cmp r1, 0
- beq _0801CFA6
- ldr r0, _0801CFC4 @ =0x0000ffff
- cmp r1, r0
- beq _0801CFA6
- ldr r0, _0801CFC8 @ =sBattler_AI
- ldrb r3, [r0]
- cmp r3, r2
- beq _0801CFA6
- ldr r2, _0801CFCC @ =gBattleMons
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r1, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- cmp r1, r0
- beq _0801CFA6
- cmp r1, 0
- beq _0801CFA6
- ldr r0, _0801CFD0 @ =gUnknown_2023D68
- mov r2, sp
- ldrh r2, [r2, 0x14]
- strh r2, [r0]
- ldr r0, _0801CFD4 @ =gPotentialItemEffectBattler
- strb r3, [r0]
- ldr r0, _0801CFD8 @ =gBattleScripting
- strb r3, [r0, 0x17]
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldr r1, [sp, 0x10]
- bl __divsi3
- negs r0, r0
- str r0, [r7]
- ldrb r1, [r4]
- cmp r0, 0
- bne _0801CF88
- movs r0, 0x1
- negs r0, r0
- str r0, [r7]
-_0801CF88:
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- str r5, [r0]
- bl BattleScriptPushCursor
- ldr r1, _0801CFDC @ =gUnknown_2023D74
- ldr r0, _0801CFE0 @ =gUnknown_81D9622
- str r0, [r1]
- ldr r0, [sp, 0xC]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0xC]
-_0801CFA6:
- ldr r0, [sp, 0xC]
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801CFB8: .4byte gMoveResultFlags
-_0801CFBC: .4byte gUnknown_2023ECC
-_0801CFC0: .4byte gBattlerTarget
-_0801CFC4: .4byte 0x0000ffff
-_0801CFC8: .4byte sBattler_AI
-_0801CFCC: .4byte gBattleMons
-_0801CFD0: .4byte gUnknown_2023D68
-_0801CFD4: .4byte gPotentialItemEffectBattler
-_0801CFD8: .4byte gBattleScripting
-_0801CFDC: .4byte gUnknown_2023D74
-_0801CFE0: .4byte gUnknown_81D9622
- thumb_func_end sub_801BC68
-
- thumb_func_start ClearFuryCutterDestinyBondGrudge
-ClearFuryCutterDestinyBondGrudge: @ 801CFE4
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0801D01C @ =gDisableStructs
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- movs r2, 0
- strb r2, [r1, 0x10]
- ldr r1, _0801D020 @ =gBattleMons
- movs r2, 0x58
- adds r3, r0, 0
- muls r3, r2
- adds r1, 0x50
- adds r3, r1
- ldr r1, [r3]
- ldr r2, _0801D024 @ =0xfdffffff
- ands r1, r2
- str r1, [r3]
- ldr r1, _0801D028 @ =gStatuses3
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r2, _0801D02C @ =0xffffbfff
- ands r1, r2
- str r1, [r0]
- bx lr
- .align 2, 0
-_0801D01C: .4byte gDisableStructs
-_0801D020: .4byte gBattleMons
-_0801D024: .4byte 0xfdffffff
-_0801D028: .4byte gStatuses3
-_0801D02C: .4byte 0xffffbfff
- thumb_func_end ClearFuryCutterDestinyBondGrudge
-
- thumb_func_start sub_801D030
-sub_801D030: @ 801D030
- push {lr}
- ldr r0, _0801D050 @ =gUnknown_2023BC8
- ldr r0, [r0]
- cmp r0, 0
- bne _0801D04C
- ldr r1, _0801D054 @ =gUnknown_825011C
- ldr r0, _0801D058 @ =gUnknown_2023D74
- ldr r0, [r0]
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
-_0801D04C:
- pop {r0}
- bx r0
- .align 2, 0
-_0801D050: .4byte gUnknown_2023BC8
-_0801D054: .4byte gUnknown_825011C
-_0801D058: .4byte gUnknown_2023D74
- thumb_func_end sub_801D030
-
- thumb_func_start GetMoveTarget
-GetMoveTarget: @ 801D05C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 24
- lsrs r0, r1, 24
- movs r5, 0
- cmp r0, 0
- beq _0801D07A
- subs r0, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- b _0801D086
-_0801D07A:
- ldr r1, _0801D098 @ =gBattleMoves
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r6, [r0, 0x6]
-_0801D086:
- cmp r6, 0x40
- bls _0801D08C
- b _0801D39C
-_0801D08C:
- lsls r0, r6, 2
- ldr r1, _0801D09C @ =_0801D0A0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801D098: .4byte gBattleMoves
-_0801D09C: .4byte _0801D0A0
- .align 2, 0
-_0801D0A0:
- .4byte _0801D1A4
- .4byte _0801D2A4
- .4byte _0801D398
- .4byte _0801D39C
- .4byte _0801D2BC
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D2A4
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D398
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D2A4
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D39C
- .4byte _0801D2A4
-_0801D1A4:
- ldr r0, _0801D284 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _0801D288 @ =gSideTimers
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r2, r0, r1
- ldrb r0, [r2, 0x8]
- cmp r0, 0
- beq _0801D1D6
- ldr r1, _0801D28C @ =gBattleMons
- ldrb r4, [r2, 0x9]
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801D1D6
- b _0801D2EC
-_0801D1D6:
- ldr r0, _0801D284 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r7, 1
- mov r8, r0
-_0801D1E6:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _0801D290 @ =gBattlersCount
- ldrb r1, [r1]
- bl __modsi3
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _0801D284 @ =sBattler_AI
- ldrb r3, [r6]
- cmp r5, r3
- beq _0801D1E6
- adds r0, r5, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- beq _0801D1E6
- ldr r0, _0801D294 @ =gAbsentBattlerFlags
- ldrb r2, [r0]
- ldr r1, _0801D298 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r1
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- bne _0801D1E6
- ldr r0, _0801D29C @ =gBattleMoves
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x2]
- cmp r0, 0xD
- beq _0801D234
- b _0801D39C
-_0801D234:
- ldrb r1, [r6]
- str r2, [sp]
- movs r0, 0x10
- movs r2, 0x1F
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801D24A
- b _0801D39C
-_0801D24A:
- ldr r2, _0801D28C @ =gBattleMons
- movs r1, 0x58
- adds r0, r5, 0
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1F
- bne _0801D25E
- b _0801D39C
-_0801D25E:
- movs r4, 0x2
- eors r5, r4
- adds r0, r5, 0
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r1, [r0]
- adds r0, r5, 0
- bl sub_80C71D0
- ldr r1, _0801D2A0 @ =gUnknown_2023ECC
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- orrs r1, r4
- strb r1, [r0]
- b _0801D39C
- .align 2, 0
-_0801D284: .4byte sBattler_AI
-_0801D288: .4byte gSideTimers
-_0801D28C: .4byte gBattleMons
-_0801D290: .4byte gBattlersCount
-_0801D294: .4byte gAbsentBattlerFlags
-_0801D298: .4byte gBitTable
-_0801D29C: .4byte gBattleMoves
-_0801D2A0: .4byte gUnknown_2023ECC
-_0801D2A4:
- ldr r0, _0801D2B8 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerPosition
- adds r1, r0, 0
- movs r2, 0x1
- movs r0, 0x1
- ands r0, r1
- eors r0, r2
- b _0801D34E
- .align 2, 0
-_0801D2B8: .4byte sBattler_AI
-_0801D2BC:
- ldr r0, _0801D2F0 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _0801D2F4 @ =gSideTimers
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r2, r0, r1
- ldrb r0, [r2, 0x8]
- cmp r0, 0
- beq _0801D2FC
- ldr r1, _0801D2F8 @ =gBattleMons
- ldrb r4, [r2, 0x9]
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801D2FC
-_0801D2EC:
- adds r5, r4, 0
- b _0801D39C
- .align 2, 0
-_0801D2F0: .4byte sBattler_AI
-_0801D2F4: .4byte gSideTimers
-_0801D2F8: .4byte gBattleMons
-_0801D2FC:
- ldr r0, _0801D330 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r4, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0801D378
- movs r0, 0x4
- ands r6, r0
- cmp r6, 0
- beq _0801D378
- ldr r0, _0801D334 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0801D33C
- bl Random
- adds r1, r4, 0
- ands r1, r0
- cmp r1, 0
- beq _0801D338
- movs r0, 0x1
- b _0801D34E
- .align 2, 0
-_0801D330: .4byte gBattleTypeFlags
-_0801D334: .4byte sBattler_AI
-_0801D338:
- movs r0, 0x3
- b _0801D34E
-_0801D33C:
- bl Random
- adds r1, r4, 0
- ands r1, r0
- cmp r1, 0
- beq _0801D34C
- movs r0, 0
- b _0801D34E
-_0801D34C:
- movs r0, 0x2
-_0801D34E:
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0801D370 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _0801D374 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0801D39C
- movs r0, 0x2
- eors r5, r0
- b _0801D39C
- .align 2, 0
-_0801D370: .4byte gAbsentBattlerFlags
-_0801D374: .4byte gBitTable
-_0801D378:
- ldr r0, _0801D394 @ =sBattler_AI
- ldrb r0, [r0]
- bl GetBattlerPosition
- adds r1, r0, 0
- movs r2, 0x1
- movs r0, 0x1
- ands r0, r1
- eors r0, r2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r5, r0, 24
- b _0801D39C
- .align 2, 0
-_0801D394: .4byte sBattler_AI
-_0801D398:
- ldr r0, _0801D3B8 @ =sBattler_AI
- ldrb r5, [r0]
-_0801D39C:
- ldr r0, _0801D3B8 @ =sBattler_AI
- ldrb r0, [r0]
- ldr r1, _0801D3BC @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- strb r5, [r0, 0xC]
- adds r0, r5, 0
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801D3B8: .4byte sBattler_AI
-_0801D3BC: .4byte gBattleStruct
- thumb_func_end GetMoveTarget
-
- thumb_func_start HasObedientBitSet
-HasObedientBitSet: @ 801D3C0
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0801D406
- ldr r0, _0801D40C @ =gBattlerPartyIndexes
- lsls r4, 1
- adds r5, r4, r0
- ldrh r0, [r5]
- movs r7, 0x64
- muls r0, r7
- ldr r6, _0801D410 @ =gPlayerParty
- adds r0, r6
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- movs r1, 0xCD
- lsls r1, 1
- cmp r0, r1
- beq _0801D414
- ldrh r0, [r5]
- muls r0, r7
- adds r0, r6
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0x97
- beq _0801D414
-_0801D406:
- movs r0, 0x1
- b _0801D42A
- .align 2, 0
-_0801D40C: .4byte gBattlerPartyIndexes
-_0801D410: .4byte gPlayerParty
-_0801D414:
- ldr r0, _0801D430 @ =gBattlerPartyIndexes
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0801D434 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x50
- movs r2, 0
- bl GetMonData
-_0801D42A:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801D430: .4byte gBattlerPartyIndexes
-_0801D434: .4byte gPlayerParty
- thumb_func_end HasObedientBitSet
-
- thumb_func_start sub_801D438
-sub_801D438: @ 801D438
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- movs r6, 0
- ldr r0, _0801D4F8 @ =gBattleTypeFlags
- ldr r0, [r0]
- ldr r1, _0801D4FC @ =0x00010002
- ands r0, r1
- cmp r0, 0
- bne _0801D4F4
- ldr r4, _0801D500 @ =sBattler_AI
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0801D4F4
- ldrb r0, [r4]
- bl HasObedientBitSet
- cmp r0, 0
- beq _0801D4BE
- ldr r2, _0801D504 @ =gBattleMons
- ldrb r1, [r4]
- movs r0, 0x58
- muls r1, r0
- adds r0, r2, 0
- adds r0, 0x54
- adds r0, r1, r0
- ldr r0, [r0]
- adds r2, 0x3C
- adds r1, r2
- bl IsOtherTrainer
- lsls r0, 24
- cmp r0, 0
- beq _0801D4F4
- ldr r0, _0801D508 @ =0x00000827
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _0801D4F4
- movs r6, 0xA
- ldr r0, _0801D50C @ =0x00000821
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0801D4A2
- movs r6, 0x1E
-_0801D4A2:
- ldr r0, _0801D510 @ =0x00000823
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0801D4B0
- movs r6, 0x32
-_0801D4B0:
- ldr r0, _0801D514 @ =0x00000825
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0801D4BE
- movs r6, 0x46
-_0801D4BE:
- ldr r5, _0801D504 @ =gBattleMons
- ldr r0, _0801D500 @ =sBattler_AI
- mov r8, r0
- ldrb r0, [r0]
- movs r7, 0x58
- muls r0, r7
- adds r0, r5
- adds r0, 0x2A
- ldrb r0, [r0]
- cmp r0, r6
- bls _0801D4F4
- bl Random
- movs r1, 0xFF
- ands r1, r0
- mov r2, r8
- ldrb r0, [r2]
- adds r2, r0, 0
- muls r2, r7
- adds r0, r2, r5
- adds r0, 0x2A
- ldrb r0, [r0]
- adds r0, r6
- muls r0, r1
- asrs r4, r0, 8
- cmp r4, r6
- bge _0801D518
-_0801D4F4:
- movs r0, 0
- b _0801D738
- .align 2, 0
-_0801D4F8: .4byte gBattleTypeFlags
-_0801D4FC: .4byte 0x00010002
-_0801D500: .4byte sBattler_AI
-_0801D504: .4byte gBattleMons
-_0801D508: .4byte 0x00000827
-_0801D50C: .4byte 0x00000821
-_0801D510: .4byte 0x00000823
-_0801D514: .4byte 0x00000825
-_0801D518:
- ldr r3, _0801D554 @ =gCurrentMove
- ldrh r0, [r3]
- cmp r0, 0x63
- bne _0801D52E
- adds r0, r5, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r1, [r0]
- ldr r2, _0801D558 @ =0xff7fffff
- ands r1, r2
- str r1, [r0]
-_0801D52E:
- mov r1, r8
- ldrb r0, [r1]
- muls r0, r7
- adds r1, r5, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801D564
- ldrh r0, [r3]
- cmp r0, 0xAD
- beq _0801D54E
- cmp r0, 0xD6
- bne _0801D564
-_0801D54E:
- ldr r1, _0801D55C @ =gUnknown_2023D74
- ldr r0, _0801D560 @ =gUnknown_81D94DA
- b _0801D6E2
- .align 2, 0
-_0801D554: .4byte gCurrentMove
-_0801D558: .4byte 0xff7fffff
-_0801D55C: .4byte gUnknown_2023D74
-_0801D560: .4byte gUnknown_81D94DA
-_0801D564:
- bl Random
- movs r1, 0xFF
- ands r1, r0
- ldr r2, _0801D608 @ =gBattleMons
- ldr r0, _0801D60C @ =sBattler_AI
- ldrb r3, [r0]
- movs r0, 0x58
- muls r0, r3
- adds r0, r2
- adds r0, 0x2A
- ldrb r0, [r0]
- adds r0, r6
- muls r0, r1
- asrs r4, r0, 8
- cmp r4, r6
- bge _0801D634
- ldr r0, _0801D610 @ =gCurrentMove
- ldrh r1, [r0]
- movs r0, 0x84
- lsls r0, 1
- cmp r1, r0
- beq _0801D634
- ldr r6, _0801D614 @ =gBitTable
- ldr r5, _0801D618 @ =gUnknown_2023D48
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- adds r0, r3, 0
- movs r2, 0xFF
- bl CheckMoveLimitations
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bne _0801D5B0
- b _0801D6D2
-_0801D5B0:
- ldr r2, _0801D61C @ =gUnknown_2023D49
- mov r8, r2
- movs r7, 0x3
-_0801D5B6:
- bl Random
- ands r0, r7
- mov r1, r8
- strb r0, [r1]
- strb r0, [r5]
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- bne _0801D5B6
- ldr r4, _0801D620 @ =gUnknown_2023D4E
- ldr r3, _0801D608 @ =gBattleMons
- ldr r0, _0801D618 @ =gUnknown_2023D48
- ldrb r0, [r0]
- lsls r0, 1
- ldr r1, _0801D60C @ =sBattler_AI
- ldrb r2, [r1]
- movs r1, 0x58
- muls r1, r2
- adds r0, r1
- adds r3, 0xC
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r4]
- ldr r1, _0801D624 @ =gUnknown_2023D74
- ldr r0, _0801D628 @ =gUnknown_81D94EA
- str r0, [r1]
- ldrh r0, [r4]
- movs r1, 0
- bl GetMoveTarget
- ldr r1, _0801D62C @ =gBattlerTarget
- strb r0, [r1]
- ldr r2, _0801D630 @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 14
- b _0801D732
- .align 2, 0
-_0801D608: .4byte gBattleMons
-_0801D60C: .4byte sBattler_AI
-_0801D610: .4byte gCurrentMove
-_0801D614: .4byte gBitTable
-_0801D618: .4byte gUnknown_2023D48
-_0801D61C: .4byte gUnknown_2023D49
-_0801D620: .4byte gUnknown_2023D4E
-_0801D624: .4byte gUnknown_2023D74
-_0801D628: .4byte gUnknown_81D94EA
-_0801D62C: .4byte gBattlerTarget
-_0801D630: .4byte gUnknown_2023DD0
-_0801D634:
- ldr r5, _0801D6B8 @ =gBattleMons
- ldr r2, _0801D6BC @ =sBattler_AI
- mov r8, r2
- ldrb r0, [r2]
- movs r7, 0x58
- muls r0, r7
- adds r0, r5
- adds r0, 0x2A
- ldrb r0, [r0]
- subs r0, r6
- lsls r0, 24
- lsrs r6, r0, 24
- bl Random
- movs r2, 0xFF
- adds r4, r2, 0
- ands r4, r0
- cmp r4, r6
- bge _0801D6CC
- mov r1, r8
- ldrb r0, [r1]
- adds r1, r0, 0
- muls r1, r7
- adds r0, r5, 0
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- ands r0, r2
- cmp r0, 0
- bne _0801D6CC
- adds r0, r1, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x48
- beq _0801D6CC
- cmp r0, 0xF
- beq _0801D6CC
- movs r2, 0
- ldr r0, _0801D6C0 @ =gBattlersCount
- ldrb r3, [r0]
- adds r7, r0, 0
- cmp r2, r3
- bge _0801D6AA
- ldr r0, [r5, 0x50]
- movs r1, 0x70
- ands r0, r1
- cmp r0, 0
- bne _0801D6AA
- adds r1, r5, 0
- adds r1, 0x50
- movs r5, 0x70
-_0801D69A:
- adds r1, 0x58
- adds r2, 0x1
- cmp r2, r3
- bge _0801D6AA
- ldr r0, [r1]
- ands r0, r5
- cmp r0, 0
- beq _0801D69A
-_0801D6AA:
- ldrb r7, [r7]
- cmp r2, r7
- bne _0801D6CC
- ldr r1, _0801D6C4 @ =gUnknown_2023D74
- ldr r0, _0801D6C8 @ =gUnknown_81D9504
- b _0801D6E2
- .align 2, 0
-_0801D6B8: .4byte gBattleMons
-_0801D6BC: .4byte sBattler_AI
-_0801D6C0: .4byte gBattlersCount
-_0801D6C4: .4byte gUnknown_2023D74
-_0801D6C8: .4byte gUnknown_81D9504
-_0801D6CC:
- subs r4, r6
- cmp r4, r6
- blt _0801D6F4
-_0801D6D2:
- bl Random
- ldr r2, _0801D6E8 @ =gUnknown_2023E82
- movs r1, 0x3
- ands r1, r0
- strb r1, [r2, 0x5]
- ldr r1, _0801D6EC @ =gUnknown_2023D74
- ldr r0, _0801D6F0 @ =gUnknown_81D94F2
-_0801D6E2:
- str r0, [r1]
- movs r0, 0x1
- b _0801D738
- .align 2, 0
-_0801D6E8: .4byte gUnknown_2023E82
-_0801D6EC: .4byte gUnknown_2023D74
-_0801D6F0: .4byte gUnknown_81D94F2
-_0801D6F4:
- ldr r4, _0801D744 @ =sBattler_AI
- ldrb r1, [r4]
- movs r0, 0x58
- muls r1, r0
- ldr r0, _0801D748 @ =gBattleMons
- adds r1, r0
- movs r0, 0x28
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- ldrb r0, [r4]
- str r0, [sp, 0x8]
- ldrb r0, [r4]
- str r0, [sp, 0xC]
- adds r0, r1, 0
- movs r2, 0x1
- movs r3, 0
- bl CalculateBaseDamage
- ldr r1, _0801D74C @ =gBattleMoveDamage
- str r0, [r1]
- ldr r1, _0801D750 @ =gBattlerTarget
- ldrb r0, [r4]
- strb r0, [r1]
- ldr r1, _0801D754 @ =gUnknown_2023D74
- ldr r0, _0801D758 @ =gUnknown_81D951B
- str r0, [r1]
- ldr r2, _0801D75C @ =gUnknown_2023DD0
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
-_0801D732:
- orrs r0, r1
- str r0, [r2]
- movs r0, 0x2
-_0801D738:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801D744: .4byte sBattler_AI
-_0801D748: .4byte gBattleMons
-_0801D74C: .4byte gBattleMoveDamage
-_0801D750: .4byte gBattlerTarget
-_0801D754: .4byte gUnknown_2023D74
-_0801D758: .4byte gUnknown_81D951B
-_0801D75C: .4byte gUnknown_2023DD0
- thumb_func_end sub_801D438
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_util2.s b/asm/battle_util2.s
deleted file mode 100644
index 8cfbe3120..000000000
--- a/asm/battle_util2.s
+++ /dev/null
@@ -1,333 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_802E03C
-sub_802E03C: @ 802E03C
- push {r4,r5,lr}
- ldr r4, _0802E118 @ =gBattleTypeFlags
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _0802E050
- bl sub_815DA54
-_0802E050:
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 9
- ands r0, r1
- cmp r0, 0
- beq _0802E06E
- ldr r5, _0802E11C @ =gUnknown_3005EE0
- movs r4, 0x3
-_0802E060:
- movs r0, 0x8
- bl AllocZeroed
- stm r5!, {r0}
- subs r4, 0x1
- cmp r4, 0
- bge _0802E060
-_0802E06E:
- ldr r4, _0802E120 @ =gBattleStruct
- movs r0, 0x80
- lsls r0, 2
- bl AllocZeroed
- str r0, [r4]
- ldr r4, _0802E124 @ =gBattleResources
- movs r0, 0x20
- bl AllocZeroed
- str r0, [r4]
- movs r0, 0xA0
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1]
- movs r0, 0x10
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x4]
- movs r0, 0x24
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x8]
- movs r0, 0x24
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0xC]
- movs r0, 0xC
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x10]
- movs r0, 0x1C
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x14]
- movs r0, 0x30
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x18]
- movs r0, 0x24
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x1C]
- ldr r4, _0802E128 @ =gUnknown_2023FEC
- movs r5, 0x80
- lsls r5, 5
- adds r0, r5, 0
- bl AllocZeroed
- str r0, [r4]
- ldr r4, _0802E12C @ =gUnknown_2023FF0
- adds r0, r5, 0
- bl AllocZeroed
- str r0, [r4]
- ldr r4, _0802E130 @ =gUnknown_2022BB8
- movs r0, 0x80
- lsls r0, 6
- bl AllocZeroed
- str r0, [r4]
- ldr r4, _0802E134 @ =gUnknown_2022BBC
- adds r0, r5, 0
- bl AllocZeroed
- adds r1, r0, 0
- str r1, [r4]
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- movs r0, 0x2
- bl SetBgTilemapBuffer
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E118: .4byte gBattleTypeFlags
-_0802E11C: .4byte gUnknown_3005EE0
-_0802E120: .4byte gBattleStruct
-_0802E124: .4byte gBattleResources
-_0802E128: .4byte gUnknown_2023FEC
-_0802E12C: .4byte gUnknown_2023FF0
-_0802E130: .4byte gUnknown_2022BB8
-_0802E134: .4byte gUnknown_2022BBC
- thumb_func_end sub_802E03C
-
- thumb_func_start sub_802E138
-sub_802E138: @ 802E138
- push {r4-r6,lr}
- ldr r4, _0802E208 @ =gBattleTypeFlags
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _0802E14C
- bl sub_815DBDC
-_0802E14C:
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 9
- ands r0, r1
- cmp r0, 0
- beq _0802E16C
- ldr r5, _0802E20C @ =gUnknown_3005EE0
- movs r6, 0
- movs r4, 0x3
-_0802E15E:
- ldr r0, [r5]
- bl Free
- stm r5!, {r6}
- subs r4, 0x1
- cmp r4, 0
- bge _0802E15E
-_0802E16C:
- ldr r6, _0802E210 @ =gBattleResources
- ldr r0, [r6]
- cmp r0, 0
- beq _0802E200
- ldr r4, _0802E214 @ =gBattleStruct
- ldr r0, [r4]
- bl Free
- movs r5, 0
- str r5, [r4]
- ldr r0, [r6]
- ldr r0, [r0]
- bl Free
- ldr r0, [r6]
- str r5, [r0]
- ldr r0, [r0, 0x4]
- bl Free
- ldr r0, [r6]
- str r5, [r0, 0x4]
- ldr r0, [r0, 0x8]
- bl Free
- ldr r0, [r6]
- str r5, [r0, 0x8]
- ldr r0, [r0, 0xC]
- bl Free
- ldr r0, [r6]
- str r5, [r0, 0xC]
- ldr r0, [r0, 0x10]
- bl Free
- ldr r0, [r6]
- str r5, [r0, 0x10]
- ldr r0, [r0, 0x14]
- bl Free
- ldr r0, [r6]
- str r5, [r0, 0x14]
- ldr r0, [r0, 0x18]
- bl Free
- ldr r0, [r6]
- str r5, [r0, 0x18]
- ldr r0, [r0, 0x1C]
- bl Free
- ldr r0, [r6]
- str r5, [r0, 0x1C]
- bl Free
- str r5, [r6]
- ldr r4, _0802E218 @ =gUnknown_2023FEC
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- ldr r4, _0802E21C @ =gUnknown_2023FF0
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- ldr r4, _0802E220 @ =gUnknown_2022BB8
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- ldr r4, _0802E224 @ =gUnknown_2022BBC
- ldr r0, [r4]
- bl Free
- str r5, [r4]
-_0802E200:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E208: .4byte gBattleTypeFlags
-_0802E20C: .4byte gUnknown_3005EE0
-_0802E210: .4byte gBattleResources
-_0802E214: .4byte gBattleStruct
-_0802E218: .4byte gUnknown_2023FEC
-_0802E21C: .4byte gUnknown_2023FF0
-_0802E220: .4byte gUnknown_2022BB8
-_0802E224: .4byte gUnknown_2022BBC
- thumb_func_end sub_802E138
-
- thumb_func_start sub_802E228
-sub_802E228: @ 802E228
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0802E26C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802E274
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x3
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r2, _0802E270 @ =gBattleMons
- movs r0, 0x58
- adds r1, r3, 0
- muls r1, r0
- adds r1, r2
- adds r1, 0x2A
- muls r0, r4
- adds r0, r2
- adds r0, 0x2A
- ldrb r1, [r1]
- ldrb r0, [r0]
- cmp r1, r0
- bls _0802E27E
- adds r4, r3, 0
- b _0802E27E
- .align 2, 0
-_0802E26C: .4byte gBattleTypeFlags
-_0802E270: .4byte gBattleMons
-_0802E274:
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r4, r0, 24
-_0802E27E:
- ldr r2, _0802E2C0 @ =gBattleMons
- movs r1, 0x58
- adds r0, r4, 0
- muls r0, r1
- adds r0, r2
- adds r3, r0, 0
- adds r3, 0x2A
- adds r0, r5, 0
- muls r0, r1
- adds r0, r2
- adds r1, r0, 0
- adds r1, 0x2A
- ldrb r0, [r3]
- ldrb r2, [r1]
- cmp r0, r2
- bls _0802E2EC
- ldrb r1, [r1]
- subs r0, r1
- cmp r0, 0x1D
- ble _0802E2CC
- ldr r1, _0802E2C4 @ =gBattlerPartyIndexes
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802E2C8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x9
- bl AdjustFriendship
- b _0802E302
- .align 2, 0
-_0802E2C0: .4byte gBattleMons
-_0802E2C4: .4byte gBattlerPartyIndexes
-_0802E2C8: .4byte gPlayerParty
-_0802E2CC:
- ldr r1, _0802E2E4 @ =gBattlerPartyIndexes
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802E2E8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x7
- bl AdjustFriendship
- b _0802E302
- .align 2, 0
-_0802E2E4: .4byte gBattlerPartyIndexes
-_0802E2E8: .4byte gPlayerParty
-_0802E2EC:
- ldr r1, _0802E308 @ =gBattlerPartyIndexes
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802E30C @ =gPlayerParty
- adds r0, r1
- movs r1, 0x7
- bl AdjustFriendship
-_0802E302:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E308: .4byte gBattlerPartyIndexes
-_0802E30C: .4byte gPlayerParty
- thumb_func_end sub_802E228
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/berry_crush_2.s b/asm/berry_crush_2.s
index f775bd8dc..fedf89c50 100644
--- a/asm/berry_crush_2.s
+++ b/asm/berry_crush_2.s
@@ -146,7 +146,7 @@ _0814BC44:
bl sub_80FA42C
b _0814BC66
_0814BC4A:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _0814BC66
@@ -362,7 +362,7 @@ _0814BDCC:
bl sub_80FA42C
b _0814BDFC
_0814BDD2:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814BE02
@@ -497,7 +497,7 @@ _0814BED4:
bl sub_80FA42C
b _0814BFC0
_0814BEDA:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814BFC6
@@ -519,7 +519,7 @@ _0814BEDA:
bl SendBlock
b _0814BFC0
_0814BF0A:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814BFC6
@@ -653,7 +653,7 @@ _0814C008:
bl sub_80FA42C
b _0814C108
_0814C01A:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814C10E
@@ -725,7 +725,7 @@ _0814C080:
.align 2, 0
_0814C0AC: .4byte sub_814DB84
_0814C0B0:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814C10E
@@ -751,7 +751,7 @@ _0814C0D2:
bl sub_80FA42C
b _0814C108
_0814C0E4:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814C10E
@@ -907,7 +907,7 @@ _0814C1FC:
bl sub_80FA42C
b _0814C23C
_0814C21E:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814C242
@@ -951,7 +951,7 @@ _0814C262:
beq _0814C298
b _0814C2EC
_0814C26C:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814C2F2
@@ -972,7 +972,7 @@ _0814C292:
bl sub_80FA42C
b _0814C2EC
_0814C298:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814C2F2
@@ -2070,7 +2070,7 @@ _0814CADA:
strh r0, [r4, 0x10]
b _0814CB12
_0814CAF4:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814CB18
@@ -2172,7 +2172,7 @@ _0814CB8A:
bl SetGpuReg
b _0814CBFC
_0814CBBC:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814CC02
@@ -2273,7 +2273,7 @@ _0814CC72:
bl SendBlock
b _0814CF8E
_0814CC8A:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _0814CC96
@@ -2618,7 +2618,7 @@ _0814CF24:
bl SendBlock
b _0814CF8E
_0814CF30:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814CF94
@@ -2849,7 +2849,7 @@ _0814D100:
bl sub_80FA42C
b _0814D178
_0814D106:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814D17E
@@ -3031,7 +3031,7 @@ _0814D260:
bl sub_80FA42C
b _0814D30C
_0814D266:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814D312
@@ -3047,7 +3047,7 @@ _0814D266:
bl SendBlock
b _0814D30C
_0814D288:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814D312
@@ -3319,7 +3319,7 @@ _0814D482:
bl sub_80FA42C
b _0814D4B8
_0814D488:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814D4BE
diff --git a/asm/berry_crush_3.s b/asm/berry_crush_3.s
index b10f29f8d..51657f296 100644
--- a/asm/berry_crush_3.s
+++ b/asm/berry_crush_3.s
@@ -236,10 +236,10 @@ _0814D7E8: .4byte gUnknown_846ED90
_0814D7EC: .4byte gUnknown_846EEC0
_0814D7F0: .4byte gUnknown_846F058
_0814D7F4:
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
adds r0, r5, 0
bl sub_814ECE0
ldr r0, _0814D82C @ =gSpriteCoordOffsetY
@@ -341,7 +341,7 @@ _0814D8D4:
bl sub_80FA42C
b _0814D9BA
_0814D8DA:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814D9C0
diff --git a/asm/bug.s b/asm/bug.s
index 6970411d1..de99118a2 100644
--- a/asm/bug.s
+++ b/asm/bug.s
@@ -9,7 +9,7 @@
sub_80B3FAC: @ 80B3FAC
push {r4-r6,lr}
adds r6, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B3FD8
@@ -72,7 +72,7 @@ _080B4008:
strh r0, [r6, 0x2E]
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
@@ -80,13 +80,13 @@ _080B4008:
strh r0, [r6, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
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
@@ -105,7 +105,7 @@ _080B4078: .4byte DestroyAnimSprite
sub_80B407C: @ 80B407C
push {r4-r6,lr}
adds r6, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B40A0
@@ -156,17 +156,17 @@ _080B40BC:
strh r0, [r6, 0x2E]
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
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
@@ -185,7 +185,7 @@ _080B4124: .4byte DestroyAnimSprite
sub_80B4128: @ 80B4128
push {r4,r5,lr}
adds r5, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B4144
@@ -214,13 +214,13 @@ _080B4144:
ldr r4, _080B4188 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -484,7 +484,7 @@ sub_80B4364: @ 80B4364
push {r4-r7,lr}
sub sp, 0x4
adds r7, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B4384
@@ -513,7 +513,7 @@ _080B4384:
negs r0, r0
strh r0, [r1, 0x6]
_080B43A6:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B43F6
@@ -556,7 +556,7 @@ _080B43F6:
ldr r5, _080B4488 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
ldr r6, _080B4484 @ =gBattleAnimArgs
@@ -567,7 +567,7 @@ _080B43F6:
lsrs r4, 16
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -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
@@ -643,7 +643,7 @@ _080B44B4:
ldr r5, _080B4508 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
@@ -651,7 +651,7 @@ _080B44B4:
strh r0, [r6, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x6]
@@ -801,13 +801,13 @@ _080B45F4:
_080B45F6:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x12
diff --git a/asm/cable_club.s b/asm/cable_club.s
index 28cbfc49c..a20b4310c 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -439,7 +439,7 @@ sub_8080A4C: @ 8080A4C
adds r4, r0, r1
movs r0, 0
strh r0, [r4, 0xE]
- bl sub_800AA48
+ bl IsLinkMaster
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -644,7 +644,7 @@ _08080C3C:
beq _08080C5C
movs r0, 0x5
bl PlaySE
- bl sub_800A5BC
+ bl CheckShouldAdvanceLinkState
ldr r0, _08080C64 @ =gTasks
lsls r1, r6, 2
adds r1, r6
@@ -1367,7 +1367,7 @@ sub_80811FC: @ 80811FC
ldrsh r2, [r4, r3]
cmp r2, 0
bne _08081230
- bl sub_8009804
+ bl OpenLink
bl sub_800A270
ldr r0, _0808122C @ =sub_8081A90
movs r1, 0x50
@@ -1405,7 +1405,7 @@ sub_808124C: @ 808124C
lsrs r0, 24
cmp r0, 0x1
bls _08081292
- bl sub_800AA48
+ bl IsLinkMaster
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1450,7 +1450,7 @@ sub_80812A0: @ 80812A0
lsls r0, 24
cmp r4, r0
bne _080812CA
- bl sub_800A5BC
+ bl CheckShouldAdvanceLinkState
ldr r0, _080812D0 @ =gTasks
lsls r1, r5, 2
adds r1, r5
@@ -1790,7 +1790,7 @@ _08081560:
strh r0, [r6]
b _0808160A
_0808156A:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0808160A
@@ -1901,7 +1901,7 @@ _08081640:
strb r0, [r4]
b _0808165C
_0808164C:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0808165C
@@ -2283,7 +2283,7 @@ _08081950:
.align 2, 0
_08081958: .4byte gUnknown_2031DA4
_0808195C:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08081970
diff --git a/asm/credits.s b/asm/credits.s
deleted file mode 100644
index e52275e77..000000000
--- a/asm/credits.s
+++ /dev/null
@@ -1,2222 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80F39B4
-sub_80F39B4: @ 80F39B4
- push {r4,lr}
- ldr r4, _080F39E0 @ =gUnknown_203AB40
- movs r0, 0x20
- bl AllocZeroed
- str r0, [r4]
- bl ResetTasks
- ldr r1, [r4]
- movs r0, 0xFF
- strb r0, [r1, 0x2]
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1, 0x1D]
- bl ResetSpriteData
- ldr r0, _080F39E4 @ =sub_80F39E8
- bl SetMainCallback2
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F39E0: .4byte gUnknown_203AB40
-_080F39E4: .4byte sub_80F39E8
- thumb_func_end sub_80F39B4
-
- thumb_func_start sub_80F39E8
-sub_80F39E8: @ 80F39E8
- push {lr}
- bl sub_80F3BD0
- adds r1, r0, 0
- cmp r1, 0x1
- beq _080F3A16
- cmp r1, 0x1
- bgt _080F39FE
- cmp r1, 0
- beq _080F3A04
- b _080F3A68
-_080F39FE:
- cmp r1, 0x2
- beq _080F3A4C
- b _080F3A68
-_080F3A04:
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- b _080F3A68
-_080F3A16:
- ldr r0, _080F3A28 @ =gUnknown_203AB40
- ldr r0, [r0]
- ldrb r0, [r0, 0x1D]
- ands r1, r0
- cmp r1, 0
- beq _080F3A2C
- bl sub_80574A4
- b _080F3A3C
- .align 2, 0
-_080F3A28: .4byte gUnknown_203AB40
-_080F3A2C:
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
-_080F3A3C:
- ldr r0, _080F3A48 @ =gUnknown_203AB40
- ldr r1, [r0]
- ldrb r0, [r1, 0x1D]
- adds r0, 0x1
- strb r0, [r1, 0x1D]
- b _080F3A68
- .align 2, 0
-_080F3A48: .4byte gUnknown_203AB40
-_080F3A4C:
- movs r0, 0x80
- lsls r0, 7
- bl FlagClear
- ldr r1, _080F3A6C @ =gUnknown_2031DD8
- movs r0, 0
- strb r0, [r1]
- ldr r0, _080F3A70 @ =gUnknown_203AB40
- ldr r0, [r0]
- bl Free
- movs r0, 0xFF
- bl SoftReset
-_080F3A68:
- pop {r0}
- bx r0
- .align 2, 0
-_080F3A6C: .4byte gUnknown_2031DD8
-_080F3A70: .4byte gUnknown_203AB40
- thumb_func_end sub_80F39E8
-
- thumb_func_start sub_80F3A74
-sub_80F3A74: @ 80F3A74
- push {lr}
- movs r1, 0x80
- lsls r1, 7
- movs r0, 0
- bl ClearGpuRegBits
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- bl SetGpuRegBits
- ldr r1, _080F3AA0 @ =0x00001f3f
- movs r0, 0x48
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0xE
- bl SetGpuReg
- pop {r0}
- bx r0
- .align 2, 0
-_080F3AA0: .4byte 0x00001f3f
- thumb_func_end sub_80F3A74
-
- thumb_func_start sub_80F3AA4
-sub_80F3AA4: @ 80F3AA4
- push {lr}
- movs r0, 0x50
- movs r1, 0xCE
- bl SetGpuReg
- movs r1, 0x82
- lsls r1, 3
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0xA
- bl SetGpuReg
- pop {r0}
- bx r0
- thumb_func_end sub_80F3AA4
-
- thumb_func_start sub_80F3AC4
-sub_80F3AC4: @ 80F3AC4
- push {r4,lr}
- ldr r0, _080F3AFC @ =gUnknown_8410E08
- bl AddWindow
- ldr r4, _080F3B00 @ =gUnknown_203AB40
- ldr r1, [r4]
- strb r0, [r1, 0xA]
- ldr r0, [r4]
- ldrb r0, [r0, 0xA]
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r0, [r4]
- ldrb r0, [r0, 0xA]
- bl PutWindowTilemap
- ldr r0, [r4]
- ldrb r0, [r0, 0xA]
- movs r1, 0x3
- bl CopyWindowToVram
- ldr r1, [r4]
- movs r0, 0x1
- strb r0, [r1, 0xB]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F3AFC: .4byte gUnknown_8410E08
-_080F3B00: .4byte gUnknown_203AB40
- thumb_func_end sub_80F3AC4
-
- thumb_func_start sub_80F3B04
-sub_80F3B04: @ 80F3B04
- push {r4,lr}
- ldr r4, _080F3B28 @ =gUnknown_203AB40
- ldr r1, [r4]
- ldrb r0, [r1, 0xB]
- cmp r0, 0
- beq _080F3B20
- ldrb r0, [r1, 0xA]
- bl RemoveWindow
- bl CleanupOverworldWindowsAndTilemaps
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1, 0xB]
-_080F3B20:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F3B28: .4byte gUnknown_203AB40
- thumb_func_end sub_80F3B04
-
- thumb_func_start sub_80F3B2C
-sub_80F3B2C: @ 80F3B2C
- push {r4,r5,lr}
- ldr r5, _080F3B40 @ =gUnknown_203AB40
- ldr r0, [r5]
- ldrb r4, [r0, 0x1]
- cmp r4, 0
- beq _080F3B44
- cmp r4, 0x1
- beq _080F3B5E
-_080F3B3C:
- movs r0, 0
- b _080F3BB0
- .align 2, 0
-_080F3B40: .4byte gUnknown_203AB40
-_080F3B44:
- movs r0, 0x80
- lsls r0, 7
- bl FlagSet
- ldr r1, _080F3BB8 @ =gUnknown_2031DD8
- movs r0, 0x2
- strb r0, [r1]
- ldr r0, [r5]
- strb r4, [r0, 0x1C]
- ldr r1, [r5]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
-_080F3B5E:
- ldr r0, _080F3BBC @ =gUnknown_203AB40
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0x1C
- ldr r2, _080F3BC0 @ =gUnknown_8414588
- ldrb r1, [r1, 0x9]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- movs r2, 0
- bl sub_805750C
- cmp r0, 0
- beq _080F3B3C
- bl sub_80F3AC4
- movs r0, 0x40
- movs r1, 0xF0
- bl SetGpuReg
- ldr r1, _080F3BC4 @ =0x0000247c
- movs r0, 0x44
- bl SetGpuReg
- bl sub_80F3A74
- bl sub_80F3AA4
- movs r0, 0xF0
- bl Menu_LoadStdPalAt
- ldr r0, _080F3BC8 @ =gPlttBufferUnfaded
- movs r2, 0xFF
- lsls r2, 1
- adds r0, r2
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080F3BCC @ =gPlttBufferFaded
- adds r0, r2
- strh r1, [r0]
- movs r0, 0x1
-_080F3BB0:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080F3BB8: .4byte gUnknown_2031DD8
-_080F3BBC: .4byte gUnknown_203AB40
-_080F3BC0: .4byte gUnknown_8414588
-_080F3BC4: .4byte 0x0000247c
-_080F3BC8: .4byte gPlttBufferUnfaded
-_080F3BCC: .4byte gPlttBufferFaded
- thumb_func_end sub_80F3B2C
-
- thumb_func_start sub_80F3BD0
-sub_80F3BD0: @ 80F3BD0
- push {r4-r7,lr}
- sub sp, 0x24
- ldr r1, _080F3BEC @ =gUnknown_203AB40
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r7, r1, 0
- cmp r0, 0x12
- bls _080F3BE2
- b _080F4180
-_080F3BE2:
- lsls r0, 2
- ldr r1, _080F3BF0 @ =_080F3BF4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F3BEC: .4byte gUnknown_203AB40
-_080F3BF0: .4byte _080F3BF4
- .align 2, 0
-_080F3BF4:
- .4byte _080F3C40
- .4byte _080F3C64
- .4byte _080F3C98
- .4byte _080F3CEE
- .4byte _080F3D0A
- .4byte _080F3D48
- .4byte _080F3D6A
- .4byte _080F3EB4
- .4byte _080F3F24
- .4byte _080F3F84
- .4byte _080F3FC4
- .4byte _080F3FF0
- .4byte _080F400A
- .4byte _080F4084
- .4byte _080F40B8
- .4byte _080F40D0
- .4byte _080F4100
- .4byte _080F4118
- .4byte _080F4170
-_080F3C40:
- bl sub_80F3A74
- movs r0, 0x40
- movs r1, 0xF0
- bl SetGpuReg
- ldr r1, _080F3C5C @ =0x00004f51
- movs r0, 0x44
- bl SetGpuReg
- ldr r0, _080F3C60 @ =gUnknown_203AB40
- ldr r1, [r0]
- movs r0, 0x1
- b _080F413C
- .align 2, 0
-_080F3C5C: .4byte 0x00004f51
-_080F3C60: .4byte gUnknown_203AB40
-_080F3C64:
- bl sub_80F3AA4
- bl sub_80F3AC4
- movs r0, 0xF0
- bl Menu_LoadStdPalAt
- ldr r0, _080F3C8C @ =gPlttBufferUnfaded
- movs r2, 0xFF
- lsls r2, 1
- adds r0, r2
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080F3C90 @ =gPlttBufferFaded
- adds r0, r2
- strh r1, [r0]
- ldr r0, _080F3C94 @ =gUnknown_203AB40
- ldr r1, [r0]
- movs r0, 0x2
- b _080F413C
- .align 2, 0
-_080F3C8C: .4byte gPlttBufferUnfaded
-_080F3C90: .4byte gPlttBufferFaded
-_080F3C94: .4byte gUnknown_203AB40
-_080F3C98:
- movs r0, 0x44
- bl GetGpuReg
- add r1, sp, 0x14
- lsls r0, 16
- lsrs r0, 24
- strh r0, [r1]
- movs r0, 0x44
- bl GetGpuReg
- add r2, sp, 0x14
- movs r1, 0xFF
- ands r1, r0
- strh r1, [r2, 0x2]
- adds r0, r2, 0
- ldrh r0, [r0]
- cmp r0, 0x24
- bne _080F3CCC
- ldr r0, _080F3CC8 @ =gUnknown_203AB40
- ldr r1, [r0]
- movs r0, 0
- strh r0, [r1, 0x4]
- movs r0, 0x3
- b _080F413C
- .align 2, 0
-_080F3CC8: .4byte gUnknown_203AB40
-_080F3CCC:
- add r1, sp, 0x14
- subs r0, 0x1
- strh r0, [r1]
- adds r2, r1, 0
- adds r0, r1, 0
- ldrh r1, [r0, 0x2]
- adds r1, 0x1
- strh r1, [r2, 0x2]
- ldrh r0, [r0]
- lsls r0, 8
- adds r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x44
- bl SetGpuReg
- b _080F3D06
-_080F3CEE:
- ldr r1, [r7]
- ldrh r0, [r1, 0x4]
- cmp r0, 0
- bne _080F3D52
- movs r0, 0
- bl sub_80F4930
- ldr r0, [r7]
- movs r1, 0x64
- strh r1, [r0, 0x4]
- movs r1, 0x4
- strb r1, [r0]
-_080F3D06:
- movs r0, 0
- b _080F4182
-_080F3D0A:
- ldr r1, [r7]
- ldrh r0, [r1, 0x4]
- adds r2, r0, 0
- cmp r2, 0
- bne _080F3D52
- movs r0, 0xB4
- lsls r0, 1
- strh r0, [r1, 0x4]
- ldrb r0, [r1, 0xA]
- movs r1, 0x1
- str r1, [sp]
- movs r1, 0x2
- str r1, [sp, 0x4]
- ldr r1, _080F3D40 @ =gUnknown_8410E00
- str r1, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r1, _080F3D44 @ =gUnknown_841D198
- str r1, [sp, 0x10]
- movs r1, 0x1
- movs r2, 0x8
- movs r3, 0x29
- bl AddTextPrinterParameterized4
- ldr r1, [r7]
- movs r0, 0x5
- b _080F413C
- .align 2, 0
-_080F3D40: .4byte gUnknown_8410E00
-_080F3D44: .4byte gUnknown_841D198
-_080F3D48:
- ldr r1, [r7]
- ldrh r0, [r1, 0x4]
- adds r4, r0, 0
- cmp r4, 0
- beq _080F3D58
-_080F3D52:
- subs r0, 0x1
- strh r0, [r1, 0x4]
- b _080F3D06
-_080F3D58:
- bl sub_80F3B04
- ldr r0, [r7]
- movs r1, 0x6
- strb r1, [r0]
- ldr r0, [r7]
- strh r4, [r0, 0x4]
- strh r4, [r0, 0x6]
- b _080F3D06
-_080F3D6A:
- ldr r2, [r7]
- ldrh r0, [r2, 0x4]
- cmp r0, 0
- beq _080F3D7A
- subs r0, 0x1
- strh r0, [r2, 0x4]
- ldrb r0, [r2, 0x8]
- b _080F4182
-_080F3D7A:
- ldr r1, _080F3D94 @ =gUnknown_8410CF4
- ldrh r0, [r2, 0x6]
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x5
- bls _080F3D8A
- b _080F3E94
-_080F3D8A:
- lsls r0, 2
- ldr r1, _080F3D98 @ =_080F3D9C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F3D94: .4byte gUnknown_8410CF4
-_080F3D98: .4byte _080F3D9C
- .align 2, 0
-_080F3D9C:
- .4byte _080F3DB4
- .4byte _080F3DE0
- .4byte _080F3E10
- .4byte _080F3E30
- .4byte _080F3E58
- .4byte _080F3E8C
-_080F3DB4:
- movs r0, 0x80
- lsls r0, 8
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r4, _080F3DDC @ =gUnknown_203AB40
- ldr r1, [r4]
- movs r0, 0x7
- strb r0, [r1]
- ldr r0, [r4]
- ldrb r0, [r0, 0xA]
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r0, [r4]
- ldrb r0, [r0, 0x8]
- b _080F4182
- .align 2, 0
-_080F3DDC: .4byte gUnknown_203AB40
-_080F3DE0:
- ldr r2, _080F3E04 @ =gUnknown_203AB40
- ldr r1, [r2]
- movs r0, 0xA
- strb r0, [r1]
- ldr r2, [r2]
- ldr r1, _080F3E08 @ =gUnknown_8410CF4
- ldrh r0, [r2, 0x6]
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- strb r0, [r2, 0x9]
- ldr r2, _080F3E0C @ =0x3fffffff
- movs r0, 0x1
- movs r1, 0
- bl sub_807A944
- b _080F3E94
- .align 2, 0
-_080F3E04: .4byte gUnknown_203AB40
-_080F3E08: .4byte gUnknown_8410CF4
-_080F3E0C: .4byte 0x3fffffff
-_080F3E10:
- ldr r2, _080F3E28 @ =gUnknown_203AB40
- ldr r1, [r2]
- movs r0, 0xC
- strb r0, [r1]
- ldr r2, [r2]
- ldr r1, _080F3E2C @ =gUnknown_8410CF4
- ldrh r0, [r2, 0x6]
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- strb r0, [r2, 0x9]
- b _080F3E94
- .align 2, 0
-_080F3E28: .4byte gUnknown_203AB40
-_080F3E2C: .4byte gUnknown_8410CF4
-_080F3E30:
- ldr r2, _080F3E50 @ =gUnknown_203AB40
- ldr r1, [r2]
- movs r0, 0xD
- strb r0, [r1]
- ldr r2, [r2]
- ldr r1, _080F3E54 @ =gUnknown_8410CF4
- ldrh r0, [r2, 0x6]
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- strb r0, [r2, 0x9]
- movs r0, 0x1
- movs r1, 0
- bl fade_screen
- b _080F3E94
- .align 2, 0
-_080F3E50: .4byte gUnknown_203AB40
-_080F3E54: .4byte gUnknown_8410CF4
-_080F3E58:
- ldr r2, _080F3E84 @ =gUnknown_203AB40
- ldr r1, [r2]
- movs r3, 0
- movs r0, 0xF
- strb r0, [r1]
- ldr r2, [r2]
- ldr r1, _080F3E88 @ =gUnknown_8410CF4
- ldrh r0, [r2, 0x6]
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- strb r0, [r2, 0x9]
- movs r0, 0x1
- negs r0, r0
- str r3, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _080F3E94
- .align 2, 0
-_080F3E84: .4byte gUnknown_203AB40
-_080F3E88: .4byte gUnknown_8410CF4
-_080F3E8C:
- ldr r0, _080F3EAC @ =gUnknown_203AB40
- ldr r1, [r0]
- movs r0, 0x11
- strb r0, [r1]
-_080F3E94:
- ldr r0, _080F3EAC @ =gUnknown_203AB40
- ldr r1, [r0]
- ldr r2, _080F3EB0 @ =gUnknown_8410CF4
- ldrh r0, [r1, 0x6]
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x2]
- strh r0, [r1, 0x4]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _080F3D06
- .align 2, 0
-_080F3EAC: .4byte gUnknown_203AB40
-_080F3EB0: .4byte gUnknown_8410CF4
-_080F3EB4:
- ldr r0, _080F3F14 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- bne _080F3FBA
- add r3, sp, 0x14
- ldr r5, _080F3F18 @ =gUnknown_84145BC
- ldr r4, _080F3F1C @ =gUnknown_8410CF4
- ldr r2, [r7]
- ldrh r0, [r2, 0x6]
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0, 0x1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r0, [r0, 0x8]
- strh r0, [r3]
- ldrb r0, [r2, 0xA]
- str r6, [sp]
- str r6, [sp, 0x4]
- ldr r1, _080F3F20 @ =gUnknown_8410E00
- str r1, [sp, 0x8]
- movs r1, 0x1
- negs r1, r1
- str r1, [sp, 0xC]
- ldrh r1, [r2, 0x6]
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x1]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- ldr r1, [r1]
- str r1, [sp, 0x10]
- movs r1, 0x1
- movs r2, 0x2
- movs r3, 0x6
- bl AddTextPrinterParameterized4
- ldr r1, [r7]
- movs r0, 0x8
- b _080F3FB8
- .align 2, 0
-_080F3F14: .4byte gPaletteFade
-_080F3F18: .4byte gUnknown_84145BC
-_080F3F1C: .4byte gUnknown_8410CF4
-_080F3F20: .4byte gUnknown_8410E00
-_080F3F24:
- add r4, sp, 0x14
- ldr r3, _080F3F78 @ =gUnknown_84145BC
- ldr r5, _080F3F7C @ =gUnknown_8410CF4
- ldr r2, [r7]
- ldrh r0, [r2, 0x6]
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x8]
- movs r1, 0
- strh r0, [r4]
- ldrb r0, [r2, 0xA]
- str r1, [sp]
- str r1, [sp, 0x4]
- ldr r1, _080F3F80 @ =gUnknown_8410E04
- str r1, [sp, 0x8]
- movs r1, 0x1
- negs r1, r1
- str r1, [sp, 0xC]
- ldrh r1, [r2, 0x6]
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x1]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r3, 0x4
- adds r1, r3
- ldr r1, [r1]
- str r1, [sp, 0x10]
- movs r1, 0x2
- movs r2, 0x8
- movs r3, 0x6
- bl AddTextPrinterParameterized4
- ldr r1, [r7]
- movs r0, 0x9
- b _080F3FB8
- .align 2, 0
-_080F3F78: .4byte gUnknown_84145BC
-_080F3F7C: .4byte gUnknown_8410CF4
-_080F3F80: .4byte gUnknown_8410E04
-_080F3F84:
- ldr r0, [r7]
- ldrb r0, [r0, 0xA]
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r1, [r7]
- ldr r2, _080F3FC0 @ =gUnknown_8410CF4
- ldrh r0, [r1, 0x6]
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x2]
- movs r2, 0
- strh r0, [r1, 0x4]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- movs r0, 0x80
- lsls r0, 8
- str r2, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, [r7]
- movs r0, 0x6
-_080F3FB8:
- strb r0, [r1]
-_080F3FBA:
- ldr r0, [r7]
- ldrb r0, [r0, 0x8]
- b _080F4182
- .align 2, 0
-_080F3FC0: .4byte gUnknown_8410CF4
-_080F3FC4:
- ldr r0, _080F3FE8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080F3FD6
- b _080F3D06
-_080F3FD6:
- bl sub_80F3B04
- ldr r1, _080F3FEC @ =gUnknown_203AB40
- ldr r0, [r1]
- strb r4, [r0, 0x1]
- ldr r1, [r1]
- movs r0, 0xB
- b _080F413C
- .align 2, 0
-_080F3FE8: .4byte gPaletteFade
-_080F3FEC: .4byte gUnknown_203AB40
-_080F3FF0:
- ldr r0, [r7]
- ldrb r0, [r0, 0x9]
- bl sub_80F3B2C
- cmp r0, 0
- bne _080F3FFE
- b _080F3D06
-_080F3FFE:
- ldr r1, [r7]
- movs r0, 0x1
- strb r0, [r1, 0x8]
- ldr r1, [r7]
- movs r0, 0x6
- b _080F413C
-_080F400A:
- ldr r0, _080F4050 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080F401C
- b _080F3D06
-_080F401C:
- bl sub_80F3B04
- ldr r1, _080F4054 @ =gUnknown_203AB40
- ldr r0, [r1]
- strb r4, [r0, 0x1]
- adds r4, r1, 0
-_080F4028:
- ldr r0, [r4]
- ldrb r0, [r0, 0x9]
- bl sub_80F3B2C
- cmp r0, 0
- beq _080F4028
- ldr r0, _080F4054 @ =gUnknown_203AB40
- ldr r0, [r0]
- ldrb r0, [r0, 0x9]
- cmp r0, 0x6
- beq _080F4058
- cmp r0, 0x6
- ble _080F404A
- cmp r0, 0x9
- beq _080F405E
- cmp r0, 0xC
- beq _080F4064
-_080F404A:
- add r1, sp, 0x14
- movs r0, 0x1
- b _080F4068
- .align 2, 0
-_080F4050: .4byte gPaletteFade
-_080F4054: .4byte gUnknown_203AB40
-_080F4058:
- add r1, sp, 0x14
- movs r0, 0x2
- b _080F4068
-_080F405E:
- add r1, sp, 0x14
- movs r0, 0x3
- b _080F4068
-_080F4064:
- add r1, sp, 0x14
- movs r0, 0x4
-_080F4068:
- strh r0, [r1]
- add r0, sp, 0x14
- ldrb r0, [r0]
- bl sub_80F4930
- ldr r2, _080F4080 @ =gUnknown_203AB40
- ldr r1, [r2]
- movs r0, 0x1
- strb r0, [r1, 0x8]
- ldr r1, [r2]
- movs r0, 0x6
- b _080F413C
- .align 2, 0
-_080F4080: .4byte gUnknown_203AB40
-_080F4084:
- ldr r0, _080F40B0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080F4096
- b _080F3D06
-_080F4096:
- bl sub_80F48D0
- bl sub_80F3B04
- ldr r1, _080F40B4 @ =gUnknown_203AB40
- ldr r0, [r1]
- strb r4, [r0, 0x1]
- ldr r0, [r1]
- strb r4, [r0, 0x8]
- ldr r1, [r1]
- movs r0, 0xE
- b _080F413C
- .align 2, 0
-_080F40B0: .4byte gPaletteFade
-_080F40B4: .4byte gUnknown_203AB40
-_080F40B8:
- bl sub_80F4328
- cmp r0, 0
- bne _080F40C2
- b _080F3D06
-_080F40C2:
- ldr r0, _080F40CC @ =gUnknown_203AB40
- ldr r1, [r0]
- movs r0, 0x6
- b _080F413C
- .align 2, 0
-_080F40CC: .4byte gUnknown_203AB40
-_080F40D0:
- ldr r0, _080F40F8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080F40E2
- b _080F3D06
-_080F40E2:
- bl sub_80F3B04
- ldr r1, _080F40FC @ =gUnknown_203AB40
- ldr r0, [r1]
- strb r4, [r0, 0x1]
- ldr r0, [r1]
- strb r4, [r0, 0x8]
- ldr r1, [r1]
- movs r0, 0x10
- b _080F413C
- .align 2, 0
-_080F40F8: .4byte gPaletteFade
-_080F40FC: .4byte gUnknown_203AB40
-_080F4100:
- bl sub_80F4674
- cmp r0, 0
- bne _080F410A
- b _080F3D06
-_080F410A:
- ldr r0, _080F4114 @ =gUnknown_203AB40
- ldr r1, [r0]
- movs r0, 0x6
- b _080F413C
- .align 2, 0
-_080F4114: .4byte gUnknown_203AB40
-_080F4118:
- ldr r0, _080F4140 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F414C
- movs r0, 0x1
- negs r0, r0
- ldr r1, _080F4144 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080F4148 @ =gUnknown_203AB40
- ldr r1, [r0]
- movs r0, 0x12
-_080F413C:
- strb r0, [r1]
- b _080F3D06
- .align 2, 0
-_080F4140: .4byte gMain
-_080F4144: .4byte 0x00007fff
-_080F4148: .4byte gUnknown_203AB40
-_080F414C:
- ldr r1, [r7]
- ldrh r0, [r1, 0x4]
- cmp r0, 0
- beq _080F4156
- b _080F3D52
-_080F4156:
- movs r0, 0x12
- strb r0, [r1]
- subs r0, 0x13
- ldr r1, _080F416C @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _080F3D06
- .align 2, 0
-_080F416C: .4byte 0x00007fff
-_080F4170:
- ldr r0, _080F418C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080F4180
- bl sub_80F3B04
-_080F4180:
- movs r0, 0x2
-_080F4182:
- add sp, 0x24
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080F418C: .4byte gPaletteFade
- thumb_func_end sub_80F3BD0
-
- thumb_func_start sub_80F4190
-sub_80F4190: @ 80F4190
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80F4190
-
- thumb_func_start sub_80F41A4
-sub_80F41A4: @ 80F41A4
- push {r4,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- beq _080F4200
- cmp r4, 0x1
- bgt _080F41BA
- cmp r4, 0
- beq _080F41C4
- b _080F42C2
-_080F41BA:
- cmp r4, 0x2
- beq _080F4240
- cmp r4, 0x3
- beq _080F4288
- b _080F42C2
-_080F41C4:
- ldr r0, _080F41F4 @ =gUnknown_840C5B0
- bl InitWindows
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0xA
- str r0, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x6
- movs r1, 0x8
- movs r2, 0
- movs r3, 0x1
- bl sub_810C228
- ldr r1, _080F41F8 @ =gUnknown_840CB8C
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToWindowPixelBuffer
- ldr r1, _080F41FC @ =gUnknown_840D228
- b _080F4270
- .align 2, 0
-_080F41F4: .4byte gUnknown_840C5B0
-_080F41F8: .4byte gUnknown_840CB8C
-_080F41FC: .4byte gUnknown_840D228
-_080F4200:
- ldr r0, _080F4234 @ =gUnknown_840C5D0
- bl InitWindows
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0xA
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- movs r0, 0x3
- movs r1, 0x8
- movs r2, 0
- movs r3, 0x1
- bl sub_810C228
- ldr r1, _080F4238 @ =gUnknown_840E158
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToWindowPixelBuffer
- ldr r1, _080F423C @ =gUnknown_840E904
- b _080F4270
- .align 2, 0
-_080F4234: .4byte gUnknown_840C5D0
-_080F4238: .4byte gUnknown_840E158
-_080F423C: .4byte gUnknown_840E904
-_080F4240:
- ldr r0, _080F427C @ =gUnknown_840C5F0
- bl InitWindows
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0xA
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- movs r0, 0x9
- movs r1, 0x8
- movs r2, 0
- movs r3, 0x1
- bl sub_810C228
- ldr r1, _080F4280 @ =gUnknown_840F240
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToWindowPixelBuffer
- ldr r1, _080F4284 @ =gUnknown_840F944
-_080F4270:
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl CopyToWindowPixelBuffer
- b _080F42C2
- .align 2, 0
-_080F427C: .4byte gUnknown_840C5F0
-_080F4280: .4byte gUnknown_840F240
-_080F4284: .4byte gUnknown_840F944
-_080F4288:
- ldr r0, _080F42E4 @ =gUnknown_840C610
- bl InitWindows
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0xA
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- movs r0, 0x19
- movs r1, 0x8
- movs r2, 0
- movs r3, 0x1
- bl sub_810C228
- ldr r1, _080F42E8 @ =gUnknown_8410198
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToWindowPixelBuffer
- ldr r1, _080F42EC @ =gUnknown_84105B4
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl CopyToWindowPixelBuffer
-_080F42C2:
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F42E4: .4byte gUnknown_840C610
-_080F42E8: .4byte gUnknown_8410198
-_080F42EC: .4byte gUnknown_84105B4
- thumb_func_end sub_80F41A4
-
- thumb_func_start sub_80F42F0
-sub_80F42F0: @ 80F42F0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0x1
- beq _080F4314
- cmp r0, 0x1
- bgt _080F4306
- cmp r0, 0
- beq _080F4310
- b _080F4320
-_080F4306:
- cmp r1, 0x2
- beq _080F4318
- cmp r1, 0x3
- beq _080F431C
- b _080F4320
-_080F4310:
- movs r0, 0x6
- b _080F4322
-_080F4314:
- movs r0, 0x3
- b _080F4322
-_080F4318:
- movs r0, 0x9
- b _080F4322
-_080F431C:
- movs r0, 0x19
- b _080F4322
-_080F4320:
- movs r0, 0
-_080F4322:
- pop {r1}
- bx r1
- thumb_func_end sub_80F42F0
-
- thumb_func_start sub_80F4328
-sub_80F4328: @ 80F4328
- push {r4-r6,lr}
- sub sp, 0x10
- ldr r1, _080F4344 @ =gUnknown_203AB40
- ldr r0, [r1]
- ldrb r0, [r0, 0x1]
- adds r4, r1, 0
- cmp r0, 0x9
- bls _080F433A
- b _080F4668
-_080F433A:
- lsls r0, 2
- ldr r1, _080F4348 @ =_080F434C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F4344: .4byte gUnknown_203AB40
-_080F4348: .4byte _080F434C
- .align 2, 0
-_080F434C:
- .4byte _080F4374
- .4byte _080F44CC
- .4byte _080F4504
- .4byte _080F4530
- .4byte _080F453A
- .4byte _080F4558
- .4byte _080F4582
- .4byte _080F45D6
- .4byte _080F460E
- .4byte _080F4638
-_080F4374:
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- movs r1, 0xC0
- lsls r1, 7
- movs r0, 0
- bl ClearGpuRegBits
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- bl ResetPaletteFade
- bl ResetSpriteData
- bl ResetTasks
- movs r0, 0x1
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _080F44A8 @ =gUnknown_840C5A4
- movs r0, 0x1
- movs r2, 0x3
- bl InitBgsFromTemplates
- movs r0, 0x80
- lsls r0, 4
- bl Alloc
- adds r1, r0, 0
- movs r0, 0
- bl SetBgTilemapBuffer
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- ldr r6, _080F44AC @ =gUnknown_203AB40
- ldr r1, [r6]
- movs r4, 0
- strh r4, [r1, 0xC]
- strh r4, [r1, 0xE]
- movs r2, 0x80
- lsls r2, 8
- movs r0, 0x50
- str r0, [sp]
- movs r3, 0xC
- ldrsh r0, [r1, r3]
- str r0, [sp, 0x4]
- movs r3, 0xC
- ldrsh r0, [r1, r3]
- str r0, [sp, 0x8]
- str r4, [sp, 0xC]
- movs r0, 0x2
- adds r1, r2, 0
- movs r3, 0x78
- bl SetBgAffine
- ldr r1, _080F44B0 @ =gUnknown_8EAAB98
- movs r5, 0x80
- lsls r5, 6
- str r4, [sp]
- movs r0, 0x1
- adds r2, r5, 0
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r1, _080F44B4 @ =gUnknown_840C650
- str r4, [sp]
- movs r0, 0x2
- adds r2, r5, 0
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r1, _080F44B8 @ =gUnknown_8EAB30C
- movs r2, 0xA0
- lsls r2, 3
- movs r4, 0x1
- str r4, [sp]
- movs r0, 0x1
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r1, _080F44BC @ =gUnknown_840CA54
- movs r2, 0x80
- lsls r2, 3
- str r4, [sp]
- movs r0, 0x2
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r0, [r6]
- ldrb r0, [r0, 0x9]
- lsls r0, 5
- ldr r1, _080F44C0 @ =gUnknown_8EAAB18
- adds r0, r1
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _080F44C4 @ =gUnknown_840C630
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, [r6]
- ldrb r0, [r0, 0x9]
- bl sub_80F41A4
- ldr r0, _080F44C8 @ =sub_80F4190
- bl SetVBlankCallback
- movs r0, 0x1
- bl EnableInterrupts
- ldr r1, [r6]
- b _080F4630
- .align 2, 0
-_080F44A8: .4byte gUnknown_840C5A4
-_080F44AC: .4byte gUnknown_203AB40
-_080F44B0: .4byte gUnknown_8EAAB98
-_080F44B4: .4byte gUnknown_840C650
-_080F44B8: .4byte gUnknown_8EAB30C
-_080F44BC: .4byte gUnknown_840CA54
-_080F44C0: .4byte gUnknown_8EAAB18
-_080F44C4: .4byte gUnknown_840C630
-_080F44C8: .4byte sub_80F4190
-_080F44CC:
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldr r0, _080F4500 @ =gUnknown_203AB40
- ldr r1, [r0]
- b _080F4630
- .align 2, 0
-_080F4500: .4byte gUnknown_203AB40
-_080F4504:
- movs r0, 0x2
- bl ShowBg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _080F452C @ =gUnknown_203AB40
- ldr r1, [r0]
- movs r0, 0x28
- strh r0, [r1, 0xC]
- b _080F4630
- .align 2, 0
-_080F452C: .4byte gUnknown_203AB40
-_080F4530:
- ldr r1, [r4]
- ldrh r0, [r1, 0xC]
- cmp r0, 0
- bne _080F45DE
- b _080F4630
-_080F453A:
- ldr r0, _080F4554 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080F4548
- b _080F4668
-_080F4548:
- ldr r1, [r4]
- movs r0, 0x8
- strh r0, [r1, 0xC]
- movs r0, 0x1
- strh r0, [r1, 0xE]
- b _080F4630
- .align 2, 0
-_080F4554: .4byte gPaletteFade
-_080F4558:
- ldr r1, [r4]
- ldrh r0, [r1, 0xC]
- cmp r0, 0
- bne _080F45DE
- ldrh r0, [r1, 0xE]
- cmp r0, 0x2
- bhi _080F4630
- lsls r0, 24
- lsrs r0, 24
- bl PutWindowTilemap
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldr r1, [r4]
- movs r0, 0x4
- strh r0, [r1, 0xC]
- ldrh r0, [r1, 0xE]
- adds r0, 0x1
- strh r0, [r1, 0xE]
- b _080F4668
-_080F4582:
- ldr r3, [r4]
- ldrh r0, [r3, 0xC]
- cmp r0, 0xFF
- bhi _080F45B2
- adds r0, 0x10
- movs r1, 0
- strh r0, [r3, 0xC]
- movs r2, 0x80
- lsls r2, 8
- movs r0, 0x50
- str r0, [sp]
- movs r4, 0xC
- ldrsh r0, [r3, r4]
- str r0, [sp, 0x4]
- movs r4, 0xC
- ldrsh r0, [r3, r4]
- str r0, [sp, 0x8]
- str r1, [sp, 0xC]
- movs r0, 0x2
- adds r1, r2, 0
- movs r3, 0x78
- bl SetBgAffine
- b _080F4668
-_080F45B2:
- movs r2, 0x80
- lsls r2, 8
- movs r0, 0x50
- str r0, [sp]
- adds r0, 0xB0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- movs r0, 0
- str r0, [sp, 0xC]
- movs r0, 0x2
- adds r1, r2, 0
- movs r3, 0x78
- bl SetBgAffine
- ldr r1, [r4]
- movs r0, 0x20
- strh r0, [r1, 0xC]
- b _080F4630
-_080F45D6:
- ldr r1, [r4]
- ldrh r0, [r1, 0xC]
- cmp r0, 0
- beq _080F45E4
-_080F45DE:
- subs r0, 0x1
- strh r0, [r1, 0xC]
- b _080F4668
-_080F45E4:
- movs r0, 0x2
- bl HideBg
- movs r0, 0x1
- bl ShowBg
- ldr r0, [r4]
- ldrb r0, [r0, 0x9]
- bl sub_80F42F0
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0
- movs r2, 0x7D
- movs r3, 0xA
- bl PlayCry2
- ldr r1, [r4]
- movs r0, 0x80
- strh r0, [r1, 0xC]
- b _080F4630
-_080F460E:
- ldr r2, [r4]
- ldrh r0, [r2, 0xC]
- adds r1, r0, 0
- cmp r1, 0
- beq _080F461E
- subs r0, 0x1
- strh r0, [r2, 0xC]
- b _080F4668
-_080F461E:
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, [r4]
-_080F4630:
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _080F4668
-_080F4638:
- ldr r0, _080F4660 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080F4668
- bl FreeAllWindowBuffers
- movs r0, 0
- bl GetBgTilemapBuffer
- bl Free
- ldr r0, _080F4664 @ =gUnknown_203AB40
- ldr r0, [r0]
- strb r4, [r0, 0x1]
- movs r0, 0x1
- b _080F466A
- .align 2, 0
-_080F4660: .4byte gPaletteFade
-_080F4664: .4byte gUnknown_203AB40
-_080F4668:
- movs r0, 0
-_080F466A:
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80F4328
-
- thumb_func_start sub_80F4674
-sub_80F4674: @ 80F4674
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, _080F4690 @ =gUnknown_203AB40
- ldr r2, [r6]
- ldrb r5, [r2, 0x1]
- cmp r5, 0x1
- bne _080F4684
- b _080F4784
-_080F4684:
- cmp r5, 0x1
- bgt _080F4694
- cmp r5, 0
- beq _080F46A0
- b _080F47EC
- .align 2, 0
-_080F4690: .4byte gUnknown_203AB40
-_080F4694:
- cmp r5, 0x2
- beq _080F478E
- cmp r5, 0x3
- bne _080F469E
- b _080F47D0
-_080F469E:
- b _080F47EC
-_080F46A0:
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- movs r1, 0xC0
- lsls r1, 7
- movs r0, 0
- bl ClearGpuRegBits
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- bl ResetPaletteFade
- bl ResetSpriteData
- bl ResetTasks
- movs r0, 0x1
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _080F4778 @ =gUnknown_840C5A4
- movs r0, 0
- movs r2, 0x1
- bl InitBgsFromTemplates
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- ldr r4, _080F477C @ =gUnknown_8410CDC
- ldr r0, [r6]
- ldrb r1, [r0, 0x9]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 6
- str r5, [sp]
- movs r0, 0
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r0, [r6]
- ldrb r1, [r0, 0x9]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0x4
- adds r0, r1
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 4
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r0, [r6]
- ldrb r1, [r0, 0x9]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r4, 0x8
- adds r0, r4
- ldr r0, [r0]
- movs r2, 0x80
- lsls r2, 2
- movs r1, 0
- bl LoadPalette
- ldr r0, _080F4780 @ =sub_80F4190
- bl SetVBlankCallback
- movs r0, 0x1
- bl EnableInterrupts
- ldr r1, [r6]
- b _080F47C2
- .align 2, 0
-_080F4778: .4byte gUnknown_840C5A4
-_080F477C: .4byte gUnknown_8410CDC
-_080F4780: .4byte sub_80F4190
-_080F4784:
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldr r1, [r6]
- b _080F47C2
-_080F478E:
- movs r0, 0
- bl ShowBg
- ldr r0, [r6]
- ldrb r1, [r0, 0x9]
- cmp r1, 0
- beq _080F47AE
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0
- bl BeginNormalPaletteFade
- b _080F47BE
-_080F47AE:
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_080F47BE:
- ldr r0, _080F47CC @ =gUnknown_203AB40
- ldr r1, [r0]
-_080F47C2:
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _080F47EC
- .align 2, 0
-_080F47CC: .4byte gUnknown_203AB40
-_080F47D0:
- ldr r0, _080F47E8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080F47EC
- strb r0, [r2, 0x1]
- movs r0, 0x1
- b _080F47EE
- .align 2, 0
-_080F47E8: .4byte gPaletteFade
-_080F47EC:
- movs r0, 0
-_080F47EE:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80F4674
-
- thumb_func_start sub_80F47F8
-sub_80F47F8: @ 80F47F8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080F481C @ =gTasks+0x8
- adds r3, r1, r0
- ldrb r0, [r3]
- cmp r0, 0x1
- beq _080F4820
- cmp r0, 0x1
- ble _080F48C2
- cmp r0, 0x2
- beq _080F484C
- cmp r0, 0x3
- beq _080F4896
- b _080F48C2
- .align 2, 0
-_080F481C: .4byte gTasks+0x8
-_080F4820:
- ldr r4, _080F4848 @ =gSprites
- ldrb r0, [r3, 0x1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r2, [r1, 0x20]
- movs r5, 0x20
- ldrsh r0, [r1, r5]
- cmp r0, 0xD0
- beq _080F4890
- subs r0, r2, 0x1
- strh r0, [r1, 0x20]
- ldrb r1, [r3, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- b _080F48BC
- .align 2, 0
-_080F4848: .4byte gSprites
-_080F484C:
- ldr r0, _080F4888 @ =gUnknown_203AB40
- ldr r0, [r0]
- ldrb r1, [r0, 0x1D]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F48C2
- ldr r4, _080F488C @ =gSprites
- ldrb r0, [r3, 0x1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r2, [r1, 0x22]
- movs r5, 0x22
- ldrsh r0, [r1, r5]
- cmp r0, 0x50
- beq _080F4890
- subs r0, r2, 0x1
- strh r0, [r1, 0x22]
- ldrb r1, [r3, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x22]
- subs r1, 0x1
- strh r1, [r0, 0x22]
- b _080F48C2
- .align 2, 0
-_080F4888: .4byte gUnknown_203AB40
-_080F488C: .4byte gSprites
-_080F4890:
- movs r0, 0
- strb r0, [r3]
- b _080F48C2
-_080F4896:
- ldr r0, _080F48C8 @ =gUnknown_203AB40
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0xF
- bne _080F48C2
- ldr r2, _080F48CC @ =gSprites
- ldrb r1, [r3, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x20]
- subs r1, 0x1
- strh r1, [r0, 0x20]
- ldrb r1, [r3, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
-_080F48BC:
- ldrh r1, [r0, 0x20]
- subs r1, 0x1
- strh r1, [r0, 0x20]
-_080F48C2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F48C8: .4byte gUnknown_203AB40
-_080F48CC: .4byte gSprites
- thumb_func_end sub_80F47F8
-
- thumb_func_start sub_80F48D0
-sub_80F48D0: @ 80F48D0
- push {r4-r6,lr}
- ldr r6, _080F4924 @ =gUnknown_203AB40
- ldr r1, [r6]
- ldrb r0, [r1, 0x2]
- cmp r0, 0xFF
- beq _080F491E
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _080F4928 @ =gTasks+0x8
- adds r4, r0
- ldrh r0, [r4, 0x2]
- bl FreeSpriteTilesByTag
- ldrb r1, [r4, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _080F492C @ =gSprites
- adds r0, r5
- bl DestroySprite
- ldrh r0, [r4, 0x8]
- bl FreeSpriteTilesByTag
- ldrb r1, [r4, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- bl DestroySprite
- ldr r0, [r6]
- ldrb r0, [r0, 0x2]
- bl DestroyTask
- ldr r1, [r6]
- movs r0, 0xFF
- strb r0, [r1, 0x2]
-_080F491E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F4924: .4byte gUnknown_203AB40
-_080F4928: .4byte gTasks+0x8
-_080F492C: .4byte gSprites
- thumb_func_end sub_80F48D0
-
- thumb_func_start sub_80F4930
-sub_80F4930: @ 80F4930
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x20
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _080F4988 @ =gUnknown_203AB40
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- cmp r0, 0xFF
- beq _080F494A
- b _080F4BDE
-_080F494A:
- ldr r0, _080F498C @ =sub_80F47F8
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r2, _080F4990 @ =gTasks+0x8
- adds r6, r1, r2
- ldr r1, [r4]
- strb r0, [r1, 0x2]
- ldr r1, _080F4994 @ =gUnknown_841431C
- lsls r2, r7, 1
- adds r0, r2, r7
- lsls r0, 1
- adds r1, 0x4
- adds r0, r1
- ldrh r0, [r0]
- mov r8, r2
- cmp r0, 0x1
- beq _080F4998
- cmp r0, 0x1
- ble _080F4980
- cmp r0, 0x2
- beq _080F49A2
-_080F4980:
- movs r4, 0xD0
- movs r0, 0x50
- mov r9, r0
- b _080F49A8
- .align 2, 0
-_080F4988: .4byte gUnknown_203AB40
-_080F498C: .4byte sub_80F47F8
-_080F4990: .4byte gTasks+0x8
-_080F4994: .4byte gUnknown_841431C
-_080F4998:
- movs r4, 0x88
- lsls r4, 1
- movs r2, 0x50
- mov r9, r2
- b _080F49A8
-_080F49A2:
- movs r4, 0xD0
- movs r3, 0xA0
- mov r9, r3
-_080F49A8:
- ldr r2, _080F49D0 @ =gUnknown_841431C
- mov r5, r8
- adds r1, r5, r7
- lsls r1, 1
- adds r0, r2, 0x4
- adds r0, r1, r0
- ldrh r0, [r0]
- strb r0, [r6]
- movs r0, 0x80
- lsls r0, 6
- strh r0, [r6, 0x2]
- ldr r0, _080F49D4 @ =0x0000ffff
- strh r0, [r6, 0x4]
- adds r1, r2
- ldrh r0, [r1]
- cmp r0, 0
- beq _080F49D8
- cmp r0, 0x1
- beq _080F4A4C
- b _080F4A6C
- .align 2, 0
-_080F49D0: .4byte gUnknown_841431C
-_080F49D4: .4byte 0x0000ffff
-_080F49D8:
- ldr r0, _080F4A0C @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _080F4A20
- ldr r0, _080F4A10 @ =gUnknown_8410E30
- str r0, [sp, 0x18]
- ldr r1, _080F4A14 @ =0xffff0000
- add r0, sp, 0x18
- ldr r3, [r0, 0x4]
- ands r3, r1
- movs r1, 0xC0
- lsls r1, 6
- orrs r3, r1
- str r3, [r0, 0x4]
- ldrh r2, [r6, 0x2]
- lsls r2, 16
- ldr r1, _080F4A18 @ =0x0000ffff
- ands r1, r3
- orrs r1, r2
- str r1, [r0, 0x4]
- bl LoadCompressedSpriteSheet
- ldr r0, _080F4A1C @ =gUnknown_8410E10
- b _080F4A36
- .align 2, 0
-_080F4A0C: .4byte gSaveBlock2Ptr
-_080F4A10: .4byte gUnknown_8410E30
-_080F4A14: .4byte 0xffff0000
-_080F4A18: .4byte 0x0000ffff
-_080F4A1C: .4byte gUnknown_8410E10
-_080F4A20:
- ldr r0, _080F4A44 @ =gUnknown_8411C18
- str r0, [sp, 0x18]
- add r0, sp, 0x18
- movs r1, 0xC0
- lsls r1, 6
- strh r1, [r0, 0x4]
- ldrh r1, [r6, 0x2]
- strh r1, [r0, 0x6]
- bl LoadCompressedSpriteSheet
- ldr r0, _080F4A48 @ =gUnknown_8411BF8
-_080F4A36:
- movs r1, 0xF8
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- b _080F4A6C
- .align 2, 0
-_080F4A44: .4byte gUnknown_8411C18
-_080F4A48: .4byte gUnknown_8411BF8
-_080F4A4C:
- ldr r0, _080F4AD8 @ =gUnknown_84129C0
- str r0, [sp, 0x18]
- add r0, sp, 0x18
- movs r1, 0xC0
- lsls r1, 6
- strh r1, [r0, 0x4]
- ldrh r1, [r6, 0x2]
- strh r1, [r0, 0x6]
- bl LoadCompressedSpriteSheet
- ldr r0, _080F4ADC @ =gUnknown_84129A0
- movs r1, 0xF8
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
-_080F4A6C:
- mov r1, sp
- ldr r0, _080F4AE0 @ =gUnknown_8414364
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- mov r1, sp
- ldrh r0, [r6, 0x2]
- movs r5, 0
- strh r0, [r1]
- lsls r4, 16
- asrs r1, r4, 16
- mov r2, r9
- mov r0, sp
- movs r3, 0
- bl CreateSprite
- strb r0, [r6, 0x1]
- ldr r3, _080F4AE4 @ =gSprites
- ldrb r1, [r6, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x5]
- movs r2, 0xF0
- orrs r1, r2
- strb r1, [r0, 0x5]
- ldrb r1, [r6, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x43
- strb r5, [r0]
- ldr r0, _080F4AE8 @ =0x00002001
- strh r0, [r6, 0x8]
- ldr r0, _080F4AEC @ =0x0000ffff
- strh r0, [r6, 0xA]
- ldr r1, _080F4AF0 @ =gUnknown_841431C
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 1
- adds r1, 0x2
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0x1
- beq _080F4B20
- cmp r0, 0x1
- bgt _080F4AF4
- cmp r0, 0
- beq _080F4AFE
- b _080F4BA0
- .align 2, 0
-_080F4AD8: .4byte gUnknown_84129C0
-_080F4ADC: .4byte gUnknown_84129A0
-_080F4AE0: .4byte gUnknown_8414364
-_080F4AE4: .4byte gSprites
-_080F4AE8: .4byte 0x00002001
-_080F4AEC: .4byte 0x0000ffff
-_080F4AF0: .4byte gUnknown_841431C
-_080F4AF4:
- cmp r0, 0x2
- beq _080F4B54
- cmp r0, 0x3
- beq _080F4B74
- b _080F4BA0
-_080F4AFE:
- ldr r0, _080F4B18 @ =gUnknown_8413338
- str r0, [sp, 0x18]
- add r0, sp, 0x18
- movs r1, 0xC0
- lsls r1, 6
- strh r1, [r0, 0x4]
- ldrh r1, [r6, 0x8]
- strh r1, [r0, 0x6]
- bl LoadCompressedSpriteSheet
- ldr r0, _080F4B1C @ =gUnknown_8413318
- b _080F4B8A
- .align 2, 0
-_080F4B18: .4byte gUnknown_8413338
-_080F4B1C: .4byte gUnknown_8413318
-_080F4B20:
- ldr r0, _080F4B48 @ =gUnknown_8413338
- str r0, [sp, 0x18]
- add r0, sp, 0x18
- movs r1, 0xC0
- lsls r1, 6
- strh r1, [r0, 0x4]
- ldrh r1, [r6, 0x8]
- strh r1, [r0, 0x6]
- bl LoadCompressedSpriteSheet
- ldr r0, _080F4B4C @ =gUnknown_8413318
- movs r1, 0xF0
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- mov r1, sp
- ldr r0, _080F4B50 @ =gUnknown_84143D0
- b _080F4B98
- .align 2, 0
-_080F4B48: .4byte gUnknown_8413338
-_080F4B4C: .4byte gUnknown_8413318
-_080F4B50: .4byte gUnknown_84143D0
-_080F4B54:
- ldr r0, _080F4B6C @ =gUnknown_8413874
- str r0, [sp, 0x18]
- add r0, sp, 0x18
- movs r1, 0xC0
- lsls r1, 6
- strh r1, [r0, 0x4]
- ldrh r1, [r6, 0x8]
- strh r1, [r0, 0x6]
- bl LoadCompressedSpriteSheet
- ldr r0, _080F4B70 @ =gUnknown_8413854
- b _080F4B8A
- .align 2, 0
-_080F4B6C: .4byte gUnknown_8413874
-_080F4B70: .4byte gUnknown_8413854
-_080F4B74:
- ldr r0, _080F4BEC @ =gUnknown_8413DB8
- str r0, [sp, 0x18]
- add r0, sp, 0x18
- movs r1, 0xC0
- lsls r1, 6
- strh r1, [r0, 0x4]
- ldrh r1, [r6, 0x8]
- strh r1, [r0, 0x6]
- bl LoadCompressedSpriteSheet
- ldr r0, _080F4BF0 @ =gUnknown_8413D98
-_080F4B8A:
- movs r1, 0xF0
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- mov r1, sp
- ldr r0, _080F4BF4 @ =gUnknown_84143B8
-_080F4B98:
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
-_080F4BA0:
- mov r1, sp
- ldrh r0, [r6, 0x8]
- strh r0, [r1]
- asrs r1, r4, 16
- mov r2, r9
- adds r2, 0x26
- mov r0, sp
- movs r3, 0
- bl CreateSprite
- strb r0, [r6, 0x6]
- ldr r3, _080F4BF8 @ =gSprites
- ldrb r1, [r6, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r2, [r0, 0x5]
- movs r1, 0xF
- ands r1, r2
- movs r2, 0xE0
- orrs r1, r2
- strb r1, [r0, 0x5]
- ldrb r1, [r6, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x43
- movs r1, 0x1
- strb r1, [r0]
-_080F4BDE:
- add sp, 0x20
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F4BEC: .4byte gUnknown_8413DB8
-_080F4BF0: .4byte gUnknown_8413D98
-_080F4BF4: .4byte gUnknown_84143B8
-_080F4BF8: .4byte gSprites
- thumb_func_end sub_80F4930
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/dark.s b/asm/dark.s
index a232c19ad..cbc4060c3 100644
--- a/asm/dark.s
+++ b/asm/dark.s
@@ -256,33 +256,33 @@ sub_80B7ACC: @ 80B7ACC
ldr r6, _080B7B38 @ =gBattleAnimTarget
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x30]
ldr r5, _080B7B3C @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrb r0, [r6]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x34]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
movs r0, 0x7E
strh r0, [r4, 0x2E]
adds r0, r4, 0
- bl sub_80754B8
+ bl InitSpriteDataForLinearTranslation
ldrh r0, [r4, 0x30]
negs r0, r0
strh r0, [r4, 0x34]
@@ -634,7 +634,7 @@ sub_80B7DA4: @ 80B7DA4
ldr r4, _080B7E0C @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x1F
@@ -653,7 +653,7 @@ sub_80B7DA4: @ 80B7DA4
strh r1, [r5, 0x22]
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r1, r0, 0
@@ -701,7 +701,7 @@ _080B7E16:
ldr r0, _080B7E70 @ =0x04000016
str r0, [sp]
movs r7, 0x2
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B7EA8
@@ -728,7 +728,7 @@ _080B7E78:
ldr r0, _080B7F38 @ =0x0400001a
str r0, [sp]
movs r7, 0x4
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B7EA8
@@ -995,7 +995,7 @@ _080B80A0:
.4byte _080B81E8
.4byte _080B8250
_080B80B4:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1087,7 +1087,7 @@ _080B817C:
ldr r4, _080B81C8 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x1F
@@ -1104,7 +1104,7 @@ _080B817C:
strh r1, [r5, 0x22]
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
subs r1, r0, 0x4
@@ -1685,7 +1685,7 @@ sub_80B85B8: @ 80B85B8
ldrb r0, [r6]
movs r5, 0x2
eors r0, r5
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B8642
@@ -1744,7 +1744,7 @@ sub_80B8664: @ 80B8664
ldrb r1, [r4]
movs r0, 0x2
eors r0, r1
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B86A0
@@ -1827,7 +1827,7 @@ sub_80B86EC: @ 80B86EC
movs r1, 0
movs r2, 0
bl SetAnimBgAttribute
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B8750
@@ -1836,11 +1836,11 @@ sub_80B86EC: @ 80B86EC
movs r2, 0x1
bl SetAnimBgAttribute
_080B8750:
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _080B87CA
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B87CA
@@ -1860,7 +1860,7 @@ _080B8780:
ldrb r0, [r4]
movs r5, 0x2
eors r0, r5
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -2155,7 +2155,7 @@ _080B89FC:
movs r0, 0x4A
adds r1, r4, 0
bl SetGpuReg
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B8A2E
@@ -2254,7 +2254,7 @@ _080B8AE0:
lsls r0, 24
lsrs r4, r0, 24
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B8B04
diff --git a/asm/dodrio_berry_picking.s b/asm/dodrio_berry_picking.s
index 13a4d95b5..32b47791b 100644
--- a/asm/dodrio_berry_picking.s
+++ b/asm/dodrio_berry_picking.s
@@ -385,7 +385,7 @@ _08150B08:
bl sub_80FA42C
b _08150BDC
_08150B16:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08150BFC
@@ -393,10 +393,10 @@ _08150B16:
ldrb r0, [r0]
cmp r0, 0
beq _08150BDC
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
b _08150BDC
.align 2, 0
_08150B38: .4byte gReceivedRemoteLinkPlayers
@@ -652,7 +652,7 @@ _08150D28:
bl sub_815F138
b _08150D52
_08150D3A:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08150D74
@@ -673,7 +673,7 @@ _08150D52:
.align 2, 0
_08150D60: .4byte gUnknown_203F3E0
_08150D64:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08150D74
@@ -1025,7 +1025,7 @@ _08150FFE:
ldr r1, [r6]
b _0815106A
_08151010:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08151092
@@ -1131,7 +1131,7 @@ _081510BE:
ldr r1, [r6]
b _08151140
_081510DA:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0815118A
@@ -1276,7 +1276,7 @@ _081511DC:
ldr r1, [r6]
b _0815128A
_08151202:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _081512AA
@@ -1463,7 +1463,7 @@ _0815136A:
.align 2, 0
_08151388: .4byte gUnknown_203F3E0
_0815138C:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08151480
@@ -1984,7 +1984,7 @@ _0815177E:
_081517A0: .4byte gUnknown_203F3E0
_081517A4: .4byte 0x0000318c
_081517A8:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08151836
diff --git a/asm/dragon.s b/asm/dragon.s
index 66e76017a..bd01691f1 100644
--- a/asm/dragon.s
+++ b/asm/dragon.s
@@ -12,13 +12,13 @@ sub_80B725C: @ 80B725C
ldr r4, _080B72A4 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -90,13 +90,13 @@ sub_80B72F8: @ 80B72F8
ldr r4, _080B7350 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -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
@@ -185,13 +185,13 @@ _080B73C8:
_080B73CA:
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -249,14 +249,14 @@ sub_80B7448: @ 80B7448
ldr r4, _080B749C @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r5, 0
strh r0, [r6, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x22]
@@ -266,7 +266,7 @@ sub_80B7448: @ 80B7448
ldr r0, _080B74A0 @ =gBattleAnimArgs
ldrh r0, [r0]
strh r0, [r6, 0x3A]
- ldr r4, _080B74A4 @ =sBattler_AI
+ ldr r4, _080B74A4 @ =gBattlerAttacker
ldrb r0, [r4]
movs r1, 0
bl sub_8076B2C
@@ -284,7 +284,7 @@ sub_80B7448: @ 80B7448
.align 2, 0
_080B749C: .4byte gBattleAnimAttacker
_080B74A0: .4byte gBattleAnimArgs
-_080B74A4: .4byte sBattler_AI
+_080B74A4: .4byte gBattlerAttacker
_080B74A8:
lsrs r0, r1, 17
_080B74AA:
@@ -726,14 +726,14 @@ sub_80B77E4: @ 80B77E4
mov r8, r1
ldrb r0, [r1]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
mov r2, r8
ldrb r0, [r2]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r3, [r5, 0x8]
diff --git a/asm/electric.s b/asm/electric.s
index 187e30b6d..d020459d5 100644
--- a/asm/electric.s
+++ b/asm/electric.s
@@ -123,13 +123,13 @@ sub_80ADCB8: @ 80ADCB8
ldr r4, _080ADCFC @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -219,7 +219,7 @@ _080ADD7C:
ldrb r0, [r4]
movs r6, 0x2
eors r0, r6
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
bne _080ADD98
@@ -237,7 +237,7 @@ _080ADDA0:
ldrb r0, [r0]
movs r4, 0x2
eors r0, r4
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080ADDC4
@@ -260,7 +260,7 @@ _080ADDC8:
bne _080ADDF0
adds r0, r4, 0
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
@@ -273,14 +273,14 @@ _080ADDEC: .4byte gBattleAnimArgs
_080ADDF0:
adds r0, r4, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
adds r0, r4, 0
movs r1, 0x3
_080ADE02:
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -379,7 +379,7 @@ sub_80ADEB0: @ 80ADEB0
ldr r6, _080ADF28 @ =gBattleAnimTarget
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
@@ -387,7 +387,7 @@ sub_80ADEB0: @ 80ADEB0
strh r0, [r4, 0x34]
ldrb r0, [r6]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
@@ -536,7 +536,7 @@ _080ADFFA:
sub_80AE000: @ 80AE000
push {r4-r6,lr}
adds r6, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AE01C
@@ -555,7 +555,7 @@ _080AE024:
ldr r5, _080AE060 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080AE064 @ =gBattleAnimArgs
lsrs r0, 24
@@ -564,7 +564,7 @@ _080AE024:
strh r0, [r6, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
@@ -609,7 +609,7 @@ _080AE090:
ldr r0, _080AE118 @ =gBattleAnimAttacker
_080AE092:
ldrb r6, [r0]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AE0AA
@@ -626,7 +626,7 @@ _080AE0AA:
_080AE0B2:
adds r0, r6, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080AE11C @ =gBattleAnimArgs
lsrs r0, 24
@@ -635,7 +635,7 @@ _080AE0B2:
strh r0, [r5, 0x20]
adds r0, r6, 0
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x2]
@@ -811,7 +811,7 @@ sub_80AE220: @ 80AE220
ldr r6, _080AE268 @ =gBattleAnimTarget
ldrb r0, [r6]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
ldr r1, _080AE26C @ =gTasks
lsls r4, r5, 2
adds r4, r5
@@ -825,7 +825,7 @@ sub_80AE220: @ 80AE220
strh r0, [r4, 0x8]
ldrb r0, [r6]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r5, 0x2]
@@ -1233,13 +1233,13 @@ _080AE56C:
_080AE56E:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x24]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x26]
@@ -1466,13 +1466,13 @@ _080AE738:
_080AE73A:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1509,13 +1509,13 @@ _080AE790:
_080AE792:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1548,13 +1548,13 @@ sub_80AE7DC: @ 80AE7DC
ldr r4, _080AE834 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1680,7 +1680,7 @@ _080AE8D4:
ldr r4, _080AE908 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x24]
@@ -1897,13 +1897,13 @@ _080AEA88: .4byte 0x0000fff0
_080AEA8C:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0xE]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x12]
@@ -1923,13 +1923,13 @@ _080AEAB4:
ldr r4, _080AEAE8 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x12]
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r2, 0xA
@@ -2175,13 +2175,13 @@ _080AEC92:
ldr r4, _080AECC0 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -2245,13 +2245,13 @@ _080AED20:
ldr r4, _080AEDA4 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x14]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x16]
@@ -2260,7 +2260,7 @@ _080AED20:
ldr r0, _080AEDA8 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x1C]
@@ -2603,7 +2603,7 @@ _080AEFCE:
ldr r0, _080AF018 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x20
@@ -2625,12 +2625,12 @@ _080AEFF8:
ldr r4, _080AF018 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
ldrb r0, [r4]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
subs r0, 0x2
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
index e151e6d7d..d88145fde 100644
--- a/asm/evolution_scene.s
+++ b/asm/evolution_scene.s
@@ -192,7 +192,7 @@ EvolutionScene: @ 80CDDF4
ldr r0, _080CE09C @ =gBattle_BG3_Y
movs r1, 0
strh r1, [r0]
- ldr r1, _080CE0A0 @ =gUnknown_2022B50
+ ldr r1, _080CE0A0 @ =gBattleTerrain
movs r0, 0x9
strb r0, [r1]
bl sub_800F34C
@@ -409,7 +409,7 @@ _080CE090: .4byte gBattle_BG2_X
_080CE094: .4byte gBattle_BG2_Y
_080CE098: .4byte gBattle_BG3_X
_080CE09C: .4byte gBattle_BG3_Y
-_080CE0A0: .4byte gUnknown_2022B50
+_080CE0A0: .4byte gBattleTerrain
_080CE0A4: .4byte gReservedSpritePaletteCount
_080CE0A8: .4byte gUnknown_2039A20
_080CE0AC: .4byte gStringVar1
@@ -513,7 +513,7 @@ CB2_EvolutionSceneLoadGraphics: @ 80CE0E8
strh r0, [r1]
ldr r0, _080CE2AC @ =gBattle_BG3_Y
strh r4, [r0]
- ldr r1, _080CE2B0 @ =gUnknown_2022B50
+ ldr r1, _080CE2B0 @ =gBattleTerrain
movs r0, 0x9
strb r0, [r1]
bl sub_800F34C
@@ -616,7 +616,7 @@ _080CE2A0: .4byte gBattle_BG2_X
_080CE2A4: .4byte gBattle_BG2_Y
_080CE2A8: .4byte gBattle_BG3_X
_080CE2AC: .4byte gBattle_BG3_Y
-_080CE2B0: .4byte gUnknown_2022B50
+_080CE2B0: .4byte gBattleTerrain
_080CE2B4: .4byte gReservedSpritePaletteCount
_080CE2B8: .4byte gMonFrontPicTable
_080CE2BC: .4byte gMonSpritesGfxPtr
@@ -843,10 +843,10 @@ _080CE4CC:
ldrb r0, [r0]
cmp r0, 0
beq _080CE4E0
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
_080CE4E0:
movs r0, 0x1
negs r0, r0
@@ -1337,7 +1337,7 @@ sub_80CE8DC: @ 80CE8DC
strh r0, [r5, 0x8]
movs r2, 0x1
strh r2, [r5, 0x1A]
- ldr r0, _080CE944 @ =gUnknown_2023E82
+ ldr r0, _080CE944 @ =gBattleCommunication
ldrb r1, [r0, 0x2]
lsls r0, r1, 2
adds r0, r1
@@ -1349,7 +1349,7 @@ sub_80CE8DC: @ 80CE8DC
.align 2, 0
_080CE93C: .4byte gTasks
_080CE940: .4byte gPlayerParty
-_080CE944: .4byte gUnknown_2023E82
+_080CE944: .4byte gBattleCommunication
_080CE948:
ldr r0, _080CE9A0 @ =gMain
ldrh r1, [r0, 0x2C]
@@ -1367,7 +1367,7 @@ _080CE948:
ldrsh r0, [r2, r3]
cmp r0, 0x8
bne _080CE9AC
- ldr r4, _080CE9A8 @ =gUnknown_2023E82
+ ldr r4, _080CE9A8 @ =gBattleCommunication
ldrb r0, [r4, 0x2]
lsls r1, r0, 2
adds r1, r0
@@ -1395,7 +1395,7 @@ _080CE948:
.align 2, 0
_080CE9A0: .4byte gMain
_080CE9A4: .4byte gTasks
-_080CE9A8: .4byte gUnknown_2023E82
+_080CE9A8: .4byte gBattleCommunication
_080CE9AC:
mov r1, r8
adds r0, r1, r7
@@ -1497,7 +1497,7 @@ _080CEAA0:
bl StringExpandPlaceholders
adds r0, r4, 0
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080CEACC @ =gTasks
mov r2, r8
adds r1, r2, r7
@@ -1584,7 +1584,7 @@ _080CEB68:
bl InitMovingBackgroundTask
movs r0, 0x11
bl LaunchTask_PreEvoSparklesSet1
- ldr r1, _080CEB88 @ =gUnknown_2023E82
+ ldr r1, _080CEB88 @ =gBattleCommunication
strb r0, [r1, 0x2]
ldr r0, _080CEB8C @ =gTasks
mov r2, r8
@@ -1594,10 +1594,10 @@ _080CEB68:
b _080CEFDE
.align 2, 0
_080CEB84: .4byte gPaletteFade
-_080CEB88: .4byte gUnknown_2023E82
+_080CEB88: .4byte gBattleCommunication
_080CEB8C: .4byte gTasks
_080CEB90:
- ldr r4, _080CEBC8 @ =gUnknown_2023E82
+ ldr r4, _080CEBC8 @ =gBattleCommunication
ldrb r0, [r4, 0x2]
lsls r1, r0, 2
adds r1, r0
@@ -1623,10 +1623,10 @@ _080CEBA6:
strb r0, [r4, 0x2]
bl _080CF528
.align 2, 0
-_080CEBC8: .4byte gUnknown_2023E82
+_080CEBC8: .4byte gBattleCommunication
_080CEBCC: .4byte gUnknown_2039A20
_080CEBD0:
- ldr r4, _080CEC00 @ =gUnknown_2023E82
+ ldr r4, _080CEC00 @ =gBattleCommunication
ldrb r0, [r4, 0x2]
lsls r1, r0, 2
adds r1, r0
@@ -1649,7 +1649,7 @@ _080CEBE6:
add r1, r10
b _080CEFDE
.align 2, 0
-_080CEC00: .4byte gUnknown_2023E82
+_080CEC00: .4byte gBattleCommunication
_080CEC04: .4byte gUnknown_2039A20
_080CEC08:
ldr r2, _080CEC44 @ =gUnknown_2039A20
@@ -1665,7 +1665,7 @@ _080CEC1C:
ldr r1, [r2]
movs r0, 0x3
strb r0, [r1, 0x3]
- ldr r0, _080CEC48 @ =gUnknown_2023E82
+ ldr r0, _080CEC48 @ =gBattleCommunication
ldrb r1, [r0, 0x2]
lsls r0, r1, 2
adds r0, r1
@@ -1683,10 +1683,10 @@ _080CEC38:
b _080CEFDE
.align 2, 0
_080CEC44: .4byte gUnknown_2039A20
-_080CEC48: .4byte gUnknown_2023E82
+_080CEC48: .4byte gBattleCommunication
_080CEC4C:
bl sub_80F5F74
- ldr r1, _080CEC60 @ =gUnknown_2023E82
+ ldr r1, _080CEC60 @ =gBattleCommunication
strb r0, [r1, 0x2]
ldr r0, _080CEC64 @ =gTasks
mov r3, r8
@@ -1695,10 +1695,10 @@ _080CEC4C:
adds r1, r0
b _080CEFDE
.align 2, 0
-_080CEC60: .4byte gUnknown_2023E82
+_080CEC60: .4byte gBattleCommunication
_080CEC64: .4byte gTasks
_080CEC68:
- ldr r6, _080CEC90 @ =gUnknown_2023E82
+ ldr r6, _080CEC90 @ =gBattleCommunication
ldrb r0, [r6, 0x2]
lsls r1, r0, 2
adds r1, r0
@@ -1718,9 +1718,9 @@ _080CEC7E:
strb r0, [r6, 0x2]
b _080CEF2E
.align 2, 0
-_080CEC90: .4byte gUnknown_2023E82
+_080CEC90: .4byte gBattleCommunication
_080CEC94:
- ldr r0, _080CECBC @ =gUnknown_2023E82
+ ldr r0, _080CECBC @ =gBattleCommunication
ldrb r1, [r0, 0x2]
lsls r0, r1, 2
adds r0, r1
@@ -1739,7 +1739,7 @@ _080CECAA:
add r1, r10
b _080CEFDE
.align 2, 0
-_080CECBC: .4byte gUnknown_2023E82
+_080CECBC: .4byte gBattleCommunication
_080CECC0:
bl IsSEPlaying
lsls r0, 24
@@ -1802,7 +1802,7 @@ _080CED3A:
bl StringExpandPlaceholders
adds r0, r4, 0
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080CEDB0 @ =0x00000103
bl PlayBGM
ldr r2, _080CEDB4 @ =gTasks
@@ -1971,7 +1971,7 @@ _080CEEC4: .4byte gPaletteFade
_080CEEC8: .4byte gUnknown_2039A20
_080CEECC: .4byte gUnknown_300537C
_080CEED0:
- ldr r0, _080CEF04 @ =gUnknown_2023E82
+ ldr r0, _080CEF04 @ =gBattleCommunication
ldrb r1, [r0, 0x2]
lsls r0, r1, 2
adds r0, r1
@@ -1996,7 +1996,7 @@ _080CEEE4:
add r1, r10
b _080CEFDE
.align 2, 0
-_080CEF04: .4byte gUnknown_2023E82
+_080CEF04: .4byte gBattleCommunication
_080CEF08: .4byte 0x0006001c
_080CEF0C: .4byte 0x00007fff
_080CEF10:
@@ -2055,7 +2055,7 @@ _080CEF70:
_080CEF78:
ldr r0, _080CEF90 @ =gStringVar4
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r1, _080CEF98 @ =gTasks
mov r2, r8
adds r0, r2, r7
@@ -2090,7 +2090,7 @@ _080CEFB6:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CEFF0 @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080CEFF4 @ =gTasks
mov r3, r8
adds r1, r3, r7
@@ -2193,7 +2193,7 @@ _080CF0A2:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CF0CC @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080CF0D0 @ =gTasks
mov r2, r8
adds r1, r2, r7
@@ -2225,7 +2225,7 @@ _080CF0EE:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CF114 @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080CF118 @ =gTasks
mov r3, r8
adds r1, r3, r7
@@ -2253,7 +2253,7 @@ _080CF11C:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CF1AC @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080CF1B0 @ =gTasks
mov r2, r8
adds r1, r2, r7
@@ -2286,10 +2286,10 @@ _080CF176:
movs r1, 0x8
movs r2, 0x1D
movs r3, 0xD
- bl sub_802DB7C
- ldr r0, _080CF1B4 @ =gUnknown_83FE791
+ bl HandleBattleWindow
+ ldr r0, _080CF1B4 @ =gText_BattleYesNoChoice
movs r1, 0xE
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080CF1B0 @ =gTasks
mov r3, r8
adds r1, r3, r7
@@ -2299,16 +2299,16 @@ _080CF176:
adds r0, 0x1
movs r2, 0
strh r0, [r1, 0x14]
- ldr r0, _080CF1B8 @ =gUnknown_2023E82
+ ldr r0, _080CF1B8 @ =gBattleCommunication
strb r2, [r0, 0x1]
- bl sub_802DCB8
+ bl BattleCreateYesNoCursorAt
b _080CF528
.align 2, 0
_080CF1A8: .4byte gUnknown_83FDF3C
_080CF1AC: .4byte gDisplayedStringBattle
_080CF1B0: .4byte gTasks
-_080CF1B4: .4byte gUnknown_83FE791
-_080CF1B8: .4byte gUnknown_2023E82
+_080CF1B4: .4byte gText_BattleYesNoChoice
+_080CF1B8: .4byte gBattleCommunication
_080CF1BC:
ldr r0, _080CF244 @ =gMain
ldrh r1, [r0, 0x2E]
@@ -2316,16 +2316,16 @@ _080CF1BC:
ands r0, r1
cmp r0, 0
beq _080CF1E2
- ldr r4, _080CF248 @ =gUnknown_2023E82
+ ldr r4, _080CF248 @ =gBattleCommunication
ldrb r0, [r4, 0x1]
cmp r0, 0
beq _080CF1E2
movs r0, 0x5
bl PlaySE
- bl sub_802DCF8
+ bl BattleDestroyYesNoCursorAt
movs r0, 0
strb r0, [r4, 0x1]
- bl sub_802DCB8
+ bl BattleCreateYesNoCursorAt
_080CF1E2:
ldr r0, _080CF244 @ =gMain
ldrh r1, [r0, 0x2E]
@@ -2333,16 +2333,16 @@ _080CF1E2:
ands r0, r1
cmp r0, 0
beq _080CF208
- ldr r4, _080CF248 @ =gUnknown_2023E82
+ ldr r4, _080CF248 @ =gBattleCommunication
ldrb r0, [r4, 0x1]
cmp r0, 0
bne _080CF208
movs r0, 0x5
bl PlaySE
- bl sub_802DCF8
+ bl BattleDestroyYesNoCursorAt
movs r0, 0x1
strb r0, [r4, 0x1]
- bl sub_802DCB8
+ bl BattleCreateYesNoCursorAt
_080CF208:
ldr r0, _080CF244 @ =gMain
ldrh r1, [r0, 0x2E]
@@ -2356,10 +2356,10 @@ _080CF208:
movs r1, 0x8
movs r2, 0x1D
movs r3, 0xD
- bl sub_802DB7C
+ bl HandleBattleWindow
movs r0, 0x5
bl PlaySE
- ldr r0, _080CF248 @ =gUnknown_2023E82
+ ldr r0, _080CF248 @ =gBattleCommunication
ldrb r2, [r0, 0x1]
cmp r2, 0
beq _080CF250
@@ -2373,7 +2373,7 @@ _080CF208:
b _080CF276
.align 2, 0
_080CF244: .4byte gMain
-_080CF248: .4byte gUnknown_2023E82
+_080CF248: .4byte gBattleCommunication
_080CF24C: .4byte gTasks
_080CF250:
ldr r0, _080CF2AC @ =gTasks
@@ -2409,7 +2409,7 @@ _080CF284:
movs r1, 0x8
movs r2, 0x1D
movs r3, 0xD
- bl sub_802DB7C
+ bl HandleBattleWindow
movs r0, 0x5
bl PlaySE
ldr r1, _080CF2AC @ =gTasks
@@ -2449,7 +2449,7 @@ _080CF2C2:
ldr r4, _080CF308 @ =gMoveToLearn
ldrh r4, [r4]
str r4, [sp]
- bl sub_8134738
+ bl ShowSelectMovePokemonSummaryScreen
ldrh r0, [r5, 0x14]
adds r0, 0x1
strh r0, [r5, 0x14]
@@ -2510,7 +2510,7 @@ _080CF34C:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CF390 @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r1, _080CF394 @ =gTasks
mov r2, r8
adds r0, r2, r7
@@ -2566,7 +2566,7 @@ _080CF3E0:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CF40C @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080CF410 @ =gTasks
mov r2, r8
adds r1, r2, r7
@@ -2598,7 +2598,7 @@ _080CF42E:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CF454 @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r0, _080CF458 @ =gTasks
mov r3, r8
adds r1, r3, r7
@@ -2629,7 +2629,7 @@ _080CF45C:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CF49C @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r1, _080CF4A0 @ =gTasks
mov r2, r8
adds r0, r2, r7
@@ -2648,7 +2648,7 @@ _080CF4A4:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CF4D0 @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r1, _080CF4D4 @ =gTasks
mov r3, r8
adds r0, r3, r7
@@ -2671,7 +2671,7 @@ _080CF4D8:
bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, _080CF4FC @ =gDisplayedStringBattle
movs r1, 0
- bl sub_80D87BC
+ bl BattlePutTextOnWindow
ldr r1, _080CF500 @ =gTasks
mov r2, r8
adds r0, r2, r7
@@ -2751,7 +2751,7 @@ sub_80CF53C: @ 80CF53C
strh r0, [r4, 0x8]
movs r2, 0x1
strh r2, [r4, 0x1A]
- ldr r0, _080CF5C4 @ =gUnknown_2023E82
+ ldr r0, _080CF5C4 @ =gBattleCommunication
ldrb r1, [r0, 0x2]
lsls r0, r1, 2
adds r0, r1
@@ -2784,7 +2784,7 @@ _080CF5B2:
.align 2, 0
_080CF5BC: .4byte gTasks
_080CF5C0: .4byte gPlayerParty
-_080CF5C4: .4byte gUnknown_2023E82
+_080CF5C4: .4byte gBattleCommunication
_080CF5C8: .4byte _080CF5CC
.align 2, 0
_080CF5CC:
@@ -2911,7 +2911,7 @@ _080CF6E0:
adds r5, 0x10
adds r0, r5, 0
bl LaunchTask_PreEvoSparklesSet1
- ldr r1, _080CF730 @ =gUnknown_2023E82
+ ldr r1, _080CF730 @ =gBattleCommunication
strb r0, [r1, 0x2]
ldr r0, _080CF734 @ =gTasks
adds r1, r7, r6
@@ -2928,11 +2928,11 @@ _080CF6E0:
_080CF724: .4byte gPaletteFade
_080CF728: .4byte gSprites
_080CF72C: .4byte gUnknown_2039A20
-_080CF730: .4byte gUnknown_2023E82
+_080CF730: .4byte gBattleCommunication
_080CF734: .4byte gTasks
_080CF738: .4byte 0x00000603
_080CF73C:
- ldr r4, _080CF770 @ =gUnknown_2023E82
+ ldr r4, _080CF770 @ =gBattleCommunication
ldrb r0, [r4, 0x2]
lsls r1, r0, 2
adds r1, r0
@@ -2957,10 +2957,10 @@ _080CF752:
strb r0, [r4, 0x2]
bl _080D003A
.align 2, 0
-_080CF770: .4byte gUnknown_2023E82
+_080CF770: .4byte gBattleCommunication
_080CF774: .4byte gUnknown_2039A20
_080CF778:
- ldr r4, _080CF7A4 @ =gUnknown_2023E82
+ ldr r4, _080CF7A4 @ =gBattleCommunication
ldrb r0, [r4, 0x2]
lsls r1, r0, 2
adds r1, r0
@@ -2982,7 +2982,7 @@ _080CF78E:
adds r1, r5
b _080CFB1A
.align 2, 0
-_080CF7A4: .4byte gUnknown_2023E82
+_080CF7A4: .4byte gBattleCommunication
_080CF7A8: .4byte gUnknown_2039A20
_080CF7AC:
ldr r2, _080CF7E4 @ =gUnknown_2039A20
@@ -2998,7 +2998,7 @@ _080CF7C0:
ldr r1, [r2]
movs r0, 0x3
strb r0, [r1, 0x3]
- ldr r0, _080CF7E8 @ =gUnknown_2023E82
+ ldr r0, _080CF7E8 @ =gBattleCommunication
ldrb r1, [r0, 0x2]
lsls r0, r1, 2
adds r0, r1
@@ -3015,10 +3015,10 @@ _080CF7DC:
b _080CFB1A
.align 2, 0
_080CF7E4: .4byte gUnknown_2039A20
-_080CF7E8: .4byte gUnknown_2023E82
+_080CF7E8: .4byte gBattleCommunication
_080CF7EC:
bl sub_80F5F74
- ldr r1, _080CF800 @ =gUnknown_2023E82
+ ldr r1, _080CF800 @ =gBattleCommunication
strb r0, [r1, 0x2]
ldr r0, _080CF804 @ =gTasks
adds r1, r7, r6
@@ -3026,10 +3026,10 @@ _080CF7EC:
adds r1, r0
b _080CFB1A
.align 2, 0
-_080CF800: .4byte gUnknown_2023E82
+_080CF800: .4byte gBattleCommunication
_080CF804: .4byte gTasks
_080CF808:
- ldr r0, _080CF834 @ =gUnknown_2023E82
+ ldr r0, _080CF834 @ =gBattleCommunication
mov r8, r0
ldrb r0, [r0, 0x2]
lsls r1, r0, 2
@@ -3050,9 +3050,9 @@ _080CF820:
strb r0, [r1, 0x2]
b _080CFA90
.align 2, 0
-_080CF834: .4byte gUnknown_2023E82
+_080CF834: .4byte gBattleCommunication
_080CF838:
- ldr r0, _080CF85C @ =gUnknown_2023E82
+ ldr r0, _080CF85C @ =gBattleCommunication
ldrb r1, [r0, 0x2]
lsls r0, r1, 2
adds r0, r1
@@ -3070,7 +3070,7 @@ _080CF84E:
adds r1, r5
b _080CFB1A
.align 2, 0
-_080CF85C: .4byte gUnknown_2023E82
+_080CF85C: .4byte gBattleCommunication
_080CF860:
bl IsSEPlaying
lsls r0, 24
@@ -3261,7 +3261,7 @@ _080CFA08: .4byte gUnknown_2039A20
_080CFA0C: .4byte gTextFlags
_080CFA10: .4byte gUnknown_300537C
_080CFA14:
- ldr r0, _080CFA60 @ =gUnknown_2023E82
+ ldr r0, _080CFA60 @ =gBattleCommunication
ldrb r1, [r0, 0x2]
lsls r0, r1, 2
adds r0, r1
@@ -3299,7 +3299,7 @@ _080CFA28:
adds r1, r5
b _080CFB1A
.align 2, 0
-_080CFA60: .4byte gUnknown_2023E82
+_080CFA60: .4byte gBattleCommunication
_080CFA64: .4byte gSprites
_080CFA68: .4byte gUnknown_2039A20
_080CFA6C: .4byte 0x0004001c
@@ -3578,7 +3578,7 @@ _080CFCAE:
movs r2, 0
movs r3, 0x2
bl CreateYesNoMenu
- ldr r3, _080CFCF8 @ =gUnknown_2023E82
+ ldr r3, _080CFCF8 @ =gBattleCommunication
strb r4, [r3, 0x1]
ldr r0, _080CFCF0 @ =gTasks
adds r1, r7, r6
@@ -3595,7 +3595,7 @@ _080CFCE8: .4byte gUnknown_83FDF3C
_080CFCEC: .4byte gDisplayedStringBattle
_080CFCF0: .4byte gTasks
_080CFCF4: .4byte gUnknown_826D1CC
-_080CFCF8: .4byte gUnknown_2023E82
+_080CFCF8: .4byte gBattleCommunication
_080CFCFC:
bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
@@ -3614,7 +3614,7 @@ _080CFD16:
beq _080CFD70
b _080D003A
_080CFD1C:
- ldr r0, _080CFD60 @ =gUnknown_2023E82
+ ldr r0, _080CFD60 @ =gBattleCommunication
strb r4, [r0, 0x1]
ldr r0, _080CFD64 @ =gUnknown_83FDF3C
movs r3, 0x92
@@ -3648,12 +3648,12 @@ _080CFD56:
bl BeginNormalPaletteFade
b _080D003A
.align 2, 0
-_080CFD60: .4byte gUnknown_2023E82
+_080CFD60: .4byte gBattleCommunication
_080CFD64: .4byte gUnknown_83FDF3C
_080CFD68: .4byte gDisplayedStringBattle
_080CFD6C: .4byte gTasks
_080CFD70:
- ldr r1, _080CFD9C @ =gUnknown_2023E82
+ ldr r1, _080CFD9C @ =gBattleCommunication
movs r0, 0x1
strb r0, [r1, 0x1]
ldr r0, _080CFDA0 @ =gUnknown_83FDF3C
@@ -3674,7 +3674,7 @@ _080CFD70:
strh r1, [r0, 0x14]
b _080D003A
.align 2, 0
-_080CFD9C: .4byte gUnknown_2023E82
+_080CFD9C: .4byte gBattleCommunication
_080CFDA0: .4byte gUnknown_83FDF3C
_080CFDA4: .4byte gDisplayedStringBattle
_080CFDA8: .4byte gTasks
@@ -3718,7 +3718,7 @@ _080CFDC6:
ldr r4, _080CFE2C @ =gMoveToLearn
ldrh r4, [r4]
str r4, [sp]
- bl sub_8134738
+ bl ShowSelectMovePokemonSummaryScreen
ldrh r0, [r5, 0x14]
adds r0, 0x1
strh r0, [r5, 0x14]
diff --git a/asm/field_effect.s b/asm/field_effect.s
index 7bd1abe80..2393df6a6 100644
--- a/asm/field_effect.s
+++ b/asm/field_effect.s
@@ -5758,7 +5758,7 @@ _08086024: .4byte sub_8085DDC
thumb_func_start FldEff_FieldMoveShowMon
FldEff_FieldMoveShowMon: @ 8086028
push {r4,lr}
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
lsls r0, 24
lsrs r0, 24
bl is_light_level_1_2_3_5_or_6
diff --git a/asm/field_fadetransition.s b/asm/field_fadetransition.s
index b2eb846e7..4b707a46a 100644
--- a/asm/field_fadetransition.s
+++ b/asm/field_fadetransition.s
@@ -49,7 +49,7 @@ pal_fill_for_maplights: @ 807DB58
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -88,7 +88,7 @@ sub_807DBAC: @ 807DBAC
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -148,7 +148,7 @@ sub_807DC18: @ 807DC18
cmp r0, 0
bne _0807DC58
_0807DC36:
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
lsls r0, 24
lsrs r0, 24
ldrb r1, [r4, 0x17]
@@ -180,7 +180,7 @@ _0807DC6A:
thumb_func_start sub_807DC70
sub_807DC70: @ 807DC70
push {r4,lr}
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -406,7 +406,7 @@ _0807DE1E:
bl sub_800AB9C
b _0807DE32
_0807DE24:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0807DE50
@@ -475,7 +475,7 @@ sub_807DE78: @ 807DE78
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 92ef6a6e4..2b16f5e1f 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -666,7 +666,7 @@ _0805E2E0:
sub_805E2E8: @ 805E2E8
push {r4,r5,lr}
adds r4, r0, 0
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
lsls r0, 24
lsrs r0, 24
bl is_light_level_1_2_3_5_or_6
diff --git a/asm/field_weather.s b/asm/field_weather.s
index ac24101a7..403a365be 100644
--- a/asm/field_weather.s
+++ b/asm/field_weather.s
@@ -1737,8 +1737,8 @@ _0807A93C: .4byte 0x000006ca
_0807A940: .4byte 0x000006cb
thumb_func_end fade_screen
- thumb_func_start sub_807A944
-sub_807A944: @ 807A944
+ thumb_func_start FieldWeather_StartFadingOutCreditsMap
+FieldWeather_StartFadingOutCreditsMap: @ 807A944
push {r4-r6,lr}
sub sp, 0x4
adds r6, r2, 0
@@ -1887,7 +1887,7 @@ _0807AA60: .4byte gUnknown_2037F34
_0807AA64: .4byte 0x000006c6
_0807AA68: .4byte 0x000006ca
_0807AA6C: .4byte 0x000006cb
- thumb_func_end sub_807A944
+ thumb_func_end FieldWeather_StartFadingOutCreditsMap
thumb_func_start sub_807AA70
sub_807AA70: @ 807AA70
@@ -2561,8 +2561,8 @@ _0807AF92:
bx r0
thumb_func_end sub_807AF00
- thumb_func_start weather_get_current
-weather_get_current: @ 807AF98
+ thumb_func_start GetCurrentWeather
+GetCurrentWeather: @ 807AF98
ldr r0, _0807AFA4 @ =gUnknown_2037F34
movs r1, 0xDA
lsls r1, 3
@@ -2571,7 +2571,7 @@ weather_get_current: @ 807AF98
bx lr
.align 2, 0
_0807AFA4: .4byte gUnknown_2037F34
- thumb_func_end weather_get_current
+ thumb_func_end GetCurrentWeather
thumb_func_start SetRainStrengthFromSoundEffect
SetRainStrengthFromSoundEffect: @ 807AFA8
diff --git a/asm/fighting.s b/asm/fighting.s
index 518927a3c..81785b16b 100644
--- a/asm/fighting.s
+++ b/asm/fighting.s
@@ -76,7 +76,7 @@ _080B0924: .4byte gBattleAnimAttacker
sub_80B0928: @ 80B0928
push {r4,lr}
adds r4, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B0944
@@ -176,13 +176,13 @@ _080B09E8:
bl StartSpriteAnim
mov r0, r8
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
mov r0, r8
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -242,7 +242,7 @@ _080B0A74:
negs r0, r0
lsrs r4, r0, 16
_080B0A86:
- ldr r0, _080B0B14 @ =gUnknown_2023BD6
+ ldr r0, _080B0B14 @ =gBattlerPositions
add r0, r8
ldrb r1, [r0]
adds r0, r7, 0
@@ -313,7 +313,7 @@ _080B0B00:
bx r0
.align 2, 0
_080B0B10: .4byte gBattleAnimTarget
-_080B0B14: .4byte gUnknown_2023BD6
+_080B0B14: .4byte gBattlerPositions
_080B0B18: .4byte 0xfff00000
_080B0B1C: .4byte gUnknown_83E7C08
_080B0B20: .4byte gSprites
@@ -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
@@ -644,17 +644,17 @@ sub_80B0D7C: @ 80B0D7C
ldr r4, _080B0DC8 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
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
@@ -778,13 +778,13 @@ _080B0E9C:
_080B0E9E:
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -896,7 +896,7 @@ sub_80B0F68: @ 80B0F68
ldr r4, _080B0F90 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r2, [r6, 0x4]
@@ -909,7 +909,7 @@ _080B0F94:
ldr r4, _080B0FF0 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x4]
@@ -918,7 +918,7 @@ _080B0FA6:
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r6, [r6, 0x6]
@@ -1037,16 +1037,16 @@ sub_80B107C: @ 80B107C
ldrsh r0, [r0, r1]
cmp r0, 0
bne _080B10D8
- ldr r4, _080B10CC @ =sBattler_AI
+ ldr r4, _080B10CC @ =gBattlerAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1066,7 +1066,7 @@ sub_80B107C: @ 80B107C
b _080B10F4
.align 2, 0
_080B10C8: .4byte gBattleAnimArgs
-_080B10CC: .4byte sBattler_AI
+_080B10CC: .4byte gBattlerAttacker
_080B10D0: .4byte gBattleAnimAttacker
_080B10D4: .4byte gBattleAnimTarget
_080B10D8:
@@ -1125,7 +1125,7 @@ sub_80B111C: @ 80B111C
lsls r0, 24
lsrs r0, 24
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
@@ -1135,7 +1135,7 @@ sub_80B111C: @ 80B111C
lsls r0, 24
lsrs r0, 24
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
@@ -1245,13 +1245,13 @@ _080B1236:
ldr r4, _080B1298 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r6, r0, 0
lsls r6, 24
lsrs r6, 24
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
@@ -1259,14 +1259,14 @@ _080B1236:
mov r8, r2
ldrb r0, [r2]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
mov r1, r8
ldrb r0, [r1]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
subs r4, r6
strh r4, [r7, 0x2E]
@@ -1341,16 +1341,16 @@ sub_80B12E8: @ 80B12E8
ldrsh r0, [r0, r1]
cmp r0, 0
bne _080B132C
- ldr r4, _080B1320 @ =sBattler_AI
+ ldr r4, _080B1320 @ =gBattlerAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1360,7 +1360,7 @@ sub_80B12E8: @ 80B12E8
b _080B1332
.align 2, 0
_080B131C: .4byte gBattleAnimArgs
-_080B1320: .4byte sBattler_AI
+_080B1320: .4byte gBattlerAttacker
_080B1324: .4byte gBattleAnimTarget
_080B1328: .4byte gBattleAnimAttacker
_080B132C:
@@ -1379,7 +1379,7 @@ _080B1332:
ands r0, r2
orrs r0, r1
strb r0, [r5, 0x5]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B136C
@@ -1418,7 +1418,7 @@ _080B138C:
strh r0, [r5, 0x30]
adds r0, r4, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
@@ -1426,7 +1426,7 @@ _080B138C:
strh r0, [r5, 0x34]
adds r0, r4, 0
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -1473,13 +1473,13 @@ sub_80B13F8: @ 80B13F8
ldr r4, _080B1474 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1555,7 +1555,7 @@ _080B14A0:
movs r1, 0
bl sub_8075114
_080B14A8:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B14BC
diff --git a/asm/fire.s b/asm/fire.s
index f4b89300a..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
@@ -484,7 +484,7 @@ sub_80ACC88: @ 80ACC88
ldr r4, _080ACCD8 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
@@ -492,7 +492,7 @@ sub_80ACC88: @ 80ACC88
strh r0, [r5, 0x34]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -522,13 +522,13 @@ sub_80ACCE0: @ 80ACCE0
ldr r5, _080ACD20 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x22]
@@ -782,7 +782,7 @@ sub_80ACEA4: @ 80ACEA4
lsls r0, 24
lsrs r0, 24
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
ldr r0, _080ACF10 @ =sub_80ACF14
str r0, [r4]
pop {r4,r5}
@@ -1147,7 +1147,7 @@ _080AD1A8:
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
- bl sub_8075980
+ bl ResetSpriteRotScale
strh r5, [r4, 0xC]
_080AD1D4:
ldrh r0, [r4, 0x8]
@@ -1758,7 +1758,7 @@ _080AD612:
ldr r4, _080AD688 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
@@ -1766,7 +1766,7 @@ _080AD612:
strh r0, [r5, 0x34]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -1877,7 +1877,7 @@ _080AD70C:
movs r1, 0xFF
ands r0, r1
strh r0, [r4, 0x30]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AD7A8
@@ -1999,7 +1999,7 @@ _080AD826:
ldrb r1, [r0]
movs r0, 0x2
eors r0, r1
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
lsrs r0, 24
adds r0, 0x1
diff --git a/asm/fldeff_flash.s b/asm/fldeff_flash.s
index c25978eb1..4ce45b5c7 100644
--- a/asm/fldeff_flash.s
+++ b/asm/fldeff_flash.s
@@ -209,7 +209,7 @@ sub_80C9CE8: @ 80C9CE8
bl get_map_light_from_warp0
lsls r0, 24
lsrs r7, r0, 24
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
lsls r0, 24
lsrs r6, r0, 24
movs r4, 0
diff --git a/asm/flying.s b/asm/flying.s
index ada0296c8..a776b54cb 100644
--- a/asm/flying.s
+++ b/asm/flying.s
@@ -228,7 +228,7 @@ _080B1A3C:
ldr r5, _080B1A90 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
@@ -238,7 +238,7 @@ _080B1A3C:
strh r0, [r6, 0x34]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r4, [r4, 0x6]
@@ -302,7 +302,7 @@ sub_80B1AB8: @ 80B1AB8
negs r0, r0
strh r0, [r1, 0x6]
_080B1AE4:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B1AFC
@@ -316,13 +316,13 @@ _080B1AE4:
_080B1AFC:
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r2, _080B1B58 @ =gBattleAnimArgs
ldrh r1, [r2]
@@ -342,13 +342,13 @@ _080B1AFC:
ldr r4, _080B1B5C @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -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
@@ -504,7 +504,7 @@ _080B1C72:
ldr r4, _080B1CB8 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
@@ -512,7 +512,7 @@ _080B1C72:
strh r0, [r5, 0x34]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -672,7 +672,7 @@ _080B1DB2:
_080B1DC8:
adds r0, r6, 0
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080B1E60 @ =gBattleAnimArgs
lsrs r0, 24
@@ -681,7 +681,7 @@ _080B1DC8:
strh r0, [r7, 0x20]
adds r0, r6, 0
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldrh r1, [r4, 0x2]
lsrs r0, 24
@@ -720,7 +720,7 @@ _080B1DC8:
lsrs r1, 16
cmp r1, 0x7F
bhi _080B1EBE
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B1E64
@@ -1017,7 +1017,7 @@ _080B2028:
ands r0, r1
cmp r0, 0
beq _080B20E6
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B20B6
@@ -1149,7 +1149,7 @@ _080B211C:
ands r0, r1
cmp r0, 0
beq _080B21DA
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B21AA
@@ -1281,7 +1281,7 @@ _080B2210:
ands r0, r1
cmp r0, 0
beq _080B22CE
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B229E
@@ -1422,7 +1422,7 @@ _080B2318:
ands r0, r1
cmp r0, 0
beq _080B23D6
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B23A6
@@ -1627,13 +1627,13 @@ sub_80B24C0: @ 80B24C0
ldr r5, _080B250C @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -1659,11 +1659,11 @@ sub_80B2514: @ 80B2514
strh r0, [r4, 0x32]
ldrh r0, [r5, 0x4]
strh r0, [r4, 0x34]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B25C4
- ldr r0, _080B2558 @ =gUnknown_2023BD6
+ ldr r0, _080B2558 @ =gBattlerPositions
ldr r1, _080B255C @ =gBattleAnimTarget
ldrb r2, [r1]
adds r0, r2, r0
@@ -1674,7 +1674,7 @@ sub_80B2514: @ 80B2514
beq _080B2560
adds r0, r2, 0
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r5, [r5, 0x6]
@@ -1682,12 +1682,12 @@ sub_80B2514: @ 80B2514
b _080B256E
.align 2, 0
_080B2554: .4byte gBattleAnimArgs
-_080B2558: .4byte gUnknown_2023BD6
+_080B2558: .4byte gBattlerPositions
_080B255C: .4byte gBattleAnimTarget
_080B2560:
adds r0, r2, 0
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x28
@@ -1737,7 +1737,7 @@ _080B25C4:
ldr r0, _080B267C @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r5, [r5, 0x6]
@@ -2127,13 +2127,13 @@ sub_80B2868: @ 80B2868
ldr r5, _080B2910 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
@@ -2237,7 +2237,7 @@ _080B2990:
ldr r0, _080B29A8 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -2454,13 +2454,13 @@ _080B2B20:
_080B2B22:
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -2614,13 +2614,13 @@ _080B2C54:
_080B2C56:
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x20
@@ -2773,14 +2773,14 @@ sub_80B2D64: @ 80B2D64
ldr r6, _080B2E18 @ =gBattleAnimAttacker
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r1, r8
strh r0, [r1, 0x20]
ldrb r0, [r6]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r6, r0, 0
lsls r6, 24
lsrs r6, 24
diff --git a/asm/ghost.s b/asm/ghost.s
index 2d550e6f7..194f728fe 100644
--- a/asm/ghost.s
+++ b/asm/ghost.s
@@ -19,7 +19,7 @@ sub_80B5268: @ 80B5268
ldr r5, _080B52C8 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
@@ -27,7 +27,7 @@ sub_80B5268: @ 80B5268
strh r0, [r4, 0x34]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
@@ -358,12 +358,12 @@ sub_80B54E8: @ 80B54E8
lsrs r4, 24
adds r0, r4, 0
movs r1, 0x1
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
adds r0, r4, 0
movs r1, 0x80
movs r2, 0x80
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldr r1, _080B5560 @ =gSprites
lsls r0, r4, 4
adds r0, r4
@@ -485,11 +485,11 @@ _080B55F0:
adds r0, r1, 0
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
b _080B5634
_080B5618:
adds r0, r1, 0
- bl sub_8075980
+ bl ResetSpriteRotScale
adds r0, r5, 0
bl DestroyAnimVisualTask
movs r0, 0x50
@@ -518,7 +518,7 @@ sub_80B563C: @ 80B563C
mov r8, r0
ldrb r0, [r0]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r1, 0
@@ -527,7 +527,7 @@ sub_80B563C: @ 80B563C
mov r1, r8
ldrb r0, [r1]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -637,13 +637,13 @@ _080B572E:
ldr r4, _080B5794 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x30]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
@@ -700,13 +700,13 @@ _080B5798:
ldr r4, _080B57E8 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1214,7 +1214,7 @@ _080B5B68:
adds r2, r0
lsls r2, 2
adds r2, r4
- ldr r0, _080B5C18 @ =gUnknown_2024018
+ ldr r0, _080B5C18 @ =gBattleSpritesDataPtr
ldr r1, [r0]
ldr r0, _080B5C1C @ =gBattleAnimTarget
ldrb r0, [r0]
@@ -1260,7 +1260,7 @@ _080B5B68:
b _080B5C24
.align 2, 0
_080B5C14: .4byte gSprites
-_080B5C18: .4byte gUnknown_2024018
+_080B5C18: .4byte gBattleSpritesDataPtr
_080B5C1C: .4byte gBattleAnimTarget
_080B5C20:
movs r1, 0x80
@@ -1614,12 +1614,12 @@ sub_80B5EC0: @ 80B5EC0
ldr r4, _080B5F00 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 8
movs r2, 0xE0
@@ -1636,12 +1636,12 @@ _080B5F08:
ldr r4, _080B5FD0 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 8
movs r2, 0xE0
@@ -1652,13 +1652,13 @@ _080B5F08:
_080B5F2C:
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r10, r0
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 8
movs r1, 0xE0
@@ -1808,7 +1808,7 @@ sub_80B6020: @ 80B6020
ldr r4, _080B6178 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
str r0, [sp, 0x4]
@@ -1818,7 +1818,7 @@ sub_80B6020: @ 80B6020
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x8]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B6090
@@ -1840,7 +1840,7 @@ _080B6092:
lsls r0, r4, 24
lsrs r4, r0, 24
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B615E
@@ -1860,7 +1860,7 @@ _080B6092:
beq _080B615E
adds r0, r4, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r10, r0
@@ -2253,7 +2253,7 @@ sub_80B63B4: @ 80B63B4
lsls r0, 24
cmp r0, 0
bne _080B63FC
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B6414
@@ -2872,7 +2872,7 @@ sub_80B68C8: @ 80B68C8
ldr r5, _080B6964 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x1A]
@@ -2898,7 +2898,7 @@ sub_80B68C8: @ 80B68C8
lsrs r0, 24
strh r0, [r4, 0x12]
ldrb r0, [r5]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r0, 24
subs r0, 0x2
diff --git a/asm/ground.s b/asm/ground.s
index 4009c7056..3df01daf8 100644
--- a/asm/ground.s
+++ b/asm/ground.s
@@ -12,13 +12,13 @@ sub_80B8B6C: @ 80B8B6C
ldr r5, _080B8BC4 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -27,13 +27,13 @@ sub_80B8B6C: @ 80B8B6C
ldr r5, _080B8BC8 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
@@ -77,13 +77,13 @@ sub_80B8BD4: @ 80B8BD4
ldr r4, _080B8C30 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -141,7 +141,7 @@ _080B8C74:
ldr r5, _080B8CBC @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
@@ -149,13 +149,13 @@ _080B8C74:
strh r0, [r6, 0x32]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
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
@@ -262,7 +262,7 @@ sub_80B8D58: @ 80B8D58
ldr r4, _080B8DC4 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r2, [r6, 0x2]
@@ -270,7 +270,7 @@ sub_80B8D58: @ 80B8D58
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r3, [r6, 0x4]
@@ -1080,7 +1080,7 @@ _080B9396:
_080B93B2:
adds r0, r4, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r6
@@ -1150,7 +1150,7 @@ _080B943A:
ldrb r5, [r0]
adds r0, r5, 0
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldr r2, _080B949C @ =0x0000fff0
@@ -1224,7 +1224,7 @@ sub_80B94B4: @ 80B94B4
_080B94D8: .4byte gTasks
_080B94DC: .4byte gBattleAnimArgs
_080B94E0:
- ldr r0, _080B950C @ =gUnknown_2037EEC
+ ldr r0, _080B950C @ =gAnimMovePower
ldrh r0, [r0]
movs r1, 0xA
bl __udivsi3
@@ -1247,7 +1247,7 @@ _080B94EC:
ldr r0, _080B9514 @ =sub_80B9584
b _080B9576
.align 2, 0
-_080B950C: .4byte gUnknown_2037EEC
+_080B950C: .4byte gAnimMovePower
_080B9510: .4byte gBattle_BG3_X
_080B9514: .4byte sub_80B9584
_080B9518:
@@ -1257,7 +1257,7 @@ _080B9518:
_080B951E:
lsls r0, r5, 24
lsrs r0, 24
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B9548
@@ -1641,7 +1641,7 @@ sub_80B97D8: @ 80B97D8
lsrs r1, r0, 24
ldr r3, _080B97F8 @ =gBattleAnimArgs
movs r2, 0
- ldr r0, _080B97FC @ =gUnknown_2037EEC
+ ldr r0, _080B97FC @ =gAnimMovePower
ldrh r0, [r0]
cmp r0, 0x63
bls _080B97EC
@@ -1654,7 +1654,7 @@ _080B97EC:
bx r0
.align 2, 0
_080B97F8: .4byte gBattleAnimArgs
-_080B97FC: .4byte gUnknown_2037EEC
+_080B97FC: .4byte gAnimMovePower
thumb_func_end sub_80B97D8
thumb_func_start sub_80B9800
@@ -1698,7 +1698,7 @@ _080B9832:
adds r4, r0
adds r0, r5, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r1, 0x20
@@ -1709,7 +1709,7 @@ _080B9832:
strh r1, [r4, 0xA]
adds r0, r5, 0
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r1, 0x40
diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s
index 19ff62664..5b28e21d5 100644
--- a/asm/hall_of_fame.s
+++ b/asm/hall_of_fame.s
@@ -138,7 +138,7 @@ _080F1EC4:
bne _080F1EF0
ldr r0, _080F1EEC @ =sub_80F1DC0
bl SetMainCallback2
- movs r0, 0x8F
+ movs r0, 0x8F @ BGM_FRLG_CONGRATULATIONS_HALL_OF_FAME >> 1
lsls r0, 1
bl PlayBGM
movs r0, 0
@@ -1448,15 +1448,15 @@ sub_80F2934: @ 80F2934
movs r0, 0x80
lsls r0, 7
bl FlagSet
- ldr r1, _080F2974 @ =gUnknown_2031DD8
+ ldr r1, _080F2974 @ =gDisableMapMusicChangeOnMapLoad
movs r0, 0x2
strb r0, [r1]
movs r2, 0x1
negs r2, r2
movs r0, 0x6
str r0, [sp]
- movs r0, 0x3
- movs r1, 0x9
+ movs r0, 0x3 @ MAP_GROUP(INDIGO_PLATEAU_EXTERIOR)
+ movs r1, 0x9 @ MAP_NUM(INDIGO_PLATEAU_EXTERIOR)
movs r3, 0xB
bl Overworld_SetWarpDestination
bl DoWarp
@@ -1466,7 +1466,7 @@ sub_80F2934: @ 80F2934
bx r0
.align 2, 0
_080F2970: .4byte 0x00004085
-_080F2974: .4byte gUnknown_2031DD8
+_080F2974: .4byte gDisableMapMusicChangeOnMapLoad
thumb_func_end sub_80F2934
thumb_func_start sub_80F2978
diff --git a/asm/ice.s b/asm/ice.s
index c04715b95..ab26d23e5 100644
--- a/asm/ice.s
+++ b/asm/ice.s
@@ -123,26 +123,26 @@ sub_80AF108: @ 80AF108
ldr r4, _080AF218 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r9, r0
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r8, r0
ldr r4, _080AF21C @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r3, r0, 24
ldrb r0, [r4]
movs r1, 0x3
str r3, [sp]
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
ldr r1, _080AF220 @ =gBattleAnimArgs
@@ -387,7 +387,7 @@ sub_80AF330: @ 80AF330
ldr r0, _080AF364 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
@@ -417,7 +417,7 @@ _080AF37A:
ldr r0, _080AF3AC @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r1, _080AF3A8 @ =gBattleAnimArgs
lsrs r0, 24
@@ -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
@@ -553,13 +553,13 @@ sub_80AF468: @ 80AF468
ldr r4, _080AF4B4 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r6, [r6, 0x6]
@@ -868,13 +868,13 @@ sub_80AF6D8: @ 80AF6D8
ldr r4, _080AF720 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -1243,7 +1243,7 @@ _080AF9D4:
ldrsh r0, [r0, r1]
cmp r0, 0
beq _080AF9EC
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _080AF9F8
@@ -1393,7 +1393,7 @@ sub_80AFAE4: @ 80AFAE4
movs r1, 0
movs r2, 0
bl SetAnimBgAttribute
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AFB26
@@ -1433,7 +1433,7 @@ _080AFB26:
lsls r1, 4
movs r2, 0x20
bl LoadPalette
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080AFB88
@@ -1619,7 +1619,7 @@ _080AFCD6:
adds r0, 0x1
strh r0, [r1, 0x20]
_080AFCF8:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AFD0C
@@ -1663,13 +1663,13 @@ sub_80AFD4C: @ 80AFD4C
ldr r5, _080AFD78 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
@@ -1704,7 +1704,7 @@ sub_80AFD80: @ 80AFD80
movs r1, 0
movs r2, 0
bl SetAnimBgAttribute
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AFDC2
@@ -1744,7 +1744,7 @@ _080AFDC2:
lsls r1, 4
movs r2, 0x20
bl LoadPalette
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080AFE24
@@ -1920,7 +1920,7 @@ _080AFF5E:
adds r0, 0x1
strh r0, [r1, 0x20]
_080AFF80:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AFF94
@@ -1970,12 +1970,12 @@ sub_80AFFD4: @ 80AFFD4
mov r8, r0
ldrb r0, [r0]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
adds r4, r0, 0
ldr r7, _080B00C4 @ =gBattleAnimTarget
ldrb r0, [r7]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r4, 24
lsls r0, 24
cmp r4, r0
@@ -1984,7 +1984,7 @@ sub_80AFFD4: @ 80AFFD4
lsls r0, 8
strh r0, [r5, 0x3C]
_080B0008:
- ldr r3, _080B00C8 @ =gUnknown_2023BD6
+ ldr r3, _080B00C8 @ =gBattlerPositions
ldrb r0, [r7]
adds r0, r3
ldrb r1, [r0]
@@ -2036,13 +2036,13 @@ _080B0068:
ldr r4, _080B00C0 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -2058,7 +2058,7 @@ _080B0068:
ldr r4, _080B00C4 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x6]
@@ -2075,7 +2075,7 @@ _080B0068:
_080B00BC: .4byte gBattleAnimArgs
_080B00C0: .4byte gBattleAnimAttacker
_080B00C4: .4byte gBattleAnimTarget
-_080B00C8: .4byte gUnknown_2023BD6
+_080B00C8: .4byte gBattlerPositions
_080B00CC: .4byte gSprites
_080B00D0:
ldrh r0, [r6, 0x2]
@@ -2085,7 +2085,7 @@ _080B00D0:
ldr r4, _080B0140 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x6]
@@ -2098,7 +2098,7 @@ _080B00D0:
ldrb r0, [r4]
movs r1, 0x1
_080B00F8:
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r6, [r6, 0x8]
@@ -2111,7 +2111,7 @@ _080B00F8:
ldrh r1, [r5, 0x3C]
orrs r0, r1
strh r0, [r5, 0x3C]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B012C
@@ -2197,7 +2197,7 @@ _080B01AA:
ldr r6, _080B01F8 @ =gBattleAnimTarget
ldrb r0, [r6]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
@@ -2213,11 +2213,11 @@ _080B01AA:
ldrh r0, [r4, 0x3C]
adds r0, 0x1
strh r0, [r4, 0x3C]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B0200
- ldr r1, _080B01FC @ =gUnknown_2023BD6
+ ldr r1, _080B01FC @ =gBattlerPositions
ldrb r0, [r6]
adds r0, r1
ldrb r1, [r0]
@@ -2230,7 +2230,7 @@ _080B01AA:
b _080B0202
.align 2, 0
_080B01F8: .4byte gBattleAnimTarget
-_080B01FC: .4byte gUnknown_2023BD6
+_080B01FC: .4byte gBattlerPositions
_080B0200:
strh r5, [r4, 0x38]
_080B0202:
@@ -2283,7 +2283,7 @@ _080B0230:
ldrh r1, [r4, 0x26]
adds r0, r1
strh r0, [r4, 0x26]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B02AE
@@ -2361,11 +2361,11 @@ _080B02CE:
strh r0, [r4, 0x34]
adds r0, 0x4
strh r0, [r4, 0x36]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B0328
- ldr r1, _080B0320 @ =gUnknown_2023BD6
+ ldr r1, _080B0320 @ =gBattlerPositions
ldr r0, _080B0324 @ =gBattleAnimTarget
ldrb r0, [r0]
adds r0, r1
@@ -2378,7 +2378,7 @@ _080B02CE:
lsls r0, 1
b _080B032A
.align 2, 0
-_080B0320: .4byte gUnknown_2023BD6
+_080B0320: .4byte gBattlerPositions
_080B0324: .4byte gBattleAnimTarget
_080B0328:
ldr r0, _080B0340 @ =0x0000fff0
@@ -2583,7 +2583,7 @@ sub_80B0458: @ 80B0458
lsls r0, 24
lsrs r5, r0, 24
adds r0, r5, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B0544
@@ -2591,12 +2591,12 @@ sub_80B0458: @ 80B0458
str r0, [sp, 0x4]
adds r0, r5, 0
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r7, r0, 24
adds r0, r5, 0
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
mov r1, r8
@@ -2921,7 +2921,7 @@ _080B0742:
ldr r4, _080B0788 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x4]
@@ -2929,7 +2929,7 @@ _080B0742:
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r6, 0x6]
diff --git a/asm/item_menu.s b/asm/item_menu.s
index e85f63872..46fa08f33 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -154,14 +154,14 @@ _08107EC8: .4byte sub_80568A8
thumb_func_start sub_8107ECC
sub_8107ECC: @ 8107ECC
push {lr}
- ldr r2, _08107EDC @ =sub_8030AEC
+ ldr r2, _08107EDC @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x5
movs r1, 0x3
bl sub_8107DB4
pop {r0}
bx r0
.align 2, 0
-_08107EDC: .4byte sub_8030AEC
+_08107EDC: .4byte SetCB2ToReshowScreenAfterMenu2
thumb_func_end sub_8107ECC
thumb_func_start sub_8107EE0
@@ -6124,14 +6124,14 @@ sub_810AF74: @ 810AF74
movs r0, 0x4
movs r1, 0x1
bl AddBagItem
- ldr r2, _0810AF98 @ =sub_8030AEC
+ ldr r2, _0810AF98 @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x6
movs r1, 0
bl sub_8107DB4
pop {r0}
bx r0
.align 2, 0
-_0810AF98: .4byte sub_8030AEC
+_0810AF98: .4byte SetCB2ToReshowScreenAfterMenu2
thumb_func_end sub_810AF74
thumb_func_start sub_810AF9C
@@ -6348,13 +6348,13 @@ sub_810B108: @ 810B108
.align 2, 0
_0810B15C: .4byte CB2_ReturnToTeachyTV
_0810B160:
- ldr r2, _0810B168 @ =sub_8030AEC
+ ldr r2, _0810B168 @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x7
b _0810B170
.align 2, 0
-_0810B168: .4byte sub_8030AEC
+_0810B168: .4byte SetCB2ToReshowScreenAfterMenu2
_0810B16C:
- ldr r2, _0810B17C @ =sub_8030AEC
+ ldr r2, _0810B17C @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x8
_0810B170:
movs r1, 0
@@ -6363,7 +6363,7 @@ _0810B170:
pop {r0}
bx r0
.align 2, 0
-_0810B17C: .4byte sub_8030AEC
+_0810B17C: .4byte SetCB2ToReshowScreenAfterMenu2
thumb_func_end sub_810B108
thumb_func_start sub_810B180
diff --git a/asm/learn_move.s b/asm/learn_move.s
index 6684874bb..a7a5b264d 100644
--- a/asm/learn_move.s
+++ b/asm/learn_move.s
@@ -758,7 +758,7 @@ _080E4C7E:
adds r5, r4
ldrh r4, [r5]
str r4, [sp]
- bl sub_8134738
+ bl ShowSelectMovePokemonSummaryScreen
ldr r1, [r7]
movs r0, 0x1C
b _080E4ED8
diff --git a/asm/link.s b/asm/link.s
index 7275ebbd2..80b4f5f6a 100644
--- a/asm/link.s
+++ b/asm/link.s
@@ -236,7 +236,7 @@ sub_8009640: @ 8009640
ldr r2, _080096DC @ =0x00001111
adds r0, r2, 0
strh r0, [r1]
- bl sub_8009804
+ bl OpenLink
ldr r0, _080096E0 @ =gMain
ldrh r0, [r0, 0x24]
bl SeedRng
@@ -431,8 +431,8 @@ _080097FC: .4byte gTasks
_08009800: .4byte gUnknown_3003F84
thumb_func_end task02_080097CC
- thumb_func_start sub_8009804
-sub_8009804: @ 8009804
+ thumb_func_start OpenLink
+OpenLink: @ 8009804
push {r4-r6,lr}
ldr r0, _0800984C @ =gWirelessCommType
ldrb r4, [r0]
@@ -505,7 +505,7 @@ _080098A8: .4byte gReceivedRemoteLinkPlayers
_080098AC: .4byte gUnknown_3003EB8
_080098B0: .4byte gUnknown_3003F30
_080098B4: .4byte gUnknown_3003F2C
- thumb_func_end sub_8009804
+ thumb_func_end OpenLink
thumb_func_start CloseLink
CloseLink: @ 80098B8
@@ -1556,7 +1556,7 @@ sub_800A0B4: @ 800A0B4
str r1, [r0]
ldr r0, _0800A0CC @ =gLinkTimeOutCounter
strh r1, [r0]
- bl sub_8009804
+ bl OpenLink
pop {r0}
bx r0
.align 2, 0
@@ -2115,8 +2115,8 @@ _0800A4B4: .4byte gUnknown_3003F90
_0800A4B8: .4byte 0x0000cccc
thumb_func_end sub_800A474
- thumb_func_start sub_800A4BC
-sub_800A4BC: @ 800A4BC
+ thumb_func_start IsLinkTaskFinished
+IsLinkTaskFinished: @ 800A4BC
push {lr}
ldr r0, _0800A4D0 @ =gWirelessCommType
ldrb r0, [r0]
@@ -2142,7 +2142,7 @@ _0800A4E2:
bx r1
.align 2, 0
_0800A4E8: .4byte gUnknown_3003F80
- thumb_func_end sub_800A4BC
+ thumb_func_end IsLinkTaskFinished
thumb_func_start GetBlockReceivedStatus
GetBlockReceivedStatus: @ 800A4EC
@@ -2265,8 +2265,8 @@ _0800A5B2:
_0800A5B8: .4byte gUnknown_3003EBC
thumb_func_end ResetBlockReceivedFlag
- thumb_func_start sub_800A5BC
-sub_800A5BC: @ 800A5BC
+ thumb_func_start CheckShouldAdvanceLinkState
+CheckShouldAdvanceLinkState: @ 800A5BC
push {lr}
ldr r0, _0800A5DC @ =gUnknown_3003F20
ldr r1, [r0]
@@ -2287,7 +2287,7 @@ _0800A5D8:
.align 2, 0
_0800A5DC: .4byte gUnknown_3003F20
_0800A5E0: .4byte gUnknown_3003F84
- thumb_func_end sub_800A5BC
+ thumb_func_end CheckShouldAdvanceLinkState
thumb_func_start LinkTestCalcBlockChecksum
LinkTestCalcBlockChecksum: @ 800A5E4
@@ -2883,8 +2883,8 @@ GetLinkPlayerCount_2: @ 800AA38
_0800AA44: .4byte gUnknown_3003F20
thumb_func_end GetLinkPlayerCount_2
- thumb_func_start sub_800AA48
-sub_800AA48: @ 800AA48
+ thumb_func_start IsLinkMaster
+IsLinkMaster: @ 800AA48
push {lr}
ldr r0, _0800AA60 @ =gWirelessCommType
ldrb r0, [r0]
@@ -2906,7 +2906,7 @@ _0800AA68:
_0800AA70:
pop {r1}
bx r1
- thumb_func_end sub_800AA48
+ thumb_func_end IsLinkMaster
thumb_func_start sub_800AA74
sub_800AA74: @ 800AA74
diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s
index 2bfeaca50..d4934caa9 100644
--- a/asm/link_rfu_2.s
+++ b/asm/link_rfu_2.s
@@ -4996,7 +4996,7 @@ _080FAC58:
.align 2, 0
_080FAC74: .4byte 0x0000099d
_080FAC78:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _080FACD6
@@ -5103,7 +5103,7 @@ _080FAD3A:
.align 2, 0
_080FAD50: .4byte gBlockSendBuffer
_080FAD54:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _080FAD8A
@@ -6875,7 +6875,7 @@ sub_80FBA78: @ 80FBA78
adds r0, r2, 0
strh r0, [r1]
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
ldr r0, _080FBB00 @ =gMain
ldrh r0, [r0, 0x24]
bl SeedRng
@@ -9368,8 +9368,8 @@ _080FCD6C: .4byte gUnknown_3005440
_080FCD70: .4byte gUnknown_3005E00
thumb_func_end sub_80FCD50
- thumb_func_start sub_80FCD74
-sub_80FCD74: @ 80FCD74
+ thumb_func_start CreateWirelessStatusIndicatorSprite
+CreateWirelessStatusIndicatorSprite: @ 80FCD74
push {r4,r5,lr}
lsls r0, 24
lsrs r3, r0, 24
@@ -9464,7 +9464,7 @@ _080FCE34: .4byte gUnknown_203ACE4
_080FCE38: .4byte gSprites
_080FCE3C: .4byte 0x00001234
_080FCE40: .4byte gUnknown_843F274
- thumb_func_end sub_80FCD74
+ thumb_func_end CreateWirelessStatusIndicatorSprite
thumb_func_start DestroyWirelessStatusIndicatorSprite
DestroyWirelessStatusIndicatorSprite: @ 80FCE44
@@ -9514,8 +9514,8 @@ _080FCEA0: .4byte gDummyOamData
_080FCEA4: .4byte 0x070003e8
thumb_func_end DestroyWirelessStatusIndicatorSprite
- thumb_func_start sub_80FCEA8
-sub_80FCEA8: @ 80FCEA8
+ thumb_func_start LoadWirelessStatusIndicatorSpriteGfx
+LoadWirelessStatusIndicatorSpriteGfx: @ 80FCEA8
push {r4,lr}
ldr r4, _080FCED4 @ =gUnknown_843F274
ldrh r0, [r4, 0x6]
@@ -9540,7 +9540,7 @@ _080FCED4: .4byte gUnknown_843F274
_080FCED8: .4byte 0xffff0000
_080FCEDC: .4byte gUnknown_843F27C
_080FCEE0: .4byte gUnknown_203ACE4
- thumb_func_end sub_80FCEA8
+ thumb_func_end LoadWirelessStatusIndicatorSpriteGfx
thumb_func_start sub_80FCEE4
sub_80FCEE4: @ 80FCEE4
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s
index 17d761a3d..f65efc5f7 100644
--- a/asm/link_rfu_3.s
+++ b/asm/link_rfu_3.s
@@ -317,7 +317,7 @@ _08115B0C:
movs r2, 0
bl sub_80FAF58
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
ldrb r1, [r4]
movs r0, 0xF
ands r0, r1
@@ -707,10 +707,10 @@ _08115E84:
beq _08115EC0
b _081161D8
_08115E8E:
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
movs r0, 0x5
strb r0, [r5, 0x19]
ldrb r1, [r5, 0x13]
@@ -1841,7 +1841,7 @@ _081167C0:
ldrb r0, [r0]
strb r0, [r1]
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
bl sub_80FBBD8
movs r0, 0x70
bl AllocZeroed
@@ -2475,10 +2475,10 @@ sub_8116D60: @ 8116D60
push {r4,r5,lr}
adds r4, r0, 0
strb r1, [r4, 0xF]
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
ldrb r0, [r4, 0xE]
bl RedrawListMenu
ldr r5, _08116DD4 @ =gStringVar1
@@ -2595,7 +2595,7 @@ _08116E70:
movs r2, 0
bl sub_80FAF58
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
bl sub_80FBBD8
movs r0, 0x1
bl sub_80FB128
@@ -3864,7 +3864,7 @@ _08117968:
.align 2, 0
_08117970: .4byte gPaletteFade
_08117974:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08117988
@@ -3999,7 +3999,7 @@ _08117A7C:
movs r1, 0
bl sub_80FAF74
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
movs r0, 0x2
bl sub_80FBB8C
movs r0, 0x1
@@ -4188,10 +4188,10 @@ _08117C3C:
beq _08117C84
b _08117ECA
_08117C42:
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
ldr r1, [r5]
ldrb r0, [r5, 0x13]
lsls r0, 5
@@ -4477,7 +4477,7 @@ _08117EB2:
strb r0, [r5, 0xC]
b _08117ECA
_08117EBA:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08117ECA
@@ -4571,7 +4571,7 @@ _08117F7C:
movs r2, 0
bl sub_80FAF58
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
bl sub_80FBBD8
movs r0, 0x70
bl AllocZeroed
@@ -4702,10 +4702,10 @@ _0811808E:
cmp r0, 0
bne _08118130
strb r2, [r5, 0xF]
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
ldrb r0, [r5, 0xE]
bl RedrawListMenu
ldr r4, _0811812C @ =gStringVar1
@@ -4897,7 +4897,7 @@ _0811826C:
bl sub_800AB9C
b _08118288
_08118278:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08118288
@@ -4990,7 +4990,7 @@ _08118340:
movs r2, 0
bl sub_80FAF58
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
bl sub_80FBBD8
movs r0, 0x70
bl AllocZeroed
@@ -5118,10 +5118,10 @@ _0811843A:
beq _0811849C
strb r4, [r5, 0xF]
strb r4, [r5, 0x14]
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
ldr r0, [r5]
adds r4, r0, 0
adds r4, 0x10
@@ -5302,7 +5302,7 @@ _081185E8:
bl sub_800AB9C
b _08118604
_081185F4:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08118604
@@ -5582,7 +5582,7 @@ _0811887C:
ldrh r2, [r2, 0xC]
bl sub_80FAFA0
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
bl sub_80FBC00
ldr r0, [r6, 0x8]
movs r1, 0x1
@@ -6274,7 +6274,7 @@ _08118EAC:
.align 2, 0
_08118EC4: .4byte gStringVar4
_08118EC8:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _08118ED6
@@ -6796,7 +6796,7 @@ _08119354:
movs r0, 0xF
b _081198DA
_0811935C:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _08119368
@@ -7242,7 +7242,7 @@ _081196EC:
lsrs r2, 2
lsls r1, r2, 3
subs r1, r2
- ldr r2, _0811972C @ =gUnknown_824F1A0
+ ldr r2, _0811972C @ =gTypeNames
adds r1, r2
bl StringCopy
ldr r1, _08119730 @ =gUnknown_8458ED0
@@ -7250,7 +7250,7 @@ _081196EC:
.align 2, 0
_08119724: .4byte gStringVar1
_08119728: .4byte gStringVar2
-_0811972C: .4byte gUnknown_824F1A0
+_0811972C: .4byte gTypeNames
_08119730: .4byte gUnknown_8458ED0
_08119734:
ldr r4, _08119774 @ =gStringVar1
@@ -7273,7 +7273,7 @@ _08119734:
lsrs r2, 2
lsls r1, r2, 3
subs r1, r2
- ldr r2, _0811977C @ =gUnknown_824F1A0
+ ldr r2, _0811977C @ =gTypeNames
adds r1, r2
bl StringCopy
ldr r1, _08119780 @ =gUnknown_8458F04
@@ -7284,7 +7284,7 @@ _0811976A:
.align 2, 0
_08119774: .4byte gStringVar1
_08119778: .4byte gStringVar2
-_0811977C: .4byte gUnknown_824F1A0
+_0811977C: .4byte gTypeNames
_08119780: .4byte gUnknown_8458F04
_08119784:
adds r0, r6, 0
@@ -7640,7 +7640,7 @@ _08119A3E:
movs r2, 0
bl sub_80FAF58
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
bl sub_80FBC00
movs r0, 0x1
bl sub_80FB128
@@ -13134,7 +13134,7 @@ _0811C48C:
.align 2, 0
_0811C4A4: .4byte gMain
_0811C4A8:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0811C516
diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc
index 5dd1d5a1a..223f191c5 100644
--- a/asm/macros/battle_script.inc
+++ b/asm/macros/battle_script.inc
@@ -538,7 +538,7 @@
.byte \bank_or_side
.endm
- .macro atk62 bank_or_side
+ .macro atk62_hidepartystatussummary bank_or_side
.byte 0x62
.byte \bank_or_side
.endm
diff --git a/asm/normal.s b/asm/normal.s
index 165fa150f..75c4dcf6e 100644
--- a/asm/normal.s
+++ b/asm/normal.s
@@ -1185,7 +1185,7 @@ _080BA1D0:
cmp r0, 0
beq _080BA200
ldr r2, _080BA274 @ =gSprites
- ldr r0, _080BA278 @ =gUnknown_3004FF0
+ ldr r0, _080BA278 @ =gHealthboxSpriteIds
add r0, r9
ldrb r1, [r0]
lsls r0, r1, 4
@@ -1258,7 +1258,7 @@ _080BA268: .4byte gBattleAnimAttacker
_080BA26C: .4byte gBattleAnimTarget
_080BA270: .4byte 0x0000ffff
_080BA274: .4byte gSprites
-_080BA278: .4byte gUnknown_3004FF0
+_080BA278: .4byte gHealthboxSpriteIds
thumb_func_end sub_80BA16C
thumb_func_start sub_80BA27C
@@ -1733,7 +1733,7 @@ sub_80BA5F8: @ 80BA5F8
lsls r0, 24
cmp r0, 0
beq _080BA61C
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080BA61C
diff --git a/asm/overworld.s b/asm/overworld.s
index b2bce4b48..5cc051c8a 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -1228,7 +1228,7 @@ sub_805550C: @ 805550C
lsrs r6, r0, 16
lsls r1, 16
lsrs r7, r1, 16
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -1911,7 +1911,7 @@ _08055A68: .4byte gUnknown_2031DD4
thumb_func_start sub_8055A6C
sub_8055A6C: @ 8055A6C
push {r4-r7,lr}
- bl sav1_map_get_light_level
+ bl GetCurrentMapType
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
@@ -2382,14 +2382,14 @@ sub_8055DB8: @ 8055DB8
Overworld_PlaySpecialMapMusic: @ 8055DC4
push {r4,r5,lr}
sub sp, 0x4
- ldr r0, _08055DD8 @ =gUnknown_2031DD8
+ ldr r0, _08055DD8 @ =gDisableMapMusicChangeOnMapLoad
ldrb r0, [r0]
cmp r0, 0x1
bne _08055DDC
bl StopMapMusic
b _08055E6C
.align 2, 0
-_08055DD8: .4byte gUnknown_2031DD8
+_08055DD8: .4byte gDisableMapMusicChangeOnMapLoad
_08055DDC:
cmp r0, 0x2
beq _08055E6C
@@ -2488,14 +2488,14 @@ _08055E90: .4byte gSaveBlock1Ptr
thumb_func_start sub_8055E94
sub_8055E94: @ 8055E94
push {r4-r6,lr}
- ldr r0, _08055EA4 @ =gUnknown_2031DD8
+ ldr r0, _08055EA4 @ =gDisableMapMusicChangeOnMapLoad
ldrb r0, [r0]
cmp r0, 0x1
bne _08055EA8
bl StopMapMusic
b _08055F14
.align 2, 0
-_08055EA4: .4byte gUnknown_2031DD8
+_08055EA4: .4byte gDisableMapMusicChangeOnMapLoad
_08055EA8:
cmp r0, 0x2
beq _08055F14
@@ -2701,7 +2701,7 @@ _08056014:
adds r0, 0x32
lsls r0, 24
lsrs r2, r0, 24
- ldr r0, _08056050 @ =gUnknown_2031DD8
+ ldr r0, _08056050 @ =gDisableMapMusicChangeOnMapLoad
ldrb r0, [r0]
cmp r0, 0x1
bne _08056054
@@ -2709,7 +2709,7 @@ _08056014:
b _0805606A
.align 2, 0
_0805604C: .4byte gUnknown_2031DDC
-_08056050: .4byte gUnknown_2031DD8
+_08056050: .4byte gDisableMapMusicChangeOnMapLoad
_08056054:
cmp r0, 0x2
beq _0805606A
@@ -2884,8 +2884,8 @@ get_map_light_level_from_warp: @ 8056170
bx r1
thumb_func_end get_map_light_level_from_warp
- thumb_func_start sav1_map_get_light_level
-sav1_map_get_light_level: @ 8056188
+ thumb_func_start GetCurrentMapType
+GetCurrentMapType: @ 8056188
push {lr}
ldr r0, _0805619C @ =gSaveBlock1Ptr
ldr r0, [r0]
@@ -2897,7 +2897,7 @@ sav1_map_get_light_level: @ 8056188
bx r1
.align 2, 0
_0805619C: .4byte gSaveBlock1Ptr
- thumb_func_end sav1_map_get_light_level
+ thumb_func_end GetCurrentMapType
thumb_func_start get_map_light_from_warp0
get_map_light_from_warp0: @ 80561A0
@@ -4058,10 +4058,10 @@ _08056B3C:
ldrb r0, [r0]
cmp r0, 0
beq _08056B62
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
b _08056B62
.align 2, 0
_08056B54: .4byte gWirelessCommType
@@ -4389,10 +4389,10 @@ _08056E18:
ldrb r0, [r0]
cmp r0, 0
beq _08056E3E
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
b _08056E3E
.align 2, 0
_08056E30: .4byte gWirelessCommType
@@ -5158,8 +5158,8 @@ _0805749A:
_080574A0: .4byte sub_8056534
thumb_func_end sub_8057430
- thumb_func_start sub_80574A4
-sub_80574A4: @ 80574A4
+ thumb_func_start Overworld_CreditsMainCB
+Overworld_CreditsMainCB: @ 80574A4
push {r4,lr}
ldr r0, _080574E8 @ =gPaletteFade
ldrb r0, [r0, 0x7]
@@ -5187,7 +5187,7 @@ _080574E0:
bx r0
.align 2, 0
_080574E8: .4byte gPaletteFade
- thumb_func_end sub_80574A4
+ thumb_func_end Overworld_CreditsMainCB
thumb_func_start sub_80574EC
sub_80574EC: @ 80574EC
@@ -5209,8 +5209,8 @@ _08057506:
bx r1
thumb_func_end sub_80574EC
- thumb_func_start sub_805750C
-sub_805750C: @ 805750C
+ thumb_func_start Overworld_DoScrollSceneForCredits
+Overworld_DoScrollSceneForCredits: @ 805750C
push {lr}
ldr r3, _08057520 @ =gUnknown_2031DE4
str r1, [r3]
@@ -5223,7 +5223,7 @@ sub_805750C: @ 805750C
.align 2, 0
_08057520: .4byte gUnknown_2031DE4
_08057524: .4byte gUnknown_2036E28
- thumb_func_end sub_805750C
+ thumb_func_end Overworld_DoScrollSceneForCredits
thumb_func_start sub_8057528
sub_8057528: @ 8057528
@@ -5451,7 +5451,7 @@ _08057712:
ldr r2, _08057738 @ =0x3fffffff
movs r0, 0
movs r1, 0
- bl sub_807A944
+ bl FieldWeather_StartFadingOutCreditsMap
_0805772A:
ldrb r0, [r4]
adds r0, 0x1
diff --git a/asm/party_menu.s b/asm/party_menu.s
index ace2e3554..44a250e82 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -2010,8 +2010,8 @@ _0811FA18: .4byte gUnknown_8459FC4
_0811FA1C: .4byte gUnknown_8459FE0
thumb_func_end sub_811F9DC
- thumb_func_start sub_811FA20
-sub_811FA20: @ 811FA20
+ thumb_func_start IsMultiBattle
+IsMultiBattle: @ 811FA20
push {lr}
ldr r0, _0811FA34 @ =gBattleTypeFlags
ldr r0, [r0]
@@ -2028,7 +2028,7 @@ _0811FA38:
_0811FA3A:
pop {r1}
bx r1
- thumb_func_end sub_811FA20
+ thumb_func_end IsMultiBattle
thumb_func_start sub_811FA40
sub_811FA40: @ 811FA40
@@ -7145,7 +7145,7 @@ party_menu_icon_anim: @ 81221D4
adds r7, r1, 0
adds r4, r2, 0
movs r6, 0x1
- bl sub_811FA20
+ bl IsMultiBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -13549,7 +13549,7 @@ sub_8125554: @ 8125554
bl sub_81202F8
movs r0, 0x2
bl ScheduleBgCopyTilemapToVram
- bl sub_803539C
+ bl HandleBattleLowHpMusicChange
ldr r1, _081255B4 @ =gTasks
lsls r0, r5, 2
adds r0, r5
@@ -14645,7 +14645,7 @@ sub_8125E4C: @ 8125E4C
ldr r3, _08125E80 @ =sub_8125E84
ldrh r4, [r4, 0xE]
str r4, [sp]
- bl sub_8134738
+ bl ShowSelectMovePokemonSummaryScreen
add sp, 0x4
pop {r4}
pop {r0}
@@ -15250,7 +15250,7 @@ sub_8126350: @ 8126350
lsls r2, 2
adds r1, r7, r2
adds r0, r4, 0
- bl sub_811D130
+ bl GetMonLevelUpWindowStats
ldrb r0, [r6, 0x9]
ldr r5, _0812641C @ =gSpecialVar_ItemId
ldrh r1, [r5]
@@ -15260,7 +15260,7 @@ sub_8126350: @ 8126350
lsls r0, 2
adds r1, r7, r0
adds r0, r4, 0
- bl sub_811D130
+ bl GetMonLevelUpWindowStats
ldr r1, _08126420 @ =gUnknown_203B0C0
movs r0, 0x1
strb r0, [r1]
@@ -15497,7 +15497,7 @@ sub_8126570: @ 8126570
str r1, [sp, 0x4]
adds r1, r4, 0
movs r3, 0x1
- bl sub_811E7F0
+ bl DrawLevelUpWindowPg1
ldrb r0, [r4, 0x18]
movs r1, 0x2
bl CopyWindowToVram
@@ -15528,7 +15528,7 @@ sub_81265BC: @ 81265BC
str r2, [sp]
movs r2, 0x1
movs r3, 0x2
- bl sub_811E93C
+ bl DrawLevelUpWindowPg2
ldrb r0, [r4, 0x18]
movs r1, 0x2
bl CopyWindowToVram
@@ -17909,14 +17909,14 @@ _081278B0: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
thumb_func_start sub_81278B4
sub_81278B4: @ 81278B4
push {lr}
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _081278C4
movs r0, 0
b _081278D6
_081278C4:
- bl sub_811FA20
+ bl IsMultiBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -17930,8 +17930,8 @@ _081278D6:
bx r1
thumb_func_end sub_81278B4
- thumb_func_start sub_81278DC
-sub_81278DC: @ 81278DC
+ thumb_func_start OpenPartyMenuInBattle
+OpenPartyMenuInBattle: @ 81278DC
push {r4,lr}
sub sp, 0xC
lsls r0, 24
@@ -17955,7 +17955,7 @@ sub_81278DC: @ 81278DC
str r0, [sp]
ldr r0, _08127928 @ =sub_8120C3C
str r0, [sp, 0x4]
- ldr r0, _0812792C @ =sub_8030ADC
+ ldr r0, _0812792C @ =SetCB2ToReshowScreenAfterMenu
str r0, [sp, 0x8]
movs r0, 0x1
adds r2, r4, 0
@@ -17967,7 +17967,7 @@ sub_81278DC: @ 81278DC
.align 2, 0
_08127924: .4byte gBattleTypeFlags
_08127928: .4byte sub_8120C3C
-_0812792C: .4byte sub_8030ADC
+_0812792C: .4byte SetCB2ToReshowScreenAfterMenu
_08127930:
bl sub_81278B4
adds r1, r0, 0
@@ -17977,7 +17977,7 @@ _08127930:
str r0, [sp]
ldr r0, _08127960 @ =sub_811FB28
str r0, [sp, 0x4]
- ldr r0, _08127964 @ =sub_8030ADC
+ ldr r0, _08127964 @ =SetCB2ToReshowScreenAfterMenu
str r0, [sp, 0x8]
movs r0, 0x1
adds r2, r4, 0
@@ -17992,8 +17992,8 @@ _08127950:
bx r0
.align 2, 0
_08127960: .4byte sub_811FB28
-_08127964: .4byte sub_8030ADC
- thumb_func_end sub_81278DC
+_08127964: .4byte SetCB2ToReshowScreenAfterMenu
+ thumb_func_end OpenPartyMenuInBattle
thumb_func_start sub_8127968
sub_8127968: @ 8127968
@@ -18007,7 +18007,7 @@ sub_8127968: @ 8127968
str r0, [sp]
ldr r0, _0812799C @ =sub_8120EBC
str r0, [sp, 0x4]
- ldr r0, _081279A0 @ =sub_8030ADC
+ ldr r0, _081279A0 @ =SetCB2ToReshowScreenAfterMenu
str r0, [sp, 0x8]
movs r0, 0x1
movs r2, 0
@@ -18020,7 +18020,7 @@ sub_8127968: @ 8127968
bx r0
.align 2, 0
_0812799C: .4byte sub_8120EBC
-_081279A0: .4byte sub_8030ADC
+_081279A0: .4byte SetCB2ToReshowScreenAfterMenu
thumb_func_end sub_8127968
thumb_func_start sub_81279A4
@@ -18169,7 +18169,7 @@ sub_8127AC0: @ 8127AC0
bl GetCursorSelectionMonId
lsls r0, 24
lsrs r5, r0, 24
- bl sub_811FA20
+ bl IsMultiBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -18290,7 +18290,7 @@ _08127BD8:
ldrb r0, [r0, 0xB]
cmp r0, 0x4
bne _08127BEC
- bl sub_8044348
+ bl SetMonPreventsSwitchingString
b _08127C8A
.align 2, 0
_08127BE8: .4byte gUnknown_203B0A0
@@ -18402,7 +18402,7 @@ sub_8127CCC: @ 8127CCC
adds r6, r0, 0
lsls r1, 24
lsrs r4, r1, 24
- bl sub_811FA20
+ bl IsMultiBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -18425,7 +18425,7 @@ _08127CF4:
strb r0, [r6, 0x2]
b _08127D9C
_08127D02:
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _08127D40
@@ -18565,7 +18565,7 @@ _08127E00:
bl GetBattlerAtPosition
lsls r0, 24
lsrs r6, r0, 24
- bl sub_811FA20
+ bl IsMultiBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -18588,7 +18588,7 @@ _08127E26:
strb r0, [r5, 0x2]
b _08127EB6
_08127E34:
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
bne _08127E6C
@@ -18678,7 +18678,7 @@ sub_8127EC4: @ 8127EC4
lsls r2, 24
lsrs r6, r2, 24
movs r7, 0
- bl sub_811FA20
+ bl IsMultiBattle
lsls r0, 24
cmp r0, 0
beq _08127F72
@@ -19046,12 +19046,12 @@ _0812817A:
sub_8128184: @ 8128184
push {lr}
bl sub_8108CF0
- ldr r0, _08128194 @ =sub_8030ADC
+ ldr r0, _08128194 @ =SetCB2ToReshowScreenAfterMenu
bl SetMainCallback2
pop {r0}
bx r0
.align 2, 0
-_08128194: .4byte sub_8030ADC
+_08128194: .4byte SetCB2ToReshowScreenAfterMenu
thumb_func_end sub_8128184
thumb_func_start sub_8128198
diff --git a/asm/poison.s b/asm/poison.s
index adaa51dbd..770941be8 100644
--- a/asm/poison.s
+++ b/asm/poison.s
@@ -26,13 +26,13 @@ _080B1636:
ldr r4, _080B1678 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -166,7 +166,7 @@ sub_80B1744: @ 80B1744
adds r0, r1
strh r0, [r4, 0x36]
adds r0, r4, 0
- bl sub_80754B8
+ bl InitSpriteDataForLinearTranslation
movs r1, 0x30
ldrsh r0, [r4, r1]
movs r2, 0x4
@@ -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/pokeball.s b/asm/pokeball.s
index 85bfcb620..1d01b5c7e 100644
--- a/asm/pokeball.s
+++ b/asm/pokeball.s
@@ -14,10 +14,10 @@ DoPokeballSendOutAnimation: @ 804A938
lsrs r4, 16
lsls r5, 24
lsrs r5, 24
- ldr r1, _0804A98C @ =gUnknown_2024005
+ ldr r1, _0804A98C @ =gDoingBattleAnim
movs r0, 0x1
strb r0, [r1]
- ldr r0, _0804A990 @ =gUnknown_2024018
+ ldr r0, _0804A990 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r6, _0804A994 @ =gActiveBattler
ldrb r1, [r6]
@@ -49,8 +49,8 @@ DoPokeballSendOutAnimation: @ 804A938
pop {r1}
bx r1
.align 2, 0
-_0804A98C: .4byte gUnknown_2024005
-_0804A990: .4byte gUnknown_2024018
+_0804A98C: .4byte gDoingBattleAnim
+_0804A990: .4byte gBattleSpritesDataPtr
_0804A994: .4byte gActiveBattler
_0804A998: .4byte sub_804A9A0
_0804A99C: .4byte gTasks
@@ -132,7 +132,7 @@ _0804AA12:
beq _0804AA60
ldr r4, _0804AA5C @ =gLinkPlayers
adds r0, r6, 0
- bl GetBankMultiplayerId
+ bl GetBattlerMultiplayerId
lsls r1, r0, 3
subs r1, r0
lsls r1, 2
@@ -220,13 +220,13 @@ _0804AAF4: .4byte SpriteCB_PlayerMonSendOut_1
_0804AAF8:
adds r0, r6, 0
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
adds r0, r6, 0
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x18
@@ -276,13 +276,13 @@ _0804AB6C:
strh r0, [r4, 0x2E]
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
subs r0, 0x10
@@ -1265,11 +1265,11 @@ _0804B324:
cmp r5, r0
bne _0804B3A6
_0804B34E:
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _0804B3A6
- ldr r0, _0804B390 @ =gUnknown_2024018
+ ldr r0, _0804B390 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r1, [r0, 0x9]
@@ -1293,7 +1293,7 @@ _0804B34E:
.align 2, 0
_0804B388: .4byte gBattlerPartyIndexes
_0804B38C: .4byte gPlayerParty
-_0804B390: .4byte gUnknown_2024018
+_0804B390: .4byte gBattleSpritesDataPtr
_0804B394: .4byte gBattleTypeFlags
_0804B398: .4byte gMPlayInfo_BGM
_0804B39C:
@@ -1302,11 +1302,11 @@ _0804B39C:
movs r2, 0x80
bl m4aMPlayVolumeControl
_0804B3A6:
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _0804B3C0
- ldr r0, _0804B3CC @ =gUnknown_2024018
+ ldr r0, _0804B3CC @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r1, [r0, 0x9]
@@ -1320,7 +1320,7 @@ _0804B3C0:
.align 2, 0
_0804B3C4: .4byte gMPlayInfo_BGM
_0804B3C8: .4byte 0x0000ffff
-_0804B3CC: .4byte gUnknown_2024018
+_0804B3CC: .4byte gBattleSpritesDataPtr
_0804B3D0:
movs r0, 0
bl GetBattlerAtPosition
@@ -1519,9 +1519,9 @@ _0804B52C:
movs r2, 0
movs r1, 0
strh r1, [r0, 0x26]
- ldr r0, _0804B5C0 @ =gUnknown_2024005
+ ldr r0, _0804B5C0 @ =gDoingBattleAnim
strb r2, [r0]
- ldr r4, _0804B5C4 @ =gUnknown_2024018
+ ldr r4, _0804B5C4 @ =gBattleSpritesDataPtr
ldr r0, [r4]
ldr r0, [r0, 0x4]
lsls r1, r6, 1
@@ -1572,8 +1572,8 @@ _0804B5AE:
_0804B5B4: .4byte 0xfffffee0
_0804B5B8: .4byte gSprites
_0804B5BC: .4byte gBattlerSpriteIds
-_0804B5C0: .4byte gUnknown_2024005
-_0804B5C4: .4byte gUnknown_2024018
+_0804B5C0: .4byte gDoingBattleAnim
+_0804B5C4: .4byte gBattleSpritesDataPtr
thumb_func_end HandleBallAnimEnd
thumb_func_start sub_804B5C8
@@ -1592,7 +1592,7 @@ sub_804B5C8: @ 804B5C8
beq _0804B666
cmp r1, 0x5F
bne _0804B600
- ldr r0, _0804B5F8 @ =gUnknown_2024005
+ ldr r0, _0804B5F8 @ =gDoingBattleAnim
movs r1, 0
strb r1, [r0]
bl m4aMPlayAllStop
@@ -1600,7 +1600,7 @@ sub_804B5C8: @ 804B5C8
bl PlaySE
b _0804B666
.align 2, 0
-_0804B5F8: .4byte gUnknown_2024005
+_0804B5F8: .4byte gDoingBattleAnim
_0804B5FC: .4byte 0x0000013f
_0804B600:
ldr r0, _0804B66C @ =0x0000013b
@@ -1639,7 +1639,7 @@ _0804B600:
ands r0, r1
cmp r0, 0
beq _0804B666
- ldr r0, _0804B680 @ =gUnknown_2024018
+ ldr r0, _0804B680 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x4]
lsls r1, r7, 1
@@ -1661,7 +1661,7 @@ _0804B670: .4byte gSprites
_0804B674: .4byte gBattlerSpriteIds
_0804B678: .4byte gMain
_0804B67C: .4byte 0x00000439
-_0804B680: .4byte gUnknown_2024018
+_0804B680: .4byte gBattleSpritesDataPtr
thumb_func_end sub_804B5C8
thumb_func_start SpriteCB_PlayerMonSendOut_1
@@ -1674,7 +1674,7 @@ SpriteCB_PlayerMonSendOut_1: @ 804B684
lsls r0, 24
lsrs r0, 24
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
@@ -1682,7 +1682,7 @@ SpriteCB_PlayerMonSendOut_1: @ 804B684
lsls r0, 24
lsrs r0, 24
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x18
@@ -1843,11 +1843,11 @@ _0804B7C8:
ldrb r0, [r5, 0x6]
strh r0, [r5, 0x3A]
strh r1, [r5, 0x2E]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _0804B828
- ldr r0, _0804B820 @ =gUnknown_2024018
+ ldr r0, _0804B820 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r1, [r0, 0x9]
@@ -1866,7 +1866,7 @@ _0804B7C8:
ldr r0, _0804B824 @ =SpriteCB_ReleaseMon2FromBall
b _0804B82A
.align 2, 0
-_0804B820: .4byte gUnknown_2024018
+_0804B820: .4byte gBattleSpritesDataPtr
_0804B824: .4byte SpriteCB_ReleaseMon2FromBall
_0804B828:
ldr r0, _0804B840 @ =sub_804B268
@@ -1920,11 +1920,11 @@ SpriteCB_OpponentMonSendOut: @ 804B868
ble _0804B8BC
movs r0, 0
strh r0, [r5, 0x2E]
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _0804B8B8
- ldr r0, _0804B8B0 @ =gUnknown_2024018
+ ldr r0, _0804B8B0 @ =gBattleSpritesDataPtr
ldr r0, [r0]
ldr r0, [r0, 0x8]
ldrb r1, [r0, 0x9]
@@ -1943,7 +1943,7 @@ SpriteCB_OpponentMonSendOut: @ 804B868
ldr r0, _0804B8B4 @ =SpriteCB_ReleaseMon2FromBall
b _0804B8BA
.align 2, 0
-_0804B8B0: .4byte gUnknown_2024018
+_0804B8B0: .4byte gBattleSpritesDataPtr
_0804B8B4: .4byte SpriteCB_ReleaseMon2FromBall
_0804B8B8:
ldr r0, _0804B8C4 @ =sub_804B268
@@ -2594,7 +2594,7 @@ sub_804BD94: @ 804BD94
lsls r0, 24
lsrs r0, 24
adds r5, r0, 0
- ldr r0, _0804BE14 @ =gUnknown_3004FF0
+ ldr r0, _0804BE14 @ =gHealthboxSpriteIds
adds r0, r5, r0
ldrb r1, [r0]
lsls r0, r1, 4
@@ -2653,7 +2653,7 @@ _0804BE0C:
pop {r0}
bx r0
.align 2, 0
-_0804BE14: .4byte gUnknown_3004FF0
+_0804BE14: .4byte gHealthboxSpriteIds
_0804BE18: .4byte gSprites
_0804BE1C: .4byte sub_804BE48
_0804BE20: .4byte sub_804BE24
@@ -2723,7 +2723,7 @@ DoHitAnimHealthboxEffect: @ 804BE70
adds r3, r1, r2
movs r0, 0x1
strh r0, [r3, 0x2E]
- ldr r0, _0804BEB0 @ =gUnknown_3004FF0
+ ldr r0, _0804BEB0 @ =gHealthboxSpriteIds
adds r4, r0
ldrb r0, [r4]
strh r0, [r3, 0x30]
@@ -2736,7 +2736,7 @@ DoHitAnimHealthboxEffect: @ 804BE70
.align 2, 0
_0804BEA8: .4byte SpriteCB_HitAnimHealthoxEffect
_0804BEAC: .4byte gSprites
-_0804BEB0: .4byte gUnknown_3004FF0
+_0804BEB0: .4byte gHealthboxSpriteIds
thumb_func_end DoHitAnimHealthboxEffect
thumb_func_start SpriteCB_HitAnimHealthoxEffect
diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s
index b9c18d201..1a7cd0a2e 100644
--- a/asm/pokedex_screen.s
+++ b/asm/pokedex_screen.s
@@ -4491,7 +4491,7 @@ sub_81049FC: @ 81049FC
adds r0, r5, 0
movs r1, 0x8
movs r3, 0x1
- bl sub_810C228
+ bl LoadMonPicInWindow
add sp, 0x8
pop {r4-r6}
pop {r0}
diff --git a/asm/pokemon_jump_2.s b/asm/pokemon_jump_2.s
index 8fc385744..66bb3dc52 100644
--- a/asm/pokemon_jump_2.s
+++ b/asm/pokemon_jump_2.s
@@ -442,10 +442,10 @@ _08147E0C:
ldr r0, [r4]
adds r0, 0xA4
bl sub_8149CEC
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
ldr r1, [r4]
b _08147EBC
.align 2, 0
@@ -470,7 +470,7 @@ _08147E3C:
.align 2, 0
_08147E60: .4byte gUnknown_203F3D4
_08147E64:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08147F04
@@ -6896,7 +6896,7 @@ _0814AE2A:
ldrh r0, [r7]
ldr r1, [r7, 0x4]
ldr r2, [r7, 0x8]
- bl GetFrontSpritePalFromSpeciesAndPersonality
+ bl GetMonSpritePalFromSpeciesAndPersonality
str r0, [sp, 0x20]
add r0, sp, 0x20
ldr r1, [r0, 0x4]
diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s
index c8906230b..9092a38aa 100644
--- a/asm/pokemon_special_anim.s
+++ b/asm/pokemon_special_anim.s
@@ -1508,8 +1508,8 @@ sub_811D120: @ 811D120
bx r1
thumb_func_end sub_811D120
- thumb_func_start sub_811D130
-sub_811D130: @ 811D130
+ thumb_func_start GetMonLevelUpWindowStats
+GetMonLevelUpWindowStats: @ 811D130
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
@@ -1539,7 +1539,7 @@ sub_811D130: @ 811D130
pop {r4,r5}
pop {r0}
bx r0
- thumb_func_end sub_811D130
+ thumb_func_end GetMonLevelUpWindowStats
thumb_func_start sub_811D178
sub_811D178: @ 811D178
@@ -2294,7 +2294,7 @@ sub_811D764: @ 811D764
adds r1, r4, 0
adds r2, r5, 0
movs r3, 0x1
- bl sub_811E7F0
+ bl DrawLevelUpWindowPg1
movs r0, 0x1
bl PutWindowTilemap
movs r0, 0x1
@@ -2316,7 +2316,7 @@ sub_811D7A0: @ 811D7A0
movs r0, 0x1
movs r2, 0x1
movs r3, 0x2
- bl sub_811E93C
+ bl DrawLevelUpWindowPg2
movs r0, 0x1
movs r1, 0x2
bl CopyWindowToVram
@@ -4457,8 +4457,8 @@ _0811E7E8:
_0811E7EC: .4byte gTasks
thumb_func_end sub_811E7B4
- thumb_func_start sub_811E7F0
-sub_811E7F0: @ 811E7F0
+ thumb_func_start DrawLevelUpWindowPg1
+DrawLevelUpWindowPg1: @ 811E7F0
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -4622,10 +4622,10 @@ _0811E8F4:
_0811E930: .4byte gUnknown_8459B48
_0811E934: .4byte gUnknown_841B2E5
_0811E938: .4byte gUnknown_841B2DC
- thumb_func_end sub_811E7F0
+ thumb_func_end DrawLevelUpWindowPg1
- thumb_func_start sub_811E93C
-sub_811E93C: @ 811E93C
+ thumb_func_start DrawLevelUpWindowPg2
+DrawLevelUpWindowPg2: @ 811E93C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -4755,6 +4755,6 @@ _0811E9C0:
bx r0
.align 2, 0
_0811EA40: .4byte gUnknown_8459B48
- thumb_func_end sub_811E93C
+ thumb_func_end DrawLevelUpWindowPg2
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index a7777c2ca..47097a060 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -16568,7 +16568,7 @@ _08093C4E:
adds r1, r4
ldrh r0, [r1]
mov r1, r9
- bl GetFrontSpritePalFromSpeciesAndPersonality
+ bl GetMonSpritePalFromSpeciesAndPersonality
ldr r1, [r5]
ldr r3, _08093CE8 @ =0x00000cd8
adds r2, r1, r3
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index ce3a4dbc6..71e5cbfaf 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -270,8 +270,8 @@ _08134730: .4byte 0x00003204
_08134734: .4byte sub_8135C34
thumb_func_end sub_81344F8
- thumb_func_start sub_8134738
-sub_8134738: @ 8134738
+ thumb_func_start ShowSelectMovePokemonSummaryScreen
+ShowSelectMovePokemonSummaryScreen: @ 8134738
push {r4,r5,lr}
sub sp, 0x4
ldr r5, [sp, 0x10]
@@ -296,7 +296,7 @@ sub_8134738: @ 8134738
.align 2, 0
_08134764: .4byte gUnknown_203B140
_08134768: .4byte 0x00003260
- thumb_func_end sub_8134738
+ thumb_func_end ShowSelectMovePokemonSummaryScreen
thumb_func_start sub_813476C
sub_813476C: @ 813476C
@@ -3476,7 +3476,7 @@ _0813622C:
ldr r0, [r6]
ldr r2, _08136308 @ =0x00003084
adds r0, r2
- ldr r1, _0813630C @ =gUnknown_84161CD
+ ldr r1, _0813630C @ =gString_Dummy
bl StringCopy
_08136238:
cmp r4, 0x20
@@ -3498,7 +3498,7 @@ _08136240:
ldr r0, [r5]
ldr r1, _08136308 @ =0x00003084
adds r0, r1
- ldr r1, _0813630C @ =gUnknown_84161CD
+ ldr r1, _0813630C @ =gString_Dummy
bl StringCopy
_08136264:
ldr r6, _08136310 @ =gUnknown_203B140
@@ -3572,7 +3572,7 @@ _08136264:
b _08136342
.align 2, 0
_08136308: .4byte 0x00003084
-_0813630C: .4byte gUnknown_84161CD
+_0813630C: .4byte gString_Dummy
_08136310: .4byte gUnknown_203B140
_08136314: .4byte 0x00003034
_08136318: .4byte gSpeciesNames
@@ -8434,7 +8434,7 @@ sub_8138B4C: @ 8138B4C
bl IsUpdateLinkStateCBActive
cmp r0, 0
bne _08138B84
- bl sub_811FA20
+ bl IsMultiBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -13244,7 +13244,7 @@ _0813B198:
ldrb r0, [r0]
cmp r0, 0x1
bne _0813B1C4
- bl sub_811FA20
+ bl IsMultiBattle
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
diff --git a/asm/post_battle_event_funcs.s b/asm/post_battle_event_funcs.s
index 264ca380d..20455093a 100644
--- a/asm/post_battle_event_funcs.s
+++ b/asm/post_battle_event_funcs.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_80CA2E4
-sub_80CA2E4: @ 80CA2E4
+ thumb_func_start Special_HallOfFame
+Special_HallOfFame: @ 80CA2E4
push {r4-r7,lr}
sub sp, 0x4
bl sp000_heal_pokemon
@@ -104,7 +104,7 @@ _080CA3B4: .4byte gSaveBlock2Ptr
_080CA3B8: .4byte gPlayerParty
_080CA3BC: .4byte 0x0000083b
_080CA3C0: .4byte CB2_DoHallOfFameScreen
- thumb_func_end sub_80CA2E4
+ thumb_func_end Special_HallOfFame
thumb_func_start sub_80CA3C4
sub_80CA3C4: @ 80CA3C4
diff --git a/asm/psychic.s b/asm/psychic.s
index ef0fc1385..cff45fc8c 100644
--- a/asm/psychic.s
+++ b/asm/psychic.s
@@ -15,7 +15,7 @@ sub_80B2ECC: @ 80B2ECC
lsls r0, 24
cmp r0, 0
beq _080B2EE8
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B2EFE
@@ -32,7 +32,7 @@ _080B2EE8:
movs r0, 0xC8
strb r0, [r1]
_080B2EFE:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B2F5A
@@ -51,7 +51,7 @@ _080B2EFE:
orrs r1, r0
lsrs r5, r1, 31
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B2F3C
@@ -63,7 +63,7 @@ _080B2F3C:
adds r4, r0, 0
eors r4, r7
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B2F5A
@@ -73,11 +73,11 @@ _080B2F3C:
adds r1, r5, 0
bl sub_8072E48
_080B2F5A:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B2F90
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _080B2F90
@@ -112,7 +112,7 @@ _080B2F90:
_080B2FA6:
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080B3004 @ =gBattleAnimArgs
lsrs r0, 24
@@ -121,14 +121,14 @@ _080B2FA6:
strh r0, [r6, 0x20]
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r4, [r4, 0x2]
adds r0, r4
_080B2FCA:
strh r0, [r6, 0x22]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B2FDC
@@ -271,7 +271,7 @@ sub_80B30B0: @ 80B30B0
negs r1, r1
cmp r0, r1
bne _080B3156
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B3146
@@ -281,7 +281,7 @@ sub_80B30B0: @ 80B30B0
lsrs r4, r0, 24
adds r6, r4, 0
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B3118
@@ -304,7 +304,7 @@ _080B3118:
adds r4, r0, 0
eors r4, r6
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B3146
@@ -345,7 +345,7 @@ _080B3164: .4byte sub_80B3168
sub_80B3168: @ 80B3168
push {r4-r6,lr}
adds r6, r0, 0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B31C0
@@ -363,7 +363,7 @@ sub_80B3168: @ 80B3168
orrs r1, r0
lsrs r5, r1, 31
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B31A6
@@ -373,7 +373,7 @@ _080B31A6:
movs r0, 0x2
eors r4, r0
adds r0, r4, 0
- bl sub_8072DF0
+ bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
beq _080B31C0
@@ -407,11 +407,11 @@ sub_80B31D0: @ 80B31D0
bne _080B31EA
movs r6, 0x1
_080B31EA:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B3232
- bl sub_8075290
+ bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _080B3232
@@ -484,13 +484,13 @@ sub_80B3278: @ 80B3278
ldr r4, _080B32C0 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -573,14 +573,14 @@ sub_80B32F4: @ 80B32F4
_080B333A:
ldrb r0, [r6]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r4
strh r0, [r5, 0x20]
ldrb r0, [r6]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r7
@@ -860,7 +860,7 @@ _080B3544:
lsls r1, 1
strh r1, [r0, 0x20]
ldrb r0, [r4, 0x8]
- bl sub_8075980
+ bl ResetSpriteRotScale
adds r0, r5, 0
bl DestroyAnimVisualTask
_080B357A:
@@ -888,13 +888,13 @@ sub_80B3584: @ 80B3584
ldr r4, _080B3610 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x24]
@@ -1206,13 +1206,13 @@ sub_80B37EC: @ 80B37EC
ldr r4, _080B382C @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
@@ -1240,7 +1240,7 @@ sub_80B3834: @ 80B3834
lsls r1, 3
ldr r0, _080B3890 @ =gTasks
adds r5, r1, r0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B38D8
@@ -1860,7 +1860,7 @@ _080B3CD8:
lsls r2, 1
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrb r3, [r4, 0x1]
lsrs r1, r3, 6
ldrb r2, [r4, 0x3]
@@ -1947,7 +1947,7 @@ _080B3DAA:
ldrsh r2, [r4, r1]
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
@@ -1986,7 +1986,7 @@ _080B3DFC:
ldrsh r2, [r4, r1]
adds r1, r2, 0
movs r3, 0
- bl obj_id_set_rotscale
+ bl SetSpriteRotScale
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
@@ -2053,17 +2053,17 @@ _080B3EA4:
ldr r4, _080B3EF8 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B3ED2
diff --git a/asm/reshow_battle_screen.s b/asm/reshow_battle_screen.s
deleted file mode 100644
index 9ec3e3580..000000000
--- a/asm/reshow_battle_screen.s
+++ /dev/null
@@ -1,1190 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_44
-nullsub_44: @ 8077760
- bx lr
- thumb_func_end nullsub_44
-
- thumb_func_start sub_8077764
-sub_8077764: @ 8077764
- push {lr}
- ldr r2, _080777B0 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0x4C
- movs r1, 0
- bl SetGpuReg
- ldr r0, _080777B4 @ =gBattleScripting
- adds r2, r0, 0
- adds r2, 0x21
- movs r1, 0
- strb r1, [r2]
- adds r0, 0x22
- strb r1, [r0]
- ldr r0, _080777B8 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080777DA
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080777C4
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- beq _080777BC
- movs r0, 0x19
- bl HelpSystem_SetSomeVariable2
- b _080777DA
- .align 2, 0
-_080777B0: .4byte gPaletteFade
-_080777B4: .4byte gBattleScripting
-_080777B8: .4byte gBattleTypeFlags
-_080777BC:
- movs r0, 0x18
- bl HelpSystem_SetSomeVariable2
- b _080777DA
-_080777C4:
- movs r0, 0x80
- ands r1, r0
- cmp r1, 0
- beq _080777D4
- movs r0, 0x1A
- bl HelpSystem_SetSomeVariable2
- b _080777DA
-_080777D4:
- movs r0, 0x17
- bl HelpSystem_SetSomeVariable2
-_080777DA:
- ldr r0, _080777E4 @ =sub_80777E8
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_080777E4: .4byte sub_80777E8
- thumb_func_end sub_8077764
-
- thumb_func_start sub_80777E8
-sub_80777E8: @ 80777E8
- push {r4-r7,lr}
- sub sp, 0x8
- ldr r0, _08077804 @ =gBattleScripting
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x14
- bls _080777F8
- b _08077A8A
-_080777F8:
- lsls r0, 2
- ldr r1, _08077808 @ =_0807780C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08077804: .4byte gBattleScripting
-_08077808: .4byte _0807780C
- .align 2, 0
-_0807780C:
- .4byte _08077860
- .4byte _08077866
- .4byte _080778E8
- .4byte _08077900
- .4byte _08077906
- .4byte _08077918
- .4byte _0807791E
- .4byte _08077946
- .4byte _0807794A
- .4byte _0807794E
- .4byte _08077952
- .4byte _08077970
- .4byte _08077978
- .4byte _08077980
- .4byte _08077988
- .4byte _08077990
- .4byte _08077998
- .4byte _080779A0
- .4byte _080779A8
- .4byte _080779B0
- .4byte _08077A5C
-_08077860:
- bl ResetSpriteData
- b _08077A8A
-_08077866:
- movs r0, 0
- bl SetVBlankCallback
- bl ScanlineEffect_Clear
- bl sub_800F324
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0
- bl SetBgAttribute
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0
- bl SetBgAttribute
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- bl ResetPaletteFade
- ldr r0, _080778C8 @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080778CC @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _080778D0 @ =gBattle_BG1_X
- strh r1, [r0]
- ldr r0, _080778D4 @ =gBattle_BG1_Y
- strh r1, [r0]
- ldr r0, _080778D8 @ =gBattle_BG2_X
- strh r1, [r0]
- ldr r0, _080778DC @ =gBattle_BG2_Y
- strh r1, [r0]
- ldr r0, _080778E0 @ =gBattle_BG3_X
- strh r1, [r0]
- ldr r0, _080778E4 @ =gBattle_BG3_Y
- strh r1, [r0]
- b _08077A8A
- .align 2, 0
-_080778C8: .4byte gBattle_BG0_X
-_080778CC: .4byte gBattle_BG0_Y
-_080778D0: .4byte gBattle_BG1_X
-_080778D4: .4byte gBattle_BG1_Y
-_080778D8: .4byte gBattle_BG2_X
-_080778DC: .4byte gBattle_BG2_Y
-_080778E0: .4byte gBattle_BG3_X
-_080778E4: .4byte gBattle_BG3_Y
-_080778E8:
- movs r0, 0
- str r0, [sp, 0x4]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _080778FC @ =0x01006000
- add r0, sp, 0x4
- bl CpuFastSet
- b _08077A8A
- .align 2, 0
-_080778FC: .4byte 0x01006000
-_08077900:
- bl LoadBattleTextboxAndBackground
- b _08077A8A
-_08077906:
- bl FreeAllSpritePalettes
- ldr r1, _08077914 @ =gReservedSpritePaletteCount
- movs r0, 0x4
- strb r0, [r1]
- b _08077A8A
- .align 2, 0
-_08077914: .4byte gReservedSpritePaletteCount
-_08077918:
- bl ClearSpritesHealthboxAnimData
- b _08077A8A
-_0807791E:
- ldr r5, _08077938 @ =gBattleScripting
- adds r4, r5, 0
- adds r4, 0x22
- ldrb r0, [r4]
- bl BattleLoadAllHealthBoxesGfx
- lsls r0, 24
- cmp r0, 0
- beq _0807793C
- movs r0, 0
- strb r0, [r4]
- b _08077A8A
- .align 2, 0
-_08077938: .4byte gBattleScripting
-_0807793C:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- adds r1, r5, 0
- b _08077962
-_08077946:
- movs r0, 0
- b _08077954
-_0807794A:
- movs r0, 0x1
- b _08077954
-_0807794E:
- movs r0, 0x2
- b _08077954
-_08077952:
- movs r0, 0x3
-_08077954:
- bl sub_8077B0C
- lsls r0, 24
- cmp r0, 0
- beq _08077960
- b _08077A8A
-_08077960:
- ldr r1, _0807796C @ =gBattleScripting
-_08077962:
- adds r1, 0x21
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- b _08077A8A
- .align 2, 0
-_0807796C: .4byte gBattleScripting
-_08077970:
- movs r0, 0
- bl sub_8077C38
- b _08077A8A
-_08077978:
- movs r0, 0x1
- bl sub_8077C38
- b _08077A8A
-_08077980:
- movs r0, 0x2
- bl sub_8077C38
- b _08077A8A
-_08077988:
- movs r0, 0x3
- bl sub_8077C38
- b _08077A8A
-_08077990:
- movs r0, 0
- bl CreateHealthboxSprite
- b _08077A8A
-_08077998:
- movs r0, 0x1
- bl CreateHealthboxSprite
- b _08077A8A
-_080779A0:
- movs r0, 0x2
- bl CreateHealthboxSprite
- b _08077A8A
-_080779A8:
- movs r0, 0x3
- bl CreateHealthboxSprite
- b _08077A8A
-_080779B0:
- bl LoadAndCreateEnemyShadowSprites
- movs r0, 0x1
- bl GetBattlerAtPosition
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r7, _08077A44 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _08077A48 @ =gEnemyParty
- adds r0, r5
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBankEnemyShadowSpriteCallback
- bl sub_8075290
- lsls r0, 24
- cmp r0, 0
- beq _08077A14
- movs r0, 0x3
- bl GetBattlerAtPosition
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 1
- adds r0, r7
- 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 SetBankEnemyShadowSpriteCallback
-_08077A14:
- ldr r1, _08077A4C @ =gUnknown_2023FF8
- ldr r0, _08077A50 @ =gBattlerInMenuId
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl ActionSelectionCreateCursorAt
- ldr r0, _08077A54 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _08077A8A
- ldr r0, _08077A58 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08077A8A
- bl sub_80FCEA8
- movs r0, 0
- movs r1, 0
- bl sub_80FCD74
- b _08077A8A
- .align 2, 0
-_08077A44: .4byte gBattlerPartyIndexes
-_08077A48: .4byte gEnemyParty
-_08077A4C: .4byte gUnknown_2023FF8
-_08077A50: .4byte gBattlerInMenuId
-_08077A54: .4byte gWirelessCommType
-_08077A58: .4byte gReceivedRemoteLinkPlayers
-_08077A5C:
- ldr r0, _08077A9C @ =sub_80116F4
- bl SetVBlankCallback
- bl sub_8077AAC
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginHardwarePaletteFade
- ldr r2, _08077AA0 @ =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2, 0x8]
- ldr r0, _08077AA4 @ =sub_8011100
- bl SetMainCallback2
- bl sub_80357C8
-_08077A8A:
- ldr r1, _08077AA8 @ =gBattleScripting
- adds r1, 0x21
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08077A9C: .4byte sub_80116F4
-_08077AA0: .4byte gPaletteFade
-_08077AA4: .4byte sub_8011100
-_08077AA8: .4byte gBattleScripting
- thumb_func_end sub_80777E8
-
- thumb_func_start sub_8077AAC
-sub_8077AAC: @ 8077AAC
- push {lr}
- movs r0, 0x1
- bl EnableInterrupts
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x3F
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x3F
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x42
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x46
- movs r1, 0
- bl SetGpuReg
- ldr r1, _08077B08 @ =0x0000b040
- movs r0, 0
- bl SetGpuRegBits
- pop {r0}
- bx r0
- .align 2, 0
-_08077B08: .4byte 0x0000b040
- thumb_func_end sub_8077AAC
-
- thumb_func_start sub_8077B0C
-sub_8077B0C: @ 8077B0C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08077B54 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- bcc _08077B1C
- b _08077C2C
-_08077B1C:
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08077BA6
- ldr r0, _08077B58 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0xA0
- lsls r1, 8
- ands r0, r1
- movs r1, 0x80
- lsls r1, 8
- cmp r0, r1
- bne _08077B64
- ldr r1, _08077B5C @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08077B60 @ =gEnemyParty
- adds r0, r1
- adds r1, r4, 0
- bl sub_8034658
- b _08077C24
- .align 2, 0
-_08077B54: .4byte gBattlersCount
-_08077B58: .4byte gBattleTypeFlags
-_08077B5C: .4byte gBattlerPartyIndexes
-_08077B60: .4byte gEnemyParty
-_08077B64:
- ldr r0, _08077B90 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r1, [r0]
- lsls r0, r4, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _08077B9C
- ldr r1, _08077B94 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08077B98 @ =gEnemyParty
- adds r0, r1
- adds r1, r4, 0
- bl BattleLoadOpponentMonSpriteGfx
- b _08077C24
- .align 2, 0
-_08077B90: .4byte gUnknown_2024018
-_08077B94: .4byte gBattlerPartyIndexes
-_08077B98: .4byte gEnemyParty
-_08077B9C:
- adds r0, r4, 0
- movs r1, 0
- bl sub_80350BC
- b _08077C24
-_08077BA6:
- ldr r0, _08077BC0 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r2, 0x80
- ands r1, r2
- cmp r1, 0
- beq _08077BC8
- cmp r4, 0
- bne _08077BC8
- ldr r0, _08077BC4 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- b _08077BDA
- .align 2, 0
-_08077BC0: .4byte gBattleTypeFlags
-_08077BC4: .4byte gSaveBlock2Ptr
-_08077BC8:
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _08077BE2
- cmp r4, 0
- bne _08077BE2
- movs r0, 0x5
-_08077BDA:
- movs r1, 0
- bl sub_8034750
- b _08077C24
-_08077BE2:
- ldr r0, _08077C10 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r1, [r0]
- lsls r0, r4, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _08077C1C
- ldr r1, _08077C14 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08077C18 @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- bl sub_8034498
- b _08077C24
- .align 2, 0
-_08077C10: .4byte gUnknown_2024018
-_08077C14: .4byte gBattlerPartyIndexes
-_08077C18: .4byte gPlayerParty
-_08077C1C:
- adds r0, r4, 0
- movs r1, 0
- bl sub_80350BC
-_08077C24:
- ldr r0, _08077C34 @ =gBattleScripting
- adds r0, 0x22
- movs r1, 0
- strb r1, [r0]
-_08077C2C:
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08077C34: .4byte gBattleScripting
- thumb_func_end sub_8077B0C
-
- thumb_func_start sub_8077C38
-sub_8077C38: @ 8077C38
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08077C6C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r7, r0
- bcc _08077C50
- b _08077FB4
-_08077C50:
- ldr r0, _08077C70 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0xA0
- lsls r1, 8
- ands r0, r1
- movs r1, 0x80
- lsls r1, 8
- cmp r0, r1
- bne _08077C74
- adds r0, r7, 0
- bl sub_8074900
- b _08077C9A
- .align 2, 0
-_08077C6C: .4byte gBattlersCount
-_08077C70: .4byte gBattleTypeFlags
-_08077C74:
- ldr r0, _08077C90 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r1, [r0]
- lsls r0, r7, 2
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08077C94
- adds r0, r7, 0
- bl GetSubstituteSpriteDefault_Y
- b _08077C9A
- .align 2, 0
-_08077C90: .4byte gUnknown_2024018
-_08077C94:
- adds r0, r7, 0
- bl GetBankSpriteDefault_Y
-_08077C9A:
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- adds r0, r7, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08077CAE
- b _08077DAC
-_08077CAE:
- ldr r1, _08077D90 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r6, r0, r1
- ldrh r0, [r6]
- movs r1, 0x64
- mov r10, r1
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- ldr r1, _08077D94 @ =gEnemyParty
- mov r9, r1
- add r0, r9
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _08077CD2
- b _08077FB4
-_08077CD2:
- ldrh r0, [r6]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r7, 0
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r5, _08077D98 @ =gMultiuseSpriteTemplate
- adds r0, r7, 0
- movs r1, 0x2
- bl sub_8074480
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r7, 0
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
- adds r1, r4, 0
- mov r2, r8
- bl CreateSprite
- ldr r4, _08077D9C @ =gBattlerSpriteIds
- adds r4, r7, r4
- strb r0, [r4]
- ldr r5, _08077DA0 @ =gSprites
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r7, 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 r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _08077DA4 @ =SpriteCallbackDummy
- str r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r7, [r0, 0x2E]
- ldrh r0, [r6]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- strh r0, [r1, 0x32]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08077DA8 @ =gBattleMonForms
- adds r1, r7, r1
- ldrb r1, [r1]
- bl StartSpriteAnim
- b _08077F84
- .align 2, 0
-_08077D90: .4byte gBattlerPartyIndexes
-_08077D94: .4byte gEnemyParty
-_08077D98: .4byte gMultiuseSpriteTemplate
-_08077D9C: .4byte gBattlerSpriteIds
-_08077DA0: .4byte gSprites
-_08077DA4: .4byte SpriteCallbackDummy
-_08077DA8: .4byte gBattleMonForms
-_08077DAC:
- ldr r0, _08077E00 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r2, 0x80
- ands r1, r2
- cmp r1, 0
- beq _08077E10
- cmp r7, 0
- bne _08077E10
- ldr r5, _08077E04 @ =gSaveBlock2Ptr
- ldr r0, [r5]
- ldrb r4, [r0, 0x8]
- movs r0, 0
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r6, _08077E08 @ =gMultiuseSpriteTemplate
- ldr r1, _08077E0C @ =gUnknown_8239F8C
- ldr r0, [r5]
- ldrb r0, [r0, 0x8]
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- movs r4, 0x8
- subs r4, r0
- lsls r4, 18
- movs r0, 0xA0
- lsls r0, 15
- adds r4, r0
- asrs r4, 16
- movs r0, 0
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r6, 0
- b _08077E54
- .align 2, 0
-_08077E00: .4byte gBattleTypeFlags
-_08077E04: .4byte gSaveBlock2Ptr
-_08077E08: .4byte gMultiuseSpriteTemplate
-_08077E0C: .4byte gUnknown_8239F8C
-_08077E10:
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _08077EA8
- cmp r7, 0
- bne _08077EA8
- movs r0, 0
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x5
- bl SetMultiuseSpriteTemplateToTrainerBack
- ldr r5, _08077E94 @ =gMultiuseSpriteTemplate
- ldr r0, _08077E98 @ =gUnknown_8239F8C
- ldrb r0, [r0, 0x14]
- movs r4, 0x8
- subs r4, r0
- lsls r4, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r4, r1
- asrs r4, 16
- movs r0, 0
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
-_08077E54:
- movs r1, 0x50
- adds r2, r4, 0
- bl CreateSprite
- ldr r3, _08077E9C @ =gBattlerSpriteIds
- strb r0, [r3]
- ldr r4, _08077EA0 @ =gSprites
- ldrb r0, [r3]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- strb r0, [r1, 0x5]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _08077EA4 @ =SpriteCallbackDummy
- str r1, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r7, [r0, 0x2E]
- b _08077F84
- .align 2, 0
-_08077E94: .4byte gMultiuseSpriteTemplate
-_08077E98: .4byte gUnknown_8239F8C
-_08077E9C: .4byte gBattlerSpriteIds
-_08077EA0: .4byte gSprites
-_08077EA4: .4byte SpriteCallbackDummy
-_08077EA8:
- ldr r1, _08077FC4 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r6, r0, r1
- ldrh r0, [r6]
- movs r1, 0x64
- mov r10, r1
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- ldr r1, _08077FC8 @ =gPlayerParty
- mov r9, r1
- add r0, r9
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08077FB4
- ldrh r0, [r6]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r7, 0
- bl GetBattlerPosition
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r5, _08077FCC @ =gMultiuseSpriteTemplate
- adds r0, r7, 0
- movs r1, 0x2
- bl sub_8074480
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r7, 0
- bl sub_807685C
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
- adds r1, r4, 0
- mov r2, r8
- bl CreateSprite
- ldr r4, _08077FD0 @ =gBattlerSpriteIds
- adds r4, r7, r4
- strb r0, [r4]
- ldr r5, _08077FD4 @ =gSprites
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r7, 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 r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _08077FD8 @ =SpriteCallbackDummy
- str r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r7, [r0, 0x2E]
- ldrh r0, [r6]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- strh r0, [r1, 0x32]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08077FDC @ =gBattleMonForms
- adds r1, r7, r1
- ldrb r1, [r1]
- bl StartSpriteAnim
-_08077F84:
- ldr r1, _08077FD4 @ =gSprites
- ldr r0, _08077FD0 @ =gBattlerSpriteIds
- adds r0, r7, r0
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldr r0, _08077FE0 @ =gUnknown_2024018
- ldr r0, [r0]
- ldr r1, [r0]
- lsls r0, r7, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 31
- adds r2, 0x3E
- lsrs r1, 31
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
-_08077FB4:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08077FC4: .4byte gBattlerPartyIndexes
-_08077FC8: .4byte gPlayerParty
-_08077FCC: .4byte gMultiuseSpriteTemplate
-_08077FD0: .4byte gBattlerSpriteIds
-_08077FD4: .4byte gSprites
-_08077FD8: .4byte SpriteCallbackDummy
-_08077FDC: .4byte gBattleMonForms
-_08077FE0: .4byte gUnknown_2024018
- thumb_func_end sub_8077C38
-
- thumb_func_start CreateHealthboxSprite
-CreateHealthboxSprite: @ 8077FE4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0807800C @ =gBattlersCount
- ldrb r0, [r0]
- cmp r5, r0
- bcc _08077FF4
- b _08078166
-_08077FF4:
- ldr r0, _08078010 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r2, 0x80
- ands r1, r2
- cmp r1, 0
- beq _08078014
- cmp r5, 0
- bne _08078014
- bl CreateSafariPlayerHealthboxSprites
- b _0807802C
- .align 2, 0
-_0807800C: .4byte gBattlersCount
-_08078010: .4byte gBattleTypeFlags
-_08078014:
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _08078026
- cmp r5, 0
- bne _08078026
- b _08078166
-_08078026:
- adds r0, r5, 0
- bl CreateBankHealthboxSprites
-_0807802C:
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08078068 @ =gUnknown_3004FF0
- adds r4, r5, r0
- strb r6, [r4]
- adds r0, r5, 0
- bl SetBankHealthboxSpritePos
- adds r0, r6, 0
- bl SetHealthboxSpriteVisible
- adds r0, r5, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08078074
- ldrb r0, [r4]
- ldr r1, _0807806C @ =gBattlerPartyIndexes
- lsls r4, r5, 1
- adds r1, r4, r1
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08078070 @ =gEnemyParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
- b _080780C0
- .align 2, 0
-_08078068: .4byte gUnknown_3004FF0
-_0807806C: .4byte gBattlerPartyIndexes
-_08078070: .4byte gEnemyParty
-_08078074:
- ldr r0, _0807809C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080780A8
- ldrb r0, [r4]
- ldr r1, _080780A0 @ =gBattlerPartyIndexes
- lsls r4, r5, 1
- adds r1, r4, r1
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _080780A4 @ =gPlayerParty
- adds r1, r2
- movs r2, 0xA
- bl UpdateHealthboxAttribute
- b _080780C0
- .align 2, 0
-_0807809C: .4byte gBattleTypeFlags
-_080780A0: .4byte gBattlerPartyIndexes
-_080780A4: .4byte gPlayerParty
-_080780A8:
- ldrb r0, [r4]
- ldr r1, _080780EC @ =gBattlerPartyIndexes
- lsls r4, r5, 1
- adds r1, r4, r1
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _080780F0 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl UpdateHealthboxAttribute
-_080780C0:
- adds r0, r5, 0
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _080780DC
- adds r0, r5, 0
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _080780F8
-_080780DC:
- ldr r0, _080780F4 @ =gUnknown_3004FF0
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0x1
- bl nullsub_21
- b _08078104
- .align 2, 0
-_080780EC: .4byte gBattlerPartyIndexes
-_080780F0: .4byte gPlayerParty
-_080780F4: .4byte gUnknown_3004FF0
-_080780F8:
- ldr r0, _08078130 @ =gUnknown_3004FF0
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0
- bl nullsub_21
-_08078104:
- adds r0, r5, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0807813C
- ldr r0, _08078134 @ =gBattlerPartyIndexes
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08078138 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _08078166
- adds r0, r6, 0
- bl SetHealthboxSpriteInvisible
- b _08078166
- .align 2, 0
-_08078130: .4byte gUnknown_3004FF0
-_08078134: .4byte gBattlerPartyIndexes
-_08078138: .4byte gEnemyParty
-_0807813C:
- ldr r0, _0807816C @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08078166
- ldr r0, _08078170 @ =gBattlerPartyIndexes
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08078174 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _08078166
- adds r0, r6, 0
- bl SetHealthboxSpriteInvisible
-_08078166:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807816C: .4byte gBattleTypeFlags
-_08078170: .4byte gBattlerPartyIndexes
-_08078174: .4byte gPlayerParty
- thumb_func_end CreateHealthboxSprite
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/rock.s b/asm/rock.s
index 50687a86e..c0da2bcfa 100644
--- a/asm/rock.s
+++ b/asm/rock.s
@@ -143,7 +143,7 @@ _080B472E:
adds r2, r0
strh r2, [r5, 0x36]
adds r0, r5, 0
- bl sub_80754B8
+ bl InitSpriteDataForLinearTranslation
strh r4, [r5, 0x34]
strh r4, [r5, 0x36]
ldr r0, _080B4774 @ =sub_8074D00
@@ -262,7 +262,7 @@ do_boulder_dust: @ 80B4810
movs r1, 0
movs r2, 0
bl SetAnimBgAttribute
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B4854
@@ -299,7 +299,7 @@ _080B4854:
lsls r1, 4
movs r2, 0x20
bl LoadCompressedPalette
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B48B0
@@ -512,7 +512,7 @@ _080B4A4C:
.align 2, 0
_080B4A54: .4byte gTasks
_080B4A58:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B4A6C
@@ -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
@@ -713,13 +713,13 @@ sub_80B4BD0: @ 80B4BD0
ldr r5, _080B4C54 @ =gBattleAnimAttacker
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r9, r0
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 8
movs r1, 0xC0
@@ -729,13 +729,13 @@ sub_80B4BD0: @ 80B4BD0
ldr r4, _080B4C58 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r10, r0
ldrb r0, [r4]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 8
movs r2, 0xC0
@@ -1331,13 +1331,13 @@ sub_80B50A0: @ 80B50A0
ldr r5, _080B50EC @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
ldrb r0, [r5]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldr r2, _080B50F0 @ =gBattleAnimArgs
@@ -1413,7 +1413,7 @@ sub_80B5148: @ 80B5148
push {lr}
lsls r0, 24
lsrs r3, r0, 24
- ldr r2, _080B5180 @ =gUnknown_2037EE8
+ ldr r2, _080B5180 @ =gAnimMoveDmg
ldr r0, [r2]
cmp r0, 0x20
bgt _080B515C
@@ -1441,7 +1441,7 @@ _080B5176:
pop {r0}
bx r0
.align 2, 0
-_080B5180: .4byte gUnknown_2037EE8
+_080B5180: .4byte gAnimMoveDmg
_080B5184: .4byte gBattleAnimArgs
thumb_func_end sub_80B5148
diff --git a/asm/script_pokemon_util_80BF8FC.s b/asm/script_pokemon_util_80BF8FC.s
index b5ef5f090..297d09e9a 100644
--- a/asm/script_pokemon_util_80BF8FC.s
+++ b/asm/script_pokemon_util_80BF8FC.s
@@ -115,7 +115,7 @@ sub_80BF9BC: @ 80BF9BC
ldr r3, _080BF9FC @ =CB2_ReturnToField
movs r4, 0
str r4, [sp]
- bl sub_8134738
+ bl ShowSelectMovePokemonSummaryScreen
movs r0, 0x3
bl sub_8138B38
ldr r1, _080BFA00 @ =gFieldCallback
diff --git a/asm/trade.s b/asm/trade.s
index 61328d618..42097bd3e 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -263,7 +263,7 @@ _0804C80A:
cmp r0, 0
beq _0804C880
bl sub_800B1F4
- bl sub_8009804
+ bl OpenLink
bl sub_80FBB20
b _0804C892
.align 2, 0
@@ -275,7 +275,7 @@ _0804C874: .4byte 0x00001122
_0804C878: .4byte gUnknown_2031DA8
_0804C87C: .4byte gWirelessCommType
_0804C880:
- bl sub_8009804
+ bl OpenLink
ldr r1, _0804C8A8 @ =gMain
movs r7, 0x87
lsls r7, 3
@@ -341,7 +341,7 @@ _0804C8F4:
bcs _0804C908
b _0804CEE6
_0804C908:
- bl sub_800AA48
+ bl IsLinkMaster
lsls r0, 24
cmp r0, 0
beq _0804C940
@@ -357,7 +357,7 @@ _0804C908:
bhi _0804C928
b _0804CEE6
_0804C928:
- bl sub_800A5BC
+ bl CheckShouldAdvanceLinkState
ldr r1, _0804C93C @ =gMain
movs r3, 0x87
lsls r3, 3
@@ -435,10 +435,10 @@ _0804C9C4:
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
b _0804CEE6
.align 2, 0
_0804C9E0: .4byte gWirelessCommType
@@ -1134,10 +1134,10 @@ _0804CFDC:
ldrb r0, [r0]
cmp r0, 0
beq _0804CFF0
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
_0804CFF0:
ldr r1, _0804D000 @ =gMain
movs r3, 0x87
@@ -2201,7 +2201,7 @@ _0804D8D8: .4byte gBlockSendBuffer
_0804D8DC: .4byte gPlayerParty
_0804D8E0: .4byte gUnknown_2031DA8
_0804D8E4:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _0804D8F0
@@ -3875,7 +3875,7 @@ _0804E61C:
adds r0, 0x80
ldr r1, _0804E64C @ =0x0000bbbb
strh r1, [r0]
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0804E668
@@ -3944,7 +3944,7 @@ _0804E6B0:
movs r0, 0x3
movs r1, 0x1
bl sub_804F488
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0804E6DE
@@ -4285,7 +4285,7 @@ sub_804E944: @ 804E944
ldrb r0, [r0]
cmp r0, 0
beq _0804E988
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0804E9AA
@@ -7508,7 +7508,7 @@ _08050240:
adds r0, r1
movs r1, 0x1
strb r1, [r0]
- bl sub_8009804
+ bl OpenLink
ldr r1, _08050278 @ =gMain
movs r2, 0x87
lsls r2, 3
@@ -7549,7 +7549,7 @@ _08050298:
.align 2, 0
_080502A4: .4byte gUnknown_2031DAC
_080502A8:
- bl sub_800AA48
+ bl IsLinkMaster
lsls r0, 24
cmp r0, 0
bne _080502B4
@@ -7571,7 +7571,7 @@ _080502B4:
bhi _080502D6
b _08050472
_080502D6:
- bl sub_800A5BC
+ bl CheckShouldAdvanceLinkState
ldr r1, _080502E8 @ =gMain
movs r2, 0x87
lsls r2, 3
@@ -7749,10 +7749,10 @@ _0805044C:
ldrb r0, [r0]
cmp r0, 0
beq _0805046C
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0
movs r1, 0
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
_0805046C:
ldr r0, _08050498 @ =sub_8053D84
bl SetMainCallback2
@@ -8274,7 +8274,7 @@ sub_80508F4: @ 80508F4
.align 2, 0
_08050908: .4byte gUnknown_2031DAC
_0805090C:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08050932
@@ -14405,7 +14405,7 @@ _08054080:
strb r1, [r0]
str r2, [r3, 0x64]
_0805409C:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _080540A8
@@ -14420,7 +14420,7 @@ _080540A8:
_080540B4: .4byte gUnknown_2031DAC
_080540B8: .4byte gMain
_080540BC:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _080540C8
@@ -14637,7 +14637,7 @@ _08054278:
str r0, [r1, 0x64]
b _08054396
_0805427E:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
bne _0805428A
@@ -14672,7 +14672,7 @@ _080542A0:
.align 2, 0
_080542C0: .4byte gUnknown_2031DAC
_080542C4:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08054396
diff --git a/asm/trainer_card.s b/asm/trainer_card.s
index 803f3841d..234e19676 100644
--- a/asm/trainer_card.s
+++ b/asm/trainer_card.s
@@ -208,10 +208,10 @@ _0808919A:
ldrb r0, [r0]
cmp r0, 0x1
bne _080891B6
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0xE6
movs r1, 0x96
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
_080891B6:
movs r0, 0x1
negs r0, r0
diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s
index 9f8d7da11..64cc9aa9f 100644
--- a/asm/union_room_chat.s
+++ b/asm/union_room_chat.s
@@ -177,10 +177,10 @@ _08128554:
bl CreateTask
ldr r1, [r4]
strb r0, [r1, 0xF]
- bl sub_80FCEA8
+ bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0xE8
movs r1, 0x96
- bl sub_80FCD74
+ bl CreateWirelessStatusIndicatorSprite
_08128598:
add sp, 0x4
pop {r4-r6}
@@ -295,7 +295,7 @@ _08128662:
adds r0, 0x1
strh r0, [r1, 0x6]
_08128674:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _081286BC
@@ -321,7 +321,7 @@ _08128674:
.align 2, 0
_081286A8: .4byte gUnknown_203B0E0
_081286AC:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _081286BC
@@ -765,7 +765,7 @@ _08128A36:
.align 2, 0
_08128A40: .4byte gUnknown_203B0E0
_08128A44:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08128A94
@@ -888,7 +888,7 @@ _08128B28:
.align 2, 0
_08128B48: .4byte gUnknown_203B0E0
_08128B4C:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08128BFC
@@ -925,7 +925,7 @@ _08128B80:
.align 2, 0
_08128B9C: .4byte gUnknown_203B0E0
_08128BA0:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08128BFC
@@ -1016,7 +1016,7 @@ _08128C44:
lsls r0, 24
cmp r0, 0
bne _08128CA2
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08128CA2
@@ -1134,7 +1134,7 @@ _08128D30:
lsrs r0, 24
cmp r0, 0x1
beq _08128D9C
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08128D9C
@@ -1231,7 +1231,7 @@ _08128DEC:
adds r0, 0x1
strh r0, [r1, 0x6]
_08128E00:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1277,7 +1277,7 @@ _08128E52:
.align 2, 0
_08128E5C: .4byte gUnknown_203B0E0
_08128E60:
- bl sub_800A4BC
+ bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _08128E70
diff --git a/asm/water.s b/asm/water.s
index 5518dd33e..d40e8f594 100644
--- a/asm/water.s
+++ b/asm/water.s
@@ -130,7 +130,7 @@ sub_80AAC98: @ 80AAC98
beq _080AACC8
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldr r4, _080AACC4 @ =gBattleAnimArgs
@@ -143,7 +143,7 @@ _080AACC4: .4byte gBattleAnimArgs
_080AACC8:
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
ldr r4, _080AADA0 @ =gBattleAnimArgs
lsrs r0, 24
@@ -153,7 +153,7 @@ _080AACDA:
strh r0, [r6, 0x20]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r4, [r4, 0x2]
@@ -184,7 +184,7 @@ _080AAD10:
ldr r4, _080AADA8 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x32]
@@ -192,7 +192,7 @@ _080AAD10:
strh r0, [r6, 0x34]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x36]
@@ -390,7 +390,7 @@ _080AAEBA:
ldr r4, _080AAF14 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, r6
@@ -399,7 +399,7 @@ _080AAEBA:
strh r0, [r5, 0x34]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r7, [r7, 0x6]
@@ -577,7 +577,7 @@ sub_80AB024: @ 80AB024
ldr r4, _080AB08C @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
@@ -585,7 +585,7 @@ sub_80AB024: @ 80AB024
strh r0, [r5, 0x34]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
@@ -737,23 +737,23 @@ sub_80AB168: @ 80AB168
ldr r7, _080AB1B4 @ =gBattleAnimAttacker
ldrb r0, [r7]
movs r1, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
ldrb r0, [r7]
movs r1, 0x1
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
ldr r6, _080AB1B8 @ =0x0000fff6
strh r6, [r4, 0x26]
ldrb r0, [r7]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
lsls r0, 24
lsrs r5, r0, 24
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AB1C2
@@ -877,7 +877,7 @@ _080AB27A:
ldr r4, _080AB2BC @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r5, 0x4]
@@ -885,13 +885,13 @@ _080AB27A:
strh r0, [r6, 0x32]
ldrb r0, [r4]
adds r1, r7, 0
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
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
@@ -1036,7 +1036,7 @@ sub_80AB38C: @ 80AB38C
bl SetAnimBgAttribute
mov r0, sp
bl sub_80752A0
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AB418
@@ -1140,7 +1140,7 @@ _080AB476:
lsls r0, 5
strh r0, [r7, 0xA]
strh r0, [r7, 0xC]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0
@@ -1461,7 +1461,7 @@ _080AB740: .4byte gBattle_BG1_X
_080AB744: .4byte gBattle_BG1_Y
_080AB748: .4byte gTasks
_080AB74C:
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
bne _080AB760
@@ -2012,7 +2012,7 @@ sub_80ABB28: @ 80ABB28
lsls r0, 24
lsrs r0, 24
movs r1, 0
- bl sub_80758E0
+ bl PrepareBattlerSpriteForRotScale
ldr r0, _080ABB80 @ =sub_80ABB84
str r0, [r4]
pop {r4}
@@ -2282,7 +2282,7 @@ _080ABD64:
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
- bl sub_8075980
+ bl ResetSpriteRotScale
movs r0, 0x26
ldrsh r1, [r4, r0]
lsls r0, r1, 4
@@ -2397,18 +2397,18 @@ sub_80ABE4C: @ 80ABE4C
ldr r4, _080ABF54 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
mov r8, r0
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r6, r0, 24
movs r5, 0xAC
ldrb r0, [r4]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
subs r0, 0x1
lsls r0, 24
lsrs r0, 24
@@ -3025,14 +3025,14 @@ sub_80AC328: @ 80AC328
ldr r4, _080AC3B0 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r6, 0
strh r0, [r5, 0xE]
ldrb r0, [r4]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x10]
@@ -3047,7 +3047,7 @@ sub_80AC328: @ 80AC328
movs r1, 0x1
_080AC36C:
strh r1, [r5, 0x16]
- bl sub_8073788
+ bl IsContest
lsls r0, 24
cmp r0, 0
beq _080AC380
@@ -3502,13 +3502,13 @@ sub_80AC6D8: @ 80AC6D8
ldr r5, _080AC714 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x30]
ldrb r0, [r5]
movs r1, 0x3
- bl sub_8074480
+ bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
@@ -3679,7 +3679,7 @@ _080AC826:
strh r0, [r4, 0x30]
ldr r0, _080AC870 @ =gBattleAnimAttacker
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
subs r0, 0x1
adds r1, r4, 0
adds r1, 0x43
@@ -3737,7 +3737,7 @@ _080AC89C:
strh r0, [r4, 0x30]
ldr r0, _080AC8E8 @ =gBattleAnimAttacker
ldrb r0, [r0]
- bl sub_807685C
+ bl GetBattlerSpriteSubpriority
subs r0, 0x1
adds r1, r4, 0
adds r1, 0x43
diff --git a/baserom.ips b/baserom.ips
index c4f49efb2..9a674ecd3 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s
index 944275acc..09cc3cfb2 100644
--- a/data/battle_ai_scripts.s
+++ b/data/battle_ai_scripts.s
@@ -4,7 +4,7 @@
.section script_data, "aw", %progbits
-BattleAIs:: @ 81D9BF4
+gBattleAI_ScriptsTable:: @ 81D9BF4
.4byte AI_CheckBadMove
.4byte AI_TryToFaint
.4byte AI_CheckViability
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s
index 3d1de8ac5..4b45f3669 100644
--- a/data/battle_anim_scripts.s
+++ b/data/battle_anim_scripts.s
@@ -10,8 +10,8 @@ gUnknown_81C68F4:: @ 81C68F4
gUnknown_81C6E84:: @ 81C6E84
.incbin "baserom.gba", 0x1C6E84, 0x24
-gUnknown_81C6EA8:: @ 81C6EA8
+gBattleAnims_General:: @ 81C6EA8
.incbin "baserom.gba", 0x1C6EA8, 0x70
-gUnknown_81C6F18:: @ 81C6F18
+gBattleAnims_Special:: @ 81C6F18
.incbin "baserom.gba", 0x1C6F18, 0xF690
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index a3b44dc0d..0fd65d2e0 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -1,45 +1,45 @@
.section script_data, "aw", %progbits
-gUnknown_81D65A8:: @ 81D65A8
+gBattleScriptsForMoveEffects:: @ 81D65A8
.incbin "baserom.gba", 0x1D65A8, 0x388
-gUnknown_81D6930:: @ 81D6930
+BattleScript_HitFromCritCalc:: @ 81D6930
.incbin "baserom.gba", 0x1D6930, 0x1E
-gUnknown_81D694E:: @ 81D694E
+BattleScript_MoveEnd:: @ 81D694E
.incbin "baserom.gba", 0x1D694E, 0x12
-gUnknown_81D6960:: @ 81D6960
+BattleScript_MoveMissedPause:: @ 81D6960
.incbin "baserom.gba", 0x1D6960, 0x271
-gUnknown_81D6BD1:: @ 81D6BD1
+BattleScript_StatUp:: @ 81D6BD1
.incbin "baserom.gba", 0x1D6BD1, 0x91
-gUnknown_81D6C62:: @ 81D6C62
+BattleScript_StatDown:: @ 81D6C62
.incbin "baserom.gba", 0x1D6C62, 0x6E0
-gUnknown_81D7342:: @ 81D7342
+BattleScript_MoveUsedMustRecharge:: @ 81D7342
.incbin "baserom.gba", 0x1D7342, 0xA75
-gUnknown_81D7DB7:: @ 81D7DB7
+BattleScript_PresentHealTarget:: @ 81D7DB7
.incbin "baserom.gba", 0x1D7DB7, 0x1A
-gUnknown_81D7DD1:: @ 81D7DD1
+BattleScript_AlreadyAtFullHp:: @ 81D7DD1
.incbin "baserom.gba", 0x1D7DD1, 0x21
-gUnknown_81D7DF2:: @ 81D7DF2
+BattleScript_ButItFailed:: @ 81D7DF2
.incbin "baserom.gba", 0x1D7DF2, 0x882
-gUnknown_81D8674:: @ 81D8674
+BattleScript_FaintAttacker:: @ 81D8674
.incbin "baserom.gba", 0x1D8674, 0x10
-gUnknown_81D8684:: @ 81D8684
+BattleScript_FaintTarget:: @ 81D8684
.incbin "baserom.gba", 0x1D8684, 0x10
-gUnknown_81D8694:: @ 81D8694
+BattleScript_GiveExp:: @ 81D8694
.incbin "baserom.gba", 0x1D8694, 0x9
-gUnknown_81D869D:: @ 81D869D
+BattleScript_HandleFaintedMon:: @ 81D869D
.incbin "baserom.gba", 0x1D869D, 0x152
gUnknown_81D87EF:: @ 81D87EF
@@ -84,226 +84,226 @@ gUnknown_81D8949:: @ 81D8949
gUnknown_81D894D:: @ 81D894D
.incbin "baserom.gba", 0x1D894D, 0xA4
-gUnknown_81D89F1:: @ 81D89F1
+BattleScript_Pausex20:: @ 81D89F1
.incbin "baserom.gba", 0x1D89F1, 0x4
-gUnknown_81D89F5:: @ 81D89F5
+BattleScript_LevelUp:: @ 81D89F5
.incbin "baserom.gba", 0x1D89F5, 0x6F
-gUnknown_81D8A64:: @ 81D8A64
+BattleScript_RainContinuesOrEnds:: @ 81D8A64
.incbin "baserom.gba", 0x1D8A64, 0x1B
-gUnknown_81D8A7F:: @ 81D8A7F
+BattleScript_DamagingWeatherContinues:: @ 81D8A7F
.incbin "baserom.gba", 0x1D8A7F, 0x82
-gUnknown_81D8B01:: @ 81D8B01
+BattleScript_SandStormHailEnds:: @ 81D8B01
.incbin "baserom.gba", 0x1D8B01, 0x9
-gUnknown_81D8B0A:: @ 81D8B0A
+BattleScript_SunlightContinues:: @ 81D8B0A
.incbin "baserom.gba", 0x1D8B0A, 0xE
-gUnknown_81D8B18:: @ 81D8B18
+BattleScript_SunlightFaded:: @ 81D8B18
.incbin "baserom.gba", 0x1D8B18, 0x7
-gUnknown_81D8B1F:: @ 81D8B1F
+BattleScript_OverworldWeatherStarts:: @ 81D8B1F
.incbin "baserom.gba", 0x1D8B1F, 0x13
-gUnknown_81D8B32:: @ 81D8B32
+BattleScript_SideStatusWoreOff:: @ 81D8B32
.incbin "baserom.gba", 0x1D8B32, 0x11
-gUnknown_81D8B43:: @ 81D8B43
+BattleScript_SafeguardEnds:: @ 81D8B43
.incbin "baserom.gba", 0x1D8B43, 0xA
-gUnknown_81D8B4D:: @ 81D8B4D
+BattleScript_LeechSeedTurnDrain:: @ 81D8B4D
.incbin "baserom.gba", 0x1D8B4D, 0x5C
-gUnknown_81D8BA9:: @ 81D8BA9
+BattleScript_BideStoringEnergy:: @ 81D8BA9
.incbin "baserom.gba", 0x1D8BA9, 0xB
-gUnknown_81D8BB4:: @ 81D8BB4
+BattleScript_BideAttack:: @ 81D8BB4
.incbin "baserom.gba", 0x1D8BB4, 0x48
-gUnknown_81D8BFC:: @ 81D8BFC
+BattleScript_BideNoEnergyToAttack:: @ 81D8BFC
.incbin "baserom.gba", 0x1D8BFC, 0x14
-gUnknown_81D8C10:: @ 81D8C10
+BattleScript_SuccessForceOut:: @ 81D8C10
.incbin "baserom.gba", 0x1D8C10, 0x2E
-gUnknown_81D8C3E:: @ 81D8C3E
+BattleScript_MistProtected:: @ 81D8C3E
.incbin "baserom.gba", 0x1D8C3E, 0xA
-gUnknown_81D8C48:: @ 81D8C48
+BattleScript_RageIsBuilding:: @ 81D8C48
.incbin "baserom.gba", 0x1D8C48, 0x7
-gUnknown_81D8C4F:: @ 81D8C4F
+BattleScript_MoveUsedIsDisabled:: @ 81D8C4F
.incbin "baserom.gba", 0x1D8C4F, 0xB
-gUnknown_81D8C5A:: @ 81D8C5A
+BattleScript_SelectingDisabledMove:: @ 81D8C5A
.incbin "baserom.gba", 0x1D8C5A, 0x4
-gUnknown_81D8C5E:: @ 81D8C5E
+BattleScript_DisabledNoMore:: @ 81D8C5E
.incbin "baserom.gba", 0x1D8C5E, 0x7
-gUnknown_81D8C65:: @ 81D8C65
+BattleScript_EncoredNoMore:: @ 81D8C65
.incbin "baserom.gba", 0x1D8C65, 0x7
-gUnknown_81D8C6C:: @ 81D8C6C
+BattleScript_DestinyBondTakesLife:: @ 81D8C6C
.incbin "baserom.gba", 0x1D8C6C, 0x1B
-gUnknown_81D8C87:: @ 81D8C87
+BattleScript_SpikesOnAttacker:: @ 81D8C87
.incbin "baserom.gba", 0x1D8C87, 0x37
-gUnknown_81D8CBE:: @ 81D8CBE
+BattleScript_SpikesOnTarget:: @ 81D8CBE
.incbin "baserom.gba", 0x1D8CBE, 0x37
-gUnknown_81D8CF5:: @ 81D8CF5
+BattleScript_SpikesOnFaintedBattler:: @ 81D8CF5
.incbin "baserom.gba", 0x1D8CF5, 0x3E
-gUnknown_81D8D33:: @ 81D8D33
+BattleScript_PerishSongTakesLife:: @ 81D8D33
.incbin "baserom.gba", 0x1D8D33, 0x1B
-gUnknown_81D8D4E:: @ 81D8D4E
+BattleScript_PerishSongCountGoesDown:: @ 81D8D4E
.incbin "baserom.gba", 0x1D8D4E, 0x7
-gUnknown_81D8D55:: @ 81D8D55
+BattleScript_AllStatsUp:: @ 81D8D55
.incbin "baserom.gba", 0x1D8D55, 0x9C
-gUnknown_81D8DF1:: @ 81D8DF1
+BattleScript_RapidSpinAway:: @ 81D8DF1
.incbin "baserom.gba", 0x1D8DF1, 0x2
-gUnknown_81D8DF3:: @ 81D8DF3
+BattleScript_WrapFree:: @ 81D8DF3
.incbin "baserom.gba", 0x1D8DF3, 0x11
-gUnknown_81D8E04:: @ 81D8E04
+BattleScript_LeechSeedFree:: @ 81D8E04
.incbin "baserom.gba", 0x1D8E04, 0x7
-gUnknown_81D8E0B:: @ 81D8E0B
+BattleScript_SpikesFree:: @ 81D8E0B
.incbin "baserom.gba", 0x1D8E0B, 0x7
-gUnknown_81D8E12:: @ 81D8E12
+BattleScript_MonTookFutureAttack:: @ 81D8E12
.incbin "baserom.gba", 0x1D8E12, 0x8E
-gUnknown_81D8EA0:: @ 81D8EA0
+BattleScript_NoMovesLeft:: @ 81D8EA0
.incbin "baserom.gba", 0x1D8EA0, 0x4
-gUnknown_81D8EA4:: @ 81D8EA4
+BattleScript_SelectingMoveWithNoPP:: @ 81D8EA4
.incbin "baserom.gba", 0x1D8EA4, 0x4
-gUnknown_81D8EA8:: @ 81D8EA8
+BattleScript_NoPPForMove:: @ 81D8EA8
.incbin "baserom.gba", 0x1D8EA8, 0xF
-gUnknown_81D8EB7:: @ 81D8EB7
+BattleScript_SelectingTormentedMove:: @ 81D8EB7
.incbin "baserom.gba", 0x1D8EB7, 0xF
-gUnknown_81D8EC6:: @ 81D8EC6
+BattleScript_SelectingNotAllowedMoveTaunt:: @ 81D8EC6
.incbin "baserom.gba", 0x1D8EC6, 0x4
-gUnknown_81D8ECA:: @ 81D8ECA
+BattleScript_MoveUsedIsTaunted:: @ 81D8ECA
.incbin "baserom.gba", 0x1D8ECA, 0xB
-gUnknown_81D8ED5:: @ 81D8ED5
+BattleScript_WishComesTrue:: @ 81D8ED5
.incbin "baserom.gba", 0x1D8ED5, 0x37
-gUnknown_81D8F0C:: @ 81D8F0C
+BattleScript_IngrainTurnHeal:: @ 81D8F0C
.incbin "baserom.gba", 0x1D8F0C, 0x29
-gUnknown_81D8F35:: @ 81D8F35
+BattleScript_AtkDefDown:: @ 81D8F35
.incbin "baserom.gba", 0x1D8F35, 0x51
-gUnknown_81D8F86:: @ 81D8F86
+BattleScript_KnockedOff:: @ 81D8F86
.incbin "baserom.gba", 0x1D8F86, 0xE
-gUnknown_81D8F94:: @ 81D8F94
+BattleScript_MoveUsedIsImprisoned:: @ 81D8F94
.incbin "baserom.gba", 0x1D8F94, 0xB
-gUnknown_81D8F9F:: @ 81D8F9F
+BattleScript_SelectingImprisonedMove:: @ 81D8F9F
.incbin "baserom.gba", 0x1D8F9F, 0x4
-gUnknown_81D8FA3:: @ 81D8FA3
+BattleScript_GrudgeTakesPp:: @ 81D8FA3
.incbin "baserom.gba", 0x1D8FA3, 0x7
-gUnknown_81D8FAA:: @ 81D8FAA
+BattleScript_MagicCoatBounce:: @ 81D8FAA
.incbin "baserom.gba", 0x1D8FAA, 0x18
-gUnknown_81D8FC2:: @ 81D8FC2
+BattleScript_SnatchedMove:: @ 81D8FC2
.incbin "baserom.gba", 0x1D8FC2, 0x1B
-gUnknown_81D8FDD:: @ 81D8FDD
+BattleScript_EnduredMsg:: @ 81D8FDD
.incbin "baserom.gba", 0x1D8FDD, 0x7
-gUnknown_81D8FE4:: @ 81D8FE4
+BattleScript_OneHitKOMsg:: @ 81D8FE4
.incbin "baserom.gba", 0x1D8FE4, 0x7
-gUnknown_81D8FEB:: @ 81D8FEB
+BattleScript_SAtkDown2:: @ 81D8FEB
.incbin "baserom.gba", 0x1D8FEB, 0x2A
gUnknown_81D9015:: @ 81D9015
.incbin "baserom.gba", 0x1D9015, 0x14
-gUnknown_81D9029:: @ 81D9029
+BattleScript_MoveUsedIsAsleep:: @ 81D9029
.incbin "baserom.gba", 0x1D9029, 0xD
-gUnknown_81D9036:: @ 81D9036
+BattleScript_MoveUsedWokeUp:: @ 81D9036
.incbin "baserom.gba", 0x1D9036, 0x14
-gUnknown_81D904A:: @ 81D904A
+BattleScript_MonWokeUpInUproar:: @ 81D904A
.incbin "baserom.gba", 0x1D904A, 0x9
-gUnknown_81D9053:: @ 81D9053
+BattleScript_PoisonTurnDmg:: @ 81D9053
.incbin "baserom.gba", 0x1D9053, 0x22
-gUnknown_81D9075:: @ 81D9075
+BattleScript_BurnTurnDmg:: @ 81D9075
.incbin "baserom.gba", 0x1D9075, 0xB
-gUnknown_81D9080:: @ 81D9080
+BattleScript_MoveUsedIsFrozen:: @ 81D9080
.incbin "baserom.gba", 0x1D9080, 0xD
-gUnknown_81D908D:: @ 81D908D
+BattleScript_MoveUsedUnfroze:: @ 81D908D
.incbin "baserom.gba", 0x1D908D, 0xB
-gUnknown_81D9098:: @ 81D9098
+BattleScript_DefrostedViaFireMove:: @ 81D9098
.incbin "baserom.gba", 0x1D9098, 0x9
-gUnknown_81D90A1:: @ 81D90A1
+BattleScript_MoveUsedIsParalyzed:: @ 81D90A1
.incbin "baserom.gba", 0x1D90A1, 0x10
-gUnknown_81D90B1:: @ 81D90B1
+BattleScript_MoveUsedFlinched:: @ 81D90B1
.incbin "baserom.gba", 0x1D90B1, 0xB
-gUnknown_81D90BC:: @ 81D90BC
+BattleScript_PrintUproarOverTurns:: @ 81D90BC
.incbin "baserom.gba", 0x1D90BC, 0x9
-gUnknown_81D90C5:: @ 81D90C5
+BattleScript_ThrashConfuses:: @ 81D90C5
.incbin "baserom.gba", 0x1D90C5, 0xE
-gUnknown_81D90D3:: @ 81D90D3
+BattleScript_MoveUsedIsConfused:: @ 81D90D3
.incbin "baserom.gba", 0x1D90D3, 0x43
-gUnknown_81D9116:: @ 81D9116
+BattleScript_MoveUsedIsConfusedNoMore:: @ 81D9116
.incbin "baserom.gba", 0x1D9116, 0x7
-gUnknown_81D911D:: @ 81D911D
+BattleScript_PrintPayDayMoneyString:: @ 81D911D
.incbin "baserom.gba", 0x1D911D, 0x7
-gUnknown_81D9124:: @ 81D9124
+BattleScript_WrapTurnDmg:: @ 81D9124
.incbin "baserom.gba", 0x1D9124, 0x12
-gUnknown_81D9136:: @ 81D9136
+BattleScript_WrapEnds:: @ 81D9136
.incbin "baserom.gba", 0x1D9136, 0x7
-gUnknown_81D913D:: @ 81D913D
+BattleScript_MoveUsedIsInLove:: @ 81D913D
.incbin "baserom.gba", 0x1D913D, 0xD
-gUnknown_81D914A:: @ 81D914A
+BattleScript_MoveUsedIsInLoveCantAttack:: @ 81D914A
.incbin "baserom.gba", 0x1D914A, 0xB
-gUnknown_81D9155:: @ 81D9155
+BattleScript_NightmareTurnDmg:: @ 81D9155
.incbin "baserom.gba", 0x1D9155, 0x11
-gUnknown_81D9166:: @ 81D9166
+BattleScript_CurseTurnDmg:: @ 81D9166
.incbin "baserom.gba", 0x1D9166, 0x11
-gUnknown_81D9177:: @ 81D9177
+BattleScript_TargetPRLZHeal:: @ 81D9177
.incbin "baserom.gba", 0x1D9177, 0x9
gUnknown_81D9180:: @ 81D9180
@@ -313,211 +313,244 @@ gUnknown_81D9192:: @ 81D9192
.incbin "baserom.gba", 0x1D9192, 0xF
gUnknown_81D91A1:: @ 81D91A1
- .incbin "baserom.gba", 0x1D91A1, 0x26
+ .incbin "baserom.gba", 0x1D91A1, 0x18
-gUnknown_81D91C7:: @ 81D91C7
- .incbin "baserom.gba", 0x1D91C7, 0xAA
+BattleScript_MoveEffectSleep:: @ 81D91B9
+ .incbin "baserom.gba", 0x1D91B9, 0xE
-gUnknown_81D9271:: @ 81D9271
+BattleScript_YawnMakesAsleep:: @ 81D91C7
+ .incbin "baserom.gba", 0x1D91C7, 0xE
+
+BattleScript_MoveEffectPoison:: @ 81D91D5
+ .incbin "baserom.gba", 0x1D91D5, 0xF
+
+BattleScript_MoveEffectBurn:: @ 81D91E4
+ .incbin "baserom.gba", 0x1D91E4, 0xF
+
+BattleScript_MoveEffectFreeze:: @ 81D91F3
+ .incbin "baserom.gba", 0x1D91F3, 0xF
+
+BattleScript_MoveEffectParalysis:: @ 81D9202
+ .incbin "baserom.gba", 0x1D9202, 0xF
+
+BattleScript_MoveEffectUproar:: @ 81D9211
+ .incbin "baserom.gba", 0x1D9211, 0x7
+
+BattleScript_MoveEffectToxic:: @ 81D9218
+ .incbin "baserom.gba", 0x1D9218, 0xD
+
+BattleScript_MoveEffectPayDay:: @ 81D9225
+ .incbin "baserom.gba", 0x1D9225, 0x7
+
+BattleScript_MoveEffectWrap:: @ 81D922C
+ .incbin "baserom.gba", 0x1D922C, 0x9
+
+BattleScript_MoveEffectConfusion:: @ 81D9235
+ .incbin "baserom.gba", 0x1D9235, 0xE
+
+BattleScript_MoveEffectRecoil:: @ 81D9243
+ .incbin "baserom.gba", 0x1D9243, 0x2E
+
+BattleScript_ItemSteal:: @ 81D9271
.incbin "baserom.gba", 0x1D9271, 0xE
-gUnknown_81D927F:: @ 81D927F
+BattleScript_DrizzleActivates:: @ 81D927F
.incbin "baserom.gba", 0x1D927F, 0x14
-gUnknown_81D9293:: @ 81D9293
+BattleScript_SpeedBoostActivates:: @ 81D9293
.incbin "baserom.gba", 0x1D9293, 0xE
-gUnknown_81D92A1:: @ 81D92A1
+BattleScript_TraceActivates:: @ 81D92A1
.incbin "baserom.gba", 0x1D92A1, 0xA
-gUnknown_81D92AB:: @ 81D92AB
+BattleScript_RainDishActivates:: @ 81D92AB
.incbin "baserom.gba", 0x1D92AB, 0x14
-gUnknown_81D92BF:: @ 81D92BF
+BattleScript_SandstreamActivates:: @ 81D92BF
.incbin "baserom.gba", 0x1D92BF, 0x14
-gUnknown_81D92D3:: @ 81D92D3
+BattleScript_ShedSkinActivates:: @ 81D92D3
.incbin "baserom.gba", 0x1D92D3, 0x25
-gUnknown_81D92F8:: @ 81D92F8
+BattleScript_CastformChange:: @ 81D92F8
.incbin "baserom.gba", 0x1D92F8, 0xF
-gUnknown_81D9307:: @ 81D9307
+BattleScript_IntimidateActivatesEnd3:: @ 81D9307
.incbin "baserom.gba", 0x1D9307, 0x9
-gUnknown_81D9310:: @ 81D9310
+BattleScript_IntimidateActivates:: @ 81D9310
.incbin "baserom.gba", 0x1D9310, 0x69
-gUnknown_81D9379:: @ 81D9379
+BattleScript_DroughtActivates:: @ 81D9379
.incbin "baserom.gba", 0x1D9379, 0x14
-gUnknown_81D938D:: @ 81D938D
+BattleScript_TookAttack:: @ 81D938D
.incbin "baserom.gba", 0x1D938D, 0x14
-gUnknown_81D93A1:: @ 81D93A1
+BattleScript_SturdyPreventsOHKO:: @ 81D93A1
.incbin "baserom.gba", 0x1D93A1, 0xE
-gUnknown_81D93AF:: @ 81D93AF
+BattleScript_DampStopsExplosion:: @ 81D93AF
.incbin "baserom.gba", 0x1D93AF, 0xE
-gUnknown_81D93BD:: @ 81D93BD
+BattleScript_MoveHPDrain_PPLoss:: @ 81D93BD
.incbin "baserom.gba", 0x1D93BD, 0x1
-gUnknown_81D93BE:: @ 81D93BE
+BattleScript_MoveHPDrain:: @ 81D93BE
.incbin "baserom.gba", 0x1D93BE, 0x22
-gUnknown_81D93E0:: @ 81D93E0
+BattleScript_MonMadeMoveUseless_PPLoss:: @ 81D93E0
.incbin "baserom.gba", 0x1D93E0, 0x1
-gUnknown_81D93E1:: @ 81D93E1
+BattleScript_MonMadeMoveUseless:: @ 81D93E1
.incbin "baserom.gba", 0x1D93E1, 0x15
-gUnknown_81D93F6:: @ 81D93F6
+BattleScript_FlashFireBoost_PPLoss:: @ 81D93F6
.incbin "baserom.gba", 0x1D93F6, 0x1
-gUnknown_81D93F7:: @ 81D93F7
+BattleScript_FlashFireBoost:: @ 81D93F7
.incbin "baserom.gba", 0x1D93F7, 0x1F
-gUnknown_81D9416:: @ 81D9416
+BattleScript_AbilityNoStatLoss:: @ 81D9416
.incbin "baserom.gba", 0x1D9416, 0xA
-gUnknown_81D9420:: @ 81D9420
+BattleScript_BRNPrevention:: @ 81D9420
.incbin "baserom.gba", 0x1D9420, 0xC
-gUnknown_81D942C:: @ 81D942C
+BattleScript_PRLZPrevention:: @ 81D942C
.incbin "baserom.gba", 0x1D942C, 0xC
-gUnknown_81D9438:: @ 81D9438
+BattleScript_PSNPrevention:: @ 81D9438
.incbin "baserom.gba", 0x1D9438, 0xC
-gUnknown_81D9444:: @ 81D9444
+BattleScript_ObliviousPreventsAttraction:: @ 81D9444
.incbin "baserom.gba", 0x1D9444, 0xE
-gUnknown_81D9452:: @ 81D9452
+BattleScript_FlinchPrevention:: @ 81D9452
.incbin "baserom.gba", 0x1D9452, 0x1C
-gUnknown_81D946E:: @ 81D946E
+BattleScript_SoundproofProtected:: @ 81D946E
.incbin "baserom.gba", 0x1D946E, 0x10
-gUnknown_81D947E:: @ 81D947E
+BattleScript_AbilityNoSpecificStatLoss:: @ 81D947E
.incbin "baserom.gba", 0x1D947E, 0x10
-gUnknown_81D948E:: @ 81D948E
+BattleScript_StickyHoldActivates:: @ 81D948E
.incbin "baserom.gba", 0x1D948E, 0xE
-gUnknown_81D949C:: @ 81D949C
+BattleScript_ColorChangeActivates:: @ 81D949C
.incbin "baserom.gba", 0x1D949C, 0x7
-gUnknown_81D94A3:: @ 81D94A3
+BattleScript_RoughSkinActivates:: @ 81D94A3
.incbin "baserom.gba", 0x1D94A3, 0x1B
-gUnknown_81D94BE:: @ 81D94BE
+BattleScript_CuteCharmActivates:: @ 81D94BE
.incbin "baserom.gba", 0x1D94BE, 0xD
-gUnknown_81D94CB:: @ 81D94CB
+BattleScript_ApplySecondaryEffect:: @ 81D94CB
.incbin "baserom.gba", 0x1D94CB, 0x3
-gUnknown_81D94CE:: @ 81D94CE
+BattleScript_SynchronizeActivates:: @ 81D94CE
.incbin "baserom.gba", 0x1D94CE, 0x3
-gUnknown_81D94D1:: @ 81D94D1
+BattleScript_AbilityCuredStatus:: @ 81D94D1
.incbin "baserom.gba", 0x1D94D1, 0x9
-gUnknown_81D94DA:: @ 81D94DA
+BattleScript_IgnoresWhileAsleep:: @ 81D94DA
.incbin "baserom.gba", 0x1D94DA, 0x10
-gUnknown_81D94EA:: @ 81D94EA
+BattleScript_IgnoresAndUsesRandomMove:: @ 81D94EA
.incbin "baserom.gba", 0x1D94EA, 0x8
-gUnknown_81D94F2:: @ 81D94F2
+BattleScript_MoveUsedLoafingAround:: @ 81D94F2
.incbin "baserom.gba", 0x1D94F2, 0x12
-gUnknown_81D9504:: @ 81D9504
+BattleScript_IgnoresAndFallsAsleep:: @ 81D9504
.incbin "baserom.gba", 0x1D9504, 0x17
-gUnknown_81D951B:: @ 81D951B
+BattleScript_IgnoresAndHitsItself:: @ 81D951B
.incbin "baserom.gba", 0x1D951B, 0xB
-gUnknown_81D9526:: @ 81D9526
+BattleScript_SubstituteFade:: @ 81D9526
.incbin "baserom.gba", 0x1D9526, 0xB
-gUnknown_81D9531:: @ 81D9531
+BattleScript_BerryCurePrlzEnd2:: @ 81D9531
.incbin "baserom.gba", 0x1D9531, 0x6
-gUnknown_81D9537:: @ 81D9537
+BattleScript_BerryCureParRet:: @ 81D9537
.incbin "baserom.gba", 0x1D9537, 0x12
-gUnknown_81D9549:: @ 81D9549
+BattleScript_BerryCurePsnEnd2:: @ 81D9549
.incbin "baserom.gba", 0x1D9549, 0x6
-gUnknown_81D954F:: @ 81D954F
+BattleScript_BerryCurePsnRet:: @ 81D954F
.incbin "baserom.gba", 0x1D954F, 0x12
-gUnknown_81D9561:: @ 81D9561
+BattleScript_BerryCureBrnEnd2:: @ 81D9561
.incbin "baserom.gba", 0x1D9561, 0x6
-gUnknown_81D9567:: @ 81D9567
+BattleScript_BerryCureBrnRet:: @ 81D9567
.incbin "baserom.gba", 0x1D9567, 0x12
-gUnknown_81D9579:: @ 81D9579
+BattleScript_BerryCureFrzEnd2:: @ 81D9579
.incbin "baserom.gba", 0x1D9579, 0x6
-gUnknown_81D957F:: @ 81D957F
+BattleScript_BerryCureFrzRet:: @ 81D957F
.incbin "baserom.gba", 0x1D957F, 0x12
-gUnknown_81D9591:: @ 81D9591
+BattleScript_BerryCureSlpEnd2:: @ 81D9591
.incbin "baserom.gba", 0x1D9591, 0x6
-gUnknown_81D9597:: @ 81D9597
+BattleScript_BerryCureSlpRet:: @ 81D9597
.incbin "baserom.gba", 0x1D9597, 0x12
-gUnknown_81D95A9:: @ 81D95A9
+BattleScript_BerryCureConfusionEnd2:: @ 81D95A9
.incbin "baserom.gba", 0x1D95A9, 0x6
-gUnknown_81D95AF:: @ 81D95AF
+BattleScript_BerryCureConfusionRet:: @ 81D95AF
.incbin "baserom.gba", 0x1D95AF, 0x10
-gUnknown_81D95BF:: @ 81D95BF
+BattleScript_BerryCureChosenStatusEnd2:: @ 81D95BF
.incbin "baserom.gba", 0x1D95BF, 0x6
-gUnknown_81D95C5:: @ 81D95C5
+BattleScript_BerryCureChosenStatusRet:: @ 81D95C5
.incbin "baserom.gba", 0x1D95C5, 0x14
-gUnknown_81D95D9:: @ 81D95D9
+BattleScript_WhiteHerbEnd2:: @ 81D95D9
.incbin "baserom.gba", 0x1D95D9, 0x6
-gUnknown_81D95DF:: @ 81D95DF
+BattleScript_WhiteHerbRet:: @ 81D95DF
.incbin "baserom.gba", 0x1D95DF, 0x10
-gUnknown_81D95EF:: @ 81D95EF
+BattleScript_ItemHealHP_RemoveItem:: @ 81D95EF
.incbin "baserom.gba", 0x1D95EF, 0x1D
-gUnknown_81D960C:: @ 81D960C
+BattleScript_BerryPPHealEnd2:: @ 81D960C
.incbin "baserom.gba", 0x1D960C, 0x10
-gUnknown_81D961C:: @ 81D961C
+BattleScript_ItemHealHP_End2:: @ 81D961C
.incbin "baserom.gba", 0x1D961C, 0x6
-gUnknown_81D9622:: @ 81D9622
+BattleScript_ItemHealHP_Ret:: @ 81D9622
.incbin "baserom.gba", 0x1D9622, 0x1B
-gUnknown_81D963D:: @ 81D963D
+BattleScript_SelectingNotAllowedMoveChoiceItem:: @ 81D963D
.incbin "baserom.gba", 0x1D963D, 0x4
-gUnknown_81D9641:: @ 81D9641
+BattleScript_HangedOnMsg:: @ 81D9641
.incbin "baserom.gba", 0x1D9641, 0xE
-gUnknown_81D964F:: @ 81D964F
+BattleScript_BerryConfuseHealEnd2:: @ 81D964F
.incbin "baserom.gba", 0x1D964F, 0x2A
-gUnknown_81D9679:: @ 81D9679
+BattleScript_BerryStatRaiseEnd2:: @ 81D9679
.incbin "baserom.gba", 0x1D9679, 0x1B
-gUnknown_81D9694:: @ 81D9694
+BattleScript_BerryFocusEnergyEnd2:: @ 81D9694
.incbin "baserom.gba", 0x1D9694, 0x10
gUnknown_81D96A4:: @ 81D96A4
.incbin "baserom.gba", 0x1D96A4, 0x4
-gUnknown_81D96A8:: @ 81D96A8
+BattleScript_FlushMessageBox:: @ 81D96A8
.incbin "baserom.gba", 0x1D96A8, 0x4
diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s
index d9cd0829c..c3747cd8d 100644
--- a/data/battle_scripts_2.s
+++ b/data/battle_scripts_2.s
@@ -12,17 +12,17 @@ gUnknown_81D99FC:: @ 81D99FC
gUnknown_81D9A04:: @ 81D9A04
.incbin "baserom.gba", 0x1D9A04, 0x3E
-gUnknown_81D9A42:: @ 81D9A42
+BattleScript_SuccessBallThrow:: @ 81D9A42
.incbin "baserom.gba", 0x1D9A42, 0x46
gUnknown_81D9A88:: @ 81D9A88
.incbin "baserom.gba", 0x1D9A88, 0xB
-gUnknown_81D9A93:: @ 81D9A93
+BattleScript_ShakeBallThrow:: @ 81D9A93
.incbin "baserom.gba", 0x1D9A93, 0x2E
-gUnknown_81D9AC1:: @ 81D9AC1
+BattleScript_TrainerBallBlock:: @ 81D9AC1
.incbin "baserom.gba", 0x1D9AC1, 0x10
-gUnknown_81D9AD1:: @ 81D9AD1
+BattleScript_GhostBallDodge:: @ 81D9AD1
.incbin "baserom.gba", 0x1D9AD1, 0x123
diff --git a/data/credits/unk_840C630.pal b/data/credits/unk_840C630.pal
new file mode 100644
index 000000000..01f113381
--- /dev/null
+++ b/data/credits/unk_840C630.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
diff --git a/data/credits/unk_840C650.png b/data/credits/unk_840C650.png
new file mode 100644
index 000000000..9afadd699
--- /dev/null
+++ b/data/credits/unk_840C650.png
Binary files differ
diff --git a/data/credits/unk_840CA54.bin b/data/credits/unk_840CA54.bin
new file mode 100644
index 000000000..a127ba9ca
--- /dev/null
+++ b/data/credits/unk_840CA54.bin
Binary files differ
diff --git a/data/credits/unk_840CB8C.bin b/data/credits/unk_840CB8C.bin
new file mode 100644
index 000000000..3dd1c74a0
--- /dev/null
+++ b/data/credits/unk_840CB8C.bin
Binary files differ
diff --git a/data/credits/unk_840D228.bin b/data/credits/unk_840D228.bin
new file mode 100644
index 000000000..f6c336c01
--- /dev/null
+++ b/data/credits/unk_840D228.bin
Binary files differ
diff --git a/data/credits/unk_840DC0C.bin b/data/credits/unk_840DC0C.bin
new file mode 100644
index 000000000..a52ea8056
--- /dev/null
+++ b/data/credits/unk_840DC0C.bin
Binary files differ
diff --git a/data/credits/unk_840E158.bin b/data/credits/unk_840E158.bin
new file mode 100644
index 000000000..2d9128634
--- /dev/null
+++ b/data/credits/unk_840E158.bin
Binary files differ
diff --git a/data/credits/unk_840E904.bin b/data/credits/unk_840E904.bin
new file mode 100644
index 000000000..4887c1e7e
--- /dev/null
+++ b/data/credits/unk_840E904.bin
Binary files differ
diff --git a/data/credits/unk_840F240.bin b/data/credits/unk_840F240.bin
new file mode 100644
index 000000000..285a468b6
--- /dev/null
+++ b/data/credits/unk_840F240.bin
Binary files differ
diff --git a/data/credits/unk_840F944.bin b/data/credits/unk_840F944.bin
new file mode 100644
index 000000000..ba2cdab77
--- /dev/null
+++ b/data/credits/unk_840F944.bin
Binary files differ
diff --git a/data/credits/unk_8410198.bin b/data/credits/unk_8410198.bin
new file mode 100644
index 000000000..f7b3a02a5
--- /dev/null
+++ b/data/credits/unk_8410198.bin
Binary files differ
diff --git a/data/credits/unk_84105B4.bin b/data/credits/unk_84105B4.bin
new file mode 100644
index 000000000..d173e611e
--- /dev/null
+++ b/data/credits/unk_84105B4.bin
Binary files differ
diff --git a/data/credits/unk_8410B20.bin b/data/credits/unk_8410B20.bin
new file mode 100644
index 000000000..eea1940ee
--- /dev/null
+++ b/data/credits/unk_8410B20.bin
Binary files differ
diff --git a/data/credits/unk_8410B20.png b/data/credits/unk_8410B20.png
new file mode 100644
index 000000000..19ce2f796
--- /dev/null
+++ b/data/credits/unk_8410B20.png
Binary files differ
diff --git a/data/credits/unk_8410E10.pal b/data/credits/unk_8410E10.pal
new file mode 100644
index 000000000..5667181bd
--- /dev/null
+++ b/data/credits/unk_8410E10.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+57 57 123
+172 123 65
+255 197 148
+222 148 115
+123 65 65
+82 106 156
+57 57 123
+115 164 197
+123 123 131
+238 238 255
+180 180 213
+255 106 74
+197 57 57
+255 222 90
+213 180 74
+0 0 0
diff --git a/data/credits/unk_8410E30.png b/data/credits/unk_8410E30.png
new file mode 100644
index 000000000..ec065cdb6
--- /dev/null
+++ b/data/credits/unk_8410E30.png
Binary files differ
diff --git a/data/credits/unk_8411BF8.pal b/data/credits/unk_8411BF8.pal
new file mode 100644
index 000000000..5667181bd
--- /dev/null
+++ b/data/credits/unk_8411BF8.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+57 57 123
+172 123 65
+255 197 148
+222 148 115
+123 65 65
+82 106 156
+57 57 123
+115 164 197
+123 123 131
+238 238 255
+180 180 213
+255 106 74
+197 57 57
+255 222 90
+213 180 74
+0 0 0
diff --git a/data/credits/unk_8411C18.png b/data/credits/unk_8411C18.png
new file mode 100644
index 000000000..341594160
--- /dev/null
+++ b/data/credits/unk_8411C18.png
Binary files differ
diff --git a/data/credits/unk_84129A0.pal b/data/credits/unk_84129A0.pal
new file mode 100644
index 000000000..ac601cddf
--- /dev/null
+++ b/data/credits/unk_84129A0.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+49 49 49
+255 222 205
+238 180 148
+197 139 106
+106 74 74
+222 164 74
+197 123 8
+49 65 82
+205 139 255
+115 82 131
+156 106 172
+106 123 131
+197 205 180
+238 74 24
+255 255 255
+0 0 0
diff --git a/data/credits/unk_84129C0.png b/data/credits/unk_84129C0.png
new file mode 100644
index 000000000..ea9c61c88
--- /dev/null
+++ b/data/credits/unk_84129C0.png
Binary files differ
diff --git a/data/credits/unk_8413318.pal b/data/credits/unk_8413318.pal
new file mode 100644
index 000000000..284b70b77
--- /dev/null
+++ b/data/credits/unk_8413318.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+131 197 0
+74 139 0
+32 115 0
+0 82 0
+106 172 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/data/credits/unk_8413338.png b/data/credits/unk_8413338.png
new file mode 100644
index 000000000..7fa79c06a
--- /dev/null
+++ b/data/credits/unk_8413338.png
Binary files differ
diff --git a/data/credits/unk_8413854.pal b/data/credits/unk_8413854.pal
new file mode 100644
index 000000000..46d4f48dd
--- /dev/null
+++ b/data/credits/unk_8413854.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+189 180 98
+172 164 74
+156 148 49
+123 115 24
+222 213 131
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+255 0 255
diff --git a/data/credits/unk_8413874.png b/data/credits/unk_8413874.png
new file mode 100644
index 000000000..18e34725f
--- /dev/null
+++ b/data/credits/unk_8413874.png
Binary files differ
diff --git a/data/credits/unk_8413D98.pal b/data/credits/unk_8413D98.pal
new file mode 100644
index 000000000..a3476d0d4
--- /dev/null
+++ b/data/credits/unk_8413D98.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+131 197 0
+74 139 0
+32 115 0
+0 82 0
+106 172 0
+189 180 98
+172 164 74
+156 148 49
+123 115 24
+222 213 131
+222 222 222
+205 205 205
+189 189 189
+238 238 238
+131 131 131
diff --git a/data/credits/unk_8413DB8.png b/data/credits/unk_8413DB8.png
new file mode 100644
index 000000000..5b10bd699
--- /dev/null
+++ b/data/credits/unk_8413DB8.png
Binary files differ
diff --git a/data/data.s b/data/data.s
index 0322670c0..eb755739a 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
@@ -157,16 +157,16 @@ gTrainerFrontPicPaletteTable:: @ 8239A1C
gTrainerBackAnimsPtrTable:: @ 8239F74
.incbin "baserom.gba", 0x239F74, 0x18
-gUnknown_8239F8C:: @ 8239F8C
+gTrainerBackPicCoords:: @ 8239F8C
.incbin "baserom.gba", 0x239F8C, 0x18
gTrainerBackPicTable:: @ 8239FA4
.incbin "baserom.gba", 0x239FA4, 0x30
-gUnknown_8239FD4:: @ 8239FD4
+gTrainerBackPicPaletteTable:: @ 8239FD4
.incbin "baserom.gba", 0x239FD4, 0x30
-gUnknown_823A004:: @ 823A004
+gEnemyMonElevation:: @ 823A004
.incbin "baserom.gba", 0x23A004, 0x4554
gTrainerClassNames:: @ 823E558
@@ -233,13 +233,13 @@ gUnknown_824F020:: @ 824F020
gUnknown_824F048:: @ 824F048
.incbin "baserom.gba", 0x24F048, 0x8
-gUnknown_824F050:: @ 824F050
+gTypeEffectiveness:: @ 824F050
.incbin "baserom.gba", 0x24F050, 0x150
-gUnknown_824F1A0:: @ 824F1A0
+gTypeNames:: @ 824F1A0
.incbin "baserom.gba", 0x24F1A0, 0x80
-gUnknown_824F220:: @ 824F220
+gTrainerMoneyTable:: @ 824F220
.incbin "baserom.gba", 0x24F220, 0x8E8
gUnknown_824FB08:: @ 824FB08
@@ -254,137 +254,34 @@ gUnknown_8250038:: @ 8250038
gUnknown_8250070:: @ 8250070
.incbin "baserom.gba", 0x250070, 0x24
-gUnknown_8250094:: @ 8250094
+gStatusConditionString_PoisonJpn:: @ 8250094
.incbin "baserom.gba", 0x250094, 0x8
-gUnknown_825009C:: @ 825009C
+gStatusConditionString_SleepJpn:: @ 825009C
.incbin "baserom.gba", 0x25009C, 0x8
-gUnknown_82500A4:: @ 82500A4
+gStatusConditionString_ParalysisJpn:: @ 82500A4
.incbin "baserom.gba", 0x2500A4, 0x8
-gUnknown_82500AC:: @ 82500AC
+gStatusConditionString_BurnJpn:: @ 82500AC
.incbin "baserom.gba", 0x2500AC, 0x8
-gUnknown_82500B4:: @ 82500B4
+gStatusConditionString_IceJpn:: @ 82500B4
.incbin "baserom.gba", 0x2500B4, 0x8
-gUnknown_82500BC:: @ 82500BC
+gStatusConditionString_ConfusionJpn:: @ 82500BC
.incbin "baserom.gba", 0x2500BC, 0x8
-gUnknown_82500C4:: @ 82500C4
+gStatusConditionString_LoveJpn:: @ 82500C4
.incbin "baserom.gba", 0x2500C4, 0x8
gUnknown_82500CC:: @ 82500CC
.incbin "baserom.gba", 0x2500CC, 0x38
-gUnknown_8250104:: @ 8250104
- .incbin "baserom.gba", 0x250104, 0x18
+ .section .rodata.8260270
-gUnknown_825011C:: @ 825011C
- .incbin "baserom.gba", 0x25011C, 0x3E0
-
-gUnknown_82504FC:: @ 82504FC
- .incbin "baserom.gba", 0x2504FC, 0x34
-
-gUnknown_8250530:: @ 8250530
- .incbin "baserom.gba", 0x250530, 0xC
-
-gUnknown_825053C:: @ 825053C
- .incbin "baserom.gba", 0x25053C, 0xF0
-
-gUnknown_825062C:: @ 825062C
- .incbin "baserom.gba", 0x25062C, 0xA4
-
-gUnknown_82506D0:: @ 82506D0
- .incbin "baserom.gba", 0x2506D0, 0x20
-
-gUnknown_82506F0:: @ 82506F0
- .incbin "baserom.gba", 0x2506F0, 0xD8
-
-gUnknown_82507C8:: @ 82507C8
- .incbin "baserom.gba", 0x2507C8, 0x18
-
-gUnknown_82507E0:: @ 82507E0
- .incbin "baserom.gba", 0x2507E0, 0x8
-
-gUnknown_82507E8:: @ 82507E8
- .incbin "baserom.gba", 0x2507E8, 0x28
-
-gUnknown_8250810:: @ 8250810
- .incbin "baserom.gba", 0x250810, 0xC
-
-gUnknown_825081C:: @ 825081C
- .incbin "baserom.gba", 0x25081C, 0x14
-
-gUnknown_8250830:: @ 8250830
- .incbin "baserom.gba", 0x250830, 0x18
-
-gUnknown_8250848:: @ 8250848
- .incbin "baserom.gba", 0x250848, 0x40
-
-gUnknown_8250888:: @ 8250888
- .incbin "baserom.gba", 0x250888, 0xA
-
-gUnknown_8250892:: @ 8250892
- .incbin "baserom.gba", 0x250892, 0xA
-
-gUnknown_825089C:: @ 825089C
- .incbin "baserom.gba", 0x25089C, 0xE4
-
-gUnknown_8250980:: @ 8250980
- .incbin "baserom.gba", 0x250980, 0xC
-
-gUnknown_825098C:: @ 825098C
- .incbin "baserom.gba", 0x25098C, 0x8
-
-gUnknown_8250994:: @ 8250994
- .incbin "baserom.gba", 0x250994, 0x60
-
-gUnknown_82509F4:: @ 82509F4
- .incbin "baserom.gba", 0x2509F4, 0x18
-
-gUnknown_8250A0C:: @ 8250A0C
- .incbin "baserom.gba", 0x250A0C, 0x10
-
-gUnknown_8250A1C:: @ 8250A1C
- .incbin "baserom.gba", 0x250A1C, 0x18
-
-gUnknown_8250A34:: @ 8250A34
- .incbin "baserom.gba", 0x250A34, 0xEC
-
-gUnknown_8250B20:: @ 8250B20
- .incbin "baserom.gba", 0x250B20, 0xE4
-
- .section .rodata.825EF0C
-
- .align 2
-gUnknown_8260208:: @ 8260208
- .incbin "baserom.gba", 0x260208, 0x8
-
-gUnknown_8260210:: @ 8260210
- .incbin "baserom.gba", 0x260210, 0x8
-
-gUnknown_8260218:: @ 8260218
- .incbin "baserom.gba", 0x260218, 0x8
-
-gUnknown_8260220:: @ 8260220
- .incbin "baserom.gba", 0x260220, 0x8
-
-gUnknown_8260228:: @ 8260228
- .incbin "baserom.gba", 0x260228, 0x8
-
-gUnknown_8260230:: @ 8260230
- .incbin "baserom.gba", 0x260230, 0x8
-
-gUnknown_8260238:: @ 8260238
- .incbin "baserom.gba", 0x260238, 0x8
-
-gUnknown_8260240:: @ 8260240
- .incbin "baserom.gba", 0x260240, 0x20
-
-gUnknown_8260260:: @ 8260260
- .incbin "baserom.gba", 0x260260, 0x18
+gUnknown_8260270:: @ 8260270
+ .incbin "baserom.gba", 0x260270, 0x8
gUnknown_8260278:: @ 8260278
.incbin "baserom.gba", 0x260278, 0x30
diff --git a/data/data_83F5738.s b/data/data_83F5738.s
index dc09b0532..1dd697956 100644
--- a/data/data_83F5738.s
+++ b/data/data_83F5738.s
@@ -133,10 +133,10 @@ gUnknown_83F846D:: @ 83F846D
gUnknown_83F847D:: @ 83F847D
.incbin "baserom.gba", 0x3F847D, 0x323
- .section .rodata.83FB134
+ .section .rodata.83FB218
-gUnknown_83FB134:: @ 83FB134
- .incbin "baserom.gba", 0x3FB134, 0xA80
+gUnknown_83FB218:: @ 83FB218
+ .incbin "baserom.gba", 0x3FB218, 0x99C
BattleText_MistShroud:: @ 83FBBB4
.incbin "baserom.gba", 0x3FBBB4, 0x35
@@ -369,10 +369,10 @@ gUnknown_83FDDEB:: @ 83FDDEB
gUnknown_83FDF3C:: @ 83FDF3C
.incbin "baserom.gba", 0x3FDF3C, 0x5D8
-gUnknown_83FE514:: @ 83FE514
+gMissStringIds:: @ 83FE514
.incbin "baserom.gba", 0x3FE514, 0x150
-gUnknown_83FE664:: @ 83FE664
+gTrappingMoves:: @ 83FE664
.incbin "baserom.gba", 0x3FE664, 0xE
gUnknown_83FE672:: @ 83FE672
@@ -387,7 +387,7 @@ gUnknown_83FE6B5:: @ 83FE6B5
gUnknown_83FE6D0:: @ 83FE6D0
.incbin "baserom.gba", 0x3FE6D0, 0x5
-gUnknown_83FE6D5:: @ 83FE6D5
+gText_WhatWillPkmnDo:: @ 83FE6D5
.incbin "baserom.gba", 0x3FE6D5, 0x11
gUnknown_83FE6E6:: @ 83FE6E6
@@ -396,7 +396,7 @@ gUnknown_83FE6E6:: @ 83FE6E6
gUnknown_83FE6FA:: @ 83FE6FA
.incbin "baserom.gba", 0x3FE6FA, 0x1A
-gUnknown_83FE714:: @ 83FE714
+gText_LinkStandby:: @ 83FE714
.incbin "baserom.gba", 0x3FE714, 0x11
gUnknown_83FE725:: @ 83FE725
@@ -405,19 +405,19 @@ gUnknown_83FE725:: @ 83FE725
gUnknown_83FE747:: @ 83FE747
.incbin "baserom.gba", 0x3FE747, 0x1F
-gUnknown_83FE766:: @ 83FE766
+gText_MoveInterfacePP:: @ 83FE766
.incbin "baserom.gba", 0x3FE766, 0x4
-gUnknown_83FE76A:: @ 83FE76A
+gText_MoveInterfaceType:: @ 83FE76A
.incbin "baserom.gba", 0x3FE76A, 0x6
gUnknown_83FE770:: @ 83FE770
.incbin "baserom.gba", 0x3FE770, 0x21
-gUnknown_83FE791:: @ 83FE791
+gText_BattleYesNoChoice:: @ 83FE791
.incbin "baserom.gba", 0x3FE791, 0xF
-gUnknown_83FE7A0:: @ 83FE7A0
+gText_BattleSwitchWhich:: @ 83FE7A0
.incbin "baserom.gba", 0x3FE7A0, 0x6C
gUnknown_83FE80C:: @ 83FE80C
diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s
index 2107a7c0f..8f16958e6 100644
--- a/data/data_83FECCC.s
+++ b/data/data_83FECCC.s
@@ -26,8 +26,10 @@ gUnknown_83FECF4:: @ 83FECF4
gUnknown_83FECFA:: @ 83FECFA
.incbin "baserom.gba", 0x3FECFA, 0x6
-gUnknown_83FED00:: @ 83FED00
- .incbin "baserom.gba", 0x3FED00, 0x380
+ .section .rodata.83FEDE4
+
+gUnknown_83FEDE4:: @ 83FEDE4
+ .incbin "baserom.gba", 0x3FEDE4, 0x29C
gUnknown_83FF080:: @ 83FF080
.incbin "baserom.gba", 0x3FF080, 0xB0
@@ -230,125 +232,6 @@ gUnknown_840C39C:: @ 840C39C
gUnknown_840C3BC:: @ 840C3BC
.incbin "baserom.gba", 0x40C3BC, 0x1E8
-gUnknown_840C5A4:: @ 840C5A4
- .incbin "baserom.gba", 0x40C5A4, 0xC
-
-gUnknown_840C5B0:: @ 840C5B0
- .incbin "baserom.gba", 0x40C5B0, 0x20
-
-gUnknown_840C5D0:: @ 840C5D0
- .incbin "baserom.gba", 0x40C5D0, 0x20
-
-gUnknown_840C5F0:: @ 840C5F0
- .incbin "baserom.gba", 0x40C5F0, 0x20
-
-gUnknown_840C610:: @ 840C610
- .incbin "baserom.gba", 0x40C610, 0x20
-
-gUnknown_840C630:: @ 840C630
- .incbin "baserom.gba", 0x40C630, 0x20
-
-gUnknown_840C650:: @ 840C650
- .incbin "baserom.gba", 0x40C650, 0x404
-
-gUnknown_840CA54:: @ 840CA54
- .incbin "baserom.gba", 0x40CA54, 0x138
-
-gUnknown_840CB8C:: @ 840CB8C
- .incbin "baserom.gba", 0x40CB8C, 0x69C
-
-gUnknown_840D228:: @ 840D228
- .incbin "baserom.gba", 0x40D228, 0xF30
-
-gUnknown_840E158:: @ 840E158
- .incbin "baserom.gba", 0x40E158, 0x7AC
-
-gUnknown_840E904:: @ 840E904
- .incbin "baserom.gba", 0x40E904, 0x93C
-
-gUnknown_840F240:: @ 840F240
- .incbin "baserom.gba", 0x40F240, 0x704
-
-gUnknown_840F944:: @ 840F944
- .incbin "baserom.gba", 0x40F944, 0x854
-
-gUnknown_8410198:: @ 8410198
- .incbin "baserom.gba", 0x410198, 0x41C
-
-gUnknown_84105B4:: @ 84105B4
- .incbin "baserom.gba", 0x4105B4, 0x728
-
-gUnknown_8410CDC:: @ 8410CDC
- .incbin "baserom.gba", 0x410CDC, 0x18
-
-gUnknown_8410CF4:: @ 8410CF4
- .incbin "baserom.gba", 0x410CF4, 0x10C
-
-gUnknown_8410E00:: @ 8410E00
- .incbin "baserom.gba", 0x410E00, 0x4
-
-gUnknown_8410E04:: @ 8410E04
- .incbin "baserom.gba", 0x410E04, 0x4
-
-gUnknown_8410E08:: @ 8410E08
- .incbin "baserom.gba", 0x410E08, 0x8
-
-gUnknown_8410E10:: @ 8410E10
- .incbin "baserom.gba", 0x410E10, 0x20
-
-gUnknown_8410E30:: @ 8410E30
- .incbin "baserom.gba", 0x410E30, 0xDC8
-
-gUnknown_8411BF8:: @ 8411BF8
- .incbin "baserom.gba", 0x411BF8, 0x20
-
-gUnknown_8411C18:: @ 8411C18
- .incbin "baserom.gba", 0x411C18, 0xD88
-
-gUnknown_84129A0:: @ 84129A0
- .incbin "baserom.gba", 0x4129A0, 0x20
-
-gUnknown_84129C0:: @ 84129C0
- .incbin "baserom.gba", 0x4129C0, 0x958
-
-gUnknown_8413318:: @ 8413318
- .incbin "baserom.gba", 0x413318, 0x20
-
-gUnknown_8413338:: @ 8413338
- .incbin "baserom.gba", 0x413338, 0x51C
-
-gUnknown_8413854:: @ 8413854
- .incbin "baserom.gba", 0x413854, 0x20
-
-gUnknown_8413874:: @ 8413874
- .incbin "baserom.gba", 0x413874, 0x524
-
-gUnknown_8413D98:: @ 8413D98
- .incbin "baserom.gba", 0x413D98, 0x20
-
-gUnknown_8413DB8:: @ 8413DB8
- .incbin "baserom.gba", 0x413DB8, 0x564
-
-gUnknown_841431C:: @ 841431C
- .incbin "baserom.gba", 0x41431C, 0x48
-
-gUnknown_8414364:: @ 8414364
- .incbin "baserom.gba", 0x414364, 0x54
-
-gUnknown_84143B8:: @ 84143B8
- .incbin "baserom.gba", 0x4143B8, 0x18
-
-gUnknown_84143D0:: @ 84143D0
- .incbin "baserom.gba", 0x4143D0, 0x1B8
-
-gUnknown_8414588:: @ 8414588
- .incbin "baserom.gba", 0x414588, 0x34
-
-gUnknown_84145BC:: @ 84145BC
- .incbin "baserom.gba", 0x4145BC, 0x204
-
- @ strings
-
.section .rodata.841EE44
.align 2
gUnknown_841EE44:: @ 841EE44
diff --git a/data/graphics.s b/data/graphics.s
index 4b00c1c4b..96ef720e9 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -146,7 +146,7 @@ gFile_graphics_interface_ball_Open_sheet:: @ 8D022E8
.incbin "graphics/interface/ball_open.4bpp.lz"
.align 2
-gFile_graphics_interface_blank_sheet:: @ 8D02364
+gBlankGfxCompressed:: @ 8D02364
.incbin "graphics/interface/blank.4bpp.lz"
.align 2
@@ -1062,8 +1062,11 @@ gFile_graphics_unused_basic_frame_tilemap:: @ 8D11A78
.incbin "graphics/unused/basic_frame.bin.lz"
.align 2
-gUnknown_8D11B84:: @ 8D11B84
- .incbin "baserom.gba", 0xD11B84, 0x40
+gBattleInterface_BallStatusBarPal:: @ 8D11B84
+ .incbin "baserom.gba", 0xD11B84, 0x20
+
+gBattleInterface_BallDisplayPal:: @ 8D11BA4
+ .incbin "baserom.gba", 0xD11BA4, 0x20
gUnknown_8D11BC4:: @ 8D11BC4
.incbin "baserom.gba", 0xD11BC4, 0xF00
@@ -1761,23 +1764,23 @@ gFile_graphics_battle_anims_sprites_186_palette:: @ 8D1F31C
.incbin "graphics/battle_anims/sprites/186.gbapal.lz"
.align 2
-gUnknown_8D1F340:: @ 8D1F340
+gHealthboxSinglesPlayerGfx:: @ 8D1F340
.incbin "baserom.gba", 0xD1F340, 0x2C4
.align 2
-gUnknown_8D1F604:: @ 8D1F604
+gHealthboxSinglesOpponentGfx:: @ 8D1F604
.incbin "baserom.gba", 0xD1F604, 0x190
.align 2
-gUnknown_8D1F794:: @ 8D1F794
+gHealthboxDoublesPlayerGfx:: @ 8D1F794
.incbin "baserom.gba", 0xD1F794, 0x194
.align 2
-gUnknown_8D1F928:: @ 8D1F928
+gHealthboxDoublesOpponentGfx:: @ 8D1F928
.incbin "baserom.gba", 0xD1F928, 0x194
.align 2
-gFile_graphics_battle_interface_healthbox_safari_sheet:: @ 8D1FABC
+gHealthboxSafariGfx:: @ 8D1FABC
.incbin "graphics/battle_interface/healthbox_safari.4bpp.lz"
.align 2
@@ -2365,15 +2368,15 @@ gFile_graphics_battle_anims_sprites_240_palette:: @ 8D2D068
.incbin "graphics/battle_anims/sprites/240.gbapal.lz"
.align 2
-gFile_graphics_battle_anims_sprites_substitute_palette:: @ 8D2D090
+gSubstituteDollPal:: @ 8D2D090
.incbin "graphics/battle_anims/sprites/substitute.gbapal.lz"
.align 2
-gFile_graphics_battle_anims_sprites_substitute_sheet:: @ 8D2D0B4
+gSubstituteDollGfx:: @ 8D2D0B4
.incbin "graphics/battle_anims/sprites/substitute.4bpp.lz"
.align 2
-gFile_graphics_battle_anims_sprites_substitute_tilemap:: @ 8D2D2F4
+gSubstituteDollTilemap:: @ 8D2D2F4
.incbin "graphics/battle_anims/sprites/substitute.bin.lz"
.align 2
@@ -15923,10 +15926,10 @@ gFile_graphics_battle_anims_sprites_271_sheet:: @ 8E93AB4
.incbin "graphics/battle_anims/sprites/271.4bpp.lz"
.align 2
-gUnknown_8E93B14:: @ 8E93B14
+gGhostPalette:: @ 8E93B14
.incbin "baserom.gba", 0xE93B14, 0x24
-gUnknown_8E93B38:: @ 8E93B38
+gGhostFrontPic:: @ 8E93B38
.incbin "baserom.gba", 0xE93B38, 0x368
gUnknown_8E93EA0:: @ 8E93EA0
@@ -16343,14 +16346,17 @@ gUnknown_8EAAA10:: @ 8EAAA10
gUnknown_8EAAA6C:: @ 8EAAA6C
.incbin "baserom.gba", 0xEAAA6C, 0xAC
-gUnknown_8EAAB18:: @ 8EAAB18
- .incbin "baserom.gba", 0xEAAB18, 0x80 @UNKNOWN
+gCreditsMonBackdropPals:: @ 8EAAB18
+ .incbin "graphics/credits/charizard.gbapal"
+ .incbin "graphics/credits/venusaur.gbapal"
+ .incbin "graphics/credits/blastoise.gbapal"
+ .incbin "graphics/credits/pikachu.gbapal"
-gUnknown_8EAAB98:: @ 8EAAB98
- .incbin "baserom.gba", 0xEAAB98, 0x774
+gCreditsPokeballBgGfxTiles:: @ 8EAAB98
+ .incbin "graphics/credits/unk_8EAAB98.4bpp.lz"
-gUnknown_8EAB30C:: @ 8EAB30C
- .incbin "baserom.gba", 0xEAB30C, 0x3B8
+gCreditsPokeballBgGfxMap:: @ 8EAB30C
+ .incbin "graphics/credits/unk_8EAB30C.bin.lz"
@ title_screen
gGraphics_TitleScreen_PokemonFireRedLogoPals:: @ 8EAB6C4
@@ -16386,14 +16392,14 @@ gGraphics_TitleScreen_FirePals:: @ 8EAE488
gGraphics_TitleScreen_BlankObjTiles:: @ 8EAE4A8
.incbin "graphics/title_screen/unk_8eae4a8.4bpp.lz"
-gUnknown_8EAE528:: @ 8EAE528
- .incbin "baserom.gba", 0xEAE528, 0x20 @UNKNOWN
+gCreditsAllRightsReservedGfxPal:: @ 8EAE528
+ .incbin "graphics/credits/unk_8EAE548.gbapal"
-gUnknown_8EAE548:: @ 8EAE548
- .incbin "baserom.gba", 0xEAE548, 0x3B8
+gCreditsAllRightsReservedGfxTiles:: @ 8EAE548
+ .incbin "graphics/credits/unk_8EAE548.4bpp.lz"
-gUnknown_8EAE900:: @ 8EAE900
- .incbin "baserom.gba", 0xEAE900, 0x100
+gCreditsAllRightsReservedGfxMap:: @ 8EAE900
+ .incbin "graphics/credits/unk_8EAE548.bin.lz"
gUnknown_8EAEA00:: @ 8EAEA00
.incbin "baserom.gba", 0xEAEA00, 0x20 @UNKNOWN
diff --git a/data/maps/IndigoPlateau_Exterior/scripts.inc b/data/maps/IndigoPlateau_Exterior/scripts.inc
index 873224926..8e7705650 100644
--- a/data/maps/IndigoPlateau_Exterior/scripts.inc
+++ b/data/maps/IndigoPlateau_Exterior/scripts.inc
@@ -59,7 +59,7 @@ EventScript_167264:: @ 8167264
setvar VAR_MAP_SCENE_INDIGO_PLATEAU_EXTERIOR, 0
removeobject 1
removeobject 2
- special sub_80F39B4
+ special Special_Credits
waitstate
releaseall
end
diff --git a/data/maps/PokemonLeague_HallOfFame/scripts.inc b/data/maps/PokemonLeague_HallOfFame/scripts.inc
index faadadcda..11df46047 100644
--- a/data/maps/PokemonLeague_HallOfFame/scripts.inc
+++ b/data/maps/PokemonLeague_HallOfFame/scripts.inc
@@ -37,7 +37,7 @@ EventScript_162D70:: @ 8162D70
call EventScript_1A651A
setrespawn SPAWN_PALLET_TOWN
fadescreenspeed 1, 24
- special sub_80CA2E4
+ special Special_HallOfFame
waitstate
releaseall
end
diff --git a/data/smokescreen.s b/data/smokescreen.s
new file mode 100644
index 000000000..17d611d3c
--- /dev/null
+++ b/data/smokescreen.s
@@ -0,0 +1,17 @@
+ .section .rodata
+ .balign 4
+
+gUnknown_825098C:: @ 825098C
+ .incbin "baserom.gba", 0x25098C, 0x8
+
+gUnknown_8250994:: @ 8250994
+ .incbin "baserom.gba", 0x250994, 0x60
+
+gUnknown_82509F4:: @ 82509F4
+ .incbin "baserom.gba", 0x2509F4, 0x18
+
+gSpriteSheet_EnemyShadow:: @ 8250A0C
+ .incbin "baserom.gba", 0x250A0C, 0x10
+
+gSpriteTemplate_EnemyShadow:: @ 8250A1C
+ .incbin "baserom.gba", 0x250A1C, 0x18
diff --git a/data/specials.inc b/data/specials.inc
index cdd41f50d..5905d825f 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -281,7 +281,7 @@ gSpecials:: @ 815FD60
def_special nullsub_75
def_special nullsub_61
def_special DoSoftReset
- def_special sub_80CA2E4
+ def_special Special_HallOfFame
def_special sub_80CB498
def_special nullsub_75
def_special SpawnScriptFieldObject
@@ -430,7 +430,7 @@ gSpecials:: @ 815FD60
def_special sub_814EA7C
def_special sub_80CCB94
def_special sub_80CCCF8
- def_special sub_80F39B4
+ def_special Special_Credits
def_special sub_8153810
def_special sub_809D764
def_special sub_809D8C0
diff --git a/data/strings.s b/data/strings.s
index 4f6b40d85..603bce34f 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -393,7 +393,7 @@ gFameCheckerText_Cancel:: @ 84161C1
gOtherText_Exit:: @ 84161C8
.string "EXIT$"
-gUnknown_84161CD:: @ 84161CD
+gString_Dummy:: @ 84161CD
.string "$"
gUnknown_84161CE::
@@ -3320,263 +3320,348 @@ gUnknown_841D18D:: @ 841D18D
.string "ROOFTOP$"
.align 2
-gUnknown_841D198:: @ 841D198
+gString_PokemonFireRed_Staff:: @ 841D198
.string "Pokémon FireRed Version\nStaff$"
-gUnknown_841D1B6:: @ 0x841D1B6
- .string " Pokémon LeafGreen Version\nStaff$"
+ .align 2
+gString_PokemonLeafGreen_Staff:: @ 0x841D1B8
+ .string "Pokémon LeafGreen Version\nStaff$"
-gUnknown_841D1D8:: @ 0x841D1D8
+ .align 2
+gCreditsString_Director:: @ 0x841D1D8
.string "\n\nDirector\n\n\n\n$"
-gUnknown_841D1E7:: @ 0x841D1E7
- .string " \n\n\nJunichi Masuda\n\n\n$"
+ .align 2
+gCreditsString_Junichi_Masuda:: @ 0x841D1E8
+ .string "\n\n\nJunichi Masuda\n\n\n$"
-gUnknown_841D1FD:: @ 0x841D1FD
- .string " \nArt Director\n\nBattle Director\n\n\n$"
+ .align 2
+gCreditsString_Art_Director_Battle_Director:: @ 0x841D200
+ .string "\nArt Director\n\nBattle Director\n\n\n$"
-gUnknown_841D222:: @ 0x841D222
- .string " \n\nKen Sugimori\n\nShigeki Morimoto\n\n$"
+ .align 2
+gCreditsString_Ken_Sugimori_Shigeki_Morimoto:: @ 0x841D224
+ .string "\n\nKen Sugimori\n\nShigeki Morimoto\n\n$"
-gUnknown_841D247:: @ 0x841D247
- .string " Program Leader\n\nPlanning Leader\n\nGraphic Design Leader\n\n$"
+ .align 2
+gCreditsString_Program_Leader_Planning_Leader_Graphic_Design_Leader:: @ 0x841D248
+ .string "Program Leader\n\nPlanning Leader\n\nGraphic Design Leader\n\n$"
-gUnknown_841D281:: @ 0x841D281
- .string " \nTetsuya Watanabe\n\nKoji Nishino\n\nTakao Unno\n$"
+ .align 2
+gCreditsString_Tetsuya_Watanabe_Koji_Nishino_Takao_Unno:: @ 0x841D284
+ .string "\nTetsuya Watanabe\n\nKoji Nishino\n\nTakao Unno\n$"
-gUnknown_841D2B1:: @ 0x841D2B1
- .string " Programmers\n\n\n\n\n$"
+ .align 2
+gCreditsString_Programmers:: @ 0x841D2B4
+ .string "Programmers\n\n\n\n\n$"
-gUnknown_841D2C5:: @ 0x841D2C5
- .string " \nHiroyuki Nakamura\nMasao Taya\nSatoshi Nohara\nMiyuki Iwasawa\nDaisuke Goto\n$"
+ .align 2
+gCreditsString_Hiroyuki_Nakamura_Masao_Taya_Satoshi_Nohara_Miyuki_Iwasawa_Daisuke_Goto:: @ 0x841D2C8
+ .string "\nHiroyuki Nakamura\nMasao Taya\nSatoshi Nohara\nMiyuki Iwasawa\nDaisuke Goto\n$"
-gUnknown_841D312:: @ 0x841D312
- .string " System Programmers\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_System_Programmers:: @ 0x841D314
+ .string "System Programmers\n\n\n\n\n\n$"
-gUnknown_841D32D:: @ 0x841D32D
- .string " \nTetsuya Watanabe\nAkito Mori\nHisashi Sogabe\nSousuke Tamada\n\n$"
+ .align 2
+gCreditsString_Tetsuya_Watanabe_Akito_Mori_Hisashi_Sogabe_Sousuke_Tamada:: @ 0x841D330
+ .string "\nTetsuya Watanabe\nAkito Mori\nHisashi Sogabe\nSousuke Tamada\n\n$"
-gUnknown_841D36D:: @ 0x841D36D
- .string " Graphic Designers\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_Graphic_Designers:: @ 0x841D370
+ .string "Graphic Designers\n\n\n\n\n\n$"
-gUnknown_841D388:: @ 0x841D388
+ .align 2
+gCreditsString_Takao_Unno_Asuka_Iwashita_Kanako_Eo_Hiroki_Fuchino:: @ 0x841D388
.string "\nTakao Unno\nAsuka Iwashita\nKanako Eo\nHiroki Fuchino\n\n$"
-gUnknown_841D3BE:: @ 0x841D3BE
- .string " \nGraphic Designers\n\n\n\n\n$"
+ .align 2
+gCreditsString_Graphic_Designers_2:: @ 0x841D3C0
+ .string "\nGraphic Designers\n\n\n\n\n$"
-gUnknown_841D3D8:: @ 0x841D3D8
+ .align 2
+gCreditsString_Ken_Sugimori_Hironobu_Yoshida:: @ 0x841D3D8
.string "\n\nKen Sugimori\nHironobu Yoshida\n\n\n$"
-gUnknown_841D3FB:: @ 0x841D3FB
- .string " \nMusic Composition\n\n\n\n\n$"
+ .align 2
+gCreditsString_Music_Composition:: @ 0x841D3FC
+ .string "\nMusic Composition\n\n\n\n\n$"
-gUnknown_841D414:: @ 0x841D414
+ .align 2
+gCreditsString_Go_Ichinose_Junichi_Masuda:: @ 0x841D414
.string "\n\nGo Ichinose\nJunichi Masuda\n\n\n$"
-gUnknown_841D434:: @ 0x841D434
+ .align 2
+gCreditsString_Sound_Effects:: @ 0x841D434
.string "\n\nSound Effects\n\n\n\n$"
-gUnknown_841D448:: @ 0x841D448
+ .align 2
+gCreditsString_Go_Ichinose:: @ 0x841D448
.string "\n\n\nGo Ichinose\n\n\n$"
-gUnknown_841D45A:: @ 0x841D45A
- .string " \nGame Designers\n\n\n\n\n$"
+ .align 2
+gCreditsString_Game_Designers:: @ 0x841D45C
+ .string "\nGame Designers\n\n\n\n\n$"
-gUnknown_841D471:: @ 0x841D471
- .string " \n\nJunichi Masuda\nKoji Nishino\nTetsuji Ohta\n\n$"
+ .align 2
+gCreditsString_Junichi_Masuda_Koji_Nishino_Tetsuji_Ohta:: @ 0x841D474
+ .string "\n\nJunichi Masuda\nKoji Nishino\nTetsuji Ohta\n\n$"
-gUnknown_841D4A1:: @ 0x841D4A1
- .string " \nGame Designers\n\n\n\n\n$"
+ .align 2
+gCreditsString_Game_Designers_2:: @ 0x841D4A4
+ .string "\nGame Designers\n\n\n\n\n$"
-gUnknown_841D4B9:: @ 0x841D4B9
- .string " \n\nHitomi Sato\nShigeru Ohmori\nTadashi Takahashi\n\n$"
+ .align 2
+gCreditsString_Hitomi_Sato_Shigeru_Ohmori_Tadashi_Takahashi:: @ 0x841D4BC
+ .string "\n\nHitomi Sato\nShigeru Ohmori\nTadashi Takahashi\n\n$"
-gUnknown_841D4ED:: @ 0x841D4ED
- .string " \nGame Scenario\n\n\n\n\n$"
+ .align 2
+gCreditsString_Game_Scenario:: @ 0x841D4F0
+ .string "\nGame Scenario\n\n\n\n\n$"
-gUnknown_841D504:: @ 0x841D504
+ .align 2
+gCreditsString_Hitomi_Sato_Satoshi_Tajiri:: @ 0x841D504
.string "\n\nHitomi Sato\nSatoshi Tajiri\n\n\n$"
-gUnknown_841D524:: @ 0x841D524
+ .align 2
+gCreditsString_Script_Designer_Map_Designer:: @ 0x841D524
.string "\nScript Designer\n\nMap Designer\n\n\n$"
-gUnknown_841D546:: @ 0x841D546
- .string " \n\nSatoshi Nohara\n\nShigeru Ohmori\n\n$"
+ .align 2
+gCreditsString_Satoshi_Nohara_Shigeru_Ohmori:: @ 0x841D548
+ .string "\n\nSatoshi Nohara\n\nShigeru Ohmori\n\n$"
-gUnknown_841D56B:: @ 0x841D56B
- .string " \nParametric Designers\n\n\n\n\n$"
+ .align 2
+gCreditsString_Parametric_Designers:: @ 0x841D56C
+ .string "\nParametric Designers\n\n\n\n\n$"
-gUnknown_841D587:: @ 0x841D587
- .string " \n\nKoji Nishino\nTetsuji Ohta\nShigeki Morimoto\n\n$"
+ .align 2
+gCreditsString_Koji_Nishino_Tetsuji_Ohta_Shigeki_Morimoto:: @ 0x841D588
+ .string "\n\nKoji Nishino\nTetsuji Ohta\nShigeki Morimoto\n\n$"
-gUnknown_841D5B7:: @ 0x841D5B7
- .string " \n\nPOKéDEX Text\n\n\n\n$"
+ .align 2
+gCreditsString_POKeDEX_Text:: @ 0x841D5B8
+ .string "\n\nPOKéDEX Text\n\n\n\n$"
-gUnknown_841D5CB:: @ 0x841D5CB
- .string " \n\n\nKenji Matsushima\n\n\n$"
+ .align 2
+gCreditsString_Kenji_Matsushima:: @ 0x841D5CC
+ .string "\n\n\nKenji Matsushima\n\n\n$"
-gUnknown_841D5E3:: @ 0x841D5E3
- .string " POKéMON Designers\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_POKeMON_Designers:: @ 0x841D5E4
+ .string "POKéMON Designers\n\n\n\n\n\n$"
-gUnknown_841D5FC:: @ 0x841D5FC
+ .align 2
+gCreditsString_Ken_Sugimori_Motofumi_Fujiwara_Shigeki_Morimoto_Hironobu_Yoshida:: @ 0x841D5FC
.string "\nKen Sugimori\nMotofumi Fujiwara\nShigeki Morimoto\nHironobu Yoshida\n\n$"
-gUnknown_841D640:: @ 0x841D640
+ .align 2
+gCreditsString_POKeMON_Designers_2:: @ 0x841D640
.string "POKéMON Designers\n\n\n\n\n\n$"
-gUnknown_841D658:: @ 0x841D658
+ .align 2
+gCreditsString_Satoshi_Ohta_Asuka_Iwashita_Takao_Unno_Kanako_Eo_Aimi_Tomita:: @ 0x841D658
.string "\nSatoshi Ohta\nAsuka Iwashita\nTakao Unno\nKanako Eo\nAimi Tomita\n$"
-gUnknown_841D697:: @ 0x841D697
- .string " POKéMON Designers\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_POKeMON_Designers_3:: @ 0x841D698
+ .string "POKéMON Designers\n\n\n\n\n\n$"
-gUnknown_841D6B0:: @ 0x841D6B0
+ .align 2
+gCreditsString_Atsuko_Nishida_Muneo_Saito_Rena_Yoshikawa_Jun_Okutani:: @ 0x841D6B0
.string "\nAtsuko Nishida\nMuneo Saito\nRena Yoshikawa\nJun Okutani\n\n$"
-gUnknown_841D6E9:: @ 0x841D6E9
- .string " Supporting Programmers\n\n\n\n$"
+ .align 2
+gCreditsString_Supporting_Programmers:: @ 0x841D6EC
+ .string "Supporting Programmers\n\n\n\n$"
-gUnknown_841D707:: @ 0x841D707
- .string " \nTeruyuki Yoshioka\nTakao Nakano\n\nSatoshi Mitsuhara\nDaisuke Hoshino\n$"
+ .align 2
+gCreditsString_Teruyuki_Yoshioka_Takao_Nakano_Satoshi_Mitsuhara_Daisuke_Hoshino:: @ 0x841D708
+ .string "\nTeruyuki Yoshioka\nTakao Nakano\n\nSatoshi Mitsuhara\nDaisuke Hoshino\n$"
-gUnknown_841D74C:: @ 0x841D74C
+ .align 2
+gCreditsString_NCL_Product_Testing:: @ 0x841D74C
.string "\n\nNCL Product Testing\n\n\n\n$"
-gUnknown_841D766:: @ 0x841D766
- .string " \n\n\nNCL Super Mario Club\n\n\n$"
+ .align 2
+gCreditsString_NCL_Super_Mario_Club:: @ 0x841D768
+ .string "\n\n\nNCL Super Mario Club\n\n\n$"
-gUnknown_841D783:: @ 0x841D783
- .string " Special Thanks\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_Special_Thanks:: @ 0x841D784
+ .string "Special Thanks\n\n\n\n\n\n$"
-gUnknown_841D799:: @ 0x841D799
- .string " \nHiro Nakamura\nHiroyuki Uesugi\nTeruki Murakawa\n\nKazuya Suyama\n$"
+ .align 2
+gCreditsString_Hiro_Nakamura_Hiroyuki_Uesugi_Teruki_Murakawa_Kazuya_Suyama:: @ 0x841D79C
+ .string "\nHiro Nakamura\nHiroyuki Uesugi\nTeruki Murakawa\n\nKazuya Suyama\n$"
-gUnknown_841D7DB:: @ 0x841D7DB
- .string " Special Thanks\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_Special_Thanks_2:: @ 0x841D7DC
+ .string "Special Thanks\n\n\n\n\n\n$"
-gUnknown_841D7F1:: @ 0x841D7F1
- .string " \nKenji Tominaga\n\nKenjiro Ito\nTomotaka Komura\nMichiko Takizawa\n$"
+ .align 2
+gCreditsString_Kenji_Tominaga_Kenjiro_Ito_Tomotaka_Komura_Michiko_Takizawa:: @ 0x841D7F4
+ .string "\nKenji Tominaga\n\nKenjiro Ito\nTomotaka Komura\nMichiko Takizawa\n$"
-gUnknown_841D833:: @ 0x841D833
- .string " Special Thanks\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_Special_Thanks_3:: @ 0x841D834
+ .string "Special Thanks\n\n\n\n\n\n$"
-gUnknown_841D849:: @ 0x841D849
- .string " \nMakiko Takada\nMikiko Ohashi\nShusaku Egami\nTakanao Kondo\nRui Kawaguchi\n$"
+ .align 2
+gCreditsString_Makiko_Takada_Mikiko_Ohashi_Shusaku_Egami_Takanao_Kondo_Rui_Kawaguchi:: @ 0x841D84C
+ .string "\nMakiko Takada\nMikiko Ohashi\nShusaku Egami\nTakanao Kondo\nRui Kawaguchi\n$"
-gUnknown_841D894:: @ 0x841D894
+ .align 2
+gCreditsString_Braille_Code_Check:: @ 0x841D894
.string "\n\nBraille Code Check\n\n\n\n$"
-gUnknown_841D8AD:: @ 0x841D8AD
- .string " \n\n\nJapan Braille Library\n\n\n$"
+ .align 2
+gCreditsString_Japan_Braille_Library:: @ 0x841D8B0
+ .string "\n\n\nJapan Braille Library\n\n\n$"
-gUnknown_841D8CC:: @ 0x841D8CC
+ .align 2
+gCreditsString_Information_Supervisors:: @ 0x841D8CC
.string "Information Supervisors\n\n\n\n\n\n$"
-gUnknown_841D8EA:: @ 0x841D8EA
- .string " \nHiroki Enomoto\nKazuyuki Terada\nYuri Sakurai\nYumi Funasaka\nNaoko Yanase\n$"
+ .align 2
+gCreditsString_Hiroki_Enomoto_Kazuyuki_Terada_Yuri_Sakurai_Yumi_Funasaka_Naoko_Yanase:: @ 0x841D8EC
+ .string "\nHiroki Enomoto\nKazuyuki Terada\nYuri Sakurai\nYumi Funasaka\nNaoko Yanase\n$"
-gUnknown_841D935:: @ 0x841D935
- .string " Coordinators\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_Coordinators:: @ 0x841D938
+ .string "Coordinators\n\n\n\n\n\n$"
-gUnknown_841D94B:: @ 0x841D94B
- .string " \nAzusa Tajima\nAkira Kinashi\nKazuki Yoshihara\n\nRetsuji Nomoto\n$"
+ .align 2
+gCreditsString_Azusa_Tajima_Akira_Kinashi_Kazuki_Yoshihara_Retsuji_Nomoto:: @ 0x841D94C
+ .string "\nAzusa Tajima\nAkira Kinashi\nKazuki Yoshihara\n\nRetsuji Nomoto\n$"
-gUnknown_841D98A:: @ 0x841D98A
- .string " \nTask Managers\n\n\n\n\n$"
+ .align 2
+gCreditsString_Task_Managers:: @ 0x841D98C
+ .string "\nTask Managers\n\n\n\n\n$"
-gUnknown_841D9A0:: @ 0x841D9A0
+ .align 2
+gCreditsString_Hitoshi_Yamagami_Gakuji_Nomoto:: @ 0x841D9A0
.string "\n\nHitoshi Yamagami\nGakuji Nomoto\n\n\n$"
-gUnknown_841D9C4:: @ 0x841D9C4
+ .align 2
+gCreditsString_Producers:: @ 0x841D9C4
.string "\nProducers\n\n\n\n\n$"
-gUnknown_841D9D4:: @ 0x841D9D4
+ .align 2
+gCreditsString_Hiroyuki_Jinnai_Takehiro_Izushi_Hiroaki_Tsuru:: @ 0x841D9D4
.string "\n\nHiroyuki Jinnai\nTakehiro Izushi\nHiroaki Tsuru\n\n$"
-gUnknown_841DA06:: @ 0x841DA06
- .string " \n\nExecutive Director\n\n\n\n$"
+ .align 2
+gCreditsString_Executive_Director:: @ 0x841DA08
+ .string "\n\nExecutive Director\n\n\n\n$"
-gUnknown_841DA21:: @ 0x841DA21
- .string " \n\n\nSatoshi Tajiri\n\n\n$"
+ .align 2
+gCreditsString_Satoshi_Tajiri:: @ 0x841DA24
+ .string "\n\n\nSatoshi Tajiri\n\n\n$"
-gUnknown_841DA39:: @ 0x841DA39
- .string " \n\nExecutive Producer\n\n\n\n$"
+ .align 2
+gCreditsString_Executive_Producer:: @ 0x841DA3C
+ .string "\n\nExecutive Producer\n\n\n\n$"
-gUnknown_841DA55:: @ 0x841DA55
- .string " \n\n\nSatoru Iwata\n\n\n$"
+ .align 2
+gCreditsString_Satoru_Iwata:: @ 0x841DA58
+ .string "\n\n\nSatoru Iwata\n\n\n$"
-gUnknown_841DA6B:: @ 0x841DA6B
- .string " \n\nExecutive Producer\n\n\n\n$"
+ .align 2
+gCreditsString_Executive_Producer_2:: @ 0x841DA6C
+ .string "\n\nExecutive Producer\n\n\n\n$"
-gUnknown_841DA85:: @ 0x841DA85
- .string " \n\n\nTsunekaz Ishihara\n\n\n$"
+ .align 2
+gCreditsString_Tsunekaz_Ishihara:: @ 0x841DA88
+ .string "\n\n\nTsunekaz Ishihara\n\n\n$"
-gUnknown_841DAA0:: @ 0x841DAA0
+ .align 2
+gCreditsString_English_Version_Coordinators:: @ 0x841DAA0
.string "\nEnglish Version Coordinators\n\n\n\n\n$"
-gUnknown_841DAC3:: @ 0x841DAC3
- .string " \n\nHiro Nakamura\nSeth McMahill\n\n\n$"
+ .align 2
+gCreditsString_Hiro_Nakamura_Seth_McMahill:: @ 0x841DAC4
+ .string "\n\nHiro Nakamura\nSeth McMahill\n\n\n$"
-gUnknown_841DAE5:: @ 0x841DAE5
- .string " \nTranslator\n\nText Editor\n\n\n$"
+ .align 2
+gCreditsString_Translator_Text_Editor:: @ 0x841DAE8
+ .string "\nTranslator\n\nText Editor\n\n\n$"
-gUnknown_841DB04:: @ 0x841DB04
+ .align 2
+gCreditsString_Nob_Ogasawara_Teresa_Lillygren:: @ 0x841DB04
.string "\n\nNob Ogasawara\n\nTeresa Lillygren\n\n$"
-gUnknown_841DB28:: @ 0x841DB28
+ .align 2
+gCreditsString_Programmers_2:: @ 0x841DB28
.string "Programmers\n\n\n\n\n\n$"
-gUnknown_841DB3A:: @ 0x841DB3A
- .string " \nTeruki Murakawa\nSouichi Yamamoto\nYuichiro Ito\nAkira Kinashi\n\n$"
+ .align 2
+gCreditsString_Teruki_Murakawa_Souichi_Yamamoto_Yuichiro_Ito_Akira_Kinashi:: @ 0x841DB3C
+ .string "\nTeruki Murakawa\nSouichi Yamamoto\nYuichiro Ito\nAkira Kinashi\n\n$"
-gUnknown_841DB7B:: @ 0x841DB7B
- .string " \nEnvironment を Tool Programmers\n\n\n\n\n$"
+ .align 2
+gCreditsString_Environment_Tool_Programmers:: @ 0x841DB7C
+ .string "\nEnvironment を Tool Programmers\n\n\n\n\n$"
-gUnknown_841DBA1:: @ 0x841DBA1
- .string " \n\nTeruki Murakawa\nSouichi Yamamoto\nKimiko Nakamichi\n\n$"
+ .align 2
+gCreditsString_Teruki_Murakawa_Souichi_Yamamoto_Kimiko_Nakamichi:: @ 0x841DBA4
+ .string "\n\nTeruki Murakawa\nSouichi Yamamoto\nKimiko Nakamichi\n\n$"
-gUnknown_841DBDA:: @ 0x841DBDA
- .string " NOA Product Testing\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_NOA_Product_Testing:: @ 0x841DBDC
+ .string "NOA Product Testing\n\n\n\n\n\n$"
-gUnknown_841DBF6:: @ 0x841DBF6
- .string " \nThomas Hertzog\nKathy Huguenard\nMika Kurosawa\n\n\n$"
+ .align 2
+gCreditsString_Thomas_Hertzog_Kathy_Huguenard_Mika_Kurosawa:: @ 0x841DBF8
+ .string "\nThomas Hertzog\nKathy Huguenard\nMika Kurosawa\n\n\n$"
-gUnknown_841DC29:: @ 0x841DC29
- .string " Braille Code Check\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_Braille_Code_Check_2:: @ 0x841DC2C
+ .string "Braille Code Check\n\n\n\n\n\n$"
-gUnknown_841DC45:: @ 0x841DC45
- .string " \nNational Federation\n{CLEAR_TO 0x13}of the Blind\nPatricia A. Maurer\nJapan Braille Library\nEuropean Blind Union\n$"
+ .align 2
+gCreditsString_National_Federation_of_the_Blind_Patricia_A_Maurer_Japan_Braille_Library_European_Blind_Union:: @ 0x841DC48
+ .string "\nNational Federation\n{CLEAR_TO 0x13}of the Blind\nPatricia A. Maurer\nJapan Braille Library\nEuropean Blind Union\n$"
-gUnknown_841DCAC:: @ 0x841DCAC
+ .align 2
+gCreditsString_Braille_Code_Check_3:: @ 0x841DCAC
.string "\nBraille Code Check\n\n\n\n\n$"
-gUnknown_841DCC5:: @ 0x841DCC5
- .string " \n\nNational Information Library\n{CLEAR_TO 0x2D}Service\nMargaret Campion\n\n$"
+ .align 2
+gCreditsString_National_Information_Library_Service_Margaret_Campion:: @ 0x841DCC8
+ .string "\n\nNational Information Library\n{CLEAR_TO 0x2D}Service\nMargaret Campion\n\n$"
-gUnknown_841DD05:: @ 0x841DD05
- .string " Special Thanks\n\n\n\n\n\n$"
+ .align 2
+gCreditsString_Special_Thanks_4:: @ 0x841DD08
+ .string "Special Thanks\n\n\n\n\n\n$"
-gUnknown_841DD1D:: @ 0x841DD1D
- .string " \nTakehiro Izushi\nMotoyasu Tojima\nHitoshi Yamagami\nHiroyuki Uesugi\n\n$"
+ .align 2
+gCreditsString_Takehiro_Izushi_Motoyasu_Tojima_Hitoshi_Yamagami_Hiroyuki_Uesugi:: @ 0x841DD20
+ .string "\nTakehiro Izushi\nMotoyasu Tojima\nHitoshi Yamagami\nHiroyuki Uesugi\n\n$"
-gUnknown_841DD64:: @ 0x841DD64
+ .align 2
+gCreditsString_Special_Thanks_5:: @ 0x841DD64
.string "Special Thanks\n\n\n\n\n\n$"
-gUnknown_841DD79:: @ 0x841DD79
- .string " \nNicola Pratt-Barlow\nShellie Dow\nAnthony Howitt\nNaoko Saeki\nKyoko Onishi\n$"
+ .align 2
+gCreditsString_Nicola_Pratt_Barlow_Shellie_Dow_Anthony_Howitt_Naoko_Saeki_Kyoko_Onishi:: @ 0x841DD7C
+ .string "\nNicola Pratt-Barlow\nShellie Dow\nAnthony Howitt\nNaoko Saeki\nKyoko Onishi\n$"
-gUnknown_841DDC6:: @ 0x841DDC6
- .string " \nBraille Code Check\n\n\n\n\n$"
+ .align 2
+gCreditsString_Braille_Code_Check_4:: @ 0x841DDC8
+ .string "\nBraille Code Check\n\n\n\n\n$"
-gUnknown_841DDE1:: @ 0x841DDE1
- .string " \n\nThe Royal New Zealand\nFoundation of the Blind\nGreg Moran\n\n$"
+ .align 2
+gCreditsString_The_Royal_New_Zealand_Foundation_of_the_Blind_Greg_Moran:: @ 0x841DDE4
+ .string "\n\nThe Royal New Zealand\nFoundation of the Blind\nGreg Moran\n\n$"
-gUnknown_841DE21:: @ 0x841DE21
- .string " \n\nGraphic Designer\n\n\n\n$"
+ .align 2
+gCreditsString_Graphic_Designer:: @ 0x841DE24
+ .string "\n\nGraphic Designer\n\n\n\n$"
-gUnknown_841DE3B:: @ 0x841DE3B
- .string " \n\n\nAkira Kinashi\n\n\n$"
+ .align 2
+gCreditsString_Akira_Kinashi:: @ 0x841DE3C
+ .string "\n\n\nAkira Kinashi\n\n\n$"
gJPText_MysteryGift:: @ 841DE50
.string "$"
diff --git a/graphics/battle_interface/unk_battlebox.pal b/graphics/battle_interface/unk_battlebox.pal
new file mode 100644
index 000000000..862165f3f
--- /dev/null
+++ b/graphics/battle_interface/unk_battlebox.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 255 255
+106 90 115
+0 0 0
+213 230 255
+189 205 238
+238 238 255
+106 172 197
+90 139 180
+123 197 205
+0 0 0
+0 0 0
+123 197 255
+0 0 139
+255 131 131
+164 0 0
diff --git a/graphics/battle_interface/unk_battlebox.png b/graphics/battle_interface/unk_battlebox.png
new file mode 100644
index 000000000..9f136c3af
--- /dev/null
+++ b/graphics/battle_interface/unk_battlebox.png
Binary files differ
diff --git a/graphics/credits/blastoise.pal b/graphics/credits/blastoise.pal
new file mode 100644
index 000000000..c2b4afe7c
--- /dev/null
+++ b/graphics/credits/blastoise.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+148 197 246
+131 180 246
+106 164 246
+90 148 255
+57 98 164
+24 49 82
+172 222 246
+131 172 197
+98 131 148
+65 82 98
+32 41 49
+16 98 255
+8 65 164
+0 32 82
+0 0 0
diff --git a/graphics/credits/charizard.pal b/graphics/credits/charizard.pal
new file mode 100644
index 000000000..9ad2a106e
--- /dev/null
+++ b/graphics/credits/charizard.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+230 98 90
+213 65 82
+189 32 74
+172 0 74
+115 0 49
+57 0 24
+255 131 98
+197 98 74
+148 74 57
+98 49 32
+49 24 16
+255 0 8
+164 0 0
+82 0 0
+0 0 0
diff --git a/graphics/credits/pikachu.pal b/graphics/credits/pikachu.pal
new file mode 100644
index 000000000..32aaf1904
--- /dev/null
+++ b/graphics/credits/pikachu.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 230 57
+255 213 41
+255 189 16
+255 172 0
+164 115 0
+82 57 0
+255 255 82
+213 213 65
+180 180 57
+148 148 41
+106 106 32
+255 90 0
+164 57 0
+82 24 0
+0 0 0
diff --git a/graphics/credits/unk_8EAAB98.png b/graphics/credits/unk_8EAAB98.png
new file mode 100644
index 000000000..b1389a64a
--- /dev/null
+++ b/graphics/credits/unk_8EAAB98.png
Binary files differ
diff --git a/graphics/credits/unk_8EAB30C.bin b/graphics/credits/unk_8EAB30C.bin
new file mode 100644
index 000000000..c072a9564
--- /dev/null
+++ b/graphics/credits/unk_8EAB30C.bin
Binary files differ
diff --git a/graphics/credits/unk_8EAE548.bin b/graphics/credits/unk_8EAE548.bin
new file mode 100644
index 000000000..8830b60c3
--- /dev/null
+++ b/graphics/credits/unk_8EAE548.bin
Binary files differ
diff --git a/graphics/credits/unk_8EAE548.png b/graphics/credits/unk_8EAE548.png
new file mode 100644
index 000000000..297827436
--- /dev/null
+++ b/graphics/credits/unk_8EAE548.png
Binary files differ
diff --git a/graphics/credits/venusaur.pal b/graphics/credits/venusaur.pal
new file mode 100644
index 000000000..454209dfa
--- /dev/null
+++ b/graphics/credits/venusaur.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+131 205 131
+90 164 115
+49 115 98
+16 115 123
+8 74 82
+0 32 41
+172 255 156
+131 197 123
+98 148 90
+65 98 57
+32 49 24
+16 180 0
+8 115 0
+0 57 0
+0 0 0
diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk
index 40d04abe7..c5571394e 100644
--- a/graphics_file_rules.mk
+++ b/graphics_file_rules.mk
@@ -24,6 +24,7 @@ TEACHYTVGFXDIR := graphics/teachy_tv
SSANNEGFXDIR := graphics/ss_anne
ITEMPCGFXDIR := graphics/item_pc
TITLESCREENGFXDIR := graphics/title_screen
+CREDITSGFXDIR := graphics/credits
types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark
contest_types := cool beauty cute smart tough
@@ -497,3 +498,6 @@ $(ITEMPCGFXDIR)/unk_8E85090.4bpp: %.4bpp: %.png
$(TITLESCREENGFXDIR)/unk_8ead608.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 135
+
+$(CREDITSGFXDIR)/unk_8EAE548.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -num_tiles 77
diff --git a/include/battle.h b/include/battle.h
index b1284fd6c..1f7fc5bf6 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -2,15 +2,14 @@
#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"
-#include "battle_2.h"
+#include "battle_main.h"
#include "battle_ai_switch_items.h"
#include "battle_gfx_sfx_util.h"
#include "battle_util2.h"
+#include "battle_bg.h"
/*
Banks are a name given to what could be called a 'battlerId' or 'monControllerId'.
@@ -19,8 +18,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
@@ -29,9 +26,9 @@
#define SIDE_PLAYER 0x0
#define SIDE_OPPONENT 0x1
-#define GET_BANK_IDENTITY(bank)((gBanksByIdentity[bank]))
-#define GET_BANK_SIDE(bank)((GetBattlerPosition(bank) & BIT_SIDE))
-#define GET_BANK_SIDE2(bank)((GET_BANK_IDENTITY(bank) & BIT_SIDE))
+#define GET_BATTLER_POSITION(battler)((gBattlerPositions[battler]))
+#define GET_BATTLER_SIDE(battler)((GetBattlerPosition(battler) & BIT_SIDE))
+#define GET_BATTLER_SIDE2(battler)((GET_BATTLER_POSITION(battler) & BIT_SIDE))
#define TRAINER_OPPONENT_3FE 0x3FE
#define TRAINER_OPPONENT_C00 0xC00
@@ -73,21 +70,22 @@
#define SIDE_STATUS_MIST (1 << 8)
#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
-#define ACTION_USE_MOVE 0
-#define ACTION_USE_ITEM 1
-#define ACTION_SWITCH 2
-#define ACTION_RUN 3
-#define ACTION_WATCHES_CAREFULLY 4
-#define ACTION_SAFARI_ZONE_BALL 5
-#define ACTION_POKEBLOCK_CASE 6
-#define ACTION_GO_NEAR 7
-#define ACTION_SAFARI_ZONE_RUN 8
-#define ACTION_9 9
-#define ACTION_RUN_BATTLESCRIPT 10 // when executing an action
-#define ACTION_CANCEL_PARTNER 12 // when choosing an action
-#define ACTION_FINISHED 12 // when executing an action
-#define ACTION_NOTHING_FAINTED 13 // when choosing an action
-#define ACTION_INIT_VALUE 0xFF
+#define B_ACTION_USE_MOVE 0
+#define B_ACTION_USE_ITEM 1
+#define B_ACTION_SWITCH 2
+#define B_ACTION_RUN 3
+#define B_ACTION_SAFARI_WATCH_CAREFULLY 4
+#define B_ACTION_SAFARI_BALL 5
+#define B_ACTION_SAFARI_POKEBLOCK 6
+#define B_ACTION_SAFARI_GO_NEAR 7
+#define B_ACTION_SAFARI_RUN 8
+#define B_ACTION_9 9
+#define B_ACTION_EXEC_SCRIPT 10
+#define B_ACTION_TRY_FINISH 11
+#define B_ACTION_FINISHED 12
+#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
+#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
+#define B_ACTION_NONE 0xFF
#define MOVESTATUS_MISSED (1 << 0)
#define MOVESTATUS_SUPEREFFECTIVE (1 << 1)
@@ -150,19 +148,6 @@
#define TYPE_FORESIGHT 0xFE
#define TYPE_ENDTABLE 0xFF
-#define BS_GET_TARGET 0
-#define BS_GET_ATTACKER 1
-#define BS_GET_EFFECT_BANK 2
-#define BS_GET_gBank1 3
-#define BS_GET_BANK_0 7
-#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
-#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
-#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
-#define BS_GET_SCRIPTING_BANK 10
-#define BS_GET_OPPONENT1 12
-#define BS_GET_PLAYER2 13
-#define BS_GET_OPPONENT2 14
-
// for battle script commands
#define CMP_EQUAL 0x0
#define CMP_NOT_EQUAL 0x1
@@ -178,9 +163,6 @@ struct TrainerMonNoItemDefaultMoves
u16 species;
};
-u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg);
-u8 GetBattlerSide(u8 bank);
-
struct TrainerMonItemDefaultMoves
{
u16 iv;
@@ -208,10 +190,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
@@ -235,12 +217,12 @@ extern const struct Trainer gTrainers[];
#define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F))
-struct UnknownFlags
+struct ResourceFlags
{
u32 flags[4];
};
-#define UNKNOWN_FLAG_FLASH_FIRE 1
+#define RESOURCE_FLAG_FLASH_FIRE 1
struct DisableStruct
{
@@ -250,41 +232,41 @@ struct DisableStruct
/*0x08*/ u8 protectUses;
/*0x09*/ u8 stockpileCounter;
/*0x0A*/ u8 substituteHP;
- /*0x0B*/ u8 disableTimer1 : 4;
- /*0x0B*/ u8 disableTimer2 : 4;
+ /*0x0B*/ u8 disableTimer : 4;
+ /*0x0B*/ u8 disableTimerStartValue : 4;
/*0x0C*/ u8 encoredMovePos;
/*0x0D*/ u8 unkD;
- /*0x0E*/ u8 encoreTimer1 : 4;
- /*0x0E*/ u8 encoreTimer2 : 4;
- /*0x0F*/ u8 perishSongTimer1 : 4;
- /*0x0F*/ u8 perishSongTimer2 : 4;
+ /*0x0E*/ u8 encoreTimer : 4;
+ /*0x0E*/ u8 encoreTimerStartValue : 4;
+ /*0x0F*/ u8 perishSongTimer : 4;
+ /*0x0F*/ u8 perishSongTimerStartValue : 4;
/*0x10*/ u8 furyCutterCounter;
- /*0x11*/ u8 rolloutCounter1 : 4;
- /*0x11*/ u8 rolloutCounter2 : 4;
- /*0x12*/ u8 chargeTimer1 : 4;
- /*0x12*/ u8 chargeTimer2 : 4;
- /*0x13*/ u8 tauntTimer1:4;
+ /*0x11*/ u8 rolloutTimer : 4;
+ /*0x11*/ u8 rolloutTimerStartValue : 4;
+ /*0x12*/ u8 chargeTimer : 4;
+ /*0x12*/ u8 chargeTimerStartValue : 4;
+ /*0x13*/ u8 tauntTimer:4;
/*0x13*/ u8 tauntTimer2:4;
- /*0x14*/ u8 bankPreventingEscape;
- /*0x15*/ u8 bankWithSureHit;
+ /*0x14*/ u8 battlerPreventingEscape;
+ /*0x15*/ u8 battlerWithSureHit;
/*0x16*/ u8 isFirstTurn;
/*0x17*/ u8 unk17;
/*0x18*/ u8 truantCounter : 1;
- /*0x18*/ u8 truantUnknownBit : 1;
+ /*0x18*/ u8 truantSwitchInHack : 1; // unused?
/*0x18*/ u8 unk18_a_2 : 2;
- /*0x18*/ u8 unk18_b : 4;
- /*0x19*/ u8 rechargeCounter;
+ /*0x18*/ u8 mimickedMoves : 4;
+ /*0x19*/ u8 rechargeTimer;
/*0x1A*/ u8 unk1A[2];
};
-extern struct DisableStruct gDisableStructs[BATTLE_BANKS_COUNT];
+extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
struct ProtectStruct
{
/* field_0 */
u32 protected:1;
u32 endured:1;
- u32 onlyStruggle:1;
+ u32 noValidMoves:1;
u32 helpingHand:1;
u32 bounceMove:1;
u32 stealMove:1;
@@ -295,7 +277,7 @@ struct ProtectStruct
u32 targetNotAffected:1;
u32 chargingTurn:1;
u32 fleeFlag:2; // for RunAway and Smoke Ball
- u32 usedImprisionedMove:1;
+ u32 usedImprisonedMove:1;
u32 loveImmobility:1;
u32 usedDisabledMove:1;
/* field_2 */
@@ -312,45 +294,45 @@ struct ProtectStruct
/* field_4 */ u32 physicalDmg;
/* field_8 */ u32 specialDmg;
- /* field_C */ u8 physicalBank;
- /* field_D */ u8 specialBank;
+ /* field_C */ u8 physicalBattlerId;
+ /* field_D */ u8 specialBattlerId;
/* field_E */ u16 fieldE;
};
-extern struct ProtectStruct gProtectStructs[BATTLE_BANKS_COUNT];
+extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
struct SpecialStatus
{
u8 statLowered : 1; // 0x1
u8 lightningRodRedirected : 1; // 0x2
- u8 restoredBankSprite: 1; // 0x4
- u8 intimidatedPoke : 1; // 0x8
+ u8 restoredBattlerSprite: 1; // 0x4
+ u8 intimidatedMon : 1; // 0x8
u8 traced : 1; // 0x10
- u8 flag20 : 1;
+ u8 ppNotAffectedByPressure : 1;
u8 flag40 : 1;
u8 focusBanded : 1;
u8 field1[3];
- s32 moveturnLostHP;
- s32 moveturnLostHP_physical;
- s32 moveturnLostHP_special;
- u8 moveturnPhysicalBank;
- u8 moveturnSpecialBank;
+ s32 dmg;
+ s32 physicalDmg;
+ s32 specialDmg;
+ u8 physicalBattlerId;
+ u8 specialBattlerId;
u8 field12;
u8 field13;
};
-extern struct SpecialStatus gSpecialStatuses[BATTLE_BANKS_COUNT];
+extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
struct SideTimer
{
/*0x00*/ u8 reflectTimer;
- /*0x01*/ u8 reflectBank;
+ /*0x01*/ u8 reflectBattlerId;
/*0x02*/ u8 lightscreenTimer;
- /*0x03*/ u8 lightscreenBank;
+ /*0x03*/ u8 lightscreenBattlerId;
/*0x04*/ u8 mistTimer;
- /*0x05*/ u8 mistBank;
+ /*0x05*/ u8 mistBattlerId;
/*0x06*/ u8 safeguardTimer;
- /*0x07*/ u8 safeguardBank;
+ /*0x07*/ u8 safeguardBattlerId;
/*0x08*/ u8 followmeTimer;
/*0x09*/ u8 followmeTarget;
/*0x0A*/ u8 spikesAmount;
@@ -361,14 +343,14 @@ extern struct SideTimer gSideTimers[];
struct WishFutureKnock
{
- u8 futureSightCounter[BATTLE_BANKS_COUNT];
- u8 futureSightAttacker[BATTLE_BANKS_COUNT];
- s32 futureSightDmg[BATTLE_BANKS_COUNT];
- u16 futureSightMove[BATTLE_BANKS_COUNT];
- u8 wishCounter[BATTLE_BANKS_COUNT];
- u8 wishUserID[BATTLE_BANKS_COUNT];
+ u8 futureSightCounter[MAX_BATTLERS_COUNT];
+ u8 futureSightAttacker[MAX_BATTLERS_COUNT];
+ s32 futureSightDmg[MAX_BATTLERS_COUNT];
+ u16 futureSightMove[MAX_BATTLERS_COUNT];
+ u8 wishCounter[MAX_BATTLERS_COUNT];
+ u8 wishMonId[MAX_BATTLERS_COUNT];
u8 weatherDuration;
- u8 knockedOffPokes[2];
+ u8 knockedOffMons[2];
};
extern struct WishFutureKnock gWishFutureKnock;
@@ -391,10 +373,6 @@ extern u8 gActiveBattler;
extern u8 gBattlerTarget;
extern u8 gAbsentBattlerFlags;
-// TODO: move these to constants/battle.h
-#define MAX_BATTLERS_COUNT 4
-#define BIT_FLANK 2
-
// script's table id to bit
#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
#define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
@@ -413,6 +391,12 @@ extern u8 gAbsentBattlerFlags;
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
+struct UsedMoves
+{
+ u16 moves[MAX_BATTLERS_COUNT];
+ u16 unknown[MAX_BATTLERS_COUNT];
+};
+
struct BattleHistory
{
/*0x00*/ u16 usedMoves[2][8]; // 0xFFFF means move not used (confuse self hit, etc)
@@ -436,27 +420,22 @@ struct BattleCallbacksStack
struct StatsArray
{
- u16 hp;
- u16 atk;
- u16 def;
- u16 spd;
- u16 spAtk;
- u16 spDef;
+ u16 stats[NUM_STATS];
};
struct BattleResources
{
- struct SecretBaseRecord* secretBase;
- struct UnknownFlags *flags;
- struct BattleScriptsStack* battleScriptsStack;
- struct BattleCallbacksStack* battleCallbackStack;
- struct StatsArray* statsBeforeLvlUp;
+ struct SecretBaseRecord *secretBase;
+ struct ResourceFlags *flags;
+ struct BattleScriptsStack *battleScriptsStack;
+ struct BattleCallbacksStack *battleCallbackStack;
+ struct StatsArray *beforeLvlUp;
struct AI_ThinkingStruct *ai;
struct BattleHistory *battleHistory;
struct BattleScriptsStack *AI_ScriptsStack;
};
-extern struct BattleResources* gBattleResources;
+extern struct BattleResources *gBattleResources;
#define BATTLESCRIPTS_STACK (gBattleResources->battleScriptsStack)
#define BATTLE_CALLBACKS_STACK (gBattleResources->battleCallbackStack)
@@ -467,18 +446,18 @@ struct BattleResults
u8 playerFaintCounter; // 0x0
u8 opponentFaintCounter; // 0x1
u8 playerSwitchesCounter; // 0x2
- u8 unk3; // 0x3
- u8 unk4; // 0x4
- u8 unk5_0:1; // 0x5
+ u8 numHealingItemsUsed; // 0x3
+ u8 numRevivesUsed; // 0x4
+ u8 playerMonWasDamaged:1; // 0x5
u8 usedMasterBall:1; // 0x5
u8 caughtMonBall:4; // 0x5
- u8 unk5_6:1; // 0x5
+ u8 shinyWildMon:1; // 0x5
u8 unk5_7:1; // 0x5
u16 playerMon1Species; // 0x6
u8 playerMon1Name[11]; // 0x8
u8 battleTurnCounter; // 0x13
u8 playerMon2Name[11]; // 0x14
- u8 field_1F; // 0x1F
+ u8 pokeblockThrows; // 0x1F
u16 lastOpponentSpecies; // 0x20
u16 lastUsedMovePlayer; // 0x22
u16 lastUsedMoveOpponent; // 0x24
@@ -494,39 +473,31 @@ extern struct BattleResults gBattleResults;
struct BattleStruct
{
u8 turnEffectsTracker;
- u8 turnEffectsBank;
+ u8 turnEffectsBattlerId;
u8 filler2;
- u8 turncountersTracker;
- u8 wrappedMove[8]; // ask gamefreak why they declared it that way
- u8 moveTarget[4];
- u8 expGetterId;
+ u8 turnCountersTracker;
+ u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access.
+ u8 moveTarget[MAX_BATTLERS_COUNT];
+ u8 expGetterMonId;
u8 field_11;
u8 wildVictorySong;
u8 dynamicMoveType;
u8 wrappedBy[4];
- u16 assistPossibleMoves[5 * 4]; // 5 mons, each of them knowing 4 moves
- u8 field_40;
- u8 field_41;
- u8 field_42;
- u8 field_43;
- u8 field_44;
- u8 field_45;
- u8 field_46;
- u8 field_47;
- u8 focusPunchBank;
+ u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // 6 mons, each of them knowing 4 moves
+ u8 focusPunchBattlerId;
u8 battlerPreventingSwitchout;
u8 moneyMultiplier;
u8 savedTurnActionNumber;
u8 switchInAbilitiesCounter;
u8 faintedActionsState;
- u8 faintedActionsBank;
+ u8 faintedActionsBattlerId;
u8 field_4F;
u16 expValue;
u8 field_52;
u8 sentInPokes;
- bool8 selectionScriptFinished[BATTLE_BANKS_COUNT];
+ bool8 selectionScriptFinished[MAX_BATTLERS_COUNT];
u8 field_58[4];
- u8 monToSwitchIntoId[BATTLE_BANKS_COUNT];
+ u8 monToSwitchIntoId[MAX_BATTLERS_COUNT];
u8 field_60[4][3];
u8 runTries;
u8 caughtMonNick[11];
@@ -535,11 +506,11 @@ struct BattleStruct
u8 safariPkblThrowCounter;
u8 safariEscapeFactor;
u8 safariCatchFactor;
- u8 field_7D;
- u8 field_7E;
+ u8 linkBattleVsSpriteId_V;
+ u8 linkBattleVsSpriteId_S;
u8 formToChangeInto;
- u8 chosenMovePositions[BATTLE_BANKS_COUNT];
- u8 stateIdAfterSelScript[BATTLE_BANKS_COUNT];
+ u8 chosenMovePositions[MAX_BATTLERS_COUNT];
+ u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT];
u8 field_88;
u8 field_89;
u8 field_8A;
@@ -547,69 +518,48 @@ 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 mirrorMoves[8]; // ask gamefreak why they declared it that way
- u8 field_A0;
- u8 field_A1;
- u8 field_A2;
- u8 field_A3;
- u8 field_A4;
- u8 field_A5;
- u8 field_A6;
- u8 field_A7;
+ 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];
- u32 savedBattleTypeFlags;
u8 abilityPreventingSwitchout;
u8 hpScale;
- u8 synchronizeMoveEffect;
+ u8 field_AE;
+ u8 field_AF;
+ u8 field_B0;
+ u8 field_B1;
+ u8 field_B2;
u8 field_B3;
- u8 field_B4;
+ u8 synchronizeMoveEffect;
u8 field_B5;
u8 field_B6;
- u8 field_B7;
- // void (*savedCallback)(void);
- u16 usedHeldItems[BATTLE_BANKS_COUNT];
+ u8 atkCancellerTracker;
+ u16 usedHeldItems[MAX_BATTLERS_COUNT];
u8 chosenItem[4]; // why is this an u8?
u8 AI_itemType[2];
u8 AI_itemFlags[2];
- u16 choicedMove[BATTLE_BANKS_COUNT];
- u16 changedItems[BATTLE_BANKS_COUNT];
- u8 intimidateBank;
+ u16 choicedMove[MAX_BATTLERS_COUNT];
+ u16 changedItems[MAX_BATTLERS_COUNT];
+ u8 intimidateBattler;
u8 switchInItemsCounter;
- u8 field_DA;
+ u8 arenaTurnCounter; // not used in FR?
u8 turnSideTracker;
u8 fillerDC[0xDF-0xDC];
- u8 field_DF;
- u8 mirrorMoveArrays[32];
- u16 castformPalette[BATTLE_BANKS_COUNT][16];
- u8 field_180;
- u8 field_181;
+ u8 givenExpMons;
+ u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2];
+ u16 castformPalette[MAX_BATTLERS_COUNT][16];
+ u8 wishPerishSongState;
+ u8 wishPerishSongBattlerId;
u8 field_182;
u8 field_183;
- struct BattleEnigmaBerry battleEnigmaBerry;
- u8 wishPerishSongState;
- u8 wishPerishSongBank;
- bool8 overworldWeatherDone;
- u8 atkCancellerTracker;
- u8 field_1A4[96];
- u8 field_204[104];
- u8 field_26C[40];
- u8 AI_monToSwitchIntoId[BATTLE_BANKS_COUNT];
- u8 field_298[8];
- u8 field_2A0;
- u8 field_2A1;
- u8 field_2A2;
-};
+ u8 field_184[124]; // currently unknown
+}; // size == 0x200 bytes
-extern struct BattleStruct* gBattleStruct;
+extern struct BattleStruct *gBattleStruct;
#define GET_MOVE_TYPE(move, typeArg) \
{ \
@@ -621,6 +571,13 @@ extern struct BattleStruct* gBattleStruct;
#define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
#define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
+#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0))
+#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type))
+#define SET_BATTLER_TYPE(battlerId, type) \
+{ \
+ gBattleMons[battlerId].type1 = type; \
+ gBattleMons[battlerId].type2 = type; \
+}
#define MOVE_EFFECT_SLEEP 0x1
#define MOVE_EFFECT_POISON 0x2
@@ -688,53 +645,8 @@ extern struct BattleStruct* gBattleStruct;
#define MOVE_EFFECT_AFFECTS_USER 0x40
#define MOVE_EFFECT_CERTAIN 0x80
-// table ids for general animations
-#define B_ANIM_CASTFORM_CHANGE 0x0
-#define B_ANIM_STATS_CHANGE 0x1
-#define B_ANIM_SUBSTITUTE_FADE 0x2
-#define B_ANIM_SUBSTITUTE_APPEAR 0x3
-#define B_ANIM_x4 0x4
-#define B_ANIM_ITEM_KNOCKOFF 0x5
-#define B_ANIM_TURN_TRAP 0x6
-#define B_ANIM_ITEM_EFFECT 0x7
-#define B_ANIM_SMOKEBALL_ESCAPE 0x8
-#define B_ANIM_HANGED_ON 0x9
-#define B_ANIM_RAIN_CONTINUES 0xA
-#define B_ANIM_SUN_CONTINUES 0xB
-#define B_ANIM_SANDSTORM_CONTINUES 0xC
-#define B_ANIM_HAIL_CONTINUES 0xD
-#define B_ANIM_LEECH_SEED_DRAIN 0xE
-#define B_ANIM_MON_HIT 0xF
-#define B_ANIM_ITEM_STEAL 0x10
-#define B_ANIM_SNATCH_MOVE 0x11
-#define B_ANIM_FUTURE_SIGHT_HIT 0x12
-#define B_ANIM_DOOM_DESIRE_HIT 0x13
-#define B_ANIM_x14 0x14
-#define B_ANIM_INGRAIN_HEAL 0x15
-#define B_ANIM_WISH_HEAL 0x16
-
-// special animations table
-#define B_ANIM_LVL_UP 0x0
-#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1
-#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2
-#define B_ANIM_BALL_THROW 0x3
-#define B_ANIM_SAFARI_BALL_THROW 0x4
-#define B_ANIM_SUBSTITUTE_TO_MON 0x5
-#define B_ANIM_MON_TO_SUBSTITUTE 0x6
-
-// status animation table
-#define B_ANIM_STATUS_PSN 0x0
-#define B_ANIM_STATUS_CONFUSION 0x1
-#define B_ANIM_STATUS_BRN 0x2
-#define B_ANIM_STATUS_INFATUATION 0x3
-#define B_ANIM_STATUS_SLP 0x4
-#define B_ANIM_STATUS_PRZ 0x5
-#define B_ANIM_STATUS_FRZ 0x6
-#define B_ANIM_STATUS_CURSED 0x7
-#define B_ANIM_STATUS_NIGHTMARE 0x8
-#define B_ANIM_STATUS_WRAPPED 0x9
-
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
+#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0))
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
@@ -779,13 +691,13 @@ struct BattleScripting
u8 animArg2;
u16 tripleKickPower;
u8 atk49_state;
- u8 bankWithAbility;
+ u8 battlerWithAbility;
u8 multihitMoveEffect;
- u8 bank;
+ u8 battler;
u8 animTurn;
u8 animTargetsHit;
u8 statChanger;
- u8 field_1B;
+ bool8 statAnimPlayed;
u8 atk23_state;
u8 battleStyle;
u8 atk6C_state;
@@ -794,12 +706,8 @@ struct BattleScripting
u8 reshowMainState;
u8 reshowHelperState;
u8 field_23;
- u8 field_24;
- u8 multiplayerId;
};
-extern struct BattleScripting gBattleScripting;
-
// functions
// battle_1
@@ -809,6 +717,7 @@ void ApplyPlayerChosenFrameToBattleMenu(void);
bool8 LoadChosenBattleElement(u8 caseId);
void DrawMainBattleBackground(void);
void task00_0800F6FC(u8 taskId);
+void sub_800F324(void);
enum
{
@@ -863,24 +772,23 @@ struct BattleAnimationInfo
struct BattleHealthboxInfo
{
- u8 flag_x1 : 1;
- u8 flag_x2 : 1;
- u8 flag_x4 : 1;
+ u8 partyStatusSummaryShown : 1;
+ u8 healthboxIsBouncing : 1;
+ u8 battlerIsBouncing : 1;
u8 ballAnimActive : 1; // 0x8
u8 statusAnimActive : 1; // x10
u8 animFromTableActive : 1; // x20
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 field_2;
- u8 field_3;
+ u8 healthboxBounceSpriteId;
+ u8 battlerBounceSpriteId;
u8 animationState;
u8 field_5;
- u8 field_6;
+ u8 matrixNum;
u8 shadowSpriteId;
u8 field_8;
u8 field_9;
@@ -892,14 +800,14 @@ struct BattleBarInfo
{
u8 healthboxSpriteId;
s32 maxValue;
- s32 currentValue;
+ s32 oldValue;
s32 receivedValue;
- s32 field_10;
+ s32 currValue;
};
struct BattleSpriteData
{
- struct BattleSpriteInfo *bankData;
+ struct BattleSpriteInfo *battlerData;
struct BattleHealthboxInfo *healthBoxesData;
struct BattleAnimationInfo *animationData;
struct BattleBarInfo *battleBars;
@@ -931,16 +839,30 @@ struct MonSpritesGfx
void *field_17C;
};
-extern struct BattleSpritesGfx* gMonSpritesGfx;
+extern u16 gBattle_BG0_X;
+extern u16 gBattle_BG0_Y;
+extern u16 gBattle_BG1_X;
+extern u16 gBattle_BG1_Y;
+extern u16 gBattle_BG2_X;
+extern u16 gBattle_BG2_Y;
+extern u16 gBattle_BG3_X;
+extern u16 gBattle_BG3_Y;
+extern u16 gBattle_WIN0H;
+extern u16 gBattle_WIN0V;
+extern u16 gBattle_WIN1H;
+extern u16 gBattle_WIN1V;
+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;
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
extern u16 gCurrentMove;
+extern u16 gChosenMove;
+extern u16 gCalledMove;
extern u8 gCritMultiplier;
extern u16 gBattleWeather;
extern u8 gLastUsedAbility;
@@ -949,8 +871,66 @@ extern u8 gPotentialItemEffectBattler;
extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
extern s32 gBattleMoveDamage;
-
+extern u16 gIntroSlideFlags;
+extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
+extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
+extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
extern u8 gBattleOutcome;
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
+extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
+extern u32 gBattleControllerExecFlags;
+extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
+extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
+extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
+extern void (*gPreBattleCallback1)(void);
+extern bool8 gDoingBattleAnim;
+extern void *gUnknown_3005EE0[];
+extern u8 *gUnknown_2022BB8;
+extern u8 *gUnknown_2022BBC;
+extern void (*gBattleMainFunc)(void);
+extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
+extern u32 gUnknown_2022B54;
+extern u8 gUnknown_2023DDC;
+extern u8 gBattlerAttacker;
+extern u8 gEffectBattler;
+extern u8 gMultiHitCounter;
+extern struct BattleScripting gBattleScripting;
+extern u8 gBattlerFainted;
+extern u32 gStatuses3[MAX_BATTLERS_COUNT];
+extern u8 gSentPokesToOpponent[2];
+extern const u8 *gBattlescriptCurrInstr;
+extern const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT];
+extern u16 gLastMoves[MAX_BATTLERS_COUNT];
+extern u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT];
+extern u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT];
+extern u16 gSideStatuses[2];
+extern u32 gHitMarker;
+extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
+extern u8 gMoveResultFlags;
+extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
+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];
+extern u16 gDynamicBasePower;
+extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
+extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
+extern u8 gMultiUsePlayerCursor;
+extern u8 gNumberOfMovesToChoose;
+extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
+extern s32 gHpDealt;
+extern u16 gPauseCounterBattle;
+extern u16 gPaydayMoney;
+extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
+extern u8 gCurrentTurnActionNumber;
+extern u16 gExpShareExp;
+extern u8 gLeveledUpInBattle;
+extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
+extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
+extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
+extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
+extern u8 gBattleTerrain;
#endif // GUARD_BATTLE_H
diff --git a/include/battle_ai_script_commands.h b/include/battle_ai_script_commands.h
index 3786d4a8c..94cbcce15 100644
--- a/include/battle_ai_script_commands.h
+++ b/include/battle_ai_script_commands.h
@@ -3,15 +3,19 @@
#include "global.h"
-extern u8 sBattler_AI;
+// return values for BattleAI_ChooseMoveOrAction
+// 0 - 3 are move idx
+#define AI_CHOICE_FLEE 4
+#define AI_CHOICE_WATCH 5
-void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves);
-void BattleAI_SetupAIData(u8 defaultScoreMoves);
+void BattleAI_HandleItemUseBeforeAISetup(void);
+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_ChooseMoveOrAction(void);
#endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 5929a318e..3536e89f4 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -19,28 +19,28 @@ enum
{
BG_ANIM_SCREEN_SIZE,
BG_ANIM_AREA_OVERFLOW_MODE,
- BG_ANIM2,
- BG_ANIM3,
+ BG_ANIM_MOSAIC,
+ BG_ANIM_CHAR_BASE_BLOCK,
BG_ANIM_PRIORITY,
- BG_ANIM_5,
- BG_ANIM_6
+ BG_ANIM_PALETTES_MODE,
+ BG_ANIM_SCREEN_BASE_BLOCK
};
-struct UnknownAnimStruct2
+struct BattleAnimBgData
{
- void *unk0;
- u16 *unk4;
- u8 unk8;
- u8 unk9;
- u16 unkA;
- u16 unkC;
+ u8 *bgTiles;
+ u16 *bgTilemap;
+ u8 paletteId;
+ u8 bgId;
+ u16 tilesOffset;
+ u16 unused;
};
struct BattleAnimBackground
{
- void *image;
- void *palette;
- void *tilemap;
+ const u32 *image;
+ const u32 *palette;
+ const u32 *tilemap;
};
#define ANIM_ARGS_COUNT 8
@@ -53,7 +53,6 @@ extern bool8 gAnimScriptActive;
extern u8 gAnimVisualTaskCount;
extern u8 gAnimSoundTaskCount;
extern struct DisableStruct *gAnimDisableStructPtr;
-extern u32 gAnimMoveDmg;
extern u16 gAnimMovePower;
extern u8 gAnimFriendship;
extern u16 gWeatherMoveAnim;
@@ -64,8 +63,8 @@ extern u8 gBattleAnimTarget;
extern u16 gAnimSpeciesByBanks[BATTLE_BANKS_COUNT];
extern u8 gUnknown_02038440;
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u16 gUnknown_2037EEC;
-extern s32 gUnknown_2037EE8;
+extern u16 gAnimMovePower;
+extern s32 gAnimMoveDmg;
void ClearBattleAnimationVars(void);
void DoMoveAnim(u16 move);
@@ -80,7 +79,7 @@ s8 BattleAnimAdjustPanning(s8 pan);
s8 BattleAnimAdjustPanning2(s8 pan);
s16 sub_80A52EC(s16 a);
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
-bool8 sub_8072DF0(u8 battlerId);
+bool8 IsBattlerSpriteVisible(u8 battlerId);
// battle_anim_80FE840.s
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
@@ -92,18 +91,35 @@ void sub_80A6EEC(struct Sprite *sprite);
void sub_80A68D4(struct Sprite *sprite);
void sub_80A6F3C(struct Sprite *sprite);
void sub_80A8278(void);
-void sub_80A6B30(struct UnknownAnimStruct2*);
-void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1);
+void sub_80A6B30(struct BattleAnimBgData *);
+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
{
- BANK_X_POS,
- BANK_Y_POS,
+ BATTLER_COORD_X,
+ BATTLER_COORD_Y,
+ BATTLER_COORD_X_2,
+ BATTLER_COORD_Y_PIC_OFFSET,
+ BATTLER_COORD_Y_PIC_OFFSET_DEFAULT,
};
-u8 GetBankPosition(u8 bank, u8 attributeId);
+enum
+{
+ BATTLER_COORD_ATTR_HEIGHT,
+ BATTLER_COORD_ATTR_WIDTH,
+ BATTLER_COORD_ATTR_TOP,
+ BATTLER_COORD_ATTR_BOTTOM,
+ BATTLER_COORD_ATTR_LEFT,
+ BATTLER_COORD_ATTR_RIGHT,
+ BATTLER_COORD_ATTR_RAW_BOTTOM,
+};
+
+u8 GetBattlerSpriteCoord(u8 bank, u8 attributeId);
bool8 IsBankSpritePresent(u8 bank);
void sub_80A6C68(u8 arg0);
@@ -112,12 +128,23 @@ 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);
-u8 GetBankSpriteDefault_Y(u8 bank);
+void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite);
+u8 GetBattlerSpriteDefault_Y(u8 bank);
u8 sub_80A82E4(u8 bank);
u8 GetSubstituteSpriteDefault_Y(u8 bank);
+u8 GetGhostSpriteDefault_Y(u8 battlerId);
+void sub_8072E48(u8 battlerId, u8);
+void sub_8073128(u8);
// battle_anim_80A9C70.s
+#define STAT_ANIM_PLUS1 15
+#define STAT_ANIM_PLUS2 39
+#define STAT_ANIM_MINUS1 22
+#define STAT_ANIM_MINUS2 46
+#define STAT_ANIM_MULTIPLE_PLUS1 55
+#define STAT_ANIM_MULTIPLE_PLUS2 56
+#define STAT_ANIM_MULTIPLE_MINUS1 57
+#define STAT_ANIM_MULTIPLE_MINUS2 58
void LaunchStatusAnimation(u8 bank, u8 statusAnimId);
// battle_anim_8170478.s
@@ -126,13 +153,33 @@ u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId);
// battle_anim_mons.s
-void sub_8074DC4(struct Sprite * sprite);
-void sub_8074E14(struct Sprite * sprite);
-void sub_80754B8(struct Sprite * sprite);
-void sub_80758E0(u8 spriteId, u8 b);
-void sub_8075980(u8 spriteId);
-void obj_id_set_rotscale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation);
-bool8 sub_8073788(void);
+void TranslateMonSpriteLinear(struct Sprite * sprite);
+void TranslateMonSpriteLinearFixedPoint(struct Sprite * sprite);
+void InitSpriteDataForLinearTranslation(struct Sprite * sprite);
+void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 b);
+void ResetSpriteRotScale(u8 spriteId);
+void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation);
+bool8 IsContest(void);
void sub_80759DC(u8 spriteId);
+bool8 IsBattlerSpritePresent(u8 battlerId);
+u8 GetBattlerSpriteSubpriority(u8 battlerId);
+void StartAnimLinearTranslation(struct Sprite *sprite);
+void sub_80755B8(struct Sprite *sprite);
+u8 sub_80768B0(u8 battlerId);
+
+// battle_anim_mon_movement.c
+void AnimTask_ShakeMon(u8 taskId);
+void AnimTask_ShakeMon2(u8 taskId);
+void AnimTask_ShakeMonInPlace(u8 taskId);
+void AnimTask_ShakeAndSinkMon(u8 taskId);
+void AnimTask_TranslateMonElliptical(u8 taskId);
+void AnimTask_TranslateMonEllipticalRespectSide(u8 taskId);
+void AnimTask_WindUpLunge(u8 taskId);
+void sub_80995FC(u8 taskId);
+void AnimTask_SwayMon(u8 taskId);
+void AnimTask_ScaleMonAndRestore(u8 taskId);
+void sub_8099980(u8 taskId);
+void sub_8099A78(u8 taskId);
+void sub_8099BD4(u8 taskId);
#endif // GUARD_BATTLE_ANIM_H
diff --git a/include/battle_bg.h b/include/battle_bg.h
new file mode 100644
index 000000000..6bf90a104
--- /dev/null
+++ b/include/battle_bg.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_BATTLE_BG_H
+#define GUARD_BATTLE_BG_H
+
+void sub_800F34C(void);
+
+#endif // GUARD_BATTLE_BG_H
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index df00c3526..6da4ca240 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -77,10 +77,14 @@ enum
#define BALL_3_SHAKES_FAIL 3
#define BALL_3_SHAKES_SUCCESS 4
#define BALL_TRAINER_BLOCK 5
+#define BALL_GHOST_DODGE 6
#define RET_VALUE_LEVELLED_UP 11
-#define INSTANT_HP_BAR_DROP 32767
+#define INSTANT_HP_BAR_DROP 0x7FFF
+
+// Special return values in gBattleBufferB from Battle Controller functions.
+#define RET_VALUE_LEVELED_UP 11
struct UnusedControllerStruct
{
@@ -162,8 +166,8 @@ enum
CONTROLLER_INTROSLIDE,
CONTROLLER_INTROTRAINERBALLTHROW,
CONTROLLER_DRAWPARTYSTATUSSUMMARY,
- CONTROLLER_49,
- CONTROLLER_50,
+ CONTROLLER_HIDEPARTYSTATUSSUMMARY,
+ CONTROLLER_ENDBOUNCE,
CONTROLLER_SPRITEINVISIBILITY,
CONTROLLER_BATTLEANIMATION,
CONTROLLER_LINKSTANDBYMSG,
@@ -174,90 +178,80 @@ enum
CONTROLLER_CMDS_COUNT
};
+extern struct UnusedControllerStruct gUnknown_2022870;
// general functions
void HandleLinkBattleSetup(void);
-void SetUpBattleVarsAndBirchZigzagoon(void);
-void sub_8032768(void);
-void sub_8033648(void);
+void SetUpBattleVars(void);
+void sub_800D30C(void);
+void sub_800DD28(void);
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
// emitters
void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck);
-void EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes); // unused
-void EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data);
-void EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data); // unused
-void EmitLoadMonSprite(u8 bufferId);
-void EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit);
-void EmitReturnMonToBall(u8 bufferId, u8 arg1);
-void EmitDrawTrainerPic(u8 bufferId);
-void EmitTrainerSlide(u8 bufferId);
-void EmitTrainerSlideBack(u8 bufferId);
-void EmitFaintAnimation(u8 bufferId);
-void EmitPaletteFade(u8 bufferId); // unused
-void EmitSuccessBallThrowAnim(u8 bufferId); // unused
-void EmitBallThrowAnim(u8 bufferId, u8 caseId);
-void EmitPause(u8 bufferId, u8 toWait, void *data); // unused
-void EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit);
-void EmitPrintString(u8 bufferId, u16 stringId);
-void EmitPrintSelectionString(u8 bufferId, u16 stringId);
-void EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
-void EmitUnknownYesNoBox(u8 bufferId);
-void EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
-void EmitChooseItem(u8 bufferId, u8* arg1);
-void EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
-void EmitCmd23(u8 bufferId); // unused
-void EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
-void EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
-void EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2);
-void EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status);
-void EmitStatusXor(u8 bufferId, u8 b); // unused
-void EmitDataTransfer(u8 bufferId, u16 size, void *data);
-void EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data); // unused
-void EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter); // unused
-void EmitCmd32(u8 bufferId, u16 size, void *c); // unused
-void EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2);
-void EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c);
-void EmitOneReturnValue(u8 bufferId, u16 arg1);
-void EmitOneReturnValue_Duplicate(u8 bufferId, u16 b);
-void EmitCmd37(u8 bufferId); // unused
-void EmitCmd38(u8 bufferId, u8 b); // unused
-void EmitCmd39(u8 bufferId); // unused
-void EmitCmd40(u8 bufferId); // unused
-void EmitHitAnimation(u8 bufferId);
-void EmitCmd42(u8 bufferId);
-void EmitPlaySE(u8 bufferId, u16 songId);
-void EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM);
-void EmitFaintingCry(u8 bufferId);
-void EmitIntroSlide(u8 bufferId, u8 terrainId);
-void EmitIntroTrainerBallThrow(u8 bufferId);
-void EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
-void EmitCmd49(u8 bufferId);
-void EmitCmd50(u8 bufferId);
-void EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
-void EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
-void EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2);
-void EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
-void EmitCmd55(u8 bufferId, u8 arg1);
+void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data);
+void BtlController_EmitLoadMonSprite(u8 bufferId);
+void BtlController_EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit);
+void BtlController_EmitReturnMonToBall(u8 bufferId, u8 arg1);
+void BtlController_EmitDrawTrainerPic(u8 bufferId);
+void BtlController_EmitTrainerSlide(u8 bufferId);
+void BtlController_EmitTrainerSlideBack(u8 bufferId);
+void BtlController_EmitFaintAnimation(u8 bufferId);
+void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId);
+void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr);
+void BtlController_EmitPrintString(u8 bufferId, u16 stringId);
+void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId);
+void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
+void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
+void BtlController_EmitChooseItem(u8 bufferId, u8* arg1);
+void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
+void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
+void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
+void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2);
+void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status);
+void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data);
+void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2);
+void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c);
+void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1);
+void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b);
+void BtlController_EmitHitAnimation(u8 bufferId);
+void BtlController_EmitCmd42(u8 bufferId);
+void BtlController_EmitPlaySE(u8 bufferId, u16 songId);
+void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId);
+void BtlController_EmitFaintingCry(u8 bufferId);
+void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId);
+void BtlController_EmitIntroTrainerBallThrow(u8 bufferId);
+void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
+void BtlController_EmitHidePartyStatusSummary(u8 bufferId);
+void BtlController_EmitEndBounceEffect(u8 bufferId);
+void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
+void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
+void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1);
+void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
+void BtlController_EmitCmd55(u8 bufferId, u8 arg1);
// player controller
+void nullsub_13(void);
void SetControllerToPlayer(void);
-void nullsub_21(void);
void PlayerHandleGetRawMonData(void);
-void sub_80587B0(void);
-void sub_805CC00(struct Sprite *sprite);
+void sub_80335F8(struct Sprite *sprite);
void SetCB2ToReshowScreenAfterMenu(void);
void SetCB2ToReshowScreenAfterMenu2(void);
void c3_0802FDF4(u8 taskId);
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
void ActionSelectionDestroyCursorAt(u8 cursorPos);
void InitMoveSelectionsVarsAndStrings(void);
+void sub_802F6A8(void);
+void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1);
+void MoveSelectionDestroyCursorAt(u8 cursorPos);
+void HandleInputChooseMove(void);
// recorded player controller
void SetControllerToRecordedPlayer(void);
// opponent controller
void SetControllerToOpponent(void);
+void OpponentBufferExecCompleted(void);
// player partner controller
void SetControllerToPlayerPartner(void);
@@ -265,11 +259,17 @@ void SetControllerToPlayerPartner(void);
// safari controller
void SetControllerToSafari(void);
-// wally controller
-void SetControllerToWally(void);
+// pokedude controller
+void SetControllerToPokedude(void);
-// recorded opponent controller
-void SetControllerToRecordedOpponent(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);
+void sub_80E7988(void);
// link opponent
void SetControllerToLinkOpponent(void);
diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h
index 313a29811..667686af8 100644
--- a/include/battle_gfx_sfx_util.h
+++ b/include/battle_gfx_sfx_util.h
@@ -1,50 +1,45 @@
-#ifndef GUARD_BATTLE_GFX_SFX_UTIL
-#define GUARD_BATTLE_GFX_SFX_UTIL
+#ifndef GUARD_BATTLE_GFX_SFX_UTIL_H
+#define GUARD_BATTLE_GFX_SFX_UTIL_H
void AllocateBattleSpritesData(void);
void FreeBattleSpritesData(void);
-u16 ChooseMoveAndTargetInBattlePalace(void);
-void sub_805D714(struct Sprite *sprite);
-void sub_805D770(struct Sprite *sprite, bool8 arg1);
-void sub_805D7AC(struct Sprite *sprite);
+void sub_8033E3C(struct Sprite *sprite);
+void sub_8033EEC(struct Sprite *sprite);
void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status);
-bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId, u16 argument);
-void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId);
+bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId, u16 argument);
+void InitAndLaunchSpecialAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId);
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
-bool8 mplay_80342A4(u8 bank);
-void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank);
-void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank);
-void nullsub_23(void);
-void nullsub_24(u16 species);
-void DecompressTrainerFrontPic(u16 frontPicId, u8 bank);
-void DecompressTrainerBackPic(u16 backPicId, u8 bank);
-void nullsub_25(u8 arg0);
-void FreeTrainerFrontPicPalette(u16 frontPicId);
-void sub_805DFFC(void);
+bool8 mplay_80342A4(u8 battlerId);
+void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
+void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
+void DecompressGhostFrontPic(struct Pokemon *unused, u8 battlerId);
+void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
+void DecompressTrainerBackPalette(u16 a1, u8 a2);
+void nullsub_16(u8 a1);
+void FreeTrainerFrontPicPaletteAndTile(u16 frontPicId);
bool8 BattleLoadAllHealthBoxesGfx(u8 state);
void LoadBattleBarGfx(u8 arg0);
-bool8 BattleInitAllSprites(u8 *state1, u8 *bank);
+bool8 BattleInitAllSprites(u8 *state, u8 *battlerId);
void ClearSpritesHealthboxAnimData(void);
void CopyAllBattleSpritesInvisibilities(void);
-void CopyBattleSpriteInvisibility(u8 bank);
-void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform);
-void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite);
-void LoadBattleMonGfxAndAnimate(u8 bank, bool8 loadMonSprite, u8 spriteId);
-void TrySetBehindSubstituteSpriteBit(u8 bank, u16 move);
-void ClearBehindSubstituteBit(u8 bank);
-void HandleLowHpMusicChange(struct Pokemon *mon, u8 bank);
+void CopyBattleSpriteInvisibility(u8 battlerId);
+void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 notTransform);
+void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite);
+void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId);
+void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move);
+void ClearBehindSubstituteBit(u8 battlerId);
+void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId);
void BattleStopLowHpSound(void);
-u8 GetMonHPBarLevel(struct Pokemon *mon);
-void sub_805EAE8(void);
-void sub_805EB9C(u8 affineMode);
+void HandleBattleLowHpMusicChange(void);
+void sub_8035450(u8 affineMode);
void LoadAndCreateEnemyShadowSprites(void);
void SpriteCB_SetInvisible(struct Sprite *sprite);
-void SetBankEnemyShadowSpriteCallback(u8 bank, u16 species);
-void EnemyShadowCallbackToSetInvisible(u8 bank);
-void sub_805EF14(void);
-void ClearTemporarySpeciesSpriteData(u8 bank, bool8 dontClearSubstitute);
+void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species);
+void HideBattlerShadowSprite(u8 battlerId);
+void sub_80357C8(void);
+void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute);
void AllocateMonSpritesGfx(void);
void FreeMonSpritesGfx(void);
bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon);
-#endif // GUARD_BATTLE_GFX_SFX_UTIL
+#endif // GUARD_BATTLE_GFX_SFX_UTIL_H
diff --git a/include/battle_interface.h b/include/battle_interface.h
index 27f93a3c2..162faa8cb 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -30,12 +30,18 @@ enum
#define TAG_HEALTHBOX_OPPONENT1_TILE 0xD701
#define TAG_HEALTHBOX_OPPONENT2_TILE 0xD702
+#define TAG_HEALTHBAR_PLAYER1_TILE 0xD704
+#define TAG_HEALTHBAR_OPPONENT1_TILE 0xD705
+#define TAG_HEALTHBAR_PLAYER2_TILE 0xD706
+#define TAG_HEALTHBAR_OPPONENT2_TILE 0xD707
+
#define TAG_HEALTHBOX_SAFARI_TILE 0xD70B
#define TAG_STATUS_SUMMARY_BAR_TILE 0xD70C
#define TAG_STATUS_SUMMARY_BALLS_TILE 0xD714
#define TAG_HEALTHBOX_PAL 0xD6FF
+#define TAG_HEALTHBAR_PAL 0xD704
#define TAG_STATUS_SUMMARY_BAR_PAL 0xD710
#define TAG_STATUS_SUMMARY_BALLS_PAL 0xD712
@@ -55,7 +61,8 @@ enum
HEALTHBOX_SAFARI_BALLS_TEXT
};
-u8 CreateBankHealthboxSprites(u8 bank);
+void Task_HidePartyStatusSummary(u8 taskId);
+u8 CreateBattlerHealthboxSprites(u8 bank);
u8 CreateSafariPlayerHealthboxSprites(void);
void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue);
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId);
@@ -63,7 +70,7 @@ void SetHealthboxSpriteVisible(u8 healthboxSpriteId);
void DestoryHealthboxSprite(u8 healthboxSpriteId);
void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly);
void UpdateOamPriorityInAllHealthboxes(u8 priority);
-void SetBankHealthboxSpritePos(u8 bank);
+void InitBattlerHealthboxCoords(u8 bank);
void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
void SwapHpBarsWithHpText(void);
u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart);
@@ -72,5 +79,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
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_2.h b/include/battle_main.h
index 02050afd9..27aae9970 100644
--- a/include/battle_2.h
+++ b/include/battle_main.h
@@ -1,8 +1,47 @@
-#ifndef GUARD_BATTLE_2_H
-#define GUARD_BATTLE_2_H
+#ifndef GUARD_BATTLE_MAIN_H
+#define GUARD_BATTLE_MAIN_H
-#include "global.h"
-#include "sprite.h"
+struct TrainerMoney
+{
+ u8 classId;
+ u8 value;
+};
+
+struct UnknownPokemonStruct4
+{
+ /*0x00*/ u16 species;
+ /*0x02*/ u16 heldItem;
+ /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x0F*/ u8 level;
+ /*0x10*/ u16 hp;
+ /*0x12*/ u16 maxhp;
+ /*0x14*/ u32 status;
+ /*0x18*/ u32 personality;
+ /*0x1C*/ u8 gender;
+ /*0x1D*/ u8 language;
+};
+
+#define TYPE_NAME_LENGTH 6
+#define ABILITY_NAME_LENGTH 12
+
+// defines for the u8 array gTypeEffectiveness
+#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
+#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
+#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
+
+// defines for the gTypeEffectiveness multipliers
+#define TYPE_MUL_NO_EFFECT 0
+#define TYPE_MUL_NOT_EFFECTIVE 5
+#define TYPE_MUL_NORMAL 10
+#define TYPE_MUL_SUPER_EFFECTIVE 20
+
+// special type table Ids
+#define TYPE_FORESIGHT 0xFE
+#define TYPE_ENDTABLE 0xFF
+
+// defines for the 'DoBounceEffect' function
+#define BOUNCE_MON 0x0
+#define BOUNCE_HEALTHBOX 0x1
void CB2_InitBattle(void);
void BattleMainCB2(void);
@@ -10,27 +49,25 @@ 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);
+void sub_8011A1C(void);
u32 sub_80391E0(u8 arrayId, u8 caseId);
u32 sub_80397C4(u32 setId, u32 tableId);
void oac_poke_opponent(struct Sprite *sprite);
void SpriteCallbackDummy_2(struct Sprite *sprite);
void sub_8039934(struct Sprite *sprite);
-void sub_8039AD8(struct Sprite *sprite);
-void sub_8039B2C(struct Sprite *sprite);
+void sub_8012098(struct Sprite *sprite);
+void sub_8012044(struct Sprite *sprite);
void sub_8039B58(struct Sprite *sprite);
void sub_8039BB4(struct Sprite *sprite);
void sub_80105DC(struct Sprite *sprite);
-void sub_8039C00(struct Sprite *sprite);
-void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d);
-void dp11b_obj_free(u8 bank, bool8 b);
+void sub_8012110(struct Sprite *sprite);
+void DoBounceEffect(u8 bank, u8 b, s8 c, s8 d);
+void EndBounceEffect(u8 bank, bool8 b);
void sub_8039E44(struct Sprite *sprite);
void sub_8039E60(struct Sprite *sprite);
void sub_8039E84(struct Sprite *sprite);
void sub_8039E9C(struct Sprite *sprite);
-void nullsub_20(void);
void BeginBattleIntro(void);
void SwitchInClearSetData(void);
void FaintClearSetData(void);
@@ -38,7 +75,7 @@ void sub_803B3AC(void); // unused
void sub_803B598(void); // unused
void BattleTurnPassed(void);
u8 IsRunningFromBattleImpossible(void);
-void sub_803BDA0(u8 bank);
+void sub_8013F6C(u8 battlerId);
void SwapTurnOrder(u8 id1, u8 id2);
u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves);
void RunBattleScriptCommands_PopCallbacksStack(void);
@@ -46,6 +83,9 @@ void RunBattleScriptCommands(void);
bool8 TryRunFromBattle(u8 bank);
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];
@@ -57,4 +97,7 @@ extern const u8 gStatusConditionString_LoveJpn[8];
extern const u8 * const gStatusConditionStringsTable[7][2];
-#endif // GUARD_BATTLE_2_H
+extern const u8 gTypeEffectiveness[336];
+extern const struct TrainerMoney gTrainerMoneyTable[];
+
+#endif // GUARD_BATTLE_MAIN_H
diff --git a/include/battle_message.h b/include/battle_message.h
index 27ae88b01..ffc9d5bb7 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -35,11 +35,11 @@
#define B_TXT_EFF_ABILITY 0x1B
#define B_TXT_TRAINER1_CLASS 0x1C
#define B_TXT_TRAINER1_NAME 0x1D
-#define B_TXT_1E 0x1E // trainer name for a link player
-#define B_TXT_1F 0x1F // trainer name for a link player
-#define B_TXT_20 0x20 // trainer name for a link player
-#define B_TXT_21 0x21 // trainer name for a link player
-#define B_TXT_22 0x22 // trainer name for a link player
+#define B_TXT_LINK_PLAYER_NAME 0x1E
+#define B_TXT_LINK_PARTNER_NAME 0x1F
+#define B_TXT_LINK_OPPONENT1_NAME 0x20
+#define B_TXT_LINK_OPPONENT2_NAME 0x21
+#define B_TXT_LINK_SCR_TRAINER_NAME 0x22
#define B_TXT_PLAYER_NAME 0x23
#define B_TXT_TRAINER1_LOSE_TEXT 0x24
#define B_TXT_TRAINER1_WIN_TEXT 0x25
@@ -196,7 +196,7 @@
textVar[4] = B_BUFF_EOS; \
}
-struct StringInfoBattle
+struct BattleMsgData
{
u16 currentMove;
u16 originallyUsedMove;
@@ -205,7 +205,7 @@ struct StringInfoBattle
u8 scrActive;
u8 unk1605E;
u8 hpScale;
- u8 StringBank;
+ u8 itemEffectBattler;
u8 moveType;
u8 abilities[4];
u8 textBuffs[3][0x10];
@@ -217,6 +217,10 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst);
void BattleHandleAddTextPrinter(const u8* text, u8 arg1);
void SetPpNumbersPaletteInMoveSelection(void);
u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp);
+void BattlePutTextOnWindow(const u8* text, u8 arg1);
+bool8 sub_80D89B0(u16);
+
+extern struct BattleMsgData *gBattleMsgDataPtr;
#define TEXT_BUFF_ARRAY_COUNT 16
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index d4cb75e91..3f2699064 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -14,10 +14,6 @@
#define CMP_COMMON_BITS 0x4
#define CMP_NO_COMMON_BITS 0x5
-#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
-#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
-#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
-
#define ATK48_STAT_NEGATIVE 0x1
#define ATK48_STAT_BY_TWO 0x2
#define ATK48_BIT_x4 0x4
@@ -25,19 +21,6 @@
#define ATK4F_DONT_CHECK_STATUSES 0x80
-#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
-#define VARIOUS_SET_MAGIC_COAT_TARGET 1
-#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
-#define VARIOUS_GET_MOVE_TARGET 3
-#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
-#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
-#define VARIOUS_EMIT_YESNOBOX 13
-#define VARIOUS_WAIT_CRY 18
-#define VARIOUS_RETURN_OPPONENT_MON1 19
-#define VARIOUS_RETURN_OPPONENT_MON2 20
-#define VARIOUS_SET_TELEPORT_OUTCOME 25
-#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
-
#define ATK80_DMG_CHANGE_SIGN 0
#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
#define ATK80_DMG_DOUBLED 2
@@ -51,18 +34,18 @@
#define WINDOW_CLEAR 0x1
#define WINDOW_x80 0x80
-void AI_CalcDmg(u8 bankAtk, u8 bankDef);
-u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
-u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
-u8 BankGetTurnOrder(u8 bank);
void SetMoveEffect(bool8 primary, u8 certain);
-void BattleDestroyYesNoCursorAt(u8 cursorPosition);
-void BattleCreateYesNoCursorAt(u8 cursorPosition);
-void BufferMoveToLearnIntoBattleTextBuff2(void);
+bool8 UproarWakeUpCheck(u8 battlerId);
+u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
+u8 TypeCalc(u16 move, u8 attacker, u8 defender);
+void AI_CalcDmg(u8 attacker, u8 defender);
+bool32 IsMonGettingExpSentOut(void);
+void BattleCreateYesNoCursorAt(void);
+void BattleDestroyYesNoCursorAt(void);
void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
-bool8 UproarWakeUpCheck(u8 bank);
+u8 GetBattlerTurnOrderNum(u8 battlerId);
+void BufferMoveToLearnIntoBattleTextBuff2(void);
extern void (* const gBattleScriptingCommandsTable[])(void);
-extern const u8 gUnknown_0831C494[][4];
#endif // GUARD_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/battle_scripts.h b/include/battle_scripts.h
index 69edacae6..a13a8c097 100644
--- a/include/battle_scripts.h
+++ b/include/battle_scripts.h
@@ -28,16 +28,8 @@ extern const u8 BattleScript_LocalBattleLost[];
extern const u8 BattleScript_LocalBattleLostPrintWhiteOut[];
extern const u8 BattleScript_LocalBattleLostEnd[];
extern const u8 BattleScript_CheckDomeDrew[];
-extern const u8 BattleScript_82DAA0B[];
-extern const u8 BattleScript_82DAA31[];
extern const u8 BattleScript_LinkBattleWonOrLost[];
-extern const u8 BattleScript_82DAA5C[];
-extern const u8 BattleScript_82DAA83[];
extern const u8 BattleScript_FrontierTrainerBattleWon[];
-extern const u8 BattleScript_82DAAAB[];
-extern const u8 BattleScript_82DAAAE[];
-extern const u8 BattleScript_82DAACB[];
-extern const u8 BattleScript_82DAADA[];
extern const u8 BattleScript_SmokeBallEscape[];
extern const u8 BattleScript_RanAwayUsingMonAbility[];
extern const u8 BattleScript_GotAwaySafely[];
@@ -47,11 +39,6 @@ extern const u8 BattleScript_PrintFailedToRunString[];
extern const u8 BattleScript_PrintCantEscapeFromBattle[];
extern const u8 BattleScript_PrintFullBox[];
extern const u8 BattleScript_ActionSwitch[];
-extern const u8 BattleScript_82DAB35[];
-extern const u8 BattleScript_82DAB37[];
-extern const u8 BattleScript_82DAB44[];
-extern const u8 BattleScript_82DAB77[];
-extern const u8 BattleScript_82DABB8[];
extern const u8 BattleScript_Pausex20[];
extern const u8 BattleScript_LevelUp[];
extern const u8 BattleScript_RainContinuesOrEnds[];
@@ -64,13 +51,10 @@ extern const u8 BattleScript_SideStatusWoreOff[];
extern const u8 BattleScript_SafeguardProtected[];
extern const u8 BattleScript_SafeguardEnds[];
extern const u8 BattleScript_LeechSeedTurnDrain[];
-extern const u8 BattleScript_82DAD47[];
-extern const u8 BattleScript_82DAD4D[];
extern const u8 BattleScript_BideStoringEnergy[];
extern const u8 BattleScript_BideAttack[];
extern const u8 BattleScript_BideNoEnergyToAttack[];
extern const u8 BattleScript_SuccessForceOut[];
-extern const u8 BattleScript_82DADF1[];
extern const u8 BattleScript_MistProtected[];
extern const u8 BattleScript_RageIsBuilding[];
extern const u8 BattleScript_MoveUsedIsDisabled[];
@@ -81,32 +65,16 @@ extern const u8 BattleScript_SelectingUnusableMoveInPalace[];
extern const u8 BattleScript_EncoredNoMore[];
extern const u8 BattleScript_DestinyBondTakesLife[];
extern const u8 BattleScript_SpikesOnAttacker[];
-extern const u8 BattleScript_82DAE7A[];
extern const u8 BattleScript_SpikesOnTarget[];
-extern const u8 BattleScript_82DAEB1[];
extern const u8 BattleScript_SpikesOngBank1[];
-extern const u8 BattleScript_82DAEE8[];
-extern const u8 BattleScript_82DAEFE[];
extern const u8 BattleScript_PerishSongTakesLife[];
extern const u8 BattleScript_PerishSongCountGoesDown[];
extern const u8 BattleScript_AllStatsUp[];
-extern const u8 BattleScript_82DAF54[];
-extern const u8 BattleScript_82DAF72[];
-extern const u8 BattleScript_82DAF86[];
-extern const u8 BattleScript_82DAF9A[];
-extern const u8 BattleScript_82DAFAE[];
-extern const u8 BattleScript_82DAFC2[];
extern const u8 BattleScript_RapidSpinAway[];
extern const u8 BattleScript_WrapFree[];
extern const u8 BattleScript_LeechSeedFree[];
extern const u8 BattleScript_SpikesFree[];
extern const u8 BattleScript_MonTookFutureAttack[];
-extern const u8 BattleScript_82DB001[];
-extern const u8 BattleScript_82DB008[];
-extern const u8 BattleScript_82DB020[];
-extern const u8 BattleScript_82DB027[];
-extern const u8 BattleScript_82DB03F[];
-extern const u8 BattleScript_82DB058[];
extern const u8 BattleScript_NoMovesLeft[];
extern const u8 BattleScript_SelectingMoveWithNoPP[];
extern const u8 BattleScript_NoPPForMove[];
@@ -119,27 +87,21 @@ extern const u8 BattleScript_SelectingNotAllowedMoveTauntInPalace[];
extern const u8 BattleScript_WishComesTrue[];
extern const u8 BattleScript_IngrainTurnHeal[];
extern const u8 BattleScript_AtkDefDown[];
-extern const u8 BattleScript_82DB144[];
-extern const u8 BattleScript_82DB167[];
extern const u8 BattleScript_KnockedOff[];
extern const u8 BattleScript_MoveUsedIsImprisoned[];
-extern const u8 BattleScript_SelectingImprisionedMove[];
-extern const u8 BattleScript_SelectingImprisionedMoveInPalace[];
+extern const u8 BattleScript_SelectingImprisonedMove[];
+extern const u8 BattleScript_SelectingImprisonedMoveInPalace[];
extern const u8 BattleScript_GrudgeTakesPp[];
extern const u8 BattleScript_MagicCoatBounce[];
extern const u8 BattleScript_SnatchedMove[];
extern const u8 BattleScript_EnduredMsg[];
extern const u8 BattleScript_OneHitKOMsg[];
extern const u8 BattleScript_SAtkDown2[];
-extern const u8 BattleScript_82DB1FE[];
extern const u8 BattleScript_FocusPunchSetUp[];
extern const u8 BattleScript_MoveUsedIsAsleep[];
extern const u8 BattleScript_MoveUsedWokeUp[];
extern const u8 BattleScript_MonWokeUpInUproar[];
extern const u8 BattleScript_PoisonTurnDmg[];
-extern const u8 BattleScript_82DB243[];
-extern const u8 BattleScript_82DB245[];
-extern const u8 BattleScript_82DB25E[];
extern const u8 BattleScript_BurnTurnDmg[];
extern const u8 BattleScript_MoveUsedIsFrozen[];
extern const u8 BattleScript_MoveUsedUnfroze[];
@@ -149,19 +111,17 @@ extern const u8 BattleScript_MoveUsedFlinched[];
extern const u8 BattleScript_PrintUproarOverTurns[];
extern const u8 BattleScript_ThrashConfuses[];
extern const u8 BattleScript_MoveUsedIsConfused[];
-extern const u8 BattleScript_82DB2D4[];
-extern const u8 BattleScript_82DB2FF[];
extern const u8 BattleScript_MoveUsedIsConfusedNoMore[];
extern const u8 BattleScript_PrintPayDayMoneyString[];
extern const u8 BattleScript_WrapTurnDmg[];
extern const u8 BattleScript_WrapEnds[];
extern const u8 BattleScript_MoveUsedIsInLove[];
+extern const u8 BattleScript_MoveUsedIsInLoveCantAttack[];
extern const u8 BattleScript_MoveUsedIsParalyzedCantAttack[];
extern const u8 BattleScript_NightmareTurnDmg[];
extern const u8 BattleScript_CurseTurnDmg[];
extern const u8 BattleScript_TargetPRLZHeal[];
extern const u8 BattleScript_MoveEffectSleep[];
-extern const u8 BattleScript_82DB374[];
extern const u8 BattleScript_YawnMakesAsleep[];
extern const u8 BattleScript_MoveEffectPoison[];
extern const u8 BattleScript_MoveEffectBurn[];
@@ -185,14 +145,6 @@ extern const u8 BattleScript_ShedSkinActivates[];
extern const u8 BattleScript_WeatherFormChanges[];
extern const u8 BattleScript_WeatherFormChangesLoop[];
extern const u8 BattleScript_CastformChange[];
-extern const u8 BattleScript_82DB4AF[];
-extern const u8 BattleScript_82DB4B8[];
-extern const u8 BattleScript_82DB4BE[];
-extern const u8 BattleScript_82DB4C1[];
-extern const u8 BattleScript_82DB4CD[];
-extern const u8 BattleScript_82DB510[];
-extern const u8 BattleScript_82DB51B[];
-extern const u8 BattleScript_82DB51C[];
extern const u8 BattleScript_DroughtActivates[];
extern const u8 BattleScript_TookAttack[];
extern const u8 BattleScript_SturdyPreventsOHKO[];
@@ -220,12 +172,9 @@ extern const u8 BattleScript_ApplySecondaryEffect[];
extern const u8 BattleScript_SynchronizeActivates[];
extern const u8 BattleScript_NoItemSteal[];
extern const u8 BattleScript_AbilityCuredStatus[];
-extern const u8 BattleScript_82DB695[];
extern const u8 BattleScript_IgnoresAndUsesRandomMove[];
extern const u8 BattleScript_MoveUsedLoafingAround[];
-extern const u8 BattleScript_82DB6C7[];
extern const u8 BattleScript_IgnoresAndFallsAsleep[];
-extern const u8 BattleScript_82DB6F0[];
extern const u8 BattleScript_SubstituteFade[];
extern const u8 BattleScript_BerryCurePrlzEnd2[];
extern const u8 BattleScript_BerryCureParRet[];
@@ -251,18 +200,8 @@ extern const u8 BattleScript_SelectingNotAllowedMoveChoiceItem[];
extern const u8 BattleScript_HangedOnMsg[];
extern const u8 BattleScript_BerryConfuseHealEnd2[];
extern const u8 BattleScript_BerryStatRaiseEnd2[];
-extern const u8 BattleScript_82DB85B[];
extern const u8 BattleScript_BerryFocusEnergyEnd2[];
extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[];
-extern const u8 BattleScript_82DB87D[];
-extern const u8 BattleScript_82DB881[];
-extern const u8 BattleScript_82DB887[];
-extern const u8 BattleScript_82DB89D[];
-extern const u8 BattleScript_82DB8BE[];
-extern const u8 BattleScript_82DB8E0[];
-extern const u8 BattleScript_82DB8F3[];
-extern const u8 BattleScript_82DB973[];
-extern const u8 BattleScript_82DB992[];
extern const u8 BattleScript_AskIfWantsToForfeitMatch[];
extern const u8 BattleScript_PrintPlayerForfeited[];
extern const u8 BattleScript_PrintPlayerForfeitedLinkBattle[];
@@ -270,23 +209,23 @@ extern const u8 BattleScript_BallThrow[];
extern const u8 BattleScript_BallThrowByWally[];
extern const u8 BattleScript_SafariBallThrow[];
extern const u8 BattleScript_SuccessBallThrow[];
-extern const u8 BattleScript_82DBD92[];
-extern const u8 BattleScript_82DBDA5[];
-extern const u8 BattleScript_82DBDC2[];
-extern const u8 BattleScript_82DBDC3[];
extern const u8 BattleScript_WallyBallThrow[];
extern const u8 BattleScript_ShakeBallThrow[];
-extern const u8 BattleScript_82DBE01[];
extern const u8 BattleScript_TrainerBallBlock[];
-extern const u8 BattleScript_82DBE12[];
-extern const u8 BattleScript_82DBE1C[];
-extern const u8 BattleScript_82DBE4B[];
-extern const u8 BattleScript_82DBE6F[];
-extern const u8 BattleScript_82DBE91[];
extern const u8 BattleScript_RunByUsingItem[];
extern const u8 BattleScript_ActionWatchesCarefully[];
extern const u8 BattleScript_ActionGetNear[];
extern const u8 BattleScript_ActionThrowPokeblock[];
-extern const u8 BattleScript_82DBEE3[];
+extern const u8 gUnknown_81D9192[];
+extern const u8 gUnknown_81D9180[];
+extern const u8 BattleScript_IntimidateActivates[];
+extern const u8 BattleScript_IntimidateActivatesEnd3[];
+extern const u8 BattleScript_IgnoresWhileAsleep[];
+extern const u8 BattleScript_IgnoresAndHitsItself[];
+extern const u8 BattleScript_MoveEffectRecoil[];
+extern const u8 BattleScript_FlushMessageBox[];
+extern const u8 BattleScript_SpikesOnFaintedBattler[];
+extern const u8 BattleScript_GhostBallDodge[];
+extern const u8 gUnknown_81D9A88[];
#endif // GUARD_BATTLE_SCRIPTS_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/battle_util.h b/include/battle_util.h
index a062f0743..797f0ef52 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -8,35 +8,37 @@
#define MOVE_LIMITATION_DISABLED (1 << 2)
#define MOVE_LIMITATION_TORMENTED (1 << 3)
#define MOVE_LIMITATION_TAUNT (1 << 4)
-#define MOVE_LIMITATION_IMPRISION (1 << 5)
+#define MOVE_LIMITATION_IMPRISON (1 << 5)
-#define ABILITYEFFECT_ON_SWITCHIN 0x0
-#define ABILITYEFFECT_ENDTURN 0x1
-#define ABILITYEFFECT_MOVES_BLOCK 0x2
-#define ABILITYEFFECT_ABSORBING 0x3
-#define ABILITYEFFECT_CONTACT 0x4
-#define ABILITYEFFECT_IMMUNITY 0x5
-#define ABILITYEFFECT_FORECAST 0x6
-#define ABILITYEFFECT_SYNCHRONIZE 0x7
-#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
-#define ABILITYEFFECT_INTIMIDATE1 0x9
-#define ABILITYEFFECT_INTIMIDATE2 0xA
-#define ABILITYEFFECT_TRACE 0xB
-#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
-#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD
-#define ABILITYEFFECT_FIELD_SPORT 0xE
-#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK 0xF
-#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
-#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11
-#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
-#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
-#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF
+#define ABILITYEFFECT_ON_SWITCHIN 0x0
+#define ABILITYEFFECT_ENDTURN 0x1
+#define ABILITYEFFECT_MOVES_BLOCK 0x2
+#define ABILITYEFFECT_ABSORBING 0x3
+#define ABILITYEFFECT_MOVE_END 0x4
+#define ABILITYEFFECT_IMMUNITY 0x5
+#define ABILITYEFFECT_FORECAST 0x6
+#define ABILITYEFFECT_SYNCHRONIZE 0x7
+#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
+#define ABILITYEFFECT_INTIMIDATE1 0x9
+#define ABILITYEFFECT_INTIMIDATE2 0xA
+#define ABILITYEFFECT_TRACE 0xB
+#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
+#define ABILITYEFFECT_CHECK_BATTLER_SIDE 0xD
+#define ABILITYEFFECT_FIELD_SPORT 0xE
+#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 0xF // TODO: Is it correct?
+#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
+#define ABILITYEFFECT_COUNT_BATTLER_SIDE 0x11
+#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
+#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
+#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF
#define ABILITY_ON_OPPOSING_FIELD(battlerId, abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, battlerId, abilityId, 0, 0))
#define ABILITY_ON_FIELD(abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0))
#define ABILITY_ON_FIELD2(abilityId)(AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0))
#define ITEMEFFECT_ON_SWITCH_IN 0x0
+#define ITEMEFFECT_MOVE_END 0x3
+#define ITEMEFFECT_KINGSROCK_SHELLBELL 0x4
#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
#define WEATHER_HAS_EFFECT2 ((!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0)))
@@ -50,43 +52,41 @@
#define BS_GET_PLAYER2 13
#define BS_GET_OPPONENT2 14
-u8 GetBattleBank(u8 caseId);
-void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move);
-void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
-void PressurePPLoseOnUsingImprision(u8 bankAtk);
-void MarkAllBufferBanksForExecution(void); // unused
-void MarkBufferBankForExecution(u8 bank);
-void sub_803F850(u8 arg0);
-void CancelMultiTurnMoves(u8 bank);
-bool8 WasUnableToUseMove(u8 bank);
-void PrepareStringBattle(u16 stringId, u8 bank);
+u8 GetBattlerForBattleScript(u8 caseId);
+void PressurePPLose(u8 target, u8 attacker, u16 move);
+void PressurePPLoseOnUsingImprison(u8 attacker);
+void PressurePPLoseOnUsingPerishSong(u8 attacker);
+void MarkAllBattlersForControllerExec(void);
+void MarkBattlerForControllerExec(u8 battlerId);
+void sub_8017298(u8 arg0);
+void CancelMultiTurnMoves(u8 battler);
+bool8 WasUnableToUseMove(u8 battler);
+void PrepareStringBattle(u16 stringId, u8 battler);
void ResetSentPokesToOpponentValue(void);
-void sub_803F9EC(u8 bank);
-void sub_803FA70(u8 bank);
-void BattleScriptPush(const u8* bsPtr);
+void sub_8017434(u8 battler);
+void sub_80174B8(u8 battler);
+void BattleScriptPush(const u8 *bsPtr);
void BattleScriptPushCursor(void);
void BattleScriptPop(void);
u8 TrySetCantSelectMoveBattleScript(void);
-u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check);
+u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check);
bool8 AreAllMovesUnusable(void);
-u8 GetImprisonedMovesCount(u8 bank, u16 move);
-u8 UpdateTurnCounters(void);
-u8 TurnBasedEffects(void);
+u8 GetImprisonedMovesCount(u8 battlerId, u16 move);
+u8 DoFieldEndTurnEffects(void);
+u8 DoBattlerEndTurnEffects(void);
bool8 HandleWishPerishSongOnTurnEnd(void);
bool8 HandleFaintedMonActions(void);
void TryClearRageStatuses(void);
u8 AtkCanceller_UnableToUseMove(void);
-bool8 sub_80423F4(u8 bank, u8 r1, u8 r2);
-u8 CastformDataTypeChange(u8 bank);
-u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg);
-void BattleScriptExecute(const u8* BS_ptr);
-void BattleScriptPushCursorAndCallback(const u8* BS_ptr);
-u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn);
-void ClearFuryCutterDestinyBondGrudge(u8 bank);
+bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2);
+u8 CastformDataTypeChange(u8 battler);
+u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveArg);
+void BattleScriptExecute(const u8 *BS_ptr);
+void BattleScriptPushCursorAndCallback(const u8 *BS_ptr);
+u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn);
+void ClearFuryCutterDestinyBondGrudge(u8 battlerId);
void HandleAction_RunBattleScript(void);
-u8 GetMoveTarget(u16 move, u8 useMoveTarget);
+u8 GetMoveTarget(u16 move, u8 setTarget);
u8 IsMonDisobedient(void);
-void MarkBufferBankForExecution(u8 battlerId);
-void sub_80174B8(u8 battlerId);
#endif // GUARD_BATTLE_UTIL_H
diff --git a/include/battle_util2.h b/include/battle_util2.h
index 3b8a6f817..8ca726856 100644
--- a/include/battle_util2.h
+++ b/include/battle_util2.h
@@ -6,7 +6,5 @@
void AllocateBattleResources(void);
void FreeBattleResources(void);
void AdjustFriendshipOnBattleFaint(u8 bank);
-void sub_80571DC(u8 bank, u8 arg1);
-u32 sub_805725C(u8 bank);
#endif // GUARD_BATTLE_UTIL_H
diff --git a/include/cable_club.h b/include/cable_club.h
new file mode 100644
index 000000000..401cfacf1
--- /dev/null
+++ b/include/cable_club.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_CABLE_CLUB_H
+#define GUARD_CABLE_CLUB_H
+
+#include "task.h"
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void sub_8081A90(u8 taskId);
+
+#endif //GUARD_CABLE_CLUB_H
diff --git a/include/constants/battle.h b/include/constants/battle.h
index f886f560b..a0099d23f 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -53,7 +53,7 @@
#define BATTLE_TYPE_MULTI 0x0040
#define BATTLE_TYPE_SAFARI 0x0080
#define BATTLE_TYPE_BATTLE_TOWER 0x0100
-#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
+#define BATTLE_TYPE_OLDMAN_TUTORIAL 0x0200
#define BATTLE_TYPE_ROAMER 0x0400
#define BATTLE_TYPE_EREADER_TRAINER 0x0800
#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
@@ -63,7 +63,7 @@
#define BATTLE_TYPE_POKEDUDE 0x10000
#define BATTLE_TYPE_PALACE 0x20000
#define BATTLE_TYPE_ARENA 0x40000
-#define BATTLE_TYPE_FACTORY 0x80000
+#define BATTLE_TYPE_TRAINER_TOWER 0x80000
#define BATTLE_TYPE_PIKE 0x100000
#define BATTLE_TYPE_PYRAMID 0x200000
#define BATTLE_TYPE_INGAME_PARTNER 0x400000
@@ -174,7 +174,7 @@
#define HITMARKER_GRUDGE 0x01000000
#define HITMARKER_OBEYS 0x02000000
#define HITMARKER_x4000000 0x04000000
-#define HITMARKER_x8000000 0x08000000
+#define HITMARKER_CHARGING 0x08000000
#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 0x1C)
#define HITMARKER_UNK(battler) (0x10000000 << battler)
@@ -207,12 +207,12 @@
#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT)
-#define WEATHER_SUNNY_TEMPORARY (1 << 5)
-#define WEATHER_SUNNY_PERMANENT (1 << 6)
-#define WEATHER_SUNNY_ANY (WEATHER_SUNNY_TEMPORARY | WEATHER_SUNNY_PERMANENT)
+#define WEATHER_SUN_TEMPORARY (1 << 5)
+#define WEATHER_SUN_PERMANENT (1 << 6)
+#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)
#define WEATHER_HAIL (1 << 7)
#define WEATHER_HAIL_ANY (WEATHER_HAIL)
-#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUNNY_ANY | WEATHER_HAIL_ANY)
+#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
// Move Effects
#define MOVE_EFFECT_SLEEP 0x1
@@ -281,4 +281,16 @@
#define MOVE_EFFECT_AFFECTS_USER 0x40
#define MOVE_EFFECT_CERTAIN 0x80
+// Battle terrain defines for gBattleTerrain.
+#define BATTLE_TERRAIN_GRASS 0
+#define BATTLE_TERRAIN_LONG_GRASS 1
+#define BATTLE_TERRAIN_SAND 2
+#define BATTLE_TERRAIN_UNDERWATER 3
+#define BATTLE_TERRAIN_WATER 4
+#define BATTLE_TERRAIN_POND 5
+#define BATTLE_TERRAIN_MOUNTAIN 6
+#define BATTLE_TERRAIN_CAVE 7
+#define BATTLE_TERRAIN_BUILDING 8
+#define BATTLE_TERRAIN_PLAIN 9
+
#endif // GUARD_CONSTANTS_BATTLE_H
diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h
new file mode 100644
index 000000000..22793032f
--- /dev/null
+++ b/include/constants/battle_anim.h
@@ -0,0 +1,443 @@
+#ifndef GUARD_CONSTANTS_BATTLE_ANIM_H
+#define GUARD_CONSTANTS_BATTLE_ANIM_H
+
+// Sprites start at 10000 and thus must be subtracted of 10000 to account for the true index.
+#define GET_TRUE_SPRITE_INDEX(i) ((i - ANIM_SPRITES_START))
+
+// Particle ids.
+#define ANIM_SPRITES_START 10000
+
+#define ANIM_TAG_BONE (ANIM_SPRITES_START + 0)
+#define ANIM_TAG_SPARK (ANIM_SPRITES_START + 1)
+#define ANIM_TAG_PENCIL (ANIM_SPRITES_START + 2)
+#define ANIM_TAG_AIR_WAVE (ANIM_SPRITES_START + 3)
+#define ANIM_TAG_ORB (ANIM_SPRITES_START + 4)
+#define ANIM_TAG_SWORD (ANIM_SPRITES_START + 5)
+#define ANIM_TAG_SEED (ANIM_SPRITES_START + 6)
+#define ANIM_TAG_EXPLOSION_6 (ANIM_SPRITES_START + 7)
+#define ANIM_TAG_PINK_ORB (ANIM_SPRITES_START + 8) // unused
+#define ANIM_TAG_GUST (ANIM_SPRITES_START + 9)
+#define ANIM_TAG_ICE_CUBE (ANIM_SPRITES_START + 10)
+#define ANIM_TAG_SPARK_2 (ANIM_SPRITES_START + 11)
+#define ANIM_TAG_ORANGE (ANIM_SPRITES_START + 12) // unused
+#define ANIM_TAG_YELLOW_BALL (ANIM_SPRITES_START + 13)
+#define ANIM_TAG_LOCK_ON (ANIM_SPRITES_START + 14)
+#define ANIM_TAG_TIED_BAG (ANIM_SPRITES_START + 15)
+#define ANIM_TAG_BLACK_SMOKE (ANIM_SPRITES_START + 16)
+#define ANIM_TAG_BLACK_BALL (ANIM_SPRITES_START + 17)
+#define ANIM_TAG_CONVERSION (ANIM_SPRITES_START + 18)
+#define ANIM_TAG_GLASS (ANIM_SPRITES_START + 19) // unused
+#define ANIM_TAG_HORN_HIT (ANIM_SPRITES_START + 20)
+#define ANIM_TAG_HIT (ANIM_SPRITES_START + 21)
+#define ANIM_TAG_HIT_2 (ANIM_SPRITES_START + 22)
+#define ANIM_TAG_BLUE_SHARDS (ANIM_SPRITES_START + 23) // unused
+#define ANIM_TAG_CLOSING_EYE (ANIM_SPRITES_START + 24) // unused
+#define ANIM_TAG_WAVING_HAND (ANIM_SPRITES_START + 25) // unused
+#define ANIM_TAG_HIT_DUPLICATE (ANIM_SPRITES_START + 26) // unused
+#define ANIM_TAG_LEER (ANIM_SPRITES_START + 27)
+#define ANIM_TAG_BLUE_BURST (ANIM_SPRITES_START + 28) // unused
+#define ANIM_TAG_SMALL_EMBER (ANIM_SPRITES_START + 29)
+#define ANIM_TAG_GRAY_SMOKE (ANIM_SPRITES_START + 30)
+#define ANIM_TAG_BLUE_STAR (ANIM_SPRITES_START + 31)
+#define ANIM_TAG_BUBBLE_BURST (ANIM_SPRITES_START + 32)
+#define ANIM_TAG_FIRE (ANIM_SPRITES_START + 33)
+#define ANIM_TAG_SPINNING_FIRE (ANIM_SPRITES_START + 34) // unused
+#define ANIM_TAG_FIRE_PLUME (ANIM_SPRITES_START + 35)
+#define ANIM_TAG_LIGHTNING_2 (ANIM_SPRITES_START + 36) // unused
+#define ANIM_TAG_LIGHTNING (ANIM_SPRITES_START + 37)
+#define ANIM_TAG_CLAW_SLASH_2 (ANIM_SPRITES_START + 38) // unused
+#define ANIM_TAG_CLAW_SLASH (ANIM_SPRITES_START + 39)
+#define ANIM_TAG_SCRATCH_3 (ANIM_SPRITES_START + 40) // unused
+#define ANIM_TAG_SCRATCH_2 (ANIM_SPRITES_START + 41) // unused
+#define ANIM_TAG_BUBBLE_BURST_2 (ANIM_SPRITES_START + 42) // unused
+#define ANIM_TAG_ICE_CHUNK (ANIM_SPRITES_START + 43)
+#define ANIM_TAG_GLASS_2 (ANIM_SPRITES_START + 44) // unused
+#define ANIM_TAG_PINK_HEART_2 (ANIM_SPRITES_START + 45) // unused
+#define ANIM_TAG_SAP_DRIP (ANIM_SPRITES_START + 46) // unused
+#define ANIM_TAG_SAP_DRIP_2 (ANIM_SPRITES_START + 47) // unused
+#define ANIM_TAG_SPARKLE_1 (ANIM_SPRITES_START + 48)
+#define ANIM_TAG_SPARKLE_2 (ANIM_SPRITES_START + 49)
+#define ANIM_TAG_HUMANOID_FOOT (ANIM_SPRITES_START + 50)
+#define ANIM_TAG_MONSTER_FOOT (ANIM_SPRITES_START + 51)
+#define ANIM_TAG_HUMANOID_HAND (ANIM_SPRITES_START + 52) // unused
+#define ANIM_TAG_NOISE_LINE (ANIM_SPRITES_START + 53)
+#define ANIM_TAG_YELLOW_UNK (ANIM_SPRITES_START + 54) // unused
+#define ANIM_TAG_RED_FIST (ANIM_SPRITES_START + 55) // unused
+#define ANIM_TAG_SLAM_HIT (ANIM_SPRITES_START + 56)
+#define ANIM_TAG_RING (ANIM_SPRITES_START + 57) // unused
+#define ANIM_TAG_ROCKS (ANIM_SPRITES_START + 58)
+#define ANIM_TAG_Z (ANIM_SPRITES_START + 59) // unused
+#define ANIM_TAG_YELLOW_UNK_2 (ANIM_SPRITES_START + 60) // unused
+#define ANIM_TAG_AIR_SLASH (ANIM_SPRITES_START + 61) // unused
+#define ANIM_TAG_SPINNING_GREEN_ORBS (ANIM_SPRITES_START + 62) // unused
+#define ANIM_TAG_LEAF (ANIM_SPRITES_START + 63)
+#define ANIM_TAG_FINGER (ANIM_SPRITES_START + 64)
+#define ANIM_TAG_POISON_POWDER (ANIM_SPRITES_START + 65)
+#define ANIM_TAG_BROWN_TRIANGLE (ANIM_SPRITES_START + 66) // unused
+#define ANIM_TAG_SLEEP_POWDER (ANIM_SPRITES_START + 67)
+#define ANIM_TAG_STUN_SPORE (ANIM_SPRITES_START + 68)
+#define ANIM_TAG_POWDER (ANIM_SPRITES_START + 69) // unused
+#define ANIM_TAG_SPARKLE_3 (ANIM_SPRITES_START + 70)
+#define ANIM_TAG_SPARKLE_4 (ANIM_SPRITES_START + 71)
+#define ANIM_TAG_MUSIC_NOTES (ANIM_SPRITES_START + 72)
+#define ANIM_TAG_DUCK (ANIM_SPRITES_START + 73)
+#define ANIM_TAG_MUD_SAND (ANIM_SPRITES_START + 74)
+#define ANIM_TAG_ALERT (ANIM_SPRITES_START + 75)
+#define ANIM_TAG_BLUE_FLAMES (ANIM_SPRITES_START + 76) // unused
+#define ANIM_TAG_BLUE_FLAMES_2 (ANIM_SPRITES_START + 77) // unused
+#define ANIM_TAG_SHOCK_4 (ANIM_SPRITES_START + 78) // unused
+#define ANIM_TAG_SHOCK (ANIM_SPRITES_START + 79)
+#define ANIM_TAG_BELL_2 (ANIM_SPRITES_START + 80) // unused
+#define ANIM_TAG_PINK_GLOVE (ANIM_SPRITES_START + 81) // unused
+#define ANIM_TAG_BLUE_LINES (ANIM_SPRITES_START + 82) // unused
+#define ANIM_TAG_IMPACT_3 (ANIM_SPRITES_START + 83) // unused
+#define ANIM_TAG_IMPACT_2 (ANIM_SPRITES_START + 84) // unused
+#define ANIM_TAG_RETICLE (ANIM_SPRITES_START + 85) // unused
+#define ANIM_TAG_BREATH (ANIM_SPRITES_START + 86)
+#define ANIM_TAG_ANGER (ANIM_SPRITES_START + 87)
+#define ANIM_TAG_SNOWBALL (ANIM_SPRITES_START + 88) // unused
+#define ANIM_TAG_VINE (ANIM_SPRITES_START + 89) // unused
+#define ANIM_TAG_SWORD_2 (ANIM_SPRITES_START + 90) // unused
+#define ANIM_TAG_CLAPPING (ANIM_SPRITES_START + 91) // unused
+#define ANIM_TAG_RED_TUBE (ANIM_SPRITES_START + 92) // unused
+#define ANIM_TAG_AMNESIA (ANIM_SPRITES_START + 93)
+#define ANIM_TAG_STRING_2 (ANIM_SPRITES_START + 94) // unused
+#define ANIM_TAG_PENCIL_2 (ANIM_SPRITES_START + 95) // unused
+#define ANIM_TAG_PETAL (ANIM_SPRITES_START + 96) // unused
+#define ANIM_TAG_BENT_SPOON (ANIM_SPRITES_START + 97)
+#define ANIM_TAG_WEB (ANIM_SPRITES_START + 98) // unused
+#define ANIM_TAG_MILK_BOTTLE (ANIM_SPRITES_START + 99)
+#define ANIM_TAG_COIN (ANIM_SPRITES_START + 100)
+#define ANIM_TAG_CRACKED_EGG (ANIM_SPRITES_START + 101) // unused
+#define ANIM_TAG_HATCHED_EGG (ANIM_SPRITES_START + 102) // unused
+#define ANIM_TAG_FRESH_EGG (ANIM_SPRITES_START + 103) // unused
+#define ANIM_TAG_FANGS (ANIM_SPRITES_START + 104) // unused
+#define ANIM_TAG_EXPLOSION_2 (ANIM_SPRITES_START + 105) // unused
+#define ANIM_TAG_EXPLOSION_3 (ANIM_SPRITES_START + 106) // unused
+#define ANIM_TAG_WATER_DROPLET (ANIM_SPRITES_START + 107) // unused
+#define ANIM_TAG_WATER_DROPLET_2 (ANIM_SPRITES_START + 108) // unused
+#define ANIM_TAG_SEED_2 (ANIM_SPRITES_START + 109) // unused
+#define ANIM_TAG_SPROUT (ANIM_SPRITES_START + 110) // unused
+#define ANIM_TAG_RED_WAND (ANIM_SPRITES_START + 111) // unused
+#define ANIM_TAG_PURPLE_GREEN_UNK (ANIM_SPRITES_START + 112) // unused
+#define ANIM_TAG_WATER_COLUMN (ANIM_SPRITES_START + 113) // unused
+#define ANIM_TAG_MUD_UNK (ANIM_SPRITES_START + 114) // unused
+#define ANIM_TAG_RAIN_DROPS (ANIM_SPRITES_START + 115)
+#define ANIM_TAG_FURY_SWIPES (ANIM_SPRITES_START + 116) // unused
+#define ANIM_TAG_VINE_2 (ANIM_SPRITES_START + 117) // unused
+#define ANIM_TAG_TEETH (ANIM_SPRITES_START + 118) // unused
+#define ANIM_TAG_BONE_2 (ANIM_SPRITES_START + 119) // unused
+#define ANIM_TAG_WHITE_BAG (ANIM_SPRITES_START + 120) // unused
+#define ANIM_TAG_UNKNOWN (ANIM_SPRITES_START + 121) // unused
+#define ANIM_TAG_PURPLE_CORAL (ANIM_SPRITES_START + 122) // unused
+#define ANIM_TAG_PURPLE_DROPLET (ANIM_SPRITES_START + 123) // unused
+#define ANIM_TAG_SHOCK_2 (ANIM_SPRITES_START + 124) // unused
+#define ANIM_TAG_CLOSING_EYE_2 (ANIM_SPRITES_START + 125) // unused
+#define ANIM_TAG_METAL_BALL (ANIM_SPRITES_START + 126) // unused
+#define ANIM_TAG_MONSTER_DOLL (ANIM_SPRITES_START + 127) // unused
+#define ANIM_TAG_WHIRLWIND (ANIM_SPRITES_START + 128) // unused
+#define ANIM_TAG_WHIRLWIND_2 (ANIM_SPRITES_START + 129) // unused
+#define ANIM_TAG_EXPLOSION_4 (ANIM_SPRITES_START + 130) // unused
+#define ANIM_TAG_EXPLOSION_5 (ANIM_SPRITES_START + 131) // unused
+#define ANIM_TAG_TONGUE (ANIM_SPRITES_START + 132) // unused
+#define ANIM_TAG_SMOKE (ANIM_SPRITES_START + 133) // unused
+#define ANIM_TAG_SMOKE_2 (ANIM_SPRITES_START + 134) // unused
+#define ANIM_TAG_IMPACT (ANIM_SPRITES_START + 135)
+#define ANIM_TAG_CIRCLE_IMPACT (ANIM_SPRITES_START + 136)
+#define ANIM_TAG_SCRATCH (ANIM_SPRITES_START + 137)
+#define ANIM_TAG_CUT (ANIM_SPRITES_START + 138)
+#define ANIM_TAG_SHARP_TEETH (ANIM_SPRITES_START + 139)
+#define ANIM_TAG_RAINBOW_RINGS (ANIM_SPRITES_START + 140)
+#define ANIM_TAG_ICE_CRYSTALS (ANIM_SPRITES_START + 141)
+#define ANIM_TAG_ICE_SPIKES (ANIM_SPRITES_START + 142)
+#define ANIM_TAG_HANDS_AND_FEET (ANIM_SPRITES_START + 143)
+#define ANIM_TAG_MIST_CLOUD (ANIM_SPRITES_START + 144)
+#define ANIM_TAG_CLAMP (ANIM_SPRITES_START + 145)
+#define ANIM_TAG_BUBBLE (ANIM_SPRITES_START + 146)
+#define ANIM_TAG_ORBS (ANIM_SPRITES_START + 147)
+#define ANIM_TAG_WATER_IMPACT (ANIM_SPRITES_START + 148)
+#define ANIM_TAG_WATER_ORB (ANIM_SPRITES_START + 149)
+#define ANIM_TAG_POISON_BUBBLE (ANIM_SPRITES_START + 150)
+#define ANIM_TAG_TOXIC_BUBBLE (ANIM_SPRITES_START + 151)
+#define ANIM_TAG_SPIKES (ANIM_SPRITES_START + 152)
+#define ANIM_TAG_HORN_HIT_2 (ANIM_SPRITES_START + 153)
+#define ANIM_TAG_AIR_WAVE_2 (ANIM_SPRITES_START + 154)
+#define ANIM_TAG_SMALL_BUBBLES (ANIM_SPRITES_START + 155)
+#define ANIM_TAG_ROUND_SHADOW (ANIM_SPRITES_START + 156)
+#define ANIM_TAG_SUNLIGHT (ANIM_SPRITES_START + 157)
+#define ANIM_TAG_SPORE (ANIM_SPRITES_START + 158)
+#define ANIM_TAG_FLOWER (ANIM_SPRITES_START + 159)
+#define ANIM_TAG_RAZOR_LEAF (ANIM_SPRITES_START + 160)
+#define ANIM_TAG_NEEDLE (ANIM_SPRITES_START + 161)
+#define ANIM_TAG_WHIRLWIND_LINES (ANIM_SPRITES_START + 162)
+#define ANIM_TAG_GOLD_RING (ANIM_SPRITES_START + 163)
+#define ANIM_TAG_PURPLE_RING (ANIM_SPRITES_START + 164)
+#define ANIM_TAG_BLUE_RING (ANIM_SPRITES_START + 165)
+#define ANIM_TAG_GREEN_LIGHT_WALL (ANIM_SPRITES_START + 166)
+#define ANIM_TAG_BLUE_LIGHT_WALL (ANIM_SPRITES_START + 167)
+#define ANIM_TAG_RED_LIGHT_WALL (ANIM_SPRITES_START + 168)
+#define ANIM_TAG_GRAY_LIGHT_WALL (ANIM_SPRITES_START + 169)
+#define ANIM_TAG_ORANGE_LIGHT_WALL (ANIM_SPRITES_START + 170)
+#define ANIM_TAG_BLACK_BALL_2 (ANIM_SPRITES_START + 171)
+#define ANIM_TAG_PURPLE_GAS_CLOUD (ANIM_SPRITES_START + 172)
+#define ANIM_TAG_SPARK_H (ANIM_SPRITES_START + 173)
+#define ANIM_TAG_YELLOW_STAR (ANIM_SPRITES_START + 174)
+#define ANIM_TAG_LARGE_FRESH_EGG (ANIM_SPRITES_START + 175)
+#define ANIM_TAG_SHADOW_BALL (ANIM_SPRITES_START + 176)
+#define ANIM_TAG_LICK (ANIM_SPRITES_START + 177)
+#define ANIM_TAG_VOID_LINES (ANIM_SPRITES_START + 178)
+#define ANIM_TAG_STRING (ANIM_SPRITES_START + 179)
+#define ANIM_TAG_WEB_THREAD (ANIM_SPRITES_START + 180)
+#define ANIM_TAG_SPIDER_WEB (ANIM_SPRITES_START + 181)
+#define ANIM_TAG_LIGHTBULB (ANIM_SPRITES_START + 182) // unused
+#define ANIM_TAG_SLASH (ANIM_SPRITES_START + 183)
+#define ANIM_TAG_FOCUS_ENERGY (ANIM_SPRITES_START + 184)
+#define ANIM_TAG_SPHERE_TO_CUBE (ANIM_SPRITES_START + 185)
+#define ANIM_TAG_TENDRILS (ANIM_SPRITES_START + 186)
+#define ANIM_TAG_EYE (ANIM_SPRITES_START + 187)
+#define ANIM_TAG_WHITE_SHADOW (ANIM_SPRITES_START + 188)
+#define ANIM_TAG_TEAL_ALERT (ANIM_SPRITES_START + 189)
+#define ANIM_TAG_OPENING_EYE (ANIM_SPRITES_START + 190)
+#define ANIM_TAG_ROUND_WHITE_HALO (ANIM_SPRITES_START + 191)
+#define ANIM_TAG_FANG_ATTACK (ANIM_SPRITES_START + 192)
+#define ANIM_TAG_PURPLE_HAND_OUTLINE (ANIM_SPRITES_START + 193)
+#define ANIM_TAG_MOON (ANIM_SPRITES_START + 194)
+#define ANIM_TAG_GREEN_SPARKLE (ANIM_SPRITES_START + 195)
+#define ANIM_TAG_SPIRAL (ANIM_SPRITES_START + 196)
+#define ANIM_TAG_SNORE_Z (ANIM_SPRITES_START + 197)
+#define ANIM_TAG_EXPLOSION (ANIM_SPRITES_START + 198)
+#define ANIM_TAG_NAIL (ANIM_SPRITES_START + 199)
+#define ANIM_TAG_GHOSTLY_SPIRIT (ANIM_SPRITES_START + 200)
+#define ANIM_TAG_WARM_ROCK (ANIM_SPRITES_START + 201)
+#define ANIM_TAG_BREAKING_EGG (ANIM_SPRITES_START + 202)
+#define ANIM_TAG_THIN_RING (ANIM_SPRITES_START + 203)
+#define ANIM_TAG_PUNCH_IMPACT (ANIM_SPRITES_START + 204) // unused
+#define ANIM_TAG_BELL (ANIM_SPRITES_START + 205)
+#define ANIM_TAG_MUSIC_NOTES_2 (ANIM_SPRITES_START + 206)
+#define ANIM_TAG_SPEED_DUST (ANIM_SPRITES_START + 207)
+#define ANIM_TAG_TORN_METAL (ANIM_SPRITES_START + 208)
+#define ANIM_TAG_THOUGHT_BUBBLE (ANIM_SPRITES_START + 209)
+#define ANIM_TAG_MAGENTA_HEART (ANIM_SPRITES_START + 210)
+#define ANIM_TAG_ELECTRIC_ORBS (ANIM_SPRITES_START + 211)
+#define ANIM_TAG_CIRCLE_OF_LIGHT (ANIM_SPRITES_START + 212)
+#define ANIM_TAG_ELECTRICITY (ANIM_SPRITES_START + 213)
+#define ANIM_TAG_FINGER_2 (ANIM_SPRITES_START + 214)
+#define ANIM_TAG_MOVEMENT_WAVES (ANIM_SPRITES_START + 215)
+#define ANIM_TAG_RED_HEART (ANIM_SPRITES_START + 216)
+#define ANIM_TAG_RED_ORB (ANIM_SPRITES_START + 217)
+#define ANIM_TAG_EYE_SPARKLE (ANIM_SPRITES_START + 218)
+#define ANIM_TAG_PINK_HEART (ANIM_SPRITES_START + 219)
+#define ANIM_TAG_ANGEL (ANIM_SPRITES_START + 220)
+#define ANIM_TAG_DEVIL (ANIM_SPRITES_START + 221)
+#define ANIM_TAG_SWIPE (ANIM_SPRITES_START + 222)
+#define ANIM_TAG_ROOTS (ANIM_SPRITES_START + 223)
+#define ANIM_TAG_ITEM_BAG (ANIM_SPRITES_START + 224)
+#define ANIM_TAG_JAGGED_MUSIC_NOTE (ANIM_SPRITES_START + 225)
+#define ANIM_TAG_POKEBALL (ANIM_SPRITES_START + 226)
+#define ANIM_TAG_SPOTLIGHT (ANIM_SPRITES_START + 227)
+#define ANIM_TAG_LETTER_Z (ANIM_SPRITES_START + 228)
+#define ANIM_TAG_RAPID_SPIN (ANIM_SPRITES_START + 229)
+#define ANIM_TAG_TRI_FORCE_TRIANGLE (ANIM_SPRITES_START + 230)
+#define ANIM_TAG_WISP_ORB (ANIM_SPRITES_START + 231)
+#define ANIM_TAG_WISP_FIRE (ANIM_SPRITES_START + 232)
+#define ANIM_TAG_GOLD_STARS (ANIM_SPRITES_START + 233)
+#define ANIM_TAG_ECLIPSING_ORB (ANIM_SPRITES_START + 234)
+#define ANIM_TAG_GRAY_ORB (ANIM_SPRITES_START + 235)
+#define ANIM_TAG_BLUE_ORB (ANIM_SPRITES_START + 236)
+#define ANIM_TAG_RED_ORB_2 (ANIM_SPRITES_START + 237)
+#define ANIM_TAG_PINK_PETAL (ANIM_SPRITES_START + 238)
+#define ANIM_TAG_PAIN_SPLIT (ANIM_SPRITES_START + 239)
+#define ANIM_TAG_CONFETTI (ANIM_SPRITES_START + 240)
+#define ANIM_TAG_GREEN_STAR (ANIM_SPRITES_START + 241)
+#define ANIM_TAG_PINK_CLOUD (ANIM_SPRITES_START + 242)
+#define ANIM_TAG_SWEAT_DROP (ANIM_SPRITES_START + 243)
+#define ANIM_TAG_GUARD_RING (ANIM_SPRITES_START + 244)
+#define ANIM_TAG_PURPLE_SCRATCH (ANIM_SPRITES_START + 245)
+#define ANIM_TAG_PURPLE_SWIPE (ANIM_SPRITES_START + 246)
+#define ANIM_TAG_TAG_HAND (ANIM_SPRITES_START + 247)
+#define ANIM_TAG_SMALL_RED_EYE (ANIM_SPRITES_START + 248)
+#define ANIM_TAG_HOLLOW_ORB (ANIM_SPRITES_START + 249)
+#define ANIM_TAG_X_SIGN (ANIM_SPRITES_START + 250)
+#define ANIM_TAG_BLUEGREEN_ORB (ANIM_SPRITES_START + 251)
+#define ANIM_TAG_PAW_PRINT (ANIM_SPRITES_START + 252)
+#define ANIM_TAG_PURPLE_FLAME (ANIM_SPRITES_START + 253)
+#define ANIM_TAG_RED_BALL (ANIM_SPRITES_START + 254)
+#define ANIM_TAG_SMELLINGSALT_EFFECT (ANIM_SPRITES_START + 255)
+#define ANIM_TAG_METEOR (ANIM_SPRITES_START + 256)
+#define ANIM_TAG_FLAT_ROCK (ANIM_SPRITES_START + 257)
+#define ANIM_TAG_MAGNIFYING_GLASS (ANIM_SPRITES_START + 258)
+#define ANIM_TAG_BROWN_ORB (ANIM_SPRITES_START + 259)
+#define ANIM_TAG_METAL_SOUND_WAVES (ANIM_SPRITES_START + 260)
+#define ANIM_TAG_FLYING_DIRT (ANIM_SPRITES_START + 261)
+#define ANIM_TAG_ICICLE_SPEAR (ANIM_SPRITES_START + 262)
+#define ANIM_TAG_HAIL (ANIM_SPRITES_START + 263)
+#define ANIM_TAG_GLOWY_RED_ORB (ANIM_SPRITES_START + 264)
+#define ANIM_TAG_GLOWY_GREEN_ORB (ANIM_SPRITES_START + 265)
+#define ANIM_TAG_GREEN_SPIKE (ANIM_SPRITES_START + 266)
+#define ANIM_TAG_WHITE_CIRCLE_OF_LIGHT (ANIM_SPRITES_START + 267)
+#define ANIM_TAG_GLOWY_BLUE_ORB (ANIM_SPRITES_START + 268)
+#define ANIM_TAG_POKEBLOCK (ANIM_SPRITES_START + 269)
+#define ANIM_TAG_WHITE_FEATHER (ANIM_SPRITES_START + 270)
+#define ANIM_TAG_SPARKLE_6 (ANIM_SPRITES_START + 271)
+#define ANIM_TAG_SPLASH (ANIM_SPRITES_START + 272)
+#define ANIM_TAG_SWEAT_BEAD (ANIM_SPRITES_START + 273)
+#define ANIM_TAG_GEM_1 (ANIM_SPRITES_START + 274) // unused
+#define ANIM_TAG_GEM_2 (ANIM_SPRITES_START + 275) // unused
+#define ANIM_TAG_GEM_3 (ANIM_SPRITES_START + 276) // unused
+#define ANIM_TAG_SLAM_HIT_2 (ANIM_SPRITES_START + 277)
+#define ANIM_TAG_RECYCLE (ANIM_SPRITES_START + 278)
+#define ANIM_TAG_RED_PARTICLES (ANIM_SPRITES_START + 279) // unused
+#define ANIM_TAG_PROTECT (ANIM_SPRITES_START + 280)
+#define ANIM_TAG_DIRT_MOUND (ANIM_SPRITES_START + 281)
+#define ANIM_TAG_SHOCK_3 (ANIM_SPRITES_START + 282)
+#define ANIM_TAG_WEATHER_BALL (ANIM_SPRITES_START + 283)
+#define ANIM_TAG_BIRD (ANIM_SPRITES_START + 284)
+#define ANIM_TAG_CROSS_IMPACT (ANIM_SPRITES_START + 285)
+#define ANIM_TAG_SLASH_2 (ANIM_SPRITES_START + 286)
+#define ANIM_TAG_WHIP_HIT (ANIM_SPRITES_START + 287)
+#define ANIM_TAG_BLUE_RING_2 (ANIM_SPRITES_START + 288)
+
+// battlers
+#define ANIM_ATTACKER 0
+#define ANIM_TARGET 1
+#define ANIM_ATK_PARTNER 2
+#define ANIM_DEF_PARTNER 3
+
+// stereo panning constants [0-255]
+//
+// 0
+// . .
+// . .
+// 192 . . 63
+// . .
+// . .
+// . .
+// 127
+//
+#define SOUND_PAN_ATTACKER -64
+#define SOUND_PAN_TARGET 63
+
+// move background ids
+#define BG_DARK_ 0 // the same as BG_DARK but is unused
+#define BG_DARK 1
+#define BG_GHOST 2
+#define BG_PSYCHIC 3
+#define BG_IMPACT_OPPONENT 4
+#define BG_IMPACT_PLAYER 5
+#define BG_IMPACT_CONTESTS 6
+#define BG_DRILL 7
+#define BG_DRILL_CONTESTS 8
+#define BG_HIGHSPEED_OPPONENT 9
+#define BG_HIGHSPEED_PLAYER 10
+#define BG_THUNDER 11
+#define BG_GUILLOTINE_OPPONENT 12
+#define BG_GUILLOTINE_PLAYER 13
+#define BG_GUILLOTINE_CONTESTS 14
+#define BG_ICE 15
+#define BG_COSMIC 16
+#define BG_IN_AIR 17
+#define BG_SKY 18
+#define BG_SKY_CONTESTS 19
+#define BG_AURORA 20
+#define BG_FISSURE 21
+#define BG_BUG_OPPONENT 22
+#define BG_BUG_PLAYER 23
+#define BG_SOLARBEAM_OPPONENT 24
+#define BG_SOLARBEAM_PLAYER 25
+#define BG_SOLARBEAM_CONTESTS 26
+
+// table ids for general animations
+#define B_ANIM_CASTFORM_CHANGE 0x0
+#define B_ANIM_STATS_CHANGE 0x1
+#define B_ANIM_SUBSTITUTE_FADE 0x2
+#define B_ANIM_SUBSTITUTE_APPEAR 0x3
+#define B_ANIM_POKEBLOCK_THROW 0x4
+#define B_ANIM_ITEM_KNOCKOFF 0x5
+#define B_ANIM_TURN_TRAP 0x6
+#define B_ANIM_ITEM_EFFECT 0x7
+#define B_ANIM_SMOKEBALL_ESCAPE 0x8
+#define B_ANIM_HANGED_ON 0x9
+#define B_ANIM_RAIN_CONTINUES 0xA
+#define B_ANIM_SUN_CONTINUES 0xB
+#define B_ANIM_SANDSTORM_CONTINUES 0xC
+#define B_ANIM_HAIL_CONTINUES 0xD
+#define B_ANIM_LEECH_SEED_DRAIN 0xE
+#define B_ANIM_MON_HIT 0xF
+#define B_ANIM_ITEM_STEAL 0x10
+#define B_ANIM_SNATCH_MOVE 0x11
+#define B_ANIM_FUTURE_SIGHT_HIT 0x12
+#define B_ANIM_DOOM_DESIRE_HIT 0x13
+#define B_ANIM_FOCUS_PUNCH_SETUP 0x14
+#define B_ANIM_INGRAIN_HEAL 0x15
+#define B_ANIM_WISH_HEAL 0x16
+#define B_ANIM_x19 0x19
+
+// special animations table
+#define B_ANIM_LVL_UP 0x0
+#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1
+#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2
+#define B_ANIM_BALL_THROW 0x3
+#define B_ANIM_SAFARI_BALL_THROW 0x4
+#define B_ANIM_SUBSTITUTE_TO_MON 0x5
+#define B_ANIM_MON_TO_SUBSTITUTE 0x6
+
+// status animation table
+#define B_ANIM_STATUS_PSN 0x0
+#define B_ANIM_STATUS_CONFUSION 0x1
+#define B_ANIM_STATUS_BRN 0x2
+#define B_ANIM_STATUS_INFATUATION 0x3
+#define B_ANIM_STATUS_SLP 0x4
+#define B_ANIM_STATUS_PRZ 0x5
+#define B_ANIM_STATUS_FRZ 0x6
+#define B_ANIM_STATUS_CURSED 0x7
+#define B_ANIM_STATUS_NIGHTMARE 0x8
+#define B_ANIM_STATUS_WRAPPED 0x9 // does not actually exist
+
+// Most tasks return a value to gBattleAnimArgs[7].
+#define ARG_RET_ID 0x7
+
+// Trapping Wrap-like moves end turn animation.
+#define TRAP_ANIM_BIND 0
+#define TRAP_ANIM_WRAP 0
+#define TRAP_ANIM_FIRE_SPIN 1
+#define TRAP_ANIM_WHIRLPOOL 2
+#define TRAP_ANIM_CLAMP 3
+#define TRAP_ANIM_SAND_TOMB 4
+
+// Weather defines for battle animation scripts.
+#define ANIM_WEATHER_NONE 0
+#define ANIM_WEATHER_SUN 1
+#define ANIM_WEATHER_RAIN 2
+#define ANIM_WEATHER_SANDSTORM 3
+#define ANIM_WEATHER_HAIL 4
+
+// Battle mon back animations.
+#define BACK_ANIM_NONE 0x00
+#define BACK_ANIM_H_SLIDE_QUICK 0x01
+#define BACK_ANIM_H_SLIDE 0x02
+#define BACK_ANIM_H_SLIDE_WITH_V_COMPRESS_1 0x03
+#define BACK_ANIM_H_SLIDE_WITH_V_COMPRESS_2 0x04
+#define BACK_ANIM_SHRINK_GROW_1 0x05
+#define BACK_ANIM_GROW_1 0x06
+#define BACK_ANIM_CIRCLE_MOVE_COUNTERCLOCKWISE 0x07
+#define BACK_ANIM_HORIZONTAL_SHAKE 0x08
+#define BACK_ANIM_VERTICAL_SHAKE 0x09
+#define BACK_ANIM_V_SHAKE_WITH_H_SLIDE 0x0a
+#define BACK_ANIM_VERTICAL_STRETCH 0x0b
+#define BACK_ANIM_HORIZONTAL_STRETCH 0x0c
+#define BACK_ANIM_GROW_2 0x0d
+#define BACK_ANIM_V_SHAKE_WITH_PAUSE 0x0e
+#define BACK_ANIM_CIRCLE_MOVE_CLOCKWISE 0x0f
+#define BACK_ANIM_CONCAVE_DOWN_ARC_SWAY_SMALL 0x10
+#define BACK_ANIM_CONCAVE_DOWN_ARC_SWAY_LARGE 0x11
+#define BACK_ANIM_CONCAVE_UP_ARC_SWAY_LARGE 0x12
+#define BACK_ANIM_DIP_RIGHT_SIDE 0x13
+#define BACK_ANIM_SHRINK_GROW_2 0x14
+#define BACK_ANIM_JOLT_RIGHT 0x15
+#define BACK_ANIM_FLASH_YELLOW_WITH_SHAKE 0x16
+#define BACK_ANIM_FADE_RED_WITH_SHAKE 0x17
+#define BACK_ANIM_FADE_GREEN_WITH_SHAKE 0x18
+#define BACK_ANIM_FADE_BLUE_WITH_SHAKE 0x19
+
+
+#endif // GUARD_CONSTANTS_BATTLE_ANIM_H
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
new file mode 100644
index 000000000..3809610ba
--- /dev/null
+++ b/include/constants/battle_script_commands.h
@@ -0,0 +1,127 @@
+#ifndef GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
+#define GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
+
+// Battle Scripting and BattleCommunication addresses
+#define sPAINSPLIT_HP gBattleScripting
+#define sBIDE_DMG gBattleScripting + 4
+#define sMULTIHIT_STRING gBattleScripting + 8
+#define sDMG_MULTIPLIER gBattleScripting + 0xE
+#define sTWOTURN_STRINGID gBattleScripting + 0xF
+#define sB_ANIM_ARG1 gBattleScripting + 0x10
+#define sB_ANIM_ARG2 gBattleScripting + 0x11
+#define sTRIPLE_KICK_POWER gBattleScripting + 0x12
+#define sMOVEEND_STATE gBattleScripting + 0x14
+#define sBATTLER_WITH_ABILITY gBattleScripting + 0x15
+#define sMULTIHIT_EFFECT gBattleScripting + 0x16
+#define sBATTLER gBattleScripting + 0x17
+#define sB_ANIM_TURN gBattleScripting + 0x18
+#define sB_ANIM_TARGETS_HIT gBattleScripting + 0x19
+#define sSTATCHANGER gBattleScripting + 0x1A
+#define sSTAT_ANIM_PLAYED gBattleScripting + 0x1B
+#define sGIVEEXP_STATE gBattleScripting + 0x1C
+#define sBATTLE_STYLE gBattleScripting + 0x1D
+#define sLVLBOX_STATE gBattleScripting + 0x1E
+#define sLEARNMOVE_STATE gBattleScripting + 0x1F
+#define sFIELD_20 gBattleScripting + 0x20
+#define sRESHOW_MAIN_STATE gBattleScripting + 0x21
+#define sRESHOW_HELPER_STATE gBattleScripting + 0x22
+#define sFIELD_23 gBattleScripting + 0x23
+#define sWINDOWS_TYPE gBattleScripting + 0x24
+#define sMULTIPLAYER_ID gBattleScripting + 0x25
+#define sSPECIAL_TRAINER_BATTLE_TYPE gBattleScripting + 0x26
+
+#define cEFFECT_CHOOSER gBattleCommunication + 3
+#define cMULTISTRING_CHOOSER gBattleCommunication + 5
+
+// Battle Script defines for getting the wanted battler
+#define BS_TARGET 0
+#define BS_ATTACKER 1
+#define BS_EFFECT_BATTLER 2
+#define BS_FAINTED 3
+#define BS_BATTLER_0 7
+#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_updatestatusicon
+#define BS_ATTACKER_SIDE 8 // for atk1E_jumpifability
+#define BS_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
+#define BS_SCRIPTING 10
+#define BS_PLAYER1 11
+#define BS_OPPONENT1 12
+#define BS_PLAYER2 13 // for atk98_updatestatusicon
+#define BS_OPPONENT2 14
+
+// atk 01, accuracy calc
+#define NO_ACC_CALC 0xFFFE
+#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
+#define ACC_CURR_MOVE 0
+
+// compare operands
+#define CMP_EQUAL 0x0
+#define CMP_NOT_EQUAL 0x1
+#define CMP_GREATER_THAN 0x2
+#define CMP_LESS_THAN 0x3
+#define CMP_COMMON_BITS 0x4
+#define CMP_NO_COMMON_BITS 0x5
+
+// TODO: documentation
+// atk76, various
+#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
+#define VARIOUS_SET_MAGIC_COAT_TARGET 1
+#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
+#define VARIOUS_GET_MOVE_TARGET 3
+#define VARIOUS_CASE_4 4
+#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
+#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
+#define VARIOUS_CASE_7 7
+#define VARIOUS_CASE_8 8
+#define VARIOUS_RETURN_OPPONENT_MON1 9
+#define VARIOUS_RETURN_OPPONENT_MON2 10
+#define VARIOUS_CASE_11 11
+#define VARIOUS_CASE_12 12
+
+// atk80, dmg manipulation
+#define ATK80_DMG_CHANGE_SIGN 0
+#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
+#define ATK80_DMG_DOUBLED 2
+
+// atk4F, a flag used for the jumpifcantswitch command
+#define ATK4F_DONT_CHECK_STATUSES 0x80
+
+// statchange defines
+#define STAT_CHANGE_BS_PTR 0x1
+#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
+
+// atk48
+#define ATK48_STAT_NEGATIVE 0x1
+#define ATK48_STAT_BY_TWO 0x2
+#define ATK48_ONLY_MULTIPLE 0x4
+#define ATK48_DONT_CHECK_LOWER 0x8
+
+// atk49, moveend cases
+#define ATK49_RAGE 0
+#define ATK49_DEFROST 1
+#define ATK49_SYNCHRONIZE_TARGET 2
+#define ATK49_MOVE_END_ABILITIES 3
+#define ATK49_STATUS_IMMUNITY_ABILITIES 4
+#define ATK49_SYNCHRONIZE_ATTACKER 5
+#define ATK49_CHOICE_MOVE 6
+#define ATK49_CHANGED_ITEMS 7
+#define ATK49_ATTACKER_INVISIBLE 8
+#define ATK49_ATTACKER_VISIBLE 9
+#define ATK49_TARGET_VISIBLE 10
+#define ATK49_ITEM_EFFECTS_ALL 11
+#define ATK49_KINGSROCK_SHELLBELL 12
+#define ATK49_SUBSTITUTE 13
+#define ATK49_UPDATE_LAST_MOVES 14
+#define ATK49_MIRROR_MOVE 15
+#define ATK49_NEXT_TARGET 16
+#define ATK49_COUNT 17
+
+#define BIT_HP 0x1
+#define BIT_ATK 0x2
+#define BIT_DEF 0x4
+#define BIT_SPEED 0x8
+#define BIT_SPATK 0x10
+#define BIT_SPDEF 0x20
+#define BIT_ACC 0x40
+#define BIT_EVASION 0x80
+
+#endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 78c1583b4..6942fee83 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -77,4 +77,10 @@
#define STAT_ACC 6 // only in battles
#define STAT_EVASION 7 // only in battles
+#define NUM_STATS 6
+#define NUM_BATTLE_STATS 8
+
+// Shiny odds
+#define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536
+
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
new file mode 100644
index 000000000..1aad499a1
--- /dev/null
+++ b/include/constants/trainers.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_TRAINERS_H
+#define GUARD_TRAINERS_H
+
+#define F_TRAINER_FEMALE (1 << 7)
+
+// All trainer parties specify the IV, level, and species for each Pokémon in the
+// party. Some trainer parties also specify held items and custom moves for each
+// Pokémon.
+#define F_TRAINER_PARTY_CUSTOM_MOVESET (1 << 0)
+#define F_TRAINER_PARTY_HELD_ITEM (1 << 1)
+
+#endif // GUARD_TRAINERS_H
diff --git a/include/data2.h b/include/data.h
index 3ce3c33c8..6479237f2 100644
--- a/include/data2.h
+++ b/include/data.h
@@ -1,13 +1,14 @@
-#ifndef GUARD_DATA2_H
-#define GUARD_DATA2_H
+#ifndef GUARD_DATA_H
+#define GUARD_DATA_H
#include "global.h"
+#include "constants/species.h"
struct MonCoords
{
// This would use a bitfield, but some function
// uses it as a u8 and casting won't match.
- u8 coords; // u8 x:4, y:4;
+ u8 size; // u8 width:4, height:4;
u8 y_offset;
};
@@ -23,8 +24,22 @@ extern const u16 gUnknown_8251FEE[];
extern const u16 gUnknown_8252324[];
extern const u16 gUnknown_82539D4[];
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+extern const struct CompressedSpriteSheet gMonBackPicTable[];
extern const struct CompressedSpritePalette gMonPaletteTable[];
extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
+extern const struct CompressedSpriteSheet gTrainerFrontPicTable[];
+extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
+extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
+
+extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
+extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
+
+extern const u8 gEnemyMonElevation[NUM_SPECIES];
+
+extern const u8 *const gBattleAnims_General[];
+extern const u8 *const gBattleAnims_Special[];
+
extern const union AnimCmd *const *const gTrainerBackAnimsPtrTable[];
extern const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[];
@@ -44,4 +59,4 @@ extern const struct SpriteFrameImage gUnknown_8234788[];
extern const struct SpriteFrameImage gUnknown_82347A8[];
extern const struct SpriteFrameImage gUnknown_82347C8[];
-#endif // GUARD_DATA2_H
+#endif // GUARD_DATA_H
diff --git a/include/field_specials.h b/include/field_specials.h
index a82cb20a2..9a85a8b49 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -13,5 +13,6 @@ void nullsub_61(void);
u8 ContextNpcGetTextColor(void);
void set_unknown_box_id(u8);
u16 get_unknown_box_id(void);
+bool8 sub_80CC7B4(void);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/field_weather.h b/include/field_weather.h
index c3ecd4fa6..78d2f2412 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -16,5 +16,7 @@ void PlayRainStoppingSoundEffect(void);
bool8 sub_807AA70(void);
void SetWeatherScreenFadeOut(void);
void sub_807B070(void);
+u8 GetCurrentWeather(void);
+void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32);
#endif // GUARD_WEATHER_H
diff --git a/include/gba/defines.h b/include/gba/defines.h
index 3932a8542..c0eec12b1 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -6,8 +6,13 @@
#define TRUE 1
#define FALSE 0
+#if defined(__APPLE__)
+#define IWRAM_DATA __attribute__((section("__DATA,iwram_data")))
+#define EWRAM_DATA __attribute__((section("__DATA,ewram_data")))
+#else
#define IWRAM_DATA __attribute__((section("iwram_data")))
#define EWRAM_DATA __attribute__((section("ewram_data")))
+#endif
#define ALIGNED(n) __attribute__((aligned(n)))
diff --git a/include/graphics.h b/include/graphics.h
index f6c2ddd4a..d8858b36f 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -974,4 +974,28 @@ extern const u8 gGraphics_TitleScreen_CopyrightPressStartMap[];
extern const u16 gGraphics_TitleScreen_FirePals[];
extern const u8 gGraphics_TitleScreen_BlankObjTiles[];
+extern const u32 gHealthboxSinglesPlayerGfx[];
+extern const u32 gHealthboxSinglesOpponentGfx[];
+extern const u32 gHealthboxDoublesPlayerGfx[];
+extern const u32 gHealthboxDoublesOpponentGfx[];
+extern const u32 gHealthboxSafariGfx[];
+extern const u32 gBlankGfxCompressed[];
+extern const u16 gBattleInterface_BallStatusBarPal[];
+extern const u16 gBattleInterface_BallDisplayPal[];
+extern const u32 gFile_graphics_interface_hp_numbers[];
+
+extern const u32 gGhostFrontPic[];
+extern const u32 gGhostPalette[];
+extern const u32 gSubstituteDollGfx[];
+extern const u32 gSubstituteDollTilemap[];
+extern const u32 gSubstituteDollPal[];
+
+// credits
+extern const u32 gCreditsPokeballBgGfxTiles[];
+extern const u32 gCreditsPokeballBgGfxMap[];
+extern const u16 gCreditsMonBackdropPals[][16];
+extern const u16 gCreditsAllRightsReservedGfxPal[];
+extern const u8 gCreditsAllRightsReservedGfxTiles[];
+extern const u8 gCreditsAllRightsReservedGfxMap[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/link.h b/include/link.h
index e1a4e106b..5f8d8f161 100644
--- a/include/link.h
+++ b/include/link.h
@@ -145,6 +145,7 @@ extern struct LinkPlayer gLinkPlayers[];
extern u16 word_3002910[];
extern bool8 gReceivedRemoteLinkPlayers;
extern bool8 gLinkVSyncDisabled;
+extern u8 gWirelessCommType;
extern u8 gUnknown_3003F84;
extern u64 gSioMlt_Recv;
@@ -191,23 +192,26 @@ void sub_800E0E8(void);
bool8 sub_800A520(void);
bool8 sub_8010500(void);
void sub_800DFB4(u8, u8);
-void sub_800ADF8(void);
+void sub_800AB9C(void);
void sub_800B488(void);
void sub_8009734(void);
void sub_800A620(void);
void sub_8011BD0(void);
u8 sub_800ABAC(void);
u8 sub_800ABBC(void);
-void sub_800AC34(void);
-void sub_8009804(void);
-bool8 sub_800AA48(void);
-void sub_800A5BC(void);
+void sub_800AAC0(void);
+void OpenLink(void);
+bool8 IsLinkMaster(void);
+void CheckShouldAdvanceLinkState(void);
void sub_800AA80(u8);
void sub_80098D8(void);
void CloseLink(void);
-bool8 sub_800A4BC(void);
+bool8 IsLinkTaskFinished(void);
bool32 sub_800B270(void);
void sub_800B388(void);
void sub_8054A28(void);
+void sub_800B1F4(void);
+void LoadWirelessStatusIndicatorSpriteGfx(void);
+void CreateWirelessStatusIndicatorSprite(u8, u8);
#endif // GUARD_LINK_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 7e0ea2068..928ae380e 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -18,5 +18,6 @@ void MEvent_CreateTask_CardOrNewsOverWireless(u8);
void MEvent_CreateTask_Leader(u8);
void sub_80F9E2C(void * data);
u8 sub_8116DE0(void);
+void sub_80FBB4C(void);
#endif //GUARD_LINK_RFU_H
diff --git a/include/overworld.h b/include/overworld.h
index 7c1f34e41..8c5dde2b0 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_ROM4_H
-#define GUARD_ROM4_H
+#ifndef GUARD_OVERWORLD_H
+#define GUARD_OVERWORLD_H
#include "global.h"
#include "main.h"
@@ -23,6 +23,18 @@ struct UCoords32
u32 x, y;
};
+struct CreditsOverworldCmd
+{
+ s16 unk_0;
+ u16 unk_2;
+ u16 unk_4;
+};
+
+/* gDisableMapMusicChangeOnMapLoad */
+#define MUSIC_DISABLE_OFF 0
+#define MUSIC_DISABLE_STOP 1
+#define MUSIC_DISABLE_KEEP 2
+
extern struct UCoords32 gDirectionToVectors[];
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4];
@@ -96,8 +108,9 @@ void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y);
void ResetInitialPlayerAvatarState(void);
void sub_8055D40(u16 mapDataId);
void CleanupOverworldWindowsAndTilemaps(void);
+u32 sub_8054C04(void);
-extern u8 gUnknown_2031DD8;
+extern u8 gDisableMapMusicChangeOnMapLoad;
extern u8 gUnknown_2036E28;
extern void (*gFieldCallback)(void);
@@ -118,5 +131,9 @@ bool8 is_light_level_8_or_9(u8 mapType);
bool32 sub_8055C9C(void);
void Overworld_ResetStateAfterDigEscRope(void);
bool32 sub_8058244(void);
+u8 GetCurrentMapType(void);
+
+void Overworld_CreditsMainCB(void);
+bool32 Overworld_DoScrollSceneForCredits(u8 *, const struct CreditsOverworldCmd *, u8);
-#endif //GUARD_ROM4_H
+#endif //GUARD_OVERWORLD_H
diff --git a/include/party_menu.h b/include/party_menu.h
index e4fc182e9..cd2a5bc37 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -10,7 +10,19 @@ enum {
AILMENT_PRZ,
AILMENT_SLP,
AILMENT_FRZ,
- AILMENT_BRN
+ AILMENT_BRN,
+ AILMENT_PKRS,
+ AILMENT_FNT
+};
+
+enum
+{
+ PARTY_CHOOSE_MON,
+ PARTY_MUST_CHOOSE_MON,
+ PARTY_CANT_SWITCH,
+ PARTY_USE_ITEM_ON,
+ PARTY_ABILITY_PREVENTS,
+ PARTY_GIVE_ITEM,
};
struct Struct203B0A0
@@ -29,7 +41,9 @@ struct Struct203B0A0
};
extern struct Struct203B0A0 gUnknown_203B0A0;
-
+extern u8 gUnknown_203B0C0;
+extern u8 gUnknown_203B0C1;
+extern u8 gUnknown_203B0DC[3];
extern void (*gUnknown_3005E98)(u8 taskId, TaskFunc func);
bool8 FieldCallback_PrepareFadeInFromMenu(void);
@@ -62,5 +76,10 @@ void sub_81279E0(void);
void ItemUseCB_Medicine(u8 taskId, TaskFunc followUpFunc);
u8 GetItemEffectType(u16 itemId);
u8 pokemon_order_func(u8);
+void sub_8127CAC(void);
+void sub_8127DA8(u8 battlerId, u8 multiplayerFlag);
+void OpenPartyMenuInBattle(u8 arg);
+void sub_8127EC4(u8 battlerId, u8 unk, u8 arrayIndex);
+bool8 IsMultiBattle(void);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokeball.h b/include/pokeball.h
index 5545f8870..ee0478eab 100644
--- a/include/pokeball.h
+++ b/include/pokeball.h
@@ -31,5 +31,6 @@ void sub_8076918(u8 bank);
void DoHitAnimHealthboxEffect(u8 bank);
void LoadBallGfx(u8 ballId);
void FreeBallGfx(u8 ballId);
+void sub_804BD94(u8 battler);
#endif // GUARD_POKEBALL_H
diff --git a/include/pokedex.h b/include/pokedex.h
index 718d2e853..a08d4ed26 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -45,4 +45,6 @@ u16 GetNationalPokedexCount(u8);
u16 sub_80C0844(u8);
u16 GetKantoPokedexCount(u8);
+u32 sub_8106B60(u16 species);
+
#endif // GUARD_POKEDEX_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 9354cae89..c5ee4eda5 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
@@ -94,6 +94,8 @@
#define MON_DATA_SPATK2 87
#define MON_DATA_SPDEF2 88
+#define MAX_LEVEL 100
+
#define OT_ID_RANDOM_NO_SHINY 2
#define OT_ID_PRESET 1
#define OT_ID_PLAYER_ID 0
@@ -244,7 +246,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 +344,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 +368,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;
@@ -539,6 +541,7 @@ extern const u32 gExperienceTables[][MAX_MON_LEVEL + 1];
extern const u16 *const gLevelUpLearnsets[];
extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
+extern const struct SpriteTemplate gUnknown_825DEF0[];
void ZeroBoxMonData(struct BoxPokemon *boxMon);
void ZeroMonData(struct Pokemon *mon);
@@ -597,7 +600,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);
@@ -620,8 +623,8 @@ u16 SpeciesToCryId(u16 species);
void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4);
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
bool8 sub_80435E0(void);
-bool8 GetLinkTrainerFlankId(u8 linkPlayerId);
-s32 GetBankMultiplayerId(u16 a1);
+bool16 GetLinkTrainerFlankId(u8 linkPlayerId);
+s32 GetBattlerMultiplayerId(u16 a1);
u8 GetTrainerEncounterMusicId(u16 trainer);
void AdjustFriendship(struct Pokemon *mon, u8 event);
void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies);
@@ -640,7 +643,7 @@ void ClearBattleMonForms(void);
void PlayBattleBGM(void);
void PlayMapChosenOrBattleBGM(u16 songId);
const u32 *GetMonFrontSpritePal(struct Pokemon *mon);
-const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality);
+const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality);
const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon);
const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality);
bool32 IsHMMove2(u16 move);
@@ -650,7 +653,7 @@ bool8 IsTradedMon(struct Pokemon *mon);
bool8 IsOtherTrainer(u32 otId, u8 *otName);
void MonRestorePP(struct Pokemon *mon);
void BoxMonRestorePP(struct BoxPokemon *boxMon);
-void sub_8044348(void);
+void SetMonPreventsSwitchingString(void);
void SetWildMonHeldItem(void);
bool8 IsMonShiny(struct Pokemon *mon);
u8 *GetTrainerPartnerName(void);
diff --git a/include/pokemon_special_anim.h b/include/pokemon_special_anim.h
new file mode 100644
index 000000000..8dbf0efa4
--- /dev/null
+++ b/include/pokemon_special_anim.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_POKEMON_SPECIAL_ANIM_H
+#define GUARD_POKEMON_SPECIAL_ANIM_H
+
+#include "global.h"
+
+void sub_811E5B8(u16, u16, u16, u16, u16, u16);
+bool8 sub_811E680(void);
+void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats);
+void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr);
+void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr);
+
+#endif // GUARD_POKEMON_SPECIAL_ANIM_H
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
new file mode 100644
index 000000000..7b250b647
--- /dev/null
+++ b/include/pokemon_summary_screen.h
@@ -0,0 +1,36 @@
+#ifndef GUARD_POKEMON_SUMMARY_SCREEN_H
+#define GUARD_POKEMON_SUMMARY_SCREEN_H
+
+#include "main.h"
+
+extern u8 gLastViewedMonIndex;
+
+extern const u8 *const gMoveDescriptionPointers[];
+extern const u8 *const gNatureNamePointers[];
+
+void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
+void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16);
+void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
+u8 sub_8138B2C(void);
+void SummaryScreen_SetUnknownTaskId(u8 a0);
+void SummaryScreen_DestroyUnknownTask(void);
+
+// The Pokemon Summary Screen can operate in different modes. Certain features,
+// such as move re-ordering, are available in the different modes.
+enum PokemonSummaryScreenMode
+{
+ PSS_MODE_NORMAL,
+ PSS_MODE_UNK1,
+ PSS_MODE_BOX,
+ PSS_MODE_SELECT_MOVE,
+};
+
+enum PokemonSummaryScreenPage
+{
+ PSS_PAGE_INFO,
+ PSS_PAGE_SKILLS,
+ PSS_PAGE_BATTLE_MOVES,
+ PSS_PAGE_CONTEST_MOVES,
+};
+
+#endif // GUARD_POKEMON_SUMMARY_SCREEN_H
diff --git a/include/reshow_battle_screen.h b/include/reshow_battle_screen.h
index 9d1ec30f2..cc20eed96 100644
--- a/include/reshow_battle_screen.h
+++ b/include/reshow_battle_screen.h
@@ -3,7 +3,7 @@
#include "global.h"
-void nullsub_35(void);
+void nullsub_44(void);
void ReshowBattleScreenAfterMenu(void);
#endif // GUARD_RESHOW_BATTLE_SCREEN_H
diff --git a/include/strings.h b/include/strings.h
index 97c120ff3..dfedb4afa 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -179,7 +179,7 @@ extern const u8 gUnknown_841623D[];
extern const u8 gUnknown_84162BD[];
extern const u8 gUnknown_841D148[];
-// pokemon.c
+// pokemon
extern const u8 BattleText_Rose[];
extern const u8 BattleText_UnknownString3[];
extern const u8 BattleText_GetPumped[];
@@ -208,4 +208,111 @@ extern const u8 gString_OutOfCoins[];
extern const u8 gString_QuitPlaying[];
extern const u8 gString_SlotMachineControls[];
+// battle_controller_safari
+extern const u8 gUnknown_83FDA4C[];
+extern const u8 gUnknown_83FE747[];
+extern const u8 gUnknown_83FE6E6[];
+
+// battle_controller_player
+extern const u8 gText_BattleSwitchWhich[];
+extern const u8 gUnknown_83FE770[];
+extern const u8 gText_MoveInterfacePP[];
+extern const u8 gUnknown_83FE770[];
+extern const u8 gText_MoveInterfaceType[];
+extern const u8 gText_LinkStandby[];
+extern const u8 gUnknown_83FE725[];
+extern const u8 gText_WhatWillPkmnDo[];
+
+// battle_script_commands
+extern const u8 gText_BattleYesNoChoice[];
+
+// credits
+extern const u8 gString_Dummy[];
+extern const u8 gString_PokemonFireRed_Staff[]; // FR
+extern const u8 gString_PokemonLeafGreen_Staff[]; // LG
+extern const u8 gCreditsString_Director[];
+extern const u8 gCreditsString_Junichi_Masuda[];
+extern const u8 gCreditsString_Art_Director_Battle_Director[];
+extern const u8 gCreditsString_Ken_Sugimori_Shigeki_Morimoto[];
+extern const u8 gCreditsString_Program_Leader_Planning_Leader_Graphic_Design_Leader[];
+extern const u8 gCreditsString_Tetsuya_Watanabe_Koji_Nishino_Takao_Unno[];
+extern const u8 gCreditsString_Programmers[];
+extern const u8 gCreditsString_Hiroyuki_Nakamura_Masao_Taya_Satoshi_Nohara_Miyuki_Iwasawa_Daisuke_Goto[];
+extern const u8 gCreditsString_System_Programmers[];
+extern const u8 gCreditsString_Tetsuya_Watanabe_Akito_Mori_Hisashi_Sogabe_Sousuke_Tamada[];
+extern const u8 gCreditsString_Graphic_Designers[];
+extern const u8 gCreditsString_Takao_Unno_Asuka_Iwashita_Kanako_Eo_Hiroki_Fuchino[];
+extern const u8 gCreditsString_Graphic_Designers_2[];
+extern const u8 gCreditsString_Ken_Sugimori_Hironobu_Yoshida[];
+extern const u8 gCreditsString_Music_Composition[];
+extern const u8 gCreditsString_Go_Ichinose_Junichi_Masuda[];
+extern const u8 gCreditsString_Sound_Effects[];
+extern const u8 gCreditsString_Go_Ichinose[];
+extern const u8 gCreditsString_Game_Designers[];
+extern const u8 gCreditsString_Junichi_Masuda_Koji_Nishino_Tetsuji_Ohta[];
+extern const u8 gCreditsString_Game_Designers_2[];
+extern const u8 gCreditsString_Hitomi_Sato_Shigeru_Ohmori_Tadashi_Takahashi[];
+extern const u8 gCreditsString_Game_Scenario[];
+extern const u8 gCreditsString_Hitomi_Sato_Satoshi_Tajiri[];
+extern const u8 gCreditsString_Script_Designer_Map_Designer[];
+extern const u8 gCreditsString_Satoshi_Nohara_Shigeru_Ohmori[];
+extern const u8 gCreditsString_Parametric_Designers[];
+extern const u8 gCreditsString_Koji_Nishino_Tetsuji_Ohta_Shigeki_Morimoto[];
+extern const u8 gCreditsString_POKeDEX_Text[];
+extern const u8 gCreditsString_Kenji_Matsushima[];
+extern const u8 gCreditsString_POKeMON_Designers[];
+extern const u8 gCreditsString_Ken_Sugimori_Motofumi_Fujiwara_Shigeki_Morimoto_Hironobu_Yoshida[];
+extern const u8 gCreditsString_POKeMON_Designers_2[];
+extern const u8 gCreditsString_Satoshi_Ohta_Asuka_Iwashita_Takao_Unno_Kanako_Eo_Aimi_Tomita[];
+extern const u8 gCreditsString_POKeMON_Designers_3[];
+extern const u8 gCreditsString_Atsuko_Nishida_Muneo_Saito_Rena_Yoshikawa_Jun_Okutani[];
+extern const u8 gCreditsString_Supporting_Programmers[];
+extern const u8 gCreditsString_Teruyuki_Yoshioka_Takao_Nakano_Satoshi_Mitsuhara_Daisuke_Hoshino[];
+extern const u8 gCreditsString_NCL_Product_Testing[];
+extern const u8 gCreditsString_NCL_Super_Mario_Club[];
+extern const u8 gCreditsString_Special_Thanks[];
+extern const u8 gCreditsString_Hiro_Nakamura_Hiroyuki_Uesugi_Teruki_Murakawa_Kazuya_Suyama[];
+extern const u8 gCreditsString_Special_Thanks_2[];
+extern const u8 gCreditsString_Kenji_Tominaga_Kenjiro_Ito_Tomotaka_Komura_Michiko_Takizawa[];
+extern const u8 gCreditsString_Special_Thanks_3[];
+extern const u8 gCreditsString_Makiko_Takada_Mikiko_Ohashi_Shusaku_Egami_Takanao_Kondo_Rui_Kawaguchi[];
+extern const u8 gCreditsString_Braille_Code_Check[];
+extern const u8 gCreditsString_Japan_Braille_Library[];
+extern const u8 gCreditsString_Information_Supervisors[];
+extern const u8 gCreditsString_Hiroki_Enomoto_Kazuyuki_Terada_Yuri_Sakurai_Yumi_Funasaka_Naoko_Yanase[];
+extern const u8 gCreditsString_Coordinators[];
+extern const u8 gCreditsString_Azusa_Tajima_Akira_Kinashi_Kazuki_Yoshihara_Retsuji_Nomoto[];
+extern const u8 gCreditsString_Task_Managers[];
+extern const u8 gCreditsString_Hitoshi_Yamagami_Gakuji_Nomoto[];
+extern const u8 gCreditsString_Producers[];
+extern const u8 gCreditsString_Hiroyuki_Jinnai_Takehiro_Izushi_Hiroaki_Tsuru[];
+extern const u8 gCreditsString_Executive_Director[];
+extern const u8 gCreditsString_Satoshi_Tajiri[];
+extern const u8 gCreditsString_Executive_Producer[];
+extern const u8 gCreditsString_Satoru_Iwata[];
+extern const u8 gCreditsString_Executive_Producer_2[];
+extern const u8 gCreditsString_Tsunekaz_Ishihara[];
+extern const u8 gCreditsString_English_Version_Coordinators[];
+extern const u8 gCreditsString_Hiro_Nakamura_Seth_McMahill[];
+extern const u8 gCreditsString_Translator_Text_Editor[];
+extern const u8 gCreditsString_Nob_Ogasawara_Teresa_Lillygren[];
+extern const u8 gCreditsString_Programmers_2[];
+extern const u8 gCreditsString_Teruki_Murakawa_Souichi_Yamamoto_Yuichiro_Ito_Akira_Kinashi[];
+extern const u8 gCreditsString_Environment_Tool_Programmers[];
+extern const u8 gCreditsString_Teruki_Murakawa_Souichi_Yamamoto_Kimiko_Nakamichi[];
+extern const u8 gCreditsString_NOA_Product_Testing[];
+extern const u8 gCreditsString_Thomas_Hertzog_Kathy_Huguenard_Mika_Kurosawa[];
+extern const u8 gCreditsString_Braille_Code_Check_2[];
+extern const u8 gCreditsString_National_Federation_of_the_Blind_Patricia_A_Maurer_Japan_Braille_Library_European_Blind_Union[];
+extern const u8 gCreditsString_Braille_Code_Check_3[];
+extern const u8 gCreditsString_National_Information_Library_Service_Margaret_Campion[];
+extern const u8 gCreditsString_Special_Thanks_4[];
+extern const u8 gCreditsString_Takehiro_Izushi_Motoyasu_Tojima_Hitoshi_Yamagami_Hiroyuki_Uesugi[];
+extern const u8 gCreditsString_Special_Thanks_5[];
+extern const u8 gCreditsString_Nicola_Pratt_Barlow_Shellie_Dow_Anthony_Howitt_Naoko_Saeki_Kyoko_Onishi[];
+extern const u8 gCreditsString_Braille_Code_Check_4[];
+extern const u8 gCreditsString_The_Royal_New_Zealand_Foundation_of_the_Blind_Greg_Moran[];
+extern const u8 gCreditsString_Graphic_Designer[];
+extern const u8 gCreditsString_Akira_Kinashi[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index 0fd586ddd..c4199190f 100644
--- a/include/text.h
+++ b/include/text.h
@@ -83,7 +83,16 @@
#define TEXT_COLOR_DARK_GREY 0x2
// battle placeholders are located in battle_message.h
-
+#define EXT_CTRL_CODE_COLOR 0x1
+#define EXT_CTRL_CODE_HIGHLIGHT 0x2
+#define EXT_CTRL_CODE_SHADOW 0x3
+//
+#define EXT_CTRL_CODE_UNKNOWN_7 0x7
+//
+#define EXT_CTRL_CODE_CLEAR 0x11
+//
+#define EXT_CTRL_CODE_CLEAR_TO 0x13
+#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14
#define EXT_CTRL_CODE_JPN 0x15
#define EXT_CTRL_CODE_ENG 0x16
@@ -105,18 +114,13 @@ enum
struct TextPrinterSubStruct
{
- u8 font_type:4; // 0x14
- u8 font_type_upper:1;
+ u8 glyphId:4; // 0x14
+ bool8 hasPrintBeenSpedUp:1;
u8 font_type_5:3;
- u8 field_1:5;
- u8 field_1_upmid:2;
- u8 field_1_top:1;
- u8 frames_visible_counter;
- u8 field_3;
- u8 field_4; // 0x18
- u8 field_5;
- u8 field_6;
- u8 active;
+ u8 downArrowDelay:5;
+ u8 downArrowYPosIdx:2;
+ u8 hasGlyphIdBeenSet:1;
+ u8 autoScrollDelay;
};
struct TextPrinterTemplate // TODO: Better name
@@ -138,18 +142,15 @@ struct TextPrinterTemplate // TODO: Better name
struct TextPrinter
{
- struct TextPrinterTemplate subPrinter;
-
+ struct TextPrinterTemplate printerTemplate;
void (*callback)(struct TextPrinterTemplate *, u16); // 0x10
-
- union {
+ union __attribute__((packed)) {
struct TextPrinterSubStruct sub;
-
- u8 sub_fields[8];
- } sub_union;
-
+ u8 fields[7];
+ } subUnion;
+ u8 active;
u8 state; // 0x1C
- u8 text_speed;
+ u8 textSpeed;
u8 delayCounter;
u8 scrollDistance;
u8 minLetterSpacing; // 0x20
@@ -173,13 +174,13 @@ extern const struct FontInfo *gFonts;
struct GlyphWidthFunc
{
- u32 font_id;
+ u32 fontId;
s32 (*func)(u16 glyphId, bool32 isJapanese);
};
struct KeypadIcon
{
- u16 tile_offset;
+ u16 tileOffset;
u8 width;
u8 height;
};
@@ -262,5 +263,6 @@ s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese);
void sub_80062B0(struct Sprite *sprite);
u8 CreateTextCursorSpriteForOakSpeech(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority);
void sub_8006398(u8 spriteId);
+s32 GetGlyphWidthFont6(u16 font_type, bool32 isJapanese);
#endif // GUARD_TEXT_H
diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h
index 2a520715f..a267737f5 100644
--- a/include/trainer_pokemon_sprites.h
+++ b/include/trainer_pokemon_sprites.h
@@ -14,5 +14,7 @@ u8 sub_818D97C(u8 a0, u8 a1);
u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 FreeAndDestroyTrainerPicSprite(u16);
u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass);
+u16 CreateMonPicSprite_HandleDeoxys(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
+u16 LoadMonPicInWindow(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId);
#endif // GUARD_TRAINER_POKEMON_SPRITES_H
diff --git a/include/trainer_tower.h b/include/trainer_tower.h
index b9c16d958..9cca2ea76 100644
--- a/include/trainer_tower.h
+++ b/include/trainer_tower.h
@@ -2,5 +2,8 @@
#define GUARD_TRAINER_TOWER_H
void PrintTrainerTowerRecords(void);
+void InitTrainerTowerBattleStruct(void);
+void FreeTrainerTowerBattleStruct(void);
+u8 GetTrainerTowerTrainerFrontSpriteId(void);
#endif //GUARD_TRAINER_TOWER_H
diff --git a/include/window.h b/include/window.h
index 30e73dd32..5f3630afb 100644
--- a/include/window.h
+++ b/include/window.h
@@ -63,7 +63,7 @@ void PutWindowRectTilemap(u8 windowId, u8 x, u8 y, u8 width, u8 height);
void BlitBitmapToWindow(u8 windowId, const u8 *pixels, u16 x, u16 y, u16 width, u16 height);
void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight);
void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-void CopyToWindowPixelBuffer(u8 windowId, const u8 *src, u16 size, u16 tileOffset);
+void CopyToWindowPixelBuffer(u8 windowId, const void *src, u16 size, u16 tileOffset);
void FillWindowPixelBuffer(u8 windowId, u8 fillValue);
void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue);
void CallWindowFunction(u8 windowId, WindowFunc func);
diff --git a/ld_script.txt b/ld_script.txt
index 053ee4abc..7952b2cd8 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -63,18 +63,18 @@ SECTIONS {
asm/link.o(.text);
src/multiboot.o(.text);
asm/main_menu.o(.text);
- asm/battle_controllers.o(.text);
+ src/battle_controllers.o(.text);
src/decompress.o(.text);
asm/battle_1.o(.text);
asm/battle_2.o(.text);
- asm/battle_util.o(.text);
- asm/battle_script_commands.o(.text);
- asm/battle_util2.o(.text);
- asm/battle_controller_player.o(.text);
- asm/battle_gfx_sfx_util.o(.text);
- asm/battle_controller_opponent.o(.text);
- asm/battle_ai_switch_items.o(.text);
- asm/battle_controller_link_opponent.o(.text);
+ src/battle_util.o(.text);
+ src/battle_script_commands.o(.text);
+ src/battle_util2.o(.text);
+ src/battle_controller_player.o(.text);
+ src/battle_gfx_sfx_util.o(.text);
+ src/battle_controller_opponent.o(.text);
+ src/battle_ai_switch_items.o(.text);
+ src/battle_controller_link_opponent.o(.text);
src/pokemon.o(.text);
src/trig.o(.text);
src/random.o(.text);
@@ -113,7 +113,7 @@ SECTIONS {
asm/battle_anim.o(.text);
asm/battle_anim_mons.o(.text);
src/task.o(.text);
- asm/reshow_battle_screen.o(.text);
+ src/reshow_battle_screen.o(.text);
asm/battle_anim_status_effects.o(.text);
src/title_screen.o(.text);
src/reset_save_heap.o(.text);
@@ -192,7 +192,7 @@ SECTIONS {
src/coins.o(.text);
src/fldeff_strength.o(.text);
src/battle_transition.o(.text);
- asm/battle_controller_link_partner.o(.text);
+ src/battle_controller_link_partner.o(.text);
asm/battle_message.o(.text);
src/math_util.o(.text);
src/roulette_util.o(.text);
@@ -201,7 +201,7 @@ SECTIONS {
src/mystery_event_script.o(.text);
asm/field_effect_helpers.o(.text);
asm/battle_anim_sound_tasks.o(.text);
- asm/battle_controller_safari.o(.text);
+ src/battle_controller_safari.o(.text);
src/fldeff_sweetscent.o(.text);
asm/battle_anim_effects_3.o(.text);
asm/learn_move.o(.text);
@@ -212,7 +212,7 @@ SECTIONS {
src/intro.o(.text);
asm/battle_anim_special.o(.text);
asm/hall_of_fame.o(.text);
- asm/credits.o(.text);
+ src/credits.o(.text);
src/diploma.o(.text);
asm/save_failed_screen.o(.text);
asm/clear_save_data_screen.o(.text);
@@ -380,11 +380,18 @@ SECTIONS {
src/bg_regs.o(.rodata);
src/string_util.o(.rodata);
data/data.o(.rodata);
+ src/battle_util.o(.rodata);
+ src/battle_script_commands.o(.rodata);
+ src/battle_controller_player.o(.rodata);
+ data/smokescreen.o(.rodata);
+ src/battle_controller_opponent.o(.rodata);
+ src/battle_controller_link_opponent.o(.rodata);
src/pokemon.o(.rodata);
src/trig.o(.rodata);
src/util.o(.rodata);
src/daycare.o(.rodata);
- data/data.o(.rodata.825EF0C);
+ src/battle_gfx_sfx_util.o(.rodata);
+ data/data.o(.rodata.8260270);
data/tilesets.o(.rodata);
data/maps.o(.rodata);
src/fieldmap.o(.rodata);
@@ -419,11 +426,15 @@ SECTIONS {
src/battle_records.o(.rodata);
data/data_83F5738.o(.rodata.83F6C90);
src/battle_transition.o(.rodata);
- data/data_83F5738.o(.rodata.83FB134);
+ src/battle_controller_link_partner.o(.rodata);
+ data/data_83F5738.o(.rodata.83FB218);
src/save.o(.rodata);
data/data_83FECCC.o(.rodata);
+ src/battle_controller_safari.o(.rodata);
+ data/data_83FECCC.o(.rodata.83FEDE4);
src/intro.o(.rodata);
data/data_83FECCC.o(.rodata.battle_anim_special);
+ src/credits.o(.rodata);
src/diploma.o(.rodata);
data/strings.o(.rodata);
data/data_83FECCC.o(.rodata.841EE44);
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 1650f1056..c57825b4f 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -1,16 +1,17 @@
#include "global.h"
#include "battle.h"
+#include "battle_main.h"
+#include "util.h"
#include "item.h"
+#include "random.h"
#include "pokemon.h"
+#include "battle_ai_script_commands.h"
#include "constants/species.h"
#include "constants/abilities.h"
#include "constants/battle_ai.h"
#include "constants/battle_move_effects.h"
#include "constants/moves.h"
-extern u16 Random(void);
-extern void sub_80C7164(void);
-
#define AI_ACTION_DONE 0x0001
#define AI_ACTION_FLEE 0x0002
#define AI_ACTION_WATCH 0x0004
@@ -20,8 +21,8 @@ extern void sub_80C7164(void);
#define AI_ACTION_UNK7 0x0040
#define AI_ACTION_UNK8 0x0080
-#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai))
-#define BATTLE_HISTORY ((struct BattleHistory *)(gBattleResources->battleHistory))
+#define AI_THINKING_STRUCT (gBattleResources->ai)
+#define BATTLE_HISTORY (gBattleResources->battleHistory)
// AI states
enum
@@ -32,9 +33,16 @@ enum
AIState_DoNotProcess
};
+/*
+gAIScriptPtr is a pointer to the next battle AI cmd command to read.
+when a command finishes processing, gAIScriptPtr is incremented by
+the number of bytes that the current command had reserved for arguments
+in order to read the next command correctly. refer to battle_ai_scripts.s for the
+AI scripts.
+*/
+
extern const u8 *gAIScriptPtr;
-extern u8 *BattleAIs[];
-extern u16 gLastUsedMove[];
+extern u8 *gBattleAI_ScriptsTable[];
static void BattleAICmd_if_random_less_than(void);
static void BattleAICmd_if_random_greater_than(void);
@@ -131,6 +139,11 @@ static void BattleAICmd_if_level_compare(void);
static void BattleAICmd_if_taunted(void);
static void BattleAICmd_if_not_taunted(void);
+static void RecordLastUsedMoveByTarget(void);
+static void BattleAI_DoAIProcessing(void);
+static void AIStackPushVar(const u8 *ptr);
+static bool8 AIStackPop(void);
+
typedef void (*BattleAICmdFunc)(void);
static const BattleAICmdFunc sBattleAICmdTable[] =
@@ -248,23 +261,6 @@ static const u16 sDiscouragedPowerfulMoveEffects[] =
0xFFFF
};
-// TODO: move these
-extern u8 sBattler_AI;
-extern const u32 gBitTable[]; // util.h
-extern u32 gStatuses3[]; // battle_2.h
-extern u16 gSideAffecting[2];
-extern const struct BattleMove gBattleMoves[];
-extern u16 gDynamicBasePower;
-extern u8 gMoveResultFlags;
-extern u8 gCritMultiplier;
-extern u16 gCurrentMove;
-extern s32 gBattleMoveDamage;
-
-void BattleAI_SetupAIData(void);
-void BattleAI_DoAIProcessing(void);
-void AIStackPushVar(const u8 *ptr);
-bool8 AIStackPop(void);
-
void BattleAI_HandleItemUseBeforeAISetup(void)
{
s32 i;
@@ -275,9 +271,9 @@ void BattleAI_HandleItemUseBeforeAISetup(void)
// Items are allowed to use in ONLY trainer battles.
// TODO: Use proper flags
- if ((gBattleTypeFlags & 0x8)
+ if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
&& (gTrainerBattleOpponent_A != 0x400)
- && !(gBattleTypeFlags & 0x80982)
+ && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_SAFARI | BATTLE_TYPE_LINK))
)
{
for (i = 0; i < 4; i++)
@@ -318,7 +314,7 @@ void BattleAI_SetupAIData(void)
}
gBattleResources->AI_ScriptsStack->size = 0;
- sBattler_AI = gActiveBattler;
+ gBattlerAttacker = gActiveBattler;
// Decide a random target battlerId in doubles.
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
@@ -331,7 +327,7 @@ void BattleAI_SetupAIData(void)
// There's only one choice in single battles.
else
{
- gBattlerTarget = sBattler_AI ^ BIT_SIDE;
+ gBattlerTarget = gBattlerAttacker ^ BIT_SIDE;
}
// Choose proper trainer ai scripts.
@@ -348,12 +344,12 @@ void BattleAI_SetupAIData(void)
}
else if (!(gBattleTypeFlags & (0x80900)) && (gTrainerBattleOpponent_A != 0x400)) // _080C6ECC
{
- if(gBattleTypeFlags & (0x80 << 10))
+ if (gBattleTypeFlags & (0x80 << 10))
{
AI_THINKING_STRUCT->aiFlags = 1;
return;
}
- else if(gBattleTypeFlags & (0x80 << 11))
+ else if (gBattleTypeFlags & (0x80 << 11))
{
AI_THINKING_STRUCT->aiFlags = 7;
return;
@@ -367,14 +363,14 @@ void BattleAI_SetupAIData(void)
AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags;
}
-u8 BattleAI_GetAIActionToUse(void)
+u8 BattleAI_ChooseMoveOrAction(void)
{
u8 currentMoveArray[MAX_MON_MOVES];
u8 consideredMoveArray[MAX_MON_MOVES];
u8 numOfBestMoves;
s32 i;
- sub_80C7164();
+ RecordLastUsedMoveByTarget();
while (AI_THINKING_STRUCT->aiFlags != 0)
{
if (AI_THINKING_STRUCT->aiFlags & 1)
@@ -415,7 +411,7 @@ u8 BattleAI_GetAIActionToUse(void)
return consideredMoveArray[Random() % numOfBestMoves]; // break any ties that exist.
}
-void BattleAI_DoAIProcessing(void)
+static void BattleAI_DoAIProcessing(void)
{
while (AI_THINKING_STRUCT->aiState != AIState_FinishedProcessing)
{
@@ -424,14 +420,14 @@ void BattleAI_DoAIProcessing(void)
case AIState_DoNotProcess: //Needed to match.
break;
case AIState_SettingUp:
- gAIScriptPtr = BattleAIs[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr.
- if (gBattleMons[sBattler_AI].pp[AI_THINKING_STRUCT->movesetIndex] == 0)
+ gAIScriptPtr = gBattleAI_ScriptsTable[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr.
+ if (gBattleMons[gBattlerAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0)
{
AI_THINKING_STRUCT->moveConsidered = 0; // don't consider a move you have 0 PP for, idiot.
}
else
{
- AI_THINKING_STRUCT->moveConsidered = gBattleMons[sBattler_AI].moves[AI_THINKING_STRUCT->movesetIndex];
+ AI_THINKING_STRUCT->moveConsidered = gBattleMons[gBattlerAttacker].moves[AI_THINKING_STRUCT->movesetIndex];
}
AI_THINKING_STRUCT->aiState++;
break;
@@ -458,7 +454,7 @@ void BattleAI_DoAIProcessing(void)
}
}
-void sub_80C7164(void)
+static void RecordLastUsedMoveByTarget(void)
{
s32 i;
@@ -466,30 +462,31 @@ void sub_80C7164(void)
{
if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] == 0)
{
- BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] = gLastUsedMove[gBattlerTarget];
+ BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] = gLastMoves[gBattlerTarget];
return;
}
}
}
-void sub_80C71A8(u8 a)
+// not used
+static void ClearBattlerMoveHistory(u8 battlerId)
{
s32 i;
for (i = 0; i < 8; i++)
- BATTLE_HISTORY->usedMoves[a / 2][i] = 0;
+ BATTLE_HISTORY->usedMoves[battlerId / 2][i] = MOVE_NONE;
}
-void sub_80C71D0(u8 a, u8 b)
+void RecordAbilityBattle(u8 battlerId, u8 abilityId)
{
- if (GetBattlerSide(a) == 0)
- BATTLE_HISTORY->abilities[GetBattlerPosition(a) & 1] = b;
+ if (GetBattlerSide(battlerId) == 0)
+ BATTLE_HISTORY->abilities[GetBattlerPosition(battlerId) & 1] = abilityId;
}
-void sub_80C7208(u8 a, u8 b)
+void RecordItemEffectBattle(u8 battlerId, u8 itemEffect)
{
- if (GetBattlerSide(a) == 0)
- BATTLE_HISTORY->itemEffects[GetBattlerPosition(a) & 1] = b;
+ if (GetBattlerSide(battlerId) == 0)
+ BATTLE_HISTORY->itemEffects[GetBattlerPosition(battlerId) & 1] = itemEffect;
}
static void BattleAICmd_if_random_less_than(void)
@@ -544,7 +541,7 @@ static void BattleAICmd_if_hp_less_than(void)
u16 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -559,7 +556,7 @@ static void BattleAICmd_if_hp_more_than(void)
u16 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -574,7 +571,7 @@ static void BattleAICmd_if_hp_equal(void)
u16 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -589,7 +586,7 @@ static void BattleAICmd_if_hp_not_equal(void)
u16 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -605,7 +602,7 @@ static void BattleAICmd_if_status(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -623,7 +620,7 @@ static void BattleAICmd_if_not_status(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -641,7 +638,7 @@ static void BattleAICmd_if_status2(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -659,7 +656,7 @@ static void BattleAICmd_if_not_status2(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -677,7 +674,7 @@ static void BattleAICmd_if_status3(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -695,7 +692,7 @@ static void BattleAICmd_if_not_status3(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -713,14 +710,14 @@ static void BattleAICmd_if_status4(void)
u32 arg1, arg2;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
arg1 = GetBattlerPosition(index) & 1;
arg2 = T1_READ_32(gAIScriptPtr + 2);
- if ((gSideAffecting[arg1] & arg2) != 0)
+ if ((gSideStatuses[arg1] & arg2) != 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -732,14 +729,14 @@ static void BattleAICmd_if_not_status4(void)
u32 arg1, arg2;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
arg1 = GetBattlerPosition(index) & 1;
arg2 = T1_READ_32(gAIScriptPtr + 2);
- if ((gSideAffecting[arg1] & arg2) == 0)
+ if ((gSideStatuses[arg1] & arg2) == 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -907,8 +904,8 @@ static void BattleAICmd_if_user_can_damage(void)
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleMons[sBattler_AI].moves[i] != 0
- && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].power != 0)
+ if (gBattleMons[gBattlerAttacker].moves[i] != 0
+ && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].power != 0)
break;
}
if (i == MAX_MON_MOVES)
@@ -923,8 +920,8 @@ static void BattleAICmd_if_user_cant_damage(void)
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleMons[sBattler_AI].moves[i] != 0
- && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].power != 0)
+ if (gBattleMons[gBattlerAttacker].moves[i] != 0
+ && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].power != 0)
break;
}
if (i != MAX_MON_MOVES)
@@ -944,13 +941,13 @@ static void BattleAICmd_get_type(void)
switch (gAIScriptPtr[1])
{
case 1: // player primary type
- AI_THINKING_STRUCT->funcResult = gBattleMons[sBattler_AI].type1;
+ AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerAttacker].type1;
break;
case 0: // enemy primary type
AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type1;
break;
case 3: // player secondary type
- AI_THINKING_STRUCT->funcResult = gBattleMons[sBattler_AI].type2;
+ AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerAttacker].type2;
break;
case 2: // enemy secondary type
AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type2;
@@ -992,17 +989,17 @@ static void BattleAICmd_is_most_powerful_move(void)
{
for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
{
- if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sDiscouragedPowerfulMoveEffects[i])
+ if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[checkedMove]].effect == sDiscouragedPowerfulMoveEffects[i])
break;
}
- if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE
+ if (gBattleMons[gBattlerAttacker].moves[checkedMove] != MOVE_NONE
&& sDiscouragedPowerfulMoveEffects[i] == 0xFFFF
- && gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power > 1)
+ && gBattleMoves[gBattleMons[gBattlerAttacker].moves[checkedMove]].power > 1)
{
- gCurrentMove = gBattleMons[sBattler_AI].moves[checkedMove];
- AI_CalcDmg(sBattler_AI, gBattlerTarget);
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
+ gCurrentMove = gBattleMons[gBattlerAttacker].moves[checkedMove];
+ AI_CalcDmg(gBattlerAttacker, gBattlerTarget);
+ TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
moveDmgs[checkedMove] = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[checkedMove] / 100;
if (moveDmgs[checkedMove] == 0)
moveDmgs[checkedMove] = 1;
@@ -1035,9 +1032,9 @@ static void BattleAICmd_is_most_powerful_move(void)
static void BattleAICmd_get_move(void)
{
if (gAIScriptPtr[1] == USER)
- AI_THINKING_STRUCT->funcResult = gLastUsedMove[sBattler_AI];
+ AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerAttacker];
else
- AI_THINKING_STRUCT->funcResult = gLastUsedMove[gBattlerTarget];
+ AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerTarget];
gAIScriptPtr += 2;
}
@@ -1060,7 +1057,7 @@ static void BattleAICmd_if_arg_not_equal(void)
static void BattleAICmd_if_would_go_first(void)
{
- if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) == gAIScriptPtr[1])
+ if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) == gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -1068,7 +1065,7 @@ static void BattleAICmd_if_would_go_first(void)
static void BattleAICmd_if_would_not_go_first(void)
{
- if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) != gAIScriptPtr[1])
+ if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) != gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@@ -1092,7 +1089,7 @@ static void BattleAICmd_count_alive_pokemon(void)
AI_THINKING_STRUCT->funcResult = 0;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -1145,7 +1142,7 @@ static void BattleAICmd_get_ability(void)
u8 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -1218,11 +1215,11 @@ static void BattleAICmd_get_highest_possible_damage(void)
for (i = 0; i < 4; i++)
{
gBattleMoveDamage = 40;
- gCurrentMove = gBattleMons[sBattler_AI].moves[i];
+ gCurrentMove = gBattleMons[gBattlerAttacker].moves[i];
if (gCurrentMove != 0)
{
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
+ TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
if (gBattleMoveDamage == 120) // Super effective STAB.
gBattleMoveDamage = AI_EFFECTIVENESS_x2;
@@ -1257,7 +1254,7 @@ static void BattleAICmd_if_type_effectiveness(void)
gBattleMoveDamage = AI_EFFECTIVENESS_x1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
+ TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
if (gBattleMoveDamage == 120) // Super effective STAB.
gBattleMoveDamage = AI_EFFECTIVENESS_x2;
@@ -1373,7 +1370,7 @@ static void BattleAICmd_get_weather(void)
AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_RAIN;
if (gBattleWeather & WEATHER_SANDSTORM_ANY)
AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_SANDSTORM;
- if (gBattleWeather & WEATHER_SUNNY_ANY)
+ if (gBattleWeather & WEATHER_SUN_ANY)
AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_SUNNY;
if (gBattleWeather & WEATHER_HAIL)
AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_HAIL;
@@ -1402,7 +1399,7 @@ static void BattleAICmd_if_stat_level_less_than(void)
u32 party;
if (gAIScriptPtr[1] == USER)
- party = sBattler_AI;
+ party = gBattlerAttacker;
else
party = gBattlerTarget;
@@ -1417,7 +1414,7 @@ static void BattleAICmd_if_stat_level_more_than(void)
u32 party;
if (gAIScriptPtr[1] == USER)
- party = sBattler_AI;
+ party = gBattlerAttacker;
else
party = gBattlerTarget;
@@ -1432,7 +1429,7 @@ static void BattleAICmd_if_stat_level_equal(void)
u32 party;
if (gAIScriptPtr[1] == USER)
- party = sBattler_AI;
+ party = gBattlerAttacker;
else
party = gBattlerTarget;
@@ -1447,7 +1444,7 @@ static void BattleAICmd_if_stat_level_not_equal(void)
u32 party;
if (gAIScriptPtr[1] == USER)
- party = sBattler_AI;
+ party = gBattlerAttacker;
else
party = gBattlerTarget;
@@ -1471,8 +1468,8 @@ static void BattleAICmd_if_can_faint(void)
gMoveResultFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
- AI_CalcDmg(sBattler_AI, gBattlerTarget);
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
+ AI_CalcDmg(gBattlerAttacker, gBattlerTarget);
+ TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100;
@@ -1500,8 +1497,8 @@ static void BattleAICmd_if_cant_faint(void)
gMoveResultFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
- AI_CalcDmg(sBattler_AI, gBattlerTarget);
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
+ AI_CalcDmg(gBattlerAttacker, gBattlerTarget);
+ TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100;
@@ -1524,7 +1521,7 @@ static void BattleAICmd_if_has_move(void)
case 3:
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleMons[sBattler_AI].moves[i] == *temp_ptr)
+ if (gBattleMons[gBattlerAttacker].moves[i] == *temp_ptr)
break;
}
if (i == MAX_MON_MOVES)
@@ -1558,7 +1555,7 @@ static void BattleAICmd_if_dont_have_move(void)
case 3:
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleMons[sBattler_AI].moves[i] == *temp_ptr)
+ if (gBattleMons[gBattlerAttacker].moves[i] == *temp_ptr)
break;
}
if (i != MAX_MON_MOVES)
@@ -1591,7 +1588,7 @@ static void BattleAICmd_if_move_effect(void)
case 3:
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].effect == gAIScriptPtr[2])
+ if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == gAIScriptPtr[2])
break;
}
if (i != MAX_MON_MOVES)
@@ -1603,7 +1600,7 @@ static void BattleAICmd_if_move_effect(void)
case 2:
for (i = 0; i < 8; i++)
{
- if (gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == gAIScriptPtr[2])
+ if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == gAIScriptPtr[2])
break;
}
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
@@ -1620,7 +1617,7 @@ static void BattleAICmd_if_not_move_effect(void)
case 3:
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].effect == gAIScriptPtr[2])
+ if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == gAIScriptPtr[2])
break;
}
if (i != MAX_MON_MOVES)
@@ -1644,13 +1641,13 @@ static void BattleAICmd_if_last_move_did_damage(void)
u8 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
if (gAIScriptPtr[2] == 0)
{
- if (gDisableStructs[index].disabledMove == 0)
+ if (gDisableStructs[index].disabledMove == MOVE_NONE)
{
gAIScriptPtr += 7;
return;
@@ -1663,7 +1660,7 @@ static void BattleAICmd_if_last_move_did_damage(void)
gAIScriptPtr += 7;
return;
}
- else if (gDisableStructs[index].encoredMove != 0)
+ else if (gDisableStructs[index].encoredMove != MOVE_NONE)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
return;
@@ -1707,22 +1704,22 @@ static void BattleAICmd_frlg_safari(void)
{
u8 var;
- if(gBattleStruct->safariGoNearCounter)
+ if (gBattleStruct->safariGoNearCounter)
{
var = gBattleStruct->safariEscapeFactor * 2;
- if(var > 20)
+ if (var > 20)
var = 20;
}
- else if(gBattleStruct->safariPkblThrowCounter != 0) // _080C91DC
+ else if (gBattleStruct->safariPkblThrowCounter != 0) // _080C91DC
{
var = gBattleStruct->safariEscapeFactor / 4;
- if(var == 0)
+ if (var == 0)
var = 1;
}
else
var = gBattleStruct->safariEscapeFactor;
var *= 5;
- if((u8)(Random() % 100) < var)
+ if ((u8)(Random() % 100) < var)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
@@ -1739,7 +1736,7 @@ static void BattleAICmd_get_hold_effect(void)
u16 side;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -1759,7 +1756,7 @@ static void BattleAICmd_get_gender(void)
u8 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -1773,7 +1770,7 @@ static void BattleAICmd_is_first_turn(void)
u8 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -1787,7 +1784,7 @@ static void BattleAICmd_get_stockpile_count(void)
u8 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -1808,17 +1805,11 @@ static void BattleAICmd_get_used_held_item(void)
u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
+ battlerId = gBattlerAttacker;
else
battlerId = gBattlerTarget;
-
// This is likely a leftover from Ruby's code and its ugly ewram access.
- #ifdef NONMATCHING
- AI_THINKING_STRUCT->funcResult = gBattleStruct->usedHeldItems[battlerId];
- #else
- AI_THINKING_STRUCT->funcResult = *(u8*)((u8*)(gBattleStruct) + offsetof(struct BattleStruct, usedHeldItems) + (battlerId * 2));
- #endif // NONMATCHING
-
+ AI_THINKING_STRUCT->funcResult = ((u8 *)gBattleStruct->usedHeldItems)[battlerId * 2];
gAIScriptPtr += 2;
}
@@ -1848,7 +1839,7 @@ static void BattleAICmd_get_protect_count(void)
u8 index;
if (gAIScriptPtr[1] == USER)
- index = sBattler_AI;
+ index = gBattlerAttacker;
else
index = gBattlerTarget;
@@ -1903,7 +1894,7 @@ static void BattleAICmd_if_level_compare(void)
switch (gAIScriptPtr[1])
{
case 0: // greater than
- if (gBattleMons[sBattler_AI].level > gBattleMons[gBattlerTarget].level)
+ if (gBattleMons[gBattlerAttacker].level > gBattleMons[gBattlerTarget].level)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
@@ -1911,7 +1902,7 @@ static void BattleAICmd_if_level_compare(void)
gAIScriptPtr += 6;
return;
case 1: // less than
- if (gBattleMons[sBattler_AI].level < gBattleMons[gBattlerTarget].level)
+ if (gBattleMons[gBattlerAttacker].level < gBattleMons[gBattlerTarget].level)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
@@ -1919,7 +1910,7 @@ static void BattleAICmd_if_level_compare(void)
gAIScriptPtr += 6;
return;
case 2: // equal
- if (gBattleMons[sBattler_AI].level == gBattleMons[gBattlerTarget].level)
+ if (gBattleMons[gBattlerAttacker].level == gBattleMons[gBattlerTarget].level)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
@@ -1931,7 +1922,7 @@ static void BattleAICmd_if_level_compare(void)
static void BattleAICmd_if_taunted(void)
{
- if (gDisableStructs[gBattlerTarget].tauntTimer1 != 0)
+ if (gDisableStructs[gBattlerTarget].tauntTimer != 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
@@ -1939,24 +1930,24 @@ static void BattleAICmd_if_taunted(void)
static void BattleAICmd_if_not_taunted(void)
{
- if (gDisableStructs[gBattlerTarget].tauntTimer1 == 0)
+ if (gDisableStructs[gBattlerTarget].tauntTimer == 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
-void AIStackPushVar(const u8 *var)
+static void AIStackPushVar(const u8 *var)
{
gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = var;
}
// unused
-void AIStackPushVar_cursor(void)
+static void AIStackPushVar_cursor(void)
{
gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = gAIScriptPtr;
}
-bool8 AIStackPop(void)
+static bool8 AIStackPop(void)
{
if (gBattleResources->AI_ScriptsStack->size != 0)
{
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
new file mode 100644
index 000000000..5d642bda9
--- /dev/null
+++ b/src/battle_ai_switch_items.c
@@ -0,0 +1,676 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "pokemon.h"
+#include "random.h"
+#include "util.h"
+#include "constants/abilities.h"
+#include "constants/item_effects.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/species.h"
+#include "constants/pokemon.h"
+
+static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng);
+static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent);
+static bool8 ShouldUseItem(void);
+
+static bool8 ShouldSwitchIfPerishSong(void)
+{
+ if (gStatuses3[gActiveBattler] & STATUS3_PERISH_SONG
+ && gDisableStructs[gActiveBattler].perishSongTimer == 0)
+ {
+ *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) = PARTY_SIZE;
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static bool8 ShouldSwitchIfWonderGuard(void)
+{
+ u8 opposingBattler;
+ u8 moveFlags;
+ s32 i, j;
+ u16 move;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ return FALSE;
+ if (gBattleMons[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)].ability == ABILITY_WONDER_GUARD)
+ {
+ // Check if Pokemon has a super effective move.
+ for (opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ move = gBattleMons[gActiveBattler].moves[i];
+ if (move == MOVE_NONE)
+ continue;
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
+ if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ return FALSE;
+ }
+ // Find a Pokemon in the party that has a super effective move.
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0
+ || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
+ || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG
+ || i == gBattlerPartyIndexes[gActiveBattler])
+ continue;
+ GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); // Unused return value.
+ GetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM); // Unused return value.
+ for (opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), j = 0; j < MAX_MON_MOVES; ++j)
+ {
+ move = GetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j);
+ if (move == MOVE_NONE)
+ continue;
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
+ if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % 3 < 2)
+ {
+ // We found a mon.
+ *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) = i;
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE; // There is not a single Pokemon in the party that has a super effective move against a mon with Wonder Guard.
+}
+
+static bool8 FindMonThatAbsorbsOpponentsMove(void)
+{
+ u8 battlerIn1, battlerIn2;
+ u8 absorbingTypeAbility;
+ s32 i;
+
+ if ((HasSuperEffectiveMoveAgainstOpponents(TRUE) && Random() % 3)
+ || (gLastLandedMoves[gActiveBattler] == MOVE_NONE))
+ return FALSE;
+ if (gLastLandedMoves[gActiveBattler] == 0xFFFF
+ || gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0)
+ return FALSE;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ battlerIn1 = gActiveBattler;
+ if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))])
+ battlerIn2 = gActiveBattler;
+ else
+ battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)));
+ }
+ else
+ {
+ battlerIn1 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
+ }
+ if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_FIRE)
+ absorbingTypeAbility = ABILITY_FLASH_FIRE;
+ else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_WATER)
+ absorbingTypeAbility = ABILITY_WATER_ABSORB;
+ else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_ELECTRIC)
+ absorbingTypeAbility = ABILITY_VOLT_ABSORB;
+ else
+ return FALSE;
+ if (gBattleMons[gActiveBattler].ability == absorbingTypeAbility)
+ return FALSE;
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ u16 species;
+ u8 monAbility;
+
+ if ((GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0)
+ || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE)
+ || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ || (i == gBattlerPartyIndexes[battlerIn1])
+ || (i == gBattlerPartyIndexes[battlerIn2])
+ || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
+ || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)))
+ continue;
+ species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES);
+ if (GetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM) != ABILITY_NONE)
+ monAbility = gBaseStats[species].abilities[1];
+ else
+ monAbility = gBaseStats[species].abilities[0];
+ if (absorbingTypeAbility == monAbility && Random() & 1)
+ {
+ // we found a mon
+ *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) = i;
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static bool8 ShouldSwitchIfNaturalCure(void)
+{
+ if (!(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
+ || (gBattleMons[gActiveBattler].ability != ABILITY_NATURAL_CURE)
+ || (gBattleMons[gActiveBattler].hp < gBattleMons[gActiveBattler].maxHP / 2))
+ return FALSE;
+ if ((gLastLandedMoves[gActiveBattler] == MOVE_NONE || gLastLandedMoves[gActiveBattler] == 0xFFFF) && Random() & 1)
+ {
+ *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) = PARTY_SIZE;
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0 && Random() & 1)
+ {
+ *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) = PARTY_SIZE;
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ if (FindMonWithFlagsAndSuperEffective(MOVE_RESULT_DOESNT_AFFECT_FOE, 1)
+ || FindMonWithFlagsAndSuperEffective(MOVE_RESULT_NOT_VERY_EFFECTIVE, 1))
+ return TRUE;
+ if (Random() & 1)
+ {
+ *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) = PARTY_SIZE;
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
+{
+ u8 opposingBattler;
+ s32 i;
+ u8 moveFlags;
+ u16 move;
+
+ opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ if (!(gAbsentBattlerFlags & gBitTable[opposingBattler]))
+ {
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ move = gBattleMons[gActiveBattler].moves[i];
+ if (move == MOVE_NONE)
+ continue;
+
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
+ if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ {
+ if (noRng || (Random() % 10))
+ return TRUE;
+ }
+ }
+ }
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ return FALSE;
+ opposingBattler = GetBattlerAtPosition(BATTLE_PARTNER(B_POSITION_PLAYER_LEFT));
+ if (!(gAbsentBattlerFlags & gBitTable[opposingBattler]))
+ {
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ move = gBattleMons[gActiveBattler].moves[i];
+ if (move == MOVE_NONE)
+ continue;
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
+ if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ {
+ if (noRng)
+ return TRUE;
+ if (Random() % 10 != 0)
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+static bool8 AreStatsRaised(void)
+{
+ u8 buffedStatsValue = 0;
+ s32 i;
+
+ for (i = 0; i < NUM_BATTLE_STATS; ++i)
+ {
+ if (gBattleMons[gActiveBattler].statStages[i] > 6)
+ buffedStatsValue += gBattleMons[gActiveBattler].statStages[i] - 6;
+ }
+ return (buffedStatsValue > 3);
+}
+
+static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
+{
+ u8 battlerIn1, battlerIn2;
+ s32 i, j;
+ u16 move;
+ u8 moveFlags;
+
+ if (gLastLandedMoves[gActiveBattler] == 0)
+ return FALSE;
+ if ((gLastLandedMoves[gActiveBattler] == 0xFFFF)
+ || (gLastHitBy[gActiveBattler] == 0xFF)
+ || (gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0))
+ return FALSE;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ battlerIn1 = gActiveBattler;
+ if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))])
+ battlerIn2 = gActiveBattler;
+ else
+ battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)));
+ }
+ else
+ {
+ battlerIn1 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
+ }
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ u16 species;
+ u8 monAbility;
+
+ if ((GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0)
+ || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE)
+ || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ || (i == gBattlerPartyIndexes[battlerIn1])
+ || (i == gBattlerPartyIndexes[battlerIn2])
+ || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
+ || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)))
+ continue;
+ species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES);
+ if (GetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM) != ABILITY_NONE)
+ monAbility = gBaseStats[species].abilities[1];
+ else
+ monAbility = gBaseStats[species].abilities[0];
+ moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBattler], species, monAbility);
+ if (moveFlags & flags)
+ {
+ battlerIn1 = gLastHitBy[gActiveBattler];
+ for (j = 0; j < MAX_MON_MOVES; ++j)
+ {
+ move = GetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j);
+ if (move == MOVE_NONE)
+ continue;
+ moveFlags = AI_TypeCalc(move, gBattleMons[battlerIn1].species, gBattleMons[battlerIn1].ability);
+ if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % moduloPercent == 0)
+ {
+ *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) = i;
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
+static bool8 ShouldSwitch(void)
+{
+ u8 battlerIn1, battlerIn2;
+ s32 i;
+ s32 availableToSwitch;
+
+ if ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
+ || (gStatuses3[gActiveBattler] & STATUS3_ROOTED)
+ || AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_SHADOW_TAG, 0, 0)
+ || AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_ARENA_TRAP, 0, 0))
+ return FALSE; // misses the flying or levitate check
+ if (AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MAGNET_PULL, 0, 0))
+ if ((gBattleMons[gActiveBattler].type1 == TYPE_STEEL) || (gBattleMons[gActiveBattler].type2 == TYPE_STEEL))
+ return FALSE;
+ availableToSwitch = 0;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ battlerIn1 = gActiveBattler;
+ if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)])
+ battlerIn2 = gActiveBattler;
+ else
+ battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK);
+ }
+ else
+ {
+ battlerIn2 = gActiveBattler;
+ battlerIn1 = gActiveBattler;
+ }
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if ((GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0)
+ || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE)
+ || (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ || (i == gBattlerPartyIndexes[battlerIn1])
+ || (i == gBattlerPartyIndexes[battlerIn2])
+ || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
+ || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)))
+ continue;
+ ++availableToSwitch;
+ }
+ if (!availableToSwitch)
+ return FALSE;
+ if (ShouldSwitchIfPerishSong()
+ || ShouldSwitchIfWonderGuard()
+ || FindMonThatAbsorbsOpponentsMove()
+ || ShouldSwitchIfNaturalCure())
+ return TRUE;
+ if (HasSuperEffectiveMoveAgainstOpponents(FALSE)
+ || AreStatsRaised())
+ return FALSE;
+ if (FindMonWithFlagsAndSuperEffective(MOVE_RESULT_DOESNT_AFFECT_FOE, 2)
+ || FindMonWithFlagsAndSuperEffective(MOVE_RESULT_NOT_VERY_EFFECTIVE, 3))
+ return TRUE;
+ return FALSE;
+}
+
+void AI_TrySwitchOrUseItem(void)
+{
+ u8 battlerIn1, battlerIn2;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ if (ShouldSwitch())
+ {
+ if (*(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) == 6)
+ {
+ s32 monToSwitchId = GetMostSuitableMonToSwitchInto();
+ if (monToSwitchId == 6)
+ {
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ battlerIn2 = battlerIn1;
+ }
+ else
+ {
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ }
+ for (monToSwitchId = 0; monToSwitchId < PARTY_SIZE; ++monToSwitchId)
+ {
+ if ((!GetMonData(&gEnemyParty[monToSwitchId], MON_DATA_HP) == 0)
+ && (monToSwitchId != gBattlerPartyIndexes[battlerIn1])
+ && (monToSwitchId != gBattlerPartyIndexes[battlerIn2])
+ && (monToSwitchId != *(gBattleStruct->monToSwitchIntoId + battlerIn1))
+ && (monToSwitchId != *(gBattleStruct->monToSwitchIntoId + battlerIn2)))
+ break;
+ }
+ }
+ *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1)) = monToSwitchId;
+ }
+ *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = *(gBattleStruct->AI_monToSwitchIntoId + (GetBattlerPosition(gActiveBattler) >> 1));
+ return;
+ }
+ else if (ShouldUseItem())
+ {
+ return;
+ }
+ }
+ BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, (gActiveBattler ^ BIT_SIDE) << 8);
+}
+
+static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8 *var)
+{
+ s32 i = 0;
+
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ i += 3;
+ continue;
+ }
+ else if (TYPE_EFFECT_ATK_TYPE(i) == atkType)
+ {
+ // Check type1.
+ if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
+ *var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
+ // Check type2.
+ if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
+ *var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
+ }
+ i += 3;
+ }
+}
+
+u8 GetMostSuitableMonToSwitchInto(void)
+{
+ u8 opposingBattler;
+ u8 bestDmg; // Note : should be changed to u32 for obvious reasons.
+ u8 bestMonId;
+ u8 battlerIn1, battlerIn2;
+ s32 i, j;
+ u8 invalidMons;
+ u16 move;
+
+ if (*(gBattleStruct->monToSwitchIntoId + gActiveBattler) != PARTY_SIZE)
+ return *(gBattleStruct->monToSwitchIntoId + gActiveBattler);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ battlerIn1 = gActiveBattler;
+ if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)])
+ battlerIn2 = gActiveBattler;
+ else
+ battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK);
+ // UB: It considers the opponent only player's side even though it can battle alongside player.
+ opposingBattler = Random() & BIT_FLANK;
+ if (gAbsentBattlerFlags & gBitTable[opposingBattler])
+ opposingBattler ^= BIT_FLANK;
+ }
+ else
+ {
+ opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ battlerIn1 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
+ }
+ invalidMons = 0;
+ while (invalidMons != 0x3F) // All mons are invalid.
+ {
+ bestDmg = 0;
+ bestMonId = 6;
+ // Find the mon whose type is the most suitable offensively.
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ u16 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES);
+ if (species != SPECIES_NONE
+ && GetMonData(&gEnemyParty[i], MON_DATA_HP) != 0
+ && !(gBitTable[i] & invalidMons)
+ && gBattlerPartyIndexes[battlerIn1] != i
+ && gBattlerPartyIndexes[battlerIn2] != i
+ && i != *(gBattleStruct->monToSwitchIntoId + battlerIn1)
+ && i != *(gBattleStruct->monToSwitchIntoId + battlerIn2))
+ {
+ u8 type1 = gBaseStats[species].type1;
+ u8 type2 = gBaseStats[species].type2;
+ u8 typeDmg = 10;
+ ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type1, type1, type2, &typeDmg);
+ ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type2, type1, type2, &typeDmg);
+ if (bestDmg < typeDmg)
+ {
+ bestDmg = typeDmg;
+ bestMonId = i;
+ }
+ }
+ else
+ {
+ invalidMons |= gBitTable[i];
+ }
+ }
+ // Ok, we know the mon has the right typing but does it have at least one super effective move?
+ if (bestMonId != PARTY_SIZE)
+ {
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ move = GetMonData(&gEnemyParty[bestMonId], MON_DATA_MOVE1 + i);
+ if (move != MOVE_NONE && TypeCalc(move, gActiveBattler, opposingBattler) & MOVE_RESULT_SUPER_EFFECTIVE)
+ break;
+ }
+ if (i != MAX_MON_MOVES)
+ return bestMonId; // Has both the typing and at least one super effective move.
+
+ invalidMons |= gBitTable[bestMonId]; // Sorry buddy, we want something better.
+ }
+ else
+ {
+ invalidMons = 0x3F; // No viable mon to switch.
+ }
+ }
+ gDynamicBasePower = 0;
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleScripting.dmgMultiplier = 1;
+ gMoveResultFlags = 0;
+ gCritMultiplier = 1;
+ bestDmg = 0;
+ bestMonId = 6;
+ // If we couldn't find the best mon in terms of typing, find the one that deals most damage.
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (((u16)(GetMonData(&gEnemyParty[i], MON_DATA_SPECIES)) == SPECIES_NONE)
+ || (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0)
+ || (gBattlerPartyIndexes[battlerIn1] == i)
+ || (gBattlerPartyIndexes[battlerIn2] == i)
+ || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
+ || (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)))
+ continue;
+ for (j = 0; j < MAX_MON_MOVES; ++j)
+ {
+ move = GetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j);
+ gBattleMoveDamage = 0;
+ if (move != MOVE_NONE && gBattleMoves[move].power != 1)
+ {
+ AI_CalcDmg(gActiveBattler, opposingBattler);
+ TypeCalc(move, gActiveBattler, opposingBattler);
+ }
+ if (bestDmg < gBattleMoveDamage)
+ {
+ bestDmg = gBattleMoveDamage;
+ bestMonId = i;
+ }
+ }
+ }
+ return bestMonId;
+}
+
+static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u16 as item Id argument
+{
+ if (itemId == ITEM_FULL_RESTORE)
+ return AI_ITEM_FULL_RESTORE;
+ else if (itemEffect[4] & ITEM4_HEAL_HP)
+ return AI_ITEM_HEAL_HP;
+ else if (itemEffect[3] & ITEM3_STATUS_ALL)
+ return AI_ITEM_CURE_CONDITION;
+ else if (itemEffect[0] & (ITEM0_HIGH_CRIT | ITEM0_X_ATTACK) || itemEffect[1] != 0 || itemEffect[2] != 0)
+ return AI_ITEM_X_STAT;
+ else if (itemEffect[3] & ITEM3_MIST)
+ return AI_ITEM_GUARD_SPECS;
+ else
+ return AI_ITEM_NOT_RECOGNIZABLE;
+}
+
+static bool8 ShouldUseItem(void)
+{
+ s32 i;
+ u8 validMons = 0;
+ bool8 shouldUse = FALSE;
+
+ for (i = 0; i < PARTY_SIZE; ++i)
+ if (GetMonData(&gEnemyParty[i], MON_DATA_HP) != 0
+ && GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) != SPECIES_EGG)
+ ++validMons;
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ u16 item;
+ const u8 *itemEffects;
+ u8 paramOffset;
+ u8 battlerSide;
+
+ if (i && validMons > (gBattleResources->battleHistory->itemsNo - i) + 1)
+ continue;
+ item = gBattleResources->battleHistory->trainerItems[i];
+ if (item == ITEM_NONE || gItemEffectTable[item - ITEM_POTION] == NULL)
+ continue;
+ if (item == ITEM_ENIGMA_BERRY)
+ itemEffects = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ else
+ itemEffects = gItemEffectTable[item - ITEM_POTION];
+ *(gBattleStruct->AI_itemType + gActiveBattler / 2) = GetAI_ItemType(item, itemEffects);
+ switch (*(gBattleStruct->AI_itemType + gActiveBattler / 2))
+ {
+ case AI_ITEM_FULL_RESTORE:
+ if (gBattleMons[gActiveBattler].hp >= gBattleMons[gActiveBattler].maxHP / 4)
+ break;
+ if (gBattleMons[gActiveBattler].hp == 0)
+ break;
+ shouldUse = TRUE;
+ break;
+ case AI_ITEM_HEAL_HP:
+ paramOffset = GetItemEffectParamOffset(item, 4, 4);
+ if (paramOffset == 0 || gBattleMons[gActiveBattler].hp == 0)
+ break;
+ if (gBattleMons[gActiveBattler].hp < gBattleMons[gActiveBattler].maxHP / 4 || gBattleMons[gActiveBattler].maxHP - gBattleMons[gActiveBattler].hp > itemEffects[paramOffset])
+ shouldUse = TRUE;
+ break;
+ case AI_ITEM_CURE_CONDITION:
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0;
+ if (itemEffects[3] & ITEM3_SLEEP && gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
+ {
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x20;
+ shouldUse = TRUE;
+ }
+ if (itemEffects[3] & ITEM3_POISON && (gBattleMons[gActiveBattler].status1 & STATUS1_POISON || gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON))
+ {
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x10;
+ shouldUse = TRUE;
+ }
+ if (itemEffects[3] & ITEM3_BURN && gBattleMons[gActiveBattler].status1 & STATUS1_BURN)
+ {
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x8;
+ shouldUse = TRUE;
+ }
+ if (itemEffects[3] & ITEM3_FREEZE && gBattleMons[gActiveBattler].status1 & STATUS1_FREEZE)
+ {
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x4;
+ shouldUse = TRUE;
+ }
+ if (itemEffects[3] & ITEM3_PARALYSIS && gBattleMons[gActiveBattler].status1 & STATUS1_PARALYSIS)
+ {
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x2;
+ shouldUse = TRUE;
+ }
+ if (itemEffects[3] & ITEM3_CONFUSION && gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION)
+ {
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x1;
+ shouldUse = TRUE;
+ }
+ break;
+ case AI_ITEM_X_STAT:
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0;
+ if (!gDisableStructs[gActiveBattler].isFirstTurn)
+ break;
+ if (itemEffects[0] & ITEM0_X_ATTACK)
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x1;
+ if (itemEffects[1] & ITEM1_X_DEFEND)
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x2;
+ if (itemEffects[1] & ITEM1_X_SPEED)
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x4;
+ if (itemEffects[2] & ITEM2_X_SPATK)
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x8;
+ if (itemEffects[2] & ITEM2_X_ACCURACY)
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x20;
+ if (itemEffects[0] & ITEM0_HIGH_CRIT)
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x80;
+ shouldUse = TRUE;
+ break;
+ case AI_ITEM_GUARD_SPECS:
+ battlerSide = GetBattlerSide(gActiveBattler);
+ if (gDisableStructs[gActiveBattler].isFirstTurn && gSideTimers[battlerSide].mistTimer == 0)
+ shouldUse = TRUE;
+ break;
+ case AI_ITEM_NOT_RECOGNIZABLE:
+ return FALSE;
+ }
+ if (shouldUse)
+ {
+ BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0);
+ *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2) = item;
+ gBattleResources->battleHistory->trainerItems[i] = 0;
+ return shouldUse;
+ }
+ }
+ return FALSE;
+}
diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c
index 27e6ef28c..88fbce6da 100644
--- a/src/battle_anim_mon_movement.c
+++ b/src/battle_anim_mon_movement.c
@@ -6,43 +6,91 @@
#define abs(x) ((x) < 0 ? -(x) : (x))
-void sub_8098A6C(u8 taskId);
-void sub_8098C08(u8 taskId);
-void sub_8098D54(u8 taskId);
-void sub_8098EF0(u8 taskId);
-void sub_8099004(u8 taskId);
-void sub_80990AC(struct Sprite * sprite);
-void sub_8099120(struct Sprite * sprite);
-void sub_8099144(struct Sprite * sprite);
-void sub_8099190(struct Sprite * sprite);
-void sub_80991B4(struct Sprite * sprite);
-void sub_8099270(struct Sprite * sprite);
-void sub_80992E0(struct Sprite * sprite);
-void sub_8099394(struct Sprite * sprite);
-void sub_809946C(struct Sprite * sprite);
-void sub_8099530(u8 taskId);
-void sub_8099594(u8 taskId);
-void sub_80996B8(u8 taskId);
-void sub_8099788(u8 taskId);
-void sub_8099908(u8 taskId);
-void sub_8099B54(u8 taskId);
-void sub_8099CB8(u8 taskId);
-
-const struct SpriteTemplate gUnknown_83D4E4C[] = {
- {
- 0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80990AC
- }, {
- 0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8099144
- }, {
- 0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80991B4
- }, {
- 0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80992E0
- }, {
- 0, 0, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8099394
- }
+static void AnimTask_ShakeMonStep(u8 taskId);
+static void AnimTask_ShakeMon2Step(u8 taskId);
+static void AnimTask_ShakeMonInPlaceStep(u8 taskId);
+static void AnimTask_ShakeAndSinkMonStep(u8 taskId);
+static void AnimTask_TranslateMonEllipticalStep(u8 taskId);
+static void DoHorizontalLunge(struct Sprite * sprite);
+static void ReverseHorizontalLungeDirection(struct Sprite * sprite);
+static void DoVerticalDip(struct Sprite * sprite);
+static void ReverseVerticalDipDirection(struct Sprite * sprite);
+static void SlideMonToOriginalPos(struct Sprite * sprite);
+static void SlideMonToOriginalPosStep(struct Sprite * sprite);
+static void SlideMonToOffset(struct Sprite * sprite);
+static void sub_8099394(struct Sprite * sprite);
+static void sub_809946C(struct Sprite * sprite);
+static void AnimTask_WindUpLungePart1(u8 taskId);
+static void AnimTask_WindUpLungePart2(u8 taskId);
+static void sub_80996B8(u8 taskId);
+static void AnimTask_SwayMonStep(u8 taskId);
+static void AnimTask_ScaleMonAndRestoreStep(u8 taskId);
+static void sub_8099B54(u8 taskId);
+static void sub_8099CB8(u8 taskId);
+
+const struct SpriteTemplate gHorizontalLungeSpriteTemplate =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = DoHorizontalLunge,
+};
+
+const struct SpriteTemplate gVerticalDipSpriteTemplate =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = DoVerticalDip,
+};
+
+const struct SpriteTemplate gSlideMonToOriginalPosSpriteTemplate =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SlideMonToOriginalPos,
+};
+
+const struct SpriteTemplate gSlideMonToOffsetSpriteTemplate =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SlideMonToOffset,
+};
+
+const struct SpriteTemplate gUnknown_83D4EB4 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8099394,
};
-void sub_80989F8(u8 taskId)
+// Task to facilitate simple shaking of a pokemon's picture in battle.
+// The shaking alternates between the original position and the target position.
+// arg 0: anim battler
+// arg 1: x pixel offset
+// arg 2: y pixel offset
+// arg 3: num times to shake
+// arg 4: frame delay
+void AnimTask_ShakeMon(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
@@ -58,12 +106,12 @@ void sub_80989F8(u8 taskId)
gTasks[taskId].data[3] = gBattleAnimArgs[4];
gTasks[taskId].data[4] = gBattleAnimArgs[1];
gTasks[taskId].data[5] = gBattleAnimArgs[2];
- gTasks[taskId].func = sub_8098A6C;
+ gTasks[taskId].func = AnimTask_ShakeMonStep;
gTasks[taskId].func(taskId);
}
}
-void sub_8098A6C(u8 taskId)
+static void AnimTask_ShakeMonStep(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
{
@@ -87,7 +135,14 @@ void sub_8098A6C(u8 taskId)
gTasks[taskId].data[3]--;
}
-void sub_8098B1C(u8 taskId)
+// Task to facilitate simple shaking of a pokemon's picture in battle.
+// The shaking alternates between the positive and negative versions of the specified pixel offsets.
+// arg 0: anim battler
+// arg 1: x pixel offset
+// arg 2: y pixel offset
+// arg 3: num times to shake
+// arg 4: frame delay
+void AnimTask_ShakeMon2(u8 taskId)
{
bool8 abort = FALSE;
u8 spriteId;
@@ -116,7 +171,7 @@ void sub_8098B1C(u8 taskId)
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
break;
}
- if (!sub_8072DF0(battlerId))
+ if (!IsBattlerSpriteVisible(battlerId))
abort = TRUE;
spriteId = gBattlerSpriteIds[battlerId];
}
@@ -134,12 +189,12 @@ void sub_8098B1C(u8 taskId)
gTasks[taskId].data[3] = gBattleAnimArgs[4];
gTasks[taskId].data[4] = gBattleAnimArgs[1];
gTasks[taskId].data[5] = gBattleAnimArgs[2];
- gTasks[taskId].func = sub_8098C08;
+ gTasks[taskId].func = AnimTask_ShakeMon2Step;
gTasks[taskId].func(taskId);
}
}
-void sub_8098C08(u8 taskId)
+static void AnimTask_ShakeMon2Step(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
{
@@ -163,7 +218,15 @@ void sub_8098C08(u8 taskId)
gTasks[taskId].data[3]--;
}
-void sub_8098CD0(u8 taskId)
+// Task to facilitate simple shaking of a pokemon's picture in battle.
+// The shaking alternates between the positive and negative versions of the specified pixel offsets
+// with respect to the current location of the mon's picture.
+// arg 0: battler
+// arg 1: x offset
+// arg 2: y offset
+// arg 3: num shakes
+// arg 4: delay
+void AnimTask_ShakeMonInPlace(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
@@ -180,12 +243,12 @@ void sub_8098CD0(u8 taskId)
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[1] * 2;
gTasks[taskId].data[6] = gBattleAnimArgs[2] * 2;
- gTasks[taskId].func = sub_8098D54;
+ gTasks[taskId].func = AnimTask_ShakeMonInPlaceStep;
gTasks[taskId].func(taskId);
}
}
-void sub_8098D54(u8 taskId)
+static void AnimTask_ShakeMonInPlaceStep(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
{
@@ -219,7 +282,13 @@ void sub_8098D54(u8 taskId)
gTasks[taskId].data[3]--;
}
-void sub_8098E90(u8 taskId)
+// Shakes a mon bg horizontally and moves it downward linearly.
+// arg 0: battler
+// arg 1: x offset
+// arg 2: frame delay between each movement
+// arg 3: downward speed (subpixel)
+// arg 4: duration
+void AnimTask_ShakeAndSinkMon(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
@@ -229,11 +298,11 @@ void sub_8098E90(u8 taskId)
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
- gTasks[taskId].func = sub_8098EF0;
+ gTasks[taskId].func = AnimTask_ShakeAndSinkMonStep;
gTasks[taskId].func(taskId);
}
-void sub_8098EF0(u8 taskId)
+static void AnimTask_ShakeAndSinkMonStep(u8 taskId)
{
u8 spriteId = gTasks[taskId].data[0];
s16 data1 = gTasks[taskId].data[1];
@@ -251,25 +320,32 @@ void sub_8098EF0(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_8098F84(u8 taskId)
+// Moves a mon bg picture along an elliptical path that begins
+// and ends at the mon's origin location.
+// arg 0: battler
+// arg 1: ellipse width
+// arg 2: ellipse height
+// arg 3: num loops
+// arg 4: speed (valid values are 0-5)
+void AnimTask_TranslateMonElliptical(u8 taskId)
{
- u8 r6 = 1;
+ u8 wavePeriod = 1;
u8 i;
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
if (gBattleAnimArgs[4] > 5)
gBattleAnimArgs[4] = 5;
for (i = 0; i < gBattleAnimArgs[4]; i++)
- r6 *= 2;
+ wavePeriod *= 2;
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
- gTasks[taskId].data[4] = r6;
- gTasks[taskId].func = sub_8099004;
+ gTasks[taskId].data[4] = wavePeriod;
+ gTasks[taskId].func = AnimTask_TranslateMonEllipticalStep;
gTasks[taskId].func(taskId);
}
-void sub_8099004(u8 taskId)
+static void AnimTask_TranslateMonEllipticalStep(u8 taskId)
{
u8 spriteId = gTasks[taskId].data[0];
gSprites[spriteId].pos2.x = Sin(gTasks[taskId].data[5], gTasks[taskId].data[1]);
@@ -287,14 +363,26 @@ void sub_8099004(u8 taskId)
}
}
-void sub_809907C(u8 taskId)
+// Moves a mon bg picture along an elliptical path that begins
+// and ends at the mon's origin location. Reverses the direction
+// of the path if it's not on the player's side of the battle.
+// arg 0: battler
+// arg 1: ellipse width
+// arg 2: ellipse height
+// arg 3: num loops
+// arg 4: speed (valid values are 0-5)
+void AnimTask_TranslateMonEllipticalRespectSide(u8 taskId)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
- sub_8098F84(taskId);
+ AnimTask_TranslateMonElliptical(taskId);
}
-void sub_80990AC(struct Sprite * sprite)
+// Performs a simple horizontal lunge, where the mon moves
+// horizontally, and then moves back in the opposite direction.
+// arg 0: duration of single lunge direction
+// arg 1: x pixel delta that is applied each frame
+static void DoHorizontalLunge(struct Sprite * sprite)
{
sprite->invisible = TRUE;
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -305,19 +393,24 @@ void sub_80990AC(struct Sprite * sprite)
sprite->data[2] = 0;
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[4] = gBattleAnimArgs[0];
- StoreSpriteCallbackInData6(sprite, sub_8099120);
- sprite->callback = sub_8074DC4;
+ StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection);
+ sprite->callback = TranslateMonSpriteLinear;
}
-void sub_8099120(struct Sprite * sprite)
+static void ReverseHorizontalLungeDirection(struct Sprite * sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[1] = -sprite->data[1];
- sprite->callback = sub_8074DC4;
+ sprite->callback = TranslateMonSpriteLinear;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_8099144(struct Sprite * sprite)
+// Performs a simple vertical dipping motion, where moves vertically, and then
+// moves back in the opposite direction.
+// arg 0: duration of single dip direction
+// arg 1: y pixel delta that is applied each frame
+// arg 2: battler
+static void DoVerticalDip(struct Sprite * sprite)
{
u8 spriteId;
sprite->invisible = TRUE;
@@ -327,19 +420,24 @@ void sub_8099144(struct Sprite * sprite)
sprite->data[2] = gBattleAnimArgs[1];
sprite->data[3] = spriteId;
sprite->data[4] = gBattleAnimArgs[0];
- StoreSpriteCallbackInData6(sprite, sub_8099190);
- sprite->callback = sub_8074DC4;
+ StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection);
+ sprite->callback = TranslateMonSpriteLinear;
}
-void sub_8099190(struct Sprite * sprite)
+static void ReverseVerticalDipDirection(struct Sprite * sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[2] = -sprite->data[2];
- sprite->callback = sub_8074DC4;
+ sprite->callback = TranslateMonSpriteLinear;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_80991B4(struct Sprite * sprite)
+// Linearly slides a mon's bg picture back to its original sprite position.
+// The sprite parameter is a dummy sprite used for facilitating the movement with its callback.
+// arg 0: 1 = target or 0 = attacker
+// arg 1: direction (0 = horizontal and vertical, 1 = horizontal only, 2 = vertical only)
+// arg 2: duration
+static void SlideMonToOriginalPos(struct Sprite * sprite)
{
u8 spriteId;
if (gBattleAnimArgs[0] == 0)
@@ -351,7 +449,7 @@ void sub_80991B4(struct Sprite * sprite)
sprite->data[2] = gSprites[spriteId].pos1.x;
sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y;
sprite->data[4] = gSprites[spriteId].pos1.y;
- sub_80754B8(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->data[5] = gSprites[spriteId].pos2.x;
@@ -363,10 +461,10 @@ void sub_80991B4(struct Sprite * sprite)
sprite->data[1] = 0;
sprite->data[7] = gBattleAnimArgs[1];
sprite->data[7] |= spriteId << 8;
- sprite->callback = sub_8099270;
+ sprite->callback = SlideMonToOriginalPosStep;
}
-void sub_8099270(struct Sprite * sprite)
+static void SlideMonToOriginalPosStep(struct Sprite * sprite)
{
u8 data7 = sprite->data[7];
struct Sprite *otherSprite = &gSprites[sprite->data[7] >> 8];
@@ -388,7 +486,15 @@ void sub_8099270(struct Sprite * sprite)
}
}
-void sub_80992E0(struct Sprite * sprite)
+// Linearly translates a mon to a target offset. The horizontal offset
+// is mirrored for the opponent's pokemon, and the vertical offset
+// is only mirrored if arg 3 is set to 1.
+// arg 0: 0 = attacker, 1 = target
+// arg 1: target x pixel offset
+// arg 2: target y pixel offset
+// arg 3: mirror vertical translation for opposite battle side
+// arg 4: duration
+static void SlideMonToOffset(struct Sprite * sprite)
{
u8 battlerId;
u8 spriteId;
@@ -408,16 +514,16 @@ void sub_80992E0(struct Sprite * sprite)
sprite->data[2] = gSprites[spriteId].pos1.x + gBattleAnimArgs[1];
sprite->data[3] = gSprites[spriteId].pos1.y;
sprite->data[4] = gSprites[spriteId].pos1.y + gBattleAnimArgs[2];
- sub_80754B8(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->data[5] = spriteId;
sprite->invisible = TRUE;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = sub_8074E14;
+ sprite->callback = TranslateMonSpriteLinearFixedPoint;
}
-void sub_8099394(struct Sprite * sprite)
+static void sub_8099394(struct Sprite * sprite)
{
u8 battlerId;
u8 spriteId;
@@ -438,7 +544,7 @@ void sub_8099394(struct Sprite * sprite)
sprite->data[2] = sprite->data[1] + gBattleAnimArgs[1];
sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y;
sprite->data[4] = sprite->data[3] + gBattleAnimArgs[2];
- sub_80754B8(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = gSprites[spriteId].pos2.x << 8;
sprite->data[4] = gSprites[spriteId].pos2.y << 8;
sprite->data[5] = spriteId;
@@ -447,19 +553,29 @@ void sub_8099394(struct Sprite * sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
else
StoreSpriteCallbackInData6(sprite, sub_809946C);
- sprite->callback = sub_8074E14;
+ sprite->callback = TranslateMonSpriteLinearFixedPoint;
}
-void sub_809946C(struct Sprite * sprite)
+static void sub_809946C(struct Sprite * sprite)
{
gSprites[sprite->data[5]].pos2.x = 0;
gSprites[sprite->data[5]].pos2.y = 0;
DestroyAnimSprite(sprite);
}
-void sub_809949C(u8 taskId)
+// Task to facilitate a two-part translation animation, in which the sprite
+// is first translated in an arc to one position. Then, it "lunges" to a target
+// x offset. Used in TAKE_DOWN, for example.
+// arg 0: anim bank
+// arg 1: horizontal speed (subpixel)
+// arg 2: wave amplitude
+// arg 3: first duration
+// arg 4: delay before starting lunge
+// arg 5: target x offset for lunge
+// arg 6: lunge duration
+void AnimTask_WindUpLunge(u8 taskId)
{
- u16 r7 = 0x8000 / gBattleAnimArgs[3];
+ u16 wavePeriod = 0x8000 / gBattleAnimArgs[3];
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
@@ -472,11 +588,11 @@ void sub_809949C(u8 taskId)
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5] * 256 / gBattleAnimArgs[6];
gTasks[taskId].data[6] = gBattleAnimArgs[6];
- gTasks[taskId].data[7] = r7;
- gTasks[taskId].func = sub_8099530;
+ gTasks[taskId].data[7] = wavePeriod;
+ gTasks[taskId].func = AnimTask_WindUpLungePart1;
}
-void sub_8099530(u8 taskId)
+static void AnimTask_WindUpLungePart1(u8 taskId)
{
u8 spriteId = gTasks[taskId].data[0];
gTasks[taskId].data[11] += gTasks[taskId].data[1];
@@ -484,10 +600,10 @@ void sub_8099530(u8 taskId)
gSprites[spriteId].pos2.y = Sin((u8)(gTasks[taskId].data[10] >> 8), gTasks[taskId].data[2]);
gTasks[taskId].data[10] += gTasks[taskId].data[7];
if (--gTasks[taskId].data[3] == 0)
- gTasks[taskId].func = sub_8099594;
+ gTasks[taskId].func = AnimTask_WindUpLungePart2;
}
-void sub_8099594(u8 taskId)
+static void AnimTask_WindUpLungePart2(u8 taskId)
{
u8 spriteId;
@@ -514,7 +630,7 @@ void sub_80995FC(u8 taskId)
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
break;
case 2:
- if (!sub_8072DF0(gBattleAnimAttacker ^ BIT_FLANK))
+ if (!IsBattlerSpriteVisible(gBattleAnimAttacker ^ BIT_FLANK))
{
DestroyAnimVisualTask(taskId);
return;
@@ -522,7 +638,7 @@ void sub_80995FC(u8 taskId)
spriteId = gBattlerSpriteIds[gBattleAnimAttacker ^ BIT_FLANK];
break;
case 3:
- if (!sub_8072DF0(gBattleAnimTarget ^ BIT_FLANK))
+ if (!IsBattlerSpriteVisible(gBattleAnimTarget ^ BIT_FLANK))
{
DestroyAnimVisualTask(taskId);
return;
@@ -541,7 +657,7 @@ void sub_80995FC(u8 taskId)
gTasks[taskId].func = sub_80996B8;
}
-void sub_80996B8(u8 taskId)
+static void sub_80996B8(u8 taskId)
{
u8 spriteId = gTasks[taskId].data[0];
gSprites[spriteId].pos2.x += gTasks[taskId].data[1];
@@ -549,7 +665,15 @@ void sub_80996B8(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_8099704(u8 taskId)
+// Task that facilitates translating the mon bg picture back and forth
+// in a swaying motion (uses Sine wave). It can sway either horizontally
+// or vertically, but not both.
+// arg 0: direction (0 = horizontal, 1 = vertical)
+// arg 1: wave amplitude
+// arg 2: wave period
+// arg 3: num sways
+// arg 4: which mon (0 = attacker, 1 = target)
+void AnimTask_SwayMon(u8 taskId)
{
u8 spriteId;
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -565,32 +689,32 @@ void sub_8099704(u8 taskId)
else
gTasks[taskId].data[5] = gBattleAnimTarget;
gTasks[taskId].data[12] = 1;
- gTasks[taskId].func = sub_8099788;
+ gTasks[taskId].func = AnimTask_SwayMonStep;
}
-void sub_8099788(u8 taskId)
+static void AnimTask_SwayMonStep(u8 taskId)
{
u8 spriteId;
- u32 r8;
- s16 r5;
- u16 tmp;
+ u32 waveIndex;
+ s16 sineValue;
+ u16 sineIndex;
spriteId = gTasks[taskId].data[4];
- tmp = gTasks[taskId].data[10] + gTasks[taskId].data[2];
- gTasks[taskId].data[10] = tmp;
- r8 = tmp >> 8;
- r5 = Sin(r8, gTasks[taskId].data[1]);
+ sineIndex = gTasks[taskId].data[10] + gTasks[taskId].data[2];
+ gTasks[taskId].data[10] = sineIndex;
+ waveIndex = sineIndex >> 8;
+ sineValue = Sin(waveIndex, gTasks[taskId].data[1]);
if (gTasks[taskId].data[0] == 0)
{
- gSprites[spriteId].pos2.x = r5;
+ gSprites[spriteId].pos2.x = sineValue;
}
else if (GetBattlerSide(gTasks[taskId].data[5]) == B_SIDE_PLAYER)
{
- gSprites[spriteId].pos2.y = abs(r5);
+ gSprites[spriteId].pos2.y = abs(sineValue);
}
else
- gSprites[spriteId].pos2.y = -abs(r5);
- if ((r8 > 0x7F && gTasks[taskId].data[11] == 0 && gTasks[taskId].data[12] == 1) || (r8 < 0x7F && gTasks[taskId].data[11] == 1 && gTasks[taskId].data[12] == 0))
+ gSprites[spriteId].pos2.y = -abs(sineValue);
+ if ((waveIndex > 0x7F && gTasks[taskId].data[11] == 0 && gTasks[taskId].data[12] == 1) || (waveIndex < 0x7F && gTasks[taskId].data[11] == 1 && gTasks[taskId].data[12] == 0))
{
gTasks[taskId].data[11] ^= 1;
gTasks[taskId].data[12] ^= 1;
@@ -603,10 +727,16 @@ void sub_8099788(u8 taskId)
}
}
-void sub_80998B0(u8 taskId)
+// Scales a mon's sprite, and then scales back to its original dimensions.
+// arg 0: x scale delta
+// arg 1: y scale delta
+// arg 2: duration
+// arg 3: anim bank
+// arg 4: sprite object mode
+void AnimTask_ScaleMonAndRestore(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[3]);
- sub_80758E0(spriteId, gBattleAnimArgs[4]);
+ PrepareBattlerSpriteForRotScale(spriteId, gBattleAnimArgs[4]);
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
@@ -614,16 +744,16 @@ void sub_80998B0(u8 taskId)
gTasks[taskId].data[4] = spriteId;
gTasks[taskId].data[10] = 0x100;
gTasks[taskId].data[11] = 0x100;
- gTasks[taskId].func = sub_8099908;
+ gTasks[taskId].func = AnimTask_ScaleMonAndRestoreStep;
}
-void sub_8099908(u8 taskId)
+static void AnimTask_ScaleMonAndRestoreStep(u8 taskId)
{
u8 spriteId;
gTasks[taskId].data[10] += gTasks[taskId].data[0];
gTasks[taskId].data[11] += gTasks[taskId].data[1];
spriteId = gTasks[taskId].data[4];
- obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
if (--gTasks[taskId].data[2] == 0)
{
if (gTasks[taskId].data[3] > 0)
@@ -635,7 +765,7 @@ void sub_8099908(u8 taskId)
}
else
{
- sub_8075980(spriteId);
+ ResetSpriteRotScale(spriteId);
DestroyAnimVisualTask(taskId);
}
}
@@ -644,7 +774,7 @@ void sub_8099908(u8 taskId)
void sub_8099980(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
- sub_80758E0(spriteId, 0);
+ PrepareBattlerSpriteForRotScale(spriteId, 0);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[0];
if (gBattleAnimArgs[3] != 1)
@@ -654,7 +784,7 @@ void sub_8099980(u8 taskId)
gTasks[taskId].data[4] = gBattleAnimArgs[1];
gTasks[taskId].data[5] = spriteId;
gTasks[taskId].data[6] = gBattleAnimArgs[3];
- if (sub_8073788())
+ if (IsContest())
gTasks[taskId].data[7] = 1;
else
{
@@ -663,7 +793,7 @@ void sub_8099980(u8 taskId)
else
gTasks[taskId].data[7] = GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER ? 1 : 0;
}
- if (gTasks[taskId].data[7] && !sub_8073788())
+ if (gTasks[taskId].data[7] && !IsContest())
{
s16 tmp;
tmp = gTasks[taskId].data[3];
@@ -677,7 +807,7 @@ void sub_8099980(u8 taskId)
void sub_8099A78(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
- sub_80758E0(spriteId, 0);
+ PrepareBattlerSpriteForRotScale(spriteId, 0);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[0];
if (gBattleAnimArgs[2] == 0)
@@ -709,11 +839,10 @@ void sub_8099A78(u8 taskId)
gTasks[taskId].func = sub_8099B54;
}
-void sub_8099B54(u8 taskId)
+static void sub_8099B54(u8 taskId)
{
- s16 tmp;
gTasks[taskId].data[3] += gTasks[taskId].data[4];
- obj_id_set_rotscale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
+ SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
if (gTasks[taskId].data[7])
sub_80759DC(gTasks[taskId].data[5]);
if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2])
@@ -721,7 +850,7 @@ void sub_8099B54(u8 taskId)
switch (gTasks[taskId].data[6])
{
case 1:
- sub_8075980(gTasks[taskId].data[5]);
+ ResetSpriteRotScale(gTasks[taskId].data[5]);
// fallthrough
case 0:
default:
@@ -729,8 +858,7 @@ void sub_8099B54(u8 taskId)
break;
case 2:
gTasks[taskId].data[1] = 0;
- tmp = gTasks[taskId].data[4];
- gTasks[taskId].data[4] = -tmp;
+ gTasks[taskId].data[4] *= -1;
gTasks[taskId].data[6] = 1;
break;
}
@@ -741,7 +869,7 @@ void sub_8099BD4(u8 taskId)
{
if (gBattleAnimArgs[0] == 0)
{
- gTasks[taskId].data[15] = gUnknown_2037EEC / 12;
+ gTasks[taskId].data[15] = gAnimMovePower / 12;
if (gTasks[taskId].data[15] < 1)
gTasks[taskId].data[15] = 1;
if (gTasks[taskId].data[15] > 16)
@@ -749,7 +877,7 @@ void sub_8099BD4(u8 taskId)
}
else
{
- gTasks[taskId].data[15] = gUnknown_2037EE8 / 12;
+ gTasks[taskId].data[15] = gAnimMoveDmg / 12;
if (gTasks[taskId].data[15] < 1)
gTasks[taskId].data[15] = 1;
if (gTasks[taskId].data[15] > 16)
@@ -769,7 +897,7 @@ void sub_8099BD4(u8 taskId)
gTasks[taskId].func = sub_8099CB8;
}
-void sub_8099CB8(u8 taskId)
+static void sub_8099CB8(u8 taskId)
{
struct Task *task = &gTasks[taskId];
if (++task->data[0] > task->data[1])
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
new file mode 100644
index 000000000..7df93e170
--- /dev/null
+++ b/src/battle_controller_link_opponent.c
@@ -0,0 +1,1686 @@
+#include "global.h"
+#include "bg.h"
+#include "data.h"
+#include "link.h"
+#include "main.h"
+#include "m4a.h"
+#include "palette.h"
+#include "pokeball.h"
+#include "pokemon.h"
+#include "reshow_battle_screen.h"
+#include "sound.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "util.h"
+#include "window.h"
+#include "battle.h"
+#include "battle_ai_script_commands.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_message.h"
+#include "battle_setup.h"
+#include "battle_tower.h"
+#include "constants/battle_anim.h"
+#include "constants/songs.h"
+#include "constants/facility_trainer_classes.h"
+
+static void LinkOpponentHandleGetMonData(void);
+static void LinkOpponentHandleGetRawMonData(void);
+static void LinkOpponentHandleSetMonData(void);
+static void LinkOpponentHandleSetRawMonData(void);
+static void LinkOpponentHandleLoadMonSprite(void);
+static void LinkOpponentHandleSwitchInAnim(void);
+static void LinkOpponentHandleReturnMonToBall(void);
+static void LinkOpponentHandleDrawTrainerPic(void);
+static void LinkOpponentHandleTrainerSlide(void);
+static void LinkOpponentHandleTrainerSlideBack(void);
+static void LinkOpponentHandleFaintAnimation(void);
+static void LinkOpponentHandlePaletteFade(void);
+static void LinkOpponentHandleSuccessBallThrowAnim(void);
+static void LinkOpponentHandleBallThrowAnim(void);
+static void LinkOpponentHandlePause(void);
+static void LinkOpponentHandleMoveAnimation(void);
+static void LinkOpponentHandlePrintString(void);
+static void LinkOpponentHandlePrintSelectionString(void);
+static void LinkOpponentHandleChooseAction(void);
+static void LinkOpponentHandleUnknownYesNoBox(void);
+static void LinkOpponentHandleChooseMove(void);
+static void LinkOpponentHandleChooseItem(void);
+static void LinkOpponentHandleChoosePokemon(void);
+static void LinkOpponentHandleCmd23(void);
+static void LinkOpponentHandleHealthBarUpdate(void);
+static void LinkOpponentHandleExpUpdate(void);
+static void LinkOpponentHandleStatusIconUpdate(void);
+static void LinkOpponentHandleStatusAnimation(void);
+static void LinkOpponentHandleStatusXor(void);
+static void LinkOpponentHandleDataTransfer(void);
+static void LinkOpponentHandleDMA3Transfer(void);
+static void LinkOpponentHandlePlayBGM(void);
+static void LinkOpponentHandleCmd32(void);
+static void LinkOpponentHandleTwoReturnValues(void);
+static void LinkOpponentHandleChosenMonReturnValue(void);
+static void LinkOpponentHandleOneReturnValue(void);
+static void LinkOpponentHandleOneReturnValue_Duplicate(void);
+static void LinkOpponentHandleCmd37(void);
+static void LinkOpponentHandleCmd38(void);
+static void LinkOpponentHandleCmd39(void);
+static void LinkOpponentHandleCmd40(void);
+static void LinkOpponentHandleHitAnimation(void);
+static void LinkOpponentHandleCmd42(void);
+static void LinkOpponentHandlePlaySE(void);
+static void LinkOpponentHandlePlayFanfare(void);
+static void LinkOpponentHandleFaintingCry(void);
+static void LinkOpponentHandleIntroSlide(void);
+static void LinkOpponentHandleIntroTrainerBallThrow(void);
+static void LinkOpponentHandleDrawPartyStatusSummary(void);
+static void LinkOpponentHandleHidePartyStatusSummary(void);
+static void LinkOpponentHandleEndBounceEffect(void);
+static void LinkOpponentHandleSpriteInvisibility(void);
+static void LinkOpponentHandleBattleAnimation(void);
+static void LinkOpponentHandleLinkStandbyMsg(void);
+static void LinkOpponentHandleResetActionMoveSelection(void);
+static void LinkOpponentHandleCmd55(void);
+static void LinkOpponentCmdEnd(void);
+
+static void LinkOpponentBufferRunCommand(void);
+static void LinkOpponentBufferExecCompleted(void);
+static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst);
+static void SetLinkOpponentMonData(u8 monId);
+static void DoSwitchOutAnimation(void);
+static void LinkOpponentDoMoveAnimation(void);
+static void sub_803AEDC(void);
+static void sub_803C550(u8 battlerId, bool8 dontClearSubstituteBit);
+static void sub_803D564(u8 taskId);
+static void sub_803D648(struct Sprite *sprite);
+static void sub_803D790(void);
+
+static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
+{
+ LinkOpponentHandleGetMonData,
+ LinkOpponentHandleGetRawMonData,
+ LinkOpponentHandleSetMonData,
+ LinkOpponentHandleSetRawMonData,
+ LinkOpponentHandleLoadMonSprite,
+ LinkOpponentHandleSwitchInAnim,
+ LinkOpponentHandleReturnMonToBall,
+ LinkOpponentHandleDrawTrainerPic,
+ LinkOpponentHandleTrainerSlide,
+ LinkOpponentHandleTrainerSlideBack,
+ LinkOpponentHandleFaintAnimation,
+ LinkOpponentHandlePaletteFade,
+ LinkOpponentHandleSuccessBallThrowAnim,
+ LinkOpponentHandleBallThrowAnim,
+ LinkOpponentHandlePause,
+ LinkOpponentHandleMoveAnimation,
+ LinkOpponentHandlePrintString,
+ LinkOpponentHandlePrintSelectionString,
+ LinkOpponentHandleChooseAction,
+ LinkOpponentHandleUnknownYesNoBox,
+ LinkOpponentHandleChooseMove,
+ LinkOpponentHandleChooseItem,
+ LinkOpponentHandleChoosePokemon,
+ LinkOpponentHandleCmd23,
+ LinkOpponentHandleHealthBarUpdate,
+ LinkOpponentHandleExpUpdate,
+ LinkOpponentHandleStatusIconUpdate,
+ LinkOpponentHandleStatusAnimation,
+ LinkOpponentHandleStatusXor,
+ LinkOpponentHandleDataTransfer,
+ LinkOpponentHandleDMA3Transfer,
+ LinkOpponentHandlePlayBGM,
+ LinkOpponentHandleCmd32,
+ LinkOpponentHandleTwoReturnValues,
+ LinkOpponentHandleChosenMonReturnValue,
+ LinkOpponentHandleOneReturnValue,
+ LinkOpponentHandleOneReturnValue_Duplicate,
+ LinkOpponentHandleCmd37,
+ LinkOpponentHandleCmd38,
+ LinkOpponentHandleCmd39,
+ LinkOpponentHandleCmd40,
+ LinkOpponentHandleHitAnimation,
+ LinkOpponentHandleCmd42,
+ LinkOpponentHandlePlaySE,
+ LinkOpponentHandlePlayFanfare,
+ LinkOpponentHandleFaintingCry,
+ LinkOpponentHandleIntroSlide,
+ LinkOpponentHandleIntroTrainerBallThrow,
+ LinkOpponentHandleDrawPartyStatusSummary,
+ LinkOpponentHandleHidePartyStatusSummary,
+ LinkOpponentHandleEndBounceEffect,
+ LinkOpponentHandleSpriteInvisibility,
+ LinkOpponentHandleBattleAnimation,
+ LinkOpponentHandleLinkStandbyMsg,
+ LinkOpponentHandleResetActionMoveSelection,
+ LinkOpponentHandleCmd55,
+ LinkOpponentCmdEnd
+};
+
+
+static void nullsub_19(void)
+{
+}
+
+void SetControllerToLinkOpponent(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = LinkOpponentBufferRunCommand;
+}
+
+static void LinkOpponentBufferRunCommand(void)
+{
+ if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
+ {
+ if (gBattleBufferA[gActiveBattler][0] < NELEMS(sLinkOpponentBufferCommands))
+ sLinkOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ else
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ LinkOpponentBufferExecCompleted();
+}
+
+static void sub_803A70C(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]]);
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+static void sub_803A79C(void)
+{
+ if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+static void sub_803A7E4(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)
+ {
+ if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT)
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1
+ || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1)
+ return;
+ 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)
+ {
+ if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT)
+ m4aMPlayContinue(&gMPlayInfo_BGM);
+ }
+ else
+ {
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
+ }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3;
+ gBattlerControllerFuncs[gActiveBattler] = sub_803A79C;
+ }
+}
+
+static void sub_803A9CC(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
+ sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80)
+ sub_80F1720(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gActiveBattler) == 3)
+ {
+ if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 1)
+ return;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
+ }
+ 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_803A7E4;
+ }
+}
+
+static void sub_803AC14(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);
+ LinkOpponentBufferExecCompleted();
+ }
+ }
+}
+
+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
+ LinkOpponentBufferExecCompleted();
+}
+
+static void sub_803AD20(void)
+{
+ if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse)
+ {
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+static void sub_803AD64(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ HideBattlerShadowSprite(gActiveBattler);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ LinkOpponentBufferExecCompleted();
+}
+
+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;
+ LinkOpponentBufferExecCompleted();
+ }
+ else
+ {
+ if (!(gSprites[spriteId].data[1] % 4))
+ gSprites[spriteId].invisible ^= 1;
+ ++gSprites[spriteId].data[1];
+ }
+}
+
+static void sub_803AE6C(void)
+{
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ {
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattlerControllerFuncs[gActiveBattler] = sub_803AEDC;
+ }
+}
+
+static void sub_803AEDC(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive && !IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+static void sub_803AF28(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_803AE6C;
+ }
+}
+
+static void sub_803AFFC(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
+ 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_803AF28;
+ }
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive)
+ LinkOpponentBufferExecCompleted();
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive)
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentBufferExecCompleted(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = LinkOpponentBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ }
+ else
+ {
+ gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
+ }
+}
+
+static void LinkOpponentHandleGetMonData(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 += CopyLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ size += CopyLinkOpponentMonData(i, monData + size);
+ monToCheck >>= 1;
+ }
+ }
+ BtlController_EmitDataTransfer(1, size, monData);
+ LinkOpponentBufferExecCompleted();
+}
+
+static u32 CopyLinkOpponentMonData(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 LinkOpponentHandleGetRawMonData(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleSetMonData(void)
+{
+ u8 monToCheck;
+ u8 i;
+
+ if (!gBattleBufferA[gActiveBattler][2])
+ {
+ SetLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler]);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ SetLinkOpponentMonData(i);
+ monToCheck >>= 1;
+ }
+ }
+ LinkOpponentBufferExecCompleted();
+}
+
+static void SetLinkOpponentMonData(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 LinkOpponentHandleSetRawMonData(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];
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleLoadMonSprite(void)
+{
+ u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
+
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ GetBattlerSpriteCoord(gActiveBattler, 2),
+ GetBattlerSpriteDefault_Y(gActiveBattler),
+ GetBattlerSpriteSubpriority(gActiveBattler));
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
+ SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
+ gBattlerControllerFuncs[gActiveBattler] = sub_803AC14;
+}
+
+static void LinkOpponentHandleSwitchInAnim(void)
+{
+ gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ sub_803C550(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerControllerFuncs[gActiveBattler] = sub_803AFFC;
+}
+
+static void sub_803C550(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[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
+}
+
+static void LinkOpponentHandleReturnMonToBall(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]);
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+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_803AD64;
+ }
+ break;
+ }
+}
+
+static void LinkOpponentHandleDrawTrainerPic(void)
+{
+ s16 xPos;
+ u32 trainerPicId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (GetBattlerPosition(gActiveBattler) & BIT_FLANK) // second mon
+ xPos = 152;
+ else // first mon
+ xPos = 200;
+ if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
+ || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
+ {
+ if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != MALE)
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_5];
+ else
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_2];
+ }
+ else if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != MALE)
+ {
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PLAYER_4];
+ }
+ else
+ {
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PLAYER_3];
+ }
+ }
+ else
+ {
+ xPos = 176;
+ if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ {
+ trainerPicId = sub_80447AC();
+ }
+ else if ((gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_SAPPHIRE
+ || (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_EMERALD)
+ {
+ if (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].gender != MALE)
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_5];
+ else
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_2];
+ }
+ else if (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].gender != MALE)
+ {
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PLAYER_4];
+ }
+ else
+ {
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PLAYER_3];
+ }
+ }
+ DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ xPos,
+ (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 LinkOpponentHandleTrainerSlide(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleTrainerSlideBack(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_803A70C;
+}
+
+static void LinkOpponentHandleFaintAnimation(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0)
+ {
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
+ ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState;
+ }
+ else
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_TARGET);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
+ gBattlerControllerFuncs[gActiveBattler] = sub_803AD20;
+ }
+ }
+}
+
+static void LinkOpponentHandlePaletteFade(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleSuccessBallThrowAnim(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleBallThrowAnim(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandlePause(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleMoveAnimation(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
+ {
+ LinkOpponentBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation;
+ }
+ }
+}
+
+static void LinkOpponentDoMoveAnimation(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;
+ LinkOpponentBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+static void LinkOpponentHandlePrintString(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);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
+}
+
+static void LinkOpponentHandlePrintSelectionString(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleChooseAction(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleUnknownYesNoBox(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleChooseMove(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleChooseItem(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleChoosePokemon(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleCmd23(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleHealthBarUpdate(void)
+{
+ s16 hpVal;
+
+ LoadBattleBarGfx(0);
+ hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ 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 LinkOpponentHandleExpUpdate(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleStatusIconUpdate(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 LinkOpponentHandleStatusAnimation(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 LinkOpponentHandleStatusXor(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleDataTransfer(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleDMA3Transfer(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandlePlayBGM(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleCmd32(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleTwoReturnValues(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleChosenMonReturnValue(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleOneReturnValue(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleOneReturnValue_Duplicate(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleCmd37(void)
+{
+ gUnknown_2022870.field_0 = 0;
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleCmd38(void)
+{
+ gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1];
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleCmd39(void)
+{
+ gUnknown_2022870.flag_x80 = 0;
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleCmd40(void)
+{
+ gUnknown_2022870.flag_x80 ^= 1;
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleHitAnimation(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
+ {
+ LinkOpponentBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = TRUE;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ DoHitAnimHealthboxEffect(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect;
+ }
+}
+
+static void LinkOpponentHandleCmd42(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandlePlaySE(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);
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandlePlayFanfare(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
+
+ PlayCry3(species, 25, 5);
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ gIntroSlideFlags |= 1;
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleIntroTrainerBallThrow(void)
+{
+ u8 paletteNum, 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_803D648);
+ taskId = CreateTask(sub_803D564, 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_19;
+}
+
+static void sub_803D564(u8 taskId)
+{
+ u8 savedActiveBank = gActiveBattler;
+
+ gActiveBattler = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_803C550(gActiveBattler, FALSE);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_803C550(gActiveBattler, FALSE);
+ gActiveBattler = BATTLE_PARTNER(gActiveBattler);
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_803C550(gActiveBattler, FALSE);
+ gActiveBattler = BATTLE_PARTNER(gActiveBattler);
+ }
+ gBattlerControllerFuncs[gActiveBattler] = sub_803A9CC;
+ gActiveBattler = savedActiveBank;
+ DestroyTask(taskId);
+}
+
+static void sub_803D648(struct Sprite *sprite)
+{
+ FreeTrainerFrontPicPaletteAndTile(sprite->oam.affineParam);
+ sprite->oam.tileNum = sprite->data[5];
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+}
+
+static void LinkOpponentHandleDrawPartyStatusSummary(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ LinkOpponentBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
+
+ if (gBattleBufferA[gActiveBattler][2])
+ {
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E < 2)
+ {
+ ++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_803D790;
+ }
+}
+
+static void sub_803D790(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+static void LinkOpponentHandleHidePartyStatusSummary(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleEndBounceEffect(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleSpriteInvisibility(void)
+{
+ if (IsBattlerSpritePresent(gActiveBattler))
+ {
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ }
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleBattleAnimation(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))
+ LinkOpponentBufferExecCompleted();
+ else
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
+ }
+}
+
+static void LinkOpponentHandleLinkStandbyMsg(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleResetActionMoveSelection(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
+static void LinkOpponentHandleCmd55(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] == B_OUTCOME_DREW)
+ gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ else
+ gBattleOutcome = gBattleBufferA[gActiveBattler][1] ^ B_OUTCOME_DREW;
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ LinkOpponentBufferExecCompleted();
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8;
+}
+
+static void LinkOpponentCmdEnd(void)
+{
+}
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
new file mode 100644
index 000000000..96130f049
--- /dev/null
+++ b/src/battle_controller_link_partner.c
@@ -0,0 +1,1599 @@
+#include "global.h"
+#include "bg.h"
+#include "data.h"
+#include "link.h"
+#include "main.h"
+#include "m4a.h"
+#include "palette.h"
+#include "pokeball.h"
+#include "pokemon.h"
+#include "sound.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "util.h"
+#include "window.h"
+#include "battle.h"
+#include "battle_ai_script_commands.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_message.h"
+#include "battle_setup.h"
+#include "battle_tower.h"
+#include "reshow_battle_screen.h"
+#include "constants/battle_anim.h"
+#include "constants/songs.h"
+
+static void LinkPartnerHandleGetMonData(void);
+static void LinkPartnerHandleGetRawMonData(void);
+static void LinkPartnerHandleSetMonData(void);
+static void LinkPartnerHandleSetRawMonData(void);
+static void LinkPartnerHandleLoadMonSprite(void);
+static void LinkPartnerHandleSwitchInAnim(void);
+static void LinkPartnerHandleReturnMonToBall(void);
+static void LinkPartnerHandleDrawTrainerPic(void);
+static void LinkPartnerHandleTrainerSlide(void);
+static void LinkPartnerHandleTrainerSlideBack(void);
+static void LinkPartnerHandleFaintAnimation(void);
+static void LinkPartnerHandlePaletteFade(void);
+static void LinkPartnerHandleSuccessBallThrowAnim(void);
+static void LinkPartnerHandleBallThrowAnim(void);
+static void LinkPartnerHandlePause(void);
+static void LinkPartnerHandleMoveAnimation(void);
+static void LinkPartnerHandlePrintString(void);
+static void LinkPartnerHandlePrintSelectionString(void);
+static void LinkPartnerHandleChooseAction(void);
+static void LinkPartnerHandleUnknownYesNoBox(void);
+static void LinkPartnerHandleChooseMove(void);
+static void LinkPartnerHandleChooseItem(void);
+static void LinkPartnerHandleChoosePokemon(void);
+static void LinkPartnerHandleCmd23(void);
+static void LinkPartnerHandleHealthBarUpdate(void);
+static void LinkPartnerHandleExpUpdate(void);
+static void LinkPartnerHandleStatusIconUpdate(void);
+static void LinkPartnerHandleStatusAnimation(void);
+static void LinkPartnerHandleStatusXor(void);
+static void LinkPartnerHandleDataTransfer(void);
+static void LinkPartnerHandleDMA3Transfer(void);
+static void LinkPartnerHandlePlayBGM(void);
+static void LinkPartnerHandleCmd32(void);
+static void LinkPartnerHandleTwoReturnValues(void);
+static void LinkPartnerHandleChosenMonReturnValue(void);
+static void LinkPartnerHandleOneReturnValue(void);
+static void LinkPartnerHandleOneReturnValue_Duplicate(void);
+static void LinkPartnerHandleCmd37(void);
+static void LinkPartnerHandleCmd38(void);
+static void LinkPartnerHandleCmd39(void);
+static void LinkPartnerHandleCmd40(void);
+static void LinkPartnerHandleHitAnimation(void);
+static void LinkPartnerHandleCmd42(void);
+static void LinkPartnerHandlePlaySE(void);
+static void LinkPartnerHandlePlayFanfare(void);
+static void LinkPartnerHandleFaintingCry(void);
+static void LinkPartnerHandleIntroSlide(void);
+static void LinkPartnerHandleIntroTrainerBallThrow(void);
+static void LinkPartnerHandleDrawPartyStatusSummary(void);
+static void LinkPartnerHandleHidePartyStatusSummary(void);
+static void LinkPartnerHandleEndBounceEffect(void);
+static void LinkPartnerHandleSpriteInvisibility(void);
+static void LinkPartnerHandleBattleAnimation(void);
+static void LinkPartnerHandleLinkStandbyMsg(void);
+static void LinkPartnerHandleResetActionMoveSelection(void);
+static void LinkPartnerHandleCmd55(void);
+static void LinkPartnerCmdEnd(void);
+
+static void LinkPartnerBufferRunCommand(void);
+static void LinkPartnerBufferExecCompleted(void);
+static void sub_80D481C(void);
+static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst);
+static void SetLinkPartnerMonData(u8 monId);
+static void sub_80D5F40(u8 battlerId, bool8 dontClearSubstituteBit);
+static void DoSwitchOutAnimation(void);
+static void LinkPartnerDoMoveAnimation(void);
+static void sub_80D6ED0(u8 taskId);
+static void sub_80D70A0(void);
+
+static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
+{
+ LinkPartnerHandleGetMonData,
+ LinkPartnerHandleGetRawMonData,
+ LinkPartnerHandleSetMonData,
+ LinkPartnerHandleSetRawMonData,
+ LinkPartnerHandleLoadMonSprite,
+ LinkPartnerHandleSwitchInAnim,
+ LinkPartnerHandleReturnMonToBall,
+ LinkPartnerHandleDrawTrainerPic,
+ LinkPartnerHandleTrainerSlide,
+ LinkPartnerHandleTrainerSlideBack,
+ LinkPartnerHandleFaintAnimation,
+ LinkPartnerHandlePaletteFade,
+ LinkPartnerHandleSuccessBallThrowAnim,
+ LinkPartnerHandleBallThrowAnim,
+ LinkPartnerHandlePause,
+ LinkPartnerHandleMoveAnimation,
+ LinkPartnerHandlePrintString,
+ LinkPartnerHandlePrintSelectionString,
+ LinkPartnerHandleChooseAction,
+ LinkPartnerHandleUnknownYesNoBox,
+ LinkPartnerHandleChooseMove,
+ LinkPartnerHandleChooseItem,
+ LinkPartnerHandleChoosePokemon,
+ LinkPartnerHandleCmd23,
+ LinkPartnerHandleHealthBarUpdate,
+ LinkPartnerHandleExpUpdate,
+ LinkPartnerHandleStatusIconUpdate,
+ LinkPartnerHandleStatusAnimation,
+ LinkPartnerHandleStatusXor,
+ LinkPartnerHandleDataTransfer,
+ LinkPartnerHandleDMA3Transfer,
+ LinkPartnerHandlePlayBGM,
+ LinkPartnerHandleCmd32,
+ LinkPartnerHandleTwoReturnValues,
+ LinkPartnerHandleChosenMonReturnValue,
+ LinkPartnerHandleOneReturnValue,
+ LinkPartnerHandleOneReturnValue_Duplicate,
+ LinkPartnerHandleCmd37,
+ LinkPartnerHandleCmd38,
+ LinkPartnerHandleCmd39,
+ LinkPartnerHandleCmd40,
+ LinkPartnerHandleHitAnimation,
+ LinkPartnerHandleCmd42,
+ LinkPartnerHandlePlaySE,
+ LinkPartnerHandlePlayFanfare,
+ LinkPartnerHandleFaintingCry,
+ LinkPartnerHandleIntroSlide,
+ LinkPartnerHandleIntroTrainerBallThrow,
+ LinkPartnerHandleDrawPartyStatusSummary,
+ LinkPartnerHandleHidePartyStatusSummary,
+ LinkPartnerHandleEndBounceEffect,
+ LinkPartnerHandleSpriteInvisibility,
+ LinkPartnerHandleBattleAnimation,
+ LinkPartnerHandleLinkStandbyMsg,
+ LinkPartnerHandleResetActionMoveSelection,
+ LinkPartnerHandleCmd55,
+ LinkPartnerCmdEnd
+};
+
+static void nullsub_77(void)
+{
+}
+
+void SetControllerToLinkPartner(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = LinkPartnerBufferRunCommand;
+}
+
+static void LinkPartnerBufferRunCommand(void)
+{
+ if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
+ {
+ if (gBattleBufferA[gActiveBattler][0] < NELEMS(sLinkPartnerBufferCommands))
+ sLinkPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ else
+ LinkPartnerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ LinkPartnerBufferExecCompleted();
+}
+
+static void sub_80D42A8(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ {
+ nullsub_16(0);
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ LinkPartnerBufferExecCompleted();
+ }
+}
+
+static void sub_80D4310(void)
+{
+ if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
+ LinkPartnerBufferExecCompleted();
+ }
+}
+
+static void sub_80D4358(void)
+{
+ bool32 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 == SpriteCallbackDummy)
+ {
+ var = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ var = FALSE;
+ if (var)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3;
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D4310;
+ }
+}
+
+static void sub_80D443C(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ {
+ if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 != 1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler ^ BIT_FLANK);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
+ }
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 0;
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D4358;
+ }
+ }
+}
+
+static void sub_80D4590(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
+ LinkPartnerBufferExecCompleted();
+}
+
+static void CompleteOnHealthbarDone(void)
+{
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ if (hpValue != -1)
+ {
+ UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
+ }
+ else
+ {
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ LinkPartnerBufferExecCompleted();
+ }
+}
+
+static void sub_80D4640(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT)
+ {
+ FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ LinkPartnerBufferExecCompleted();
+ }
+}
+
+static void sub_80D46A8(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ LinkPartnerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ LinkPartnerBufferExecCompleted();
+}
+
+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;
+ LinkPartnerBufferExecCompleted();
+ }
+ else
+ {
+ if (!(gSprites[spriteId].data[1] % 4))
+ gSprites[spriteId].invisible ^= 1;
+ ++gSprites[spriteId].data[1];
+ }
+}
+
+static void sub_80D47AC(void)
+{
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ {
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D481C;
+ }
+}
+
+static void sub_80D481C(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ LinkPartnerBufferExecCompleted();
+}
+
+static void sub_80D484C(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);
+ CreateTask(c3_0802FDF4, 10);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D47AC;
+ }
+}
+
+static void sub_80D4944(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ {
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D484C;
+ }
+}
+
+static void LinkPartnerBufferExecCompleted(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = LinkPartnerBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ }
+ else
+ {
+ gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
+ }
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive)
+ LinkPartnerBufferExecCompleted();
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive)
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleGetMonData(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 += CopyLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ size += CopyLinkPartnerMonData(i, monData + size);
+ monToCheck >>= 1;
+ }
+ }
+ BtlController_EmitDataTransfer(1, size, monData);
+ LinkPartnerBufferExecCompleted();
+}
+
+static u32 CopyLinkPartnerMonData(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(&gPlayerParty[monId], MON_DATA_SPECIES);
+ battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ for (size = 0; size < MAX_MON_MOVES; ++size)
+ {
+ battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV);
+ battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED);
+ battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG);
+ battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM);
+ battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battleMon.nickname, nickname);
+ GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_SPECIES);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gPlayerParty[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(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ dst[size] = GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ size = 1;
+ break;
+ case REQUEST_OTID_BATTLE:
+ data32 = GetMonData(&gPlayerParty[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(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV);
+ dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ data32 = GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_CHECKSUM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_STATUS_BATTLE:
+ data32 = GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_ATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_DEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPEED_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_COOL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case REQUEST_CUTE_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case REQUEST_SMART_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+ return size;
+}
+
+static void LinkPartnerHandleGetRawMonData(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleSetMonData(void)
+{
+ u8 monToCheck;
+ u8 i;
+
+ if (!gBattleBufferA[gActiveBattler][2])
+ {
+ SetLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler]);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ SetLinkPartnerMonData(i);
+ monToCheck >>= 1;
+ }
+ }
+ LinkPartnerBufferExecCompleted();
+}
+
+static void SetLinkPartnerMonData(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(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &battlePokemon->speed);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense);
+ }
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
+ }
+ SetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_OTID_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_EXP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_STATUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ }
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+}
+
+static void LinkPartnerHandleSetRawMonData(void)
+{
+ u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
+ dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleLoadMonSprite(void)
+{
+ u16 species;
+
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ GetBattlerSpriteCoord(gActiveBattler, 2),
+ GetBattlerSpriteDefault_Y(gActiveBattler),
+ GetBattlerSpriteSubpriority(gActiveBattler));
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D4590;
+}
+
+static void LinkPartnerHandleSwitchInAnim(void)
+{
+ ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ sub_80D5F40(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D4944;
+}
+
+static void sub_80D5F40(u8 battlerId, bool8 dontClearSubstituteBit)
+{
+ u16 species;
+
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C);
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ GetBattlerSpriteSubpriority(battlerId));
+ gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+}
+
+static void LinkPartnerHandleReturnMonToBall(void)
+{
+ if (!gBattleBufferA[gActiveBattler][1])
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ LinkPartnerBufferExecCompleted();
+ }
+}
+
+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_PLAYER_MON);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D46A8;
+ }
+ break;
+ }
+}
+
+static void LinkPartnerHandleDrawTrainerPic(void)
+{
+ s16 xPos;
+ u32 trainerPicId;
+
+ if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != B_FLANK_LEFT) // Second mon, on the right.
+ xPos = 90;
+ else // First mon, on the left.
+ xPos = 32;
+ if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
+ || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
+ trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 2;
+ else
+ trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 0;
+ DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler));
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
+}
+
+static void LinkPartnerHandleTrainerSlide(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleTrainerSlideBack(void)
+{
+ SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D42A8;
+}
+
+static void LinkPartnerHandleFaintAnimation(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0)
+ {
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
+ ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState;
+ }
+ else
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_ATTACKER);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110;
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D4640;
+ }
+ }
+}
+
+static void LinkPartnerHandlePaletteFade(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleSuccessBallThrowAnim(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleBallThrowAnim(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandlePause(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleMoveAnimation(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
+ {
+ LinkPartnerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation;
+ }
+ }
+}
+
+static void LinkPartnerDoMoveAnimation(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;
+ LinkPartnerBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+static void LinkPartnerHandlePrintString(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);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
+}
+
+static void LinkPartnerHandlePrintSelectionString(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleChooseAction(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleUnknownYesNoBox(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleChooseMove(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleChooseItem(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleChoosePokemon(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleCmd23(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleHealthBarUpdate(void)
+{
+ s16 hpVal;
+
+ LoadBattleBarGfx(0);
+ hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ if (hpVal != INSTANT_HP_BAR_DROP)
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
+ }
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
+}
+
+static void LinkPartnerHandleExpUpdate(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ u8 battlerId;
+
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void LinkPartnerHandleStatusAnimation(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 LinkPartnerHandleStatusXor(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleDataTransfer(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleDMA3Transfer(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandlePlayBGM(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleCmd32(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleTwoReturnValues(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleChosenMonReturnValue(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleOneReturnValue(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleOneReturnValue_Duplicate(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleCmd37(void)
+{
+ gUnknown_2022870.field_0 = 0;
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleCmd38(void)
+{
+ gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1];
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleCmd39(void)
+{
+ gUnknown_2022870.flag_x80 = 0;
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleCmd40(void)
+{
+ gUnknown_2022870.flag_x80 ^= 1;
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleHitAnimation(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
+ {
+ LinkPartnerBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = TRUE;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ DoHitAnimHealthboxEffect(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect;
+ }
+}
+
+static void LinkPartnerHandleCmd42(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandlePlaySE(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);
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandlePlayFanfare(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
+
+ PlayCry3(species, -25, 5);
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ gIntroSlideFlags |= 1;
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleIntroTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+ u32 trainerPicId;
+
+ SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
+ StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
+ paletteNum = AllocSpritePalette(0xD6F9);
+ if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE
+ || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_EMERALD)
+ trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 2;
+ else
+ trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 0;
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
+ taskId = CreateTask(sub_80D6ED0, 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_77;
+}
+
+static void sub_80D6ED0(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 24)
+ {
+ ++gTasks[taskId].data[1];
+ }
+ else
+ {
+ u8 savedActiveBattler = gActiveBattler;
+
+ gActiveBattler = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_80D5F40(gActiveBattler, FALSE);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_80D5F40(gActiveBattler, FALSE);
+ gActiveBattler ^= BIT_FLANK;
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ sub_80D5F40(gActiveBattler, FALSE);
+ gActiveBattler ^= BIT_FLANK;
+ }
+ gBattlerControllerFuncs[gActiveBattler] = sub_80D443C;
+ gActiveBattler = savedActiveBattler;
+ DestroyTask(taskId);
+ }
+}
+
+static void LinkPartnerHandleDrawPartyStatusSummary(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ LinkPartnerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
+ 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_80D70A0;
+ }
+}
+
+static void sub_80D70A0(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
+ LinkPartnerBufferExecCompleted();
+ }
+}
+
+static void LinkPartnerHandleHidePartyStatusSummary(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleEndBounceEffect(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleSpriteInvisibility(void)
+{
+ if (IsBattlerSpritePresent(gActiveBattler))
+ {
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ }
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleBattleAnimation(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))
+ LinkPartnerBufferExecCompleted();
+ else
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
+ }
+}
+
+static void LinkPartnerHandleLinkStandbyMsg(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleResetActionMoveSelection(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
+static void LinkPartnerHandleCmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ LinkPartnerBufferExecCompleted();
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8;
+}
+
+static void LinkPartnerCmdEnd(void)
+{
+}
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
new file mode 100644
index 000000000..794b83b73
--- /dev/null
+++ b/src/battle_controller_opponent.c
@@ -0,0 +1,1788 @@
+#include "global.h"
+#include "bg.h"
+#include "data.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] < NELEMS(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_ChooseMoveOrAction();
+
+ 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 < PARTY_SIZE; ++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_player.c b/src/battle_controller_player.c
new file mode 100644
index 000000000..b0cd92c2e
--- /dev/null
+++ b/src/battle_controller_player.c
@@ -0,0 +1,2969 @@
+#include "global.h"
+#include "bg.h"
+#include "data.h"
+#include "item.h"
+#include "item_menu.h"
+#include "link.h"
+#include "main.h"
+#include "m4a.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokeball.h"
+#include "pokemon.h"
+#include "random.h"
+#include "sound.h"
+#include "strings.h"
+#include "string_util.h"
+#include "pokemon_special_anim.h"
+#include "task.h"
+#include "text.h"
+#include "util.h"
+#include "window.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_message.h"
+#include "battle_setup.h"
+#include "battle_script_commands.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 PlayerHandleGetMonData(void);
+static void PlayerHandleSetMonData(void);
+static void PlayerHandleSetRawMonData(void);
+static void PlayerHandleLoadMonSprite(void);
+static void PlayerHandleSwitchInAnim(void);
+static void PlayerHandleReturnMonToBall(void);
+static void PlayerHandleDrawTrainerPic(void);
+static void PlayerHandleTrainerSlide(void);
+static void PlayerHandleTrainerSlideBack(void);
+static void PlayerHandleFaintAnimation(void);
+static void PlayerHandlePaletteFade(void);
+static void PlayerHandleSuccessBallThrowAnim(void);
+static void PlayerHandleBallThrowAnim(void);
+static void PlayerHandlePause(void);
+static void PlayerHandleMoveAnimation(void);
+static void PlayerHandlePrintString(void);
+static void PlayerHandlePrintSelectionString(void);
+static void PlayerHandleChooseAction(void);
+static void PlayerHandleUnknownYesNoBox(void);
+static void PlayerHandleChooseMove(void);
+static void PlayerHandleChooseItem(void);
+static void PlayerHandleChoosePokemon(void);
+static void PlayerHandleCmd23(void);
+static void PlayerHandleHealthBarUpdate(void);
+static void PlayerHandleExpUpdate(void);
+static void PlayerHandleStatusIconUpdate(void);
+static void PlayerHandleStatusAnimation(void);
+static void PlayerHandleStatusXor(void);
+static void PlayerHandleDataTransfer(void);
+static void PlayerHandleDMA3Transfer(void);
+static void PlayerHandlePlayBGM(void);
+static void PlayerHandleCmd32(void);
+static void PlayerHandleTwoReturnValues(void);
+static void PlayerHandleChosenMonReturnValue(void);
+static void PlayerHandleOneReturnValue(void);
+static void PlayerHandleOneReturnValue_Duplicate(void);
+static void PlayerHandleCmd37(void);
+static void PlayerHandleCmd38(void);
+static void PlayerHandleCmd39(void);
+static void PlayerHandleCmd40(void);
+static void PlayerHandleHitAnimation(void);
+static void PlayerHandleCmd42(void);
+static void PlayerHandlePlaySE(void);
+static void PlayerHandlePlayFanfare(void);
+static void PlayerHandleFaintingCry(void);
+static void PlayerHandleIntroSlide(void);
+static void PlayerHandleIntroTrainerBallThrow(void);
+static void PlayerHandleDrawPartyStatusSummary(void);
+static void PlayerHandleHidePartyStatusSummary(void);
+static void PlayerHandleEndBounceEffect(void);
+static void PlayerHandleSpriteInvisibility(void);
+static void PlayerHandleBattleAnimation(void);
+static void PlayerHandleLinkStandbyMsg(void);
+static void PlayerHandleResetActionMoveSelection(void);
+static void PlayerHandleCmd55(void);
+static void PlayerCmdEnd(void);
+
+static void PlayerBufferRunCommand(void);
+static void HandleInputChooseTarget(void);
+static void MoveSelectionDisplayPpNumber(void);
+static void MoveSelectionDisplayPpString(void);
+static void MoveSelectionDisplayMoveType(void);
+static void MoveSelectionDisplayMoveNames(void);
+static void HandleMoveSwitching(void);
+static void WaitForMonSelection(void);
+static void CompleteWhenChoseItem(void);
+static void Task_LaunchLvlUpAnim(u8 taskId);
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId);
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId);
+static void Task_UpdateLvlInHealthbox(u8 taskId);
+static void PrintLinkStandbyMsg(void);
+static u32 CopyPlayerMonData(u8 monId, u8 *dst);
+static void SetPlayerMonData(u8 monId);
+static void DoSwitchOutAnimation(void);
+static void PlayerDoMoveAnimation(void);
+static void task05_08033660(u8 taskId);
+static void sub_8033AC8(void);
+static void sub_802FCAC(void);
+static void sub_80300F4(u8 taskId);
+static void sub_80303A8(u8 taskId);
+static void sub_8031FF4(u8 battlerId, bool8 dontClearSubstituteBit);
+static void sub_8033830(void);
+
+static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
+{
+ PlayerHandleGetMonData,
+ PlayerHandleGetRawMonData,
+ PlayerHandleSetMonData,
+ PlayerHandleSetRawMonData,
+ PlayerHandleLoadMonSprite,
+ PlayerHandleSwitchInAnim,
+ PlayerHandleReturnMonToBall,
+ PlayerHandleDrawTrainerPic,
+ PlayerHandleTrainerSlide,
+ PlayerHandleTrainerSlideBack,
+ PlayerHandleFaintAnimation,
+ PlayerHandlePaletteFade,
+ PlayerHandleSuccessBallThrowAnim,
+ PlayerHandleBallThrowAnim,
+ PlayerHandlePause,
+ PlayerHandleMoveAnimation,
+ PlayerHandlePrintString,
+ PlayerHandlePrintSelectionString,
+ PlayerHandleChooseAction,
+ PlayerHandleUnknownYesNoBox,
+ PlayerHandleChooseMove,
+ PlayerHandleChooseItem,
+ PlayerHandleChoosePokemon,
+ PlayerHandleCmd23,
+ PlayerHandleHealthBarUpdate,
+ PlayerHandleExpUpdate,
+ PlayerHandleStatusIconUpdate,
+ PlayerHandleStatusAnimation,
+ PlayerHandleStatusXor,
+ PlayerHandleDataTransfer,
+ PlayerHandleDMA3Transfer,
+ PlayerHandlePlayBGM,
+ PlayerHandleCmd32,
+ PlayerHandleTwoReturnValues,
+ PlayerHandleChosenMonReturnValue,
+ PlayerHandleOneReturnValue,
+ PlayerHandleOneReturnValue_Duplicate,
+ PlayerHandleCmd37,
+ PlayerHandleCmd38,
+ PlayerHandleCmd39,
+ PlayerHandleCmd40,
+ PlayerHandleHitAnimation,
+ PlayerHandleCmd42,
+ PlayerHandlePlaySE,
+ PlayerHandlePlayFanfare,
+ PlayerHandleFaintingCry,
+ PlayerHandleIntroSlide,
+ PlayerHandleIntroTrainerBallThrow,
+ PlayerHandleDrawPartyStatusSummary,
+ PlayerHandleHidePartyStatusSummary,
+ PlayerHandleEndBounceEffect,
+ PlayerHandleSpriteInvisibility,
+ PlayerHandleBattleAnimation,
+ PlayerHandleLinkStandbyMsg,
+ PlayerHandleResetActionMoveSelection,
+ PlayerHandleCmd55,
+ PlayerCmdEnd,
+};
+
+static const u8 sTargetIdentities[] = { B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT };
+
+// not used
+static const u8 gUnknown_8250984[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 };
+
+void nullsub_13(void)
+{
+}
+
+void SetControllerToPlayer(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = PlayerBufferRunCommand;
+ gDoingBattleAnim = FALSE;
+}
+
+static void PlayerBufferExecCompleted(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = PlayerBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ }
+ else
+ {
+ gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
+ }
+}
+
+static void PlayerBufferRunCommand(void)
+{
+ if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
+ {
+ if (gBattleBufferA[gActiveBattler][0] < NELEMS(sPlayerBufferCommands))
+ sPlayerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ else
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnBattlerSpritePosX_0(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
+ PlayerBufferExecCompleted();
+}
+
+static void HandleInputChooseAction(void)
+{
+ u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+
+ DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+
+ switch (gActionSelectionCursor[gActiveBattler])
+ {
+ case 0:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, 0);
+ break;
+ case 1:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0);
+ break;
+ case 2:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ break;
+ case 3:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_RUN, 0);
+ break;
+ }
+ PlayerBufferExecCompleted();
+ }
+ else if (JOY_NEW(DPAD_LEFT))
+ {
+ if (gActionSelectionCursor[gActiveBattler] & 1) // if is B_ACTION_USE_ITEM or B_ACTION_RUN
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(DPAD_RIGHT))
+ {
+ if (!(gActionSelectionCursor[gActiveBattler] & 1)) // if is B_ACTION_USE_MOVE or B_ACTION_SWITCH
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ if (gActionSelectionCursor[gActiveBattler] & 2) // if is B_ACTION_SWITCH or B_ACTION_RUN
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ if (!(gActionSelectionCursor[gActiveBattler] & 2)) // if is B_ACTION_USE_MOVE or B_ACTION_USE_ITEM
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT
+ && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)])
+ && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ if (gBattleBufferA[gActiveBattler][1] == B_ACTION_USE_ITEM)
+ {
+ // Add item to bag if it is a ball
+ if (itemId <= ITEM_PREMIER_BALL)
+ AddBagItem(itemId, 1);
+ else
+ return;
+ }
+ PlaySE(SE_SELECT);
+ BtlController_EmitTwoReturnValues(1, B_ACTION_CANCEL_PARTNER, 0);
+ PlayerBufferExecCompleted();
+ }
+ }
+ else if (JOY_NEW(START_BUTTON))
+ {
+ SwapHpBarsWithHpText();
+ }
+}
+
+static void sub_802E640(void)
+{
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
+}
+
+static void HandleInputChooseTarget(void)
+{
+ s32 i;
+ u8 identities[4];
+
+ memcpy(identities, sTargetIdentities, NELEMS(sTargetIdentities));
+ DoBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX, 15, 1);
+ i = 0;
+ if (gBattlersCount != 0)
+ {
+ do
+ {
+ if (i != gMultiUsePlayerCursor)
+ EndBounceEffect(i, BOUNCE_HEALTHBOX);
+ ++i;
+ }
+ while (i < gBattlersCount);
+ }
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098;
+ BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
+ EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
+ PlayerBufferExecCompleted();
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098;
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
+ EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
+ }
+ else if (JOY_NEW(DPAD_LEFT | DPAD_UP))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098;
+
+ do
+ {
+ u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor);
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
+ if (currSelIdentity == identities[i])
+ break;
+ do
+ {
+ if (--i < 0)
+ i = MAX_BATTLERS_COUNT; // UB: array out of range
+ gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]);
+ }
+ while (gMultiUsePlayerCursor == gBattlersCount);
+ i = 0;
+ switch (GetBattlerPosition(gMultiUsePlayerCursor))
+ {
+ case B_POSITION_PLAYER_LEFT:
+ case B_POSITION_PLAYER_RIGHT:
+ if (gActiveBattler != gMultiUsePlayerCursor)
+ ++i;
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
+ ++i;
+ break;
+ case B_POSITION_OPPONENT_LEFT:
+ case B_POSITION_OPPONENT_RIGHT:
+ ++i;
+ break;
+ }
+ if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
+ i = 0;
+ }
+ while (i == 0);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012044;
+ }
+ else if (JOY_NEW(DPAD_RIGHT | DPAD_DOWN))
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098;
+
+ do
+ {
+ u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor);
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
+ if (currSelIdentity == identities[i])
+ break;
+ do
+ {
+ if (++i > 3)
+ i = 0;
+ gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]);
+ }
+ while (gMultiUsePlayerCursor == gBattlersCount);
+ i = 0;
+ switch (GetBattlerPosition(gMultiUsePlayerCursor))
+ {
+ case B_POSITION_PLAYER_LEFT:
+ case B_POSITION_PLAYER_RIGHT:
+ if (gActiveBattler != gMultiUsePlayerCursor)
+ ++i;
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
+ ++i;
+ break;
+ case B_POSITION_OPPONENT_LEFT:
+ case B_POSITION_OPPONENT_RIGHT:
+ ++i;
+ break;
+ }
+ if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
+ i = 0;
+ }
+ while (i == 0);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012044;
+ }
+}
+
+void HandleInputChooseMove(void)
+{
+ bool32 canSelectTarget = FALSE;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+
+ sub_8033AC8();
+ if (JOY_NEW(A_BUTTON))
+ {
+ u8 moveTarget;
+
+ PlaySE(SE_SELECT);
+ if (moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] == MOVE_CURSE)
+ {
+ if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
+ moveTarget = MOVE_TARGET_USER;
+ else
+ moveTarget = MOVE_TARGET_SELECTED;
+ }
+ else
+ {
+ moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].target;
+ }
+
+ if (moveTarget & MOVE_TARGET_USER)
+ gMultiUsePlayerCursor = gActiveBattler;
+ else
+ gMultiUsePlayerCursor = GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) & BIT_SIDE) ^ BIT_SIDE);
+
+ if (!gBattleBufferA[gActiveBattler][1]) // not a double battle
+ {
+ if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleBufferA[gActiveBattler][2])
+ ++canSelectTarget;
+ }
+ else // double battle
+ {
+ if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER)))
+ ++canSelectTarget; // either selected or user
+ if (moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] == 0)
+ {
+ canSelectTarget = FALSE;
+ }
+ else if (!(moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
+ {
+ gMultiUsePlayerCursor = GetDefaultMoveTarget(gActiveBattler);
+ canSelectTarget = FALSE;
+ }
+ }
+ ResetPaletteFadeControl();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ if (!canSelectTarget)
+ {
+ BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
+ if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
+ gMultiUsePlayerCursor = gActiveBattler;
+ else if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)])
+ gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ else
+ gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012044;
+ }
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BtlController_EmitTwoReturnValues(1, 10, 0xFFFF);
+ PlayerBufferExecCompleted();
+ ResetPaletteFadeControl();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ else if (JOY_NEW(DPAD_LEFT))
+ {
+ if (gMoveSelectionCursor[gActiveBattler] & 1)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ }
+ else if (JOY_NEW(DPAD_RIGHT))
+ {
+ if (!(gMoveSelectionCursor[gActiveBattler] & 1)
+ && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ if (gMoveSelectionCursor[gActiveBattler] & 2)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ if (!(gMoveSelectionCursor[gActiveBattler] & 2)
+ && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ BeginNormalPaletteFade(0xF0000, 0, 0, 0, RGB_WHITE);
+ }
+ }
+ else if (JOY_NEW(SELECT_BUTTON))
+ {
+ if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ if (gMoveSelectionCursor[gActiveBattler] != 0)
+ gMultiUsePlayerCursor = 0;
+ else
+ gMultiUsePlayerCursor = gMoveSelectionCursor[gActiveBattler] + 1;
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ BattlePutTextOnWindow(gText_BattleSwitchWhich, 0xB);
+ gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitching;
+ }
+ }
+}
+
+// not used
+static u32 sub_802EDDC(void)
+{
+ u32 var = 0;
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ var = 1;
+ }
+ if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0x140;
+ var = 0xFF;
+ }
+ if (JOY_NEW(DPAD_LEFT) && gMoveSelectionCursor[gActiveBattler] & 1)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ }
+ if (JOY_NEW(DPAD_RIGHT) && !(gMoveSelectionCursor[gActiveBattler] & 1)
+ && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 1;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ }
+ if (JOY_NEW(DPAD_UP) && gMoveSelectionCursor[gActiveBattler] & 2)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ }
+ if (JOY_NEW(DPAD_DOWN) && !(gMoveSelectionCursor[gActiveBattler] & 2)
+ && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose)
+ {
+ MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
+ gMoveSelectionCursor[gActiveBattler] ^= 2;
+ PlaySE(SE_SELECT);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ }
+ return var;
+}
+
+static void HandleMoveSwitching(void)
+{
+ u8 perMovePPBonuses[4];
+ struct ChooseMoveStruct moveStruct;
+ u8 totalPPBonuses;
+
+ if (JOY_NEW(A_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+
+ if (gMoveSelectionCursor[gActiveBattler] != gMultiUsePlayerCursor)
+ {
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+ s32 i;
+
+ // swap moves and pp
+ i = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]];
+ moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] = moveInfo->moves[gMultiUsePlayerCursor];
+ moveInfo->moves[gMultiUsePlayerCursor] = i;
+ i = moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]];
+ moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] = moveInfo->currentPp[gMultiUsePlayerCursor];
+ moveInfo->currentPp[gMultiUsePlayerCursor] = i;
+ i = moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]];
+ moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]] = moveInfo->maxPp[gMultiUsePlayerCursor];
+ moveInfo->maxPp[gMultiUsePlayerCursor] = i;
+ if (gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[gMoveSelectionCursor[gActiveBattler]])
+ {
+ gDisableStructs[gActiveBattler].mimickedMoves &= (~gBitTable[gMoveSelectionCursor[gActiveBattler]]);
+ gDisableStructs[gActiveBattler].mimickedMoves |= gBitTable[gMultiUsePlayerCursor];
+ }
+ MoveSelectionDisplayMoveNames();
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ perMovePPBonuses[i] = (gBattleMons[gActiveBattler].ppBonuses & (3 << (i * 2))) >> (i * 2);
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]] = perMovePPBonuses[gMultiUsePlayerCursor];
+ perMovePPBonuses[gMultiUsePlayerCursor] = totalPPBonuses;
+ totalPPBonuses = 0;
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+
+ gBattleMons[gActiveBattler].ppBonuses = totalPPBonuses;
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ gBattleMons[gActiveBattler].moves[i] = moveInfo->moves[i];
+ gBattleMons[gActiveBattler].pp[i] = moveInfo->currentPp[i];
+ }
+ if (!(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
+ {
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ moveStruct.moves[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + i);
+ moveStruct.currentPp[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP1 + i);
+ }
+
+ totalPPBonuses = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP_BONUSES);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2);
+ i = moveStruct.moves[gMoveSelectionCursor[gActiveBattler]];
+ moveStruct.moves[gMoveSelectionCursor[gActiveBattler]] = moveStruct.moves[gMultiUsePlayerCursor];
+ moveStruct.moves[gMultiUsePlayerCursor] = i;
+ i = moveStruct.currentPp[gMoveSelectionCursor[gActiveBattler]];
+ moveStruct.currentPp[gMoveSelectionCursor[gActiveBattler]] = moveStruct.currentPp[gMultiUsePlayerCursor];
+ moveStruct.currentPp[gMultiUsePlayerCursor] = i;
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBattler]] = perMovePPBonuses[gMultiUsePlayerCursor];
+ perMovePPBonuses[gMultiUsePlayerCursor] = totalPPBonuses;
+ totalPPBonuses = 0;
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + i, &moveStruct.moves[i]);
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP1 + i, &moveStruct.currentPp[i]);
+ }
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_PP_BONUSES, &totalPPBonuses);
+ }
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
+ gBattlerControllerFuncs[gActiveBattler] = sub_80E7988;
+ else
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ gMoveSelectionCursor[gActiveBattler] = gMultiUsePlayerCursor;
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpString();
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
+ gBattlerControllerFuncs[gActiveBattler] = sub_80E7988;
+ else
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ MoveSelectionDisplayPpString();
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+ }
+ if (JOY_NEW(DPAD_LEFT))
+ {
+ if (gMultiUsePlayerCursor & 1)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor ^= 1;
+ PlaySE(SE_SELECT);
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+ if (JOY_NEW(DPAD_RIGHT))
+ {
+ if (!(gMultiUsePlayerCursor & 1) && (gMultiUsePlayerCursor ^ 1) < gNumberOfMovesToChoose)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor ^= 1;
+ PlaySE(SE_SELECT);
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+ if (JOY_NEW(DPAD_UP))
+ {
+ if (gMultiUsePlayerCursor & 2)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor ^= 2;
+ PlaySE(SE_SELECT);
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+ if (JOY_NEW(DPAD_DOWN))
+ {
+ if (!(gMultiUsePlayerCursor & 2) && (gMultiUsePlayerCursor ^ 2) < gNumberOfMovesToChoose)
+ {
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 29);
+ else
+ MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor);
+ gMultiUsePlayerCursor ^= 2;
+ PlaySE(SE_SELECT);
+ if (gMultiUsePlayerCursor == gMoveSelectionCursor[gActiveBattler])
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 0);
+ else
+ MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
+ }
+ }
+}
+
+static void sub_802F610(void)
+{
+ if (gWirelessCommType == 0)
+ {
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ m4aSongNumStop(SE_T_OOAME);
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(sub_8011A1C);
+ FreeAllWindowBuffers();
+ }
+ }
+ else if (IsLinkTaskFinished())
+ {
+ m4aSongNumStop(SE_T_OOAME);
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(sub_8011A1C);
+ FreeAllWindowBuffers();
+ }
+}
+
+void sub_802F6A8(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gWirelessCommType == 0)
+ sub_800AAC0();
+ else
+ sub_800AB9C();
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F610;
+ }
+ else
+ {
+ m4aSongNumStop(SE_T_OOAME);
+ gMain.inBattle = 0;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+ }
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy2(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+static void sub_802F7A0(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ {
+ nullsub_16(gSaveBlock2Ptr->playerGender);
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_802F810(void)
+{
+ if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_802F858(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 == SpriteCallbackDummy)
+ 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);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ if (IsDoubleBattle())
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], gActiveBattler ^ BIT_FLANK);
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3;
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F810;
+ }
+}
+
+static void sub_802FA58(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive)
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80)
+ sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80)
+ sub_80F1720(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]);
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler ^ BIT_FLANK);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]);
+ }
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ gBattleSpritesDataPtr->animationData->field_9_x1 = 0;
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F858;
+ }
+}
+
+static void sub_802FBF4(void)
+{
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
+ && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
+ gBattlerControllerFuncs[gActiveBattler] = sub_802FCAC;
+ }
+}
+
+static void sub_802FCAC(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive
+ && !IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_802FD18(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80
+ && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)
+ sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]);
+ if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy
+ && !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive))
+ {
+ DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler],
+ &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]],
+ HEALTHBOX_ALL);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = sub_802FBF4;
+ }
+}
+
+void c3_0802FDF4(u8 taskId)
+{
+ if (!IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
+ DestroyTask(taskId);
+ }
+}
+
+static void CompleteOnHealthbarDone(void)
+{
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+
+ if (hpValue != -1)
+ {
+ UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT);
+ }
+ else
+ {
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ PlayerBufferExecCompleted();
+}
+
+#define tExpTask_monId data[0]
+#define tExpTask_gainedExp data[1]
+#define tExpTask_battler data[2]
+#define tExpTask_frames data[10]
+// TODO: document other used fields
+
+static void Task_GiveExpToMon(u8 taskId)
+{
+ u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+
+ if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // Give exp without moving the expbar.
+ {
+ struct Pokemon *mon = &gPlayerParty[monId];
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u32 currExp = GetMonData(mon, MON_DATA_EXP);
+ u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= nextLvlExp)
+ {
+ u8 savedActiveBattler;
+
+ SetMonData(mon, MON_DATA_EXP, &nextLvlExp);
+ CalculateMonStats(mon);
+ gainedExp -= nextLvlExp - currExp;
+ savedActiveBattler = gActiveBattler;
+ gActiveBattler = battlerId;
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
+ gActiveBattler = savedActiveBattler;
+ if (IsDoubleBattle() == TRUE
+ && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
+ gTasks[taskId].func = Task_LaunchLvlUpAnim;
+ else
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(mon, MON_DATA_EXP, &currExp);
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = Task_PrepareToGiveExpWithExpBar;
+ }
+}
+
+static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
+{
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+ s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ struct Pokemon *mon = &gPlayerParty[monIndex];
+ u8 level = GetMonData(mon, MON_DATA_LEVEL);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 exp = GetMonData(mon, MON_DATA_EXP);
+ u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ u32 expToNextLvl;
+
+ exp -= currLvlExp;
+ expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
+ SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
+ PlaySE(SE_U);
+ gTasks[taskId].func = sub_80300F4;
+}
+
+static void sub_80300F4(u8 taskId)
+{
+ if (gTasks[taskId].tExpTask_frames < 13)
+ {
+ ++gTasks[taskId].tExpTask_frames;
+ }
+ else
+ {
+ u8 monId = gTasks[taskId].tExpTask_monId;
+ s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ s16 newExpPoints;
+
+ newExpPoints = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
+ if (newExpPoints == -1) // The bar has been filled with given exp points.
+ {
+ u8 level;
+ s32 currExp;
+ u16 species;
+ s32 expOnNextLvl;
+
+ m4aSongNumStop(SE_U);
+ level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+ if (currExp + gainedExp >= expOnNextLvl)
+ {
+ u8 savedActiveBattler;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl);
+ CalculateMonStats(&gPlayerParty[monId]);
+ gainedExp -= expOnNextLvl - currExp;
+ savedActiveBattler = gActiveBattler;
+ gActiveBattler = battlerId;
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
+ gActiveBattler = savedActiveBattler;
+ gTasks[taskId].func = Task_LaunchLvlUpAnim;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+static void Task_LaunchLvlUpAnim(u8 taskId)
+{
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ battlerId ^= BIT_FLANK;
+ InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP);
+ gTasks[taskId].func = Task_UpdateLvlInHealthbox;
+}
+
+static void Task_UpdateLvlInHealthbox(u8 taskId)
+{
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+
+ if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive)
+ {
+ u8 monIndex = gTasks[taskId].tExpTask_monId;
+
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value.
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ else
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
+ }
+}
+
+static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
+{
+ u8 monIndex;
+ s32 battlerId = gTasks[taskId].tExpTask_battler;
+
+ if (IsBattlerSpriteVisible((u8)battlerId) == TRUE)
+ {
+ gTasks[taskId].func = sub_80303A8;
+ gTasks[taskId].data[15] = 0;
+ }
+ else
+ {
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_80303A8(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 battlerId = tExpTask_battler;
+ u16 v5 = sub_80768B0(battlerId);
+ bool32 v6 = ((v5 ^ BIT_SIDE)) != B_SIDE_PLAYER;
+ struct Sprite *sprite = &gSprites[gBattlerSpriteIds[battlerId]];
+
+ switch (data[15])
+ {
+ case 0:
+ if (!IsTextPrinterActive(0))
+ {
+ if (!v6)
+ {
+ data[14] = gBattle_BG1_X;
+ data[13] = gBattle_BG1_Y;
+ gBattle_BG1_X = -(sprite->pos1.x + sprite->pos2.x) + 32;
+ gBattle_BG1_Y = -(sprite->pos1.y + sprite->pos2.y) + 32;
+ }
+ else
+ {
+ data[14] = gBattle_BG2_X;
+ data[13] = gBattle_BG2_Y;
+ gBattle_BG2_X = -(sprite->pos1.x + sprite->pos2.x) + 32;
+ gBattle_BG2_Y = -(sprite->pos1.y + sprite->pos2.y) + 32;
+ }
+ ++data[15];
+ }
+ break;
+ case 1:
+ {
+ u32 battlerIdAlt = battlerId;
+ bool32 v6Alt = v6;
+
+ sub_8072E48(battlerIdAlt, v6Alt);
+ }
+ ++data[15];
+ break;
+ case 2:
+ PlaySE(SE_T_KAMI2);
+ if (IsMonGettingExpSentOut())
+ sub_811E5B8(sprite->pos1.x + sprite->pos2.x,
+ sprite->pos1.y + sprite->pos2.y,
+ 10000,
+ 10000,
+ 1,
+ 0);
+ ++data[15];
+ break;
+ case 3:
+ if (!sub_811E680())
+ {
+ sprite->invisible = FALSE;
+ ++data[15];
+ }
+ break;
+ case 5:
+ sub_8073128(v6);
+ ++data[15];
+ break;
+ case 4:
+ ++data[15];
+ break;
+ case 6:
+ if (!v6)
+ {
+ gBattle_BG1_X = data[14];
+ gBattle_BG1_Y = data[13];
+ }
+ else
+ {
+ gBattle_BG2_X = data[14];
+ gBattle_BG2_Y = data[13];
+ }
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void sub_8030538(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT)
+ {
+ FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void sub_80305A0(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnInactiveTextPrinter2(void)
+{
+ if (!IsTextPrinterActive(0))
+ PlayerBufferExecCompleted();
+}
+
+static void OpenPartyMenuToChooseMon(void)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 caseId;
+
+ gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection;
+ caseId = gTasks[gUnknown_3004FFC[gActiveBattler]].data[0];
+ DestroyTask(gUnknown_3004FFC[gActiveBattler]);
+ FreeAllWindowBuffers();
+ OpenPartyMenuInBattle(caseId);
+ }
+}
+
+static void WaitForMonSelection(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ if (gUnknown_203B0C0 == 1)
+ BtlController_EmitChosenMonReturnValue(1, gUnknown_203B0C1, gUnknown_203B0DC);
+ else
+ BtlController_EmitChosenMonReturnValue(1, 6, NULL);
+
+ if ((gBattleBufferA[gActiveBattler][1] & 0xF) == 1)
+ PrintLinkStandbyMsg();
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void OpenBagAndChooseItem(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem;
+ nullsub_44();
+ FreeAllWindowBuffers();
+ sub_8107ECC();
+ }
+}
+
+static void CompleteWhenChoseItem(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId);
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void CompleteOnSpecialAnimDone(void)
+{
+ if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ PlayerBufferExecCompleted();
+}
+
+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;
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ if ((gSprites[spriteId].data[1] % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ ++gSprites[spriteId].data[1];
+ }
+}
+
+static void MoveSelectionDisplayMoveNames(void)
+{
+ s32 i;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+ gNumberOfMovesToChoose = 0;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ MoveSelectionDestroyCursorAt(i);
+ StringCopy(gDisplayedStringBattle, gUnknown_83FE770);
+ StringAppend(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, i + 3);
+ if (moveInfo->moves[i] != MOVE_NONE)
+ ++gNumberOfMovesToChoose;
+ }
+}
+
+static void MoveSelectionDisplayPpString(void)
+{
+ StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 7);
+}
+
+static void MoveSelectionDisplayPpNumber(void)
+{
+ u8 *txtPtr;
+ struct ChooseMoveStruct *moveInfo;
+
+ if (gBattleBufferA[gActiveBattler][2] == TRUE) // check if we didn't want to display pp number
+ return;
+ SetPpNumbersPaletteInMoveSelection();
+ moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+ txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
+ *txtPtr = CHAR_SLASH;
+ ConvertIntToDecimalStringN(++txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 9);
+}
+
+static void MoveSelectionDisplayMoveType(void)
+{
+ u8 *txtPtr;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+
+ txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType);
+ *txtPtr++ = EXT_CTRL_CODE_BEGIN;
+ *txtPtr++ = 6;
+ *txtPtr++ = 1;
+ txtPtr = StringCopy(txtPtr, gUnknown_83FE770);
+ StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 8);
+}
+
+void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
+{
+ u16 src[2];
+
+ src[0] = arg1 + 1;
+ src[1] = arg1 + 2;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 9 * (cursorPosition & 1) + 1, 55 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void MoveSelectionDestroyCursorAt(u8 cursorPosition)
+{
+ u16 src[2];
+
+ src[0] = 32;
+ src[1] = 32;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 9 * (cursorPosition & 1) + 1, 55 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void ActionSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
+{
+ u16 src[2];
+
+ src[0] = 1;
+ src[1] = 2;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 7 * (cursorPosition & 1) + 16, 35 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void ActionSelectionDestroyCursorAt(u8 cursorPosition)
+{
+ u16 src[2];
+
+ src[0] = 32;
+ src[1] = 32;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 7 * (cursorPosition & 1) + 16, 35 + (cursorPosition & 2), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void SetCB2ToReshowScreenAfterMenu(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+void SetCB2ToReshowScreenAfterMenu2(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive)
+ PlayerBufferExecCompleted();
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive)
+ PlayerBufferExecCompleted();
+}
+
+static void PrintLinkStandbyMsg(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ BattlePutTextOnWindow(gText_LinkStandby, 0);
+ }
+}
+
+static void PlayerHandleGetMonData(void)
+{
+ u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data
+ u32 size = 0;
+ u8 monToCheck;
+ s32 i;
+
+ if (gBattleBufferA[gActiveBattler][2] == 0)
+ {
+ size += CopyPlayerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ size += CopyPlayerMonData(i, monData + size);
+ monToCheck >>= 1;
+ }
+ }
+ BtlController_EmitDataTransfer(1, size, monData);
+ PlayerBufferExecCompleted();
+}
+
+static u32 CopyPlayerMonData(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(&gPlayerParty[monId], MON_DATA_SPECIES);
+ battleMon.item = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ for (size = 0; size < MAX_MON_MOVES; ++size)
+ {
+ battleMon.moves[size] = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ battleMon.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ battleMon.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
+ battleMon.friendship = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ battleMon.experience = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ battleMon.hpIV = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ battleMon.attackIV = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ battleMon.defenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ battleMon.speedIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV);
+ battleMon.spAttackIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ battleMon.spDefenseIV = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ battleMon.personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ battleMon.status1 = GetMonData(&gPlayerParty[monId], MON_DATA_STATUS);
+ battleMon.level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ battleMon.hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ battleMon.maxHP = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ battleMon.attack = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ battleMon.defense = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ battleMon.speed = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED);
+ battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG);
+ battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM);
+ battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID);
+ GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battleMon.nickname, nickname);
+ GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_SPECIES);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ data16 = GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gPlayerParty[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(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_PP1 + size);
+ dst[size] = GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ size = 1;
+ break;
+ case REQUEST_OTID_BATTLE:
+ data32 = GetMonData(&gPlayerParty[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(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ dst[1] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ dst[2] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ dst[3] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV);
+ dst[4] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ dst[5] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV);
+ size = 1;
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ data32 = GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_CHECKSUM);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_STATUS_BATTLE:
+ data32 = GetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case REQUEST_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_ATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_ATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_DEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_DEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPEED_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPEED);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPATK_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF);
+ dst[0] = data16;
+ dst[1] = data16 >> 8;
+ size = 2;
+ break;
+ case REQUEST_COOL_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case REQUEST_CUTE_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case REQUEST_SMART_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+ return size;
+}
+
+void PlayerHandleGetRawMonData(void)
+{
+ struct BattlePokemon battleMon;
+ u8 *src = (u8 *)&gPlayerParty[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);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleSetMonData(void)
+{
+ u8 monToCheck;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBattler][2] == 0)
+ {
+ SetPlayerMonData(gBattlerPartyIndexes[gActiveBattler]);
+ }
+ else
+ {
+ monToCheck = gBattleBufferA[gActiveBattler][2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (monToCheck & 1)
+ SetPlayerMonData(i);
+ monToCheck >>= 1;
+ }
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void SetPlayerMonData(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(&gPlayerParty[monId], MON_DATA_SPECIES, &battlePokemon->species);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &battlePokemon->item);
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &battlePokemon->pp[i]);
+ }
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &battlePokemon->friendship);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &iv);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &battlePokemon->personality);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &battlePokemon->status1);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &battlePokemon->level);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &battlePokemon->hp);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &battlePokemon->maxHP);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &battlePokemon->attack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &battlePokemon->defense);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &battlePokemon->speed);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &battlePokemon->spAttack);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &battlePokemon->spDefense);
+ }
+ break;
+ case REQUEST_SPECIES_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HELDITEM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MOVES_PP_BATTLE:
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + i, &moveData->moves[i]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + i, &moveData->pp[i]);
+ }
+ SetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PP_DATA_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[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(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_OTID_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_EXP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_EV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_FRIENDSHIP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKERUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LOCATION_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MET_GAME_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_POKEBALL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ALL_IVS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ break;
+ case REQUEST_HP_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_IV_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_PERSONALITY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CHECKSUM_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_STATUS_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_LEVEL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_MAX_HP_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_ATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_DEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPEED_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPATK_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SPDEF_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SHEEN_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_COOL_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_BEAUTY_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_CUTE_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_SMART_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ case REQUEST_TOUGH_RIBBON_BATTLE:
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ break;
+ }
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+}
+
+static void PlayerHandleSetRawMonData(void)
+{
+ u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBattler][2]; ++i)
+ dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleLoadMonSprite(void)
+{
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpritePosX_0;
+}
+
+static void PlayerHandleSwitchInAnim(void)
+{
+ ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ gActionSelectionCursor[gActiveBattler] = 0;
+ gMoveSelectionCursor[gActiveBattler] = 0;
+ sub_8031FF4(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerControllerFuncs[gActiveBattler] = sub_802FD18;
+}
+
+static void sub_8031FF4(u8 battlerId, bool8 dontClearSubstituteBit)
+{
+ u16 species;
+
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C);
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ GetBattlerSpriteSubpriority(battlerId));
+ gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+}
+
+static void PlayerHandleReturnMonToBall(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] == 0)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+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_PLAYER_MON);
+ gBattlerControllerFuncs[gActiveBattler] = sub_80305A0;
+ }
+ break;
+ }
+}
+
+static void PlayerHandleDrawTrainerPic(void)
+{
+ s16 xPos;
+ u32 trainerPicId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != B_FLANK_LEFT) // Second mon, on the right.
+ xPos = 90;
+ else // First mon, on the left.
+ xPos = 32;
+
+ }
+ else
+ {
+ xPos = 80;
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD)
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 2;
+ else
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 0;
+ }
+ else
+ {
+ trainerPicId = gSaveBlock2Ptr->playerGender + 0;
+ }
+ DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ xPos,
+ (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80,
+ GetBattlerSpriteSubpriority(gActiveBattler));
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
+}
+
+static void PlayerHandleTrainerSlide(void)
+{
+ u32 trainerPicId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE
+ || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD)
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 2;
+ else
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 0;
+ }
+ else
+ {
+ trainerPicId = gSaveBlock2Ptr->playerGender + 0;
+ }
+ DecompressTrainerBackPalette(trainerPicId, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ 80,
+ (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80,
+ 30);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2;
+}
+
+static void PlayerHandleTrainerSlideBack(void)
+{
+ SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F7A0;
+}
+
+static void PlayerHandleFaintAnimation(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0)
+ {
+ if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON);
+ ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState;
+ }
+ else
+ {
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_ATTACKER);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110;
+ gBattlerControllerFuncs[gActiveBattler] = sub_8030538;
+ }
+ }
+}
+
+static void PlayerHandlePaletteFade(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, RGB_BLACK);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleSuccessBallThrowAnim(void)
+{
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
+ gDoingBattleAnim = TRUE;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
+}
+
+static void PlayerHandleBallThrowAnim(void)
+{
+ u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1];
+
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
+ gDoingBattleAnim = TRUE;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
+}
+
+static void PlayerHandlePause(void)
+{
+ u8 var = gBattleBufferA[gActiveBattler][1];
+
+ while (var)
+ --var;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleMoveAnimation(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.
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation;
+ }
+ }
+}
+
+static void PlayerDoMoveAnimation(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;
+ PlayerBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+static void PlayerHandlePrintString(void)
+{
+ u16 *stringId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]);
+ BufferStringBattle(*stringId);
+ if (sub_80D89B0(*stringId))
+ BattlePutTextOnWindow(gDisplayedStringBattle, 64);
+ else
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
+}
+
+static void PlayerHandlePrintSelectionString(void)
+{
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ PlayerHandlePrintString();
+ else
+ PlayerBufferExecCompleted();
+}
+
+static void HandleChooseActionAfterDma3(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 160;
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction;
+ }
+}
+
+static void PlayerHandleChooseAction(void)
+{
+ s32 i;
+
+ gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
+ BattlePutTextOnWindow(gUnknown_83FDA4C, 0);
+ BattlePutTextOnWindow(gUnknown_83FE725, 2);
+ for (i = 0; i < 4; ++i)
+ ActionSelectionDestroyCursorAt(i);
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 1);
+}
+
+static void PlayerHandleUnknownYesNoBox(void)
+{
+}
+
+static void HandleChooseMoveAfterDma3(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 320;
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ }
+}
+
+static void PlayerHandleChooseMove(void)
+{
+ InitMoveSelectionsVarsAndStrings();
+ gBattlerControllerFuncs[gActiveBattler] = HandleChooseMoveAfterDma3;
+}
+
+void InitMoveSelectionsVarsAndStrings(void)
+{
+ MoveSelectionDisplayMoveNames();
+ gMultiUsePlayerCursor = 0xFF;
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpString();
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
+}
+
+static void PlayerHandleChooseItem(void)
+{
+ s32 i;
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
+ gBattlerInMenuId = gActiveBattler;
+ for (i = 0; i < 3; ++i)
+ gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][1 + i];
+}
+
+static void PlayerHandleChoosePokemon(void)
+{
+ s32 i;
+
+ gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF);
+ gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF;
+ *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4;
+ *(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2];
+ *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
+ for (i = 0; i < 3; ++i)
+ gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][4 + i];
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
+ gBattlerInMenuId = gActiveBattler;
+}
+
+static void PlayerHandleCmd23(void)
+{
+ BattleStopLowHpSound();
+ BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, RGB_BLACK);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleHealthBarUpdate(void)
+{
+ s16 hpVal;
+
+ LoadBattleBarGfx(0);
+ hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ if (hpVal != INSTANT_HP_BAR_DROP)
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
+
+ SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal);
+ UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT);
+ }
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone;
+}
+
+static void PlayerHandleExpUpdate(void)
+{
+ u8 monId = gBattleBufferA[gActiveBattler][1];
+
+ if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ s16 expPointsToGive;
+ u8 taskId;
+
+ LoadBattleBarGfx(1);
+ GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // Unused return value.
+ expPointsToGive = T1_READ_16(&gBattleBufferA[gActiveBattler][2]);
+ taskId = CreateTask(Task_GiveExpToMon, 10);
+ gTasks[taskId].tExpTask_monId = monId;
+ gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
+ gTasks[taskId].tExpTask_battler = gActiveBattler;
+ gBattlerControllerFuncs[gActiveBattler] = nullsub_13;
+ }
+}
+
+static void PlayerHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBattler))
+ {
+ u8 battlerId;
+
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
+ }
+}
+
+static void PlayerHandleStatusAnimation(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 PlayerHandleStatusXor(void)
+{
+ u8 val = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBattler][1];
+
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS, &val);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleDataTransfer(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleDMA3Transfer(void)
+{
+ u32 dstArg = gBattleBufferA[gActiveBattler][1]
+ | (gBattleBufferA[gActiveBattler][2] << 8)
+ | (gBattleBufferA[gActiveBattler][3] << 16)
+ | (gBattleBufferA[gActiveBattler][4] << 24);
+ u16 sizeArg = gBattleBufferA[gActiveBattler][5] | (gBattleBufferA[gActiveBattler][6] << 8);
+ const u8 *src = &gBattleBufferA[gActiveBattler][7];
+ u8 *dst = (u8 *)(dstArg);
+ u32 size = sizeArg;
+
+ while (TRUE)
+ {
+ if (size <= 0x1000)
+ {
+ DmaCopy16(3, src, dst, size);
+ break;
+ }
+ DmaCopy16(3, src, dst, 0x1000);
+ src += 0x1000;
+ dst += 0x1000;
+ size -= 0x1000;
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandlePlayBGM(void)
+{
+ PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd32(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleTwoReturnValues(void)
+{
+ BtlController_EmitTwoReturnValues(1, 0, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleChosenMonReturnValue(void)
+{
+ BtlController_EmitChosenMonReturnValue(1, 0, NULL);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleOneReturnValue(void)
+{
+ BtlController_EmitOneReturnValue(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleOneReturnValue_Duplicate(void)
+{
+ BtlController_EmitOneReturnValue_Duplicate(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd37(void)
+{
+ gUnknown_2022870.field_0 = 0;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd38(void)
+{
+ gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1];
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd39(void)
+{
+ gUnknown_2022870.flag_x80 = 0;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd40(void)
+{
+ gUnknown_2022870.flag_x80 ^= 1;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleHitAnimation(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = TRUE;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
+ DoHitAnimHealthboxEffect(gActiveBattler);
+ gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect;
+ }
+}
+
+static void PlayerHandleCmd42(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandlePlaySE(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);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandlePlayFanfare(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleFaintingCry(void)
+{
+ PlayCry3(GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES), -25, 5);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ gIntroSlideFlags |= 1;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleIntroTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+
+ SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80755B8;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
+ StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
+ paletteNum = AllocSpritePalette(0xD6F8);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
+ taskId = CreateTask(task05_08033660, 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_13;
+}
+
+void sub_80335F8(struct Sprite *sprite)
+{
+ u8 battlerId = sprite->data[5];
+
+ FreeSpriteOamMatrix(sprite);
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
+ DestroySprite(sprite);
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
+}
+
+static void task05_08033660(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 31)
+ {
+ ++gTasks[taskId].data[1];
+ }
+ else
+ {
+ u8 savedActiveBattler = gActiveBattler;
+
+ gActiveBattler = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_8031FF4(gActiveBattler, FALSE);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ sub_8031FF4(gActiveBattler, FALSE);
+ gActiveBattler ^= BIT_FLANK;
+ gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ sub_8031FF4(gActiveBattler, FALSE);
+ gActiveBattler ^= BIT_FLANK;
+ }
+ gBattlerControllerFuncs[gActiveBattler] = sub_802FA58;
+ gActiveBattler = savedActiveBattler;
+ DestroyTask(taskId);
+ }
+}
+
+static void PlayerHandleDrawPartyStatusSummary(void)
+{
+ if (gBattleBufferA[gActiveBattler][1] && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
+ 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] != 0)
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0x5D;
+ gBattlerControllerFuncs[gActiveBattler] = sub_8033830;
+ }
+}
+
+static void sub_8033830(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void PlayerHandleHidePartyStatusSummary(void)
+{
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleEndBounceEffect(void)
+{
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleSpriteInvisibility(void)
+{
+ if (IsBattlerSpritePresent(gActiveBattler))
+ {
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ CopyBattleSpriteInvisibility(gActiveBattler);
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleBattleAnimation(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))
+ PlayerBufferExecCompleted();
+ else
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
+ }
+}
+
+static void PlayerHandleLinkStandbyMsg(void)
+{
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case 0:
+ PrintLinkStandbyMsg();
+ // fall through
+ case 1:
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
+ break;
+ case 2:
+ PrintLinkStandbyMsg();
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleResetActionMoveSelection(void)
+{
+ switch (gBattleBufferA[gActiveBattler][1])
+ {
+ case RESET_ACTION_MOVE_SELECTION:
+ gActionSelectionCursor[gActiveBattler] = 0;
+ gMoveSelectionCursor[gActiveBattler] = 0;
+ break;
+ case RESET_ACTION_SELECTION:
+ gActionSelectionCursor[gActiveBattler] = 0;
+ break;
+ case RESET_MOVE_SELECTION:
+ gMoveSelectionCursor[gActiveBattler] = 0;
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+static void PlayerHandleCmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ PlayerBufferExecCompleted();
+ gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8;
+}
+
+static void PlayerCmdEnd(void)
+{
+}
+
+static void sub_8033AC8(void)
+{
+ u32 bitMask = 0;
+ u8 startY = 0;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ u8 moveTarget;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]);
+ u16 move = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]];
+
+ if (move == MOVE_CURSE)
+ {
+ if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
+ moveTarget = MOVE_TARGET_USER;
+ else
+ moveTarget = MOVE_TARGET_SELECTED;
+ }
+ else
+ {
+ moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].target;
+ }
+ switch (moveTarget)
+ {
+ case MOVE_TARGET_SELECTED:
+ case MOVE_TARGET_DEPENDS:
+ case MOVE_TARGET_USER_OR_SELECTED:
+ case MOVE_TARGET_RANDOM:
+ bitMask = 0xF0000;
+ startY = 0;
+ break;
+ case MOVE_TARGET_BOTH:
+ case MOVE_TARGET_OPPONENTS_FIELD:
+ bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]
+ | gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]) << 16;
+ startY = 8;
+ break;
+ case MOVE_TARGET_USER:
+ switch (move)
+ {
+ case MOVE_HAZE:
+ case MOVE_SANDSTORM:
+ case MOVE_PERISH_SONG:
+ case MOVE_RAIN_DANCE:
+ case MOVE_SUNNY_DAY:
+ case MOVE_HAIL:
+ case MOVE_MUD_SPORT:
+ case MOVE_WATER_SPORT:
+ bitMask = 0xF0000;
+ break;
+ case MOVE_SAFEGUARD:
+ case MOVE_REFLECT:
+ case MOVE_LIGHT_SCREEN:
+ case MOVE_MIST:
+ case MOVE_HEAL_BELL:
+ case MOVE_AROMATHERAPY:
+ bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]
+ | gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]) << 16;
+ break;
+ case MOVE_HELPING_HAND:
+ bitMask = (gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)]) << 16;
+ break;
+ default:
+ bitMask = (gBitTable[gActiveBattler]) << 16;
+ break;
+ }
+ startY = 8;
+ break;
+ case MOVE_TARGET_FOES_AND_ALLY:
+ bitMask = (gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]
+ | gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)]
+ | gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]) << 16;
+ startY = 8;
+ break;
+ }
+ BeginNormalPaletteFade(bitMask, 8, startY, 0, RGB_WHITE);
+ }
+}
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
new file mode 100644
index 000000000..4b5153c7c
--- /dev/null
+++ b/src/battle_controller_safari.c
@@ -0,0 +1,677 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_message.h"
+#include "bg.h"
+#include "data.h"
+#include "item_menu.h"
+#include "link.h"
+#include "main.h"
+#include "m4a.h"
+#include "palette.h"
+#include "pokeball.h"
+#include "pokemon.h"
+#include "reshow_battle_screen.h"
+#include "sound.h"
+#include "task.h"
+#include "text.h"
+#include "util.h"
+#include "window.h"
+#include "strings.h"
+#include "constants/songs.h"
+#include "constants/battle_anim.h"
+
+static void SafariHandleGetMonData(void);
+static void SafariHandleGetRawMonData(void);
+static void SafariHandleSetMonData(void);
+static void SafariHandleSetRawMonData(void);
+static void SafariHandleLoadMonSprite(void);
+static void SafariHandleSwitchInAnim(void);
+static void SafariHandleReturnMonToBall(void);
+static void SafariHandleDrawTrainerPic(void);
+static void SafariHandleTrainerSlide(void);
+static void SafariHandleTrainerSlideBack(void);
+static void SafariHandleFaintAnimation(void);
+static void SafariHandlePaletteFade(void);
+static void SafariHandleSuccessBallThrowAnim(void);
+static void SafariHandleBallThrowAnim(void);
+static void SafariHandlePause(void);
+static void SafariHandleMoveAnimation(void);
+static void SafariHandlePrintString(void);
+static void SafariHandlePrintSelectionString(void);
+static void SafariHandleChooseAction(void);
+static void SafariHandleUnknownYesNoBox(void);
+static void SafariHandleChooseMove(void);
+static void SafariHandleChooseItem(void);
+static void SafariHandleChoosePokemon(void);
+static void SafariHandleCmd23(void);
+static void SafariHandleHealthBarUpdate(void);
+static void SafariHandleExpUpdate(void);
+static void SafariHandleStatusIconUpdate(void);
+static void SafariHandleStatusAnimation(void);
+static void SafariHandleStatusXor(void);
+static void SafariHandleDataTransfer(void);
+static void SafariHandleDMA3Transfer(void);
+static void SafariHandlePlayBGM(void);
+static void SafariHandleCmd32(void);
+static void SafariHandleTwoReturnValues(void);
+static void SafariHandleChosenMonReturnValue(void);
+static void SafariHandleOneReturnValue(void);
+static void SafariHandleOneReturnValue_Duplicate(void);
+static void SafariHandleCmd37(void);
+static void SafariHandleCmd38(void);
+static void SafariHandleCmd39(void);
+static void SafariHandleCmd40(void);
+static void SafariHandleHitAnimation(void);
+static void SafariHandleCmd42(void);
+static void SafariHandlePlaySE(void);
+static void SafariHandlePlayFanfareOrBGM(void);
+static void SafariHandleFaintingCry(void);
+static void SafariHandleIntroSlide(void);
+static void SafariHandleIntroTrainerBallThrow(void);
+static void SafariHandleDrawPartyStatusSummary(void);
+static void SafariHandleHidePartyStatusSummary(void);
+static void SafariHandleEndBounceEffect(void);
+static void SafariHandleSpriteInvisibility(void);
+static void SafariHandleBattleAnimation(void);
+static void SafariHandleLinkStandbyMsg(void);
+static void SafariHandleResetActionMoveSelection(void);
+static void SafariHandleCmd55(void);
+static void SafariCmdEnd(void);
+
+static void SafariBufferRunCommand(void);
+static void SafariBufferExecCompleted(void);
+static void CompleteWhenChosePokeblock(void);
+
+static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
+{
+ SafariHandleGetMonData,
+ SafariHandleGetRawMonData,
+ SafariHandleSetMonData,
+ SafariHandleSetRawMonData,
+ SafariHandleLoadMonSprite,
+ SafariHandleSwitchInAnim,
+ SafariHandleReturnMonToBall,
+ SafariHandleDrawTrainerPic,
+ SafariHandleTrainerSlide,
+ SafariHandleTrainerSlideBack,
+ SafariHandleFaintAnimation,
+ SafariHandlePaletteFade,
+ SafariHandleSuccessBallThrowAnim,
+ SafariHandleBallThrowAnim,
+ SafariHandlePause,
+ SafariHandleMoveAnimation,
+ SafariHandlePrintString,
+ SafariHandlePrintSelectionString,
+ SafariHandleChooseAction,
+ SafariHandleUnknownYesNoBox,
+ SafariHandleChooseMove,
+ SafariHandleChooseItem,
+ SafariHandleChoosePokemon,
+ SafariHandleCmd23,
+ SafariHandleHealthBarUpdate,
+ SafariHandleExpUpdate,
+ SafariHandleStatusIconUpdate,
+ SafariHandleStatusAnimation,
+ SafariHandleStatusXor,
+ SafariHandleDataTransfer,
+ SafariHandleDMA3Transfer,
+ SafariHandlePlayBGM,
+ SafariHandleCmd32,
+ SafariHandleTwoReturnValues,
+ SafariHandleChosenMonReturnValue,
+ SafariHandleOneReturnValue,
+ SafariHandleOneReturnValue_Duplicate,
+ SafariHandleCmd37,
+ SafariHandleCmd38,
+ SafariHandleCmd39,
+ SafariHandleCmd40,
+ SafariHandleHitAnimation,
+ SafariHandleCmd42,
+ SafariHandlePlaySE,
+ SafariHandlePlayFanfareOrBGM,
+ SafariHandleFaintingCry,
+ SafariHandleIntroSlide,
+ SafariHandleIntroTrainerBallThrow,
+ SafariHandleDrawPartyStatusSummary,
+ SafariHandleHidePartyStatusSummary,
+ SafariHandleEndBounceEffect,
+ SafariHandleSpriteInvisibility,
+ SafariHandleBattleAnimation,
+ SafariHandleLinkStandbyMsg,
+ SafariHandleResetActionMoveSelection,
+ SafariHandleCmd55,
+ SafariCmdEnd,
+};
+
+// not used
+static void SpriteCB_Null4(struct Sprite *sprite)
+{
+}
+
+void SetControllerToSafari(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = SafariBufferRunCommand;
+}
+
+static void SafariBufferRunCommand(void)
+{
+ if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
+ {
+ if (gBattleBufferA[gActiveBattler][0] < NELEMS(sSafariBufferCommands))
+ sSafariBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ else
+ SafariBufferExecCompleted();
+ }
+}
+
+static void HandleInputChooseAction(void)
+{
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+
+ switch (gActionSelectionCursor[gActiveBattler])
+ {
+ case 0:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_BALL, 0);
+ break;
+ case 1:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_POKEBLOCK, 0);
+ break;
+ case 2:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_GO_NEAR, 0);
+ break;
+ case 3:
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_RUN, 0);
+ break;
+ }
+ SafariBufferExecCompleted();
+ }
+ else if (JOY_NEW(DPAD_LEFT))
+ {
+ if (gActionSelectionCursor[gActiveBattler] & 1)
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(DPAD_RIGHT))
+ {
+ if (!(gActionSelectionCursor[gActiveBattler] & 1))
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 1;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ if (gActionSelectionCursor[gActiveBattler] & 2)
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ if (!(gActionSelectionCursor[gActiveBattler] & 2))
+ {
+ PlaySE(SE_SELECT);
+ ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
+ gActionSelectionCursor[gActiveBattler] ^= 2;
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ }
+ }
+}
+
+static void CompleteOnBattlerSpriteCallbackDummy(void)
+{
+ if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ SafariBufferExecCompleted();
+}
+
+static void CompleteOnInactiveTextPrinter(void)
+{
+ if (!IsTextPrinterActive(0))
+ SafariBufferExecCompleted();
+}
+
+static void CompleteOnHealthboxSpriteCallbackDummy(void)
+{
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ SafariBufferExecCompleted();
+}
+
+static void sub_80DD7B0(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+}
+
+static void CompleteOnSpecialAnimDone(void)
+{
+ if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
+ SafariBufferExecCompleted();
+}
+
+static void SafariOpenPokeblockCase(void)
+{
+ if (!gPaletteFade.active)
+ gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChosePokeblock;
+}
+
+static void CompleteWhenChosePokeblock(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId);
+ SafariBufferExecCompleted();
+ }
+}
+
+static void CompleteOnFinishedBattleAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive)
+ SafariBufferExecCompleted();
+}
+
+static void SafariBufferExecCompleted(void)
+{
+ gBattlerControllerFuncs[gActiveBattler] = SafariBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ }
+ else
+ {
+ gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
+ }
+}
+
+// not used
+static void CompleteOnFinishedStatusAnimation(void)
+{
+ if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive)
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleGetMonData(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleGetRawMonData(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleSetMonData(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleSetRawMonData(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleLoadMonSprite(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleSwitchInAnim(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleReturnMonToBall(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleDrawTrainerPic(void)
+{
+ DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
+ 80,
+ (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
+ 30);
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
+}
+
+static void SafariHandleTrainerSlide(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleTrainerSlideBack(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleFaintAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandlePaletteFade(void)
+{
+ SafariBufferExecCompleted();
+}
+
+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;
+}
+
+static void SafariHandleBallThrowAnim(void)
+{
+ u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1];
+
+ gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
+ gDoingBattleAnim = TRUE;
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
+}
+
+static void SafariHandlePause(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleMoveAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandlePrintString(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);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
+}
+
+static void SafariHandlePrintSelectionString(void)
+{
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ SafariHandlePrintString();
+ else
+ SafariBufferExecCompleted();
+}
+
+static void HandleChooseActionAfterDma3(void)
+{
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 160;
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction;
+ }
+}
+
+static void SafariHandleChooseAction(void)
+{
+ s32 i;
+
+ gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
+ BattlePutTextOnWindow(gUnknown_83FDA4C, 0);
+ BattlePutTextOnWindow(gUnknown_83FE747, 2);
+ for (i = 0; i < 4; ++i)
+ ActionSelectionDestroyCursorAt(i);
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
+ BattleStringExpandPlaceholdersToDisplayedString(gUnknown_83FE6E6);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 1);
+}
+
+static void SafariHandleUnknownYesNoBox(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleChooseMove(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleChooseItem(void)
+{
+ s32 i;
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gBattlerControllerFuncs[gActiveBattler] = SafariOpenPokeblockCase;
+ gBattlerInMenuId = gActiveBattler;
+}
+
+static void SafariHandleChoosePokemon(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd23(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleHealthBarUpdate(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleExpUpdate(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleStatusIconUpdate(void)
+{
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_SAFARI_BALLS_TEXT);
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleStatusAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleStatusXor(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleDataTransfer(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleDMA3Transfer(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandlePlayBGM(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd32(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleTwoReturnValues(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleChosenMonReturnValue(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleOneReturnValue(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleOneReturnValue_Duplicate(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd37(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd38(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd39(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd40(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleHitAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd42(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandlePlaySE(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);
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandlePlayFanfareOrBGM(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
+
+ PlayCry1(species, 25);
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleIntroSlide(void)
+{
+ HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ gIntroSlideFlags |= 1;
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleIntroTrainerBallThrow(void)
+{
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_SAFARI_ALL_TEXT);
+ sub_804BD94(gActiveBattler);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthboxSpriteCallbackDummy;
+}
+
+static void SafariHandleDrawPartyStatusSummary(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleHidePartyStatusSummary(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleEndBounceEffect(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleSpriteInvisibility(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleBattleAnimation(void)
+{
+ u8 animationId = gBattleBufferA[gActiveBattler][1];
+ u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+
+ if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
+ SafariBufferExecCompleted();
+ else
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
+}
+
+static void SafariHandleLinkStandbyMsg(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleResetActionMoveSelection(void)
+{
+ SafariBufferExecCompleted();
+}
+
+static void SafariHandleCmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ SafariBufferExecCompleted();
+ if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER))
+ gBattlerControllerFuncs[gActiveBattler] = sub_80DD7B0;
+}
+
+static void SafariCmdEnd(void)
+{
+}
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
new file mode 100644
index 000000000..544af1006
--- /dev/null
+++ b/src/battle_controllers.c
@@ -0,0 +1,1170 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_main.h"
+#include "battle_ai_script_commands.h"
+#include "battle_anim.h"
+#include "battle_util.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "cable_club.h"
+#include "party_menu.h"
+#include "pokemon.h"
+#include "task.h"
+#include "util.h"
+#include "constants/abilities.h"
+#include "constants/species.h"
+#include "constants/battle.h"
+
+static EWRAM_DATA u8 sLinkSendTaskId = 0;
+static EWRAM_DATA u8 sLinkReceiveTaskId = 0;
+static EWRAM_DATA u8 gUnknown_202286E = 0;
+EWRAM_DATA struct UnusedControllerStruct gUnknown_2022870 = {0};
+static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {0};
+
+static void CreateTasksForSendRecvLinkBuffers(void);
+static void InitLinkBtlControllers(void);
+static void InitSinglePlayerBtlControllers(void);
+static void SetBattlePartyIds(void);
+static void Task_HandleSendLinkBuffersData(u8 taskId);
+static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId);
+
+void HandleLinkBattleSetup(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gWirelessCommType)
+ sub_800B1F4();
+ if (!gReceivedRemoteLinkPlayers)
+ OpenLink();
+ CreateTask(sub_8081A90, 0);
+ CreateTasksForSendRecvLinkBuffers();
+ }
+}
+
+void SetUpBattleVars(void)
+{
+ s32 i;
+
+ gBattleMainFunc = nullsub_12;
+ for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
+ {
+ gBattlerControllerFuncs[i] = nullsub_13;
+ gBattlerPositions[i] = 0xFF;
+ gActionSelectionCursor[i] = 0;
+ gMoveSelectionCursor[i] = 0;
+ }
+ HandleLinkBattleSetup();
+ gBattleControllerExecFlags = 0;
+ ClearBattleAnimationVars();
+ ClearBattleMonForms();
+ BattleAI_HandleItemUseBeforeAISetup();
+ gUnknown_2022B54 = 0;
+ gUnknown_2023DDC = 0;
+}
+
+void sub_800D30C(void)
+{
+ s32 i;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ InitLinkBtlControllers();
+ else
+ InitSinglePlayerBtlControllers();
+ SetBattlePartyIds();
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ for (i = 0; i < gBattlersCount; ++i)
+ sub_8127DA8(i, 0);
+}
+
+static void InitSinglePlayerBtlControllers(void)
+{
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gBattleMainFunc = BeginBattleIntro;
+ if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
+ {
+ gBattlerControllerFuncs[0] = SetControllerToPokedude;
+ gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
+ gBattlerControllerFuncs[1] = SetControllerToPokedude;
+ gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
+ gBattlersCount = 2;
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ gBattlerControllerFuncs[0] = SetControllerToSafari;
+ else if (gBattleTypeFlags & (BATTLE_TYPE_OLDMAN_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE))
+ gBattlerControllerFuncs[0] = SetControllerToOakOrOldman;
+ else
+ gBattlerControllerFuncs[0] = SetControllerToPlayer;
+ gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
+ gBattlerControllerFuncs[1] = SetControllerToOpponent;
+ gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
+ gBattlersCount = 2;
+ }
+ }
+ else
+ {
+ gBattleMainFunc = BeginBattleIntro;
+ if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
+ {
+ gBattlerControllerFuncs[0] = SetControllerToPokedude;
+ gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
+ gBattlerControllerFuncs[1] = SetControllerToPokedude;
+ gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
+ gBattlerControllerFuncs[2] = SetControllerToPokedude;
+ gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
+ gBattlerControllerFuncs[3] = SetControllerToPokedude;
+ gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
+ gBattlersCount = MAX_BATTLERS_COUNT;
+ }
+ else
+ {
+ gBattlerControllerFuncs[0] = SetControllerToPlayer;
+ gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
+ gBattlerControllerFuncs[1] = SetControllerToOpponent;
+ gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
+ gBattlerControllerFuncs[2] = SetControllerToPlayer;
+ gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
+ gBattlerControllerFuncs[3] = SetControllerToOpponent;
+ gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
+ gBattlersCount = MAX_BATTLERS_COUNT;
+ }
+ }
+}
+
+static void InitLinkBtlControllers(void)
+{
+ s32 i;
+ u8 multiplayerId;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
+ {
+ gBattleMainFunc = BeginBattleIntro;
+ gBattlerControllerFuncs[0] = SetControllerToPlayer;
+ gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
+ gBattlerControllerFuncs[1] = SetControllerToLinkOpponent;
+ gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
+ gBattlersCount = 2;
+ }
+ else
+ {
+ gBattlerControllerFuncs[1] = SetControllerToPlayer;
+ gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
+ gBattlerControllerFuncs[0] = SetControllerToLinkOpponent;
+ gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
+ gBattlersCount = 2;
+ }
+ }
+ else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
+ {
+ gBattleMainFunc = BeginBattleIntro;
+ gBattlerControllerFuncs[0] = SetControllerToPlayer;
+ gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
+ gBattlerControllerFuncs[1] = SetControllerToLinkOpponent;
+ gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
+ gBattlerControllerFuncs[2] = SetControllerToPlayer;
+ gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
+ gBattlerControllerFuncs[3] = SetControllerToLinkOpponent;
+ gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
+ gBattlersCount = MAX_BATTLERS_COUNT;
+ }
+ else
+ {
+ gBattlerControllerFuncs[1] = SetControllerToPlayer;
+ gBattlerPositions[1] = B_POSITION_PLAYER_LEFT;
+ gBattlerControllerFuncs[0] = SetControllerToLinkOpponent;
+ gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT;
+ gBattlerControllerFuncs[3] = SetControllerToPlayer;
+ gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT;
+ gBattlerControllerFuncs[2] = SetControllerToLinkOpponent;
+ gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
+ gBattlersCount = MAX_BATTLERS_COUNT;
+ }
+ }
+ else
+ {
+ multiplayerId = GetMultiplayerId();
+ if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
+ gBattleMainFunc = BeginBattleIntro;
+ for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
+ {
+ switch (gLinkPlayers[i].id)
+ {
+ case 0:
+ case 3:
+ sub_8127DA8(gLinkPlayers[i].id, 0);
+ break;
+ case 1:
+ case 2:
+ sub_8127DA8(gLinkPlayers[i].id, 1);
+ break;
+ }
+ if (i == multiplayerId)
+ {
+ gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToPlayer;
+ switch (gLinkPlayers[i].id)
+ {
+ case 0:
+ case 3:
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
+ break;
+ case 1:
+ case 2:
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
+ break;
+ }
+ }
+ else
+ {
+ if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1)) || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1)))
+ {
+ gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkPartner;
+ switch (gLinkPlayers[i].id)
+ {
+ case 0:
+ case 3:
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
+ break;
+ case 1:
+ case 2:
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT;
+ break;
+ }
+ }
+ else
+ {
+ gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkOpponent;
+ switch (gLinkPlayers[i].id)
+ {
+ case 0:
+ case 3:
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_LEFT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
+ break;
+ case 1:
+ case 2:
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT;
+ break;
+ }
+ }
+ }
+ }
+ gBattlersCount = MAX_BATTLERS_COUNT;
+ }
+}
+
+static void SetBattlePartyIds(void)
+{
+ s32 i, j;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ for (j = 0; j < PARTY_SIZE; ++j)
+ {
+ if (i < 2)
+ {
+ if (GET_BATTLER_SIDE2(i) == B_SIDE_PLAYER)
+ {
+ if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0
+ && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG
+ && !GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG))
+ {
+ gBattlerPartyIndexes[i] = j;
+ break;
+ }
+ }
+ else
+ {
+ if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0
+ && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG
+ && !GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG))
+ {
+ gBattlerPartyIndexes[i] = j;
+ break;
+ }
+ }
+ }
+ else
+ {
+ if (GET_BATTLER_SIDE2(i) == B_SIDE_PLAYER)
+ {
+ if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0
+ && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != SPECIES_NONE // Probably a typo by Game Freak. The rest use SPECIES2.
+ && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG
+ && !GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG)
+ && gBattlerPartyIndexes[i - 2] != j)
+ {
+ gBattlerPartyIndexes[i] = j;
+ break;
+ }
+ }
+ else
+ {
+ if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0
+ && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG
+ && !GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG)
+ && gBattlerPartyIndexes[i - 2] != j)
+ {
+ gBattlerPartyIndexes[i] = j;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+static void PrepareBufferDataTransfer(u8 bufferId, u8 *data, u16 size)
+{
+ s32 i;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ PrepareBufferDataTransferLink(bufferId, size, data);
+ }
+ else
+ {
+ switch (bufferId)
+ {
+ case 0:
+ for (i = 0; i < size; ++data, ++i)
+ gBattleBufferA[gActiveBattler][i] = *data;
+ break;
+ case 1:
+ for (i = 0; i < size; ++data, ++i)
+ gBattleBufferB[gActiveBattler][i] = *data;
+ break;
+ }
+ }
+}
+
+static void CreateTasksForSendRecvLinkBuffers(void)
+{
+ sLinkSendTaskId = CreateTask(Task_HandleSendLinkBuffersData, 0);
+ gTasks[sLinkSendTaskId].data[11] = 0;
+ gTasks[sLinkSendTaskId].data[12] = 0;
+ gTasks[sLinkSendTaskId].data[13] = 0;
+ gTasks[sLinkSendTaskId].data[14] = 0;
+ gTasks[sLinkSendTaskId].data[15] = 0;
+ sLinkReceiveTaskId = CreateTask(Task_HandleCopyReceivedLinkBuffersData, 0);
+ gTasks[sLinkReceiveTaskId].data[12] = 0;
+ gTasks[sLinkReceiveTaskId].data[13] = 0;
+ gTasks[sLinkReceiveTaskId].data[14] = 0;
+ gTasks[sLinkReceiveTaskId].data[15] = 0;
+ gUnknown_202286E = 0;
+}
+
+enum
+{
+ LINK_BUFF_BUFFER_ID,
+ LINK_BUFF_ACTIVE_BATTLER,
+ LINK_BUFF_ATTACKER,
+ LINK_BUFF_TARGET,
+ LINK_BUFF_SIZE_LO,
+ LINK_BUFF_SIZE_HI,
+ LINK_BUFF_ABSENT_BATTLER_FLAGS,
+ LINK_BUFF_EFFECT_BATTLER,
+ LINK_BUFF_DATA
+};
+
+void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data)
+{
+ s32 alignedSize, i;
+
+ alignedSize = size - size % 4 + 4;
+ if (gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA + 1 > BATTLE_BUFFER_LINK_SIZE)
+ {
+ gTasks[sLinkSendTaskId].data[12] = gTasks[sLinkSendTaskId].data[14];
+ gTasks[sLinkSendTaskId].data[14] = 0;
+ }
+ gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_BUFFER_ID] = bufferId;
+ gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ACTIVE_BATTLER] = gActiveBattler;
+ gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ATTACKER] = gBattlerAttacker;
+ gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_TARGET] = gBattlerTarget;
+ gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_SIZE_LO] = alignedSize;
+ gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_SIZE_HI] = (alignedSize & 0x0000FF00) >> 8;
+ gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ABSENT_BATTLER_FLAGS] = gAbsentBattlerFlags;
+ gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_EFFECT_BATTLER] = gEffectBattler;
+ for (i = 0; i < size; ++i)
+ gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_DATA + i] = data[i];
+ gTasks[sLinkSendTaskId].data[14] = gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA;
+}
+
+static void Task_HandleSendLinkBuffersData(u8 taskId)
+{
+ u16 blockSize;
+ s32 playerCount;
+
+ switch (gTasks[taskId].data[11])
+ {
+ case 0:
+ gTasks[taskId].data[10] = 100;
+ ++gTasks[taskId].data[11];
+ break;
+ case 1:
+ if (!--gTasks[taskId].data[10])
+ {
+ ++gTasks[taskId].data[11];
+ if (gReceivedRemoteLinkPlayers)
+ gTasks[taskId].data[11] = 3;
+ }
+ break;
+ case 2:
+ playerCount = GetLinkPlayerCount_2();
+ if ((gBattleTypeFlags & BATTLE_TYPE_MULTI && playerCount > 3) || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && playerCount > 1))
+ {
+ if (IsLinkMaster())
+ {
+ CheckShouldAdvanceLinkState();
+ ++gTasks[taskId].data[11];
+ }
+ else
+ {
+ ++gTasks[taskId].data[11];
+ }
+ }
+ break;
+ case 3:
+ if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
+ {
+ if (!gTasks[taskId].data[13])
+ {
+ if (gTasks[taskId].data[15] > gTasks[taskId].data[14]
+ && gTasks[taskId].data[15] == gTasks[taskId].data[12])
+ {
+ gTasks[taskId].data[12] = 0;
+ gTasks[taskId].data[15] = 0;
+ }
+ blockSize = (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8)) + LINK_BUFF_DATA;
+ SendBlock(bitmask_all_link_players_but_self(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize);
+ ++gTasks[taskId].data[11];
+ }
+ else
+ {
+ --gTasks[taskId].data[13];
+ break;
+ }
+ }
+ break;
+ case 4:
+ if (IsLinkTaskFinished())
+ {
+ blockSize = gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8);
+ gTasks[taskId].data[13] = 5;
+ gTasks[taskId].data[15] = gTasks[taskId].data[15] + blockSize + LINK_BUFF_DATA;
+ gTasks[taskId].data[11] = 3;
+ }
+ break;
+ case 5:
+ if (!--gTasks[taskId].data[13])
+ {
+ gTasks[taskId].data[13] = 5;
+ gTasks[taskId].data[11] = 3;
+ }
+ break;
+ }
+}
+
+void sub_800DD28(void)
+{
+ u8 i;
+ s32 j;
+ u8 *recvBuffer;
+
+ if (gReceivedRemoteLinkPlayers && (gBattleTypeFlags & BATTLE_TYPE_20) && (gLinkPlayers[0].linkType == 0x2211))
+ {
+ sub_80FBB4C();
+ for (i = 0; i < GetLinkPlayerCount(); ++i)
+ {
+ if (GetBlockReceivedStatus() & gBitTable[i])
+ {
+ ResetBlockReceivedFlag(i);
+ recvBuffer = (u8 *)gBlockRecvBuffer[i];
+ {
+ u8 *dest, *src;
+ u16 r6 = gBlockRecvBuffer[i][2];
+
+ if (gTasks[sLinkReceiveTaskId].data[14] + 9 + r6 > 0x1000)
+ {
+ gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14];
+ gTasks[sLinkReceiveTaskId].data[14] = 0;
+ }
+ dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]];
+ src = recvBuffer;
+ for (j = 0; j < r6 + 8; ++j)
+ dest[j] = src[j];
+ gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + r6 + 8;
+ }
+ }
+ }
+ }
+}
+
+static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
+{
+ u16 blockSize;
+ u8 battlerId;
+ u8 var;
+
+ if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
+ {
+ if (gTasks[taskId].data[15] > gTasks[taskId].data[14]
+ && gTasks[taskId].data[15] == gTasks[taskId].data[12])
+ {
+ gTasks[taskId].data[12] = 0;
+ gTasks[taskId].data[15] = 0;
+ }
+ battlerId = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BATTLER];
+ blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8);
+ switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0])
+ {
+ case 0:
+ if (gBattleControllerExecFlags & gBitTable[battlerId])
+ return;
+ memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
+ sub_8017298(battlerId);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER))
+ {
+ gBattlerAttacker = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ATTACKER];
+ gBattlerTarget = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_TARGET];
+ gAbsentBattlerFlags = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ABSENT_BATTLER_FLAGS];
+ gEffectBattler = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_EFFECT_BATTLER];
+ }
+ break;
+ case 1:
+ memcpy(gBattleBufferB[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
+ break;
+ case 2:
+ var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA];
+ gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (var * 4));
+ break;
+ }
+ gTasks[taskId].data[15] = gTasks[taskId].data[15] + blockSize + LINK_BUFF_DATA;
+ }
+}
+
+void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_GETMONDATA;
+ sBattleBuffersTransferData[1] = requestId;
+ sBattleBuffersTransferData[2] = monToCheck;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+// not used
+static void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA;
+ sBattleBuffersTransferData[1] = monId;
+ sBattleBuffersTransferData[2] = bytes;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA;
+ sBattleBuffersTransferData[1] = requestId;
+ sBattleBuffersTransferData[2] = monToCheck;
+ for (i = 0; i < bytes; ++i)
+ sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes);
+}
+
+// not used
+static void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_SETRAWMONDATA;
+ sBattleBuffersTransferData[1] = monId;
+ sBattleBuffersTransferData[2] = bytes;
+ for (i = 0; i < bytes; ++i)
+ sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, bytes + 3);
+}
+
+void BtlController_EmitLoadMonSprite(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_LOADMONSPRITE;
+ sBattleBuffersTransferData[1] = CONTROLLER_LOADMONSPRITE;
+ sBattleBuffersTransferData[2] = CONTROLLER_LOADMONSPRITE;
+ sBattleBuffersTransferData[3] = CONTROLLER_LOADMONSPRITE;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_SWITCHINANIM;
+ sBattleBuffersTransferData[1] = partyId;
+ sBattleBuffersTransferData[2] = dontClearSubstituteBit;
+ sBattleBuffersTransferData[3] = 5;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitReturnMonToBall(u8 bufferId, u8 arg1)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_RETURNMONTOBALL;
+ sBattleBuffersTransferData[1] = arg1;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
+}
+
+void BtlController_EmitDrawTrainerPic(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_DRAWTRAINERPIC;
+ sBattleBuffersTransferData[1] = CONTROLLER_DRAWTRAINERPIC;
+ sBattleBuffersTransferData[2] = CONTROLLER_DRAWTRAINERPIC;
+ sBattleBuffersTransferData[3] = CONTROLLER_DRAWTRAINERPIC;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitTrainerSlide(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDE;
+ sBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDE;
+ sBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDE;
+ sBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDE;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitTrainerSlideBack(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDEBACK;
+ sBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDEBACK;
+ sBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDEBACK;
+ sBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDEBACK;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitFaintAnimation(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_FAINTANIMATION;
+ sBattleBuffersTransferData[1] = CONTROLLER_FAINTANIMATION;
+ sBattleBuffersTransferData[2] = CONTROLLER_FAINTANIMATION;
+ sBattleBuffersTransferData[3] = CONTROLLER_FAINTANIMATION;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+// not used
+static void BtlController_EmitPaletteFade(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE;
+ sBattleBuffersTransferData[1] = CONTROLLER_PALETTEFADE;
+ sBattleBuffersTransferData[2] = CONTROLLER_PALETTEFADE;
+ sBattleBuffersTransferData[3] = CONTROLLER_PALETTEFADE;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+// not used
+static void BtlController_EmitSuccessBallThrowAnim(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ sBattleBuffersTransferData[1] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ sBattleBuffersTransferData[2] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ sBattleBuffersTransferData[3] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_BALLTHROWANIM;
+ sBattleBuffersTransferData[1] = caseId;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
+}
+
+// not used
+static void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_PAUSE;
+ sBattleBuffersTransferData[1] = toWait;
+ for (i = 0; i < toWait * 3; ++i)
+ sBattleBuffersTransferData[2 + i] = *(u8 *)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, toWait * 3 + 2);
+}
+
+void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_MOVEANIMATION;
+ sBattleBuffersTransferData[1] = move;
+ sBattleBuffersTransferData[2] = (move & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = turnOfMove;
+ sBattleBuffersTransferData[4] = movePower;
+ sBattleBuffersTransferData[5] = (movePower & 0xFF00) >> 8;
+ sBattleBuffersTransferData[6] = dmg;
+ sBattleBuffersTransferData[7] = (dmg & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[8] = (dmg & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[9] = (dmg & 0xFF000000) >> 24;
+ sBattleBuffersTransferData[10] = friendship;
+ sBattleBuffersTransferData[11] = gMultiHitCounter; // multihit in pokeem
+ if (WEATHER_HAS_EFFECT2)
+ {
+ sBattleBuffersTransferData[12] = gBattleWeather;
+ sBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8;
+ }
+ else
+ {
+ sBattleBuffersTransferData[12] = 0;
+ sBattleBuffersTransferData[13] = 0;
+ }
+ sBattleBuffersTransferData[14] = 0;
+ sBattleBuffersTransferData[15] = 0;
+ memcpy(&sBattleBuffersTransferData[16], disableStructPtr, sizeof(struct DisableStruct));
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 16 + sizeof(struct DisableStruct));
+}
+
+void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
+{
+ s32 i;
+ struct BattleMsgData *stringInfo;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING;
+ sBattleBuffersTransferData[1] = gBattleOutcome;
+ sBattleBuffersTransferData[2] = stringID;
+ sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
+ stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]);
+ stringInfo->currentMove = gCurrentMove;
+ stringInfo->originallyUsedMove = gChosenMove;
+ stringInfo->lastItem = gLastUsedItem;
+ stringInfo->lastAbility = gLastUsedAbility;
+ stringInfo->scrActive = gBattleScripting.battler;
+ stringInfo->unk1605E = gBattleStruct->field_52;
+ stringInfo->hpScale = gBattleStruct->hpScale;
+ stringInfo->itemEffectBattler = gPotentialItemEffectBattler;
+ stringInfo->moveType = gBattleMoves[gCurrentMove].type;
+ for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
+ stringInfo->abilities[i] = gBattleMons[i].ability;
+ for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; ++i)
+ {
+ stringInfo->textBuffs[0][i] = gBattleTextBuff1[i];
+ stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
+ stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
+ }
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4);
+}
+
+void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
+{
+ s32 i;
+ struct BattleMsgData *stringInfo;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY;
+ sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
+ sBattleBuffersTransferData[2] = stringID;
+ sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
+ stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]);
+ stringInfo->currentMove = gCurrentMove;
+ stringInfo->originallyUsedMove = gChosenMove;
+ stringInfo->lastItem = gLastUsedItem;
+ stringInfo->lastAbility = gLastUsedAbility;
+ stringInfo->scrActive = gBattleScripting.battler;
+ stringInfo->unk1605E = gBattleStruct->field_52;
+ for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
+ stringInfo->abilities[i] = gBattleMons[i].ability;
+ for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; ++i)
+ {
+ stringInfo->textBuffs[0][i] = gBattleTextBuff1[i];
+ stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
+ stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
+ }
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4);
+}
+
+void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION;
+ sBattleBuffersTransferData[1] = arg1;
+ sBattleBuffersTransferData[2] = arg2;
+ sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+// not used
+static void BtlController_EmitUnknownYesNoBox(u8 bufferId, u32 arg1) // TODO: Does the function name make sense for pokefirered?
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
+ sBattleBuffersTransferData[1] = arg1;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
+}
+
+void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEMOVE;
+ sBattleBuffersTransferData[1] = isDoubleBattle;
+ sBattleBuffersTransferData[2] = NoPpNumber;
+ sBattleBuffersTransferData[3] = 0;
+ for (i = 0; i < sizeof(*movePpData); ++i)
+ sBattleBuffersTransferData[4 + i] = *((u8 *)(movePpData) + i);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4);
+}
+
+void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG;
+ for (i = 0; i < 3; ++i)
+ sBattleBuffersTransferData[1 + i] = arg1[i];
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
+ sBattleBuffersTransferData[1] = caseId;
+ sBattleBuffersTransferData[2] = arg2;
+ sBattleBuffersTransferData[3] = abilityId;
+ for (i = 0; i < 3; ++i)
+ sBattleBuffersTransferData[4 + i] = arg4[i];
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written.
+}
+
+// not used
+static void BtlController_EmitCmd23(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_23;
+ sBattleBuffersTransferData[1] = CONTROLLER_23;
+ sBattleBuffersTransferData[2] = CONTROLLER_23;
+ sBattleBuffersTransferData[3] = CONTROLLER_23;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_HEALTHBARUPDATE;
+ sBattleBuffersTransferData[1] = 0;
+ sBattleBuffersTransferData[2] = (s16)hpValue;
+ sBattleBuffersTransferData[3] = ((s16)hpValue & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_EXPUPDATE;
+ sBattleBuffersTransferData[1] = partyId;
+ sBattleBuffersTransferData[2] = (s16)expPoints;
+ sBattleBuffersTransferData[3] = ((s16)expPoints & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_STATUSICONUPDATE;
+ sBattleBuffersTransferData[1] = status1;
+ sBattleBuffersTransferData[2] = (status1 & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[3] = (status1 & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[4] = (status1 & 0xFF000000) >> 24;
+ sBattleBuffersTransferData[5] = status2;
+ sBattleBuffersTransferData[6] = (status2 & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[7] = (status2 & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[8] = (status2 & 0xFF000000) >> 24;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 9);
+}
+
+void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_STATUSANIMATION;
+ sBattleBuffersTransferData[1] = status2;
+ sBattleBuffersTransferData[2] = status;
+ sBattleBuffersTransferData[3] = (status & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[4] = (status & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[5] = (status & 0xFF000000) >> 24;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6);
+}
+
+// not used
+static void BtlController_EmitStatusXor(u8 bufferId, u8 b)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR;
+ sBattleBuffersTransferData[1] = b;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
+}
+
+void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_DATATRANSFER;
+ sBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER;
+ sBattleBuffersTransferData[2] = size;
+ sBattleBuffersTransferData[3] = (size & 0xFF00) >> 8;
+ for (i = 0; i < size; ++i)
+ sBattleBuffersTransferData[4 + i] = *(u8 *)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4);
+}
+
+// not used
+static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_DMA3TRANSFER;
+ sBattleBuffersTransferData[1] = (u32)(dst);
+ sBattleBuffersTransferData[2] = ((u32)(dst) & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[3] = ((u32)(dst) & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[4] = ((u32)(dst) & 0xFF000000) >> 24;
+ sBattleBuffersTransferData[5] = size;
+ sBattleBuffersTransferData[6] = (size & 0xFF00) >> 8;
+ for (i = 0; i < size; ++i)
+ sBattleBuffersTransferData[7 + i] = *(u8 *)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7);
+}
+
+// not used
+static void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_31;
+ sBattleBuffersTransferData[1] = songId;
+ sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
+ for (i = 0; i < songId; ++i)
+ sBattleBuffersTransferData[3 + i] = *(u8 *)(unusedDumbDataParameter++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3);
+}
+
+// not used
+static void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_32;
+ sBattleBuffersTransferData[1] = size;
+ sBattleBuffersTransferData[2] = (size & 0xFF00) >> 8;
+ for (i = 0; i < size; ++i)
+ sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3);
+}
+
+void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
+ sBattleBuffersTransferData[1] = arg1;
+ sBattleBuffersTransferData[2] = arg2;
+ sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
+ sBattleBuffersTransferData[1] = b;
+ for (i = 0; i < 3; ++i)
+ sBattleBuffersTransferData[2 + i] = c[i];
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5);
+}
+
+void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
+ sBattleBuffersTransferData[1] = arg1;
+ sBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
+ sBattleBuffersTransferData[1] = b;
+ sBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+// not used
+static void BtlController_EmitCmd37(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_37;
+ sBattleBuffersTransferData[1] = CONTROLLER_37;
+ sBattleBuffersTransferData[2] = CONTROLLER_37;
+ sBattleBuffersTransferData[3] = CONTROLLER_37;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+// not used
+static void BtlController_EmitCmd38(u8 bufferId, u8 b)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_38;
+ sBattleBuffersTransferData[1] = b;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
+}
+
+// not used
+static void BtlController_EmitCmd39(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_39;
+ sBattleBuffersTransferData[1] = CONTROLLER_39;
+ sBattleBuffersTransferData[2] = CONTROLLER_39;
+ sBattleBuffersTransferData[3] = CONTROLLER_39;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+// not used
+static void BtlController_EmitCmd40(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_40;
+ sBattleBuffersTransferData[1] = CONTROLLER_40;
+ sBattleBuffersTransferData[2] = CONTROLLER_40;
+ sBattleBuffersTransferData[3] = CONTROLLER_40;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitHitAnimation(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_HITANIMATION;
+ sBattleBuffersTransferData[1] = CONTROLLER_HITANIMATION;
+ sBattleBuffersTransferData[2] = CONTROLLER_HITANIMATION;
+ sBattleBuffersTransferData[3] = CONTROLLER_HITANIMATION;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitCmd42(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_42;
+ sBattleBuffersTransferData[1] = CONTROLLER_42;
+ sBattleBuffersTransferData[2] = CONTROLLER_42;
+ sBattleBuffersTransferData[3] = CONTROLLER_42;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitPlaySE(u8 bufferId, u16 songId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND;
+ sBattleBuffersTransferData[1] = songId;
+ sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFAREORBGM;
+ sBattleBuffersTransferData[1] = songId;
+ sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitFaintingCry(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_FAINTINGCRY;
+ sBattleBuffersTransferData[1] = CONTROLLER_FAINTINGCRY;
+ sBattleBuffersTransferData[2] = CONTROLLER_FAINTINGCRY;
+ sBattleBuffersTransferData[3] = CONTROLLER_FAINTINGCRY;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_INTROSLIDE;
+ sBattleBuffersTransferData[1] = terrainId;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
+}
+
+void BtlController_EmitIntroTrainerBallThrow(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_INTROTRAINERBALLTHROW;
+ sBattleBuffersTransferData[1] = CONTROLLER_INTROTRAINERBALLTHROW;
+ sBattleBuffersTransferData[2] = CONTROLLER_INTROTRAINERBALLTHROW;
+ sBattleBuffersTransferData[3] = CONTROLLER_INTROTRAINERBALLTHROW;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2)
+{
+ s32 i;
+
+ sBattleBuffersTransferData[0] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
+ sBattleBuffersTransferData[1] = arg2 & 0x7F;
+ sBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7;
+ sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
+ for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); ++i)
+ sBattleBuffersTransferData[4 + i] = *(i + (u8 *)(hpAndStatus));
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * PARTY_SIZE + 4);
+}
+
+void BtlController_EmitHidePartyStatusSummary(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
+ sBattleBuffersTransferData[1] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
+ sBattleBuffersTransferData[2] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
+ sBattleBuffersTransferData[3] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitEndBounceEffect(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_ENDBOUNCE;
+ sBattleBuffersTransferData[1] = CONTROLLER_ENDBOUNCE;
+ sBattleBuffersTransferData[2] = CONTROLLER_ENDBOUNCE;
+ sBattleBuffersTransferData[3] = CONTROLLER_ENDBOUNCE;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_SPRITEINVISIBILITY;
+ sBattleBuffersTransferData[1] = isInvisible;
+ sBattleBuffersTransferData[2] = CONTROLLER_SPRITEINVISIBILITY;
+ sBattleBuffersTransferData[3] = CONTROLLER_SPRITEINVISIBILITY;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_BATTLEANIMATION;
+ sBattleBuffersTransferData[1] = animationId;
+ sBattleBuffersTransferData[2] = argument;
+ sBattleBuffersTransferData[3] = (argument & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+}
+
+void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_LINKSTANDBYMSG;
+ sBattleBuffersTransferData[1] = arg1;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
+}
+
+void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_RESETACTIONMOVESELECTION;
+ sBattleBuffersTransferData[1] = caseId;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
+}
+
+void BtlController_EmitCmd55(u8 bufferId, u8 battleOutcome)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_55;
+ sBattleBuffersTransferData[1] = battleOutcome;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
+}
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
new file mode 100644
index 000000000..a47baea99
--- /dev/null
+++ b/src/battle_gfx_sfx_util.c
@@ -0,0 +1,1056 @@
+#include "global.h"
+#include "main.h"
+#include "m4a.h"
+#include "task.h"
+#include "malloc.h"
+#include "graphics.h"
+#include "sound.h"
+#include "decompress.h"
+#include "palette.h"
+#include "sprite.h"
+#include "data.h"
+#include "util.h"
+#include "party_menu.h"
+#include "battle.h"
+#include "battle_main.h"
+#include "battle_controllers.h"
+#include "battle_ai_script_commands.h"
+#include "battle_anim.h"
+#include "battle_interface.h"
+#include "constants/battle_anim.h"
+#include "constants/species.h"
+#include "constants/moves.h"
+#include "constants/songs.h"
+
+static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId);
+static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId);
+static void Task_ClearBitWhenSpecialAnimDone(u8 taskId);
+static void ClearSpritesBattlerHealthboxAnimData(void);
+
+static const struct CompressedSpriteSheet sSpriteSheet_SinglesPlayerHealthbox =
+{
+ .data = gHealthboxSinglesPlayerGfx,
+ .size = 0x1000,
+ .tag = TAG_HEALTHBOX_PLAYER1_TILE,
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_SinglesOpponentHealthbox =
+{
+ .data = gHealthboxSinglesOpponentGfx,
+ .size = 0x1000,
+ .tag = TAG_HEALTHBOX_OPPONENT1_TILE,
+};
+
+static const struct CompressedSpriteSheet sSpriteSheets_DoublesPlayerHealthbox[2] =
+{
+ {
+ .data = gHealthboxDoublesPlayerGfx,
+ .size = 0x800,
+ .tag = TAG_HEALTHBOX_PLAYER1_TILE,
+ },
+ {
+ .data = gHealthboxDoublesPlayerGfx,
+ .size = 0x800,
+ .tag = TAG_HEALTHBOX_PLAYER2_TILE,
+ },
+};
+
+static const struct CompressedSpriteSheet sSpriteSheets_DoublesOpponentHealthbox[2] =
+{
+ {
+ .data = gHealthboxDoublesOpponentGfx,
+ .size = 0x800,
+ .tag = TAG_HEALTHBOX_OPPONENT1_TILE,
+ },
+ {
+ .data = gHealthboxDoublesOpponentGfx,
+ .size = 0x800,
+ .tag = TAG_HEALTHBOX_OPPONENT2_TILE,
+ },
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_SafariHealthbox =
+{
+ .data = gHealthboxSafariGfx,
+ .size = 0x1000,
+ .tag = TAG_HEALTHBOX_SAFARI_TILE,
+};
+
+static const struct CompressedSpriteSheet sSpriteSheets_HealthBar[MAX_BATTLERS_COUNT] =
+{
+ {
+ .data = gBlankGfxCompressed,
+ .size = 0x100,
+ .tag = TAG_HEALTHBAR_PLAYER1_TILE,
+ },
+ {
+ .data = gBlankGfxCompressed,
+ .size = 0x120,
+ .tag = TAG_HEALTHBAR_OPPONENT1_TILE,
+ },
+ {
+ .data = gBlankGfxCompressed,
+ .size = 0x100,
+ .tag = TAG_HEALTHBAR_PLAYER2_TILE,
+ },
+ {
+ .data = gBlankGfxCompressed,
+ .size = 0x120,
+ .tag = TAG_HEALTHBAR_OPPONENT2_TILE,
+ },
+};
+
+static const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2] =
+{
+ {
+ .data = gBattleInterface_BallStatusBarPal,
+ .tag = TAG_HEALTHBOX_PAL,
+ },
+ {
+ .data = gBattleInterface_BallDisplayPal,
+ .tag = TAG_HEALTHBAR_PAL,
+ },
+};
+
+void AllocateBattleSpritesData(void)
+{
+ gBattleSpritesDataPtr = AllocZeroed(sizeof(struct BattleSpriteData));
+ gBattleSpritesDataPtr->battlerData = AllocZeroed(sizeof(struct BattleSpriteInfo) * MAX_BATTLERS_COUNT);
+ gBattleSpritesDataPtr->healthBoxesData = AllocZeroed(sizeof(struct BattleHealthboxInfo) * MAX_BATTLERS_COUNT);
+ gBattleSpritesDataPtr->animationData = AllocZeroed(sizeof(struct BattleAnimationInfo));
+ gBattleSpritesDataPtr->battleBars = AllocZeroed(sizeof(struct BattleBarInfo) * MAX_BATTLERS_COUNT);
+}
+
+void FreeBattleSpritesData(void)
+{
+ if (gBattleSpritesDataPtr)
+ {
+ FREE_AND_SET_NULL(gBattleSpritesDataPtr->battleBars);
+ FREE_AND_SET_NULL(gBattleSpritesDataPtr->animationData);
+ FREE_AND_SET_NULL(gBattleSpritesDataPtr->healthBoxesData);
+ FREE_AND_SET_NULL(gBattleSpritesDataPtr->battlerData);
+ FREE_AND_SET_NULL(gBattleSpritesDataPtr);
+ }
+}
+
+void sub_8033E3C(struct Sprite *sprite)
+{
+ u8 spriteId = sprite->data[1];
+
+ if (!gSprites[spriteId].affineAnimEnded)
+ return;
+ if (gSprites[spriteId].invisible)
+ return;
+ if (gSprites[spriteId].animPaused)
+ gSprites[spriteId].animPaused = 0;
+ else if (gSprites[spriteId].animEnded)
+ {
+ gSprites[spriteId].callback = sub_8012100;
+ StartSpriteAffineAnim(&gSprites[spriteId], 0);
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+// not used
+static void sub_8033EB0(struct Sprite *sprite, bool8 arg1)
+{
+ sprite->animPaused = 1;
+ sprite->callback = SpriteCallbackDummy;
+ if (!arg1)
+ StartSpriteAffineAnim(sprite, 1);
+ else
+ StartSpriteAffineAnim(sprite, 1);
+ AnimateSprite(sprite);
+}
+
+void sub_8033EEC(struct Sprite *sprite)
+{
+ if (!(gIntroSlideFlags & 1))
+ {
+ sprite->pos2.x += sprite->data[0];
+ if (sprite->pos2.x == 0)
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status)
+{
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive = 1;
+ if (!isStatus2)
+ {
+ if (status == STATUS1_FREEZE)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_FRZ);
+ else if (status == STATUS1_POISON || status & STATUS1_TOXIC_POISON)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_PSN);
+ else if (status == STATUS1_BURN)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_BRN);
+ else if (status & STATUS1_SLEEP)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_SLP);
+ else if (status == STATUS1_PARALYSIS)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_PRZ);
+ else // no animation
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive = 0;
+ }
+ else
+ {
+ if (status & STATUS2_INFATUATION)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_INFATUATION);
+ else if (status & STATUS2_CONFUSION)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_CONFUSION);
+ else if (status & STATUS2_CURSED)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_CURSED);
+ else if (status & STATUS2_NIGHTMARE)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_NIGHTMARE);
+ else if (status & STATUS2_WRAPPED)
+ LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_WRAPPED); // this animation doesn't actually exist
+ else // no animation
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive = 0;
+ }
+}
+
+#define tBattlerId data[0]
+
+bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId, u16 argument)
+{
+ u8 taskId;
+
+ if (tableId == B_ANIM_CASTFORM_CHANGE && (argument & 0x80))
+ {
+ gBattleMonForms[activeBattler] = (argument & ~(0x80));
+ return TRUE;
+ }
+ else if (gBattleSpritesDataPtr->battlerData[activeBattler].behindSubstitute
+ && !ShouldAnimBeDoneRegardlessOfSubsitute(tableId))
+ {
+ return TRUE;
+ }
+ else if (gBattleSpritesDataPtr->battlerData[activeBattler].behindSubstitute
+ && tableId == B_ANIM_SUBSTITUTE_FADE
+ && gSprites[gBattlerSpriteIds[activeBattler]].invisible)
+ {
+ LoadBattleMonGfxAndAnimate(activeBattler, TRUE, gBattlerSpriteIds[activeBattler]);
+ ClearBehindSubstituteBit(activeBattler);
+ return TRUE;
+ }
+ gBattleAnimAttacker = atkBattler;
+ gBattleAnimTarget = defBattler;
+ gBattleSpritesDataPtr->animationData->animArg = argument;
+ LaunchBattleAnimation(gBattleAnims_General, tableId, FALSE);
+ taskId = CreateTask(Task_ClearBitWhenBattleTableAnimDone, 10);
+ gTasks[taskId].tBattlerId = activeBattler;
+ gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 1;
+ return FALSE;
+}
+
+static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId)
+{
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 0;
+ DestroyTask(taskId);
+ }
+}
+
+static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId)
+{
+ switch (animId)
+ {
+ case B_ANIM_SUBSTITUTE_FADE:
+ case B_ANIM_RAIN_CONTINUES:
+ case B_ANIM_SUN_CONTINUES:
+ case B_ANIM_SANDSTORM_CONTINUES:
+ case B_ANIM_HAIL_CONTINUES:
+ case B_ANIM_SNATCH_MOVE:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+void InitAndLaunchSpecialAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId)
+{
+ u8 taskId;
+
+ gBattleAnimAttacker = atkBattler;
+ gBattleAnimTarget = defBattler;
+ LaunchBattleAnimation(gBattleAnims_Special, tableId, FALSE);
+ taskId = CreateTask(Task_ClearBitWhenSpecialAnimDone, 10);
+ gTasks[taskId].tBattlerId = activeBattler;
+ gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 1;
+}
+
+static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
+{
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 0;
+ DestroyTask(taskId);
+ }
+}
+
+bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
+{
+ return FALSE;
+}
+
+bool8 mplay_80342A4(u8 battlerId)
+{
+ u8 zero = 0;
+
+ if (IsSEPlaying())
+ {
+ ++gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_8 < 30)
+ return TRUE;
+ m4aMPlayStop(&gMPlayInfo_SE1);
+ m4aMPlayStop(&gMPlayInfo_SE2);
+ }
+ if (zero == 0)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8 = 0;
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
+{
+ u32 monsPersonality, currentPersonality, otId;
+ u16 species;
+ u8 position;
+ u16 paletteOffset;
+ const void *lzPaletteData;
+ void *buffer;
+
+ monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
+ {
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ currentPersonality = monsPersonality;
+ }
+ else
+ {
+ species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
+ currentPersonality = gTransformedPersonalities[battlerId];
+ }
+ otId = GetMonData(mon, MON_DATA_OT_ID);
+ position = GetBattlerPosition(battlerId);
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->sprites[position],
+ species, currentPersonality);
+ paletteOffset = 0x100 + battlerId * 16;
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
+ lzPaletteData = GetMonFrontSpritePal(mon);
+ else
+ lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality);
+ buffer = AllocZeroed(0x400);
+ LZDecompressWram(lzPaletteData, buffer);
+ LoadPalette(buffer, paletteOffset, 0x20);
+ LoadPalette(buffer, 0x80 + battlerId * 16, 0x20);
+ Free(buffer);
+ if (species == SPECIES_CASTFORM)
+ {
+ paletteOffset = 0x100 + battlerId * 16;
+ LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
+ LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
+ }
+ // transform's pink color
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
+ {
+ BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
+ CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
+ }
+}
+
+void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
+{
+ u32 monsPersonality, currentPersonality, otId;
+ u16 species;
+ u8 position;
+ u16 paletteOffset;
+ const void *lzPaletteData;
+ void *buffer;
+
+ monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
+ {
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ currentPersonality = monsPersonality;
+ }
+ else
+ {
+ species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
+ currentPersonality = gTransformedPersonalities[battlerId];
+ }
+ otId = GetMonData(mon, MON_DATA_OT_ID);
+ position = GetBattlerPosition(battlerId);
+ if (sub_804455C(1, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species],
+ gMonSpritesGfxPtr->sprites[position],
+ species, currentPersonality);
+ else
+ HandleLoadSpecialPokePic(&gMonBackPicTable[species],
+ gMonSpritesGfxPtr->sprites[position],
+ species, currentPersonality);
+ paletteOffset = 0x100 + battlerId * 16;
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
+ lzPaletteData = GetMonFrontSpritePal(mon);
+ else
+ lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality);
+ buffer = AllocZeroed(0x400);
+ LZDecompressWram(lzPaletteData, buffer);
+ LoadPalette(buffer, paletteOffset, 0x20);
+ LoadPalette(buffer, 0x80 + battlerId * 16, 0x20);
+ Free(buffer);
+ if (species == SPECIES_CASTFORM)
+ {
+ paletteOffset = 0x100 + battlerId * 16;
+ LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
+ LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
+ }
+ // transform's pink color
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
+ {
+ BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
+ CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
+ }
+}
+
+void DecompressGhostFrontPic(struct Pokemon *unused, u8 battlerId)
+{
+ u16 palOffset;
+ void *buffer;
+ u8 position = GetBattlerPosition(battlerId);
+
+ LZ77UnCompWram(gGhostFrontPic, gMonSpritesGfxPtr->sprites[position]);
+ palOffset = 0x100 + 16 * battlerId;
+ buffer = AllocZeroed(0x400);
+ LZDecompressWram(gGhostPalette, buffer);
+ LoadPalette(buffer, palOffset, 0x20);
+ LoadPalette(buffer, 0x80 + 16 * battlerId, 0x20);
+ Free(buffer);
+}
+
+void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId)
+{
+ struct SpriteSheet sheet;
+ u8 position = GetBattlerPosition(battlerId);
+
+ DecompressPicFromTable(&gTrainerFrontPicTable[frontPicId], gMonSpritesGfxPtr->sprites[position], SPECIES_NONE);
+ sheet.data = gMonSpritesGfxPtr->sprites[position];
+ sheet.size = gTrainerFrontPicTable[frontPicId].size;
+ sheet.tag = gTrainerFrontPicTable[frontPicId].tag;
+ LoadSpriteSheet(&sheet);
+ LoadCompressedSpritePaletteUsingHeap(&gTrainerFrontPicPaletteTable[frontPicId]);
+}
+
+void DecompressTrainerBackPalette(u16 index, u8 palette)
+{
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[index].data, (palette + 16) * 16, 0x20);
+}
+
+void nullsub_16(u8 a1)
+{
+}
+
+void FreeTrainerFrontPicPaletteAndTile(u16 frontPicId)
+{
+ FreeSpritePaletteByTag(gTrainerFrontPicPaletteTable[frontPicId].tag);
+ FreeSpriteTilesByTag(gTrainerFrontPicTable[frontPicId].tag);
+}
+
+// not used
+static void BattleLoadAllHealthBoxesGfxAtOnce(void)
+{
+ u8 numberOfBattlers = 0;
+ u8 i;
+
+ LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]);
+ LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]);
+ if (!IsDoubleBattle())
+ {
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_SinglesPlayerHealthbox);
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_SinglesOpponentHealthbox);
+ numberOfBattlers = 2;
+ }
+ else
+ {
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_DoublesPlayerHealthbox[0]);
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_DoublesPlayerHealthbox[1]);
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_DoublesOpponentHealthbox[0]);
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_DoublesOpponentHealthbox[1]);
+ numberOfBattlers = MAX_BATTLERS_COUNT;
+ }
+ for (i = 0; i < numberOfBattlers; ++i)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_HealthBar[gBattlerPositions[i]]);
+}
+
+bool8 BattleLoadAllHealthBoxesGfx(u8 state)
+{
+ bool8 retVal = FALSE;
+
+ if (state)
+ {
+ if (state == 1)
+ {
+ LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]);
+ LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]);
+ }
+ else if (!IsDoubleBattle())
+ {
+ if (state == 2)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_SafariHealthbox);
+ else
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_SinglesPlayerHealthbox);
+ }
+ else if (state == 3)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_SinglesOpponentHealthbox);
+ else if (state == 4)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_HealthBar[gBattlerPositions[0]]);
+ else if (state == 5)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_HealthBar[gBattlerPositions[1]]);
+ else
+ retVal = TRUE;
+ }
+ else
+ {
+ if (state == 2)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_DoublesPlayerHealthbox[0]);
+ else if (state == 3)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_DoublesPlayerHealthbox[1]);
+ else if (state == 4)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_DoublesOpponentHealthbox[0]);
+ else if (state == 5)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_DoublesOpponentHealthbox[1]);
+ else if (state == 6)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_HealthBar[gBattlerPositions[0]]);
+ else if (state == 7)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_HealthBar[gBattlerPositions[1]]);
+ else if (state == 8)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_HealthBar[gBattlerPositions[2]]);
+ else if (state == 9)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheets_HealthBar[gBattlerPositions[3]]);
+ else
+ retVal = TRUE;
+ }
+ }
+ return retVal;
+}
+
+void LoadBattleBarGfx(u8 arg0)
+{
+ LZDecompressWram(gFile_graphics_interface_hp_numbers, gMonSpritesGfxPtr->barFontGfx);
+}
+
+bool8 BattleInitAllSprites(u8 *state, u8 *battlerId)
+{
+ bool8 retVal = FALSE;
+
+ switch (*state)
+ {
+ case 0:
+ ClearSpritesBattlerHealthboxAnimData();
+ ++*state;
+ break;
+ case 1:
+ if (!BattleLoadAllHealthBoxesGfx(*battlerId))
+ {
+ ++*battlerId;
+ }
+ else
+ {
+ *battlerId = 0;
+ ++*state;
+ }
+ break;
+ case 2:
+ ++*state;
+ break;
+ case 3:
+ if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && *battlerId == 0)
+ gHealthboxSpriteIds[*battlerId] = CreateSafariPlayerHealthboxSprites();
+ else
+ gHealthboxSpriteIds[*battlerId] = CreateBattlerHealthboxSprites(*battlerId);
+
+ ++*battlerId;
+ if (*battlerId == gBattlersCount)
+ {
+ *battlerId = 0;
+ ++*state;
+ }
+ break;
+ case 4:
+ InitBattlerHealthboxCoords(*battlerId);
+ if (gBattlerPositions[*battlerId] <= 1)
+ DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], FALSE);
+ else
+ DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], TRUE);
+
+ ++*battlerId;
+ if (*battlerId == gBattlersCount)
+ {
+ *battlerId = 0;
+ ++*state;
+ }
+ break;
+ case 5:
+ if (GetBattlerSide(*battlerId) == B_SIDE_PLAYER)
+ {
+ if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[*battlerId], &gPlayerParty[gBattlerPartyIndexes[*battlerId]], HEALTHBOX_ALL);
+ }
+ else
+ {
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[*battlerId], &gEnemyParty[gBattlerPartyIndexes[*battlerId]], HEALTHBOX_ALL);
+ }
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[*battlerId]);
+ ++*battlerId;
+ if (*battlerId == gBattlersCount)
+ {
+ *battlerId = 0;
+ ++*state;
+ }
+ break;
+ case 6:
+ LoadAndCreateEnemyShadowSprites();
+ sub_8127CAC();
+ retVal = TRUE;
+ break;
+ }
+ return retVal;
+}
+
+void ClearSpritesHealthboxAnimData(void)
+{
+ memset(gBattleSpritesDataPtr->healthBoxesData, 0, sizeof(struct BattleHealthboxInfo) * MAX_BATTLERS_COUNT);
+ memset(gBattleSpritesDataPtr->animationData, 0, sizeof(struct BattleAnimationInfo));
+}
+
+static void ClearSpritesBattlerHealthboxAnimData(void)
+{
+ ClearSpritesHealthboxAnimData();
+ memset(gBattleSpritesDataPtr->battlerData, 0, sizeof(struct BattleSpriteInfo) * MAX_BATTLERS_COUNT);
+}
+
+void CopyAllBattleSpritesInvisibilities(void)
+{
+ s32 i;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ gBattleSpritesDataPtr->battlerData[i].invisible = gSprites[gBattlerSpriteIds[i]].invisible;
+}
+
+void CopyBattleSpriteInvisibility(u8 battlerId)
+{
+ gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible;
+}
+
+void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 notTransform)
+{
+ u16 paletteOffset, targetSpecies;
+ u32 personalityValue;
+ u32 otId;
+ u8 position;
+ const u32 *lzPaletteData;
+ void *buffer;
+
+ //TODO: notTransform is bool8 in pokeem. Document it with a more reasonable name here.
+ if (notTransform == 255)
+ {
+ const void *src;
+ void *dst;
+
+ position = GetBattlerPosition(battlerAtk);
+ targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_SPECIES);
+ personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[targetSpecies],
+ gMonSpritesGfxPtr->sprites[position],
+ targetSpecies,
+ personalityValue);
+ src = gMonSpritesGfxPtr->sprites[position];
+ dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32);
+ DmaCopy32(3, src, dst, 0x800);
+ paletteOffset = 0x100 + battlerAtk * 16;
+ lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue);
+ buffer = AllocZeroed(0x400);
+ LZDecompressWram(lzPaletteData, buffer);
+ LoadPalette(buffer, paletteOffset, 32);
+ Free(buffer);
+ gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleMonForms[battlerAtk]);
+ SetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_NICKNAME, gSpeciesNames[targetSpecies]);
+ sub_80496C0(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]);
+ sub_804981C(gHealthboxSpriteIds[battlerAtk], 1);
+ }
+ else if (notTransform)
+ {
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleSpritesDataPtr->animationData->animArg);
+ paletteOffset = 0x100 + battlerAtk * 16;
+ LoadPalette(gBattleStruct->castformPalette[gBattleSpritesDataPtr->animationData->animArg], paletteOffset, 32);
+ gBattleMonForms[battlerAtk] = gBattleSpritesDataPtr->animationData->animArg;
+ if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies != SPECIES_NONE)
+ {
+ BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
+ CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
+ }
+ gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
+ }
+ else
+ {
+ const void *src;
+ void *dst;
+
+ position = GetBattlerPosition(battlerAtk);
+ if (GetBattlerSide(battlerDef) == B_SIDE_OPPONENT)
+ targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
+ else
+ targetSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
+ if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER)
+ {
+ personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
+
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies],
+ gMonSpritesGfxPtr->sprites[position],
+ targetSpecies,
+ gTransformedPersonalities[battlerAtk]);
+ }
+ else
+ {
+ personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
+
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[targetSpecies],
+ gMonSpritesGfxPtr->sprites[position],
+ targetSpecies,
+ gTransformedPersonalities[battlerAtk]);
+ }
+ src = gMonSpritesGfxPtr->sprites[position];
+ dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32);
+ DmaCopy32(3, src, dst, 0x800);
+ paletteOffset = 0x100 + battlerAtk * 16;
+ lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue);
+ buffer = AllocZeroed(0x400);
+ LZDecompressWram(lzPaletteData, buffer);
+ LoadPalette(buffer, paletteOffset, 32);
+ Free(buffer);
+ if (targetSpecies == SPECIES_CASTFORM)
+ {
+ LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
+ LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[battlerDef] * 16, paletteOffset, 32);
+ }
+ BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
+ CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
+ gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies = targetSpecies;
+ gBattleMonForms[battlerAtk] = gBattleMonForms[battlerDef];
+ gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleMonForms[battlerAtk]);
+ }
+}
+
+void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite)
+{
+ u8 position;
+ s32 i;
+ u32 palOffset;
+
+ if (!loadMonSprite)
+ {
+ position = GetBattlerPosition(battlerId);
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ LZDecompressVram(gSubstituteDollGfx, gMonSpritesGfxPtr->sprites[position]);
+ else
+ LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]);
+ for (i = 1; i < 4; ++i)
+ {
+ u8 (*ptr)[4][0x800] = gMonSpritesGfxPtr->sprites[position];
+
+ ++ptr;
+ --ptr;
+ DmaCopy32Defvars(3, (*ptr)[0], (*ptr)[i], 0x800);
+ }
+ palOffset = (battlerId * 16) + 0x100;
+ LoadCompressedPalette(gSubstituteDollPal, palOffset, 32);
+ }
+ else
+ {
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ else
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ }
+}
+
+void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId)
+{
+ BattleLoadSubstituteOrMonSpriteGfx(battlerId, loadMonSprite);
+ StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[battlerId]);
+ if (!loadMonSprite)
+ gSprites[spriteId].pos1.y = GetSubstituteSpriteDefault_Y(battlerId);
+ else
+ gSprites[spriteId].pos1.y = GetBattlerSpriteDefault_Y(battlerId);
+}
+
+void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move)
+{
+ if (move == MOVE_SUBSTITUTE)
+ gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute = 1;
+}
+
+void ClearBehindSubstituteBit(u8 battlerId)
+{
+ gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute = 0;
+}
+
+void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId)
+{
+ u16 hp = GetMonData(mon, MON_DATA_HP);
+ u16 maxHP = GetMonData(mon, MON_DATA_MAX_HP);
+
+ if (GetHPBarLevel(hp, maxHP) == HP_BAR_RED)
+ {
+ if (!gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong)
+ {
+ if (!gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
+ PlaySE(SE_T_OOAME);
+ gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 1;
+ }
+ }
+ else
+ {
+ gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 0;
+ if (!IsDoubleBattle())
+ m4aSongNumStop(SE_T_OOAME);
+ else if (IsDoubleBattle() && !gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
+ m4aSongNumStop(SE_T_OOAME);
+ }
+}
+
+void BattleStopLowHpSound(void)
+{
+ u8 playerBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+
+ gBattleSpritesDataPtr->battlerData[playerBattler].lowHpSong = 0;
+ if (IsDoubleBattle())
+ gBattleSpritesDataPtr->battlerData[playerBattler ^ BIT_FLANK].lowHpSong = 0;
+ m4aSongNumStop(SE_T_OOAME);
+}
+
+// not used
+static u8 GetMonHPBarLevel(struct Pokemon *mon)
+{
+ u16 hp = GetMonData(mon, MON_DATA_HP);
+ u16 maxHP = GetMonData(mon, MON_DATA_MAX_HP);
+
+ return GetHPBarLevel(hp, maxHP);
+}
+
+void HandleBattleLowHpMusicChange(void)
+{
+ if (gMain.inBattle)
+ {
+ u8 playerBattler1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ u8 playerBattler2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ u8 battler1PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler1]);
+ u8 battler2PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler2]);
+
+ if (GetMonData(&gPlayerParty[battler1PartyId], MON_DATA_HP) != 0)
+ HandleLowHpMusicChange(&gPlayerParty[battler1PartyId], playerBattler1);
+ if (IsDoubleBattle() && GetMonData(&gPlayerParty[battler2PartyId], MON_DATA_HP) != 0)
+ HandleLowHpMusicChange(&gPlayerParty[battler2PartyId], playerBattler2);
+ }
+}
+
+void sub_8035450(u8 affineMode)
+{
+ s32 i;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (IsBattlerSpritePresent(i))
+ {
+ gSprites[gBattlerSpriteIds[i]].oam.affineMode = affineMode;
+ if (affineMode == ST_OAM_AFFINE_OFF)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[i].matrixNum = gSprites[gBattlerSpriteIds[i]].oam.matrixNum;
+ gSprites[gBattlerSpriteIds[i]].oam.matrixNum = 0;
+ }
+ else
+ {
+ gSprites[gBattlerSpriteIds[i]].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[i].matrixNum;
+ }
+ }
+ }
+}
+
+void LoadAndCreateEnemyShadowSprites(void)
+{
+ u8 battlerId;
+
+ LoadCompressedSpriteSheetUsingHeap(&gSpriteSheet_EnemyShadow);
+ battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
+ if (IsDoubleBattle())
+ {
+ battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
+ }
+}
+
+static void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
+{
+ bool8 invisible = FALSE;
+ u8 battlerId = shadowSprite->tBattlerId;
+ struct Sprite *battlerSprite = &gSprites[gBattlerSpriteIds[battlerId]];
+
+ if (!battlerSprite->inUse || !IsBattlerSpritePresent(battlerId))
+ {
+ shadowSprite->callback = SpriteCB_SetInvisible;
+ return;
+ }
+ if (gAnimScriptActive || battlerSprite->invisible)
+ invisible = TRUE;
+ else if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE
+ && gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies] == 0)
+ invisible = TRUE;
+ if (gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute)
+ invisible = TRUE;
+ shadowSprite->pos1.x = battlerSprite->pos1.x;
+ shadowSprite->pos2.x = battlerSprite->pos2.x;
+ shadowSprite->invisible = invisible;
+}
+
+void SpriteCB_SetInvisible(struct Sprite *sprite)
+{
+ sprite->invisible = TRUE;
+}
+
+void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species)
+{
+ // The player's shadow is never seen.
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ return;
+
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
+ species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
+
+ if (gEnemyMonElevation[species] != 0)
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_EnemyShadow;
+ else
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible;
+}
+
+void HideBattlerShadowSprite(u8 battlerId)
+{
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible;
+}
+
+void sub_80357C8(void)
+{
+ u16 *vramPtr = (u16 *)(VRAM + 0x240);
+ s32 i;
+ s32 j;
+
+ for (i = 0; i < 9; ++i)
+ {
+ for (j = 0; j < 16; ++vramPtr, ++j)
+ {
+ if (!(*vramPtr & 0xF000))
+ *vramPtr |= 0xF000;
+ if (!(*vramPtr & 0x0F00))
+ *vramPtr |= 0x0F00;
+ if (!(*vramPtr & 0x00F0))
+ *vramPtr |= 0x00F0;
+ if (!(*vramPtr & 0x000F))
+ *vramPtr |= 0x000F;
+ }
+ }
+ vramPtr = (u16 *)(VRAM + 0x600);
+ for (i = 0; i < 18; ++i)
+ {
+ for (j = 0; j < 16; ++vramPtr, ++j)
+ {
+ if (!(*vramPtr & 0xF000))
+ *vramPtr |= 0x6000;
+ if (!(*vramPtr & 0x0F00))
+ *vramPtr |= 0x0600;
+ if (!(*vramPtr & 0x00F0))
+ *vramPtr |= 0x0060;
+ if (!(*vramPtr & 0x000F))
+ *vramPtr |= 0x0006;
+ }
+ }
+}
+
+void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute)
+{
+ gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE;
+ gBattleMonForms[battlerId] = 0;
+ if (!dontClearSubstitute)
+ ClearBehindSubstituteBit(battlerId);
+}
+
+void AllocateMonSpritesGfx(void)
+{
+ u8 i = 0, j;
+
+ gMonSpritesGfxPtr = NULL;
+ gMonSpritesGfxPtr = AllocZeroed(sizeof(*gMonSpritesGfxPtr));
+ gMonSpritesGfxPtr->firstDecompressed = AllocZeroed(0x8000);
+ for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
+ {
+ gMonSpritesGfxPtr->sprites[i] = gMonSpritesGfxPtr->firstDecompressed + (i * 0x2000);
+ *(gMonSpritesGfxPtr->templates + i) = gUnknown_825DEF0[i];
+
+ for (j = 0; j < 4; ++j)
+ {
+ gMonSpritesGfxPtr->field_74[i][j].data = gMonSpritesGfxPtr->sprites[i] + (j * 0x800);
+ gMonSpritesGfxPtr->field_74[i][j].size = 0x800;
+ }
+
+ gMonSpritesGfxPtr->templates[i].images = gMonSpritesGfxPtr->field_74[i];
+ }
+ gMonSpritesGfxPtr->barFontGfx = AllocZeroed(0x1000);
+}
+
+void FreeMonSpritesGfx(void)
+{
+ if (gMonSpritesGfxPtr == NULL)
+ return;
+ if (gMonSpritesGfxPtr->field_17C != NULL)
+ FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C);
+ if (gMonSpritesGfxPtr->field_178 != NULL)
+ FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_178);
+ FREE_AND_SET_NULL(gMonSpritesGfxPtr->barFontGfx);
+ FREE_AND_SET_NULL(gMonSpritesGfxPtr->firstDecompressed);
+ gMonSpritesGfxPtr->sprites[0] = NULL;
+ gMonSpritesGfxPtr->sprites[1] = NULL;
+ gMonSpritesGfxPtr->sprites[2] = NULL;
+ gMonSpritesGfxPtr->sprites[3] = NULL;
+ FREE_AND_SET_NULL(gMonSpritesGfxPtr);
+}
+
+bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon)
+{
+ s16 hp, maxHP;
+ s32 barLevel;
+
+ if (GetMonData(mon, MON_DATA_STATUS) & (STATUS1_ANY | STATUS1_TOXIC_COUNTER))
+ return FALSE;
+ hp = GetMonData(mon, MON_DATA_HP);
+ maxHP = GetMonData(mon, MON_DATA_MAX_HP);
+ barLevel = GetHPBarLevel(hp, maxHP);
+ if (barLevel <= HP_BAR_YELLOW)
+ return FALSE;
+ return TRUE;
+}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
new file mode 100644
index 000000000..f84ff4d4a
--- /dev/null
+++ b/src/battle_script_commands.c
@@ -0,0 +1,9824 @@
+#include "global.h"
+#include "item.h"
+#include "util.h"
+#include "pokemon.h"
+#include "random.h"
+#include "data.h"
+#include "text.h"
+#include "sound.h"
+#include "pokedex.h"
+#include "window.h"
+#include "main.h"
+#include "palette.h"
+#include "money.h"
+#include "bg.h"
+#include "string_util.h"
+#include "pokemon_icon.h"
+#include "m4a.h"
+#include "mail.h"
+#include "event_data.h"
+#include "strings.h"
+#include "pokemon_special_anim.h"
+#include "pokemon_storage_system.h"
+#include "pokemon_summary_screen.h"
+#include "task.h"
+#include "naming_screen.h"
+#include "overworld.h"
+#include "party_menu.h"
+#include "trainer_pokemon_sprites.h"
+#include "field_specials.h"
+#include "battle.h"
+#include "battle_message.h"
+#include "battle_anim.h"
+#include "battle_setup.h"
+#include "battle_ai_script_commands.h"
+#include "battle_scripts.h"
+#include "battle_string_ids.h"
+#include "reshow_battle_screen.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "constants/battle_anim.h"
+#include "constants/battle_move_effects.h"
+#include "constants/battle_script_commands.h"
+#include "constants/items.h"
+#include "constants/hold_effects.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+#include "constants/moves.h"
+#include "constants/abilities.h"
+#include "constants/pokemon.h"
+#include "constants/trainers.h"
+
+#define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
+
+extern const u8 *const gBattleScriptsForMoveEffects[];
+
+static bool8 IsTwoTurnsMove(u16 move);
+static void TrySetDestinyBondToHappen(void);
+static u8 AttacksThisTurn(u8 battlerId, u16 move); // Note: returns 1 if it's a charging turn, otherwise 2.
+static void CheckWonderGuardAndLevitate(void);
+static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8, const u8 *BS_ptr);
+static void sub_8026480(void);
+static bool8 sub_80264D0(void);
+static void DrawLevelUpWindow1(void);
+static void DrawLevelUpWindow2(void);
+static bool8 sub_8026648(void);
+static void PutMonIconOnLvlUpBox(void);
+static void PutLevelAndGenderOnLvlUpBox(void);
+
+static void SpriteCB_MonIconOnLvlUpBox(struct Sprite *sprite);
+
+static void atk00_attackcanceler(void);
+static void atk01_accuracycheck(void);
+static void atk02_attackstring(void);
+static void atk03_ppreduce(void);
+static void atk04_critcalc(void);
+static void atk05_damagecalc(void);
+static void atk06_typecalc(void);
+static void atk07_adjustnormaldamage(void);
+static void atk08_adjustnormaldamage2(void);
+static void atk09_attackanimation(void);
+static void atk0A_waitanimation(void);
+static void atk0B_healthbarupdate(void);
+static void atk0C_datahpupdate(void);
+static void atk0D_critmessage(void);
+static void atk0E_effectivenesssound(void);
+static void atk0F_resultmessage(void);
+static void atk10_printstring(void);
+static void atk11_printselectionstring(void);
+static void atk12_waitmessage(void);
+static void atk13_printfromtable(void);
+static void atk14_printselectionstringfromtable(void);
+static void atk15_seteffectwithchance(void);
+static void atk16_seteffectprimary(void);
+static void atk17_seteffectsecondary(void);
+static void atk18_clearstatusfromeffect(void);
+static void atk19_tryfaintmon(void);
+static void atk1A_dofaintanimation(void);
+static void atk1B_cleareffectsonfaint(void);
+static void atk1C_jumpifstatus(void);
+static void atk1D_jumpifstatus2(void);
+static void atk1E_jumpifability(void);
+static void atk1F_jumpifsideaffecting(void);
+static void atk20_jumpifstat(void);
+static void atk21_jumpifstatus3condition(void);
+static void atk22_jumpiftype(void);
+static void atk23_getexp(void);
+static void atk24(void);
+static void atk25_movevaluescleanup(void);
+static void atk26_setmultihit(void);
+static void atk27_decrementmultihit(void);
+static void atk28_goto(void);
+static void atk29_jumpifbyte(void);
+static void atk2A_jumpifhalfword(void);
+static void atk2B_jumpifword(void);
+static void atk2C_jumpifarrayequal(void);
+static void atk2D_jumpifarraynotequal(void);
+static void atk2E_setbyte(void);
+static void atk2F_addbyte(void);
+static void atk30_subbyte(void);
+static void atk31_copyarray(void);
+static void atk32_copyarraywithindex(void);
+static void atk33_orbyte(void);
+static void atk34_orhalfword(void);
+static void atk35_orword(void);
+static void atk36_bicbyte(void);
+static void atk37_bichalfword(void);
+static void atk38_bicword(void);
+static void atk39_pause(void);
+static void atk3A_waitstate(void);
+static void atk3B_healthbar_update(void);
+static void atk3C_return(void);
+static void atk3D_end(void);
+static void atk3E_end2(void);
+static void atk3F_end3(void);
+static void atk40_jumpifaffectedbyprotect(void);
+static void atk41_call(void);
+static void atk42_jumpiftype2(void);
+static void atk43_jumpifabilitypresent(void);
+static void atk44_endselectionscript(void);
+static void atk45_playanimation(void);
+static void atk46_playanimation2(void);
+static void atk47_setgraphicalstatchangevalues(void);
+static void atk48_playstatchangeanimation(void);
+static void atk49_moveend(void);
+static void atk4A_typecalc2(void);
+static void atk4B_returnatktoball(void);
+static void atk4C_getswitchedmondata(void);
+static void atk4D_switchindataupdate(void);
+static void atk4E_switchinanim(void);
+static void atk4F_jumpifcantswitch(void);
+static void atk50_openpartyscreen(void);
+static void atk51_switchhandleorder(void);
+static void atk52_switchineffects(void);
+static void atk53_trainerslidein(void);
+static void atk54_playse(void);
+static void atk55_fanfare(void);
+static void atk56_playfaintcry(void);
+static void atk57(void);
+static void atk58_returntoball(void);
+static void atk59_handlelearnnewmove(void);
+static void atk5A_yesnoboxlearnmove(void);
+static void atk5B_yesnoboxstoplearningmove(void);
+static void atk5C_hitanimation(void);
+static void atk5D_getmoneyreward(void);
+static void atk5E(void);
+static void atk5F_swapattackerwithtarget(void);
+static void atk60_incrementgamestat(void);
+static void atk61_drawpartystatussummary(void);
+static void atk62_hidepartystatussummary(void);
+static void atk63_jumptocalledmove(void);
+static void atk64_statusanimation(void);
+static void atk65_status2animation(void);
+static void atk66_chosenstatusanimation(void);
+static void atk67_yesnobox(void);
+static void atk68_cancelallactions(void);
+static void atk69_adjustsetdamage(void);
+static void atk6A_removeitem(void);
+static void atk6B_atknameinbuff1(void);
+static void atk6C_drawlvlupbox(void);
+static void atk6D_resetsentmonsvalue(void);
+static void atk6E_setatktoplayer0(void);
+static void atk6F_makevisible(void);
+static void atk70_recordlastability(void);
+static void atk71_buffermovetolearn(void);
+static void atk72_jumpifplayerran(void);
+static void atk73_hpthresholds(void);
+static void atk74_hpthresholds2(void);
+static void atk75_useitemonopponent(void);
+static void atk76_various(void);
+static void atk77_setprotectlike(void);
+static void atk78_faintifabilitynotdamp(void);
+static void atk79_setatkhptozero(void);
+static void atk7A_jumpifnexttargetvalid(void);
+static void atk7B_tryhealhalfhealth(void);
+static void atk7C_trymirrormove(void);
+static void atk7D_setrain(void);
+static void atk7E_setreflect(void);
+static void atk7F_setseeded(void);
+static void atk80_manipulatedamage(void);
+static void atk81_trysetrest(void);
+static void atk82_jumpifnotfirstturn(void);
+static void atk83_nop(void);
+static void atk84_jumpifcantmakeasleep(void);
+static void atk85_stockpile(void);
+static void atk86_stockpiletobasedamage(void);
+static void atk87_stockpiletohpheal(void);
+static void atk88_negativedamage(void);
+static void atk89_statbuffchange(void);
+static void atk8A_normalisebuffs(void);
+static void atk8B_setbide(void);
+static void atk8C_confuseifrepeatingattackends(void);
+static void atk8D_setmultihitcounter(void);
+static void atk8E_initmultihitstring(void);
+static void atk8F_forcerandomswitch(void);
+static void atk90_tryconversiontypechange(void);
+static void atk91_givepaydaymoney(void);
+static void atk92_setlightscreen(void);
+static void atk93_tryKO(void);
+static void atk94_damagetohalftargethp(void);
+static void atk95_setsandstorm(void);
+static void atk96_weatherdamage(void);
+static void atk97_tryinfatuating(void);
+static void atk98_updatestatusicon(void);
+static void atk99_setmist(void);
+static void atk9A_setfocusenergy(void);
+static void atk9B_transformdataexecution(void);
+static void atk9C_setsubstitute(void);
+static void atk9D_mimicattackcopy(void);
+static void atk9E_metronome(void);
+static void atk9F_dmgtolevel(void);
+static void atkA0_psywavedamageeffect(void);
+static void atkA1_counterdamagecalculator(void);
+static void atkA2_mirrorcoatdamagecalculator(void);
+static void atkA3_disablelastusedattack(void);
+static void atkA4_trysetencore(void);
+static void atkA5_painsplitdmgcalc(void);
+static void atkA6_settypetorandomresistance(void);
+static void atkA7_setalwayshitflag(void);
+static void atkA8_copymovepermanently(void);
+static void atkA9_trychoosesleeptalkmove(void);
+static void atkAA_setdestinybond(void);
+static void atkAB_trysetdestinybondtohappen(void);
+static void atkAC_remaininghptopower(void);
+static void atkAD_tryspiteppreduce(void);
+static void atkAE_healpartystatus(void);
+static void atkAF_cursetarget(void);
+static void atkB0_trysetspikes(void);
+static void atkB1_setforesight(void);
+static void atkB2_trysetperishsong(void);
+static void atkB3_rolloutdamagecalculation(void);
+static void atkB4_jumpifconfusedandstatmaxed(void);
+static void atkB5_furycuttercalc(void);
+static void atkB6_happinesstodamagecalculation(void);
+static void atkB7_presentdamagecalculation(void);
+static void atkB8_setsafeguard(void);
+static void atkB9_magnitudedamagecalculation(void);
+static void atkBA_jumpifnopursuitswitchdmg(void);
+static void atkBB_setsunny(void);
+static void atkBC_maxattackhalvehp(void);
+static void atkBD_copyfoestats(void);
+static void atkBE_rapidspinfree(void);
+static void atkBF_setdefensecurlbit(void);
+static void atkC0_recoverbasedonsunlight(void);
+static void atkC1_hiddenpowercalc(void);
+static void atkC2_selectfirstvalidtarget(void);
+static void atkC3_trysetfutureattack(void);
+static void atkC4_trydobeatup(void);
+static void atkC5_setsemiinvulnerablebit(void);
+static void atkC6_clearsemiinvulnerablebit(void);
+static void atkC7_setminimize(void);
+static void atkC8_sethail(void);
+static void atkC9_jumpifattackandspecialattackcannotfall(void);
+static void atkCA_setforcedtarget(void);
+static void atkCB_setcharge(void);
+static void atkCC_callterrainattack(void);
+static void atkCD_cureifburnedparalysedorpoisoned(void);
+static void atkCE_settorment(void);
+static void atkCF_jumpifnodamage(void);
+static void atkD0_settaunt(void);
+static void atkD1_trysethelpinghand(void);
+static void atkD2_tryswapitems(void);
+static void atkD3_trycopyability(void);
+static void atkD4_trywish(void);
+static void atkD5_trysetroots(void);
+static void atkD6_doubledamagedealtifdamaged(void);
+static void atkD7_setyawn(void);
+static void atkD8_setdamagetohealthdifference(void);
+static void atkD9_scaledamagebyhealthratio(void);
+static void atkDA_tryswapabilities(void);
+static void atkDB_tryimprison(void);
+static void atkDC_trysetgrudge(void);
+static void atkDD_weightdamagecalculation(void);
+static void atkDE_assistattackselect(void);
+static void atkDF_trysetmagiccoat(void);
+static void atkE0_trysetsnatch(void);
+static void atkE1_trygetintimidatetarget(void);
+static void atkE2_switchoutabilities(void);
+static void atkE3_jumpifhasnohp(void);
+static void atkE4_getsecretpowereffect(void);
+static void atkE5_pickup(void);
+static void atkE6_docastformchangeanimation(void);
+static void atkE7_trycastformdatachange(void);
+static void atkE8_settypebasedhalvers(void);
+static void atkE9_setweatherballtype(void);
+static void atkEA_tryrecycleitem(void);
+static void atkEB_settypetoterrain(void);
+static void atkEC_pursuitrelated(void);
+static void atkED_snatchsetbattlers(void);
+static void atkEE_removelightscreenreflect(void);
+static void atkEF_handleballthrow(void);
+static void atkF0_givecaughtmon(void);
+static void atkF1_trysetcaughtmondexflags(void);
+static void atkF2_displaydexinfo(void);
+static void atkF3_trygivecaughtmonnick(void);
+static void atkF4_subattackerhpbydmg(void);
+static void atkF5_removeattackerstatus1(void);
+static void atkF6_finishaction(void);
+static void atkF7_finishturn(void);
+
+void (* const gBattleScriptingCommandsTable[])(void) =
+{
+ atk00_attackcanceler,
+ atk01_accuracycheck,
+ atk02_attackstring,
+ atk03_ppreduce,
+ atk04_critcalc,
+ atk05_damagecalc,
+ atk06_typecalc,
+ atk07_adjustnormaldamage,
+ atk08_adjustnormaldamage2,
+ atk09_attackanimation,
+ atk0A_waitanimation,
+ atk0B_healthbarupdate,
+ atk0C_datahpupdate,
+ atk0D_critmessage,
+ atk0E_effectivenesssound,
+ atk0F_resultmessage,
+ atk10_printstring,
+ atk11_printselectionstring,
+ atk12_waitmessage,
+ atk13_printfromtable,
+ atk14_printselectionstringfromtable,
+ atk15_seteffectwithchance,
+ atk16_seteffectprimary,
+ atk17_seteffectsecondary,
+ atk18_clearstatusfromeffect,
+ atk19_tryfaintmon,
+ atk1A_dofaintanimation,
+ atk1B_cleareffectsonfaint,
+ atk1C_jumpifstatus,
+ atk1D_jumpifstatus2,
+ atk1E_jumpifability,
+ atk1F_jumpifsideaffecting,
+ atk20_jumpifstat,
+ atk21_jumpifstatus3condition,
+ atk22_jumpiftype,
+ atk23_getexp,
+ atk24,
+ atk25_movevaluescleanup,
+ atk26_setmultihit,
+ atk27_decrementmultihit,
+ atk28_goto,
+ atk29_jumpifbyte,
+ atk2A_jumpifhalfword,
+ atk2B_jumpifword,
+ atk2C_jumpifarrayequal,
+ atk2D_jumpifarraynotequal,
+ atk2E_setbyte,
+ atk2F_addbyte,
+ atk30_subbyte,
+ atk31_copyarray,
+ atk32_copyarraywithindex,
+ atk33_orbyte,
+ atk34_orhalfword,
+ atk35_orword,
+ atk36_bicbyte,
+ atk37_bichalfword,
+ atk38_bicword,
+ atk39_pause,
+ atk3A_waitstate,
+ atk3B_healthbar_update,
+ atk3C_return,
+ atk3D_end,
+ atk3E_end2,
+ atk3F_end3,
+ atk40_jumpifaffectedbyprotect,
+ atk41_call,
+ atk42_jumpiftype2,
+ atk43_jumpifabilitypresent,
+ atk44_endselectionscript,
+ atk45_playanimation,
+ atk46_playanimation2,
+ atk47_setgraphicalstatchangevalues,
+ atk48_playstatchangeanimation,
+ atk49_moveend,
+ atk4A_typecalc2,
+ atk4B_returnatktoball,
+ atk4C_getswitchedmondata,
+ atk4D_switchindataupdate,
+ atk4E_switchinanim,
+ atk4F_jumpifcantswitch,
+ atk50_openpartyscreen,
+ atk51_switchhandleorder,
+ atk52_switchineffects,
+ atk53_trainerslidein,
+ atk54_playse,
+ atk55_fanfare,
+ atk56_playfaintcry,
+ atk57,
+ atk58_returntoball,
+ atk59_handlelearnnewmove,
+ atk5A_yesnoboxlearnmove,
+ atk5B_yesnoboxstoplearningmove,
+ atk5C_hitanimation,
+ atk5D_getmoneyreward,
+ atk5E,
+ atk5F_swapattackerwithtarget,
+ atk60_incrementgamestat,
+ atk61_drawpartystatussummary,
+ atk62_hidepartystatussummary,
+ atk63_jumptocalledmove,
+ atk64_statusanimation,
+ atk65_status2animation,
+ atk66_chosenstatusanimation,
+ atk67_yesnobox,
+ atk68_cancelallactions,
+ atk69_adjustsetdamage,
+ atk6A_removeitem,
+ atk6B_atknameinbuff1,
+ atk6C_drawlvlupbox,
+ atk6D_resetsentmonsvalue,
+ atk6E_setatktoplayer0,
+ atk6F_makevisible,
+ atk70_recordlastability,
+ atk71_buffermovetolearn,
+ atk72_jumpifplayerran,
+ atk73_hpthresholds,
+ atk74_hpthresholds2,
+ atk75_useitemonopponent,
+ atk76_various,
+ atk77_setprotectlike,
+ atk78_faintifabilitynotdamp,
+ atk79_setatkhptozero,
+ atk7A_jumpifnexttargetvalid,
+ atk7B_tryhealhalfhealth,
+ atk7C_trymirrormove,
+ atk7D_setrain,
+ atk7E_setreflect,
+ atk7F_setseeded,
+ atk80_manipulatedamage,
+ atk81_trysetrest,
+ atk82_jumpifnotfirstturn,
+ atk83_nop,
+ atk84_jumpifcantmakeasleep,
+ atk85_stockpile,
+ atk86_stockpiletobasedamage,
+ atk87_stockpiletohpheal,
+ atk88_negativedamage,
+ atk89_statbuffchange,
+ atk8A_normalisebuffs,
+ atk8B_setbide,
+ atk8C_confuseifrepeatingattackends,
+ atk8D_setmultihitcounter,
+ atk8E_initmultihitstring,
+ atk8F_forcerandomswitch,
+ atk90_tryconversiontypechange,
+ atk91_givepaydaymoney,
+ atk92_setlightscreen,
+ atk93_tryKO,
+ atk94_damagetohalftargethp,
+ atk95_setsandstorm,
+ atk96_weatherdamage,
+ atk97_tryinfatuating,
+ atk98_updatestatusicon,
+ atk99_setmist,
+ atk9A_setfocusenergy,
+ atk9B_transformdataexecution,
+ atk9C_setsubstitute,
+ atk9D_mimicattackcopy,
+ atk9E_metronome,
+ atk9F_dmgtolevel,
+ atkA0_psywavedamageeffect,
+ atkA1_counterdamagecalculator,
+ atkA2_mirrorcoatdamagecalculator,
+ atkA3_disablelastusedattack,
+ atkA4_trysetencore,
+ atkA5_painsplitdmgcalc,
+ atkA6_settypetorandomresistance,
+ atkA7_setalwayshitflag,
+ atkA8_copymovepermanently,
+ atkA9_trychoosesleeptalkmove,
+ atkAA_setdestinybond,
+ atkAB_trysetdestinybondtohappen,
+ atkAC_remaininghptopower,
+ atkAD_tryspiteppreduce,
+ atkAE_healpartystatus,
+ atkAF_cursetarget,
+ atkB0_trysetspikes,
+ atkB1_setforesight,
+ atkB2_trysetperishsong,
+ atkB3_rolloutdamagecalculation,
+ atkB4_jumpifconfusedandstatmaxed,
+ atkB5_furycuttercalc,
+ atkB6_happinesstodamagecalculation,
+ atkB7_presentdamagecalculation,
+ atkB8_setsafeguard,
+ atkB9_magnitudedamagecalculation,
+ atkBA_jumpifnopursuitswitchdmg,
+ atkBB_setsunny,
+ atkBC_maxattackhalvehp,
+ atkBD_copyfoestats,
+ atkBE_rapidspinfree,
+ atkBF_setdefensecurlbit,
+ atkC0_recoverbasedonsunlight,
+ atkC1_hiddenpowercalc,
+ atkC2_selectfirstvalidtarget,
+ atkC3_trysetfutureattack,
+ atkC4_trydobeatup,
+ atkC5_setsemiinvulnerablebit,
+ atkC6_clearsemiinvulnerablebit,
+ atkC7_setminimize,
+ atkC8_sethail,
+ atkC9_jumpifattackandspecialattackcannotfall,
+ atkCA_setforcedtarget,
+ atkCB_setcharge,
+ atkCC_callterrainattack,
+ atkCD_cureifburnedparalysedorpoisoned,
+ atkCE_settorment,
+ atkCF_jumpifnodamage,
+ atkD0_settaunt,
+ atkD1_trysethelpinghand,
+ atkD2_tryswapitems,
+ atkD3_trycopyability,
+ atkD4_trywish,
+ atkD5_trysetroots,
+ atkD6_doubledamagedealtifdamaged,
+ atkD7_setyawn,
+ atkD8_setdamagetohealthdifference,
+ atkD9_scaledamagebyhealthratio,
+ atkDA_tryswapabilities,
+ atkDB_tryimprison,
+ atkDC_trysetgrudge,
+ atkDD_weightdamagecalculation,
+ atkDE_assistattackselect,
+ atkDF_trysetmagiccoat,
+ atkE0_trysetsnatch,
+ atkE1_trygetintimidatetarget,
+ atkE2_switchoutabilities,
+ atkE3_jumpifhasnohp,
+ atkE4_getsecretpowereffect,
+ atkE5_pickup,
+ atkE6_docastformchangeanimation,
+ atkE7_trycastformdatachange,
+ atkE8_settypebasedhalvers,
+ atkE9_setweatherballtype,
+ atkEA_tryrecycleitem,
+ atkEB_settypetoterrain,
+ atkEC_pursuitrelated,
+ atkED_snatchsetbattlers,
+ atkEE_removelightscreenreflect,
+ atkEF_handleballthrow,
+ atkF0_givecaughtmon,
+ atkF1_trysetcaughtmondexflags,
+ atkF2_displaydexinfo,
+ atkF3_trygivecaughtmonnick,
+ atkF4_subattackerhpbydmg,
+ atkF5_removeattackerstatus1,
+ atkF6_finishaction,
+ atkF7_finishturn,
+};
+
+struct StatFractions
+{
+ u8 dividend;
+ u8 divisor;
+};
+
+static const struct StatFractions sAccuracyStageRatios[] =
+{
+ { 33, 100 }, // -6
+ { 36, 100 }, // -5
+ { 43, 100 }, // -4
+ { 50, 100 }, // -3
+ { 60, 100 }, // -2
+ { 75, 100 }, // -1
+ { 1, 1 }, // 0
+ { 133, 100 }, // +1
+ { 166, 100 }, // +2
+ { 2, 1 }, // +3
+ { 233, 100 }, // +4
+ { 133, 50 }, // +5
+ { 3, 1 }, // +6
+};
+
+// The chance is 1/N for each stage.
+static const u16 sCriticalHitChance[] = { 16, 8, 4, 3, 2 };
+
+static const u32 sStatusFlagsForMoveEffects[] =
+{
+ 0x00000000,
+ STATUS1_SLEEP,
+ STATUS1_POISON,
+ STATUS1_BURN,
+ STATUS1_FREEZE,
+ STATUS1_PARALYSIS,
+ STATUS1_TOXIC_POISON,
+ STATUS2_CONFUSION,
+ STATUS2_FLINCHED,
+ 0x00000000,
+ STATUS2_UPROAR,
+ 0x00000000,
+ STATUS2_MULTIPLETURNS,
+ STATUS2_WRAPPED,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ STATUS2_RECHARGE,
+ 0x00000000,
+ 0x00000000,
+ STATUS2_ESCAPE_PREVENTION,
+ STATUS2_NIGHTMARE,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ STATUS2_LOCK_CONFUSE,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000
+};
+
+static const u8 *const sMoveEffectBS_Ptrs[] =
+{
+ [0] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SLEEP] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_POISON] = BattleScript_MoveEffectPoison,
+ [MOVE_EFFECT_BURN] = BattleScript_MoveEffectBurn,
+ [MOVE_EFFECT_FREEZE] = BattleScript_MoveEffectFreeze,
+ [MOVE_EFFECT_PARALYSIS] = BattleScript_MoveEffectParalysis,
+ [MOVE_EFFECT_TOXIC] = BattleScript_MoveEffectToxic,
+ [MOVE_EFFECT_CONFUSION] = BattleScript_MoveEffectConfusion,
+ [MOVE_EFFECT_FLINCH] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_TRI_ATTACK] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_UPROAR] = BattleScript_MoveEffectUproar,
+ [MOVE_EFFECT_PAYDAY] = BattleScript_MoveEffectPayDay,
+ [MOVE_EFFECT_CHARGING] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_WRAP] = BattleScript_MoveEffectWrap,
+ [MOVE_EFFECT_RECOIL_25] = BattleScript_MoveEffectRecoil,
+ [MOVE_EFFECT_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SPD_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SP_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SP_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_ACC_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_EVS_PLUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SPD_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SP_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_SP_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_ACC_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_EVS_MINUS_1] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_RECHARGE] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_RAGE] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_STEAL_ITEM] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_PREVENT_ESCAPE] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_NIGHTMARE] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_ALL_STATS_UP] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_RAPIDSPIN] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_REMOVE_PARALYSIS] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_ATK_DEF_DOWN] = BattleScript_MoveEffectSleep,
+ [MOVE_EFFECT_RECOIL_33] = BattleScript_MoveEffectRecoil,
+};
+
+// not used
+static const struct WindowTemplate sUnusedWinTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 3,
+ .width = 7,
+ .height = 15,
+ .paletteNum = 31,
+ .baseBlock = 0x3F,
+};
+
+static const u16 gUnknown_82506D0[] = INCBIN_U16("graphics/battle_interface/unk_battlebox.gbapal");
+static const u32 gUnknown_82506F0[] = INCBIN_U32("graphics/battle_interface/unk_battlebox.4bpp.lz");
+
+// not used
+static const u8 sRubyLevelUpStatBoxStats[] =
+{
+ MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK,
+ MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED
+};
+
+static const struct OamData sOamData_MonIconOnLvlUpBox =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+#define MON_ICON_LVLUP_BOX_TAG 0xD75A
+
+static const struct SpriteTemplate sSpriteTemplate_MonIconOnLvlUpBox =
+{
+ .tileTag = MON_ICON_LVLUP_BOX_TAG,
+ .paletteTag = MON_ICON_LVLUP_BOX_TAG,
+ .oam = &sOamData_MonIconOnLvlUpBox,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_MonIconOnLvlUpBox
+};
+
+static const u16 sProtectSuccessRates[] =
+{
+ USHRT_MAX,
+ USHRT_MAX / 2,
+ USHRT_MAX / 4,
+ USHRT_MAX / 8
+};
+
+#define MIMIC_FORBIDDEN_END 0xFFFE
+#define METRONOME_FORBIDDEN_END 0xFFFF
+#define ASSIST_FORBIDDEN_END 0xFFFF
+
+static const u16 sMovesForbiddenToCopy[] =
+{
+ MOVE_METRONOME,
+ MOVE_STRUGGLE,
+ MOVE_SKETCH,
+ MOVE_MIMIC,
+ MIMIC_FORBIDDEN_END,
+ MOVE_COUNTER,
+ MOVE_MIRROR_COAT,
+ MOVE_PROTECT,
+ MOVE_DETECT,
+ MOVE_ENDURE,
+ MOVE_DESTINY_BOND,
+ MOVE_SLEEP_TALK,
+ MOVE_THIEF,
+ MOVE_FOLLOW_ME,
+ MOVE_SNATCH,
+ MOVE_HELPING_HAND,
+ MOVE_COVET,
+ MOVE_TRICK,
+ MOVE_FOCUS_PUNCH,
+ METRONOME_FORBIDDEN_END
+};
+
+static const u8 sFlailHpScaleToPowerTable[] =
+{
+ 1, 200,
+ 4, 150,
+ 9, 100,
+ 16, 80,
+ 32, 40,
+ 48, 20
+};
+
+static const u16 sNaturePowerMoves[] =
+{
+ MOVE_STUN_SPORE,
+ MOVE_RAZOR_LEAF,
+ MOVE_EARTHQUAKE,
+ MOVE_HYDRO_PUMP,
+ MOVE_SURF,
+ MOVE_BUBBLE_BEAM,
+ MOVE_ROCK_SLIDE,
+ MOVE_SHADOW_BALL,
+ MOVE_SWIFT,
+ MOVE_SWIFT
+};
+
+static const u16 sWeightToDamageTable[] =
+{
+ 100, 20,
+ 250, 40,
+ 500, 60,
+ 1000, 80,
+ 2000, 100,
+ 0xFFFF, 0xFFFF
+};
+
+struct PickupItem
+{
+ u16 itemId;
+ u8 chance;
+};
+
+static const struct PickupItem sPickupItems[] =
+{
+ { ITEM_ORAN_BERRY, 15 },
+ { ITEM_CHERI_BERRY, 25 },
+ { ITEM_CHESTO_BERRY, 35 },
+ { ITEM_PECHA_BERRY, 45 },
+ { ITEM_RAWST_BERRY, 55 },
+ { ITEM_ASPEAR_BERRY, 65 },
+ { ITEM_PERSIM_BERRY, 75 },
+ { ITEM_TM10, 80 },
+ { ITEM_PP_UP, 85 },
+ { ITEM_RARE_CANDY, 90 },
+ { ITEM_NUGGET, 95 },
+ { ITEM_SPELON_BERRY, 96 },
+ { ITEM_PAMTRE_BERRY, 97 },
+ { ITEM_WATMEL_BERRY, 98 },
+ { ITEM_DURIN_BERRY, 99 },
+ { ITEM_BELUE_BERRY, 1 },
+
+};
+
+static const u8 sTerrainToType[] =
+{
+ TYPE_GRASS, // tall grass
+ TYPE_GRASS, // long grass
+ TYPE_GROUND, // sand
+ TYPE_WATER, // underwater
+ TYPE_WATER, // water
+ TYPE_WATER, // pond water
+ TYPE_ROCK, // rock
+ TYPE_ROCK, // cave
+ TYPE_NORMAL, // building
+ TYPE_NORMAL, // plain
+};
+
+static const u8 sBallCatchBonuses[] =
+{
+ 20, 15, 10, 15 // Ultra, Great, Poke, Safari
+};
+
+// not used
+static const u32 gUnknown_8250898 = 0xFF7EAE60;
+
+static void atk00_attackcanceler(void)
+{
+ s32 i;
+
+ if (gBattleOutcome)
+ {
+ gCurrentActionFuncId = B_ACTION_FINISHED;
+ return;
+ }
+ if (gBattleMons[gBattlerAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
+ {
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ gBattlescriptCurrInstr = BattleScript_MoveEnd;
+ return;
+ }
+ if (AtkCanceller_UnableToUseMove())
+ return;
+ if (AbilityBattleEffects(ABILITYEFFECT_MOVES_BLOCK, gBattlerTarget, 0, 0, 0))
+ return;
+ if (!gBattleMons[gBattlerAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & (HITMARKER_x800000 | HITMARKER_NO_ATTACKSTRING))
+ && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))
+ {
+ gBattlescriptCurrInstr = BattleScript_NoPPForMove;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ return;
+ }
+ gHitMarker &= ~(HITMARKER_x800000);
+ if (!(gHitMarker & HITMARKER_OBEYS)
+ && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))
+ {
+ i = IsMonDisobedient();
+ switch (i)
+ {
+ case 0:
+ break;
+ case 2:
+ gHitMarker |= HITMARKER_OBEYS;
+ return;
+ default:
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ return;
+ }
+ }
+ gHitMarker |= HITMARKER_OBEYS;
+ if (gProtectStructs[gBattlerTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED)
+ {
+ PressurePPLose(gBattlerAttacker, gBattlerTarget, MOVE_MAGIC_COAT);
+ gProtectStructs[gBattlerTarget].bounceMove = FALSE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MagicCoatBounce;
+ return;
+ }
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED)
+ {
+ PressurePPLose(gBattlerAttacker, gBattlerByTurnOrder[i], MOVE_SNATCH);
+ gProtectStructs[gBattlerByTurnOrder[i]].stealMove = FALSE;
+ gBattleScripting.battler = gBattlerByTurnOrder[i];
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SnatchedMove;
+ return;
+ }
+ }
+ if (gSpecialStatuses[gBattlerTarget].lightningRodRedirected)
+ {
+ gSpecialStatuses[gBattlerTarget].lightningRodRedirected = FALSE;
+ gLastUsedAbility = ABILITY_LIGHTNING_ROD;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TookAttack;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ else if (DEFENDER_IS_PROTECTED
+ && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
+ && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))))
+ {
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gLastHitByType[gBattlerTarget] = 0;
+ gBattleCommunication[6] = 1;
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void JumpIfMoveFailed(u8 adder, u16 move)
+{
+ const u8 *BS_ptr = gBattlescriptCurrInstr + adder;
+
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ {
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gLastHitByType[gBattlerTarget] = 0;
+ BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ TrySetDestinyBondToHappen();
+ if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBattlerTarget, 0, 0, move))
+ return;
+ }
+ gBattlescriptCurrInstr = BS_ptr;
+}
+
+static void atk40_jumpifaffectedbyprotect(void)
+{
+ if (DEFENDER_IS_PROTECTED)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(5, 0);
+ gBattleCommunication[6] = 1;
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static bool8 JumpIfMoveAffectedByProtect(u16 move)
+{
+ bool8 affected = FALSE;
+
+ if (DEFENDER_IS_PROTECTED)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(7, move);
+ gBattleCommunication[6] = 1;
+ affected = TRUE;
+ }
+ return affected;
+}
+
+static bool8 AccuracyCalcHelper(u16 move)
+{
+ if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
+ {
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ if (!(gHitMarker & HITMARKER_IGNORE_ON_AIR) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ gHitMarker &= ~HITMARKER_IGNORE_ON_AIR;
+ if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND;
+ if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER;
+ if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER)
+ || (gBattleMoves[move].effect == EFFECT_ALWAYS_HIT || gBattleMoves[move].effect == EFFECT_VITAL_THROW))
+ {
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void atk01_accuracycheck(void)
+{
+ u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
+
+ if ((gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE
+ && !sub_80EB2E0(1)
+ && gBattleMoves[move].power != 0
+ && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ || (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE
+ && !sub_80EB2E0(2)
+ && gBattleMoves[move].power == 0
+ && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ || (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE))
+ {
+ JumpIfMoveFailed(7, move);
+ return;
+ }
+ if (move == NO_ACC_CALC || move == NO_ACC_CALC_CHECK_LOCK_ON)
+ {
+ if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == NO_ACC_CALC_CHECK_LOCK_ON && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
+ gBattlescriptCurrInstr += 7;
+ else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else if (!JumpIfMoveAffectedByProtect(0))
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ u8 type, moveAcc, holdEffect, param;
+ s8 buff;
+ u16 calc;
+
+ if (move == MOVE_NONE)
+ move = gCurrentMove;
+ GET_MOVE_TYPE(move, type);
+ if (JumpIfMoveAffectedByProtect(move) || AccuracyCalcHelper(move))
+ return;
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
+ {
+ u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
+
+ buff = acc;
+ }
+ else
+ {
+ u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
+
+ buff = acc + 6 - gBattleMons[gBattlerTarget].statStages[STAT_EVASION];
+ }
+ if (buff < 0)
+ buff = 0;
+ if (buff > 0xC)
+ buff = 0xC;
+ moveAcc = gBattleMoves[move].accuracy;
+ // check Thunder on sunny weather
+ if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER)
+ moveAcc = 50;
+ calc = sAccuracyStageRatios[buff].dividend * moveAcc;
+ calc /= sAccuracyStageRatios[buff].divisor;
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_COMPOUND_EYES)
+ calc = (calc * 130) / 100; // 1.3 compound eyes boost
+ if (WEATHER_HAS_EFFECT && gBattleMons[gBattlerTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY)
+ calc = (calc * 80) / 100; // 1.2 sand veil loss
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_HUSTLE && IS_TYPE_PHYSICAL(type))
+ calc = (calc * 80) / 100; // 1.2 hustle loss
+ if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ {
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ }
+ gPotentialItemEffectBattler = gBattlerTarget;
+
+ if (holdEffect == HOLD_EFFECT_EVASION_UP)
+ calc = (calc * (100 - param)) / 100;
+ // final calculation
+ if ((Random() % 100 + 1) > calc)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && (gBattleMoves[move].target == MOVE_TARGET_BOTH || gBattleMoves[move].target == MOVE_TARGET_FOES_AND_ALLY))
+ gBattleCommunication[6] = 2;
+ else
+ gBattleCommunication[6] = 0;
+ CheckWonderGuardAndLevitate();
+ }
+ JumpIfMoveFailed(7, move);
+ }
+}
+
+static void atk02_attackstring(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (!(gHitMarker & (HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED)))
+ {
+ PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker);
+ gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED;
+ }
+ ++gBattlescriptCurrInstr;
+ gBattleCommunication[MSG_DISPLAY] = 0;
+ }
+}
+
+ static void atk03_ppreduce(void)
+{
+ s32 ppToDeduct = 1;
+
+ if (!gBattleControllerExecFlags)
+ {
+ if (!gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure)
+ {
+ switch (gBattleMoves[gCurrentMove].target)
+ {
+ case MOVE_TARGET_FOES_AND_ALLY:
+ ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBattlerAttacker, ABILITY_PRESSURE, 0, 0);
+ break;
+ case MOVE_TARGET_BOTH:
+ case MOVE_TARGET_OPPONENTS_FIELD:
+ ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_PRESSURE, 0, 0);
+ break;
+ default:
+ if (gBattlerAttacker != gBattlerTarget && gBattleMons[gBattlerTarget].ability == ABILITY_PRESSURE)
+ ++ppToDeduct;
+ break;
+ }
+ }
+ if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBattlerAttacker].pp[gCurrMovePos])
+ {
+ gProtectStructs[gBattlerAttacker].notFirstStrike = 1;
+
+ if (gBattleMons[gBattlerAttacker].pp[gCurrMovePos] > ppToDeduct)
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] -= ppToDeduct;
+ else
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 0;
+
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)
+ && !((gDisableStructs[gBattlerAttacker].mimickedMoves) & gBitTable[gCurrMovePos]))
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBattlerAttacker].pp[gCurrMovePos]);
+ MarkBattlerForControllerExec(gBattlerAttacker);
+ }
+ }
+ gHitMarker &= ~(HITMARKER_NO_PPDEDUCT);
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void atk04_critcalc(void)
+{
+ u8 holdEffect;
+ u16 item, critChance;
+
+ item = gBattleMons[gBattlerAttacker].item;
+ if (item == ITEM_ENIGMA_BERRY)
+ holdEffect = gEnigmaBerries[gBattlerAttacker].holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(item);
+ gPotentialItemEffectBattler = gBattlerAttacker;
+ critChance = 2 * ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL)
+ + (holdEffect == HOLD_EFFECT_SCOPE_LENS)
+ + 2 * (holdEffect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBattlerAttacker].species == SPECIES_CHANSEY)
+ + 2 * (holdEffect == HOLD_EFFECT_STICK && gBattleMons[gBattlerAttacker].species == SPECIES_FARFETCHD);
+ if (critChance >= NELEMS(sCriticalHitChance))
+ critChance = NELEMS(sCriticalHitChance) - 1;
+ if ((gBattleMons[gBattlerTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBattlerTarget].ability != ABILITY_SHELL_ARMOR)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT)
+ && !(gBattleTypeFlags & BATTLE_TYPE_OLDMAN_TUTORIAL)
+ && !(Random() % sCriticalHitChance[critChance])
+ && (!(gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) || sub_80EB2E0(1))
+ && !(gBattleTypeFlags & BATTLE_TYPE_POKEDUDE))
+ gCritMultiplier = 2;
+ else
+ gCritMultiplier = 1;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk05_damagecalc(void)
+{
+ u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)];
+
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker],
+ &gBattleMons[gBattlerTarget],
+ gCurrentMove,
+ sideStatus,
+ gDynamicBasePower,
+ gBattleStruct->dynamicMoveType,
+ gBattlerAttacker,
+ gBattlerTarget);
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleScripting.dmgMultiplier;
+ if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ gBattleMoveDamage *= 2;
+ if (gProtectStructs[gBattlerAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+ ++gBattlescriptCurrInstr;
+}
+
+void AI_CalcDmg(u8 attacker, u8 defender)
+{
+ u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(defender)];
+
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[attacker],
+ &gBattleMons[defender],
+ gCurrentMove,
+ sideStatus,
+ gDynamicBasePower,
+ gBattleStruct->dynamicMoveType,
+ attacker,
+ defender);
+ gDynamicBasePower = 0;
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleScripting.dmgMultiplier;
+ if (gStatuses3[attacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ gBattleMoveDamage *= 2;
+ if (gProtectStructs[attacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+}
+
+void ModulateDmgByType(u8 multiplier)
+{
+ gBattleMoveDamage = gBattleMoveDamage * multiplier / 10;
+ if (gBattleMoveDamage == 0 && multiplier)
+ gBattleMoveDamage = 1;
+ switch (multiplier)
+ {
+ case TYPE_MUL_NO_EFFECT:
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ gMoveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ gMoveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
+ break;
+ case TYPE_MUL_NOT_EFFECTIVE:
+ if (gBattleMoves[gCurrentMove].power && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ gMoveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
+ else
+ gMoveResultFlags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ }
+ break;
+ case TYPE_MUL_SUPER_EFFECTIVE:
+ if (gBattleMoves[gCurrentMove].power && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
+ gMoveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ else
+ gMoveResultFlags |= MOVE_RESULT_SUPER_EFFECTIVE;
+ }
+ break;
+ }
+}
+
+static void atk06_typecalc(void)
+{
+ s32 i = 0;
+ u8 moveType;
+
+ if (gCurrentMove == MOVE_STRUGGLE)
+ {
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ // check stab
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType))
+ {
+ gBattleMoveDamage = gBattleMoveDamage * 15;
+ gBattleMoveDamage = gBattleMoveDamage / 10;
+ }
+
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
+ gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gLastHitByType[gBattlerTarget] = 0;
+ gBattleCommunication[6] = moveType;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ else
+ {
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
+ break;
+ i += 3;
+ continue;
+ }
+ else if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check type1
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1)
+ ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i));
+ // check type2
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 &&
+ gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2)
+ ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i));
+ }
+ i += 3;
+ }
+ }
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2
+ && (!(gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) || ((gMoveResultFlags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
+ && gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gLastHitByType[gBattlerTarget] = 0;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
+ gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
+ ++gBattlescriptCurrInstr;
+}
+
+static void CheckWonderGuardAndLevitate(void)
+{
+ u8 flags = 0;
+ s32 i = 0;
+ u8 moveType;
+
+ if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power)
+ return;
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ gLastUsedAbility = ABILITY_LEVITATE;
+ gBattleCommunication[6] = moveType;
+ RecordAbilityBattle(gBattlerTarget, ABILITY_LEVITATE);
+ return;
+ }
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
+ break;
+ i += 3;
+ continue;
+ }
+ if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check no effect
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
+ }
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 &&
+ gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 &&
+ TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
+ }
+ // check super effective
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1 && TYPE_EFFECT_MULTIPLIER(i) == 20)
+ flags |= 1;
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
+ && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE)
+ flags |= 1;
+ // check not very effective
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1 && TYPE_EFFECT_MULTIPLIER(i) == 5)
+ flags |= 2;
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
+ && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE)
+ flags |= 2;
+ }
+ i += 3;
+ }
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2)
+ {
+ if (((flags & 2) || !(flags & 1)) && gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBattlerTarget, ABILITY_WONDER_GUARD);
+ }
+ }
+}
+
+// same as ModulateDmgByType except different arguments
+static void ModulateDmgByType2(u8 multiplier, u16 move, u8 *flags)
+{
+ gBattleMoveDamage = gBattleMoveDamage * multiplier / 10;
+ if (gBattleMoveDamage == 0 && multiplier != 0)
+ gBattleMoveDamage = 1;
+ switch (multiplier)
+ {
+ case TYPE_MUL_NO_EFFECT:
+ *flags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ *flags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ *flags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
+ break;
+ case TYPE_MUL_NOT_EFFECTIVE:
+ if (gBattleMoves[move].power && !(*flags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (*flags & MOVE_RESULT_SUPER_EFFECTIVE)
+ *flags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
+ else
+ *flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ }
+ break;
+ case TYPE_MUL_SUPER_EFFECTIVE:
+ if (gBattleMoves[move].power && !(*flags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (*flags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
+ *flags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ else
+ *flags |= MOVE_RESULT_SUPER_EFFECTIVE;
+ }
+ break;
+ }
+}
+
+u8 TypeCalc(u16 move, u8 attacker, u8 defender)
+{
+ s32 i = 0;
+ u8 flags = 0;
+ u8 moveType;
+
+ if (move == MOVE_STRUGGLE)
+ return 0;
+ moveType = gBattleMoves[move].type;
+ // check stab
+ if (IS_BATTLER_OF_TYPE(attacker, moveType))
+ {
+ gBattleMoveDamage = gBattleMoveDamage * 15;
+ gBattleMoveDamage = gBattleMoveDamage / 10;
+ }
+
+ if (gBattleMons[defender].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ flags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ }
+ else
+ {
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[defender].status2 & STATUS2_FORESIGHT)
+ break;
+ i += 3;
+ continue;
+ }
+
+ else if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check type1
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[defender].type1)
+ ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
+ // check type2
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[defender].type2 &&
+ gBattleMons[defender].type1 != gBattleMons[defender].type2)
+ ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
+ }
+ i += 3;
+ }
+ }
+ if (gBattleMons[defender].ability == ABILITY_WONDER_GUARD
+ && !(flags & MOVE_RESULT_MISSED)
+ && AttacksThisTurn(attacker, move) == 2
+ && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
+ && gBattleMoves[move].power)
+ flags |= MOVE_RESULT_MISSED;
+ return flags;
+}
+
+u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility)
+{
+ s32 i = 0;
+ u8 flags = 0;
+ u8 type1 = gBaseStats[targetSpecies].type1, type2 = gBaseStats[targetSpecies].type2;
+ u8 moveType;
+
+ if (move == MOVE_STRUGGLE)
+ return 0;
+ moveType = gBattleMoves[move].type;
+ if (targetAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ flags = MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE;
+ }
+ else
+ {
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ i += 3;
+ continue;
+ }
+ if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check type1
+ if (TYPE_EFFECT_DEF_TYPE(i) == type1)
+ ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
+ // check type2
+ if (TYPE_EFFECT_DEF_TYPE(i) == type2 && type1 != type2)
+ ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
+ }
+ i += 3;
+ }
+ }
+ if (targetAbility == ABILITY_WONDER_GUARD
+ && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
+ && gBattleMoves[move].power)
+ flags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ return flags;
+}
+
+static inline void ApplyRandomDmgMultiplier(void)
+{
+ u16 rand = Random();
+ u16 randPercent = 100 - (rand % 16);
+
+ if (gBattleMoveDamage != 0)
+ {
+ gBattleMoveDamage *= randPercent;
+ gBattleMoveDamage /= 100;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+}
+
+static void Unused_ApplyRandomDmgMultiplier(void)
+{
+ ApplyRandomDmgMultiplier();
+}
+
+static void atk07_adjustnormaldamage(void)
+{
+ u8 holdEffect, param;
+
+ ApplyRandomDmgMultiplier();
+ if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ {
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ }
+ gPotentialItemEffectBattler = gBattlerTarget;
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+ {
+ RecordItemEffectBattle(gBattlerTarget, holdEffect);
+ gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ }
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+// The same as 0x7 except it doesn't check for false swipe move effect.
+static void atk08_adjustnormaldamage2(void)
+{
+ u8 holdEffect, param;
+
+ ApplyRandomDmgMultiplier();
+ if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ {
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ }
+ gPotentialItemEffectBattler = gBattlerTarget;
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+ {
+ RecordItemEffectBattle(gBattlerTarget, holdEffect);
+ gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ }
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk09_attackanimation(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE))
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_Pausex20;
+ ++gBattleScripting.animTurn;
+ ++gBattleScripting.animTargetsHit;
+ }
+ else
+ {
+ if ((gBattleMoves[gCurrentMove].target & MOVE_TARGET_BOTH
+ || gBattleMoves[gCurrentMove].target & MOVE_TARGET_FOES_AND_ALLY
+ || gBattleMoves[gCurrentMove].target & MOVE_TARGET_DEPENDS)
+ && gBattleScripting.animTargetsHit)
+ {
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitMoveAnimation(0, gCurrentMove, gBattleScripting.animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBattlerAttacker].friendship, &gDisableStructs[gBattlerAttacker]);
+ ++gBattleScripting.animTurn;
+ ++gBattleScripting.animTargetsHit;
+ MarkBattlerForControllerExec(gBattlerAttacker);
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_Pausex20;
+ }
+ }
+ }
+}
+
+static void atk0A_waitanimation(void)
+{
+ if (!gBattleControllerExecFlags)
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk0B_healthbarupdate(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ {
+ PrepareStringBattle(STRINGID_SUBSTITUTEDAMAGED, gActiveBattler);
+ }
+ else
+ {
+ s16 healthValue;
+ s32 currDmg = gBattleMoveDamage;
+ s32 maxPossibleDmgValue = 10000; // not present in R/S, ensures that huge damage values don't change sign
+
+ if (currDmg <= maxPossibleDmgValue)
+ healthValue = currDmg;
+ else
+ healthValue = maxPossibleDmgValue;
+ BtlController_EmitHealthBarUpdate(0, healthValue);
+ MarkBattlerForControllerExec(gActiveBattler);
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleMoveDamage > 0)
+ gBattleResults.playerMonWasDamaged = TRUE;
+ }
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+static void atk0C_datahpupdate(void)
+{
+ u32 moveType;
+
+ if (!gBattleControllerExecFlags)
+ {
+ if (gBattleStruct->dynamicMoveType == 0)
+ moveType = gBattleMoves[gCurrentMove].type;
+ else if (!(gBattleStruct->dynamicMoveType & 0x40))
+ moveType = gBattleStruct->dynamicMoveType & 0x3F;
+ else
+ moveType = gBattleMoves[gCurrentMove].type;
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ {
+ if (gDisableStructs[gActiveBattler].substituteHP >= gBattleMoveDamage)
+ {
+ if (gSpecialStatuses[gActiveBattler].dmg == 0)
+ gSpecialStatuses[gActiveBattler].dmg = gBattleMoveDamage;
+ gDisableStructs[gActiveBattler].substituteHP -= gBattleMoveDamage;
+ gHpDealt = gBattleMoveDamage;
+ }
+ else
+ {
+ if (gSpecialStatuses[gActiveBattler].dmg == 0)
+ gSpecialStatuses[gActiveBattler].dmg = gDisableStructs[gActiveBattler].substituteHP;
+ gHpDealt = gDisableStructs[gActiveBattler].substituteHP;
+ gDisableStructs[gActiveBattler].substituteHP = 0;
+ }
+ // check substitute fading
+ if (gDisableStructs[gActiveBattler].substituteHP == 0)
+ {
+ gBattlescriptCurrInstr += 2;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SubstituteFade;
+ return;
+ }
+ }
+ else
+ {
+ gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE);
+ if (gBattleMoveDamage < 0) // hp goes up
+ {
+ gBattleMons[gActiveBattler].hp -= gBattleMoveDamage;
+ if (gBattleMons[gActiveBattler].hp > gBattleMons[gActiveBattler].maxHP)
+ gBattleMons[gActiveBattler].hp = gBattleMons[gActiveBattler].maxHP;
+
+ }
+ else // hp goes down
+ {
+ if (gHitMarker & HITMARKER_x20)
+ {
+ gHitMarker &= ~(HITMARKER_x20);
+ }
+ else
+ {
+ gTakenDmg[gActiveBattler] += gBattleMoveDamage;
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ gTakenDmgByBattler[gActiveBattler] = gBattlerAttacker;
+ else
+ gTakenDmgByBattler[gActiveBattler] = gBattlerTarget;
+ }
+
+ if (gBattleMons[gActiveBattler].hp > gBattleMoveDamage)
+ {
+ gBattleMons[gActiveBattler].hp -= gBattleMoveDamage;
+ gHpDealt = gBattleMoveDamage;
+ }
+ else
+ {
+ gHpDealt = gBattleMons[gActiveBattler].hp;
+ gBattleMons[gActiveBattler].hp = 0;
+ }
+ if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_x100000))
+ gSpecialStatuses[gActiveBattler].dmg = gHpDealt;
+ if (IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
+ {
+ gProtectStructs[gActiveBattler].physicalDmg = gHpDealt;
+ gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ {
+ gProtectStructs[gActiveBattler].physicalBattlerId = gBattlerAttacker;
+ gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerAttacker;
+ }
+ else
+ {
+ gProtectStructs[gActiveBattler].physicalBattlerId = gBattlerTarget;
+ gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerTarget;
+ }
+ }
+ else if (!IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000))
+ {
+ gProtectStructs[gActiveBattler].specialDmg = gHpDealt;
+ gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ {
+ gProtectStructs[gActiveBattler].specialBattlerId = gBattlerAttacker;
+ gSpecialStatuses[gActiveBattler].specialBattlerId = gBattlerAttacker;
+ }
+ else
+ {
+ gProtectStructs[gActiveBattler].specialBattlerId = gBattlerTarget;
+ gSpecialStatuses[gActiveBattler].specialBattlerId = gBattlerTarget;
+ }
+ }
+ }
+ gHitMarker &= ~(HITMARKER_x100000);
+ BtlController_EmitSetMonData(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBattler].hp);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ else
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (gSpecialStatuses[gActiveBattler].dmg == 0)
+ gSpecialStatuses[gActiveBattler].dmg = 0xFFFF;
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+static void atk0D_critmessage(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (gCritMultiplier == 2 && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker);
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void atk0E_effectivenesssound(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = gBattlerTarget;
+ if (!(gMoveResultFlags & MOVE_RESULT_MISSED))
+ {
+ switch (gMoveResultFlags & (u8)(~(MOVE_RESULT_MISSED)))
+ {
+ case MOVE_RESULT_SUPER_EFFECTIVE:
+ BtlController_EmitPlaySE(0, SE_KOUKA_H);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case MOVE_RESULT_NOT_VERY_EFFECTIVE:
+ BtlController_EmitPlaySE(0, SE_KOUKA_L);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case MOVE_RESULT_DOESNT_AFFECT_FOE:
+ case MOVE_RESULT_FAILED:
+ // no sound
+ break;
+ case MOVE_RESULT_FOE_ENDURED:
+ case MOVE_RESULT_ONE_HIT_KO:
+ case MOVE_RESULT_FOE_HUNG_ON:
+ default:
+ if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ {
+ BtlController_EmitPlaySE(0, SE_KOUKA_H);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
+ {
+ BtlController_EmitPlaySE(0, SE_KOUKA_L);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (!(gMoveResultFlags & (MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)))
+ {
+ BtlController_EmitPlaySE(0, SE_KOUKA_M);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ break;
+ }
+ }
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void atk0F_resultmessage(void)
+{
+ u32 stringId = 0;
+
+ if (!gBattleControllerExecFlags)
+ {
+ if (gMoveResultFlags & MOVE_RESULT_MISSED && (!(gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) || gBattleCommunication[6] > 2))
+ {
+ stringId = gMissStringIds[gBattleCommunication[6]];
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+ else
+ {
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ switch (gMoveResultFlags & (u8)(~(MOVE_RESULT_MISSED)))
+ {
+ case MOVE_RESULT_SUPER_EFFECTIVE:
+ stringId = STRINGID_SUPEREFFECTIVE;
+ break;
+ case MOVE_RESULT_NOT_VERY_EFFECTIVE:
+ stringId = STRINGID_NOTVERYEFFECTIVE;
+ break;
+ case MOVE_RESULT_ONE_HIT_KO:
+ stringId = STRINGID_ONEHITKO;
+ break;
+ case MOVE_RESULT_FOE_ENDURED:
+ stringId = STRINGID_PKMNENDUREDHIT;
+ break;
+ case MOVE_RESULT_FAILED:
+ stringId = STRINGID_BUTITFAILED;
+ break;
+ case MOVE_RESULT_DOESNT_AFFECT_FOE:
+ stringId = STRINGID_ITDOESNTAFFECT;
+ break;
+ case MOVE_RESULT_FOE_HUNG_ON:
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gPotentialItemEffectBattler = gBattlerTarget;
+ gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_HangedOnMsg;
+ return;
+ default:
+ if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
+ {
+ stringId = STRINGID_ITDOESNTAFFECT;
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_ONE_HIT_KO)
+ {
+ gMoveResultFlags &= ~(MOVE_RESULT_ONE_HIT_KO);
+ gMoveResultFlags &= ~(MOVE_RESULT_SUPER_EFFECTIVE);
+ gMoveResultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_OneHitKOMsg;
+ return;
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_FOE_ENDURED)
+ {
+ gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_EnduredMsg;
+ return;
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_FOE_HUNG_ON)
+ {
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gPotentialItemEffectBattler = gBattlerTarget;
+ gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_HangedOnMsg;
+ return;
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_FAILED)
+ {
+ stringId = STRINGID_BUTITFAILED;
+ }
+ else
+ {
+ gBattleCommunication[MSG_DISPLAY] = 0;
+ }
+ }
+ }
+ if (stringId)
+ PrepareStringBattle(stringId, gBattlerAttacker);
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void atk10_printstring(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ u16 var = T2_READ_16(gBattlescriptCurrInstr + 1);
+
+ PrepareStringBattle(var, gBattlerAttacker);
+ gBattlescriptCurrInstr += 3;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+}
+
+static void atk11_printselectionstring(void)
+{
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitPrintSelectionString(0, T2_READ_16(gBattlescriptCurrInstr + 1));
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 3;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+}
+
+static void atk12_waitmessage(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (!gBattleCommunication[MSG_DISPLAY])
+ {
+ gBattlescriptCurrInstr += 3;
+ }
+ else
+ {
+ u16 toWait = T2_READ_16(gBattlescriptCurrInstr + 1);
+
+ if (++gPauseCounterBattle >= toWait)
+ {
+ gPauseCounterBattle = 0;
+ gBattlescriptCurrInstr += 3;
+ gBattleCommunication[MSG_DISPLAY] = 0;
+ }
+ }
+ }
+}
+
+static void atk13_printfromtable(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ ptr += gBattleCommunication[MULTISTRING_CHOOSER];
+ PrepareStringBattle(*ptr, gBattlerAttacker);
+ gBattlescriptCurrInstr += 5;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+}
+
+static void atk14_printselectionstringfromtable(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ ptr += gBattleCommunication[MULTISTRING_CHOOSER];
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitPrintSelectionString(0, *ptr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 5;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+}
+
+u8 GetBattlerTurnOrderNum(u8 battlerId)
+{
+ s32 i;
+
+ for (i = 0; i < gBattlersCount && gBattlerByTurnOrder[i] != battlerId; ++i);
+ return i;
+}
+
+void SetMoveEffect(bool8 primary, u8 certain)
+{
+ bool32 statusChanged = FALSE;
+ u8 affectsUser = 0; // 0x40 otherwise
+ bool32 noSunCanFreeze = TRUE;
+
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] & MOVE_EFFECT_AFFECTS_USER)
+ {
+ gEffectBattler = gBattlerAttacker; // battlerId that effects get applied on
+ gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(MOVE_EFFECT_AFFECTS_USER);
+ affectsUser = MOVE_EFFECT_AFFECTS_USER;
+ gBattleScripting.battler = gBattlerTarget; // theoretically the attacker
+ }
+ else
+ {
+ gEffectBattler = gBattlerTarget;
+ gBattleScripting.battler = gBattlerAttacker;
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE
+ && gBattleCommunication[MOVE_EFFECT_BYTE] != 1
+ && GetBattlerSide(gEffectBattler) == B_SIDE_OPPONENT)
+ {
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ if (gBattleMons[gEffectBattler].ability == ABILITY_SHIELD_DUST
+ && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ && !primary
+ && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9)
+ {
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ if (gSideStatuses[GET_BATTLER_SIDE(gEffectBattler)] & SIDE_STATUS_SAFEGUARD
+ && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ && !primary
+ && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7)
+ {
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ if (gBattleMons[gEffectBattler].hp == 0
+ && gBattleCommunication[MOVE_EFFECT_BYTE] != MOVE_EFFECT_PAYDAY
+ && gBattleCommunication[MOVE_EFFECT_BYTE] != MOVE_EFFECT_STEAL_ITEM)
+ {
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ if (gBattleMons[gEffectBattler].status2 & STATUS2_SUBSTITUTE
+ && affectsUser != MOVE_EFFECT_AFFECTS_USER)
+ {
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) // status change
+ {
+ switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ {
+ case STATUS1_SLEEP:
+ // check active uproar
+ if (gBattleMons[gEffectBattler].ability != ABILITY_SOUNDPROOF)
+ for (gActiveBattler = 0;
+ gActiveBattler < gBattlersCount && !(gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR);
+ ++gActiveBattler);
+ else
+ gActiveBattler = gBattlersCount;
+ if (gBattleMons[gEffectBattler].status1)
+ break;
+ if (gActiveBattler != gBattlersCount)
+ break;
+ if (gBattleMons[gEffectBattler].ability == ABILITY_VITAL_SPIRIT)
+ break;
+ if (gBattleMons[gEffectBattler].ability == ABILITY_INSOMNIA)
+ break;
+ CancelMultiTurnMoves(gEffectBattler);
+ statusChanged = TRUE;
+ break;
+ case STATUS1_POISON:
+ if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY
+ && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ {
+ gLastUsedAbility = ABILITY_IMMUNITY;
+ RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY);
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ return;
+ }
+ if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
+ && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ return;
+ }
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON))
+ break;
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
+ break;
+ if (gBattleMons[gEffectBattler].status1)
+ break;
+ if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY)
+ break;
+ statusChanged = TRUE;
+ break;
+ case STATUS1_BURN:
+ if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL
+ && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ {
+ gLastUsedAbility = ABILITY_WATER_VEIL;
+ RecordAbilityBattle(gEffectBattler, ABILITY_WATER_VEIL);
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_BRNPrevention;
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ return;
+ }
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE)
+ && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_BRNPrevention;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ return;
+ }
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE))
+ break;
+ if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL)
+ break;
+ if (gBattleMons[gEffectBattler].status1)
+ break;
+ statusChanged = TRUE;
+ break;
+ case STATUS1_FREEZE:
+ if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY)
+ noSunCanFreeze = FALSE;
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_ICE))
+ break;
+ if (gBattleMons[gEffectBattler].status1)
+ break;
+ if (noSunCanFreeze == 0)
+ break;
+ if (gBattleMons[gEffectBattler].ability == ABILITY_MAGMA_ARMOR)
+ break;
+ CancelMultiTurnMoves(gEffectBattler);
+ statusChanged = TRUE;
+ break;
+ case STATUS1_PARALYSIS:
+ if (gBattleMons[gEffectBattler].ability == ABILITY_LIMBER)
+ {
+ if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)
+ {
+ gLastUsedAbility = ABILITY_LIMBER;
+ RecordAbilityBattle(gEffectBattler, ABILITY_LIMBER);
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_PRLZPrevention;
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ return;
+ }
+ else
+ break;
+ }
+ if (gBattleMons[gEffectBattler].status1)
+ break;
+ statusChanged = TRUE;
+ break;
+ case STATUS1_TOXIC_POISON:
+ if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ {
+ gLastUsedAbility = ABILITY_IMMUNITY;
+ RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY);
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ return;
+ }
+ if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
+ && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ return;
+ }
+ if (gBattleMons[gEffectBattler].status1)
+ break;
+ if (!IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) && !IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
+ {
+ if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY)
+ break;
+ // It's redundant, because at this point we know the status1 value is 0.
+ gBattleMons[gEffectBattler].status1 &= ~(STATUS1_TOXIC_POISON);
+ gBattleMons[gEffectBattler].status1 &= ~(STATUS1_POISON);
+ statusChanged = TRUE;
+ break;
+ }
+ else
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ }
+ break;
+ }
+ if (statusChanged == TRUE)
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS1_SLEEP)
+ gBattleMons[gEffectBattler].status1 |= ((Random() & 3) + 2);
+ else
+ gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gActiveBattler = gEffectBattler;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ // for synchronize
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_POISON
+ || gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_TOXIC
+ || gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_PARALYSIS
+ || gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN)
+ {
+ u8 *synchronizeEffect = &gBattleStruct->synchronizeMoveEffect;
+ *synchronizeEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
+ gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT;
+ }
+ }
+ else if (statusChanged == FALSE)
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ return;
+ }
+ else
+ {
+ if (gBattleMons[gEffectBattler].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ u8 side;
+
+ switch (gBattleCommunication[MOVE_EFFECT_BYTE])
+ {
+ case MOVE_EFFECT_CONFUSION:
+ if (gBattleMons[gEffectBattler].ability == ABILITY_OWN_TEMPO
+ || gBattleMons[gEffectBattler].status2 & STATUS2_CONFUSION)
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gBattleMons[gEffectBattler].status2 |= (((Random()) % 0x4)) + 2;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ }
+ break;
+ case MOVE_EFFECT_FLINCH:
+ if (gBattleMons[gEffectBattler].ability == ABILITY_INNER_FOCUS)
+ {
+ if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)
+ {
+ gLastUsedAbility = ABILITY_INNER_FOCUS;
+ RecordAbilityBattle(gEffectBattler, ABILITY_INNER_FOCUS);
+ gBattlescriptCurrInstr = BattleScript_FlinchPrevention;
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ }
+ else
+ {
+ if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber)
+ gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ ++gBattlescriptCurrInstr;
+ }
+ break;
+ case MOVE_EFFECT_UPROAR:
+ if (!(gBattleMons[gEffectBattler].status2 & STATUS2_UPROAR))
+ {
+ gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMoves[gEffectBattler] = gCurrentMove;
+ gBattleMons[gEffectBattler].status2 |= ((Random() & 3) + 2) << 4;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ break;
+ case MOVE_EFFECT_PAYDAY:
+ if (GET_BATTLER_SIDE(gBattlerAttacker) == B_SIDE_PLAYER)
+ {
+ u16 PayDay = gPaydayMoney;
+ gPaydayMoney += (gBattleMons[gBattlerAttacker].level * 5);
+ if (PayDay > gPaydayMoney)
+ gPaydayMoney = 0xFFFF;
+ }
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ break;
+ case MOVE_EFFECT_TRI_ATTACK:
+ if (gBattleMons[gEffectBattler].status1)
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3;
+ SetMoveEffect(FALSE, 0);
+ }
+ break;
+ case MOVE_EFFECT_CHARGING:
+ gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMoves[gEffectBattler] = gCurrentMove;
+ gProtectStructs[gEffectBattler].chargingTurn = 1;
+ ++gBattlescriptCurrInstr;
+ break;
+ case MOVE_EFFECT_WRAP:
+ if (gBattleMons[gEffectBattler].status2 & STATUS2_WRAPPED)
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gBattleMons[gEffectBattler].status2 |= ((Random() & 3) + 3) << 0xD;
+ *(gBattleStruct->wrappedMove + gEffectBattler * 2 + 0) = gCurrentMove;
+ *(gBattleStruct->wrappedMove + gEffectBattler * 2 + 1) = gCurrentMove >> 8;
+ *(gBattleStruct->wrappedBy + gEffectBattler) = gBattlerAttacker;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; ; ++gBattleCommunication[MULTISTRING_CHOOSER])
+ {
+ if (gBattleCommunication[MULTISTRING_CHOOSER] > 4 || gTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove)
+ break;
+ }
+ }
+ break;
+ case MOVE_EFFECT_RECOIL_25: // 25% recoil
+ gBattleMoveDamage = (gHpDealt) / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ break;
+ case MOVE_EFFECT_ATK_PLUS_1:
+ case MOVE_EFFECT_DEF_PLUS_1:
+ case MOVE_EFFECT_SPD_PLUS_1:
+ case MOVE_EFFECT_SP_ATK_PLUS_1:
+ case MOVE_EFFECT_SP_DEF_PLUS_1:
+ case MOVE_EFFECT_ACC_PLUS_1:
+ case MOVE_EFFECT_EVS_PLUS_1:
+ if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1),
+ gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_PLUS_1 + 1,
+ affectsUser,
+ NULL))
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ gBattleScripting.animArg2 = 0;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_StatUp;
+ }
+ break;
+ case MOVE_EFFECT_ATK_MINUS_1:
+ case MOVE_EFFECT_DEF_MINUS_1:
+ case MOVE_EFFECT_SPD_MINUS_1:
+ case MOVE_EFFECT_SP_ATK_MINUS_1:
+ case MOVE_EFFECT_SP_DEF_MINUS_1:
+ case MOVE_EFFECT_ACC_MINUS_1:
+ case MOVE_EFFECT_EVS_MINUS_1:
+ if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE,
+ gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_1 + 1,
+ affectsUser,
+ NULL))
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ gBattleScripting.animArg2 = 0;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_StatDown;
+ }
+ break;
+ case MOVE_EFFECT_ATK_PLUS_2:
+ case MOVE_EFFECT_DEF_PLUS_2:
+ case MOVE_EFFECT_SPD_PLUS_2:
+ case MOVE_EFFECT_SP_ATK_PLUS_2:
+ case MOVE_EFFECT_SP_DEF_PLUS_2:
+ case MOVE_EFFECT_ACC_PLUS_2:
+ case MOVE_EFFECT_EVS_PLUS_2:
+ if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2),
+ gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_PLUS_2 + 1,
+ affectsUser,
+ NULL))
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ gBattleScripting.animArg2 = 0;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_StatUp;
+ }
+ break;
+ case MOVE_EFFECT_ATK_MINUS_2:
+ case MOVE_EFFECT_DEF_MINUS_2:
+ case MOVE_EFFECT_SPD_MINUS_2:
+ case MOVE_EFFECT_SP_ATK_MINUS_2:
+ case MOVE_EFFECT_SP_DEF_MINUS_2:
+ case MOVE_EFFECT_ACC_MINUS_2:
+ case MOVE_EFFECT_EVS_MINUS_2:
+ if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE,
+ gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_2 + 1,
+ affectsUser,
+ NULL))
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ gBattleScripting.animArg2 = 0;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_StatDown;
+ }
+ break;
+ case MOVE_EFFECT_RECHARGE:
+ gBattleMons[gEffectBattler].status2 |= STATUS2_RECHARGE;
+ gDisableStructs[gEffectBattler].rechargeTimer = 2;
+ gLockedMoves[gEffectBattler] = gCurrentMove;
+ ++gBattlescriptCurrInstr;
+ break;
+ case MOVE_EFFECT_RAGE:
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_RAGE;
+ ++gBattlescriptCurrInstr;
+ break;
+ case MOVE_EFFECT_STEAL_ITEM:
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
+ {
+ ++gBattlescriptCurrInstr;
+ break;
+ }
+ side = GetBattlerSide(gBattlerAttacker);
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT
+ && !(gBattleTypeFlags &
+ (BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_BATTLE_TOWER
+ | BATTLE_TYPE_LINK))
+ && gTrainerBattleOpponent_A != 0x400)
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else if (!(gBattleTypeFlags &
+ (BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_BATTLE_TOWER
+ | BATTLE_TYPE_LINK))
+ && gTrainerBattleOpponent_A != 0x400
+ && (gWishFutureKnock.knockedOffMons[side] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]))
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else if (gBattleMons[gBattlerTarget].item
+ && gBattleMons[gBattlerTarget].ability == ABILITY_STICKY_HOLD)
+ {
+ gBattlescriptCurrInstr = BattleScript_StickyHoldActivates;
+ gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ else if (gBattleMons[gBattlerAttacker].item != ITEM_NONE
+ || gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY
+ || IS_ITEM_MAIL(gBattleMons[gBattlerTarget].item)
+ || gBattleMons[gBattlerTarget].item == ITEM_NONE)
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ u16 *changedItem = &gBattleStruct->changedItems[gBattlerAttacker];
+ gLastUsedItem = *changedItem = gBattleMons[gBattlerTarget].item;
+ gBattleMons[gBattlerTarget].item = ITEM_NONE;
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem);
+ MarkBattlerForControllerExec(gBattlerAttacker);
+ gActiveBattler = gBattlerTarget;
+ BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBattlerTarget].item);
+ MarkBattlerForControllerExec(gBattlerTarget);
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_ItemSteal;
+ *(u8 *)((u8 *)(&gBattleStruct->choicedMove[gBattlerTarget]) + 0) = 0;
+ *(u8 *)((u8 *)(&gBattleStruct->choicedMove[gBattlerTarget]) + 1) = 0;
+ }
+ }
+ break;
+ case MOVE_EFFECT_PREVENT_ESCAPE:
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION;
+ gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker;
+ ++gBattlescriptCurrInstr;
+ break;
+ case MOVE_EFFECT_NIGHTMARE:
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_NIGHTMARE;
+ ++gBattlescriptCurrInstr;
+ break;
+ case MOVE_EFFECT_ALL_STATS_UP:
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_AllStatsUp;
+ break;
+ case MOVE_EFFECT_RAPIDSPIN:
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_RapidSpinAway;
+ break;
+ case MOVE_EFFECT_REMOVE_PARALYSIS: // Smelling salts
+ if (!(gBattleMons[gBattlerTarget].status1 & STATUS1_PARALYSIS))
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gBattleMons[gBattlerTarget].status1 &= ~(STATUS1_PARALYSIS);
+ gActiveBattler = gBattlerTarget;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal;
+ }
+ break;
+ case MOVE_EFFECT_ATK_DEF_DOWN: // SuperPower
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_AtkDefDown;
+ break;
+ case MOVE_EFFECT_RECOIL_33: // Double Edge
+ gBattleMoveDamage = gHpDealt / 3;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ break;
+ case MOVE_EFFECT_THRASH:
+ if (gBattleMons[gEffectBattler].status2 & STATUS2_LOCK_CONFUSE)
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMoves[gEffectBattler] = gCurrentMove;
+ gBattleMons[gEffectBattler].status2 |= (((Random() & 1) + 2) << 0xA);
+ }
+ break;
+ case MOVE_EFFECT_KNOCK_OFF:
+ if (gBattleMons[gEffectBattler].ability == ABILITY_STICKY_HOLD)
+ {
+ if (gBattleMons[gEffectBattler].item == ITEM_NONE)
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ gLastUsedAbility = ABILITY_STICKY_HOLD;
+ gBattlescriptCurrInstr = BattleScript_StickyHoldActivates;
+ RecordAbilityBattle(gEffectBattler, ABILITY_STICKY_HOLD);
+ }
+ break;
+ }
+ if (gBattleMons[gEffectBattler].item)
+ {
+ side = GetBattlerSide(gEffectBattler);
+ gLastUsedItem = gBattleMons[gEffectBattler].item;
+ gBattleMons[gEffectBattler].item = ITEM_NONE;
+ gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[gEffectBattler]];
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_KnockedOff;
+ *(u8 *)((u8 *)(&gBattleStruct->choicedMove[gEffectBattler]) + 0) = 0;
+ *(u8 *)((u8 *)(&gBattleStruct->choicedMove[gEffectBattler]) + 1) = 0;
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ break;
+ case MOVE_EFFECT_SP_ATK_TWO_DOWN: // Overheat
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_SAtkDown2;
+ break;
+ }
+ }
+ }
+}
+
+static void atk15_seteffectwithchance(void)
+{
+ u32 percentChance;
+
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_SERENE_GRACE)
+ percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance * 2;
+ else
+ percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance;
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] & MOVE_EFFECT_CERTAIN
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(MOVE_EFFECT_CERTAIN);
+ SetMoveEffect(0, MOVE_EFFECT_CERTAIN);
+ }
+ else if (Random() % 100 <= percentChance
+ && gBattleCommunication[MOVE_EFFECT_BYTE]
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (percentChance >= 100)
+ SetMoveEffect(0, MOVE_EFFECT_CERTAIN);
+ else
+ SetMoveEffect(0, 0);
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattleScripting.multihitMoveEffect = 0;
+}
+
+static void atk16_seteffectprimary(void)
+{
+ SetMoveEffect(TRUE, 0);
+}
+
+static void atk17_seteffectsecondary(void)
+{
+ SetMoveEffect(FALSE, 0);
+}
+
+static void atk18_clearstatusfromeffect(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] <= MOVE_EFFECT_TOXIC)
+ gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+ else
+ gBattleMons[gActiveBattler].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattlescriptCurrInstr += 2;
+ gBattleScripting.multihitMoveEffect = 0;
+}
+
+static void atk19_tryfaintmon(void)
+{
+ const u8 *BS_ptr;
+
+ if (gBattlescriptCurrInstr[2] != 0)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
+ {
+ BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ BattleScriptPop();
+ gBattlescriptCurrInstr = BS_ptr;
+ gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED);
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 7;
+ }
+ }
+ else
+ {
+ u8 battlerId;
+
+ if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
+ {
+ gActiveBattler = gBattlerAttacker;
+ battlerId = gBattlerTarget;
+ BS_ptr = BattleScript_FaintAttacker;
+ }
+ else
+ {
+ gActiveBattler = gBattlerTarget;
+ battlerId = gBattlerAttacker;
+ BS_ptr = BattleScript_FaintTarget;
+ }
+ if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler])
+ && gBattleMons[gActiveBattler].hp == 0)
+ {
+ gHitMarker |= HITMARKER_FAINTED(gActiveBattler);
+ BattleScriptPush(gBattlescriptCurrInstr + 7);
+ gBattlescriptCurrInstr = BS_ptr;
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ gHitMarker |= HITMARKER_x400000;
+ if (gBattleResults.playerFaintCounter < 0xFF)
+ ++gBattleResults.playerFaintCounter;
+ AdjustFriendshipOnBattleFaint(gActiveBattler);
+ }
+ else
+ {
+ if (gBattleResults.opponentFaintCounter < 0xFF)
+ ++gBattleResults.opponentFaintCounter;
+ gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
+ *(u8 *)(&gBattleStruct->field_182) = gBattlerAttacker;
+ }
+ if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0)
+ {
+ gHitMarker &= ~(HITMARKER_DESTINYBOND);
+ BattleScriptPush(gBattlescriptCurrInstr);
+ gBattleMoveDamage = gBattleMons[battlerId].hp;
+ gBattlescriptCurrInstr = BattleScript_DestinyBondTakesLife;
+ }
+ if ((gStatuses3[gBattlerTarget] & STATUS3_GRUDGE)
+ && !(gHitMarker & HITMARKER_GRUDGE)
+ && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && gCurrentMove != MOVE_STRUGGLE)
+ {
+ u8 moveIndex = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
+
+ gBattleMons[gBattlerAttacker].pp[moveIndex] = 0;
+ BattleScriptPush(gBattlescriptCurrInstr);
+ gBattlescriptCurrInstr = BattleScript_GrudgeTakesPp;
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, moveIndex + REQUEST_PPMOVE1_BATTLE, 0, 1, &gBattleMons[gActiveBattler].pp[moveIndex]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].moves[moveIndex])
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 7;
+ }
+ }
+}
+
+static void atk1A_dofaintanimation(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ BtlController_EmitFaintAnimation(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+static void atk1B_cleareffectsonfaint(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ gBattleMons[gActiveBattler].status1 = 0;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ FaintClearSetData(); // Effects like attractions, trapping, etc.
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+static void atk1C_jumpifstatus(void)
+{
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
+
+ if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp != 0)
+ gBattlescriptCurrInstr = jumpPtr;
+ else
+ gBattlescriptCurrInstr += 10;
+}
+
+static void atk1D_jumpifstatus2(void)
+{
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
+
+ if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp != 0)
+ gBattlescriptCurrInstr = jumpPtr;
+ else
+ gBattlescriptCurrInstr += 10;
+}
+
+static void atk1E_jumpifability(void)
+{
+ u8 battlerId;
+ u8 ability = gBattlescriptCurrInstr[2];
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
+
+ if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE)
+ {
+ battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_BATTLER_SIDE, gBattlerAttacker, ability, 0, 0);
+ if (battlerId)
+ {
+ gLastUsedAbility = ability;
+ gBattlescriptCurrInstr = jumpPtr;
+ RecordAbilityBattle(battlerId - 1, gLastUsedAbility);
+ gBattleScripting.battlerWithAbility = battlerId - 1;
+ }
+ else
+ gBattlescriptCurrInstr += 7;
+ }
+ else if (gBattlescriptCurrInstr[1] == BS_NOT_ATTACKER_SIDE)
+ {
+ battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gBattlerAttacker, ability, 0, 0);
+ if (battlerId)
+ {
+ gLastUsedAbility = ability;
+ gBattlescriptCurrInstr = jumpPtr;
+ RecordAbilityBattle(battlerId - 1, gLastUsedAbility);
+ gBattleScripting.battlerWithAbility = battlerId - 1;
+ }
+ else
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (gBattleMons[battlerId].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ gBattlescriptCurrInstr = jumpPtr;
+ RecordAbilityBattle(battlerId, gLastUsedAbility);
+ gBattleScripting.battlerWithAbility = battlerId;
+ }
+ else
+ gBattlescriptCurrInstr += 7;
+ }
+}
+
+static void atk1F_jumpifsideaffecting(void)
+{
+ u8 side;
+ u16 flags;
+ const u8 *jumpPtr;
+
+ if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
+ side = GET_BATTLER_SIDE(gBattlerAttacker);
+ else
+ side = GET_BATTLER_SIDE(gBattlerTarget);
+
+ flags = T2_READ_16(gBattlescriptCurrInstr + 2);
+ jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4);
+
+ if (gSideStatuses[side] & flags)
+ gBattlescriptCurrInstr = jumpPtr;
+ else
+ gBattlescriptCurrInstr += 8;
+}
+
+static void atk20_jumpifstat(void)
+{
+ u8 ret = 0;
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ u8 value = gBattleMons[battlerId].statStages[gBattlescriptCurrInstr[3]];
+
+ switch (gBattlescriptCurrInstr[2])
+ {
+ case CMP_EQUAL:
+ if (value == gBattlescriptCurrInstr[4])
+ ++ret;
+ break;
+ case CMP_NOT_EQUAL:
+ if (value != gBattlescriptCurrInstr[4])
+ ++ret;
+ break;
+ case CMP_GREATER_THAN:
+ if (value > gBattlescriptCurrInstr[4])
+ ++ret;
+ break;
+ case CMP_LESS_THAN:
+ if (value < gBattlescriptCurrInstr[4])
+ ++ret;
+ break;
+ case CMP_COMMON_BITS:
+ if (value & gBattlescriptCurrInstr[4])
+ ++ret;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(value & gBattlescriptCurrInstr[4]))
+ ++ret;
+ break;
+ }
+ if (ret)
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ else
+ gBattlescriptCurrInstr += 9;
+}
+
+static void atk21_jumpifstatus3condition(void)
+{
+ u32 flags;
+ const u8 *jumpPtr;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7);
+ if (gBattlescriptCurrInstr[6])
+ {
+ if (gStatuses3[gActiveBattler] & flags)
+ gBattlescriptCurrInstr += 11;
+ else
+ gBattlescriptCurrInstr = jumpPtr;
+ }
+ else
+ {
+ if (gStatuses3[gActiveBattler] & flags)
+ gBattlescriptCurrInstr = jumpPtr;
+ else
+ gBattlescriptCurrInstr += 11;
+ }
+}
+
+static void atk22_jumpiftype(void)
+{
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ u8 type = gBattlescriptCurrInstr[2];
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
+
+ if (IS_BATTLER_OF_TYPE(battlerId, type))
+ gBattlescriptCurrInstr = jumpPtr;
+ else
+ gBattlescriptCurrInstr += 7;
+}
+
+static void atk23_getexp(void)
+{
+ u16 item;
+ s32 i; // also used as stringId
+ u8 holdEffect;
+ s32 sentIn;
+ s32 viaExpShare = 0;
+ u16 *exp = &gBattleStruct->expValue;
+
+ gBattlerFainted = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ sentIn = gSentPokesToOpponent[(gBattlerFainted & 2) >> 1];
+ switch (gBattleScripting.atk23_state)
+ {
+ case 0: // check if should receive exp at all
+ if (GetBattlerSide(gBattlerFainted) != B_SIDE_OPPONENT
+ || (gBattleTypeFlags &
+ (BATTLE_TYPE_LINK
+ | BATTLE_TYPE_TRAINER_TOWER
+ | BATTLE_TYPE_BATTLE_TOWER
+ | BATTLE_TYPE_SAFARI
+ | BATTLE_TYPE_EREADER_TRAINER)))
+ {
+ gBattleScripting.atk23_state = 6; // goto last case
+ }
+ else
+ {
+ ++gBattleScripting.atk23_state;
+ gBattleStruct->givenExpMons |= gBitTable[gBattlerPartyIndexes[gBattlerFainted]];
+ }
+ break;
+ case 1: // calculate experience points to redistribute
+ {
+ u16 calculatedExp;
+ s32 viaSentIn;
+
+ for (viaSentIn = 0, i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0)
+ {
+ if (gBitTable[i] & sentIn)
+ ++viaSentIn;
+ item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ if (item == ITEM_ENIGMA_BERRY)
+ holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(item);
+ if (holdEffect == HOLD_EFFECT_EXP_SHARE)
+ ++viaExpShare;
+ }
+ }
+ calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7;
+ if (viaExpShare) // at least one mon is getting exp via exp share
+ {
+ *exp = calculatedExp / 2 / viaSentIn;
+ if (*exp == 0)
+ *exp = 1;
+ gExpShareExp = calculatedExp / 2 / viaExpShare;
+ if (gExpShareExp == 0)
+ gExpShareExp = 1;
+ }
+ else
+ {
+ *exp = calculatedExp / viaSentIn;
+ if (*exp == 0)
+ *exp = 1;
+ gExpShareExp = 0;
+ }
+ ++gBattleScripting.atk23_state;
+ gBattleStruct->expGetterMonId = 0;
+ gBattleStruct->sentInPokes = sentIn;
+ }
+ // fall through
+ case 2: // set exp value to the poke in expgetter_id and print message
+ if (!gBattleControllerExecFlags)
+ {
+ item = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HELD_ITEM);
+ if (item == ITEM_ENIGMA_BERRY)
+ holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(item);
+ if (holdEffect != HOLD_EFFECT_EXP_SHARE && !(gBattleStruct->sentInPokes & 1))
+ {
+ *(&gBattleStruct->sentInPokes) >>= 1;
+ gBattleScripting.atk23_state = 5;
+ gBattleMoveDamage = 0; // used for exp
+ }
+ else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) == MAX_LEVEL)
+ {
+ *(&gBattleStruct->sentInPokes) >>= 1;
+ gBattleScripting.atk23_state = 5;
+ gBattleMoveDamage = 0; // used for exp
+ }
+ else
+ {
+ // music change in wild battle after fainting a poke
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_POKEDUDE))
+ && gBattleMons[0].hp
+ && !gBattleStruct->wildVictorySong)
+ {
+ BattleStopLowHpSound();
+ PlayBGM(BGM_FRLG_KACHI_WILD_POKEMON);
+ ++gBattleStruct->wildVictorySong;
+ }
+ if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP))
+ {
+ if (gBattleStruct->sentInPokes & 1)
+ gBattleMoveDamage = *exp;
+ else
+ gBattleMoveDamage = 0;
+ if (holdEffect == HOLD_EFFECT_EXP_SHARE)
+ gBattleMoveDamage += gExpShareExp;
+ if (holdEffect == HOLD_EFFECT_LUCKY_EGG)
+ gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
+ if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterMonId])
+ && !(gBattleTypeFlags & BATTLE_TYPE_POKEDUDE))
+ {
+ gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
+ i = STRINGID_ABOOSTED;
+ }
+ else
+ {
+ i = STRINGID_EMPTYSTRING4;
+ }
+ // get exp getter battlerId
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (!(gBattlerPartyIndexes[2] != gBattleStruct->expGetterMonId) && !(gAbsentBattlerFlags & gBitTable[2]))
+ gBattleStruct->expGetterBattlerId = 2;
+ else
+ {
+ if (!(gAbsentBattlerFlags & gBitTable[0]))
+ gBattleStruct->expGetterBattlerId = 0;
+ else
+ gBattleStruct->expGetterBattlerId = 2;
+ }
+ }
+ else
+ {
+ gBattleStruct->expGetterBattlerId = 0;
+ }
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBattlerId, gBattleStruct->expGetterMonId);
+ // buffer 'gained' or 'gained a boosted'
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, i);
+ PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 5, gBattleMoveDamage);
+ PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBattlerId);
+ MonGainEVs(&gPlayerParty[gBattleStruct->expGetterMonId], gBattleMons[gBattlerFainted].species);
+ }
+ gBattleStruct->sentInPokes >>= 1;
+ ++gBattleScripting.atk23_state;
+ }
+ }
+ break;
+ case 3: // Set stats and give exp
+ if (!gBattleControllerExecFlags)
+ {
+ gBattleBufferB[gBattleStruct->expGetterBattlerId][0] = 0;
+ if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP) && GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) != MAX_LEVEL)
+ {
+ gBattleResources->beforeLvlUp->stats[STAT_HP] = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
+ gBattleResources->beforeLvlUp->stats[STAT_ATK] = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
+ gBattleResources->beforeLvlUp->stats[STAT_DEF] = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
+ gBattleResources->beforeLvlUp->stats[STAT_SPEED] = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
+ gBattleResources->beforeLvlUp->stats[STAT_SPATK] = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
+ gBattleResources->beforeLvlUp->stats[STAT_SPDEF] = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF);
+ gActiveBattler = gBattleStruct->expGetterBattlerId;
+ BtlController_EmitExpUpdate(0, gBattleStruct->expGetterMonId, gBattleMoveDamage);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ ++gBattleScripting.atk23_state;
+ }
+ break;
+ case 4: // lvl up if necessary
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = gBattleStruct->expGetterBattlerId;
+ if (gBattleBufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBattler][1] == RET_VALUE_LEVELED_UP)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId)
+ HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattleStruct->expGetterMonId);
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL));
+ BattleScriptPushCursor();
+ gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterMonId];
+ gBattlescriptCurrInstr = BattleScript_LevelUp;
+ gBattleMoveDamage = (gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8));
+ AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterMonId], 0);
+ // update battle mon structure after level up
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId && gBattleMons[0].hp)
+ {
+ gBattleMons[0].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
+ gBattleMons[0].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP);
+ gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
+ gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
+ gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
+ // Why is this duplicated?
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
+ gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
+ gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF);
+ }
+ // What is else if?
+ if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
+ gBattleMons[2].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP);
+ gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
+ gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
+ gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
+ // Duplicated again, but this time there's no Sp Defense
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
+ gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
+ }
+ gBattleScripting.atk23_state = 5;
+ }
+ else
+ {
+ gBattleMoveDamage = 0;
+ gBattleScripting.atk23_state = 5;
+ }
+ }
+ break;
+ case 5: // looper increment
+ if (gBattleMoveDamage) // there is exp to give, goto case 3 that gives exp
+ {
+ gBattleScripting.atk23_state = 3;
+ }
+ else
+ {
+ ++gBattleStruct->expGetterMonId;
+ if (gBattleStruct->expGetterMonId <= 5)
+ gBattleScripting.atk23_state = 2; // loop again
+ else
+ gBattleScripting.atk23_state = 6; // we're done
+ }
+ break;
+ case 6: // increment instruction
+ if (!gBattleControllerExecFlags)
+ {
+ // not sure why gf clears the item and ability here
+ gBattleMons[gBattlerFainted].item = ITEM_NONE;
+ gBattleMons[gBattlerFainted].ability = ABILITY_NONE;
+ gBattlescriptCurrInstr += 2;
+ }
+ break;
+ }
+}
+
+static void atk24(void)
+{
+ u16 HP_count = 0;
+ s32 i;
+
+ if (!gBattleControllerExecFlags)
+ {
+ for (i = 0; i < PARTY_SIZE; ++i)
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ if (HP_count == 0)
+ gBattleOutcome |= B_OUTCOME_LOST;
+ for (HP_count = 0, i = 0; i < PARTY_SIZE; ++i)
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG))
+ HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP);
+ if (HP_count == 0)
+ gBattleOutcome |= B_OUTCOME_WON;
+ if (gBattleOutcome == 0 && (gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ s32 foundPlayer;
+ s32 foundOpponent;
+
+ for (foundPlayer = 0, i = 0; i < gBattlersCount; i += 2)
+ {
+ u32 *ptr = &gHitMarker;
+ u32 hitMarkerUnk = 0x10000000;
+
+ ++i;
+ --i;
+ if ((hitMarkerUnk << i) & *ptr && !gSpecialStatuses[i].flag40)
+ ++foundPlayer;
+ }
+ for (foundOpponent = 0, i = 1; i < gBattlersCount; i += 2)
+ {
+ u32 *ptr = &gHitMarker;
+ u32 hitMarkerUnk = 0x10000000;
+
+ {
+ u8 match;
+
+ ++match;
+ --match;
+ }
+ if ((hitMarkerUnk << i) & *ptr && !gSpecialStatuses[i].flag40)
+ ++foundOpponent;
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (foundOpponent + foundPlayer > 1)
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ if (foundOpponent != 0 && foundPlayer != 0)
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+}
+
+static void MoveValuesCleanUp(void)
+{
+ gMoveResultFlags = 0;
+ gBattleScripting.dmgMultiplier = 1;
+ gCritMultiplier = 1;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattleCommunication[6] = 0;
+ gHitMarker &= ~(HITMARKER_DESTINYBOND);
+ gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
+}
+
+static void atk25_movevaluescleanup(void)
+{
+ MoveValuesCleanUp();
+ gBattlescriptCurrInstr += 1;
+}
+
+static void atk26_setmultihit(void)
+{
+ gMultiHitCounter = gBattlescriptCurrInstr[1];
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk27_decrementmultihit(void)
+{
+ if (--gMultiHitCounter == 0)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+}
+
+static void atk28_goto(void)
+{
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+}
+
+static void atk29_jumpifbyte(void)
+{
+ u8 caseID = gBattlescriptCurrInstr[1];
+ const u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u8 value = gBattlescriptCurrInstr[6];
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7);
+
+ gBattlescriptCurrInstr += 11;
+
+ switch (caseID)
+ {
+ case CMP_EQUAL:
+ if (*memByte == value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NOT_EQUAL:
+ if (*memByte != value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_GREATER_THAN:
+ if (*memByte > value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_LESS_THAN:
+ if (*memByte < value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_COMMON_BITS:
+ if (*memByte & value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(*memByte & value))
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ }
+}
+
+static void atk2A_jumpifhalfword(void)
+{
+ u8 caseID = gBattlescriptCurrInstr[1];
+ const u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u16 value = T2_READ_16(gBattlescriptCurrInstr + 6);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8);
+
+ gBattlescriptCurrInstr += 12;
+ switch (caseID)
+ {
+ case CMP_EQUAL:
+ if (*memHword == value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NOT_EQUAL:
+ if (*memHword != value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_GREATER_THAN:
+ if (*memHword > value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_LESS_THAN:
+ if (*memHword < value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_COMMON_BITS:
+ if (*memHword & value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(*memHword & value))
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ }
+}
+
+static void atk2B_jumpifword(void)
+{
+ u8 caseID = gBattlescriptCurrInstr[1];
+ const u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u32 value = T1_READ_32(gBattlescriptCurrInstr + 6);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
+
+ gBattlescriptCurrInstr += 14;
+ switch (caseID)
+ {
+ case CMP_EQUAL:
+ if (*memWord == value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NOT_EQUAL:
+ if (*memWord != value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_GREATER_THAN:
+ if (*memWord > value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_LESS_THAN:
+ if (*memWord < value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_COMMON_BITS:
+ if (*memWord & value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(*memWord & value))
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ }
+}
+
+static void atk2C_jumpifarrayequal(void)
+{
+ const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ u32 size = gBattlescriptCurrInstr[9];
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
+ u8 i;
+
+ for (i = 0; i < size; ++i)
+ {
+ if (*mem1 != *mem2)
+ {
+ gBattlescriptCurrInstr += 14;
+ break;
+ }
+ ++mem1, ++mem2;
+ }
+ if (i == size)
+ gBattlescriptCurrInstr = jumpPtr;
+}
+
+static void atk2D_jumpifarraynotequal(void)
+{
+ u8 equalBytes = 0;
+ const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ u32 size = gBattlescriptCurrInstr[9];
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
+ u8 i;
+
+ for (i = 0; i < size; ++i)
+ {
+ if (*mem1 == *mem2)
+ ++equalBytes;
+ ++mem1, ++mem2;
+ }
+ if (equalBytes != size)
+ gBattlescriptCurrInstr = jumpPtr;
+ else
+ gBattlescriptCurrInstr += 14;
+}
+
+static void atk2E_setbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ *memByte = gBattlescriptCurrInstr[5];
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk2F_addbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ *memByte += gBattlescriptCurrInstr[5];
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk30_subbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ *memByte -= gBattlescriptCurrInstr[5];
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk31_copyarray(void)
+{
+ u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ s32 size = gBattlescriptCurrInstr[9];
+ s32 i;
+
+ for (i = 0; i < size; ++i)
+ {
+ dest[i] = src[i];
+ }
+ gBattlescriptCurrInstr += 10;
+}
+
+static void atk32_copyarraywithindex(void)
+{
+ u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ const u8 *index = T2_READ_PTR(gBattlescriptCurrInstr + 9);
+ s32 size = gBattlescriptCurrInstr[13];
+ s32 i;
+
+ for (i = 0; i < size; ++i)
+ {
+ dest[i] = src[i + *index];
+ }
+ gBattlescriptCurrInstr += 14;
+}
+
+static void atk33_orbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ *memByte |= gBattlescriptCurrInstr[5];
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk34_orhalfword(void)
+{
+ u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
+
+ *memHword |= val;
+ gBattlescriptCurrInstr += 7;
+}
+
+static void atk35_orword(void)
+{
+ u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
+
+ *memWord |= val;
+ gBattlescriptCurrInstr += 9;
+}
+
+static void atk36_bicbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ *memByte &= ~(gBattlescriptCurrInstr[5]);
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk37_bichalfword(void)
+{
+ u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
+
+ *memHword &= ~val;
+ gBattlescriptCurrInstr += 7;
+}
+
+static void atk38_bicword(void)
+{
+ u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
+
+ *memWord &= ~val;
+ gBattlescriptCurrInstr += 9;
+}
+
+static void atk39_pause(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ u16 value = T2_READ_16(gBattlescriptCurrInstr + 1);
+
+ if (++gPauseCounterBattle >= value)
+ {
+ gPauseCounterBattle = 0;
+ gBattlescriptCurrInstr += 3;
+ }
+ }
+}
+
+static void atk3A_waitstate(void)
+{
+ if (!gBattleControllerExecFlags)
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk3B_healthbar_update(void)
+{
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ gActiveBattler = gBattlerTarget;
+ else
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitHealthBarUpdate(0, gBattleMoveDamage);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk3C_return(void)
+{
+ BattleScriptPop();
+}
+
+static void atk3D_end(void)
+{
+ gMoveResultFlags = 0;
+ gActiveBattler = 0;
+ gCurrentActionFuncId = B_ACTION_TRY_FINISH;
+}
+
+static void atk3E_end2(void)
+{
+ gActiveBattler = 0;
+ gCurrentActionFuncId = B_ACTION_TRY_FINISH;
+}
+
+static void atk3F_end3(void) // pops the main function stack
+{
+ BattleScriptPop();
+ if (gBattleResources->battleCallbackStack->size != 0)
+ gBattleResources->battleCallbackStack->size--;
+ gBattleMainFunc = gBattleResources->battleCallbackStack->function[gBattleResources->battleCallbackStack->size];
+}
+
+static void atk41_call(void)
+{
+ BattleScriptPush(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+}
+
+static void atk42_jumpiftype2(void)
+{
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+
+ if (gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type1 || gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type2)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+}
+
+static void atk43_jumpifabilitypresent(void)
+{
+ if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, gBattlescriptCurrInstr[1], 0, 0))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk44_endselectionscript(void)
+{
+ *(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE;
+}
+
+static void atk45_playanimation(void)
+{
+ const u16 *argumentPtr;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
+ if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE
+ || gBattlescriptCurrInstr[2] == B_ANIM_SNATCH_MOVE
+ || gBattlescriptCurrInstr[2] == B_ANIM_SUBSTITUTE_FADE
+ || gBattlescriptCurrInstr[2] == B_ANIM_x19)
+ {
+ BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 7;
+ }
+ else if (gHitMarker & HITMARKER_NO_ANIMATIONS)
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 7);
+ gBattlescriptCurrInstr = BattleScript_Pausex20;
+ }
+ else if (gBattlescriptCurrInstr[2] == B_ANIM_RAIN_CONTINUES
+ || gBattlescriptCurrInstr[2] == B_ANIM_SUN_CONTINUES
+ || gBattlescriptCurrInstr[2] == B_ANIM_SANDSTORM_CONTINUES
+ || gBattlescriptCurrInstr[2] == B_ANIM_HAIL_CONTINUES)
+ {
+ BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 7;
+ }
+ else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
+ {
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 7;
+ }
+}
+
+static void atk46_playanimation2(void) // animation Id is stored in the first pointer
+{
+ const u16 *argumentPtr;
+ const u8 *animationIdPtr;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
+ if (*animationIdPtr == B_ANIM_STATS_CHANGE
+ || *animationIdPtr == B_ANIM_SNATCH_MOVE
+ || *animationIdPtr == B_ANIM_SUBSTITUTE_FADE)
+ {
+ BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 10;
+ }
+ else if (gHitMarker & HITMARKER_NO_ANIMATIONS)
+ {
+ gBattlescriptCurrInstr += 10;
+ }
+ else if (*animationIdPtr == B_ANIM_RAIN_CONTINUES
+ || *animationIdPtr == B_ANIM_SUN_CONTINUES
+ || *animationIdPtr == B_ANIM_SANDSTORM_CONTINUES
+ || *animationIdPtr == B_ANIM_HAIL_CONTINUES)
+ {
+ BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 10;
+ }
+ else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
+ {
+ gBattlescriptCurrInstr += 10;
+ }
+ else
+ {
+ BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 10;
+ }
+}
+
+static void atk47_setgraphicalstatchangevalues(void)
+{
+ u8 value = 0;
+
+ switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger))
+ {
+ case SET_STAT_BUFF_VALUE(1): // +1
+ value = STAT_ANIM_PLUS1;
+ break;
+ case SET_STAT_BUFF_VALUE(2): // +2
+ value = STAT_ANIM_PLUS2;
+ break;
+ case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1
+ value = STAT_ANIM_MINUS1;
+ break;
+ case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2
+ value = STAT_ANIM_MINUS2;
+ break;
+ }
+ gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1;
+ gBattleScripting.animArg2 = 0;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk48_playstatchangeanimation(void)
+{
+ u32 currStat = 0;
+ u16 statAnimId = 0;
+ s32 changeableStatsCount = 0;
+ u8 statsToCheck = 0;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ statsToCheck = gBattlescriptCurrInstr[2];
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_NEGATIVE) // goes down
+ {
+ s16 startingStatAnimId;
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ startingStatAnimId = STAT_ANIM_MINUS2 - 1;
+ else
+ startingStatAnimId = STAT_ANIM_MINUS1 - 1;
+
+ while (statsToCheck != 0)
+ {
+ if (statsToCheck & 1)
+ {
+ if (gBattlescriptCurrInstr[3] & ATK48_DONT_CHECK_LOWER)
+ {
+ if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
+ {
+ statAnimId = startingStatAnimId + currStat;
+ ++changeableStatsCount;
+ }
+ }
+ else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
+ && gBattleMons[gActiveBattler].ability != ABILITY_CLEAR_BODY
+ && gBattleMons[gActiveBattler].ability != ABILITY_WHITE_SMOKE
+ && !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_ACC)
+ && !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK))
+ {
+ if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
+ {
+ statAnimId = startingStatAnimId + currStat;
+ ++changeableStatsCount;
+ }
+ }
+ }
+ statsToCheck >>= 1;
+ ++currStat;
+ }
+
+ if (changeableStatsCount > 1) // more than one stat, so the color is gray
+ {
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ statAnimId = STAT_ANIM_MULTIPLE_MINUS2;
+ else
+ statAnimId = STAT_ANIM_MULTIPLE_MINUS1;
+ }
+ }
+ else // goes up
+ {
+ s16 startingStatAnimId;
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ startingStatAnimId = STAT_ANIM_PLUS2 - 1;
+ else
+ startingStatAnimId = STAT_ANIM_PLUS1 - 1;
+
+ while (statsToCheck != 0)
+ {
+ if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < 0xC)
+ {
+ statAnimId = startingStatAnimId + currStat;
+ ++changeableStatsCount;
+ }
+ statsToCheck >>= 1;
+ ++currStat;
+ }
+ if (changeableStatsCount > 1) // more than one stat, so the color is gray
+ {
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ statAnimId = STAT_ANIM_MULTIPLE_PLUS2;
+ else
+ statAnimId = STAT_ANIM_MULTIPLE_PLUS1;
+ }
+ }
+ if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount < 2)
+ {
+ gBattlescriptCurrInstr += 4;
+ }
+ else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed)
+ {
+ BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId);
+ MarkBattlerForControllerExec(gActiveBattler);
+ if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount > 1)
+ gBattleScripting.statAnimPlayed = TRUE;
+ gBattlescriptCurrInstr += 4;
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 4;
+ }
+}
+
+static void atk49_moveend(void)
+{
+ s32 i;
+ bool32 effect = FALSE;
+ u8 moveType = 0;
+ u8 holdEffectAtk = 0;
+ u16 *choicedMoveAtk = NULL;
+ u8 arg1, arg2;
+ u16 originallyUsedMove;
+
+ if (gChosenMove == 0xFFFF)
+ originallyUsedMove = MOVE_NONE;
+ else
+ originallyUsedMove = gChosenMove;
+ arg1 = gBattlescriptCurrInstr[1];
+ arg2 = gBattlescriptCurrInstr[2];
+ if (gBattleMons[gBattlerAttacker].item == ITEM_ENIGMA_BERRY)
+ holdEffectAtk = gEnigmaBerries[gBattlerAttacker].holdEffect;
+ else
+ holdEffectAtk = ItemId_GetHoldEffect(gBattleMons[gBattlerAttacker].item);
+ choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker];
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ do
+ {
+ switch (gBattleScripting.atk49_state)
+ {
+ case ATK49_RAGE: // rage check
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE
+ && gBattleMons[gBattlerTarget].hp != 0
+ && gBattlerAttacker != gBattlerTarget
+ && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && gBattleMoves[gCurrentMove].power
+ && gBattleMons[gBattlerTarget].statStages[STAT_ATK] <= 0xB)
+ {
+ ++gBattleMons[gBattlerTarget].statStages[STAT_ATK];
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_RageIsBuilding;
+ effect = TRUE;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_DEFROST: // defrosting check
+ if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE
+ && gBattleMons[gBattlerTarget].hp != 0
+ && gBattlerAttacker != gBattlerTarget
+ && gSpecialStatuses[gBattlerTarget].specialDmg
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && moveType == TYPE_FIRE)
+ {
+ gBattleMons[gBattlerTarget].status1 &= ~(STATUS1_FREEZE);
+ gActiveBattler = gBattlerTarget;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerTarget].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove;
+ effect = TRUE;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_SYNCHRONIZE_TARGET: // target synchronize
+ if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBattlerTarget, 0, 0, 0))
+ effect = TRUE;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_MOVE_END_ABILITIES: // Such as abilities activating on contact(Poison Spore, Rough Skin, etc.).
+ if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerTarget, 0, 0, 0))
+ effect = TRUE;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_STATUS_IMMUNITY_ABILITIES: // status immunities
+ if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
+ effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers
+ else
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_SYNCHRONIZE_ATTACKER: // attacker synchronize
+ if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBattlerAttacker, 0, 0, 0))
+ effect = TRUE;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_CHOICE_MOVE: // update choice band move
+ if (gHitMarker & HITMARKER_OBEYS
+ && holdEffectAtk == HOLD_EFFECT_CHOICE_BAND
+ && gChosenMove != MOVE_STRUGGLE
+ && (*choicedMoveAtk == 0 || *choicedMoveAtk == 0xFFFF))
+ {
+ if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED))
+ {
+ ++gBattleScripting.atk49_state;
+ break;
+ }
+ *choicedMoveAtk = gChosenMove;
+ }
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk)
+ break;
+ }
+ if (i == MAX_MON_MOVES)
+ *choicedMoveAtk = 0;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_CHANGED_ITEMS: // changed held items
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ u16 *changedItem = &gBattleStruct->changedItems[i];
+
+ if (*changedItem != 0)
+ {
+ gBattleMons[i].item = *changedItem;
+ *changedItem = 0;
+ }
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_ITEM_EFFECTS_ALL: // item effects for all battlers
+ if (ItemBattleEffects(ITEMEFFECT_MOVE_END, 0, FALSE))
+ effect = TRUE;
+ else
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_KINGSROCK_SHELLBELL: // king's rock and shell bell
+ if (ItemBattleEffects(ITEMEFFECT_KINGSROCK_SHELLBELL, 0, FALSE))
+ effect = TRUE;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_ATTACKER_INVISIBLE: // make attacker sprite invisible
+ if (gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)
+ && gHitMarker & HITMARKER_NO_ANIMATIONS)
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSpriteInvisibility(0, TRUE);
+ MarkBattlerForControllerExec(gActiveBattler);
+ ++gBattleScripting.atk49_state;
+ return;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_ATTACKER_VISIBLE: // make attacker sprite visible
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT
+ || !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE))
+ || WasUnableToUseMove(gBattlerAttacker))
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSpriteInvisibility(0, FALSE);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gStatuses3[gBattlerAttacker] &= ~(STATUS3_SEMI_INVULNERABLE);
+ gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = 1;
+ ++gBattleScripting.atk49_state;
+ return;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_TARGET_VISIBLE: // make target sprite visible
+ if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite
+ && gBattlerTarget < gBattlersCount
+ && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
+ {
+ gActiveBattler = gBattlerTarget;
+ BtlController_EmitSpriteInvisibility(0, FALSE);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gStatuses3[gBattlerTarget] &= ~(STATUS3_SEMI_INVULNERABLE);
+ ++gBattleScripting.atk49_state;
+ return;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_SUBSTITUTE: // update substitute
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gDisableStructs[i].substituteHP == 0)
+ gBattleMons[i].status2 &= ~(STATUS2_SUBSTITUTE);
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_UPDATE_LAST_MOVES:
+ if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
+ {
+ gActiveBattler = gBattlerAttacker;
+ gBattlerAttacker = gBattlerTarget;
+ gBattlerTarget = gActiveBattler;
+ gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET);
+ }
+ if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED)
+ {
+ gLastPrintedMoves[gBattlerAttacker] = gChosenMove;
+ }
+ if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
+ && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker])
+ && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS)
+ {
+ if (gHitMarker & HITMARKER_OBEYS)
+ {
+ gLastMoves[gBattlerAttacker] = gChosenMove;
+ gLastResultingMoves[gBattlerAttacker] = gCurrentMove;
+ }
+ else
+ {
+ gLastMoves[gBattlerAttacker] = 0xFFFF;
+ gLastResultingMoves[gBattlerAttacker] = 0xFFFF;
+ }
+
+ if (!(gHitMarker & HITMARKER_FAINTED(gBattlerTarget)))
+ gLastHitBy[gBattlerTarget] = gBattlerAttacker;
+
+ if (gHitMarker & HITMARKER_OBEYS && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (gChosenMove == 0xFFFF)
+ {
+ gLastLandedMoves[gBattlerTarget] = gChosenMove;
+ }
+ else
+ {
+ gLastLandedMoves[gBattlerTarget] = gCurrentMove;
+ GET_MOVE_TYPE(gCurrentMove, gLastHitByType[gBattlerTarget]);
+ }
+ }
+ else
+ {
+ gLastLandedMoves[gBattlerTarget] = 0xFFFF;
+ }
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_MIRROR_MOVE: // mirror move
+ if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
+ && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker])
+ && gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED
+ && gHitMarker & HITMARKER_OBEYS
+ && gBattlerAttacker != gBattlerTarget
+ && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ u8 target, attacker;
+
+ *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 0) = gChosenMove;
+ *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 1) = gChosenMove >> 8;
+ target = gBattlerTarget;
+ attacker = gBattlerAttacker;
+ *(attacker * 2 + target * 8 + (gBattleStruct->lastTakenMoveFrom) + 0) = gChosenMove;
+ target = gBattlerTarget;
+ attacker = gBattlerAttacker;
+ *(attacker * 2 + target * 8 + (gBattleStruct->lastTakenMoveFrom) + 1) = gChosenMove >> 8;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_NEXT_TARGET: // For moves hitting two opposing Pokemon.
+ if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)
+ && gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !gProtectStructs[gBattlerAttacker].chargingTurn
+ && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH
+ && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
+ {
+ u8 battlerId = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget)));
+ if (gBattleMons[battlerId].hp != 0)
+ {
+ gBattlerTarget = battlerId;
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ gBattleScripting.atk49_state = 0;
+ MoveValuesCleanUp();
+ BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
+ gBattlescriptCurrInstr = BattleScript_FlushMessageBox;
+ return;
+ }
+ else
+ {
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ }
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_COUNT:
+ break;
+ }
+ if (arg1 == 1 && effect == FALSE)
+ gBattleScripting.atk49_state = ATK49_COUNT;
+ if (arg1 == 2 && arg2 == gBattleScripting.atk49_state)
+ gBattleScripting.atk49_state = ATK49_COUNT;
+ }
+ while (gBattleScripting.atk49_state != ATK49_COUNT && effect == FALSE);
+ if (gBattleScripting.atk49_state == ATK49_COUNT && effect == FALSE)
+ gBattlescriptCurrInstr += 3;
+}
+
+static void atk4A_typecalc2(void)
+{
+ u8 flags = 0;
+ s32 i = 0;
+ u8 moveType = gBattleMoves[gCurrentMove].type;
+
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
+ gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gBattleCommunication[6] = moveType;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ else
+ {
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
+ {
+ break;
+ }
+ else
+ {
+ i += 3;
+ continue;
+ }
+ }
+ if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check type1
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1)
+ {
+ if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ break;
+ }
+ if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE)
+ {
+ flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ }
+ if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE)
+ {
+ flags |= MOVE_RESULT_SUPER_EFFECTIVE;
+ }
+ }
+ // check type2
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2)
+ {
+ if (gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ break;
+ }
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
+ && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE)
+ {
+ flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ }
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
+ && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE)
+ {
+ flags |= MOVE_RESULT_SUPER_EFFECTIVE;
+ }
+ }
+ }
+ i += 3;
+ }
+ }
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD
+ && !(flags & MOVE_RESULT_NO_EFFECT)
+ && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2
+ && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
+ && gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
+ gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk4B_returnatktoball(void)
+{
+ gActiveBattler = gBattlerAttacker;
+ if (!(gHitMarker & HITMARKER_FAINTED(gActiveBattler)))
+ {
+ BtlController_EmitReturnMonToBall(0, 0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk4C_getswitchedmondata(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ gBattlerPartyIndexes[gActiveBattler] = *(gBattleStruct->monToSwitchIntoId + gActiveBattler);
+ BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+static void atk4D_switchindataupdate(void)
+{
+ struct BattlePokemon oldData;
+ s32 i;
+ u8 *monData;
+
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ oldData = gBattleMons[gActiveBattler];
+ monData = (u8 *)(&gBattleMons[gActiveBattler]);
+ for (i = 0; i < sizeof(struct BattlePokemon); ++i)
+ {
+ monData[i] = gBattleBufferB[gActiveBattler][4 + i];
+ }
+ gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1;
+ gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2;
+ gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum);
+ // check knocked off item
+ i = GetBattlerSide(gActiveBattler);
+ if (gWishFutureKnock.knockedOffMons[i] & gBitTable[gBattlerPartyIndexes[gActiveBattler]])
+ gBattleMons[gActiveBattler].item = 0;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS)
+ {
+ for (i = 0; i < NUM_BATTLE_STATS; ++i)
+ {
+ gBattleMons[gActiveBattler].statStages[i] = oldData.statStages[i];
+ }
+ gBattleMons[gActiveBattler].status2 = oldData.status2;
+ }
+ SwitchInClearSetData();
+ gBattleScripting.battler = gActiveBattler;
+ PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]);
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+static void atk4E_switchinanim(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT
+ && !(gBattleTypeFlags &
+ (BATTLE_TYPE_LINK
+ | BATTLE_TYPE_LEGENDARY
+ | BATTLE_TYPE_OLDMAN_TUTORIAL
+ | BATTLE_TYPE_POKEDUDE
+ | BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_GHOST)))
+ HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality);
+ gAbsentBattlerFlags &= ~(gBitTable[gActiveBattler]);
+ BtlController_EmitSwitchInAnim(0, gBattlerPartyIndexes[gActiveBattler], gBattlescriptCurrInstr[2]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 3;
+ }
+}
+
+static void atk4F_jumpifcantswitch(void)
+{
+ s32 i;
+ s32 lastMonId;
+ struct Pokemon *party;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(ATK4F_DONT_CHECK_STATUSES));
+ if (!(gBattlescriptCurrInstr[1] & ATK4F_DONT_CHECK_STATUSES)
+ && ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
+ || (gStatuses3[gActiveBattler] & STATUS3_ROOTED)))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ party = gEnemyParty;
+ else
+ party = gPlayerParty;
+
+ i = 0;
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
+ i = 3;
+ for (lastMonId = i + 3; i < lastMonId; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && gBattlerPartyIndexes[gActiveBattler] != i)
+ break;
+ }
+ if (i == lastMonId)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+ }
+ else
+ {
+ u8 battlerIn1, battlerIn2;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ {
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ else
+ battlerIn2 = battlerIn1;
+ party = gEnemyParty;
+ }
+ else
+ {
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ else
+ battlerIn2 = battlerIn1;
+ party = gPlayerParty;
+ }
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && i != gBattlerPartyIndexes[battlerIn1]
+ && i != gBattlerPartyIndexes[battlerIn2])
+ break;
+ }
+ if (i == 6)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+ }
+}
+
+static void sub_8024398(u8 arg0)
+{
+ *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
+ BtlController_EmitChoosePokemon(0, PARTY_MUST_CHOOSE_MON, arg0, 0, gBattleStruct->field_60[gActiveBattler]);
+ MarkBattlerForControllerExec(gActiveBattler);
+}
+
+static void atk50_openpartyscreen(void)
+{
+ u32 flags;
+ u8 hitmarkerFaintBits;
+ u8 battlerId;
+ const u8 *jumpPtr;
+
+ battlerId = 0;
+ flags = 0;
+ jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ if (gBattlescriptCurrInstr[1] == 5)
+ {
+ if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE)
+ {
+ for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler)
+ {
+ if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
+ {
+ if (HasNoMonsToSwitch(gActiveBattler, 6, 6))
+ {
+ gAbsentBattlerFlags |= gBitTable[gActiveBattler];
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (!gSpecialStatuses[gActiveBattler].flag40)
+ {
+ sub_8024398(6);
+ gSpecialStatuses[gActiveBattler].flag40 = 1;
+ }
+ }
+ else
+ {
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ u8 flag40_0, flag40_1, flag40_2, flag40_3;
+
+ hitmarkerFaintBits = gHitMarker >> 0x1C;
+ if (gBitTable[0] & hitmarkerFaintBits)
+ {
+ gActiveBattler = 0;
+ if (HasNoMonsToSwitch(0, 6, 6))
+ {
+ gAbsentBattlerFlags |= gBitTable[gActiveBattler];
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
+ BtlController_EmitCmd42(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (!gSpecialStatuses[gActiveBattler].flag40)
+ {
+ sub_8024398(gBattleStruct->monToSwitchIntoId[2]);
+ gSpecialStatuses[gActiveBattler].flag40 = 1;
+ }
+ else
+ {
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ flags |= 1;
+ }
+ }
+ if (gBitTable[2] & hitmarkerFaintBits && !(gBitTable[0] & hitmarkerFaintBits))
+ {
+ gActiveBattler = 2;
+ if (HasNoMonsToSwitch(2, 6, 6))
+ {
+ gAbsentBattlerFlags |= gBitTable[gActiveBattler];
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
+ BtlController_EmitCmd42(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (!gSpecialStatuses[gActiveBattler].flag40)
+ {
+ sub_8024398(gBattleStruct->monToSwitchIntoId[0]);
+ gSpecialStatuses[gActiveBattler].flag40 = 1;
+ }
+ else if (!(flags & 1))
+ {
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ if (gBitTable[1] & hitmarkerFaintBits)
+ {
+ gActiveBattler = 1;
+ if (HasNoMonsToSwitch(1, 6, 6))
+ {
+ gAbsentBattlerFlags |= gBitTable[gActiveBattler];
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
+ BtlController_EmitCmd42(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (!gSpecialStatuses[gActiveBattler].flag40)
+ {
+ sub_8024398(gBattleStruct->monToSwitchIntoId[3]);
+ gSpecialStatuses[gActiveBattler].flag40 = 1;
+ }
+ else
+ {
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ flags |= 2;
+ }
+ }
+ if (gBitTable[3] & hitmarkerFaintBits && !(gBitTable[1] & hitmarkerFaintBits))
+ {
+ gActiveBattler = 3;
+ if (HasNoMonsToSwitch(3, 6, 6))
+ {
+ gAbsentBattlerFlags |= gBitTable[gActiveBattler];
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
+ BtlController_EmitCmd42(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (!gSpecialStatuses[gActiveBattler].flag40)
+ {
+ sub_8024398(gBattleStruct->monToSwitchIntoId[1]);
+ gSpecialStatuses[gActiveBattler].flag40 = 1;
+ }
+ else if (!(flags & 2))
+ {
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ flag40_0 = gSpecialStatuses[0].flag40;
+ if (!flag40_0)
+ {
+ flag40_2 = gSpecialStatuses[2].flag40;
+ if (!flag40_2 && hitmarkerFaintBits != 0)
+ {
+ if (gAbsentBattlerFlags & gBitTable[0])
+ gActiveBattler = 2;
+ else
+ gActiveBattler = 0;
+
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+
+ }
+ flag40_1 = gSpecialStatuses[1].flag40;
+ if (!flag40_1)
+ {
+ flag40_3 = gSpecialStatuses[3].flag40;
+ if (!flag40_3 && hitmarkerFaintBits != 0)
+ {
+ if (gAbsentBattlerFlags & gBitTable[1])
+ gActiveBattler = 3;
+ else
+ gActiveBattler = 1;
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ }
+ gBattlescriptCurrInstr += 6;
+ }
+ else if (gBattlescriptCurrInstr[1] == 6)
+ {
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ hitmarkerFaintBits = gHitMarker >> 0x1C;
+ if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits)
+ {
+ gActiveBattler = 2;
+ if (HasNoMonsToSwitch(2, gBattleBufferB[0][1], 6))
+ {
+ gAbsentBattlerFlags |= gBitTable[gActiveBattler];
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
+ BtlController_EmitCmd42(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (!gSpecialStatuses[gActiveBattler].flag40)
+ {
+ sub_8024398(gBattleStruct->monToSwitchIntoId[0]);
+ gSpecialStatuses[gActiveBattler].flag40 = 1;
+ }
+ }
+ if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1])
+ {
+ gActiveBattler = 3;
+ if (HasNoMonsToSwitch(3, gBattleBufferB[1][1], 6))
+ {
+ gAbsentBattlerFlags |= gBitTable[gActiveBattler];
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
+ BtlController_EmitCmd42(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (!gSpecialStatuses[gActiveBattler].flag40)
+ {
+ sub_8024398(gBattleStruct->monToSwitchIntoId[1]);
+ gSpecialStatuses[gActiveBattler].flag40 = 1;
+ }
+ }
+ gBattlescriptCurrInstr += 6;
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 6;
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 6;
+ }
+
+ hitmarkerFaintBits = gHitMarker >> 0x1C;
+
+ gBattlerFainted = 0;
+ while (1)
+ {
+ if (gBitTable[gBattlerFainted] & hitmarkerFaintBits)
+ break;
+ if (gBattlerFainted >= gBattlersCount)
+ break;
+ ++gBattlerFainted;
+ }
+
+ if (gBattlerFainted == gBattlersCount)
+ gBattlescriptCurrInstr = jumpPtr;
+ }
+ else
+ {
+ if (gBattlescriptCurrInstr[1] & 0x80)
+ hitmarkerFaintBits = PARTY_CHOOSE_MON; // Used here as the caseId for the EmitChoose function.
+ else
+ hitmarkerFaintBits = PARTY_MUST_CHOOSE_MON;
+ battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(0x80));
+ if (gSpecialStatuses[battlerId].flag40)
+ {
+ gBattlescriptCurrInstr += 6;
+ }
+ else if (HasNoMonsToSwitch(battlerId, 6, 6))
+ {
+ gActiveBattler = battlerId;
+ gAbsentBattlerFlags |= gBitTable[gActiveBattler];
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
+ gBattlescriptCurrInstr = jumpPtr;
+ }
+ else
+ {
+ gActiveBattler = battlerId;
+ *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
+ BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), 0, gBattleStruct->field_60[gActiveBattler]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 6;
+ if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT && gBattleResults.playerSwitchesCounter < 0xFF)
+ ++gBattleResults.playerSwitchesCounter;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler)
+ {
+ if (gActiveBattler != battlerId)
+ {
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ }
+ else
+ {
+ gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(battlerId) ^ BIT_SIDE);
+ if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
+ gActiveBattler ^= BIT_FLANK;
+ BtlController_EmitLinkStandbyMsg(0, 2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ }
+}
+
+static void atk51_switchhandleorder(void)
+{
+ s32 i;
+
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ switch (gBattlescriptCurrInstr[2])
+ {
+ case 0:
+ for (i = 0; i < gBattlersCount; ++i)
+ if (gBattleBufferB[i][0] == 0x22)
+ *(gBattleStruct->monToSwitchIntoId + i) = gBattleBufferB[i][1];
+ break;
+ case 1:
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ sub_8013F6C(gActiveBattler);
+ break;
+ case 2:
+ gBattleCommunication[0] = gBattleBufferB[gActiveBattler][1];
+ *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1];
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= 0xF;
+ *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0);
+ *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 1) = gBattleBufferB[gActiveBattler][3];
+ *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= (0xF0);
+ *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4;
+ *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 2) = gBattleBufferB[gActiveBattler][3];
+ }
+ else
+ {
+ sub_8013F6C(gActiveBattler);
+ }
+ PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species)
+ PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, gActiveBattler, gBattleBufferB[gActiveBattler][1])
+ break;
+ }
+ gBattlescriptCurrInstr += 3;
+ }
+}
+
+static void atk52_switchineffects(void)
+{
+ s32 i;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ sub_80174B8(gActiveBattler);
+ gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
+ gSpecialStatuses[gActiveBattler].flag40 = 0;
+ if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED)
+ && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES)
+ && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
+ && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE)
+ {
+ u8 spikesDmg;
+
+ gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_SPIKES_DAMAGED;
+ spikesDmg = (5 - gSideTimers[GetBattlerSide(gActiveBattler)].spikesAmount) * 2;
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / (spikesDmg);
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleScripting.battler = gActiveBattler;
+ BattleScriptPushCursor();
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ gBattlescriptCurrInstr = BattleScript_SpikesOnTarget;
+ else if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
+ gBattlescriptCurrInstr = BattleScript_SpikesOnAttacker;
+ else
+ gBattlescriptCurrInstr = BattleScript_SpikesOnFaintedBattler;
+ }
+ else
+ {
+ if (gBattleMons[gActiveBattler].ability == ABILITY_TRUANT)
+ gDisableStructs[gActiveBattler].truantCounter = 1;
+ if (!AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0)
+ && !ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE))
+ {
+ gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED);
+
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattlerByTurnOrder[i] == gActiveBattler)
+ gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER;
+ }
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ u16 *hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(i)];
+ *hpOnSwitchout = gBattleMons[i].hp;
+ }
+
+ if (gBattlescriptCurrInstr[1] == 5)
+ {
+ u32 hitmarkerFaintBits = gHitMarker >> 0x1C;
+
+ ++gBattlerFainted;
+ while (TRUE)
+ {
+ if (hitmarkerFaintBits & gBitTable[gBattlerFainted] && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted]))
+ break;
+ if (gBattlerFainted >= gBattlersCount)
+ break;
+ ++gBattlerFainted;
+ }
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+ }
+}
+
+static void atk53_trainerslidein(void)
+{
+ if (!gBattlescriptCurrInstr[1])
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ else
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ BtlController_EmitTrainerSlide(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk54_playse(void)
+{
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitPlaySE(0, T2_READ_16(gBattlescriptCurrInstr + 1));
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 3;
+}
+
+static void atk55_fanfare(void)
+{
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitPlayFanfare(0, T2_READ_16(gBattlescriptCurrInstr + 1));
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 3;
+}
+
+static void atk56_playfaintcry(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ BtlController_EmitFaintingCry(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk57(void)
+{
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ BtlController_EmitCmd55(0, gBattleOutcome);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 1;
+}
+
+static void atk58_returntoball(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ BtlController_EmitReturnMonToBall(0, 1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk59_handlelearnnewmove(void)
+{
+ const u8 *jumpPtr1 = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr2 = T1_READ_PTR(gBattlescriptCurrInstr + 5);
+ u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]);
+
+ while (ret == 0xFFFE)
+ ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], 0);
+ if (ret == 0)
+ {
+ gBattlescriptCurrInstr = jumpPtr2;
+ }
+ else if (ret == 0xFFFF)
+ {
+ gBattlescriptCurrInstr += 10;
+ }
+ else
+ {
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId
+ && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
+ {
+ GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret);
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId
+ && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
+ {
+ GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret);
+ }
+ }
+ gBattlescriptCurrInstr = jumpPtr1;
+ }
+}
+
+static void atk5A_yesnoboxlearnmove(void)
+{
+ gActiveBattler = 0;
+
+ switch (gBattleScripting.learnMoveState)
+ {
+ case 0:
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, 0);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xE);
+ ++gBattleScripting.learnMoveState;
+ gBattleCommunication[CURSOR_POSITION] = 0;
+ BattleCreateYesNoCursorAt();
+ break;
+ case 1:
+ if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ gBattleCommunication[CURSOR_POSITION] = 0;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ gBattleCommunication[CURSOR_POSITION] = 1;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ if (gBattleCommunication[1] == 0)
+ {
+ HandleBattleWindow(0x17, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ ++gBattleScripting.learnMoveState;
+ }
+ else
+ {
+ gBattleScripting.learnMoveState = 4;
+ }
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gBattleScripting.learnMoveState = 4;
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ FreeAllWindowBuffers();
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gBattleStruct->expGetterMonId, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
+ ++gBattleScripting.learnMoveState;
+ }
+ break;
+ case 3:
+ if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2)
+ {
+ u8 movePosition = sub_8138B2C();
+
+ if (movePosition == 4)
+ {
+ gBattleScripting.learnMoveState = 4;
+ }
+ else
+ {
+ u16 moveId = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MOVE1 + movePosition);
+
+ if (IsHMMove2(moveId))
+ {
+ PrepareStringBattle(STRINGID_HMMOVESCANTBEFORGOTTEN, gActiveBattler);
+ gBattleScripting.learnMoveState = 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ PREPARE_MOVE_BUFFER(gBattleTextBuff2, moveId)
+ RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterMonId], movePosition);
+ SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterMonId], gMoveToLearn, movePosition);
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId
+ && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[0].mimickedMoves & gBitTable[movePosition]))
+ {
+ RemoveBattleMonPPBonus(&gBattleMons[0], movePosition);
+ SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, movePosition);
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId
+ && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[2].mimickedMoves & gBitTable[movePosition]))
+ {
+ RemoveBattleMonPPBonus(&gBattleMons[2], movePosition);
+ SetBattleMonMoveSlot(&gBattleMons[2], gMoveToLearn, movePosition);
+ }
+ }
+ }
+ }
+ break;
+ case 4:
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ gBattlescriptCurrInstr += 5;
+ break;
+ case 5:
+ if (!gBattleControllerExecFlags)
+ {
+ gBattleScripting.learnMoveState = 2;
+ }
+ break;
+ }
+}
+
+static void atk5B_yesnoboxstoplearningmove(void)
+{
+ switch (gBattleScripting.learnMoveState)
+ {
+ case 0:
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, 0);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xE);
+ ++gBattleScripting.learnMoveState;
+ gBattleCommunication[CURSOR_POSITION] = 0;
+ BattleCreateYesNoCursorAt();
+ break;
+ case 1:
+ if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ gBattleCommunication[CURSOR_POSITION] = 0;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ gBattleCommunication[CURSOR_POSITION] = 1;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+
+ if (gBattleCommunication[1] != 0)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ HandleBattleWindow(0x17, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ HandleBattleWindow(0x17, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
+ }
+ break;
+ }
+}
+
+static void atk5C_hitanimation(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ {
+ gBattlescriptCurrInstr += 2;
+ }
+ else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)
+ || !(gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE)
+ || gDisableStructs[gActiveBattler].substituteHP == 0)
+ {
+ BtlController_EmitHitAnimation(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+#ifdef NONMATCHING
+static void atk5D_getmoneyreward(void)
+{
+ u32 i = 0;
+ u32 lastMonLevel = 0;
+ u32 moneyReward = 0;
+ u32 value;
+
+ // The whole function is using wrong registers.
+ if (gBattleOutcome == B_OUTCOME_WON)
+ {
+ if (gTrainerBattleOpponent_A == 0x400)
+ {
+ moneyReward = 20 * gBattleResources->secretBase->party.levels[0] * gBattleStruct->moneyMultiplier;
+ }
+ else
+ {
+ switch (gTrainers[gTrainerBattleOpponent_A].partyFlags)
+ {
+ case 0:
+ {
+ const struct TrainerMonNoItemDefaultMoves *party = gTrainers[gTrainerBattleOpponent_A].party.NoItemDefaultMoves;
+
+ lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
+ }
+ break;
+ case F_TRAINER_PARTY_CUSTOM_MOVESET:
+ {
+ const struct TrainerMonNoItemCustomMoves *party = gTrainers[gTrainerBattleOpponent_A].party.NoItemCustomMoves;
+
+ lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
+ }
+ break;
+ case F_TRAINER_PARTY_HELD_ITEM:
+ {
+ const struct TrainerMonItemDefaultMoves *party = gTrainers[gTrainerBattleOpponent_A].party.ItemDefaultMoves;
+
+ lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
+ }
+ break;
+ case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM:
+ {
+ const struct TrainerMonItemCustomMoves *party = gTrainers[gTrainerBattleOpponent_A].party.ItemCustomMoves;
+
+ lastMonLevel = party[gTrainers[gTrainerBattleOpponent_A].partySize - 1].lvl;
+ }
+ break;
+ }
+ for (; gTrainerMoneyTable[i].classId != 0xFF; ++i)
+ {
+ if (gTrainerMoneyTable[i].classId == gTrainers[gTrainerBattleOpponent_A].trainerClass)
+ break;
+ }
+ moneyReward = 4 * lastMonLevel;
+ moneyReward *= gBattleStruct->moneyMultiplier;
+ value = gTrainerMoneyTable[i].value;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ moneyReward *= (value << 1);
+ else
+ moneyReward *= value;
+ }
+ AddMoney(&gSaveBlock1Ptr->money, moneyReward);
+ }
+ else
+ {
+ moneyReward = sub_8054C04();
+ }
+ PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, moneyReward);
+ if (moneyReward)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+}
+#else
+NAKED
+static void atk5D_getmoneyreward(void)
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ movs r6, 0\n\
+ movs r5, 0\n\
+ ldr r0, _080258F0 @ =gBattleOutcome\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ beq _080258C0\n\
+ b _080259FA\n\
+ _080258C0:\n\
+ ldr r0, _080258F4 @ =gTrainerBattleOpponent_A\n\
+ ldrh r2, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 3\n\
+ cmp r2, r1\n\
+ bne _08025904\n\
+ ldr r0, _080258F8 @ =gBattleResources\n\
+ ldr r0, [r0]\n\
+ ldr r0, [r0]\n\
+ adds r0, 0x94\n\
+ ldrb r2, [r0]\n\
+ ldr r0, _080258FC @ =gBattleStruct\n\
+ ldr r0, [r0]\n\
+ adds r0, 0x4A\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r4, r2, 0\n\
+ muls r4, r0\n\
+ ldr r0, _08025900 @ =gSaveBlock1Ptr\n\
+ mov r8, r0\n\
+ b _080259E8\n\
+ .align 2, 0\n\
+ _080258F0: .4byte gBattleOutcome\n\
+ _080258F4: .4byte gTrainerBattleOpponent_A\n\
+ _080258F8: .4byte gBattleResources\n\
+ _080258FC: .4byte gBattleStruct\n\
+ _08025900: .4byte gSaveBlock1Ptr\n\
+ _08025904:\n\
+ ldr r2, _08025920 @ =gTrainers\n\
+ ldrh r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r3, r0, 3\n\
+ adds r4, r3, r2\n\
+ ldrb r1, [r4]\n\
+ cmp r1, 0x1\n\
+ beq _0802595A\n\
+ cmp r1, 0x1\n\
+ bgt _08025924\n\
+ cmp r1, 0\n\
+ beq _0802592E\n\
+ b _08025970\n\
+ .align 2, 0\n\
+ _08025920: .4byte gTrainers\n\
+ _08025924:\n\
+ cmp r1, 0x2\n\
+ beq _08025944\n\
+ cmp r1, 0x3\n\
+ beq _0802595A\n\
+ b _08025970\n\
+ _0802592E:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x24\n\
+ adds r0, r3, r0\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ subs r0, 0x8\n\
+ b _0802596E\n\
+ _08025944:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x24\n\
+ adds r0, r3, r0\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ subs r0, 0x8\n\
+ b _0802596E\n\
+ _0802595A:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x24\n\
+ adds r0, r3, r0\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ subs r0, 0x10\n\
+ _0802596E:\n\
+ ldrb r5, [r0, 0x2]\n\
+ _08025970:\n\
+ ldr r0, _080259CC @ =gTrainerMoneyTable\n\
+ lsls r1, r6, 2\n\
+ adds r3, r1, r0\n\
+ ldrb r1, [r3]\n\
+ ldr r7, _080259D0 @ =gBattleStruct\n\
+ mov r12, r0\n\
+ lsls r4, r5, 2\n\
+ ldr r5, _080259D4 @ =gBattleTypeFlags\n\
+ ldr r0, _080259D8 @ =gSaveBlock1Ptr\n\
+ mov r8, r0\n\
+ cmp r1, 0xFF\n\
+ beq _080259AA\n\
+ ldr r2, _080259DC @ =gTrainers\n\
+ ldr r0, _080259E0 @ =gTrainerBattleOpponent_A\n\
+ ldrh r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r2\n\
+ ldrb r2, [r0, 0x1]\n\
+ adds r1, r3, 0\n\
+ _0802599A:\n\
+ ldrb r0, [r1]\n\
+ cmp r0, r2\n\
+ beq _080259AA\n\
+ adds r1, 0x4\n\
+ adds r6, 0x1\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xFF\n\
+ bne _0802599A\n\
+ _080259AA:\n\
+ ldr r0, [r7]\n\
+ adds r0, 0x4A\n\
+ ldrb r0, [r0]\n\
+ adds r3, r4, 0\n\
+ muls r3, r0\n\
+ lsls r0, r6, 2\n\
+ add r0, r12\n\
+ ldrb r2, [r0, 0x1]\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080259E4\n\
+ lsls r0, r2, 1\n\
+ adds r4, r3, 0\n\
+ muls r4, r0\n\
+ b _080259E8\n\
+ .align 2, 0\n\
+ _080259CC: .4byte gTrainerMoneyTable\n\
+ _080259D0: .4byte gBattleStruct\n\
+ _080259D4: .4byte gBattleTypeFlags\n\
+ _080259D8: .4byte gSaveBlock1Ptr\n\
+ _080259DC: .4byte gTrainers\n\
+ _080259E0: .4byte gTrainerBattleOpponent_A\n\
+ _080259E4:\n\
+ adds r4, r3, 0\n\
+ muls r4, r2\n\
+ _080259E8:\n\
+ mov r1, r8\n\
+ ldr r0, [r1]\n\
+ movs r1, 0xA4\n\
+ lsls r1, 2\n\
+ adds r0, r1\n\
+ adds r1, r4, 0\n\
+ bl AddMoney\n\
+ b _08025A00\n\
+ _080259FA:\n\
+ bl sub_8054C04\n\
+ adds r4, r0, 0\n\
+ _08025A00:\n\
+ ldr r1, _08025A40 @ =gBattleTextBuff1\n\
+ movs r0, 0xFD\n\
+ strb r0, [r1]\n\
+ movs r0, 0x1\n\
+ strb r0, [r1, 0x1]\n\
+ movs r0, 0x4\n\
+ strb r0, [r1, 0x2]\n\
+ movs r0, 0x5\n\
+ strb r0, [r1, 0x3]\n\
+ strb r4, [r1, 0x4]\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r4\n\
+ lsrs r0, 8\n\
+ strb r0, [r1, 0x5]\n\
+ movs r0, 0xFF\n\
+ lsls r0, 16\n\
+ ands r0, r4\n\
+ lsrs r0, 16\n\
+ strb r0, [r1, 0x6]\n\
+ lsrs r0, r4, 24\n\
+ strb r0, [r1, 0x7]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x8]\n\
+ cmp r4, 0\n\
+ beq _08025A48\n\
+ ldr r1, _08025A44 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x5\n\
+ str r0, [r1]\n\
+ b _08025A62\n\
+ .align 2, 0\n\
+ _08025A40: .4byte gBattleTextBuff1\n\
+ _08025A44: .4byte gBattlescriptCurrInstr\n\
+ _08025A48:\n\
+ ldr r3, _08025A6C @ =gBattlescriptCurrInstr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x1]\n\
+ ldrb r0, [r2, 0x2]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+ _08025A62:\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+ _08025A6C: .4byte gBattlescriptCurrInstr\n\
+ ");
+}
+#endif
+
+static void atk5E(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+
+ switch (gBattleCommunication[0])
+ {
+ case 0:
+ BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, 0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ ++gBattleCommunication[0];
+ break;
+ case 1:
+ if (!gBattleControllerExecFlags)
+ {
+ s32 i;
+ struct BattlePokemon *bufferPoke = (struct BattlePokemon *) &gBattleBufferB[gActiveBattler][4];
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ gBattleMons[gActiveBattler].moves[i] = bufferPoke->moves[i];
+ gBattleMons[gActiveBattler].pp[i] = bufferPoke->pp[i];
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+ break;
+ }
+}
+
+static void atk5F_swapattackerwithtarget(void)
+{
+ gActiveBattler = gBattlerAttacker;
+ gBattlerAttacker = gBattlerTarget;
+ gBattlerTarget = gActiveBattler;
+ if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
+ gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET);
+ else
+ gHitMarker |= HITMARKER_SWAP_ATTACKER_TARGET;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk60_incrementgamestat(void)
+{
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ IncrementGameStat(gBattlescriptCurrInstr[1]);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk61_drawpartystatussummary(void)
+{
+ s32 i;
+ struct Pokemon *party;
+ struct HpAndStatus hpStatuses[PARTY_SIZE];
+
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE
+ || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ {
+ hpStatuses[i].hp = 0xFFFF;
+ hpStatuses[i].status = 0;
+ }
+ else
+ {
+ hpStatuses[i].hp = GetMonData(&party[i], MON_DATA_HP);
+ hpStatuses[i].status = GetMonData(&party[i], MON_DATA_STATUS);
+ }
+ }
+ BtlController_EmitDrawPartyStatusSummary(0, hpStatuses, 1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+static void atk62_hidepartystatussummary(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ BtlController_EmitHidePartyStatusSummary(0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk63_jumptocalledmove(void)
+{
+ if (gBattlescriptCurrInstr[1])
+ gCurrentMove = gCalledMove;
+ else
+ gChosenMove = gCurrentMove = gCalledMove;
+ gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
+}
+
+static void atk64_statusanimation(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
+ && gDisableStructs[gActiveBattler].substituteHP == 0
+ && !(gHitMarker & HITMARKER_NO_ANIMATIONS))
+ {
+ BtlController_EmitStatusAnimation(0, FALSE, gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+static void atk65_status2animation(void)
+{
+ u32 wantedToAnimate;
+
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ wantedToAnimate = T1_READ_32(gBattlescriptCurrInstr + 2);
+ if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
+ && gDisableStructs[gActiveBattler].substituteHP == 0
+ && !(gHitMarker & HITMARKER_NO_ANIMATIONS))
+ {
+ BtlController_EmitStatusAnimation(0, TRUE, gBattleMons[gActiveBattler].status2 & wantedToAnimate);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ gBattlescriptCurrInstr += 6;
+ }
+}
+
+static void atk66_chosenstatusanimation(void)
+{
+ u32 wantedStatus;
+
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ wantedStatus = T1_READ_32(gBattlescriptCurrInstr + 3);
+ if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
+ && gDisableStructs[gActiveBattler].substituteHP == 0
+ && !(gHitMarker & HITMARKER_NO_ANIMATIONS))
+ {
+ BtlController_EmitStatusAnimation(0, gBattlescriptCurrInstr[2], wantedStatus);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ gBattlescriptCurrInstr += 7;
+ }
+}
+
+static void atk67_yesnobox(void)
+{
+ switch (gBattleCommunication[0])
+ {
+ case 0:
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, 0);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xE);
+ ++gBattleCommunication[0];
+ gBattleCommunication[CURSOR_POSITION] = 0;
+ BattleCreateYesNoCursorAt();
+ break;
+ case 1:
+ if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ gBattleCommunication[CURSOR_POSITION] = 0;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ gBattleCommunication[CURSOR_POSITION] = 1;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(B_BUTTON))
+ {
+ gBattleCommunication[CURSOR_POSITION] = 1;
+ PlaySE(SE_SELECT);
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ ++gBattlescriptCurrInstr;
+ }
+ else if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ ++gBattlescriptCurrInstr;
+ }
+ break;
+ }
+}
+
+static void atk68_cancelallactions(void)
+{
+ s32 i;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER;
+ ++gBattlescriptCurrInstr;
+}
+
+// The same as 0x7, except there's no random damage multiplier.
+static void atk69_adjustsetdamage(void)
+{
+ u8 holdEffect, param;
+
+ if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ {
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ }
+ gPotentialItemEffectBattler = gBattlerTarget;
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+ {
+ RecordItemEffectBattle(gBattlerTarget, holdEffect);
+ gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ }
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk6A_removeitem(void)
+{
+ u16 *usedHeldItem;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ usedHeldItem = &gBattleStruct->usedHeldItems[gActiveBattler];
+ *usedHeldItem = gBattleMons[gActiveBattler].item;
+ gBattleMons[gActiveBattler].item = ITEM_NONE;
+ BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBattler].item);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk6B_atknameinbuff1(void)
+{
+ PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker])
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk6C_drawlvlupbox(void)
+{
+ if (gBattleScripting.atk6C_state == 0)
+ {
+ if (IsMonGettingExpSentOut())
+ gBattleScripting.atk6C_state = 3;
+ else
+ gBattleScripting.atk6C_state = 1;
+ }
+
+ switch (gBattleScripting.atk6C_state)
+ {
+ case 1:
+ gBattle_BG2_Y = 0x60;
+ SetBgAttribute(2, BG_ATTR_PRIORITY, 0);
+ ShowBg(2);
+ sub_8026480();
+ gBattleScripting.atk6C_state = 2;
+ break;
+ case 2:
+ if (!sub_80264D0())
+ gBattleScripting.atk6C_state = 3;
+ break;
+ case 3:
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0x100;
+ SetBgAttribute(0, BG_ATTR_PRIORITY, 1);
+ SetBgAttribute(1, BG_ATTR_PRIORITY, 0);
+ ShowBg(0);
+ ShowBg(1);
+ HandleBattleWindow(18, 7, 0x1D, 0x13, WINDOW_x80);
+ gBattleScripting.atk6C_state = 4;
+ break;
+ case 4:
+ DrawLevelUpWindow1();
+ PutWindowTilemap(12);
+ CopyWindowToVram(12, 3);
+ ++gBattleScripting.atk6C_state;
+ break;
+ case 5:
+ case 7:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ gBattle_BG1_Y = 0;
+ ++gBattleScripting.atk6C_state;
+ }
+ break;
+ case 6:
+ if (gMain.newKeys)
+ {
+ PlaySE(SE_SELECT);
+ DrawLevelUpWindow2();
+ CopyWindowToVram(12, 2);
+ ++gBattleScripting.atk6C_state;
+ }
+ break;
+ case 8:
+ if (gMain.newKeys)
+ {
+ PlaySE(SE_SELECT);
+ HandleBattleWindow(18, 7, 0x1D, 0x13, WINDOW_x80 | WINDOW_CLEAR);
+ ++gBattleScripting.atk6C_state;
+ }
+ break;
+ case 9:
+ if (!sub_8026648())
+ {
+ ClearWindowTilemap(13);
+ CopyWindowToVram(13, 1);
+ ClearWindowTilemap(12);
+ CopyWindowToVram(12, 1);
+ SetBgAttribute(2, BG_ATTR_PRIORITY, 2);
+ ShowBg(2);
+ gBattleScripting.atk6C_state = 10;
+ }
+ break;
+ case 10:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ SetBgAttribute(0, BG_ATTR_PRIORITY, 0);
+ SetBgAttribute(1, BG_ATTR_PRIORITY, 1);
+ ShowBg(0);
+ ShowBg(1);
+ ++gBattlescriptCurrInstr;
+ }
+ break;
+ }
+}
+
+static void DrawLevelUpWindow1(void)
+{
+ u16 currStats[NUM_STATS];
+
+ GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
+ DrawLevelUpWindowPg1(12, gBattleResources->beforeLvlUp->stats, currStats, 0xE, 0xD, 0xF);
+}
+
+static void DrawLevelUpWindow2(void)
+{
+ u16 currStats[NUM_STATS];
+
+ GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
+ DrawLevelUpWindowPg2(12, currStats, 0xE, 0xD, 0xF);
+}
+
+static void sub_8026480(void)
+{
+ gBattle_BG2_Y = 0;
+ gBattle_BG2_X = 0x1A0;
+ LoadPalette(gUnknown_82506D0, 0x60, 0x20);
+ CopyToWindowPixelBuffer(13, gUnknown_82506F0, 0, 0);
+ PutWindowTilemap(13);
+ CopyWindowToVram(13, 3);
+ PutMonIconOnLvlUpBox();
+}
+
+static bool8 sub_80264D0(void)
+{
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+ if (gBattle_BG2_X == 0x200)
+ return FALSE;
+ if (gBattle_BG2_X == 0x1A0)
+ PutLevelAndGenderOnLvlUpBox();
+ gBattle_BG2_X += 8;
+ if (gBattle_BG2_X >= 0x200)
+ gBattle_BG2_X = 0x200;
+ return (gBattle_BG2_X != 0x200);
+}
+
+static void PutLevelAndGenderOnLvlUpBox(void)
+{
+ u16 monLevel;
+ u8 monGender;
+ struct TextPrinterTemplate printerTemplate;
+ u8 *txtPtr;
+ u8 *txtPtr2;
+
+ monLevel = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
+ monGender = GetMonGender(&gPlayerParty[gBattleStruct->expGetterMonId]);
+ GetMonNickname(&gPlayerParty[gBattleStruct->expGetterMonId], gStringVar4);
+ printerTemplate.currentChar = gStringVar4;
+ printerTemplate.windowId = 13;
+ printerTemplate.fontId = 0;
+ printerTemplate.x = 32;
+ printerTemplate.y = 0;
+ printerTemplate.currentX = 32;
+ printerTemplate.currentY = 0;
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.unk = 0;
+ printerTemplate.fgColor = TEXT_COLOR_WHITE;
+ printerTemplate.bgColor = TEXT_COLOR_TRANSPARENT;
+ printerTemplate.shadowColor = TEXT_COLOR_DARK_GREY;
+ AddTextPrinter(&printerTemplate, 0xFF, NULL);
+ txtPtr = gStringVar4;
+ gStringVar4[0] = 0xF9;
+ *++txtPtr = 5;
+ *++txtPtr = 0;
+ txtPtr2 = txtPtr + 1;
+ txtPtr = ConvertIntToDecimalStringN(++txtPtr, monLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
+ txtPtr = StringFill(txtPtr, 0, 5);
+ txtPtr = txtPtr2 + 4;
+ if (monGender != MON_GENDERLESS)
+ {
+ if (monGender == MON_MALE)
+ {
+ txtPtr = WriteColorChangeControlCode(txtPtr, 0, 0xC);
+ txtPtr = WriteColorChangeControlCode(txtPtr, 1, 0xD);
+ *(txtPtr++) = CHAR_MALE;
+ }
+ else
+ {
+ txtPtr = WriteColorChangeControlCode(txtPtr, 0, 0xE);
+ txtPtr = WriteColorChangeControlCode(txtPtr, 1, 0xF);
+ *(txtPtr++) = CHAR_FEMALE;
+ }
+ *(txtPtr++) = EOS;
+ }
+ printerTemplate.y = 10;
+ printerTemplate.currentY = 10;
+ AddTextPrinter(&printerTemplate, 0xFF, NULL);
+ CopyWindowToVram(13, 2);
+}
+
+static bool8 sub_8026648(void)
+{
+ if (gBattle_BG2_X == 0x1A0)
+ return FALSE;
+ if (gBattle_BG2_X - 16 < 0x1A0)
+ gBattle_BG2_X = 0x1A0;
+ else
+ gBattle_BG2_X -= 16;
+ return (gBattle_BG2_X != 0x1A0);
+}
+
+#define sDestroy data[0]
+#define sSavedLvlUpBoxXPosition data[1]
+
+static void PutMonIconOnLvlUpBox(void)
+{
+ u8 spriteId;
+ const u16 *iconPal;
+ struct SpriteSheet iconSheet;
+ struct SpritePalette iconPalSheet;
+ u16 species = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPECIES);
+ u32 personality = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_PERSONALITY);
+ const u8 *iconPtr = GetMonIconPtr(species, personality, 1);
+
+ iconSheet.data = iconPtr;
+ iconSheet.size = 0x200;
+ iconSheet.tag = MON_ICON_LVLUP_BOX_TAG;
+ iconPal = GetValidMonIconPalettePtr(species);
+ iconPalSheet.data = iconPal;
+ iconPalSheet.tag = MON_ICON_LVLUP_BOX_TAG;
+ LoadSpriteSheet(&iconSheet);
+ LoadSpritePalette(&iconPalSheet);
+ spriteId = CreateSprite(&sSpriteTemplate_MonIconOnLvlUpBox, 256, 10, 0);
+ gSprites[spriteId].sDestroy = FALSE;
+ gSprites[spriteId].sSavedLvlUpBoxXPosition = gBattle_BG2_X;
+}
+
+static void SpriteCB_MonIconOnLvlUpBox(struct Sprite* sprite)
+{
+ sprite->pos2.x = sprite->sSavedLvlUpBoxXPosition - gBattle_BG2_X;
+ if (sprite->pos2.x != 0)
+ {
+ sprite->sDestroy = TRUE;
+ }
+ else if (sprite->sDestroy)
+ {
+ DestroySprite(sprite);
+ FreeSpriteTilesByTag(MON_ICON_LVLUP_BOX_TAG);
+ FreeSpritePaletteByTag(MON_ICON_LVLUP_BOX_TAG);
+ }
+}
+
+bool32 IsMonGettingExpSentOut(void)
+{
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId)
+ return TRUE;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId)
+ return TRUE;
+ return FALSE;
+}
+
+static void atk6D_resetsentmonsvalue(void)
+{
+ ResetSentPokesToOpponentValue();
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk6E_setatktoplayer0(void)
+{
+ gBattlerAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk6F_makevisible(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ BtlController_EmitSpriteInvisibility(0, FALSE);
+ MarkBattlerForControllerExec(gActiveBattler);
+
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk70_recordlastability(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
+ gBattlescriptCurrInstr += 1; // UB: Should be + 2, one byte for command and one byte for battlerId argument.
+}
+
+void BufferMoveToLearnIntoBattleTextBuff2(void)
+{
+ PREPARE_MOVE_BUFFER(gBattleTextBuff2, gMoveToLearn);
+}
+
+static void atk71_buffermovetolearn(void)
+{
+ BufferMoveToLearnIntoBattleTextBuff2();
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk72_jumpifplayerran(void)
+{
+ if (TryRunFromBattle(gBattlerFainted))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static void atk73_hpthresholds(void)
+{
+ u8 opposingBattler;
+ s32 result;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ opposingBattler = gActiveBattler ^ BIT_SIDE;
+
+ result = gBattleMons[opposingBattler].hp * 100 / gBattleMons[opposingBattler].maxHP;
+ if (result == 0)
+ result = 1;
+ if (result > 69 || !gBattleMons[opposingBattler].hp)
+ gBattleStruct->hpScale = 0;
+ else if (result > 39)
+ gBattleStruct->hpScale = 1;
+ else if (result > 9)
+ gBattleStruct->hpScale = 2;
+ else
+ gBattleStruct->hpScale = 3;
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk74_hpthresholds2(void)
+{
+ u8 opposingBattler;
+ s32 result;
+ u8 hpSwitchout;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ opposingBattler = gActiveBattler ^ BIT_SIDE;
+ hpSwitchout = *(gBattleStruct->hpOnSwitchout + GetBattlerSide(opposingBattler));
+ result = (hpSwitchout - gBattleMons[opposingBattler].hp) * 100 / hpSwitchout;
+
+ if (gBattleMons[opposingBattler].hp >= hpSwitchout)
+ gBattleStruct->hpScale = 0;
+ else if (result <= 29)
+ gBattleStruct->hpScale = 1;
+ else if (result <= 69)
+ gBattleStruct->hpScale = 2;
+ else
+ gBattleStruct->hpScale = 3;
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk75_useitemonopponent(void)
+{
+ gBattlerInMenuId = gBattlerAttacker;
+ PokemonUseItemEffects(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, 1);
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk76_various(void)
+{
+ u8 side;
+ s32 i;
+ u32 monToCheck, status;
+ u16 species;
+ u8 abilityNum;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+
+ switch (gBattlescriptCurrInstr[2])
+ {
+ case VARIOUS_CANCEL_MULTI_TURN_MOVES:
+ CancelMultiTurnMoves(gActiveBattler);
+ break;
+ case VARIOUS_SET_MAGIC_COAT_TARGET:
+ gBattlerAttacker = gBattlerTarget;
+ side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
+ if (gSideTimers[side].followmeTimer != 0 && gBattleMons[gSideTimers[side].followmeTarget].hp != 0)
+ gBattlerTarget = gSideTimers[side].followmeTarget;
+ else
+ gBattlerTarget = gActiveBattler;
+ break;
+ case VARIOUS_IS_RUNNING_IMPOSSIBLE:
+ gBattleCommunication[0] = IsRunningFromBattleImpossible();
+ break;
+ case VARIOUS_GET_MOVE_TARGET:
+ gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
+ break;
+ case VARIOUS_CASE_4:
+ if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
+ gBattleCommunication[0] = 1;
+ else
+ gBattleCommunication[0] = 0;
+ break;
+ case VARIOUS_RESET_INTIMIDATE_TRACE_BITS:
+ gSpecialStatuses[gActiveBattler].intimidatedMon = 0;
+ gSpecialStatuses[gActiveBattler].traced = 0;
+ break;
+ case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP:
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId || gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId)
+ {
+ u16 *choicedMove;
+
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId)
+ gActiveBattler = 0;
+ else
+ gActiveBattler = 2;
+ choicedMove = &gBattleStruct->choicedMove[gActiveBattler];
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gActiveBattler].moves[i] == *choicedMove)
+ break;
+ }
+ if (i == MAX_MON_MOVES)
+ *choicedMove = MOVE_NONE;
+ }
+ break;
+ case VARIOUS_CASE_7:
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE))
+ && gBattleTypeFlags & BATTLE_TYPE_TRAINER
+ && gBattleMons[0].hp != 0
+ && gBattleMons[1].hp != 0)
+ gHitMarker &= ~(HITMARKER_x400000);
+ break;
+ case VARIOUS_CASE_8:
+ i = 0; // redundant
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gActiveBattler = 1;
+ for (i = 0; gActiveBattler < MAX_BATTLERS_COUNT; gActiveBattler += 2)
+ {
+ if (gActiveBattler < gBattlersCount && gBattleMons[gActiveBattler].hp != 0)
+ gBattleCommunication[MULTISTRING_CHOOSER] |= gBitTable[i];
+ ++i;
+ }
+ break;
+ case VARIOUS_RETURN_OPPONENT_MON1:
+ gActiveBattler = 1;
+ if (gBattleMons[gActiveBattler].hp != 0)
+ {
+ BtlController_EmitReturnMonToBall(0, 0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ break;
+ case VARIOUS_RETURN_OPPONENT_MON2:
+ if (gBattlersCount > 3)
+ {
+ gActiveBattler = 3;
+ if (gBattleMons[gActiveBattler].hp != 0)
+ {
+ BtlController_EmitReturnMonToBall(0, 0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ break;
+ case VARIOUS_CASE_11:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ monToCheck = 0;
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability != ABILITY_SOUNDPROOF)
+ {
+ gBattleMons[i].status1 &= ~STATUS1_SLEEP;
+ gBattleMons[i].status2 &= ~STATUS2_NIGHTMARE;
+
+ }
+ }
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ abilityNum = GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM);
+ status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
+ if (species != SPECIES_NONE
+ && species != SPECIES_EGG
+ && status & AILMENT_FNT
+ && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF)
+ monToCheck |= (1 << i);
+ }
+ if (monToCheck)
+ {
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ status = 0;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, monToCheck, 4, &status);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ monToCheck = 0;
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2);
+ abilityNum = GetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM);
+ status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS);
+
+ if (species != SPECIES_NONE
+ && species != SPECIES_EGG
+ && status & AILMENT_FNT
+ && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF)
+ monToCheck |= (1 << i);
+ }
+ if (monToCheck)
+ {
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ status = 0;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, monToCheck, 4, &status);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattleCommunication[5] = 1;
+ }
+ break;
+ case VARIOUS_CASE_12:
+ if (!IsFanfareTaskInactive())
+ return;
+ break;
+ }
+ gBattlescriptCurrInstr += 3;
+}
+
+static void atk77_setprotectlike(void)
+{
+ bool8 notLastTurn = TRUE;
+ u16 lastMove = gLastResultingMoves[gBattlerAttacker];
+
+ if (lastMove != MOVE_PROTECT && lastMove != MOVE_DETECT && lastMove != MOVE_ENDURE)
+ gDisableStructs[gBattlerAttacker].protectUses = 0;
+ if (gCurrentTurnActionNumber == (gBattlersCount - 1))
+ notLastTurn = FALSE;
+ if (sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] >= Random() && notLastTurn)
+ {
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_PROTECT)
+ {
+ gProtectStructs[gBattlerAttacker].protected = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE)
+ {
+ gProtectStructs[gBattlerAttacker].endured = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ ++gDisableStructs[gBattlerAttacker].protectUses;
+ }
+ else
+ {
+ gDisableStructs[gBattlerAttacker].protectUses = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk78_faintifabilitynotdamp(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; ++gBattlerTarget)
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_DAMP)
+ break;
+ if (gBattlerTarget == gBattlersCount)
+ {
+ gActiveBattler = gBattlerAttacker;
+ gBattleMoveDamage = gBattleMons[gActiveBattler].hp;
+ BtlController_EmitHealthBarUpdate(0, INSTANT_HP_BAR_DROP);
+ MarkBattlerForControllerExec(gActiveBattler);
+ ++gBattlescriptCurrInstr;
+
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; ++gBattlerTarget)
+ if (gBattlerTarget != gBattlerAttacker && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]))
+ break;
+ }
+ else
+ {
+ gLastUsedAbility = ABILITY_DAMP;
+ RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
+ gBattlescriptCurrInstr = BattleScript_DampStopsExplosion;
+ }
+ }
+}
+
+static void atk79_setatkhptozero(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = gBattlerAttacker;
+ gBattleMons[gActiveBattler].hp = 0;
+ BtlController_EmitSetMonData(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBattler].hp);
+ MarkBattlerForControllerExec(gActiveBattler);
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void atk7A_jumpifnexttargetvalid(void)
+{
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ for (++gBattlerTarget; ; ++gBattlerTarget)
+ if (gBattlerTarget != gBattlerAttacker && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]))
+ break;
+ if (gBattlerTarget >= gBattlersCount)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = jumpPtr;
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atk7B_tryhealhalfhealth(void)
+{
+ const u8 *failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ if (gBattlescriptCurrInstr[5] == BS_ATTACKER)
+ gBattlerTarget = gBattlerAttacker;
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP)
+ gBattlescriptCurrInstr = failPtr;
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+#ifdef NONMATCHING
+static void atk7C_trymirrormove(void)
+{
+ s32 validMovesCount;
+ s32 i;
+ u16 move;
+ u16 movesArray[4];
+
+ // incorrect pointer load sequence
+ // and incorrect layout in data pools
+ for (i = 0; i < 3; ++i)
+ movesArray[i] = 0;
+ for (validMovesCount = 0, i = 0; i < gBattlersCount; ++i)
+ {
+
+ if (i != gBattlerAttacker)
+ {
+ move = *(i * 2 + gBattlerAttacker * 8 + gBattleStruct->lastTakenMoveFrom + 0)
+ | (*(i * 2 + gBattlerAttacker * 8 + gBattleStruct->lastTakenMoveFrom + 1) << 8);
+ if (move != MOVE_NONE && move != 0xFFFF)
+ movesArray[validMovesCount++] = move;
+ }
+ }
+ move = *(gBattleStruct->lastTakenMove + gBattlerAttacker * 2 + 0)
+ | (*(gBattleStruct->lastTakenMove + gBattlerAttacker * 2 + 1) << 8);
+ if (move != MOVE_NONE && move != 0xFFFF)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gCurrentMove = move;
+ gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
+ gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
+ }
+ else if (validMovesCount)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ i = Random() % validMovesCount;
+ gCurrentMove = movesArray[i];
+ gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
+ gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
+ }
+ else
+ {
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE;
+ ++gBattlescriptCurrInstr;
+ }
+}
+#else
+NAKED
+static void atk7C_trymirrormove(void)
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x8\n\
+ ldr r2, _080273E0 @ =gBattlersCount\n\
+ ldr r0, _080273E4 @ =gBattleStruct\n\
+ mov r10, r0\n\
+ movs r1, 0\n\
+ add r0, sp, 0x4\n\
+ _08027356:\n\
+ strh r1, [r0]\n\
+ subs r0, 0x2\n\
+ cmp r0, sp\n\
+ bge _08027356\n\
+ movs r1, 0\n\
+ mov r8, r1\n\
+ movs r5, 0\n\
+ ldrb r1, [r2]\n\
+ cmp r5, r1\n\
+ bge _080273AC\n\
+ ldr r0, _080273E8 @ =gBattlerAttacker\n\
+ ldrb r6, [r0]\n\
+ ldr r2, _080273EC @ =0x0000ffff\n\
+ mov r9, r2\n\
+ lsls r4, r6, 3\n\
+ mov r2, sp\n\
+ ldr r0, _080273E4 @ =gBattleStruct\n\
+ mov r12, r0\n\
+ adds r7, r1, 0\n\
+ _0802737C:\n\
+ cmp r5, r6\n\
+ beq _080273A4\n\
+ mov r1, r12\n\
+ ldr r0, [r1]\n\
+ adds r0, r4, r0\n\
+ adds r1, r0, 0\n\
+ adds r1, 0xE0\n\
+ ldrb r3, [r1]\n\
+ adds r0, 0xE1\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 8\n\
+ orrs r3, r0\n\
+ cmp r3, 0\n\
+ beq _080273A4\n\
+ cmp r3, r9\n\
+ beq _080273A4\n\
+ strh r3, [r2]\n\
+ adds r2, 0x2\n\
+ movs r0, 0x1\n\
+ add r8, r0\n\
+ _080273A4:\n\
+ adds r4, 0x2\n\
+ adds r5, 0x1\n\
+ cmp r5, r7\n\
+ blt _0802737C\n\
+ _080273AC:\n\
+ ldr r1, _080273E8 @ =gBattlerAttacker\n\
+ ldrb r0, [r1]\n\
+ mov r2, r10\n\
+ ldr r1, [r2]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ adds r1, r0, 0\n\
+ adds r1, 0x98\n\
+ ldrb r3, [r1]\n\
+ adds r0, 0x99\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 8\n\
+ orrs r3, r0\n\
+ cmp r3, 0\n\
+ beq _080273FC\n\
+ ldr r0, _080273EC @ =0x0000ffff\n\
+ cmp r3, r0\n\
+ beq _080273FC\n\
+ ldr r2, _080273F0 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ ldr r1, _080273F4 @ =0xfffffbff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r4, _080273F8 @ =gCurrentMove\n\
+ strh r3, [r4]\n\
+ b _08027426\n\
+ .align 2, 0\n\
+ _080273E0: .4byte gBattlersCount\n\
+ _080273E4: .4byte gBattleStruct\n\
+ _080273E8: .4byte gBattlerAttacker\n\
+ _080273EC: .4byte 0x0000ffff\n\
+ _080273F0: .4byte gHitMarker\n\
+ _080273F4: .4byte 0xfffffbff\n\
+ _080273F8: .4byte gCurrentMove\n\
+ _080273FC:\n\
+ mov r0, r8\n\
+ cmp r0, 0\n\
+ beq _0802746C\n\
+ ldr r2, _08027450 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08027454 @ =0xfffffbff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r1, r8\n\
+ bl __modsi3\n\
+ adds r5, r0, 0\n\
+ ldr r4, _08027458 @ =gCurrentMove\n\
+ lsls r0, r5, 1\n\
+ add r0, sp\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r4]\n\
+ _08027426:\n\
+ ldrh r0, [r4]\n\
+ movs r1, 0\n\
+ bl GetMoveTarget\n\
+ ldr r1, _0802745C @ =gBattlerTarget\n\
+ strb r0, [r1]\n\
+ ldr r5, _08027460 @ =gBattlescriptCurrInstr\n\
+ ldr r3, _08027464 @ =gBattleScriptsForMoveEffects\n\
+ ldr r2, _08027468 @ =gBattleMoves\n\
+ ldrh r1, [r4]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ ldr r0, [r0]\n\
+ str r0, [r5]\n\
+ b _0802748A\n\
+ .align 2, 0\n\
+ _08027450: .4byte gHitMarker\n\
+ _08027454: .4byte 0xfffffbff\n\
+ _08027458: .4byte gCurrentMove\n\
+ _0802745C: .4byte gBattlerTarget\n\
+ _08027460: .4byte gBattlescriptCurrInstr\n\
+ _08027464: .4byte gBattleScriptsForMoveEffects\n\
+ _08027468: .4byte gBattleMoves\n\
+ _0802746C:\n\
+ ldr r2, _0802749C @ =gSpecialStatuses\n\
+ ldr r0, _080274A0 @ =gBattlerAttacker\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x20\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ ldr r1, _080274A4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x1\n\
+ str r0, [r1]\n\
+ _0802748A:\n\
+ add sp, 0x8\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+ _0802749C: .4byte gSpecialStatuses\n\
+ _080274A0: .4byte gBattlerAttacker\n\
+ _080274A4: .4byte gBattlescriptCurrInstr\n\
+ ");
+}
+#endif
+
+static void atk7D_setrain(void)
+{
+ if (gBattleWeather & WEATHER_RAIN_ANY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = WEATHER_RAIN_TEMPORARY;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk7E_setreflect(void)
+{
+ if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_REFLECT)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else
+ {
+ gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_REFLECT;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectTimer = 5;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectBattlerId = gBattlerAttacker;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk7F_setseeded(void)
+{
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS))
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gStatuses3[gBattlerTarget] |= gBattlerAttacker;
+ gStatuses3[gBattlerTarget] |= STATUS3_LEECHSEED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk80_manipulatedamage(void)
+{
+ switch (gBattlescriptCurrInstr[1])
+ {
+ case ATK80_DMG_CHANGE_SIGN:
+ gBattleMoveDamage *= -1;
+ break;
+ case ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP:
+ gBattleMoveDamage /= 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage)
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
+ break;
+ case ATK80_DMG_DOUBLED:
+ gBattleMoveDamage *= 2;
+ break;
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk81_trysetrest(void)
+{
+ const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ gActiveBattler = gBattlerTarget = gBattlerAttacker;
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP * (-1);
+ if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP)
+ {
+ gBattlescriptCurrInstr = failJump;
+ }
+ else
+ {
+ if (gBattleMons[gBattlerTarget].status1 & ((u8)(~STATUS1_SLEEP)))
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattleMons[gBattlerTarget].status1 = 3;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atk82_jumpifnotfirstturn(void)
+{
+ const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ if (gDisableStructs[gBattlerAttacker].isFirstTurn)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = failJump;
+}
+
+static void atk83_nop(void)
+{
+ ++gBattlescriptCurrInstr;
+}
+
+bool8 UproarWakeUpCheck(u8 battlerId)
+{
+ s32 i;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (!(gBattleMons[i].status2 & STATUS2_UPROAR)
+ || gBattleMons[battlerId].ability == ABILITY_SOUNDPROOF)
+ continue;
+ gBattleScripting.battler = i;
+
+ if (gBattlerTarget == 0xFF)
+ gBattlerTarget = i;
+ else if (gBattlerTarget == i)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ break;
+ }
+ if (i == gBattlersCount)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void atk84_jumpifcantmakeasleep(void)
+{
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ if (UproarWakeUpCheck(gBattlerTarget))
+ {
+ gBattlescriptCurrInstr = jumpPtr;
+ }
+ else if (gBattleMons[gBattlerTarget].ability == ABILITY_INSOMNIA
+ || gBattleMons[gBattlerTarget].ability == ABILITY_VITAL_SPIRIT)
+ {
+ gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ gBattlescriptCurrInstr = jumpPtr;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atk85_stockpile(void)
+{
+ if (gDisableStructs[gBattlerAttacker].stockpileCounter == 3)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ ++gDisableStructs[gBattlerAttacker].stockpileCounter;
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gBattlerAttacker].stockpileCounter)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk86_stockpiletobasedamage(void)
+{
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0)
+ {
+ gBattlescriptCurrInstr = jumpPtr;
+ }
+ else
+ {
+ if (gBattleCommunication[6] != 1)
+ {
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove,
+ gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)], 0,
+ 0, gBattlerAttacker, gBattlerTarget)
+ * gDisableStructs[gBattlerAttacker].stockpileCounter;
+ gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter;
+
+ if (gProtectStructs[gBattlerAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+ }
+ gDisableStructs[gBattlerAttacker].stockpileCounter = 0;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atk87_stockpiletohpheal(void)
+{
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0)
+ {
+ gBattlescriptCurrInstr = jumpPtr;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else if (gBattleMons[gBattlerAttacker].maxHP == gBattleMons[gBattlerAttacker].hp)
+ {
+ gDisableStructs[gBattlerAttacker].stockpileCounter = 0;
+ gBattlescriptCurrInstr = jumpPtr;
+ gBattlerTarget = gBattlerAttacker;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter));
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter;
+ gDisableStructs[gBattlerAttacker].stockpileCounter = 0;
+ gBattlescriptCurrInstr += 5;
+ gBattlerTarget = gBattlerAttacker;
+ }
+}
+
+static void atk88_negativedamage(void)
+{
+ gBattleMoveDamage = -(gHpDealt / 2);
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = -1;
+ ++gBattlescriptCurrInstr;
+}
+
+#define STAT_CHANGE_WORKED 0
+#define STAT_CHANGE_DIDNT_WORK 1
+
+static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
+{
+ bool8 certain = FALSE;
+ bool8 notProtectAffected = FALSE;
+ u32 index;
+
+ if (flags & MOVE_EFFECT_AFFECTS_USER)
+ gActiveBattler = gBattlerAttacker;
+ else
+ gActiveBattler = gBattlerTarget;
+ flags &= ~(MOVE_EFFECT_AFFECTS_USER);
+ if (flags & MOVE_EFFECT_CERTAIN)
+ ++certain;
+ flags &= ~(MOVE_EFFECT_CERTAIN);
+ if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED)
+ ++notProtectAffected;
+ flags &= ~(STAT_CHANGE_NOT_PROTECT_AFFECTED);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, statId)
+ if (statValue <= -1) // Stat decrease.
+ {
+ if (gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
+ && !certain && gCurrentMove != MOVE_CURSE)
+ {
+ if (flags == STAT_CHANGE_BS_PTR)
+ {
+ if (gSpecialStatuses[gActiveBattler].statLowered)
+ {
+ gBattlescriptCurrInstr = BS_ptr;
+ }
+ else
+ {
+ BattleScriptPush(BS_ptr);
+ gBattleScripting.battler = gActiveBattler;
+ gBattlescriptCurrInstr = BattleScript_MistProtected;
+ gSpecialStatuses[gActiveBattler].statLowered = 1;
+ }
+ }
+ return STAT_CHANGE_DIDNT_WORK;
+ }
+ else if (gCurrentMove != MOVE_CURSE
+ && notProtectAffected != TRUE
+ && JumpIfMoveAffectedByProtect(0))
+ {
+ gBattlescriptCurrInstr = BattleScript_ButItFailed;
+ return STAT_CHANGE_DIDNT_WORK;
+ }
+ else if ((gBattleMons[gActiveBattler].ability == ABILITY_CLEAR_BODY
+ || gBattleMons[gActiveBattler].ability == ABILITY_WHITE_SMOKE)
+ && !certain
+ && gCurrentMove != MOVE_CURSE)
+ {
+ if (flags == STAT_CHANGE_BS_PTR)
+ {
+ if (gSpecialStatuses[gActiveBattler].statLowered)
+ {
+ gBattlescriptCurrInstr = BS_ptr;
+ }
+ else
+ {
+ BattleScriptPush(BS_ptr);
+ gBattleScripting.battler = gActiveBattler;
+ gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
+ gSpecialStatuses[gActiveBattler].statLowered = 1;
+ }
+ }
+ return STAT_CHANGE_DIDNT_WORK;
+ }
+ else if (gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE
+ && !certain && statId == STAT_ACC)
+ {
+ if (flags == STAT_CHANGE_BS_PTR)
+ {
+ BattleScriptPush(BS_ptr);
+ gBattleScripting.battler = gActiveBattler;
+ gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
+ }
+ return STAT_CHANGE_DIDNT_WORK;
+ }
+ else if (gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER
+ && !certain && statId == STAT_ATK)
+ {
+ if (flags == STAT_CHANGE_BS_PTR)
+ {
+ BattleScriptPush(BS_ptr);
+ gBattleScripting.battler = gActiveBattler;
+ gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
+ }
+ return STAT_CHANGE_DIDNT_WORK;
+ }
+ else if (gBattleMons[gActiveBattler].ability == ABILITY_SHIELD_DUST && !flags)
+ {
+ return STAT_CHANGE_DIDNT_WORK;
+ }
+ else // try to decrease
+ {
+ statValue = -GET_STAT_BUFF_VALUE(statValue);
+ gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ index = 1;
+ if (statValue == -2)
+ {
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_STATHARSHLY;
+ gBattleTextBuff2[3] = STRINGID_STATHARSHLY >> 8;
+ index = 4;
+ }
+ gBattleTextBuff2[index++] = B_BUFF_STRING;
+ gBattleTextBuff2[index++] = STRINGID_STATFELL;
+ gBattleTextBuff2[index++] = STRINGID_STATFELL >> 8;
+ gBattleTextBuff2[index] = B_BUFF_EOS;
+ if (gBattleMons[gActiveBattler].statStages[statId] == 0)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler);
+ }
+ }
+ else // stat increase
+ {
+ statValue = GET_STAT_BUFF_VALUE(statValue);
+ gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ index = 1;
+ if (statValue == 2)
+ {
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_STATSHARPLY;
+ gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8;
+ index = 4;
+ }
+ gBattleTextBuff2[index++] = B_BUFF_STRING;
+ gBattleTextBuff2[index++] = STRINGID_STATROSE;
+ gBattleTextBuff2[index++] = STRINGID_STATROSE >> 8;
+ gBattleTextBuff2[index] = B_BUFF_EOS;
+ if (gBattleMons[gActiveBattler].statStages[statId] == 0xC)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler);
+ }
+ gBattleMons[gActiveBattler].statStages[statId] += statValue;
+ if (gBattleMons[gActiveBattler].statStages[statId] < 0)
+ gBattleMons[gActiveBattler].statStages[statId] = 0;
+ if (gBattleMons[gActiveBattler].statStages[statId] > 0xC)
+ gBattleMons[gActiveBattler].statStages[statId] = 0xC;
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_CHANGE_BS_PTR)
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & STAT_CHANGE_BS_PTR))
+ return STAT_CHANGE_DIDNT_WORK;
+ return STAT_CHANGE_WORKED;
+}
+
+static void atk89_statbuffchange(void)
+{
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ if (ChangeStatBuffs(gBattleScripting.statChanger & 0xF0, GET_STAT_BUFF_ID(gBattleScripting.statChanger), gBattlescriptCurrInstr[1], jumpPtr) == STAT_CHANGE_WORKED)
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atk8A_normalisebuffs(void) // haze
+{
+ s32 i, j;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ for (j = 0; j < NUM_BATTLE_STATS; ++j)
+ gBattleMons[i].statStages[j] = 6;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk8B_setbide(void)
+{
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMoves[gBattlerAttacker] = gCurrentMove;
+ gTakenDmg[gBattlerAttacker] = 0;
+ gBattleMons[gBattlerAttacker].status2 |= (STATUS2_BIDE - 0x100); // 2 turns
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk8C_confuseifrepeatingattackends(void)
+{
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE))
+ gBattleCommunication[MOVE_EFFECT_BYTE] = (MOVE_EFFECT_THRASH | MOVE_EFFECT_AFFECTS_USER);
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk8D_setmultihitcounter(void)
+{
+ if (gBattlescriptCurrInstr[1])
+ {
+ gMultiHitCounter = gBattlescriptCurrInstr[1];
+ }
+ else
+ {
+ gMultiHitCounter = Random() & 3;
+ if (gMultiHitCounter > 1)
+ gMultiHitCounter = (Random() & 3) + 2;
+ else
+ gMultiHitCounter += 2;
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atk8E_initmultihitstring(void)
+{
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0)
+ ++gBattlescriptCurrInstr;
+}
+
+static bool8 TryDoForceSwitchOut(void)
+{
+ if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ {
+ *(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget];
+ }
+ else
+ {
+ u16 random = Random() & 0xFF;
+
+ if ((u32)((random * (gBattleMons[gBattlerAttacker].level + gBattleMons[gBattlerTarget].level) >> 8) + 1) <= (gBattleMons[gBattlerTarget].level / 4))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ return FALSE;
+ }
+ *(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget];
+ }
+ gBattlescriptCurrInstr = BattleScript_SuccessForceOut;
+ return TRUE;
+}
+
+#define MON_CAN_BATTLE(mon) (((GetMonData(mon, MON_DATA_SPECIES) && GetMonData(mon, MON_DATA_IS_EGG) != TRUE && GetMonData(mon, MON_DATA_HP))))
+
+static void atk8F_forcerandomswitch(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ u8 i;
+ struct Pokemon *party;
+ u8 valid;
+ u8 val;
+
+ if (!GetBattlerSide(gBattlerTarget))
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ valid = 0;
+ val = 0;
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == 1)
+ val = 3;
+ for (i = val; i < val + 3; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0)
+ ++valid;
+ }
+ }
+ else
+ {
+ valid = 0;
+ for (i = 0; i < 6; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0)
+ ++valid;
+ }
+ }
+
+ if ((valid < 2 && (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE)
+ || (valid < 3 && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else if (TryDoForceSwitchOut())
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ do
+ {
+ val = Random() % 3;
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == 1)
+ i = val + 3;
+ else
+ i = val;
+ }
+ while (i == gBattlerPartyIndexes[gBattlerTarget]
+ || i == gBattlerPartyIndexes[gBattlerTarget ^ 2]
+ || !MON_CAN_BATTLE(&party[i]));
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ do
+ {
+ i = Random() % 6;
+ }
+ while (i == gBattlerPartyIndexes[gBattlerTarget]
+ || i == gBattlerPartyIndexes[gBattlerTarget ^ 2]
+ || !MON_CAN_BATTLE(&party[i]));
+ }
+ else
+ {
+ do
+ {
+ i = Random() % 6;
+ }
+ while (i == gBattlerPartyIndexes[gBattlerTarget]
+ || !MON_CAN_BATTLE(&party[i]));
+ }
+ }
+ *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i;
+ if (!IsMultiBattle())
+ sub_8013F6C(gBattlerTarget);
+ sub_8127EC4(gBattlerTarget, i, 0);
+ sub_8127EC4(gBattlerTarget ^ 2, i, 1);
+ }
+ }
+ else
+ {
+ TryDoForceSwitchOut();
+ }
+}
+
+static void atk90_tryconversiontypechange(void) // randomly changes user's type to one of its moves' type
+{
+ u8 validMoves = 0;
+ u8 moveChecked;
+ u8 moveType;
+
+ while (validMoves < MAX_MON_MOVES)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[validMoves] == MOVE_NONE)
+ break;
+ ++validMoves;
+ }
+ for (moveChecked = 0; moveChecked < validMoves; ++moveChecked)
+ {
+ moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type;
+ if (moveType == TYPE_MYSTERY)
+ {
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
+ moveType = TYPE_GHOST;
+ else
+ moveType = TYPE_NORMAL;
+ }
+ if (moveType != gBattleMons[gBattlerAttacker].type1
+ && moveType != gBattleMons[gBattlerAttacker].type2)
+ {
+ break;
+ }
+ }
+ if (moveChecked == validMoves)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ do
+ {
+ while ((moveChecked = Random() & 3) >= validMoves);
+ moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type;
+ if (moveType == TYPE_MYSTERY)
+ {
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
+ moveType = TYPE_GHOST;
+ else
+ moveType = TYPE_NORMAL;
+ }
+ }
+ while (moveType == gBattleMons[gBattlerAttacker].type1
+ || moveType == gBattleMons[gBattlerAttacker].type2);
+ SET_BATTLER_TYPE(gBattlerAttacker, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atk91_givepaydaymoney(void)
+{
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney != 0)
+ {
+ u32 bonusMoney = gPaydayMoney * gBattleStruct->moneyMultiplier;
+
+ AddMoney(&gSaveBlock1Ptr->money, bonusMoney);
+ PREPARE_HWORD_NUMBER_BUFFER(gBattleTextBuff1, 5, bonusMoney)
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_PrintPayDayMoneyString;
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void atk92_setlightscreen(void)
+{
+ if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_LIGHTSCREEN)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else
+ {
+ gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_LIGHTSCREEN;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 5;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk93_tryKO(void)
+{
+ u8 holdEffect, param;
+
+ if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ {
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ }
+ gPotentialItemEffectBattler = gBattlerTarget;
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+ {
+ RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_FOCUS_BAND);
+ gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ }
+
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_STURDY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gLastUsedAbility = ABILITY_STURDY;
+ gBattlescriptCurrInstr = BattleScript_SturdyPreventsOHKO;
+ RecordAbilityBattle(gBattlerTarget, ABILITY_STURDY);
+ }
+ else
+ {
+ u16 chance;
+
+ if (!(gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS))
+ {
+ chance = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level);
+ if (Random() % 100 + 1 < chance && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ chance = TRUE;
+ else
+ chance = FALSE;
+ }
+ else if (gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker
+ && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ {
+ chance = TRUE;
+ }
+ else
+ {
+ chance = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level);
+ if (Random() % 100 + 1 < chance && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ chance = TRUE;
+ else
+ chance = FALSE;
+ }
+ if (chance)
+ {
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp;
+ gMoveResultFlags |= MOVE_RESULT_ONE_HIT_KO;
+ }
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ }
+}
+
+static void atk94_damagetohalftargethp(void) // super fang
+{
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp / 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk95_setsandstorm(void)
+{
+ if (gBattleWeather & WEATHER_SANDSTORM_ANY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = WEATHER_SANDSTORM_TEMPORARY;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk96_weatherdamage(void)
+{
+ if (((gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_GHOST)) == BATTLE_TYPE_GHOST)
+ && (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT))
+ {
+ gBattleMoveDamage = 0;
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ if (WEATHER_HAS_EFFECT)
+ {
+ if (gBattleWeather & WEATHER_SANDSTORM_ANY)
+ {
+ if (gBattleMons[gBattlerAttacker].type1 != TYPE_ROCK
+ && gBattleMons[gBattlerAttacker].type1 != TYPE_STEEL
+ && gBattleMons[gBattlerAttacker].type1 != TYPE_GROUND
+ && gBattleMons[gBattlerAttacker].type2 != TYPE_ROCK
+ && gBattleMons[gBattlerAttacker].type2 != TYPE_STEEL
+ && gBattleMons[gBattlerAttacker].type2 != TYPE_GROUND
+ && gBattleMons[gBattlerAttacker].ability != ABILITY_SAND_VEIL
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER))
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+ else
+ {
+ gBattleMoveDamage = 0;
+ }
+ }
+ if (gBattleWeather & WEATHER_HAIL)
+ {
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER))
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+ else
+ {
+ gBattleMoveDamage = 0;
+ }
+ }
+ }
+ else
+ {
+ gBattleMoveDamage = 0;
+ }
+ if (gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
+ gBattleMoveDamage = 0;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk97_tryinfatuating(void)
+{
+ struct Pokemon *monAttacker, *monTarget;
+ u16 speciesAttacker, speciesTarget;
+ u32 personalityAttacker, personalityTarget;
+
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ monAttacker = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ else
+ monAttacker = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ monTarget = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
+ else
+ monTarget = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
+ speciesAttacker = GetMonData(monAttacker, MON_DATA_SPECIES);
+ personalityAttacker = GetMonData(monAttacker, MON_DATA_PERSONALITY);
+ speciesTarget = GetMonData(monTarget, MON_DATA_SPECIES);
+ personalityTarget = GetMonData(monTarget, MON_DATA_PERSONALITY);
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_OBLIVIOUS)
+ {
+ gBattlescriptCurrInstr = BattleScript_ObliviousPreventsAttraction;
+ gLastUsedAbility = ABILITY_OBLIVIOUS;
+ RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS);
+ }
+ else
+ {
+ if (GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget)
+ || gBattleMons[gBattlerTarget].status2 & STATUS2_INFATUATION
+ || GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == MON_GENDERLESS
+ || GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget) == MON_GENDERLESS)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_INFATUATED_WITH(gBattlerAttacker);
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+}
+
+static void atk98_updatestatusicon(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (gBattlescriptCurrInstr[1] == BS_PLAYER2)
+ {
+ for (gActiveBattler = gBattleControllerExecFlags; gActiveBattler < gBattlersCount; ++gActiveBattler)
+ {
+ if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+ else if (gBattlescriptCurrInstr[1] == BS_ATTACKER_WITH_PARTNER)
+ {
+ gActiveBattler = gBattlerAttacker;
+ if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
+ if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+ else
+ {
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+ }
+ }
+}
+
+static void atk99_setmist(void)
+{
+ if (gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistTimer)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FAILED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistTimer = 5;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistBattlerId = gBattlerAttacker;
+ gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_MIST;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk9A_setfocusenergy(void)
+{
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FAILED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_FOCUS_ENERGY;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atk9B_transformdataexecution(void)
+{
+ gChosenMove = 0xFFFF;
+ ++gBattlescriptCurrInstr;
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED
+ || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FAILED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ s32 i;
+ u8 *battleMonAttacker, *battleMonTarget;
+
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_TRANSFORMED;
+ gDisableStructs[gBattlerAttacker].disabledMove = MOVE_NONE;
+ gDisableStructs[gBattlerAttacker].disableTimer = 0;
+ gDisableStructs[gBattlerAttacker].transformedMonPersonality = gBattleMons[gBattlerTarget].personality;
+ gDisableStructs[gBattlerAttacker].mimickedMoves = 0;
+ PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].species)
+ battleMonAttacker = (u8 *)(&gBattleMons[gBattlerAttacker]);
+ battleMonTarget = (u8 *)(&gBattleMons[gBattlerTarget]);
+ for (i = 0; i < offsetof(struct BattlePokemon, pp); ++i)
+ battleMonAttacker[i] = battleMonTarget[i];
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].pp < 5)
+ gBattleMons[gBattlerAttacker].pp[i] = gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].pp;
+ else
+ gBattleMons[gBattlerAttacker].pp[i] = 5;
+ }
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitResetActionMoveSelection(0, RESET_MOVE_SELECTION);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+}
+
+static void atk9C_setsubstitute(void)
+{
+ u32 hp = gBattleMons[gBattlerAttacker].maxHP / 4;
+
+ if (gBattleMons[gBattlerAttacker].maxHP / 4 == 0)
+ hp = 1;
+ if (gBattleMons[gBattlerAttacker].hp <= hp)
+ {
+ gBattleMoveDamage = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; // one bit value will only work for pokemon which max hp can go to 1020(which is more than possible in games)
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_SUBSTITUTE;
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_WRAPPED);
+ gDisableStructs[gBattlerAttacker].substituteHP = gBattleMoveDamage;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static bool8 IsMoveUncopyableByMimic(u16 move)
+{
+ s32 i;
+
+ for (i = 0; sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END && sMovesForbiddenToCopy[i] != move; ++i);
+ return (sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END);
+}
+
+static void atk9D_mimicattackcopy(void)
+{
+ gChosenMove = 0xFFFF;
+ if (IsMoveUncopyableByMimic(gLastMoves[gBattlerTarget])
+ || gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED
+ || gLastMoves[gBattlerTarget] == 0
+ || gLastMoves[gBattlerTarget] == 0xFFFF)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[i] == gLastMoves[gBattlerTarget])
+ break;
+ }
+ if (i == MAX_MON_MOVES)
+ {
+ gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastMoves[gBattlerTarget];
+ if (gBattleMoves[gLastMoves[gBattlerTarget]].pp < 5)
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gLastMoves[gBattlerTarget]].pp;
+ else
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 5;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget])
+ gDisableStructs[gBattlerAttacker].mimickedMoves |= gBitTable[gCurrMovePos];
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ }
+}
+
+static void atk9E_metronome(void)
+{
+ while (1)
+ {
+ s32 i;
+
+ gCurrentMove = (Random() & 0x1FF) + 1;
+ if (gCurrentMove >= MOVES_COUNT)
+ continue;
+ for (i = 0; i < MAX_MON_MOVES; ++i); // redundant
+ i = -1;
+ while (1)
+ {
+ ++i;
+ if (sMovesForbiddenToCopy[i] == gCurrentMove)
+ break;
+ if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
+ break;
+ }
+ if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
+ gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
+ return;
+ }
+ }
+}
+
+static void atk9F_dmgtolevel(void)
+{
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].level;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkA0_psywavedamageeffect(void)
+{
+ s32 randDamage;
+
+ while ((randDamage = (Random() & 0xF)) > 10);
+ randDamage *= 10;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].level * (randDamage + 50) / 100;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkA1_counterdamagecalculator(void)
+{
+ u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
+ u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId);
+
+ if (gProtectStructs[gBattlerAttacker].physicalDmg
+ && sideAttacker != sideTarget
+ && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp)
+ {
+ gBattleMoveDamage = gProtectStructs[gBattlerAttacker].physicalDmg * 2;
+
+ if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp)
+ gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
+ else
+ gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId;
+
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+// a copy of atkA1 with the physical -> special field changes
+static void atkA2_mirrorcoatdamagecalculator(void)
+{
+ u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
+ u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId);
+
+ if (gProtectStructs[gBattlerAttacker].specialDmg && sideAttacker != sideTarget && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp)
+ {
+ gBattleMoveDamage = gProtectStructs[gBattlerAttacker].specialDmg * 2;
+ if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp)
+ gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
+ else
+ gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkA3_disablelastusedattack(void)
+{
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget])
+ break;
+ }
+ if (gDisableStructs[gBattlerTarget].disabledMove == MOVE_NONE
+ && i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0)
+ {
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].moves[i])
+ gDisableStructs[gBattlerTarget].disabledMove = gBattleMons[gBattlerTarget].moves[i];
+ gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2;
+ gDisableStructs[gBattlerTarget].disableTimerStartValue = gDisableStructs[gBattlerTarget].disableTimer; // used to save the random amount of turns?
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkA4_trysetencore(void)
+{
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget])
+ break;
+ if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE
+ || gLastMoves[gBattlerTarget] == MOVE_ENCORE
+ || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE)
+ i = 4;
+ if (gDisableStructs[gBattlerTarget].encoredMove == MOVE_NONE
+ && i != 4
+ && gBattleMons[gBattlerTarget].pp[i] != 0)
+ {
+ gDisableStructs[gBattlerTarget].encoredMove = gBattleMons[gBattlerTarget].moves[i];
+ gDisableStructs[gBattlerTarget].encoredMovePos = i;
+ gDisableStructs[gBattlerTarget].encoreTimer = (Random() & 3) + 3;
+ gDisableStructs[gBattlerTarget].encoreTimerStartValue = gDisableStructs[gBattlerTarget].encoreTimer;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkA5_painsplitdmgcalc(void)
+{
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE))
+ {
+ s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + gBattleMons[gBattlerTarget].hp) / 2;
+ s32 painSplitHp = gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - hpDiff;
+ u8 *storeLoc = (void *)(&gBattleScripting.painSplitHp);
+
+ storeLoc[0] = (painSplitHp);
+ storeLoc[1] = (painSplitHp & 0x0000FF00) >> 8;
+ storeLoc[2] = (painSplitHp & 0x00FF0000) >> 16;
+ storeLoc[3] = (painSplitHp & 0xFF000000) >> 24;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].hp - hpDiff;
+ gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkA6_settypetorandomresistance(void) // conversion 2
+{
+ if (gLastLandedMoves[gBattlerAttacker] == MOVE_NONE
+ || gLastLandedMoves[gBattlerAttacker] == 0xFFFF)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else if (IsTwoTurnsMove(gLastLandedMoves[gBattlerAttacker])
+ && gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ s32 i, j, rands;
+
+ for (rands = 0; rands < 1000; ++rands)
+ {
+ while (((i = (Random() & 0x7F)) > sizeof(gTypeEffectiveness) / 3));
+ i *= 3;
+ if (TYPE_EFFECT_ATK_TYPE(i) == gLastHitByType[gBattlerAttacker]
+ && TYPE_EFFECT_MULTIPLIER(i) <= TYPE_MUL_NOT_EFFECTIVE
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
+ {
+ SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i));
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i));
+
+ gBattlescriptCurrInstr += 5;
+ return;
+ }
+ }
+ for (j = 0, rands = 0; rands < sizeof(gTypeEffectiveness); j += 3, rands += 3)
+ {
+ switch (TYPE_EFFECT_ATK_TYPE(j))
+ {
+ case TYPE_ENDTABLE:
+ case TYPE_FORESIGHT:
+ break;
+ default:
+ if (TYPE_EFFECT_ATK_TYPE(j) == gLastHitByType[gBattlerAttacker]
+ && TYPE_EFFECT_MULTIPLIER(j) <= 5
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
+ {
+ SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(rands));
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(rands))
+
+ gBattlescriptCurrInstr += 5;
+ return;
+ }
+ break;
+ }
+ }
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkA7_setalwayshitflag(void)
+{
+ gStatuses3[gBattlerTarget] &= ~(STATUS3_ALWAYS_HITS);
+ gStatuses3[gBattlerTarget] |= 0x10;
+ gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkA8_copymovepermanently(void) // sketch
+{
+ gChosenMove = 0xFFFF;
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)
+ && gLastPrintedMoves[gBattlerTarget] != MOVE_STRUGGLE
+ && gLastPrintedMoves[gBattlerTarget] != 0
+ && gLastPrintedMoves[gBattlerTarget] != 0xFFFF
+ && gLastPrintedMoves[gBattlerTarget] != MOVE_SKETCH)
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ if (gBattleMons[gBattlerAttacker].moves[i] != MOVE_SKETCH && gBattleMons[gBattlerAttacker].moves[i] == gLastPrintedMoves[gBattlerTarget])
+ break;
+ if (i != MAX_MON_MOVES)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else // sketch worked
+ {
+ struct MovePpInfo movePpData;
+
+ gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastPrintedMoves[gBattlerTarget];
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gLastPrintedMoves[gBattlerTarget]].pp;
+ gActiveBattler = gBattlerAttacker;
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ movePpData.moves[i] = gBattleMons[gBattlerAttacker].moves[i];
+ movePpData.pp[i] = gBattleMons[gBattlerAttacker].pp[i];
+ }
+ movePpData.ppBonuses = gBattleMons[gBattlerAttacker].ppBonuses;
+ BtlController_EmitSetMonData(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct MovePpInfo), &movePpData);
+ MarkBattlerForControllerExec(gActiveBattler);
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastPrintedMoves[gBattlerTarget])
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static bool8 IsTwoTurnsMove(u16 move)
+{
+ if (gBattleMoves[move].effect == EFFECT_SKULL_BASH
+ || gBattleMoves[move].effect == EFFECT_RAZOR_WIND
+ || gBattleMoves[move].effect == EFFECT_SKY_ATTACK
+ || gBattleMoves[move].effect == EFFECT_SOLARBEAM
+ || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE
+ || gBattleMoves[move].effect == EFFECT_BIDE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool8 IsInvalidForSleepTalkOrAssist(u16 move)
+{
+ if (move == MOVE_NONE || move == MOVE_SLEEP_TALK || move == MOVE_ASSIST
+ || move == MOVE_MIRROR_MOVE || move == MOVE_METRONOME)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a charging turn, otherwise 2
+{
+ // first argument is unused
+ if (gBattleMoves[move].effect == EFFECT_SOLARBEAM
+ && (gBattleWeather & WEATHER_SUN_ANY))
+ return 2;
+ if (gBattleMoves[move].effect == EFFECT_SKULL_BASH
+ || gBattleMoves[move].effect == EFFECT_RAZOR_WIND
+ || gBattleMoves[move].effect == EFFECT_SKY_ATTACK
+ || gBattleMoves[move].effect == EFFECT_SOLARBEAM
+ || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE
+ || gBattleMoves[move].effect == EFFECT_BIDE)
+ if ((gHitMarker & HITMARKER_CHARGING))
+ return 1;
+ return 2;
+}
+
+static void atkA9_trychoosesleeptalkmove(void)
+{
+ s32 i;
+ u8 unusableMovesBits = 0;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (IsInvalidForSleepTalkOrAssist(gBattleMons[gBattlerAttacker].moves[i])
+ || gBattleMons[gBattlerAttacker].moves[i] == MOVE_FOCUS_PUNCH
+ || gBattleMons[gBattlerAttacker].moves[i] == MOVE_UPROAR
+ || IsTwoTurnsMove(gBattleMons[gBattlerAttacker].moves[i]))
+ {
+ unusableMovesBits |= gBitTable[i];
+ }
+ }
+ unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~(MOVE_LIMITATION_PP));
+ if (unusableMovesBits == 0xF) // all 4 moves cannot be chosen
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+ else // at least one move can be chosen
+ {
+ u32 movePosition;
+
+ do
+ movePosition = Random() & 3;
+ while ((gBitTable[movePosition] & unusableMovesBits));
+ gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition];
+ gCurrMovePos = movePosition;
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gBattlerTarget = GetMoveTarget(gCalledMove, 0);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkAA_setdestinybond(void)
+{
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_DESTINY_BOND;
+ ++gBattlescriptCurrInstr;
+}
+
+static void TrySetDestinyBondToHappen(void)
+{
+ u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
+ u8 sideTarget = GetBattlerSide(gBattlerTarget);
+
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_DESTINY_BOND
+ && sideAttacker != sideTarget
+ && !(gHitMarker & HITMARKER_GRUDGE))
+ gHitMarker |= HITMARKER_DESTINYBOND;
+}
+
+static void atkAB_trysetdestinybondtohappen(void)
+{
+ TrySetDestinyBondToHappen();
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkAC_remaininghptopower(void)
+{
+ s32 i;
+ s32 hpFraction = GetScaledHPFraction(gBattleMons[gBattlerAttacker].hp, gBattleMons[gBattlerAttacker].maxHP, 48);
+
+ for (i = 0; i < (s32)sizeof(sFlailHpScaleToPowerTable); i += 2)
+ {
+ if (hpFraction <= sFlailHpScaleToPowerTable[i])
+ break;
+ }
+ gDynamicBasePower = sFlailHpScaleToPowerTable[i + 1];
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkAD_tryspiteppreduce(void)
+{
+ if (gLastMoves[gBattlerTarget] != MOVE_NONE && gLastMoves[gBattlerTarget] != 0xFFFF)
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ if (gLastMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i])
+ break;
+ if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] > 1)
+ {
+ s32 ppToDeduct = (Random() & 3) + 2;
+
+ if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct)
+ ppToDeduct = gBattleMons[gBattlerTarget].pp[i];
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget])
+ ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, 0, 1);
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct)
+ gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct;
+ gActiveBattler = gBattlerTarget;
+ if (!(gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[i])
+ && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
+ {
+ BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBattler].pp[i]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ gBattlescriptCurrInstr += 5;
+ if (gBattleMons[gBattlerTarget].pp[i] == 0)
+ CancelMultiTurnMoves(gBattlerTarget);
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkAE_healpartystatus(void)
+{
+ u32 zero = 0;
+ u8 toHeal = 0;
+
+ if (gCurrentMove == MOVE_HEAL_BELL)
+ {
+ struct Pokemon *party;
+ s32 i;
+
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+ if (gBattleMons[gBattlerAttacker].ability != ABILITY_SOUNDPROOF)
+ {
+ gBattleMons[gBattlerAttacker].status1 = 0;
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ }
+ else
+ {
+ RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability);
+ gBattleCommunication[MULTISTRING_CHOOSER] |= 1;
+ }
+ gActiveBattler = gBattleScripting.battler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ if (gBattleMons[gActiveBattler].ability != ABILITY_SOUNDPROOF)
+ {
+ gBattleMons[gActiveBattler].status1 = 0;
+ gBattleMons[gActiveBattler].status2 &= ~(STATUS2_NIGHTMARE);
+ }
+ else
+ {
+ RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability);
+ gBattleCommunication[MULTISTRING_CHOOSER] |= 2;
+ }
+ }
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ u16 species = GetMonData(&party[i], MON_DATA_SPECIES2);
+ u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM);
+
+ if (species != SPECIES_NONE && species != SPECIES_EGG)
+ {
+ u8 ability;
+
+ if (gBattlerPartyIndexes[gBattlerAttacker] == i)
+ ability = gBattleMons[gBattlerAttacker].ability;
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && gBattlerPartyIndexes[gActiveBattler] == i
+ && !(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ ability = gBattleMons[gActiveBattler].ability;
+ else
+ ability = GetAbilityBySpecies(species, abilityNum);
+ if (ability != ABILITY_SOUNDPROOF)
+ toHeal |= (1 << i);
+ }
+ }
+ }
+ else // Aromatherapy
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ toHeal = 0x3F;
+ gBattleMons[gBattlerAttacker].status1 = 0;
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
+ {
+ gBattleMons[gActiveBattler].status1 = 0;
+ gBattleMons[gActiveBattler].status2 &= ~(STATUS2_NIGHTMARE);
+ }
+
+ }
+ if (toHeal)
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, toHeal, 4, &zero);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkAF_cursetarget(void)
+{
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_CURSED)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_CURSED;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkB0_trysetspikes(void)
+{
+ u8 targetSide = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
+
+ if (gSideTimers[targetSide].spikesAmount == 3)
+ {
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gSideStatuses[targetSide] |= SIDE_STATUS_SPIKES;
+ ++gSideTimers[targetSide].spikesAmount;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkB1_setforesight(void)
+{
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_FORESIGHT;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkB2_trysetperishsong(void)
+{
+ s32 i;
+ s32 notAffectedCount = 0;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gStatuses3[i] & STATUS3_PERISH_SONG
+ || gBattleMons[i].ability == ABILITY_SOUNDPROOF)
+ {
+ ++notAffectedCount;
+ }
+ else
+ {
+ gStatuses3[i] |= STATUS3_PERISH_SONG;
+ gDisableStructs[i].perishSongTimer = 3;
+ gDisableStructs[i].perishSongTimerStartValue = 3;
+ }
+ }
+ PressurePPLoseOnUsingPerishSong(gBattlerAttacker);
+ if (notAffectedCount == gBattlersCount)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static void atkB3_rolloutdamagecalculation(void)
+{
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ {
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveMissedPause;
+ }
+ else
+ {
+ s32 i;
+
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) // first hit
+ {
+ gDisableStructs[gBattlerAttacker].rolloutTimer = 5;
+ gDisableStructs[gBattlerAttacker].rolloutTimerStartValue = 5;
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMoves[gBattlerAttacker] = gCurrentMove;
+ }
+ if (--gDisableStructs[gBattlerAttacker].rolloutTimer == 0) // last hit
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_MULTIPLETURNS);
+ gDynamicBasePower = gBattleMoves[gCurrentMove].power;
+ for (i = 1; i < (5 - gDisableStructs[gBattlerAttacker].rolloutTimer); ++i)
+ gDynamicBasePower *= 2;
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_DEFENSE_CURL)
+ gDynamicBasePower *= 2;
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void atkB4_jumpifconfusedandstatmaxed(void)
+{
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION
+ && gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == 12)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atkB5_furycuttercalc(void)
+{
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ {
+ gDisableStructs[gBattlerAttacker].furyCutterCounter = 0;
+ gBattlescriptCurrInstr = BattleScript_MoveMissedPause;
+ }
+ else
+ {
+ s32 i;
+
+ if (gDisableStructs[gBattlerAttacker].furyCutterCounter != 5)
+ ++gDisableStructs[gBattlerAttacker].furyCutterCounter;
+ gDynamicBasePower = gBattleMoves[gCurrentMove].power;
+
+ for (i = 1; i < gDisableStructs[gBattlerAttacker].furyCutterCounter; ++i)
+ gDynamicBasePower *= 2;
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void atkB6_happinesstodamagecalculation(void)
+{
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_RETURN)
+ gDynamicBasePower = 10 * (gBattleMons[gBattlerAttacker].friendship) / 25;
+ else // EFFECT_FRUSTRATION
+ gDynamicBasePower = 10 * (255 - gBattleMons[gBattlerAttacker].friendship) / 25;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkB7_presentdamagecalculation(void)
+{
+ s32 rand = Random() & 0xFF;
+
+ if (rand < 102)
+ {
+ gDynamicBasePower = 40;
+ }
+ else if (rand < 178)
+ {
+ gDynamicBasePower = 80;
+ }
+ else if (rand < 204)
+ {
+ gDynamicBasePower = 120;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ }
+ if (rand < 204)
+ {
+ gBattlescriptCurrInstr = BattleScript_HitFromCritCalc;
+ }
+ else if (gBattleMons[gBattlerTarget].maxHP == gBattleMons[gBattlerTarget].hp)
+ {
+ gBattlescriptCurrInstr = BattleScript_AlreadyAtFullHp;
+ }
+ else
+ {
+ gMoveResultFlags &= ~(MOVE_RESULT_DOESNT_AFFECT_FOE);
+ gBattlescriptCurrInstr = BattleScript_PresentHealTarget;
+ }
+}
+
+static void atkB8_setsafeguard(void)
+{
+ if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_SAFEGUARD)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else
+ {
+ gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_SAFEGUARD;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].safeguardTimer = 5;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].safeguardBattlerId = gBattlerAttacker;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 5;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkB9_magnitudedamagecalculation(void)
+{
+ s32 magnitude = Random() % 100;
+
+ if (magnitude < 5)
+ {
+ gDynamicBasePower = 10;
+ magnitude = 4;
+ }
+ else if (magnitude < 15)
+ {
+ gDynamicBasePower = 30;
+ magnitude = 5;
+ }
+ else if (magnitude < 35)
+ {
+ gDynamicBasePower = 50;
+ magnitude = 6;
+ }
+ else if (magnitude < 65)
+ {
+ gDynamicBasePower = 70;
+ magnitude = 7;
+ }
+ else if (magnitude < 85)
+ {
+ gDynamicBasePower = 90;
+ magnitude = 8;
+ }
+ else if (magnitude < 95)
+ {
+ gDynamicBasePower = 110;
+ magnitude = 9;
+ }
+ else
+ {
+ gDynamicBasePower = 150;
+ magnitude = 10;
+ }
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 2, magnitude)
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; ++gBattlerTarget)
+ if (gBattlerTarget != gBattlerAttacker && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) // a valid target was found
+ break;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkBA_jumpifnopursuitswitchdmg(void)
+{
+ if (gMultiHitCounter == 1)
+ {
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ else
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ }
+ else
+ {
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ else
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ }
+ if (gChosenActionByBattler[gBattlerTarget] == B_ACTION_USE_MOVE
+ && gBattlerAttacker == *(gBattleStruct->moveTarget + gBattlerTarget)
+ && !(gBattleMons[gBattlerTarget].status1 & (STATUS1_SLEEP | STATUS1_FREEZE))
+ && gBattleMons[gBattlerAttacker].hp
+ && !gDisableStructs[gBattlerTarget].truantCounter
+ && gChosenMoveByBattler[gBattlerTarget] == MOVE_PURSUIT)
+ {
+ s32 i;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ if (gBattlerByTurnOrder[i] == gBattlerTarget)
+ gActionsByTurnOrder[i] = 11;
+ gCurrentMove = MOVE_PURSUIT;
+ gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerTarget);
+ gBattlescriptCurrInstr += 5;
+ gBattleScripting.animTurn = 1;
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkBB_setsunny(void)
+{
+ if (gBattleWeather & WEATHER_SUN_ANY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = WEATHER_SUN_TEMPORARY;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkBC_maxattackhalvehp(void) // belly drum
+{
+ u32 halfHp = gBattleMons[gBattlerAttacker].maxHP / 2;
+
+ if (!(gBattleMons[gBattlerAttacker].maxHP / 2))
+ halfHp = 1;
+ if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < 12
+ && gBattleMons[gBattlerAttacker].hp > halfHp)
+ {
+ gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = 12;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkBD_copyfoestats(void) // psych up
+{
+ s32 i;
+
+ for (i = 0; i < NUM_BATTLE_STATS; ++i)
+ gBattleMons[gBattlerAttacker].statStages[i] = gBattleMons[gBattlerTarget].statStages[i];
+ gBattlescriptCurrInstr += 5; // Has an unused jump ptr(possibly for a failed attempt) parameter.
+}
+
+static void atkBE_rapidspinfree(void)
+{
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_WRAPPED)
+ {
+ gBattleScripting.battler = gBattlerTarget;
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_WRAPPED);
+ gBattlerTarget = *(gBattleStruct->wrappedBy + gBattlerAttacker);
+ gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ gBattleTextBuff1[1] = B_BUFF_MOVE;
+ gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gBattlerAttacker * 2 + 0);
+ gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gBattlerAttacker * 2 + 1);
+ gBattleTextBuff1[4] = B_BUFF_EOS;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_WrapFree;
+ }
+ else if (gStatuses3[gBattlerAttacker] & STATUS3_LEECHSEED)
+ {
+ gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED);
+ gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED_BATTLER);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_LeechSeedFree;
+ }
+ else if (gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_SPIKES)
+ {
+ gSideStatuses[GetBattlerSide(gBattlerAttacker)] &= ~(SIDE_STATUS_SPIKES);
+ gSideTimers[GetBattlerSide(gBattlerAttacker)].spikesAmount = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SpikesFree;
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+static void atkBF_setdefensecurlbit(void)
+{
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_DEFENSE_CURL;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkC0_recoverbasedonsunlight(void)
+{
+ gBattlerTarget = gBattlerAttacker;
+ if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP)
+ {
+ if (gBattleWeather == 0 || !WEATHER_HAS_EFFECT)
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
+ else if (gBattleWeather & WEATHER_SUN_ANY)
+ gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30;
+ else // not sunny weather
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4;
+
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkC1_hiddenpowercalc(void)
+{
+ s32 powerBits, typeBits;
+
+ powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1)
+ | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0)
+ | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1)
+ | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2)
+ | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3)
+ | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4);
+ typeBits = ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0)
+ | ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1)
+ | ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2)
+ | ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3)
+ | ((gBattleMons[gBattlerAttacker].spAttackIV & 1) << 4)
+ | ((gBattleMons[gBattlerAttacker].spDefenseIV & 1) << 5);
+ gDynamicBasePower = (40 * powerBits) / 63 + 30;
+ gBattleStruct->dynamicMoveType = (15 * typeBits) / 63 + 1;
+ if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY)
+ ++gBattleStruct->dynamicMoveType;
+ gBattleStruct->dynamicMoveType |= 0xC0;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkC2_selectfirstvalidtarget(void)
+{
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; ++gBattlerTarget)
+ if (gBattlerTarget != gBattlerAttacker && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]))
+ break;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkC3_trysetfutureattack(void)
+{
+ if (gWishFutureKnock.futureSightCounter[gBattlerTarget] != 0)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gWishFutureKnock.futureSightMove[gBattlerTarget] = gCurrentMove;
+ gWishFutureKnock.futureSightAttacker[gBattlerTarget] = gBattlerAttacker;
+ gWishFutureKnock.futureSightCounter[gBattlerTarget] = 3;
+ gWishFutureKnock.futureSightDmg[gBattlerTarget] = CalculateBaseDamage(&gBattleMons[gBattlerAttacker],
+ &gBattleMons[gBattlerTarget],
+ gCurrentMove,
+ gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)],
+ 0,
+ 0,
+ gBattlerAttacker,
+ gBattlerTarget);
+ if (gProtectStructs[gBattlerAttacker].helpingHand)
+ gWishFutureKnock.futureSightDmg[gBattlerTarget] = gWishFutureKnock.futureSightDmg[gBattlerTarget] * 15 / 10;
+ if (gCurrentMove == MOVE_DOOM_DESIRE)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkC4_trydobeatup(void)
+{
+ struct Pokemon *party;
+
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+ if (gBattleMons[gBattlerTarget].hp == 0)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ u8 beforeLoop = gBattleCommunication[0];
+
+ for (;gBattleCommunication[0] < 6; ++gBattleCommunication[0])
+ {
+ if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP)
+ && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2)
+ && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG
+ && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS))
+ break;
+ }
+ if (gBattleCommunication[0] < 6)
+ {
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattleCommunication[0])
+ gBattlescriptCurrInstr += 9;
+ gBattleMoveDamage = gBaseStats[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack;
+ gBattleMoveDamage *= gBattleMoves[gCurrentMove].power;
+ gBattleMoveDamage *= (GetMonData(&party[gBattleCommunication[0]], MON_DATA_LEVEL) * 2 / 5 + 2);
+ gBattleMoveDamage /= gBaseStats[gBattleMons[gBattlerTarget].species].baseDefense;
+ gBattleMoveDamage = (gBattleMoveDamage / 50) + 2;
+ if (gProtectStructs[gBattlerAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+ ++gBattleCommunication[0];
+ }
+ else if (beforeLoop != 0)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5);
+ }
+}
+
+static void atkC5_setsemiinvulnerablebit(void)
+{
+ switch (gCurrentMove)
+ {
+ case MOVE_FLY:
+ case MOVE_BOUNCE:
+ gStatuses3[gBattlerAttacker] |= STATUS3_ON_AIR;
+ break;
+ case MOVE_DIG:
+ gStatuses3[gBattlerAttacker] |= STATUS3_UNDERGROUND;
+ break;
+ case MOVE_DIVE:
+ gStatuses3[gBattlerAttacker] |= STATUS3_UNDERWATER;
+ break;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkC6_clearsemiinvulnerablebit(void)
+{
+ switch (gCurrentMove)
+ {
+ case MOVE_FLY:
+ case MOVE_BOUNCE:
+ gStatuses3[gBattlerAttacker] &= ~STATUS3_ON_AIR;
+ break;
+ case MOVE_DIG:
+ gStatuses3[gBattlerAttacker] &= ~STATUS3_UNDERGROUND;
+ break;
+ case MOVE_DIVE:
+ gStatuses3[gBattlerAttacker] &= ~STATUS3_UNDERWATER;
+ break;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkC7_setminimize(void)
+{
+ if (gHitMarker & HITMARKER_OBEYS)
+ gStatuses3[gBattlerAttacker] |= STATUS3_MINIMIZED;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkC8_sethail(void)
+{
+ if (gBattleWeather & WEATHER_HAIL_ANY)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else
+ {
+ gBattleWeather = WEATHER_HAIL;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 5;
+ gWishFutureKnock.weatherDuration = 5;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkC9_jumpifattackandspecialattackcannotfall(void) // memento
+{
+ if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == 0
+ && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == 0
+ && gBattleCommunication[6] != 1)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gActiveBattler = gBattlerAttacker;
+ gBattleMoveDamage = gBattleMons[gActiveBattler].hp;
+ BtlController_EmitHealthBarUpdate(0, INSTANT_HP_BAR_DROP);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkCA_setforcedtarget(void) // follow me
+{
+ gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTimer = 1;
+ gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTarget = gBattlerAttacker;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkCB_setcharge(void)
+{
+ gStatuses3[gBattlerAttacker] |= STATUS3_CHARGED_UP;
+ gDisableStructs[gBattlerAttacker].chargeTimer = 2;
+ gDisableStructs[gBattlerAttacker].chargeTimerStartValue = 2;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkCC_callterrainattack(void) // nature power
+{
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gCurrentMove = sNaturePowerMoves[gBattleTerrain];
+ gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
+ BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkCD_cureifburnedparalysedorpoisoned(void) // refresh
+{
+ if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON))
+ {
+ gBattleMons[gBattlerAttacker].status1 = 0;
+ gBattlescriptCurrInstr += 5;
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkCE_settorment(void)
+{
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_TORMENT;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkCF_jumpifnodamage(void)
+{
+ if (gProtectStructs[gBattlerAttacker].physicalDmg || gProtectStructs[gBattlerAttacker].specialDmg)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+}
+
+static void atkD0_settaunt(void)
+{
+ if (gDisableStructs[gBattlerTarget].tauntTimer == 0)
+ {
+ gDisableStructs[gBattlerTarget].tauntTimer = 2;
+ gDisableStructs[gBattlerTarget].tauntTimer2 = 2;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkD1_trysethelpinghand(void)
+{
+ gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget])
+ && !gProtectStructs[gBattlerAttacker].helpingHand
+ && !gProtectStructs[gBattlerTarget].helpingHand)
+ {
+ gProtectStructs[gBattlerTarget].helpingHand = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkD2_tryswapitems(void) // trick
+{
+ // opponent can't swap items with player in regular battles
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER
+ || (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT
+ && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))
+ && gTrainerBattleOpponent_A != 0x400))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
+ u8 sideTarget = GetBattlerSide(gBattlerTarget);
+
+ // you can't swap items if they were knocked off in regular battles
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))
+ && gTrainerBattleOpponent_A != 0x400
+ && (gWishFutureKnock.knockedOffMons[sideAttacker] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]
+ || gWishFutureKnock.knockedOffMons[sideTarget] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]]))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ // can't swap if two pokemon don't have an item
+ // or if either of them is an enigma berry or a mail
+ else if ((gBattleMons[gBattlerAttacker].item == 0 && gBattleMons[gBattlerTarget].item == 0)
+ || gBattleMons[gBattlerAttacker].item == ITEM_ENIGMA_BERRY
+ || gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY
+ || IS_ITEM_MAIL(gBattleMons[gBattlerAttacker].item)
+ || IS_ITEM_MAIL(gBattleMons[gBattlerTarget].item))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ // check if ability prevents swapping
+ else if (gBattleMons[gBattlerTarget].ability == ABILITY_STICKY_HOLD)
+ {
+ gBattlescriptCurrInstr = BattleScript_StickyHoldActivates;
+ gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ // took a while, but all checks passed and items can be safely swapped
+ else
+ {
+ u16 oldItemAtk, *newItemAtk;
+
+ newItemAtk = &gBattleStruct->changedItems[gBattlerAttacker];
+ oldItemAtk = gBattleMons[gBattlerAttacker].item;
+ *newItemAtk = gBattleMons[gBattlerTarget].item;
+ gBattleMons[gBattlerAttacker].item = 0;
+ gBattleMons[gBattlerTarget].item = oldItemAtk;
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, newItemAtk);
+ MarkBattlerForControllerExec(gBattlerAttacker);
+ gActiveBattler = gBattlerTarget;
+ BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBattlerTarget].item);
+ MarkBattlerForControllerExec(gBattlerTarget);
+ *(u8 *)((u8 *)(&gBattleStruct->choicedMove[gBattlerTarget]) + 0) = 0;
+ *(u8 *)((u8 *)(&gBattleStruct->choicedMove[gBattlerTarget]) + 1) = 0;
+
+ *(u8 *)((u8 *)(&gBattleStruct->choicedMove[gBattlerAttacker]) + 0) = 0;
+ *(u8 *)((u8 *)(&gBattleStruct->choicedMove[gBattlerAttacker]) + 1) = 0;
+ gBattlescriptCurrInstr += 5;
+ PREPARE_ITEM_BUFFER(gBattleTextBuff1, *newItemAtk)
+ PREPARE_ITEM_BUFFER(gBattleTextBuff2, oldItemAtk)
+ if (oldItemAtk != ITEM_NONE && *newItemAtk != ITEM_NONE)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2; // attacker's item -> <- target's item
+ else if (oldItemAtk == ITEM_NONE && *newItemAtk != ITEM_NONE)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0; // nothing -> <- target's item
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1; // attacker's item -> <- nothing
+ }
+ }
+}
+
+static void atkD3_trycopyability(void) // role play
+{
+ if (gBattleMons[gBattlerTarget].ability != ABILITY_NONE && gBattleMons[gBattlerTarget].ability != ABILITY_WONDER_GUARD)
+ {
+ gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability;
+ gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkD4_trywish(void)
+{
+ switch (gBattlescriptCurrInstr[1])
+ {
+ case 0: // use wish
+ if (gWishFutureKnock.wishCounter[gBattlerAttacker] == 0)
+ {
+ gWishFutureKnock.wishCounter[gBattlerAttacker] = 2;
+ gWishFutureKnock.wishMonId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker];
+ gBattlescriptCurrInstr += 6;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ }
+ break;
+ case 1: // heal effect
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerTarget, gWishFutureKnock.wishMonId[gBattlerTarget])
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+ break;
+ }
+}
+
+static void atkD5_trysetroots(void) // ingrain
+{
+ if (gStatuses3[gBattlerAttacker] & STATUS3_ROOTED)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gStatuses3[gBattlerAttacker] |= STATUS3_ROOTED;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkD6_doubledamagedealtifdamaged(void)
+{
+ if ((gProtectStructs[gBattlerAttacker].physicalDmg != 0
+ && gProtectStructs[gBattlerAttacker].physicalBattlerId == gBattlerTarget)
+ || (gProtectStructs[gBattlerAttacker].specialDmg != 0
+ && gProtectStructs[gBattlerAttacker].specialBattlerId == gBattlerTarget))
+ {
+ gBattleScripting.dmgMultiplier = 2;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkD7_setyawn(void)
+{
+ if (gStatuses3[gBattlerTarget] & STATUS3_YAWN
+ || gBattleMons[gBattlerTarget].status1 & STATUS1_ANY)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gStatuses3[gBattlerTarget] |= 0x1000;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkD8_setdamagetohealthdifference(void)
+{
+ if (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerAttacker].hp)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - gBattleMons[gBattlerAttacker].hp;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkD9_scaledamagebyhealthratio(void)
+{
+ if (gDynamicBasePower == 0)
+ {
+ u8 power = gBattleMoves[gCurrentMove].power;
+
+ gDynamicBasePower = gBattleMons[gBattlerAttacker].hp * power / gBattleMons[gBattlerAttacker].maxHP;
+ if (gDynamicBasePower == 0)
+ gDynamicBasePower = 1;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkDA_tryswapabilities(void) // skill swap
+{
+ if ((gBattleMons[gBattlerAttacker].ability == 0
+ && gBattleMons[gBattlerTarget].ability == 0)
+ || gBattleMons[gBattlerAttacker].ability == ABILITY_WONDER_GUARD
+ || gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD
+ || gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ u8 abilityAtk = gBattleMons[gBattlerAttacker].ability;
+
+ gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability;
+ gBattleMons[gBattlerTarget].ability = abilityAtk;
+
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkDB_tryimprison(void)
+{
+ if ((gStatuses3[gBattlerAttacker] & STATUS3_IMPRISONED_OTHERS))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ u8 battlerId, sideAttacker;
+
+ sideAttacker = GetBattlerSide(gBattlerAttacker);
+ PressurePPLoseOnUsingImprison(gBattlerAttacker);
+ for (battlerId = 0; battlerId < gBattlersCount; ++battlerId)
+ {
+ if (sideAttacker != GetBattlerSide(battlerId))
+ {
+ s32 attackerMoveId;
+
+ for (attackerMoveId = 0; attackerMoveId < MAX_MON_MOVES; ++attackerMoveId)
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[attackerMoveId] == gBattleMons[battlerId].moves[i]
+ && gBattleMons[gBattlerAttacker].moves[attackerMoveId] != MOVE_NONE)
+ break;
+ }
+ if (i != MAX_MON_MOVES)
+ break;
+ }
+ if (attackerMoveId != MAX_MON_MOVES)
+ {
+ gStatuses3[gBattlerAttacker] |= STATUS3_IMPRISONED_OTHERS;
+ gBattlescriptCurrInstr += 5;
+ break;
+ }
+ }
+ }
+ if (battlerId == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkDC_trysetgrudge(void)
+{
+ if (gStatuses3[gBattlerAttacker] & STATUS3_GRUDGE)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gStatuses3[gBattlerAttacker] |= STATUS3_GRUDGE;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkDD_weightdamagecalculation(void)
+{
+ s32 i;
+
+ for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2)
+ {
+ if (sWeightToDamageTable[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), 1))
+ break;
+ }
+ if (sWeightToDamageTable[i] != 0xFFFF)
+ gDynamicBasePower = sWeightToDamageTable[i + 1];
+ else
+ gDynamicBasePower = 120;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkDE_assistattackselect(void)
+{
+ s32 chooseableMovesNo = 0;
+ struct Pokemon *party;
+ s32 monId, moveId;
+ u16 *movesArray = gBattleStruct->assistPossibleMoves;
+
+ if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER)
+ party = gEnemyParty;
+ else
+ party = gPlayerParty;
+ for (monId = 0; monId < PARTY_SIZE; ++monId)
+ {
+ if (monId == gBattlerPartyIndexes[gBattlerAttacker]
+ || GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_NONE
+ || GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_EGG)
+ continue;
+ for (moveId = 0; moveId < MAX_MON_MOVES; ++moveId)
+ {
+ s32 i = 0;
+ u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId);
+
+ if (IsInvalidForSleepTalkOrAssist(move))
+ continue;
+ for (; sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END && move != sMovesForbiddenToCopy[i]; ++i);
+ if (sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END || move == MOVE_NONE)
+ continue;
+ movesArray[chooseableMovesNo] = move;
+ ++chooseableMovesNo;
+ }
+ }
+ if (chooseableMovesNo)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gCalledMove = movesArray[((Random() & 0xFF) * chooseableMovesNo) >> 8];
+ gBattlerTarget = GetMoveTarget(gCalledMove, 0);
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkDF_trysetmagiccoat(void)
+{
+ gBattlerTarget = gBattlerAttacker;
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gProtectStructs[gBattlerAttacker].bounceMove = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkE0_trysetsnatch(void) // snatch
+{
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gProtectStructs[gBattlerAttacker].stealMove = 1;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkE1_trygetintimidatetarget(void)
+{
+ u8 side;
+
+ gBattleScripting.battler = gBattleStruct->intimidateBattler;
+ side = GetBattlerSide(gBattleScripting.battler);
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gBattleMons[gBattleScripting.battler].ability)
+ for (;gBattlerTarget < gBattlersCount; ++gBattlerTarget)
+ if (GetBattlerSide(gBattlerTarget) != side && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]))
+ break;
+ if (gBattlerTarget >= gBattlersCount)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static void atkE2_switchoutabilities(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ switch (gBattleMons[gActiveBattler].ability)
+ {
+ case ABILITY_NATURAL_CURE:
+ gBattleMons[gActiveBattler].status1 = 0;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, gBitTable[*(gBattleStruct->field_58 + gActiveBattler)], 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ }
+ gBattlescriptCurrInstr += 2;
+}
+
+static void atkE3_jumpifhasnohp(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+
+ if (gBattleMons[gActiveBattler].hp == 0)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+static void atkE4_getsecretpowereffect(void)
+{
+ switch (gBattleTerrain)
+ {
+ case BATTLE_TERRAIN_GRASS:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_POISON;
+ break;
+ case BATTLE_TERRAIN_LONG_GRASS:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_SLEEP;
+ break;
+ case BATTLE_TERRAIN_SAND:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_ACC_MINUS_1;
+ break;
+ case BATTLE_TERRAIN_UNDERWATER:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_DEF_MINUS_1;
+ break;
+ case BATTLE_TERRAIN_WATER:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_ATK_MINUS_1;
+ break;
+ case BATTLE_TERRAIN_POND:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_SPD_MINUS_1;
+ break;
+ case BATTLE_TERRAIN_MOUNTAIN:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_CONFUSION;
+ break;
+ case BATTLE_TERRAIN_CAVE:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_FLINCH;
+ break;
+ default:
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_PARALYSIS;
+ break;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkE5_pickup(void)
+{
+ s32 i;
+ u32 j;
+ u16 species, heldItem;
+ u32 ability;
+
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM) != ABILITY_NONE)
+ ability = gBaseStats[species].abilities[1];
+ else
+ ability = gBaseStats[species].abilities[0];
+ if (ability == ABILITY_PICKUP && species != SPECIES_NONE && species != SPECIES_EGG && heldItem == ITEM_NONE && !(Random() % 10))
+ {
+ s32 random = Random() % 100;
+
+ for (j = 0; j < 15; ++j)
+ if (sPickupItems[j].chance > random)
+ break;
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sPickupItems[j]);
+ }
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkE6_docastformchangeanimation(void)
+{
+ gActiveBattler = gBattleScripting.battler;
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE)
+ *(&gBattleStruct->formToChangeInto) |= 0x80;
+ BtlController_EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, gBattleStruct->formToChangeInto);
+ MarkBattlerForControllerExec(gActiveBattler);
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkE7_trycastformdatachange(void)
+{
+ u8 form;
+
+ ++gBattlescriptCurrInstr;
+ form = CastformDataTypeChange(gBattleScripting.battler);
+ if (form)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
+ *(&gBattleStruct->formToChangeInto) = form - 1;
+ }
+}
+
+static void atkE8_settypebasedhalvers(void) // water and mud sport
+{
+ bool8 worked = FALSE;
+
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT)
+ {
+ if (!(gStatuses3[gBattlerAttacker] & STATUS3_MUDSPORT))
+ {
+ gStatuses3[gBattlerAttacker] |= STATUS3_MUDSPORT;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ worked = TRUE;
+ }
+ }
+ else // water sport
+ {
+ if (!(gStatuses3[gBattlerAttacker] & STATUS3_WATERSPORT))
+ {
+ gStatuses3[gBattlerAttacker] |= STATUS3_WATERSPORT;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ worked = TRUE;
+ }
+ }
+ if (worked)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+}
+
+static void atkE9_setweatherballtype(void)
+{
+ if (WEATHER_HAS_EFFECT)
+ {
+ if (gBattleWeather & WEATHER_ANY)
+ gBattleScripting.dmgMultiplier = 2;
+ if (gBattleWeather & WEATHER_RAIN_ANY)
+ *(&gBattleStruct->dynamicMoveType) = TYPE_WATER | 0x80;
+ else if (gBattleWeather & WEATHER_SANDSTORM_ANY)
+ *(&gBattleStruct->dynamicMoveType) = TYPE_ROCK | 0x80;
+ else if (gBattleWeather & WEATHER_SUN_ANY)
+ *(&gBattleStruct->dynamicMoveType) = TYPE_FIRE | 0x80;
+ else if (gBattleWeather & WEATHER_HAIL_ANY)
+ *(&gBattleStruct->dynamicMoveType) = TYPE_ICE | 0x80;
+ else
+ *(&gBattleStruct->dynamicMoveType) = TYPE_NORMAL | 0x80;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkEA_tryrecycleitem(void)
+{
+ u16 *usedHeldItem;
+
+ gActiveBattler = gBattlerAttacker;
+ usedHeldItem = &gBattleStruct->usedHeldItems[gActiveBattler];
+ if (*usedHeldItem != ITEM_NONE && gBattleMons[gActiveBattler].item == ITEM_NONE)
+ {
+ gLastUsedItem = *usedHeldItem;
+ *usedHeldItem = ITEM_NONE;
+ gBattleMons[gActiveBattler].item = gLastUsedItem;
+ BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBattler].item);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkEB_settypetoterrain(void)
+{
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]))
+ {
+ SET_BATTLER_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain]);
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkEC_pursuitrelated(void)
+{
+ gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !(gAbsentBattlerFlags & gBitTable[gActiveBattler])
+ && gChosenActionByBattler[gActiveBattler] == 0
+ && gChosenMoveByBattler[gActiveBattler] == MOVE_PURSUIT)
+ {
+ gActionsByTurnOrder[gActiveBattler] = 11;
+ gCurrentMove = MOVE_PURSUIT;
+ gBattlescriptCurrInstr += 5;
+ gBattleScripting.animTurn = 1;
+ gBattleScripting.field_20 = gBattlerAttacker;
+ gBattlerAttacker = gActiveBattler;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static void atkED_snatchsetbattlers(void)
+{
+ gEffectBattler = gBattlerAttacker;
+ if (gBattlerAttacker == gBattlerTarget)
+ gBattlerAttacker = gBattlerTarget = gBattleScripting.battler;
+ else
+ gBattlerTarget = gBattleScripting.battler;
+ gBattleScripting.battler = gEffectBattler;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkEE_removelightscreenreflect(void) // brick break
+{
+ u8 opposingSide = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
+
+ if (gSideTimers[opposingSide].reflectTimer || gSideTimers[opposingSide].lightscreenTimer)
+ {
+ gSideStatuses[opposingSide] &= ~(SIDE_STATUS_REFLECT);
+ gSideStatuses[opposingSide] &= ~(SIDE_STATUS_LIGHTSCREEN);
+ gSideTimers[opposingSide].reflectTimer = 0;
+ gSideTimers[opposingSide].lightscreenTimer = 0;
+ gBattleScripting.animTurn = 1;
+ gBattleScripting.animTargetsHit = 1;
+ }
+ else
+ {
+ gBattleScripting.animTurn = 0;
+ gBattleScripting.animTargetsHit = 0;
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkEF_handleballthrow(void)
+{
+ u8 ballMultiplier = 0;
+
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = gBattlerAttacker;
+ gBattlerTarget = gBattlerAttacker ^ BIT_SIDE;
+ if (gBattleTypeFlags & BATTLE_TYPE_GHOST)
+ {
+ BtlController_EmitBallThrowAnim(0, BALL_GHOST_DODGE);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr = BattleScript_GhostBallDodge;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ BtlController_EmitBallThrowAnim(0, BALL_TRAINER_BLOCK);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr = BattleScript_TrainerBallBlock;
+ }
+ else if (gBattleTypeFlags & (BATTLE_TYPE_POKEDUDE | BATTLE_TYPE_OLDMAN_TUTORIAL))
+ {
+ BtlController_EmitBallThrowAnim(0, BALL_3_SHAKES_SUCCESS);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr = gUnknown_81D9A88;
+ }
+ else
+ {
+ u32 odds;
+ u8 catchRate;
+
+ if (gLastUsedItem == ITEM_SAFARI_BALL)
+ catchRate = gBattleStruct->safariCatchFactor * 1275 / 100;
+ else
+ catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate;
+
+ if (gLastUsedItem > ITEM_SAFARI_BALL)
+ {
+ switch (gLastUsedItem)
+ {
+ case ITEM_NET_BALL:
+ if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_BUG))
+ ballMultiplier = 30;
+ else
+ ballMultiplier = 10;
+ break;
+ case ITEM_DIVE_BALL:
+ if (GetCurrentMapType() == MAP_TYPE_UNDERWATER)
+ ballMultiplier = 35;
+ else
+ ballMultiplier = 10;
+ break;
+ case ITEM_NEST_BALL:
+ if (gBattleMons[gBattlerTarget].level < 40)
+ {
+ ballMultiplier = 40 - gBattleMons[gBattlerTarget].level;
+ if (ballMultiplier <= 9)
+ ballMultiplier = 10;
+ }
+ else
+ {
+ ballMultiplier = 10;
+ }
+ break;
+ case ITEM_REPEAT_BALL:
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), FLAG_GET_CAUGHT))
+ ballMultiplier = 30;
+ else
+ ballMultiplier = 10;
+ break;
+ case ITEM_TIMER_BALL:
+ ballMultiplier = gBattleResults.battleTurnCounter + 10;
+ if (ballMultiplier > 40)
+ ballMultiplier = 40;
+ break;
+ case ITEM_LUXURY_BALL:
+ case ITEM_PREMIER_BALL:
+ ballMultiplier = 10;
+ break;
+ }
+ }
+ else
+ ballMultiplier = sBallCatchBonuses[gLastUsedItem - 2];
+ odds = (catchRate * ballMultiplier / 10)
+ * (gBattleMons[gBattlerTarget].maxHP * 3 - gBattleMons[gBattlerTarget].hp * 2)
+ / (3 * gBattleMons[gBattlerTarget].maxHP);
+ if (gBattleMons[gBattlerTarget].status1 & (STATUS1_SLEEP | STATUS1_FREEZE))
+ odds *= 2;
+ if (gBattleMons[gBattlerTarget].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON))
+ odds = (odds * 15) / 10;
+ if (gLastUsedItem != ITEM_SAFARI_BALL)
+ {
+ if (gLastUsedItem == ITEM_MASTER_BALL)
+ {
+ gBattleResults.usedMasterBall = TRUE;
+ }
+ else
+ {
+ if (gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL] < 0xFF)
+ gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL]++;
+ }
+ }
+ if (odds > 254) // mon caught
+ {
+ BtlController_EmitBallThrowAnim(0, BALL_3_SHAKES_SUCCESS);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
+ SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
+ if (CalculatePlayerPartyCount() == 6)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else // mon may be caught, calculate shakes
+ {
+ u8 shakes;
+
+ odds = Sqrt(Sqrt(16711680 / odds));
+ odds = 1048560 / odds;
+ for (shakes = 0; shakes < 4 && Random() < odds; ++shakes);
+ if (gLastUsedItem == ITEM_MASTER_BALL)
+ shakes = BALL_3_SHAKES_SUCCESS; // why calculate the shakes before that check?
+ BtlController_EmitBallThrowAnim(0, shakes);
+ MarkBattlerForControllerExec(gActiveBattler);
+ if (shakes == BALL_3_SHAKES_SUCCESS) // mon caught, copy of the code above
+ {
+ gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
+ SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
+ if (CalculatePlayerPartyCount() == 6)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else // not caught
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = shakes;
+ gBattlescriptCurrInstr = BattleScript_ShakeBallThrow;
+ }
+ }
+ }
+ }
+}
+
+static void atkF0_givecaughtmon(void)
+{
+ if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]]) != MON_GIVEN_TO_PARTY)
+ {
+ if (!sub_80CC7B4())
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_0x4037)));
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2);
+ }
+ else
+ {
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_0x4037)));
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2);
+ StringCopy(gStringVar3, GetBoxNamePtr(get_unknown_box_id()));
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC))
+ ++gBattleCommunication[MULTISTRING_CHOOSER];
+ }
+ gBattleResults.caughtMonSpecies = gBattleMons[gBattlerAttacker ^ BIT_SIDE].species;
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleResults.caughtMonNick);
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkF1_trysetcaughtmondexflags(void)
+{
+ u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
+ u32 personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL);
+
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ HandleSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_SET_CAUGHT, personality);
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void atkF2_displaydexinfo(void)
+{
+ u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
+
+ switch (gBattleCommunication[0])
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITE);
+ ++gBattleCommunication[0];
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ FreeAllWindowBuffers();
+ gBattleCommunication[TASK_ID] = sub_8106B60(species);
+ ++gBattleCommunication[0];
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active
+ && gMain.callback2 == BattleMainCB2
+ && !gTasks[gBattleCommunication[TASK_ID]].isActive)
+ {
+ CpuFill32(0, (void *)VRAM, VRAM_SIZE);
+ SetVBlankCallback(VBlankCB_Battle);
+ ++gBattleCommunication[0];
+ }
+ break;
+ case 3:
+ sub_800F34C();
+ LoadBattleTextboxAndBackground();
+ gBattle_BG3_X = 0x100;
+ ++gBattleCommunication[0];
+ break;
+ case 4:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ CreateMonPicSprite_HandleDeoxys(species,
+ gBattleMons[B_POSITION_OPPONENT_LEFT].otId,
+ gBattleMons[B_POSITION_OPPONENT_LEFT].personality,
+ TRUE,
+ 120,
+ 64,
+ 0,
+ 0xFFFF);
+ CpuFill32(0, gPlttBufferFaded, BG_PLTT_SIZE);
+ BeginNormalPaletteFade(0x1FFFF, 0, 0x10, 0, RGB_BLACK);
+ ShowBg(0);
+ ShowBg(3);
+ ++gBattleCommunication[0];
+ }
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ ++gBattlescriptCurrInstr;
+ break;
+ }
+}
+
+void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
+{
+ s32 destY, destX;
+ u16 var = 0;
+
+ for (destY = yStart; destY <= yEnd; ++destY)
+ {
+ for (destX = xStart; destX <= xEnd; ++destX)
+ {
+ if (destY == yStart)
+ {
+ if (destX == xStart)
+ var = 0x1022;
+ else if (destX == xEnd)
+ var = 0x1024;
+ else
+ var = 0x1023;
+ }
+ else if (destY == yEnd)
+ {
+ if (destX == xStart)
+ var = 0x1028;
+ else if (destX == xEnd)
+ var = 0x102A;
+ else
+ var = 0x1029;
+ }
+ else
+ {
+ if (destX == xStart)
+ var = 0x1025;
+ else if (destX == xEnd)
+ var = 0x1027;
+ else
+ var = 0x1026;
+ }
+ if (flags & WINDOW_CLEAR)
+ var = 0;
+ if (flags & WINDOW_x80)
+ CopyToBgTilemapBufferRect_ChangePalette(1, &var, destX, destY, 1, 1, 0x11);
+ else
+ CopyToBgTilemapBufferRect_ChangePalette(0, &var, destX, destY, 1, 1, 0x11);
+ }
+ }
+ CopyBgTilemapBufferToVram(1);
+}
+
+void BattleCreateYesNoCursorAt(void)
+{
+ u16 src[2];
+
+ src[0] = 1;
+ src[1] = 2;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 0x18, 9 + (2 * gBattleCommunication[1]), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void BattleDestroyYesNoCursorAt(void)
+{
+ u16 src[2];
+
+ src[0] = 32;
+ src[1] = 32;
+ CopyToBgTilemapBufferRect_ChangePalette(0, src, 0x18, 9 + (2 * gBattleCommunication[1]), 1, 2, 0x11);
+ CopyBgTilemapBufferToVram(0);
+}
+
+static void atkF3_trygivecaughtmonnick(void)
+{
+ switch (gBattleCommunication[MULTIUSE_STATE])
+ {
+ case 0:
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, 0);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xE);
+ ++gBattleCommunication[MULTIUSE_STATE];
+ gBattleCommunication[CURSOR_POSITION] = 0;
+ BattleCreateYesNoCursorAt();
+ break;
+ case 1:
+ if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ gBattleCommunication[CURSOR_POSITION] = 0;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ gBattleCommunication[CURSOR_POSITION] = 1;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ if (gBattleCommunication[CURSOR_POSITION] == 0)
+ {
+ ++gBattleCommunication[MULTIUSE_STATE];
+ BeginFastPaletteFade(3);
+ }
+ else
+ {
+ gBattleCommunication[MULTIUSE_STATE] = 4;
+ }
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ gBattleCommunication[MULTIUSE_STATE] = 4;
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
+ FreeAllWindowBuffers();
+ DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gBattleStruct->caughtMonNick,
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_SPECIES),
+ GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]]),
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_PERSONALITY, NULL),
+ BattleMainCB2);
+ ++gBattleCommunication[MULTIUSE_STATE];
+ }
+ break;
+ case 3:
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ break;
+ case 4:
+ if (CalculatePlayerPartyCount() == PARTY_SIZE)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ break;
+ }
+}
+
+static void atkF4_subattackerhpbydmg(void)
+{
+ gBattleMons[gBattlerAttacker].hp -= gBattleMoveDamage;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkF5_removeattackerstatus1(void)
+{
+ gBattleMons[gBattlerAttacker].status1 = 0;
+ ++gBattlescriptCurrInstr;
+}
+
+static void atkF6_finishaction(void)
+{
+ gCurrentActionFuncId = B_ACTION_FINISHED;
+}
+
+static void atkF7_finishturn(void)
+{
+ gCurrentActionFuncId = B_ACTION_FINISHED;
+ gCurrentTurnActionNumber = gBattlersCount;
+}
diff --git a/src/battle_util.c b/src/battle_util.c
new file mode 100644
index 000000000..b8360758c
--- /dev/null
+++ b/src/battle_util.c
@@ -0,0 +1,3200 @@
+#include "global.h"
+#include "item.h"
+#include "text.h"
+#include "util.h"
+#include "link.h"
+#include "berry.h"
+#include "random.h"
+#include "pokemon.h"
+#include "string_util.h"
+#include "field_weather.h"
+#include "event_data.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_scripts.h"
+#include "battle_message.h"
+#include "constants/battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_string_ids.h"
+#include "battle_ai_script_commands.h"
+#include "constants/battle.h"
+#include "constants/moves.h"
+#include "constants/items.h"
+#include "constants/flags.h"
+#include "constants/species.h"
+#include "constants/weather.h"
+#include "constants/abilities.h"
+#include "constants/pokemon.h"
+#include "constants/hold_effects.h"
+#include "constants/battle_move_effects.h"
+#include "constants/battle_script_commands.h"
+
+static const u16 sSoundMovesTable[] =
+{
+ MOVE_GROWL, MOVE_ROAR, MOVE_SING, MOVE_SUPERSONIC, MOVE_SCREECH, MOVE_SNORE,
+ MOVE_UPROAR, MOVE_METAL_SOUND, MOVE_GRASS_WHISTLE, MOVE_HYPER_VOICE, 0xFFFF
+};
+
+u8 GetBattlerForBattleScript(u8 caseId)
+{
+ u32 ret = 0;
+
+ switch (caseId)
+ {
+ case BS_TARGET:
+ ret = gBattlerTarget;
+ break;
+ case BS_ATTACKER:
+ ret = gBattlerAttacker;
+ break;
+ case BS_EFFECT_BATTLER:
+ ret = gEffectBattler;
+ break;
+ case BS_BATTLER_0:
+ ret = 0;
+ break;
+ case BS_SCRIPTING:
+ ret = gBattleScripting.battler;
+ break;
+ case BS_FAINTED:
+ ret = gBattlerFainted;
+ break;
+ case 5:
+ ret = gBattlerFainted;
+ break;
+ case BS_PLAYER1:
+ ret = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ break;
+ case BS_OPPONENT1:
+ ret = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ break;
+ case 4:
+ case 6:
+ case 8:
+ case 9:
+ break;
+ }
+ return ret;
+}
+
+void PressurePPLose(u8 target, u8 attacker, u16 move)
+{
+ s32 i;
+
+ if (gBattleMons[target].ability == ABILITY_PRESSURE)
+ {
+ for (i = 0; i < MAX_MON_MOVES && gBattleMons[attacker].moves[i] != move; ++i);
+ if (i != MAX_MON_MOVES)
+ {
+ if (gBattleMons[attacker].pp[i])
+ --gBattleMons[attacker].pp[i];
+ if (!(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[attacker].mimickedMoves & gBitTable[i]))
+ {
+ gActiveBattler = attacker;
+ BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBattler].pp[i]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ }
+}
+
+void PressurePPLoseOnUsingImprison(u8 attacker)
+{
+ s32 i, j;
+ s32 imprisonPos = 4;
+ u8 atkSide = GetBattlerSide(attacker);
+
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (atkSide != GetBattlerSide(i) && gBattleMons[i].ability == ABILITY_PRESSURE)
+ {
+ for (j = 0; j < MAX_MON_MOVES && gBattleMons[attacker].moves[j] != MOVE_IMPRISON; ++j);
+ if (j != MAX_MON_MOVES)
+ {
+ imprisonPos = j;
+ if (gBattleMons[attacker].pp[j])
+ --gBattleMons[attacker].pp[j];
+ }
+ }
+ }
+ if (imprisonPos != 4
+ && !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[attacker].mimickedMoves & gBitTable[imprisonPos]))
+ {
+ gActiveBattler = attacker;
+ BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + imprisonPos, 0, 1, &gBattleMons[gActiveBattler].pp[imprisonPos]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+}
+
+void PressurePPLoseOnUsingPerishSong(u8 attacker)
+{
+ s32 i, j;
+ s32 perishSongPos = 4;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ABILITY_PRESSURE && i != attacker)
+ {
+ for (j = 0; j < MAX_MON_MOVES && gBattleMons[attacker].moves[j] != MOVE_PERISH_SONG; ++j);
+ if (j != MAX_MON_MOVES)
+ {
+ perishSongPos = j;
+ if (gBattleMons[attacker].pp[j])
+ --gBattleMons[attacker].pp[j];
+ }
+ }
+ }
+ if (perishSongPos != MAX_MON_MOVES
+ && !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[attacker].mimickedMoves & gBitTable[perishSongPos]))
+ {
+ gActiveBattler = attacker;
+ BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + perishSongPos, 0, 1, &gBattleMons[gActiveBattler].pp[perishSongPos]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+}
+
+void MarkAllBattlersForControllerExec(void)
+{
+ s32 i;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ for (i = 0; i < gBattlersCount; ++i)
+ gBattleControllerExecFlags |= gBitTable[i] << 0x1C;
+ else
+ for (i = 0; i < gBattlersCount; ++i)
+ gBattleControllerExecFlags |= gBitTable[i];
+}
+
+void MarkBattlerForControllerExec(u8 battlerId)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ gBattleControllerExecFlags |= gBitTable[battlerId] << 0x1C;
+ else
+ gBattleControllerExecFlags |= gBitTable[battlerId];
+}
+
+void sub_8017298(u8 arg0)
+{
+ s32 i;
+
+ for (i = 0; i < GetLinkPlayerCount(); ++i)
+ gBattleControllerExecFlags |= gBitTable[arg0] << (i << 2);
+ gBattleControllerExecFlags &= ~(0x10000000 << arg0);
+}
+
+void CancelMultiTurnMoves(u8 battler)
+{
+ gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS);
+ gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE);
+ gBattleMons[battler].status2 &= ~(STATUS2_UPROAR);
+ gBattleMons[battler].status2 &= ~(STATUS2_BIDE);
+ gStatuses3[battler] &= ~(STATUS3_SEMI_INVULNERABLE);
+ gDisableStructs[battler].rolloutTimer = 0;
+ gDisableStructs[battler].furyCutterCounter = 0;
+}
+
+bool8 WasUnableToUseMove(u8 battler)
+{
+ if (gProtectStructs[battler].prlzImmobility
+ || gProtectStructs[battler].targetNotAffected
+ || gProtectStructs[battler].usedImprisonedMove
+ || gProtectStructs[battler].loveImmobility
+ || gProtectStructs[battler].usedDisabledMove
+ || gProtectStructs[battler].usedTauntedMove
+ || gProtectStructs[battler].flag2Unknown
+ || gProtectStructs[battler].flinchImmobility
+ || gProtectStructs[battler].confusionSelfDmg)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void PrepareStringBattle(u16 stringId, u8 battler)
+{
+ gActiveBattler = battler;
+ BtlController_EmitPrintString(0, stringId);
+ MarkBattlerForControllerExec(gActiveBattler);
+}
+
+void ResetSentPokesToOpponentValue(void)
+{
+ s32 i;
+ u32 bits = 0;
+
+ gSentPokesToOpponent[0] = 0;
+ gSentPokesToOpponent[1] = 0;
+ for (i = 0; i < gBattlersCount; i += 2)
+ bits |= gBitTable[gBattlerPartyIndexes[i]];
+ for (i = 1; i < gBattlersCount; i += 2)
+ gSentPokesToOpponent[(i & BIT_FLANK) >> 1] = bits;
+}
+
+void sub_8017434(u8 battler)
+{
+ s32 i = 0;
+ u32 bits = 0;
+
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ {
+ u8 flank = ((battler & BIT_FLANK) >> 1);
+
+ gSentPokesToOpponent[flank] = 0;
+ for (i = 0; i < gBattlersCount; i += 2)
+ if (!(gAbsentBattlerFlags & gBitTable[i]))
+ bits |= gBitTable[gBattlerPartyIndexes[i]];
+ gSentPokesToOpponent[flank] = bits;
+ }
+}
+
+void sub_80174B8(u8 battler)
+{
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ {
+ sub_8017434(battler);
+ }
+ else
+ {
+ s32 i;
+
+ for (i = 1; i < gBattlersCount; ++i)
+ gSentPokesToOpponent[(i & BIT_FLANK) >> 1] |= gBitTable[gBattlerPartyIndexes[battler]];
+ }
+}
+
+void BattleScriptPush(const u8 *bsPtr)
+{
+ gBattleResources->battleScriptsStack->ptr[gBattleResources->battleScriptsStack->size++] = bsPtr;
+}
+
+void BattleScriptPushCursor(void)
+{
+ gBattleResources->battleScriptsStack->ptr[gBattleResources->battleScriptsStack->size++] = gBattlescriptCurrInstr;
+}
+
+void BattleScriptPop(void)
+{
+ gBattlescriptCurrInstr = gBattleResources->battleScriptsStack->ptr[--gBattleResources->battleScriptsStack->size];
+}
+
+u8 TrySetCantSelectMoveBattleScript(void)
+{
+ u8 holdEffect;
+ u8 limitations = 0;
+ u16 move = gBattleMons[gActiveBattler].moves[gBattleBufferB[gActiveBattler][2]];
+ u16 *choicedMove = &gBattleStruct->choicedMove[gActiveBattler];
+
+ if (gDisableStructs[gActiveBattler].disabledMove == move && move != MOVE_NONE)
+ {
+ gBattleScripting.battler = gActiveBattler;
+ gCurrentMove = move;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingDisabledMove;
+ limitations = 1;
+ }
+ if (move == gLastMoves[gActiveBattler] && move != MOVE_STRUGGLE && (gBattleMons[gActiveBattler].status2 & STATUS2_TORMENT))
+ {
+ CancelMultiTurnMoves(gActiveBattler);
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingTormentedMove;
+ ++limitations;
+ }
+ if (gDisableStructs[gActiveBattler].tauntTimer && !gBattleMoves[move].power)
+ {
+ gCurrentMove = move;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveTaunt;
+ ++limitations;
+ }
+ if (GetImprisonedMovesCount(gActiveBattler, move))
+ {
+ gCurrentMove = move;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingImprisonedMove;
+ ++limitations;
+ }
+ if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY)
+ holdEffect = gEnigmaBerries[gActiveBattler].holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item);
+ gPotentialItemEffectBattler = gActiveBattler;
+ if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove && *choicedMove != 0xFFFF && *choicedMove != move)
+ {
+ gCurrentMove = *choicedMove;
+ gLastUsedItem = gBattleMons[gActiveBattler].item;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveChoiceItem;
+ ++limitations;
+ }
+ if (!gBattleMons[gActiveBattler].pp[gBattleBufferB[gActiveBattler][2]])
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingMoveWithNoPP;
+ ++limitations;
+ }
+ return limitations;
+}
+
+u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check)
+{
+ u8 holdEffect;
+ u16 *choicedMove = &gBattleStruct->choicedMove[battlerId];
+ s32 i;
+
+ if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
+ holdEffect = gEnigmaBerries[battlerId].holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[battlerId].item);
+ gPotentialItemEffectBattler = battlerId;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[battlerId].moves[i] == 0 && check & MOVE_LIMITATION_ZEROMOVE)
+ unusableMoves |= gBitTable[i];
+ if (gBattleMons[battlerId].pp[i] == 0 && check & MOVE_LIMITATION_PP)
+ unusableMoves |= gBitTable[i];
+ if (gBattleMons[battlerId].moves[i] == gDisableStructs[battlerId].disabledMove && check & MOVE_LIMITATION_DISABLED)
+ unusableMoves |= gBitTable[i];
+ if (gBattleMons[battlerId].moves[i] == gLastMoves[battlerId] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[battlerId].status2 & STATUS2_TORMENT)
+ unusableMoves |= gBitTable[i];
+ if (gDisableStructs[battlerId].tauntTimer && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[battlerId].moves[i]].power == 0)
+ unusableMoves |= gBitTable[i];
+ if (GetImprisonedMovesCount(battlerId, gBattleMons[battlerId].moves[i]) && check & MOVE_LIMITATION_IMPRISON)
+ unusableMoves |= gBitTable[i];
+ if (gDisableStructs[battlerId].encoreTimer && gDisableStructs[battlerId].encoredMove != gBattleMons[battlerId].moves[i])
+ unusableMoves |= gBitTable[i];
+ if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != gBattleMons[battlerId].moves[i])
+ unusableMoves |= gBitTable[i];
+ }
+ return unusableMoves;
+}
+
+bool8 AreAllMovesUnusable(void)
+{
+ u8 unusable = CheckMoveLimitations(gActiveBattler, 0, 0xFF);
+
+ if (unusable == 0xF) // All moves are unusable.
+ {
+ gProtectStructs[gActiveBattler].noValidMoves = 1;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_NoMovesLeft;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ gBattleBufferB[gActiveBattler][3] = GetBattlerAtPosition((BATTLE_OPPOSITE(GetBattlerPosition(gActiveBattler))) | (Random() & 2));
+ else
+ gBattleBufferB[gActiveBattler][3] = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(gActiveBattler)));
+ }
+ else
+ {
+ gProtectStructs[gActiveBattler].noValidMoves = 0;
+ }
+ return (unusable == 0xF);
+}
+
+u8 GetImprisonedMovesCount(u8 battlerId, u16 move)
+{
+ s32 i;
+ u8 imprisonedMoves = 0;
+ u8 battlerSide = GetBattlerSide(battlerId);
+
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (battlerSide != GetBattlerSide(i) && gStatuses3[i] & STATUS3_IMPRISONED_OTHERS)
+ {
+ s32 j;
+
+ for (j = 0; j < MAX_MON_MOVES && move != gBattleMons[i].moves[j]; ++j);
+ if (j < MAX_MON_MOVES)
+ ++imprisonedMoves;
+ }
+ }
+ return imprisonedMoves;
+}
+
+enum
+{
+ ENDTURN_ORDER,
+ ENDTURN_REFLECT,
+ ENDTURN_LIGHT_SCREEN,
+ ENDTURN_MIST,
+ ENDTURN_SAFEGUARD,
+ ENDTURN_WISH,
+ ENDTURN_RAIN,
+ ENDTURN_SANDSTORM,
+ ENDTURN_SUN,
+ ENDTURN_HAIL,
+ ENDTURN_FIELD_COUNT,
+};
+
+u8 DoFieldEndTurnEffects(void)
+{
+ u8 effect = 0;
+ s32 i;
+
+ for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount && gAbsentBattlerFlags & gBitTable[gBattlerAttacker]; ++gBattlerAttacker);
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount && gAbsentBattlerFlags & gBitTable[gBattlerTarget]; ++gBattlerTarget);
+ do
+ {
+ u8 side;
+
+ switch (gBattleStruct->turnCountersTracker)
+ {
+ case ENDTURN_ORDER:
+ for (i = 0; i < gBattlersCount; ++i)
+ gBattlerByTurnOrder[i] = i;
+ for (i = 0; i < gBattlersCount - 1; ++i)
+ {
+ s32 j;
+
+ for (j = i + 1; j < gBattlersCount; ++j)
+ if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], 0))
+ SwapTurnOrder(i, j);
+ }
+ {
+ u8 *var = &gBattleStruct->turnCountersTracker;
+
+ ++*var;
+ gBattleStruct->turnSideTracker = 0;
+ }
+ // fall through
+ case ENDTURN_REFLECT:
+ while (gBattleStruct->turnSideTracker < 2)
+ {
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].reflectBattlerId;
+ if (gSideStatuses[side] & SIDE_STATUS_REFLECT)
+ {
+ if (--gSideTimers[side].reflectTimer == 0)
+ {
+ gSideStatuses[side] &= ~SIDE_STATUS_REFLECT;
+ BattleScriptExecute(BattleScript_SideStatusWoreOff);
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_REFLECT);
+ ++effect;
+ }
+ }
+ ++gBattleStruct->turnSideTracker;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ {
+ ++gBattleStruct->turnCountersTracker;
+ gBattleStruct->turnSideTracker = 0;
+ }
+ break;
+ case ENDTURN_LIGHT_SCREEN:
+ while (gBattleStruct->turnSideTracker < 2)
+ {
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].lightscreenBattlerId;
+ if (gSideStatuses[side] & SIDE_STATUS_LIGHTSCREEN)
+ {
+ if (--gSideTimers[side].lightscreenTimer == 0)
+ {
+ gSideStatuses[side] &= ~SIDE_STATUS_LIGHTSCREEN;
+ BattleScriptExecute(BattleScript_SideStatusWoreOff);
+ gBattleCommunication[MULTISTRING_CHOOSER] = side;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_LIGHT_SCREEN);
+ ++effect;
+ }
+ }
+ ++gBattleStruct->turnSideTracker;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ {
+ ++gBattleStruct->turnCountersTracker;
+ gBattleStruct->turnSideTracker = 0;
+ }
+ break;
+ case ENDTURN_MIST:
+ while (gBattleStruct->turnSideTracker < 2)
+ {
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].mistBattlerId;
+ if (gSideTimers[side].mistTimer != 0 && --gSideTimers[side].mistTimer == 0)
+ {
+ gSideStatuses[side] &= ~SIDE_STATUS_MIST;
+ BattleScriptExecute(BattleScript_SideStatusWoreOff);
+ gBattleCommunication[MULTISTRING_CHOOSER] = side;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_MIST);
+ ++effect;
+ }
+ ++gBattleStruct->turnSideTracker;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ {
+ ++gBattleStruct->turnCountersTracker;
+ gBattleStruct->turnSideTracker = 0;
+ }
+ break;
+ case ENDTURN_SAFEGUARD:
+ while (gBattleStruct->turnSideTracker < 2)
+ {
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].safeguardBattlerId;
+ if (gSideStatuses[side] & SIDE_STATUS_SAFEGUARD)
+ {
+ if (--gSideTimers[side].safeguardTimer == 0)
+ {
+ gSideStatuses[side] &= ~SIDE_STATUS_SAFEGUARD;
+ BattleScriptExecute(BattleScript_SafeguardEnds);
+ ++effect;
+ }
+ }
+ ++gBattleStruct->turnSideTracker;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ {
+ ++gBattleStruct->turnCountersTracker;
+ gBattleStruct->turnSideTracker = 0;
+ }
+ break;
+ case ENDTURN_WISH:
+ while (gBattleStruct->turnSideTracker < gBattlersCount)
+ {
+ gActiveBattler = gBattlerByTurnOrder[gBattleStruct->turnSideTracker];
+ if (gWishFutureKnock.wishCounter[gActiveBattler] != 0
+ && --gWishFutureKnock.wishCounter[gActiveBattler] == 0
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ gBattlerTarget = gActiveBattler;
+ BattleScriptExecute(BattleScript_WishComesTrue);
+ ++effect;
+ }
+ ++gBattleStruct->turnSideTracker;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ ++gBattleStruct->turnCountersTracker;
+ break;
+ case ENDTURN_RAIN:
+ if (gBattleWeather & WEATHER_RAIN_ANY)
+ {
+ if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
+ {
+ if (--gWishFutureKnock.weatherDuration == 0)
+ {
+ gBattleWeather &= ~WEATHER_RAIN_TEMPORARY;
+ gBattleWeather &= ~WEATHER_RAIN_DOWNPOUR;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ BattleScriptExecute(BattleScript_RainContinuesOrEnds);
+ ++effect;
+ }
+ ++gBattleStruct->turnCountersTracker;
+ break;
+ case ENDTURN_SANDSTORM:
+ if (gBattleWeather & WEATHER_SANDSTORM_ANY)
+ {
+ if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
+ {
+ gBattleWeather &= ~WEATHER_SANDSTORM_TEMPORARY;
+ gBattlescriptCurrInstr = BattleScript_SandStormHailEnds;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
+ }
+ gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ BattleScriptExecute(gBattlescriptCurrInstr);
+ ++effect;
+ }
+ ++gBattleStruct->turnCountersTracker;
+ break;
+ case ENDTURN_SUN:
+ if (gBattleWeather & WEATHER_SUN_ANY)
+ {
+ if (!(gBattleWeather & WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
+ {
+ gBattleWeather &= ~WEATHER_SUN_TEMPORARY;
+ gBattlescriptCurrInstr = BattleScript_SunlightFaded;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = BattleScript_SunlightContinues;
+ }
+ BattleScriptExecute(gBattlescriptCurrInstr);
+ ++effect;
+ }
+ ++gBattleStruct->turnCountersTracker;
+ break;
+ case ENDTURN_HAIL:
+ if (gBattleWeather & WEATHER_HAIL_ANY)
+ {
+ if (--gWishFutureKnock.weatherDuration == 0)
+ {
+ gBattleWeather &= ~WEATHER_HAIL;
+ gBattlescriptCurrInstr = BattleScript_SandStormHailEnds;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
+ }
+ gBattleScripting.animArg1 = B_ANIM_HAIL_CONTINUES;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ BattleScriptExecute(gBattlescriptCurrInstr);
+ ++effect;
+ }
+ ++gBattleStruct->turnCountersTracker;
+ break;
+ case ENDTURN_FIELD_COUNT:
+ ++effect;
+ break;
+ }
+ } while (!effect);
+ return (gBattleMainFunc != BattleTurnPassed);
+}
+
+enum
+{
+ ENDTURN_INGRAIN,
+ ENDTURN_ABILITIES,
+ ENDTURN_ITEMS1,
+ ENDTURN_LEECH_SEED,
+ ENDTURN_POISON,
+ ENDTURN_BAD_POISON,
+ ENDTURN_BURN,
+ ENDTURN_NIGHTMARES,
+ ENDTURN_CURSE,
+ ENDTURN_WRAP,
+ ENDTURN_UPROAR,
+ ENDTURN_THRASH,
+ ENDTURN_DISABLE,
+ ENDTURN_ENCORE,
+ ENDTURN_LOCK_ON,
+ ENDTURN_CHARGE,
+ ENDTURN_TAUNT,
+ ENDTURN_YAWN,
+ ENDTURN_ITEMS2,
+ ENDTURN_BATTLER_COUNT
+};
+
+u8 DoBattlerEndTurnEffects(void)
+{
+ u8 effect = 0;
+
+ gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
+ while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= ENDTURN_BATTLER_COUNT)
+ {
+ gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId];
+ if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
+ {
+ ++gBattleStruct->turnEffectsBattlerId;
+ }
+ else
+ {
+ switch (gBattleStruct->turnEffectsTracker)
+ {
+ case ENDTURN_INGRAIN: // ingrain
+ if ((gStatuses3[gActiveBattler] & STATUS3_ROOTED)
+ && gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ BattleScriptExecute(BattleScript_IngrainTurnHeal);
+ ++effect;
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_ABILITIES: // end turn abilities
+ if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBattler, 0, 0, 0))
+ ++effect;
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_ITEMS1: // item effects
+ if (ItemBattleEffects(1, gActiveBattler, FALSE))
+ ++effect;
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_ITEMS2: // item effects again
+ if (ItemBattleEffects(1, gActiveBattler, TRUE))
+ ++effect;
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_LEECH_SEED: // leech seed
+ if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED)
+ && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver.
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleScripting.animArg1 = gBattlerTarget;
+ gBattleScripting.animArg2 = gBattlerAttacker;
+ BattleScriptExecute(BattleScript_LeechSeedTurnDrain);
+ ++effect;
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_POISON: // poison
+ if ((gBattleMons[gActiveBattler].status1 & STATUS1_POISON) && gBattleMons[gActiveBattler].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_PoisonTurnDmg);
+ ++effect;
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_BAD_POISON: // toxic poison
+ if ((gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON) && gBattleMons[gActiveBattler].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if ((gBattleMons[gActiveBattler].status1 & 0xF00) != 0xF00) // not 16 turns
+ gBattleMons[gActiveBattler].status1 += 0x100;
+ gBattleMoveDamage *= (gBattleMons[gActiveBattler].status1 & 0xF00) >> 8;
+ BattleScriptExecute(BattleScript_PoisonTurnDmg);
+ ++effect;
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_BURN: // burn
+ if ((gBattleMons[gActiveBattler].status1 & STATUS1_BURN) && gBattleMons[gActiveBattler].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_BurnTurnDmg);
+ ++effect;
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_NIGHTMARES: // spooky nightmares
+ if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0)
+ {
+ // R/S does not perform this sleep check, which causes the nightmare effect to
+ // persist even after the affected Pokemon has been awakened by Shed Skin.
+ if (gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_NightmareTurnDmg);
+ ++effect;
+ }
+ else
+ {
+ gBattleMons[gActiveBattler].status2 &= ~STATUS2_NIGHTMARE;
+ }
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_CURSE: // curse
+ if ((gBattleMons[gActiveBattler].status2 & STATUS2_CURSED) && gBattleMons[gActiveBattler].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_CurseTurnDmg);
+ ++effect;
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_WRAP: // wrap
+ if ((gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBattler].hp != 0)
+ {
+ gBattleMons[gActiveBattler].status2 -= 0x2000;
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) // damaged by wrap
+ {
+ gBattleScripting.animArg1 = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 0);
+ gBattleScripting.animArg2 = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 1);
+ gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ gBattleTextBuff1[1] = B_BUFF_MOVE;
+ gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 0);
+ gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 1);
+ gBattleTextBuff1[4] = EOS;
+ gBattlescriptCurrInstr = BattleScript_WrapTurnDmg;
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+ else // broke free
+ {
+ gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ gBattleTextBuff1[1] = B_BUFF_MOVE;
+ gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 0);
+ gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 1);
+ gBattleTextBuff1[4] = EOS;
+ gBattlescriptCurrInstr = BattleScript_WrapEnds;
+ }
+ BattleScriptExecute(gBattlescriptCurrInstr);
+ ++effect;
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_UPROAR: // uproar
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR)
+ {
+ for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; ++gBattlerAttacker)
+ {
+ if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
+ && gBattleMons[gBattlerAttacker].ability != ABILITY_SOUNDPROOF)
+ {
+ gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_SLEEP);
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ BattleScriptExecute(BattleScript_MonWokeUpInUproar);
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ }
+ }
+ if (gBattlerAttacker != gBattlersCount)
+ {
+ effect = 2; // a pokemon was awaken
+ break;
+ }
+ else
+ {
+ gBattlerAttacker = gActiveBattler;
+ gBattleMons[gActiveBattler].status2 -= 0x10; // uproar timer goes down
+ if (WasUnableToUseMove(gActiveBattler))
+ {
+ CancelMultiTurnMoves(gActiveBattler);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattleMons[gActiveBattler].status2 |= STATUS2_MULTIPLETURNS;
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ CancelMultiTurnMoves(gActiveBattler);
+ }
+ BattleScriptExecute(BattleScript_PrintUproarOverTurns);
+ effect = 1;
+ }
+ }
+ if (effect != 2)
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_THRASH: // thrash
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
+ {
+ gBattleMons[gActiveBattler].status2 -= 0x400;
+ if (WasUnableToUseMove(gActiveBattler))
+ CancelMultiTurnMoves(gActiveBattler);
+ else if (!(gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
+ && (gBattleMons[gActiveBattler].status2 & STATUS2_MULTIPLETURNS))
+ {
+ gBattleMons[gActiveBattler].status2 &= ~(STATUS2_MULTIPLETURNS);
+ if (!(gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION))
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER;
+ SetMoveEffect(1, 0);
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION)
+ BattleScriptExecute(BattleScript_ThrashConfuses);
+ ++effect;
+ }
+ }
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_DISABLE: // disable
+ if (gDisableStructs[gActiveBattler].disableTimer != 0)
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gDisableStructs[gActiveBattler].disabledMove == gBattleMons[gActiveBattler].moves[i])
+ break;
+ }
+ if (i == MAX_MON_MOVES) // pokemon does not have the disabled move anymore
+ {
+ gDisableStructs[gActiveBattler].disabledMove = MOVE_NONE;
+ gDisableStructs[gActiveBattler].disableTimer = 0;
+ }
+ else if (--gDisableStructs[gActiveBattler].disableTimer == 0) // disable ends
+ {
+ gDisableStructs[gActiveBattler].disabledMove = MOVE_NONE;
+ BattleScriptExecute(BattleScript_DisabledNoMore);
+ ++effect;
+ }
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_ENCORE: // encore
+ if (gDisableStructs[gActiveBattler].encoreTimer != 0)
+ {
+ if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // pokemon does not have the encored move anymore
+ {
+ gDisableStructs[gActiveBattler].encoredMove = MOVE_NONE;
+ gDisableStructs[gActiveBattler].encoreTimer = 0;
+ }
+ else if (--gDisableStructs[gActiveBattler].encoreTimer == 0
+ || gBattleMons[gActiveBattler].pp[gDisableStructs[gActiveBattler].encoredMovePos] == 0)
+ {
+ gDisableStructs[gActiveBattler].encoredMove = MOVE_NONE;
+ gDisableStructs[gActiveBattler].encoreTimer = 0;
+ BattleScriptExecute(BattleScript_EncoredNoMore);
+ ++effect;
+ }
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_LOCK_ON: // lock-on decrement
+ if (gStatuses3[gActiveBattler] & STATUS3_ALWAYS_HITS)
+ gStatuses3[gActiveBattler] -= 0x8;
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_CHARGE: // charge
+ if (gDisableStructs[gActiveBattler].chargeTimer && --gDisableStructs[gActiveBattler].chargeTimer == 0)
+ gStatuses3[gActiveBattler] &= ~STATUS3_CHARGED_UP;
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_TAUNT: // taunt
+ if (gDisableStructs[gActiveBattler].tauntTimer)
+ --gDisableStructs[gActiveBattler].tauntTimer;
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_YAWN: // yawn
+ if (gStatuses3[gActiveBattler] & STATUS3_YAWN)
+ {
+ gStatuses3[gActiveBattler] -= 0x800;
+ if (!(gStatuses3[gActiveBattler] & STATUS3_YAWN) && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)
+ && gBattleMons[gActiveBattler].ability != ABILITY_VITAL_SPIRIT
+ && gBattleMons[gActiveBattler].ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBattler))
+ {
+ CancelMultiTurnMoves(gActiveBattler);
+ gBattleMons[gActiveBattler].status1 |= (Random() & 3) + 2;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gEffectBattler = gActiveBattler;
+ BattleScriptExecute(BattleScript_YawnMakesAsleep);
+ ++effect;
+ }
+ }
+ ++gBattleStruct->turnEffectsTracker;
+ break;
+ case ENDTURN_BATTLER_COUNT: // done
+ gBattleStruct->turnEffectsTracker = 0;
+ ++gBattleStruct->turnEffectsBattlerId;
+ break;
+ }
+ if (effect)
+ return effect;
+ }
+ }
+ gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20);
+ return 0;
+}
+
+bool8 HandleWishPerishSongOnTurnEnd(void)
+{
+ gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
+ switch (gBattleStruct->wishPerishSongState)
+ {
+ case 0:
+ while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount)
+ {
+ gActiveBattler = gBattleStruct->wishPerishSongBattlerId;
+ if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
+ {
+ ++gBattleStruct->wishPerishSongBattlerId;
+ continue;
+ }
+ ++gBattleStruct->wishPerishSongBattlerId;
+ if (gWishFutureKnock.futureSightCounter[gActiveBattler] != 0
+ && --gWishFutureKnock.futureSightCounter[gActiveBattler] == 0
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ if (gWishFutureKnock.futureSightMove[gActiveBattler] == MOVE_FUTURE_SIGHT)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gWishFutureKnock.futureSightMove[gActiveBattler]);
+ gBattlerTarget = gActiveBattler;
+ gBattlerAttacker = gWishFutureKnock.futureSightAttacker[gActiveBattler];
+ gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBattler];
+ gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF;
+ BattleScriptExecute(BattleScript_MonTookFutureAttack);
+ return TRUE;
+ }
+ }
+ {
+ u8 *state = &gBattleStruct->wishPerishSongState;
+
+ *state = 1;
+ gBattleStruct->wishPerishSongBattlerId = 0;
+ }
+ // fall through
+ case 1:
+ while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount)
+ {
+ gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->wishPerishSongBattlerId];
+ if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
+ {
+ ++gBattleStruct->wishPerishSongBattlerId;
+ continue;
+ }
+ ++gBattleStruct->wishPerishSongBattlerId;
+ if (gStatuses3[gActiveBattler] & STATUS3_PERISH_SONG)
+ {
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gActiveBattler].perishSongTimer);
+ if (gDisableStructs[gActiveBattler].perishSongTimer == 0)
+ {
+ gStatuses3[gActiveBattler] &= ~STATUS3_PERISH_SONG;
+ gBattleMoveDamage = gBattleMons[gActiveBattler].hp;
+ gBattlescriptCurrInstr = BattleScript_PerishSongTakesLife;
+ }
+ else
+ {
+ --gDisableStructs[gActiveBattler].perishSongTimer;
+ gBattlescriptCurrInstr = BattleScript_PerishSongCountGoesDown;
+ }
+ BattleScriptExecute(gBattlescriptCurrInstr);
+ return TRUE;
+ }
+ }
+ break;
+ }
+ gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20);
+ return FALSE;
+}
+
+#define FAINTED_ACTIONS_MAX_CASE 7
+
+bool8 HandleFaintedMonActions(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ return FALSE;
+ do
+ {
+ s32 i;
+ switch (gBattleStruct->faintedActionsState)
+ {
+ case 0:
+ gBattleStruct->faintedActionsBattlerId = 0;
+ ++gBattleStruct->faintedActionsState;
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gAbsentBattlerFlags & gBitTable[i] && !HasNoMonsToSwitch(i, 6, 6))
+ gAbsentBattlerFlags &= ~(gBitTable[i]);
+ }
+ // fall through
+ case 1:
+ do
+ {
+ gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId;
+ if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0
+ && !(gBattleStruct->givenExpMons & gBitTable[gBattlerPartyIndexes[gBattleStruct->faintedActionsBattlerId]])
+ && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId]))
+ {
+ BattleScriptExecute(BattleScript_GiveExp);
+ gBattleStruct->faintedActionsState = 2;
+ return TRUE;
+ }
+ } while (++gBattleStruct->faintedActionsBattlerId != gBattlersCount);
+ gBattleStruct->faintedActionsState = 3;
+ break;
+ case 2:
+ sub_8017434(gBattlerFainted);
+ if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount)
+ gBattleStruct->faintedActionsState = 3;
+ else
+ gBattleStruct->faintedActionsState = 1;
+ break;
+ case 3:
+ gBattleStruct->faintedActionsBattlerId = 0;
+ ++gBattleStruct->faintedActionsState;
+ // fall through
+ case 4:
+ do
+ {
+ gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId;
+ if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0
+ && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId]))
+ {
+ BattleScriptExecute(BattleScript_HandleFaintedMon);
+ gBattleStruct->faintedActionsState = 5;
+ return TRUE;
+ }
+ } while (++gBattleStruct->faintedActionsBattlerId != gBattlersCount);
+ gBattleStruct->faintedActionsState = 6;
+ break;
+ case 5:
+ if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount)
+ gBattleStruct->faintedActionsState = 6;
+ else
+ gBattleStruct->faintedActionsState = 4;
+ break;
+ case 6:
+ if (AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE1, 0, 0, 0, 0) || AbilityBattleEffects(ABILITYEFFECT_TRACE, 0, 0, 0, 0) || ItemBattleEffects(1, 0, TRUE) || AbilityBattleEffects(ABILITYEFFECT_FORECAST, 0, 0, 0, 0))
+ return TRUE;
+ ++gBattleStruct->faintedActionsState;
+ break;
+ case FAINTED_ACTIONS_MAX_CASE:
+ break;
+ }
+ } while (gBattleStruct->faintedActionsState != FAINTED_ACTIONS_MAX_CASE);
+ return FALSE;
+}
+
+void TryClearRageStatuses(void)
+{
+ s32 i;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ if ((gBattleMons[i].status2 & STATUS2_RAGE) && gChosenMoveByBattler[i] != MOVE_RAGE)
+ gBattleMons[i].status2 &= ~(STATUS2_RAGE);
+}
+
+enum
+{
+ CANCELLER_FLAGS,
+ CANCELLER_ASLEEP,
+ CANCELLER_FROZEN,
+ CANCELLER_TRUANT,
+ CANCELLER_RECHARGE,
+ CANCELLER_FLINCH,
+ CANCELLER_DISABLED,
+ CANCELLER_TAUNTED,
+ CANCELLER_IMPRISONED,
+ CANCELLER_CONFUSED,
+ CANCELLER_PARALYSED,
+ CANCELLER_GHOST,
+ CANCELLER_IN_LOVE,
+ CANCELLER_BIDE,
+ CANCELLER_THAW,
+ CANCELLER_END,
+};
+
+u8 AtkCanceller_UnableToUseMove(void)
+{
+ u8 effect = 0;
+ s32 *bideDmg = &gBattleScripting.bideDmg;
+
+ do
+ {
+ switch (gBattleStruct->atkCancellerTracker)
+ {
+ case CANCELLER_FLAGS: // flags clear
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_DESTINY_BOND);
+ gStatuses3[gBattlerAttacker] &= ~(STATUS3_GRUDGE);
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_ASLEEP: // check being asleep
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
+ {
+ if (UproarWakeUpCheck(gBattlerAttacker))
+ {
+ gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_SLEEP);
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ BattleScriptPushCursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
+ effect = 2;
+ }
+ else
+ {
+ u8 toSub;
+
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_EARLY_BIRD)
+ toSub = 2;
+ else
+ toSub = 1;
+ if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) < toSub)
+ gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_SLEEP);
+ else
+ gBattleMons[gBattlerAttacker].status1 -= toSub;
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
+ {
+ if (gCurrentMove != MOVE_SNORE && gCurrentMove != MOVE_SLEEP_TALK)
+ {
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 2;
+ }
+ }
+ else
+ {
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ BattleScriptPushCursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
+ effect = 2;
+ }
+ }
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_FROZEN: // check being frozen
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
+ {
+ if (Random() % 5)
+ {
+ if (gBattleMoves[gCurrentMove].effect != EFFECT_THAW_HIT) // unfreezing via a move effect happens in case 13
+ {
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen;
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ }
+ else
+ {
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ }
+ }
+ else // unfreeze
+ {
+ gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_FREEZE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ effect = 2;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_TRUANT: // truant
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter)
+ {
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_RECHARGE: // recharge
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE)
+ {
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RECHARGE);
+ gDisableStructs[gBattlerAttacker].rechargeTimer = 0;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_FLINCH: // flinch
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FLINCHED)
+ {
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_FLINCHED);
+ gProtectStructs[gBattlerAttacker].flinchImmobility = 1;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedFlinched;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_DISABLED: // disabled move
+ if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE)
+ {
+ gProtectStructs[gBattlerAttacker].usedDisabledMove = 1;
+ gBattleScripting.battler = gBattlerAttacker;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_TAUNTED: // taunt
+ if (gDisableStructs[gBattlerAttacker].tauntTimer && gBattleMoves[gCurrentMove].power == 0)
+ {
+ gProtectStructs[gBattlerAttacker].usedTauntedMove = 1;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsTaunted;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_IMPRISONED: // imprisoned
+ if (GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove))
+ {
+ gProtectStructs[gBattlerAttacker].usedImprisonedMove = 1;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsImprisoned;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_CONFUSED: // confusion
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
+ {
+ --gBattleMons[gBattlerAttacker].status2;
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
+ {
+ if (Random() & 1)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ BattleScriptPushCursor();
+ }
+ else // confusion dmg
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattlerTarget = gBattlerAttacker;
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerAttacker], MOVE_POUND, 0, 40, 0, gBattlerAttacker, gBattlerAttacker);
+ gProtectStructs[gBattlerAttacker].confusionSelfDmg = 1;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ }
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfused;
+ }
+ else // snapped out of confusion
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfusedNoMore;
+ }
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_PARALYSED: // paralysis
+ if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0)
+ {
+ gProtectStructs[gBattlerAttacker].prlzImmobility = 1;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsParalyzed;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_GHOST: // GHOST in pokemon tower
+ if ((gBattleTypeFlags & (BATTLE_TYPE_GHOST | BATTLE_TYPE_LEGENDARY)) == BATTLE_TYPE_GHOST)
+ {
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ gBattlescriptCurrInstr = gUnknown_81D9180;
+ else
+ gBattlescriptCurrInstr = gUnknown_81D9192;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_IN_LOVE: // infatuation
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
+ {
+ gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
+ if (Random() & 1)
+ {
+ BattleScriptPushCursor();
+ }
+ else
+ {
+ BattleScriptPush(BattleScript_MoveUsedIsInLoveCantAttack);
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ gProtectStructs[gBattlerAttacker].loveImmobility = 1;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ }
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove;
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_BIDE: // bide
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
+ {
+ gBattleMons[gBattlerAttacker].status2 -= 0x100;
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
+ {
+ gBattlescriptCurrInstr = BattleScript_BideStoringEnergy;
+ }
+ else
+ {
+ if (gTakenDmg[gBattlerAttacker])
+ {
+ gCurrentMove = MOVE_BIDE;
+ *bideDmg = gTakenDmg[gBattlerAttacker] * 2;
+ gBattlerTarget = gTakenDmgByBattler[gBattlerAttacker];
+ if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
+ gBattlerTarget = GetMoveTarget(MOVE_BIDE, 1);
+ gBattlescriptCurrInstr = BattleScript_BideAttack;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = BattleScript_BideNoEnergyToAttack;
+ }
+ }
+ effect = 1;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_THAW: // move thawing
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
+ {
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT)
+ {
+ gBattleMons[gBattlerAttacker].status1 &= ~(STATUS1_FREEZE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ effect = 2;
+ }
+ ++gBattleStruct->atkCancellerTracker;
+ break;
+ case CANCELLER_END:
+ break;
+ }
+
+ } while (gBattleStruct->atkCancellerTracker != CANCELLER_END && !effect);
+ if (effect == 2)
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ return effect;
+}
+
+bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
+{
+ u8 playerId, flankId;
+ struct Pokemon *party;
+ s32 i;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ return FALSE;
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ playerId = GetBattlerMultiplayerId(battler);
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+ flankId = GetLinkTrainerFlankId(playerId);
+ for (i = flankId * 3; i < flankId * 3 + 3; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
+ break;
+ }
+ return (i == flankId * 3 + 3);
+ }
+ else
+ {
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ {
+ playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ flankId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ party = gEnemyParty;
+ }
+ else
+ {
+ playerId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ flankId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ party = gPlayerParty;
+ }
+ if (partyIdBattlerOn1 == PARTY_SIZE)
+ partyIdBattlerOn1 = gBattlerPartyIndexes[playerId];
+ if (partyIdBattlerOn2 == PARTY_SIZE)
+ partyIdBattlerOn2 = gBattlerPartyIndexes[flankId];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG
+ && i != partyIdBattlerOn1
+ && i != partyIdBattlerOn2
+ && i != *(gBattleStruct->monToSwitchIntoId + playerId)
+ && i != flankId[gBattleStruct->monToSwitchIntoId])
+ break;
+ }
+ return (i == PARTY_SIZE);
+ }
+ }
+}
+
+enum
+{
+ CASTFORM_NO_CHANGE,
+ CASTFORM_TO_NORMAL,
+ CASTFORM_TO_FIRE,
+ CASTFORM_TO_WATER,
+ CASTFORM_TO_ICE,
+};
+
+u8 CastformDataTypeChange(u8 battler)
+{
+ u8 formChange = 0;
+ if (gBattleMons[battler].species != SPECIES_CASTFORM || gBattleMons[battler].ability != ABILITY_FORECAST || gBattleMons[battler].hp == 0)
+ return CASTFORM_NO_CHANGE;
+ if (!WEATHER_HAS_EFFECT && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
+ return CASTFORM_TO_NORMAL;
+ }
+ if (!WEATHER_HAS_EFFECT)
+ return CASTFORM_NO_CHANGE;
+ if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
+ formChange = CASTFORM_TO_NORMAL;
+ }
+ if (gBattleWeather & WEATHER_SUN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_FIRE);
+ formChange = CASTFORM_TO_FIRE;
+ }
+ if (gBattleWeather & WEATHER_RAIN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_WATER);
+ formChange = CASTFORM_TO_WATER;
+ }
+ if (gBattleWeather & WEATHER_HAIL_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_ICE);
+ formChange = CASTFORM_TO_ICE;
+ }
+ return formChange;
+}
+
+u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveArg)
+{
+ u8 effect = 0;
+ struct Pokemon *pokeAtk;
+ struct Pokemon *pokeDef;
+ u16 speciesAtk;
+ u16 speciesDef;
+ u32 pidAtk;
+ u32 pidDef;
+
+ if (gBattlerAttacker >= gBattlersCount)
+ gBattlerAttacker = battler;
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ pokeAtk = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ else
+ pokeAtk = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ if (gBattlerTarget >= gBattlersCount)
+ gBattlerTarget = battler;
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ pokeDef = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
+ else
+ pokeDef = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
+ speciesAtk = GetMonData(pokeAtk, MON_DATA_SPECIES);
+ pidAtk = GetMonData(pokeAtk, MON_DATA_PERSONALITY);
+ speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES);
+ pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // Why isn't that check done at the beginning?
+ {
+ u8 moveType;
+ s32 i;
+ u8 side;
+ u8 target1;
+
+ if (special)
+ gLastUsedAbility = special;
+ else
+ gLastUsedAbility = gBattleMons[battler].ability;
+ if (!moveArg)
+ moveArg = gCurrentMove;
+ GET_MOVE_TYPE(moveArg, moveType);
+ if ((gBattleTypeFlags & (BATTLE_TYPE_GHOST | BATTLE_TYPE_LEGENDARY)) == BATTLE_TYPE_GHOST
+ && (gLastUsedAbility == ABILITY_INTIMIDATE || gLastUsedAbility == ABILITY_TRACE))
+ return effect;
+ switch (caseID)
+ {
+ case ABILITYEFFECT_ON_SWITCHIN: // 0
+ if (gBattlerAttacker >= gBattlersCount)
+ gBattlerAttacker = battler;
+ switch (gLastUsedAbility)
+ {
+ case ABILITYEFFECT_SWITCH_IN_WEATHER:
+ switch (GetCurrentWeather())
+ {
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ if (!(gBattleWeather & WEATHER_RAIN_ANY))
+ {
+ gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT);
+ gBattleScripting.animArg1 = B_ANIM_RAIN_CONTINUES;
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case WEATHER_SANDSTORM:
+ if (!(gBattleWeather & WEATHER_SANDSTORM_ANY))
+ {
+ gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
+ gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES;
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case WEATHER_DROUGHT:
+ if (!(gBattleWeather & WEATHER_SUN_ANY))
+ {
+ gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
+ gBattleScripting.animArg1 = B_ANIM_SUN_CONTINUES;
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ }
+ if (effect)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather();
+ BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts);
+ }
+ break;
+ case ABILITY_DRIZZLE:
+ if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
+ {
+ gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY);
+ BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates);
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case ABILITY_SAND_STREAM:
+ if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT))
+ {
+ gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
+ BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates);
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case ABILITY_DROUGHT:
+ if (!(gBattleWeather & WEATHER_SUN_PERMANENT))
+ {
+ gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
+ BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case ABILITY_INTIMIDATE:
+ if (!(gSpecialStatuses[battler].intimidatedMon))
+ {
+ gStatuses3[battler] |= STATUS3_INTIMIDATE_POKES;
+ gSpecialStatuses[battler].intimidatedMon = 1;
+ }
+ break;
+ case ABILITY_FORECAST:
+ effect = CastformDataTypeChange(battler);
+ if (effect != 0)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
+ gBattleScripting.battler = battler;
+ *(&gBattleStruct->formToChangeInto) = effect - 1;
+ }
+ break;
+ case ABILITY_TRACE:
+ if (!(gSpecialStatuses[battler].traced))
+ {
+ gStatuses3[battler] |= STATUS3_TRACE;
+ gSpecialStatuses[battler].traced = 1;
+ }
+ break;
+ case ABILITY_CLOUD_NINE:
+ case ABILITY_AIR_LOCK:
+ {
+ for (target1 = 0; target1 < gBattlersCount; ++target1)
+ {
+ effect = CastformDataTypeChange(target1);
+ if (effect != 0)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
+ gBattleScripting.battler = target1;
+ *(&gBattleStruct->formToChangeInto) = effect - 1;
+ break;
+ }
+ }
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_ENDTURN: // 1
+ if (gBattleMons[battler].hp != 0)
+ {
+ gBattlerAttacker = battler;
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_RAIN_DISH:
+ if (WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY)
+ && gBattleMons[battler].maxHP > gBattleMons[battler].hp)
+ {
+ gLastUsedAbility = ABILITY_RAIN_DISH; // why
+ BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates);
+ gBattleMoveDamage = gBattleMons[battler].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ ++effect;
+ }
+ break;
+ case ABILITY_SHED_SKIN:
+ if ((gBattleMons[battler].status1 & STATUS1_ANY) && (Random() % 3) == 0)
+ {
+ if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON))
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ if (gBattleMons[battler].status1 & STATUS1_SLEEP)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ if (gBattleMons[battler].status1 & STATUS1_PARALYSIS)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ if (gBattleMons[battler].status1 & STATUS1_BURN)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ if (gBattleMons[battler].status1 & STATUS1_FREEZE)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ gBattleMons[battler].status1 = 0;
+ gBattleMons[battler].status2 &= ~(STATUS2_NIGHTMARE); // fix nightmare glitch
+ gBattleScripting.battler = gActiveBattler = battler;
+ BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates);
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ ++effect;
+ }
+ break;
+ case ABILITY_SPEED_BOOST:
+ if (gBattleMons[battler].statStages[STAT_SPEED] < 0xC && gDisableStructs[battler].isFirstTurn != 2)
+ {
+ ++gBattleMons[battler].statStages[STAT_SPEED];
+ gBattleScripting.animArg1 = 0x11;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates);
+ gBattleScripting.battler = battler;
+ ++effect;
+ }
+ break;
+ case ABILITY_TRUANT:
+ gDisableStructs[gBattlerAttacker].truantCounter ^= 1;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_MOVES_BLOCK: // 2
+ if (gLastUsedAbility == ABILITY_SOUNDPROOF)
+ {
+ for (i = 0; sSoundMovesTable[i] != 0xFFFF; ++i)
+ if (sSoundMovesTable[i] == moveArg)
+ break;
+ if (sSoundMovesTable[i] != 0xFFFF)
+ {
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)
+ gHitMarker |= HITMARKER_NO_PPDEDUCT;
+ gBattlescriptCurrInstr = BattleScript_SoundproofProtected;
+ effect = 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_ABSORBING: // 3
+ if (moveArg)
+ {
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_VOLT_ABSORB:
+ if (moveType == TYPE_ELECTRIC && gBattleMoves[moveArg].power != 0)
+ {
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
+ else
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
+ effect = 1;
+ }
+ break;
+ case ABILITY_WATER_ABSORB:
+ if (moveType == TYPE_WATER && gBattleMoves[moveArg].power != 0)
+ {
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
+ else
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
+ effect = 1;
+ }
+ break;
+ case ABILITY_FLASH_FIRE:
+ if (moveType == TYPE_FIRE && !(gBattleMons[battler].status1 & STATUS1_FREEZE))
+ {
+ if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE))
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
+ gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_FLASH_FIRE;
+ effect = 2;
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
+ effect = 2;
+ }
+ }
+ break;
+ }
+ if (effect == 1)
+ {
+ if (gBattleMons[battler].maxHP == gBattleMons[battler].hp)
+ {
+ if ((gProtectStructs[gBattlerAttacker].notFirstStrike))
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless;
+ else
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless_PPLoss;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[battler].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_MOVE_END: // Think contact abilities.
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_COLOR_CHANGE:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && moveArg != MOVE_STRUGGLE
+ && gBattleMoves[moveArg].power != 0
+ && TARGET_TURN_DAMAGED
+ && !IS_BATTLER_OF_TYPE(battler, moveType)
+ && gBattleMons[battler].hp != 0)
+ {
+ SET_BATTLER_TYPE(battler, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ColorChangeActivates;
+ ++effect;
+ }
+ break;
+ case ABILITY_ROUGH_SKIN:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT))
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_RoughSkinActivates;
+ ++effect;
+ }
+ break;
+ case ABILITY_EFFECT_SPORE:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && (Random() % 10) == 0)
+ {
+ do
+ gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3;
+ while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0);
+
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN)
+ gBattleCommunication[MOVE_EFFECT_BYTE] += 2; // 5 MOVE_EFFECT_PARALYSIS
+ gBattleCommunication[MOVE_EFFECT_BYTE] += MOVE_EFFECT_AFFECTS_USER;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITY_POISON_POINT:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && (Random() % 3) == 0)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITY_STATIC:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && (Random() % 3) == 0)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITY_FLAME_BODY:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && TARGET_TURN_DAMAGED
+ && (Random() % 3) == 0)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITY_CUTE_CHARM:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && (gBattleMoves[moveArg].flags & FLAG_MAKES_CONTACT)
+ && TARGET_TURN_DAMAGED
+ && gBattleMons[gBattlerTarget].hp != 0
+ && (Random() % 3) == 0
+ && gBattleMons[gBattlerAttacker].ability != ABILITY_OBLIVIOUS
+ && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef)
+ && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
+ && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != MON_GENDERLESS
+ && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != MON_GENDERLESS)
+ {
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_INFATUATED_WITH(gBattlerTarget);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_CuteCharmActivates;
+ ++effect;
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_IMMUNITY: // 5
+ for (battler = 0; battler < gBattlersCount; ++battler)
+ {
+ switch (gBattleMons[battler].ability)
+ {
+ case ABILITY_IMMUNITY:
+ if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER))
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OWN_TEMPO:
+ if (gBattleMons[battler].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ effect = 2;
+ }
+ break;
+ case ABILITY_LIMBER:
+ if (gBattleMons[battler].status1 & STATUS1_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_INSOMNIA:
+ case ABILITY_VITAL_SPIRIT:
+ if (gBattleMons[battler].status1 & STATUS1_SLEEP)
+ {
+ gBattleMons[battler].status2 &= ~(STATUS2_NIGHTMARE);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_WATER_VEIL:
+ if (gBattleMons[battler].status1 & STATUS1_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_MAGMA_ARMOR:
+ if (gBattleMons[battler].status1 & STATUS1_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OBLIVIOUS:
+ if (gBattleMons[battler].status2 & STATUS2_INFATUATION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ effect = 3;
+ }
+ break;
+ }
+ if (effect)
+ {
+ switch (effect)
+ {
+ case 1: // status cleared
+ gBattleMons[battler].status1 = 0;
+ break;
+ case 2: // get rid of confusion
+ gBattleMons[battler].status2 &= ~(STATUS2_CONFUSION);
+ break;
+ case 3: // get rid of infatuation
+ gBattleMons[battler].status2 &= ~(STATUS2_INFATUATION);
+ break;
+ }
+
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
+ gBattleScripting.battler = battler;
+ gActiveBattler = battler;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ return effect;
+ }
+ }
+ break;
+ case ABILITYEFFECT_FORECAST: // 6
+ for (battler = 0; battler < gBattlersCount; ++battler)
+ {
+ if (gBattleMons[battler].ability == ABILITY_FORECAST)
+ {
+ effect = CastformDataTypeChange(battler);
+ if (effect)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
+ gBattleScripting.battler = battler;
+ *(&gBattleStruct->formToChangeInto) = effect - 1;
+ return effect;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_SYNCHRONIZE: // 7
+ if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
+ {
+ gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
+ gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC)
+ gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchronizeMoveEffect + MOVE_EFFECT_AFFECTS_USER;
+ gBattleScripting.battler = gBattlerTarget;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8
+ if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
+ {
+ gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
+ gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC)
+ gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchronizeMoveEffect;
+ gBattleScripting.battler = gBattlerAttacker;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ ++effect;
+ }
+ break;
+ case ABILITYEFFECT_INTIMIDATE1: // 9
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ABILITY_INTIMIDATE && gStatuses3[i] & STATUS3_INTIMIDATE_POKES)
+ {
+ gLastUsedAbility = ABILITY_INTIMIDATE;
+ gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
+ BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivatesEnd3);
+ gBattleStruct->intimidateBattler = i;
+ ++effect;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_TRACE: // 11
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE))
+ {
+ u8 target2;
+
+ side = (GetBattlerPosition(i) ^ BIT_SIDE) & BIT_SIDE; // side of the opposing pokemon
+ target1 = GetBattlerAtPosition(side);
+ target2 = GetBattlerAtPosition(side + BIT_FLANK);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0
+ && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0)
+ {
+ gActiveBattler = GetBattlerAtPosition(((Random() & 1) * 2) | side);
+ gBattleMons[i].ability = gBattleMons[gActiveBattler].ability;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ ++effect;
+ }
+ else if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0)
+ {
+ gActiveBattler = target1;
+ gBattleMons[i].ability = gBattleMons[gActiveBattler].ability;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ ++effect;
+ }
+ else if (gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0)
+ {
+ gActiveBattler = target2;
+ gBattleMons[i].ability = gBattleMons[gActiveBattler].ability;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ ++effect;
+ }
+ }
+ else
+ {
+ gActiveBattler = target1;
+ if (gBattleMons[target1].ability && gBattleMons[target1].hp)
+ {
+ gBattleMons[i].ability = gBattleMons[target1].ability;
+ gLastUsedAbility = gBattleMons[target1].ability;
+ ++effect;
+ }
+ }
+ if (effect)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_TraceActivates);
+ gStatuses3[i] &= ~(STATUS3_TRACE);
+ gBattleScripting.battler = i;
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility)
+ break;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_INTIMIDATE2: // 10
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ABILITY_INTIMIDATE && (gStatuses3[i] & STATUS3_INTIMIDATE_POKES))
+ {
+ gLastUsedAbility = ABILITY_INTIMIDATE;
+ gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_IntimidateActivates;
+ gBattleStruct->intimidateBattler = i;
+ ++effect;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_CHECK_OTHER_SIDE: // 12
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_CHECK_BATTLER_SIDE: // 13
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) == side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_FIELD_SPORT: // 14
+ switch (gLastUsedAbility)
+ {
+ case 0xFD:
+ for (i = 0; i < gBattlersCount; ++i)
+ if (gStatuses3[i] & STATUS3_MUDSPORT)
+ effect = i + 1;
+ break;
+ case 0xFE:
+ for (i = 0; i < gBattlersCount; ++i)
+ if (gStatuses3[i] & STATUS3_WATERSPORT)
+ effect = i + 1;
+ break;
+ default:
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_CHECK_ON_FIELD: // 19
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ability && gBattleMons[i].hp != 0)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER: // 15
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ break;
+ }
+ }
+ if (!effect)
+ {
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ability && GetBattlerSide(i) == side && i != battler)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_COUNT_OTHER_SIDE: // 16
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ ++effect;
+ }
+ }
+ break;
+ case ABILITYEFFECT_COUNT_BATTLER_SIDE: // 17
+ side = GetBattlerSide(battler);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) == side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ ++effect;
+ }
+ }
+ break;
+ case ABILITYEFFECT_COUNT_ON_FIELD: // 18
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gBattleMons[i].ability == ability && i != battler)
+ {
+ gLastUsedAbility = ability;
+ ++effect;
+ }
+ }
+ break;
+ }
+ if (effect && caseID < ABILITYEFFECT_CHECK_OTHER_SIDE && gLastUsedAbility != 0xFF)
+ RecordAbilityBattle(battler, gLastUsedAbility);
+ }
+ return effect;
+}
+
+void BattleScriptExecute(const u8 *BS_ptr)
+{
+ gBattlescriptCurrInstr = BS_ptr;
+ gBattleResources->battleCallbackStack->function[gBattleResources->battleCallbackStack->size++] = gBattleMainFunc;
+ gBattleMainFunc = RunBattleScriptCommands_PopCallbacksStack;
+ gCurrentActionFuncId = 0;
+}
+
+void BattleScriptPushCursorAndCallback(const u8 *BS_ptr)
+{
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BS_ptr;
+ gBattleResources->battleCallbackStack->function[gBattleResources->battleCallbackStack->size++] = gBattleMainFunc;
+ gBattleMainFunc = RunBattleScriptCommands;
+}
+
+enum
+{
+ ITEM_NO_EFFECT,
+ ITEM_STATUS_CHANGE,
+ ITEM_EFFECT_OTHER,
+ ITEM_PP_CHANGE,
+ ITEM_HP_CHANGE,
+ ITEM_STATS_CHANGE,
+};
+
+u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
+{
+ int i = 0;
+ u8 effect = ITEM_NO_EFFECT;
+ u8 changedPP = 0;
+ u8 battlerHoldEffect, atkHoldEffect, defHoldEffect;
+ u8 battlerHoldEffectParam, atkHoldEffectParam, defHoldEffectParam;
+ u16 atkItem, defItem;
+
+ gLastUsedItem = gBattleMons[battlerId].item;
+ if (gLastUsedItem == ITEM_ENIGMA_BERRY)
+ {
+ battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect;
+ battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam;
+ }
+ else
+ {
+ battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
+ battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem);
+ }
+
+ atkItem = gBattleMons[gBattlerAttacker].item;
+ if (atkItem == ITEM_ENIGMA_BERRY)
+ {
+ atkHoldEffect = gEnigmaBerries[gBattlerAttacker].holdEffect;
+ atkHoldEffectParam = gEnigmaBerries[gBattlerAttacker].holdEffectParam;
+ }
+ else
+ {
+ atkHoldEffect = ItemId_GetHoldEffect(atkItem);
+ atkHoldEffectParam = ItemId_GetHoldEffectParam(atkItem);
+ }
+
+ // def variables are unused
+ defItem = gBattleMons[gBattlerTarget].item;
+ if (defItem == ITEM_ENIGMA_BERRY)
+ {
+ defHoldEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ defHoldEffectParam = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ defHoldEffect = ItemId_GetHoldEffect(defItem);
+ defHoldEffectParam = ItemId_GetHoldEffectParam(defItem);
+ }
+ switch (caseID)
+ {
+ case ITEMEFFECT_ON_SWITCH_IN:
+ switch (battlerHoldEffect)
+ {
+ case HOLD_EFFECT_DOUBLE_PRIZE:
+ gBattleStruct->moneyMultiplier = 2;
+ break;
+ case HOLD_EFFECT_RESTORE_STATS:
+ for (i = 0; i < NUM_BATTLE_STATS; ++i)
+ {
+ if (gBattleMons[battlerId].statStages[i] < 6)
+ {
+ gBattleMons[battlerId].statStages[i] = 6;
+ effect = ITEM_STATS_CHANGE;
+ }
+ }
+ if (effect)
+ {
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ gActiveBattler = gBattlerAttacker = battlerId;
+ BattleScriptExecute(BattleScript_WhiteHerbEnd2);
+ }
+ break;
+ }
+ break;
+ case 1:
+ if (gBattleMons[battlerId].hp)
+ {
+ switch (battlerHoldEffect)
+ {
+ case HOLD_EFFECT_RESTORE_HP:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
+ {
+ gBattleMoveDamage = battlerHoldEffectParam;
+ if (gBattleMons[battlerId].hp + battlerHoldEffectParam > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
+ gBattleMoveDamage *= -1;
+ BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
+ effect = 4;
+ }
+ break;
+ case HOLD_EFFECT_RESTORE_PP:
+ if (!moveTurn)
+ {
+ struct Pokemon *mon;
+ u8 ppBonuses;
+ u16 move;
+
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
+ else
+ mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ move = GetMonData(mon, MON_DATA_MOVE1 + i);
+ changedPP = GetMonData(mon, MON_DATA_PP1 + i);
+ ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
+ if (move && changedPP == 0)
+ break;
+ }
+ if (i != MAX_MON_MOVES)
+ {
+ u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i);
+ if (changedPP + battlerHoldEffectParam > maxPP)
+ changedPP = maxPP;
+ else
+ changedPP = changedPP + battlerHoldEffectParam;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, move);
+ BattleScriptExecute(BattleScript_BerryPPHealEnd2);
+ BtlController_EmitSetMonData(0, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP);
+ MarkBattlerForControllerExec(gActiveBattler);
+ effect = ITEM_PP_CHANGE;
+ }
+ }
+ break;
+ case HOLD_EFFECT_RESTORE_STATS:
+ for (i = 0; i < NUM_BATTLE_STATS; ++i)
+ {
+ if (gBattleMons[battlerId].statStages[i] < 6)
+ {
+ gBattleMons[battlerId].statStages[i] = 6;
+ effect = ITEM_STATS_CHANGE;
+ }
+ }
+ if (effect)
+ {
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ gActiveBattler = gBattlerAttacker = battlerId;
+ BattleScriptExecute(BattleScript_WhiteHerbEnd2);
+ }
+ break;
+ case HOLD_EFFECT_LEFTOVERS:
+ if (gBattleMons[battlerId].hp < gBattleMons[battlerId].maxHP && !moveTurn)
+ {
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
+ gBattleMoveDamage *= -1;
+ BattleScriptExecute(BattleScript_ItemHealHP_End2);
+ effect = ITEM_HP_CHANGE;
+ RecordItemEffectBattle(battlerId, battlerHoldEffect);
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_SPICY:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
+ {
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SPICY);
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
+ gBattleMoveDamage *= -1;
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_SPICY) < 0)
+ BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
+ else
+ BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_DRY:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
+ {
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_DRY);
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
+ gBattleMoveDamage *= -1;
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_DRY) < 0)
+ BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
+ else
+ BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_SWEET:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
+ {
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SWEET);
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
+ gBattleMoveDamage *= -1;
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_SWEET) < 0)
+ BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
+ else
+ BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_BITTER:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
+ {
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_BITTER);
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
+ gBattleMoveDamage *= -1;
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_BITTER) < 0)
+ BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
+ else
+ BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_SOUR:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
+ {
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SOUR);
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
+ gBattleMoveDamage *= -1;
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_SOUR) < 0)
+ BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
+ else
+ BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_ATTACK_UP:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < 0xC)
+ {
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE);
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_ATK, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_ATK;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_DEFENSE_UP:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_DEF] < 0xC)
+ {
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF);
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_DEF, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_DEF;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_SPEED_UP:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPEED] < 0xC)
+ {
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED);
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_SPEED, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_SPEED;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_SP_ATTACK_UP:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPATK] < 0xC)
+ {
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK);
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_SPATK, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_SPATK;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_SP_DEFENSE_UP:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPDEF] < 0xC)
+ {
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF);
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_SPDEF, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_SPDEF;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CRITICAL_UP:
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
+ {
+ gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY;
+ BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2);
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_RANDOM_STAT_UP:
+ if (!moveTurn && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam)
+ {
+ for (i = 0; i < 5 && gBattleMons[battlerId].statStages[STAT_ATK + i] >= 0xC; ++i);
+ if (i != 5)
+ {
+ do
+ i = Random() % 5;
+ while (gBattleMons[battlerId].statStages[STAT_ATK + i] == 0xC);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1);
+ gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_STATSHARPLY;
+ gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8;
+ gBattleTextBuff2[4] = B_BUFF_STRING;
+ gBattleTextBuff2[5] = STRINGID_STATROSE;
+ gBattleTextBuff2[6] = STRINGID_STATROSE >> 8;
+ gBattleTextBuff2[7] = EOS;
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(i + 1, 2, FALSE);
+ gBattleScripting.animArg1 = 0x21 + i + 6;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ }
+ break;
+ case HOLD_EFFECT_CURE_PAR:
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_PARALYSIS);
+ BattleScriptExecute(BattleScript_BerryCurePrlzEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_PSN:
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
+ BattleScriptExecute(BattleScript_BerryCurePsnEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_BRN:
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_BURN);
+ BattleScriptExecute(BattleScript_BerryCureBrnEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_FRZ:
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE);
+ BattleScriptExecute(BattleScript_BerryCureFrzEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_SLP:
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
+ BattleScriptExecute(BattleScript_BerryCureSlpEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_CONFUSION:
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ {
+ gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION);
+ BattleScriptExecute(BattleScript_BerryCureConfusionEnd2);
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_CURE_STATUS:
+ if (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ {
+ i = 0;
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ ++i;
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ {
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ ++i;
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ ++i;
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ ++i;
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ ++i;
+ }
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ ++i;
+ }
+ if (!(i > 1))
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattleMons[battlerId].status1 = 0;
+ gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION);
+ BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_ATTRACT:
+ if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION)
+ {
+ gBattleMons[battlerId].status2 &= ~(STATUS2_INFATUATION);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ }
+ if (effect)
+ {
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ gActiveBattler = gBattlerAttacker = battlerId;
+ switch (effect)
+ {
+ case ITEM_STATUS_CHANGE:
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battlerId].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case ITEM_PP_CHANGE:
+ if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[battlerId].mimickedMoves & gBitTable[i]))
+ gBattleMons[battlerId].pp[i] = changedPP;
+ break;
+ }
+ }
+ }
+ break;
+ case 2:
+ break;
+ case ITEMEFFECT_MOVE_END:
+ for (battlerId = 0; battlerId < gBattlersCount; ++battlerId)
+ {
+ gLastUsedItem = gBattleMons[battlerId].item;
+ if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
+ {
+ battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect;
+ battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam;
+ }
+ else
+ {
+ battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
+ battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem);
+ }
+ switch (battlerHoldEffect)
+ {
+ case HOLD_EFFECT_CURE_PAR:
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_PARALYSIS);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureParRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_PSN:
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCurePsnRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_BRN:
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_BURN);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureBrnRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_FRZ:
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureFrzRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_SLP:
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureSlpRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_CONFUSION:
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ {
+ gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureConfusionRet;
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_CURE_ATTRACT:
+ if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION)
+ {
+ gBattleMons[battlerId].status2 &= ~(STATUS2_INFATUATION);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ BattleScriptPushCursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet;
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_CURE_STATUS:
+ if (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ {
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ {
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ }
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ }
+ gBattleMons[battlerId].status1 = 0;
+ gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION);
+ BattleScriptPushCursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_RESTORE_STATS:
+ for (i = 0; i < NUM_BATTLE_STATS; ++i)
+ {
+ if (gBattleMons[battlerId].statStages[i] < 6)
+ {
+ gBattleMons[battlerId].statStages[i] = 6;
+ effect = ITEM_STATS_CHANGE;
+ }
+ }
+ if (effect)
+ {
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_WhiteHerbRet;
+ return effect;
+ }
+ break;
+ }
+ if (effect)
+ {
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ gActiveBattler = battlerId;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ }
+ }
+ break;
+ case ITEMEFFECT_KINGSROCK_SHELLBELL:
+ if (gBattleMoveDamage)
+ {
+ switch (atkHoldEffect)
+ {
+ case HOLD_EFFECT_FLINCH:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && (Random() % 100) < battlerHoldEffectParam
+ && gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED
+ && gBattleMons[gBattlerTarget].hp)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_FLINCH;
+ BattleScriptPushCursor();
+ SetMoveEffect(0, 0);
+ BattleScriptPop();
+ }
+ break;
+ case HOLD_EFFECT_SHELL_BELL:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gSpecialStatuses[gBattlerTarget].dmg != 0
+ && gSpecialStatuses[gBattlerTarget].dmg != 0xFFFF
+ && gBattlerAttacker != gBattlerTarget
+ && gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP
+ && gBattleMons[gBattlerAttacker].hp != 0)
+ {
+ gLastUsedItem = atkItem;
+ gPotentialItemEffectBattler = gBattlerAttacker;
+ gBattleScripting.battler = gBattlerAttacker;
+ gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkHoldEffectParam) * -1;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = -1;
+ gSpecialStatuses[gBattlerTarget].dmg = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret;
+ ++effect;
+ }
+ break;
+ }
+ }
+ break;
+ }
+ return effect;
+}
+
+void ClearFuryCutterDestinyBondGrudge(u8 battlerId)
+{
+ gDisableStructs[battlerId].furyCutterCounter = 0;
+ gBattleMons[battlerId].status2 &= ~(STATUS2_DESTINY_BOND);
+ gStatuses3[battlerId] &= ~(STATUS3_GRUDGE);
+}
+
+void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands
+{
+ if (!gBattleControllerExecFlags)
+ gBattleScriptingCommandsTable[*gBattlescriptCurrInstr]();
+}
+
+u8 GetMoveTarget(u16 move, u8 setTarget)
+{
+ u8 targetBattler = 0;
+ u8 moveTarget;
+ u8 side;
+
+ if (setTarget)
+ moveTarget = setTarget - 1;
+ else
+ moveTarget = gBattleMoves[move].target;
+ switch (moveTarget)
+ {
+ case MOVE_TARGET_SELECTED:
+ side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
+ if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
+ targetBattler = gSideTimers[side].followmeTarget;
+ else
+ {
+ side = GetBattlerSide(gBattlerAttacker);
+ do
+ {
+ targetBattler = Random() % gBattlersCount;
+ } while (targetBattler == gBattlerAttacker || side == GetBattlerSide(targetBattler) || gAbsentBattlerFlags & gBitTable[targetBattler]);
+ if (gBattleMoves[move].type == TYPE_ELECTRIC
+ && AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_LIGHTNING_ROD, 0, 0)
+ && gBattleMons[targetBattler].ability != ABILITY_LIGHTNING_ROD)
+ {
+ targetBattler ^= BIT_FLANK;
+ RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability);
+ gSpecialStatuses[targetBattler].lightningRodRedirected = 1;
+ }
+ }
+ break;
+ case MOVE_TARGET_DEPENDS:
+ case MOVE_TARGET_BOTH:
+ case MOVE_TARGET_FOES_AND_ALLY:
+ case MOVE_TARGET_OPPONENTS_FIELD:
+ targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
+ if (gAbsentBattlerFlags & gBitTable[targetBattler])
+ targetBattler ^= BIT_FLANK;
+ break;
+ case MOVE_TARGET_RANDOM:
+ side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
+ if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
+ targetBattler = gSideTimers[side].followmeTarget;
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM)
+ {
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ {
+ if (Random() & 1)
+ targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ else
+ targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ }
+ else
+ {
+ if (Random() & 1)
+ targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ else
+ targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ }
+ if (gAbsentBattlerFlags & gBitTable[targetBattler])
+ targetBattler ^= BIT_FLANK;
+ }
+ else
+ targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
+ break;
+ case MOVE_TARGET_USER_OR_SELECTED:
+ case MOVE_TARGET_USER:
+ targetBattler = gBattlerAttacker;
+ break;
+ }
+ *(gBattleStruct->moveTarget + gBattlerAttacker) = targetBattler;
+ return targetBattler;
+}
+
+static bool32 HasObedientBitSet(u8 battlerId)
+{
+ if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT
+ || (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS
+ && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_MEW))
+ return TRUE;
+ return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_OBEDIENCE, NULL);
+}
+
+u8 IsMonDisobedient(void)
+{
+ s32 rnd;
+ s32 calc;
+ u8 obedienceLevel = 0;
+
+ if ((gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_POKEDUDE)) || GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT)
+ return 0;
+ if (HasObedientBitSet(gBattlerAttacker)) // only if species is Mew or Deoxys
+ {
+ if (!IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName) || FlagGet(FLAG_0x827))
+ return 0;
+ obedienceLevel = 10;
+ if (FlagGet(FLAG_0x821))
+ obedienceLevel = 30;
+ if (FlagGet(FLAG_0x823))
+ obedienceLevel = 50;
+ if (FlagGet(FLAG_0x825))
+ obedienceLevel = 70;
+ }
+ if (gBattleMons[gBattlerAttacker].level <= obedienceLevel)
+ return 0;
+ rnd = (Random() & 255);
+ calc = (gBattleMons[gBattlerAttacker].level + obedienceLevel) * rnd >> 8;
+ if (calc < obedienceLevel)
+ return 0;
+ // is not obedient
+ if (gCurrentMove == MOVE_RAGE)
+ gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RAGE);
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK))
+ {
+ gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep;
+ return 1;
+ }
+ rnd = (Random() & 255);
+ calc = (gBattleMons[gBattlerAttacker].level + obedienceLevel) * rnd >> 8;
+ if (calc < obedienceLevel && gCurrentMove != MOVE_FOCUS_PUNCH) // Additional check for focus punch in FR
+ {
+ calc = CheckMoveLimitations(gBattlerAttacker, gBitTable[gCurrMovePos], 0xFF);
+ if (calc == 0xF) // all moves cannot be used
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = Random() & 3;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround;
+ return 1;
+ }
+ else // use a random move
+ {
+ do
+ gCurrMovePos = gChosenMovePos = Random() & 3;
+ while (gBitTable[gCurrMovePos] & calc);
+ gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos];
+ gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove;
+ gBattlerTarget = GetMoveTarget(gCalledMove, 0);
+ gHitMarker |= HITMARKER_x200000;
+ return 2;
+ }
+ }
+ else
+ {
+ obedienceLevel = gBattleMons[gBattlerAttacker].level - obedienceLevel;
+ calc = (Random() & 255);
+ if (calc < obedienceLevel && !(gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY) && gBattleMons[gBattlerAttacker].ability != ABILITY_VITAL_SPIRIT && gBattleMons[gBattlerAttacker].ability != ABILITY_INSOMNIA)
+ {
+ // try putting asleep
+ int i;
+
+ for (i = 0; i < gBattlersCount; ++i)
+ if (gBattleMons[i].status2 & STATUS2_UPROAR)
+ break;
+ if (i == gBattlersCount)
+ {
+ gBattlescriptCurrInstr = BattleScript_IgnoresAndFallsAsleep;
+ return 1;
+ }
+ }
+ calc -= obedienceLevel;
+ if (calc < obedienceLevel)
+ {
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerAttacker], MOVE_POUND, 0, 40, 0, gBattlerAttacker, gBattlerAttacker);
+ gBattlerTarget = gBattlerAttacker;
+ gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ return 2;
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = Random() & 3;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround;
+ return 1;
+ }
+ }
+}
diff --git a/src/battle_util2.c b/src/battle_util2.c
new file mode 100644
index 000000000..d940d8508
--- /dev/null
+++ b/src/battle_util2.c
@@ -0,0 +1,96 @@
+#include "global.h"
+#include "bg.h"
+#include "battle.h"
+#include "pokemon.h"
+#include "malloc.h"
+#include "trainer_tower.h"
+#include "battle_util2.h"
+
+void AllocateBattleResources(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
+ InitTrainerTowerBattleStruct();
+ if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
+ {
+ s32 i;
+
+ for (i = 0; i < 4; ++i)
+ gUnknown_3005EE0[i] = AllocZeroed(8);
+ }
+ gBattleStruct = AllocZeroed(sizeof(*gBattleStruct));
+ gBattleResources = AllocZeroed(sizeof(*gBattleResources));
+ gBattleResources->secretBase = AllocZeroed(sizeof(*gBattleResources->secretBase));
+ gBattleResources->flags = AllocZeroed(sizeof(*gBattleResources->flags));
+ gBattleResources->battleScriptsStack = AllocZeroed(sizeof(*gBattleResources->battleScriptsStack));
+ gBattleResources->battleCallbackStack = AllocZeroed(sizeof(*gBattleResources->battleCallbackStack));
+ gBattleResources->beforeLvlUp = AllocZeroed(sizeof(*gBattleResources->beforeLvlUp));
+ gBattleResources->ai = AllocZeroed(sizeof(*gBattleResources->ai));
+ gBattleResources->battleHistory = AllocZeroed(sizeof(*gBattleResources->battleHistory));
+ gBattleResources->AI_ScriptsStack = AllocZeroed(sizeof(*gBattleResources->AI_ScriptsStack));
+ gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
+ gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
+ gUnknown_2022BB8 = AllocZeroed(0x2000);
+ gUnknown_2022BBC = AllocZeroed(0x1000);
+ SetBgTilemapBuffer(1, gUnknown_2022BBC);
+ SetBgTilemapBuffer(2, gUnknown_2022BBC);
+}
+
+void FreeBattleResources(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
+ FreeTrainerTowerBattleStruct();
+ if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)
+ {
+ s32 i;
+
+ for (i = 0; i < 4; ++i)
+ {
+ FREE_AND_SET_NULL(gUnknown_3005EE0[i]);
+ }
+ }
+ if (gBattleResources != NULL)
+ {
+ FREE_AND_SET_NULL(gBattleStruct);
+ FREE_AND_SET_NULL(gBattleResources->secretBase);
+ FREE_AND_SET_NULL(gBattleResources->flags);
+ FREE_AND_SET_NULL(gBattleResources->battleScriptsStack);
+ FREE_AND_SET_NULL(gBattleResources->battleCallbackStack);
+ FREE_AND_SET_NULL(gBattleResources->beforeLvlUp);
+ FREE_AND_SET_NULL(gBattleResources->ai);
+ FREE_AND_SET_NULL(gBattleResources->battleHistory);
+ FREE_AND_SET_NULL(gBattleResources->AI_ScriptsStack);
+ FREE_AND_SET_NULL(gBattleResources);
+ FREE_AND_SET_NULL(gLinkBattleSendBuffer);
+ FREE_AND_SET_NULL(gLinkBattleRecvBuffer);
+ FREE_AND_SET_NULL(gUnknown_2022BB8);
+ FREE_AND_SET_NULL(gUnknown_2022BBC);
+ }
+}
+
+void AdjustFriendshipOnBattleFaint(u8 battlerId)
+{
+ u8 opposingBattlerId, opposingBattlerId2;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ opposingBattlerId2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ if (gBattleMons[opposingBattlerId2].level > gBattleMons[opposingBattlerId].level)
+ opposingBattlerId = opposingBattlerId2;
+ }
+ else
+ {
+ opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ }
+ if (gBattleMons[opposingBattlerId].level > gBattleMons[battlerId].level)
+ {
+ if (gBattleMons[opposingBattlerId].level - gBattleMons[battlerId].level > 29)
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 9);
+ else
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 7);
+ }
+ else
+ {
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 7);
+ }
+}
diff --git a/src/braille_text.c b/src/braille_text.c
index 047fcab08..c95cf64b2 100644
--- a/src/braille_text.c
+++ b/src/braille_text.c
@@ -17,20 +17,20 @@ u16 Font6Func(struct TextPrinter *textPrinter)
u16 char_;
struct TextPrinterSubStruct *sub;
- sub = &textPrinter->sub_union.sub;
+ sub = &textPrinter->subUnion.sub;
switch (textPrinter->state)
{
case 0:
- if (gMain.heldKeys & (A_BUTTON | B_BUTTON) && sub->font_type_upper)
+ if (gMain.heldKeys & (A_BUTTON | B_BUTTON) && sub->hasPrintBeenSpedUp)
{
textPrinter->delayCounter = 0;
}
- if (textPrinter->delayCounter && textPrinter->text_speed)
+ if (textPrinter->delayCounter && textPrinter->textSpeed)
{
textPrinter->delayCounter --;
if (gTextFlags.canABSpeedUpPrint && gMain.newKeys & (A_BUTTON | B_BUTTON))
{
- sub->font_type_upper = TRUE;
+ sub->hasPrintBeenSpedUp = TRUE;
textPrinter->delayCounter = 0;
}
return 3;
@@ -41,62 +41,62 @@ u16 Font6Func(struct TextPrinter *textPrinter)
}
else
{
- textPrinter->delayCounter = textPrinter->text_speed;
+ textPrinter->delayCounter = textPrinter->textSpeed;
}
- char_ = *textPrinter->subPrinter.currentChar++;
+ char_ = *textPrinter->printerTemplate.currentChar++;
switch (char_)
{
case EOS:
return 1;
case CHAR_NEWLINE:
- textPrinter->subPrinter.currentX = textPrinter->subPrinter.x;
- textPrinter->subPrinter.currentY += gFonts[textPrinter->subPrinter.fontId].maxLetterHeight + textPrinter->subPrinter.lineSpacing;
+ textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
+ textPrinter->printerTemplate.currentY += gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
return 2;
case PLACEHOLDER_BEGIN:
- textPrinter->subPrinter.currentChar++;
+ textPrinter->printerTemplate.currentChar++;
return 2;
case EXT_CTRL_CODE_BEGIN:
- char_ = *textPrinter->subPrinter.currentChar++;
+ char_ = *textPrinter->printerTemplate.currentChar++;
switch (char_)
{
case 1:
- textPrinter->subPrinter.fgColor = *textPrinter->subPrinter.currentChar++;
- GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fgColor, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor);
+ textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar++;
+ GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
case 2:
- textPrinter->subPrinter.bgColor = *textPrinter->subPrinter.currentChar++;
- GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fgColor, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor);
+ textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar++;
+ GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
case 3:
- textPrinter->subPrinter.shadowColor = *textPrinter->subPrinter.currentChar++;
- GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fgColor, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor);
+ textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar++;
+ GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
case 4:
- textPrinter->subPrinter.fgColor = *textPrinter->subPrinter.currentChar;
- textPrinter->subPrinter.bgColor = *++textPrinter->subPrinter.currentChar;
- textPrinter->subPrinter.shadowColor = *++textPrinter->subPrinter.currentChar;
- textPrinter->subPrinter.currentChar++;
+ textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.bgColor = *++textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.shadowColor = *++textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
- GenerateFontHalfRowLookupTable(textPrinter->subPrinter.fgColor, textPrinter->subPrinter.bgColor, textPrinter->subPrinter.shadowColor);
+ GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
return 2;
case 5:
- textPrinter->subPrinter.currentChar++;
+ textPrinter->printerTemplate.currentChar++;
return 2;
case 6:
- sub->font_type = *textPrinter->subPrinter.currentChar;
- textPrinter->subPrinter.currentChar++;
+ sub->glyphId = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
return 2;
case 7:
return 2;
case 8:
- textPrinter->delayCounter = *textPrinter->subPrinter.currentChar++;
+ textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++;
textPrinter->state = 6;
return 2;
case 9:
textPrinter->state = 1;
if (gTextFlags.autoScroll)
{
- sub->frames_visible_counter = 0;
+ sub->autoScrollDelay = 0;
}
return 3;
case 10:
@@ -104,19 +104,19 @@ u16 Font6Func(struct TextPrinter *textPrinter)
return 3;
case 11:
case 16:
- textPrinter->subPrinter.currentChar += 2;
+ textPrinter->printerTemplate.currentChar += 2;
return 2;
case 12:
- char_ = *++textPrinter->subPrinter.currentChar;
+ char_ = *++textPrinter->printerTemplate.currentChar;
break;
case 13:
- textPrinter->subPrinter.currentX = textPrinter->subPrinter.x + *textPrinter->subPrinter.currentChar++;
+ textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++;
return 2;
case 14:
- textPrinter->subPrinter.currentY = textPrinter->subPrinter.y + *textPrinter->subPrinter.currentChar++;
+ textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar++;
return 2;
case 15:
- FillWindowPixelBuffer(textPrinter->subPrinter.windowId, PIXEL_FILL(textPrinter->subPrinter.bgColor));
+ FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
return 2;
}
break;
@@ -129,15 +129,15 @@ u16 Font6Func(struct TextPrinter *textPrinter)
TextPrinterInitDownArrowCounters(textPrinter);
return 3;
case 0xF9:
- char_ = *textPrinter->subPrinter.currentChar++| 0x100;
+ char_ = *textPrinter->printerTemplate.currentChar++| 0x100;
break;
case 0xF8:
- textPrinter->subPrinter.currentChar++;
+ textPrinter->printerTemplate.currentChar++;
return 0;
}
DecompressGlyphFont6(char_);
CopyGlyphToWindow(textPrinter);
- textPrinter->subPrinter.currentX += gGlyphInfo[0x80] + textPrinter->subPrinter.letterSpacing;
+ textPrinter->printerTemplate.currentX += gGlyphInfo[0x80] + textPrinter->printerTemplate.letterSpacing;
return 0;
case 1:
if (TextPrinterWait(textPrinter))
@@ -148,9 +148,9 @@ u16 Font6Func(struct TextPrinter *textPrinter)
case 2:
if (TextPrinterWaitWithDownArrow(textPrinter))
{
- FillWindowPixelBuffer(textPrinter->subPrinter.windowId, PIXEL_FILL(textPrinter->subPrinter.bgColor));
- textPrinter->subPrinter.currentX = textPrinter->subPrinter.x;
- textPrinter->subPrinter.currentY = textPrinter->subPrinter.y;
+ FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
+ textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
+ textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y;
textPrinter->state = 0;
}
return 3;
@@ -158,8 +158,8 @@ u16 Font6Func(struct TextPrinter *textPrinter)
if (TextPrinterWaitWithDownArrow(textPrinter))
{
TextPrinterClearDownArrow(textPrinter);
- textPrinter->scrollDistance = gFonts[textPrinter->subPrinter.fontId].maxLetterHeight + textPrinter->subPrinter.lineSpacing;
- textPrinter->subPrinter.currentX = textPrinter->subPrinter.x;
+ textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
+ textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
textPrinter->state = 4;
}
return 3;
@@ -168,15 +168,15 @@ u16 Font6Func(struct TextPrinter *textPrinter)
{
if (textPrinter->scrollDistance < gUnknown_846FB08[gSaveBlock2Ptr->optionsTextSpeed])
{
- ScrollWindow(textPrinter->subPrinter.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->subPrinter.bgColor));
+ ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
textPrinter->scrollDistance = 0;
}
else
{
- ScrollWindow(textPrinter->subPrinter.windowId, 0, gUnknown_846FB08[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->subPrinter.bgColor));
+ ScrollWindow(textPrinter->printerTemplate.windowId, 0, gUnknown_846FB08[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor));
textPrinter->scrollDistance -= gUnknown_846FB08[gSaveBlock2Ptr->optionsTextSpeed];
}
- CopyWindowToVram(textPrinter->subPrinter.windowId, 2);
+ CopyWindowToVram(textPrinter->printerTemplate.windowId, 2);
}
else
{
@@ -216,7 +216,7 @@ static void DecompressGlyphFont6(u16 glyph)
gGlyphInfo[0x81] = 0x10;
}
-u32 GetGlyphWidthFont6(u16 font_type, bool32 isJapanese)
+s32 GetGlyphWidthFont6(u16 font_type, bool32 isJapanese)
{
return 0x10;
}
diff --git a/src/credits.c b/src/credits.c
new file mode 100644
index 000000000..abb287194
--- /dev/null
+++ b/src/credits.c
@@ -0,0 +1,2167 @@
+#include "global.h"
+#include "malloc.h"
+#include "bg.h"
+#include "palette.h"
+#include "gpu_regs.h"
+#include "task.h"
+#include "overworld.h"
+#include "event_data.h"
+#include "window.h"
+#include "new_menu_helpers.h"
+#include "decompress.h"
+#include "graphics.h"
+#include "strings.h"
+#include "menu.h"
+#include "field_weather.h"
+#include "trainer_pokemon_sprites.h"
+#include "sound.h"
+#include "constants/species.h"
+#include "constants/maps.h"
+
+#if defined(FIRERED)
+#define TITLE_TEXT gString_PokemonFireRed_Staff
+asm(".set TITLE_TEXT, gString_PokemonFireRed_Staff");
+#elif defined(LEAFGREEN)
+#define TITLE_TEXT gString_PokemonLeafGreen_Staff
+asm(".set TITLE_TEXT, gString_PokemonLeafGreen_Staff");
+#endif
+
+enum CreditsSceneIdx
+{
+ CREDITSSCENE_INIT_WIN0 = 0,
+ CREDITSSCENE_SETUP_DARKEN_EFFECT,
+ CREDITSSCENE_OPEN_WIN0,
+ CREDITSSCENE_LOAD_PLAYER_SPRITE_AT_INDIGO,
+ CREDITSSCENE_PRINT_TITLE_STAFF,
+ CREDITSSCENE_WAIT_TITLE_STAFF,
+ CREDITSSCENE_EXEC_CMD,
+ CREDITSSCENE_PRINT_ADDPRINTER1,
+ CREDITSSCENE_PRINT_ADDPRINTER2,
+ CREDITSSCENE_PRINT_DELAY,
+ CREDITSSCENE_MAPNEXT_DESTROYWINDOW,
+ CREDITSSCENE_MAPNEXT_LOADMAP,
+ CREDITSSCENE_MAP_LOADMAP_CREATESPRITES,
+ CREDITSSCENE_MON_DESTROY_ASSETS,
+ CREDITSSCENE_MON_SHOW,
+ CREDITSSCENE_THEEND_DESTROY_ASSETS,
+ CREDITSSCENE_THEEND_SHOW,
+ CREDITSSCENE_WAITBUTTON,
+ CREDITSSCENE_TERMINATE,
+};
+
+enum CreditsScrCmd
+{
+ CREDITSSCRCMD_PRINT = 0,
+ CREDITSSCRCMD_MAPNEXT,
+ CREDITSSCRCMD_MAP,
+ CREDITSSCRCMD_MON,
+ CREDITSSCRCMD_THEENDGFX,
+ CREDITSSCRCMD_WAITBUTTON
+};
+
+enum CreditsMon
+{
+ CREDITSMON_CHARIZARD = 0,
+ CREDITSMON_VENUSAUR,
+ CREDITSMON_BLASTOISE,
+ CREDITSMON_PIKACHU
+};
+
+enum CreditsClosingText
+{
+ CREDITSCLOSING_ALLRIGHTSRESERVED = 0,
+ CREDITSCLOSING_THEEND
+};
+
+enum CreditsString
+{
+ CREDITS_STRING_DIRECTOR = 0,
+ CREDITS_STRING_ART_DIRECTOR_BATTLE_DIRECTOR,
+ CREDITS_STRING_PROGRAM_LEADER_PLANNING_LEADER_GRAPHIC_DESIGN_LEADER,
+ CREDITS_STRING_PROGRAMMERS,
+ CREDITS_STRING_SYSTEM_PROGRAMMERS,
+ CREDITS_STRING_GRAPHIC_DESIGNERS,
+ CREDITS_STRING_GRAPHIC_DESIGNERS_2,
+ CREDITS_STRING_MUSIC_COMPOSITION,
+ CREDITS_STRING_SOUND_EFFECTS,
+ CREDITS_STRING_GAME_DESIGNERS,
+ CREDITS_STRING_GAME_DESIGNERS_2,
+ CREDITS_STRING_GAME_SCENARIO,
+ CREDITS_STRING_SCRIPT_DESIGNER_MAP_DESIGNER,
+ CREDITS_STRING_PARAMETRIC_DESIGNERS,
+ CREDITS_STRING_POKEDEX_TEXT,
+ CREDITS_STRING_POKEMON_DESIGNERS,
+ CREDITS_STRING_POKEMON_DESIGNERS_2,
+ CREDITS_STRING_POKEMON_DESIGNERS_3,
+ CREDITS_STRING_SUPPORTING_PROGRAMMERS,
+ CREDITS_STRING_NCL_PRODUCT_TESTING,
+ CREDITS_STRING_SPECIAL_THANKS,
+ CREDITS_STRING_SPECIAL_THANKS_2,
+ CREDITS_STRING_SPECIAL_THANKS_3,
+ CREDITS_STRING_BRAILLE_CODE_CHECK,
+ CREDITS_STRING_INFORMATION_SUPERVISORS,
+ CREDITS_STRING_COORDINATORS,
+ CREDITS_STRING_TASK_MANAGERS,
+ CREDITS_STRING_PRODUCERS,
+ CREDITS_STRING_EXECUTIVE_DIRECTOR,
+ CREDITS_STRING_EXECUTIVE_PRODUCER,
+ CREDITS_STRING_EXECUTIVE_PRODUCER_2,
+ CREDITS_STRING_ENGLISH_VERSION_COORDINATORS,
+ CREDITS_STRING_TRANSLATOR_TEXT_EDITOR,
+ CREDITS_STRING_PROGRAMMERS_2,
+ CREDITS_STRING_ENVIRONMENT_TOOL_PROGRAMMERS,
+ CREDITS_STRING_NOA_PRODUCT_TESTING,
+ CREDITS_STRING_BRAILLE_CODE_CHECK_2,
+ CREDITS_STRING_BRAILLE_CODE_CHECK_3,
+ CREDITS_STRING_SPECIAL_THANKS_4,
+ CREDITS_STRING_SPECIAL_THANKS_5,
+ CREDITS_STRING_BRAILLE_CODE_CHECK_4,
+ CREDITS_STRING_GRAPHIC_DESIGNER,
+ CREDITS_STRING_DUMMY
+};
+
+enum CreditsMap
+{
+ CREDITS_MAP_ROUTE23 = 0,
+ CREDITS_MAP_VIRIDIAN_CITY,
+ CREDITS_MAP_PEWTER_CITY,
+ CREDITS_MAP_CERULEAN_CITY,
+ CREDITS_MAP_ROUTE25,
+ CREDITS_MAP_VERMILION_CITY,
+ CREDITS_MAP_ROUTE10,
+ CREDITS_MAP_CELADON_CITY,
+ CREDITS_MAP_SAFFRON_CITY_DUPLICATE,
+ CREDITS_MAP_ROUTE17,
+ CREDITS_MAP_FUCHSIA_CITY,
+ CREDITS_MAP_CINNABAR_ISLAND,
+ CREDITS_MAP_ROUTE21_NORTH
+};
+
+struct CreditsResources
+{
+ u8 mainseqno;
+ u8 subseqno;
+ u8 taskId;
+ u16 timer;
+ u16 scrcmdidx;
+ u8 canSpeedThrough;
+ u8 whichMon;
+ u8 windowId;
+ bool8 windowIsActive;
+ u16 creditsMonTimer;
+ u16 unk_0E;
+ u8 filler_10[12];
+ u8 ovwldseqno;
+ u8 unk_1D;
+};
+
+struct CreditsScrcmd
+{
+ u8 cmd;
+ u8 param;
+ u16 duration;
+};
+
+struct CreditsTextHeader
+{
+ const u8 * unk_0;
+ const u8 * unk_4;
+ bool8 unk_8;
+};
+
+struct CompressedGraphicsHeader
+{
+ const u8 * tiles;
+ const u8 * map;
+ const u16 * palette;
+};
+
+struct CreditsTaskData
+{
+ u8 spriteMoveCmd;
+ u8 playerSpriteId;
+ u16 playerTilesTag;
+ u16 field_04;
+ u8 groundSpriteId;
+ u16 groundTilesTag;
+ u16 field_0A;
+};
+
+static EWRAM_DATA struct CreditsResources * sCreditsMgr = NULL;
+
+static void CB2_Credits(void);
+static s32 RollCredits(void);
+static bool32 DoCreditsMonScene(void);
+static bool32 DoCopyrightOrTheEndGfxScene(void);
+static void DestroyPlayerOrRivalSprite(void);
+static void LoadPlayerOrRivalSprite(u8 a0);
+
+static const struct BgTemplate sBgTemplates_MonSceneOrTheEnd[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 15,
+ .screenSize = 0,
+ .paletteMode = FALSE,
+ .priority = 0,
+ .baseTile = 0x0
+ }, {
+ .bg = 1,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 23,
+ .screenSize = 0,
+ .paletteMode = FALSE,
+ .priority = 1,
+ .baseTile = 0x0
+ }, {
+ .bg = 2,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 31,
+ .screenSize = 1,
+ .paletteMode = TRUE,
+ .priority = 2,
+ .baseTile = 0x0
+ }
+};
+
+static const struct WindowTemplate sWindowTemplates_Charizard[] = {
+ {
+ .bg = 0x00,
+ .tilemapLeft = 0x0b,
+ .tilemapTop = 0x06,
+ .width = 0x08,
+ .height = 0x08,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x0008
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x0a,
+ .tilemapTop = 0x05,
+ .width = 0x0a,
+ .height = 0x0a,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x0048
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x09,
+ .tilemapTop = 0x03,
+ .width = 0x0c,
+ .height = 0x0d,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x00ac
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sWindowTemplates_Venusaur[] = {
+ {
+ .bg = 0x00,
+ .tilemapLeft = 0x0b,
+ .tilemapTop = 0x06,
+ .width = 0x08,
+ .height = 0x08,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x0008
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x0a,
+ .tilemapTop = 0x05,
+ .width = 0x0a,
+ .height = 0x0a,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x0048
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x09,
+ .tilemapTop = 0x05,
+ .width = 0x0c,
+ .height = 0x0a,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x00ac
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sWindowTemplates_Blastoise[] = {
+ {
+ .bg = 0x00,
+ .tilemapLeft = 0x0b,
+ .tilemapTop = 0x06,
+ .width = 0x08,
+ .height = 0x08,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x0008
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x0a,
+ .tilemapTop = 0x05,
+ .width = 0x0a,
+ .height = 0x0a,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x0048
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x0a,
+ .tilemapTop = 0x04,
+ .width = 0x0a,
+ .height = 0x0c,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x00ac
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sWindowTemplates_Pikachu[] = {
+ {
+ .bg = 0x00,
+ .tilemapLeft = 0x0b,
+ .tilemapTop = 0x06,
+ .width = 0x08,
+ .height = 0x08,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x0008
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x0a,
+ .tilemapTop = 0x05,
+ .width = 0x0a,
+ .height = 0x0a,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x0048
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x09,
+ .tilemapTop = 0x04,
+ .width = 0x0c,
+ .height = 0x0c,
+ .paletteNum = 0x0a,
+ .baseBlock = 0x00ac
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const u16 sPalette_OneBlackThenAllWhite[] = INCBIN_U16("data/credits/unk_840C630.gbapal");
+static const u32 sAffineCircleGfx[] = INCBIN_U32("data/credits/unk_840C650.8bpp.lz");
+static const u32 sAffineCircleMap[] = INCBIN_U32("data/credits/unk_840CA54.bin.lz");
+static const u32 sWindow1Map_Charizard[] = INCBIN_U32("data/credits/unk_840CB8C.bin.lz");
+static const u32 sWindow2Map_Charizard[] = INCBIN_U32("data/credits/unk_840D228.bin.lz");
+static const u32 sUnusedTilemap[] = INCBIN_U32("data/credits/unk_840DC0C.bin.lz");
+static const u32 sWindow1Map_Venusaur[] = INCBIN_U32("data/credits/unk_840E158.bin.lz");
+static const u32 sWindow2Map_Venusaur[] = INCBIN_U32("data/credits/unk_840E904.bin.lz");
+static const u32 sWindow1Map_Blastoise[] = INCBIN_U32("data/credits/unk_840F240.bin.lz");
+static const u32 sWindow2Map_Blastoise[] = INCBIN_U32("data/credits/unk_840F944.bin.lz");
+static const u32 sWindow1Map_Pikachu[] = INCBIN_U32("data/credits/unk_8410198.bin.lz");
+static const u32 sWindow2Map_Pikachu[] = INCBIN_U32("data/credits/unk_84105B4.bin.lz");
+
+static const u32 filler_8410AFC = 0xF0;
+
+static const u16 sTheEndGfxPal[] = INCBIN_U16("data/credits/unk_8410B20.gbapal");
+static const u8 sTheEndGfxTiles[] = INCBIN_U8("data/credits/unk_8410B20.4bpp.lz");
+static const u8 sTheEndGfxMap[] = INCBIN_U8("data/credits/unk_8410B20.bin.lz");
+
+static const struct CompressedGraphicsHeader sCopyrightOrTheEndGfxHeaders[] = {
+ {
+ .tiles = gCreditsAllRightsReservedGfxTiles,
+ .map = gCreditsAllRightsReservedGfxMap,
+ .palette = gCreditsAllRightsReservedGfxPal
+ }, {
+ .tiles = sTheEndGfxTiles,
+ .map = sTheEndGfxMap,
+ .palette = sTheEndGfxPal
+ }
+};
+
+#define CREDITS_PRINT(text, duration) { CREDITSSCRCMD_PRINT, CREDITS_STRING_##text, duration }
+#define CREDITS_MAPNEXT(map, duration) { CREDITSSCRCMD_MAPNEXT, CREDITS_MAP_##map, duration }
+#define CREDITS_MAP(map, duration) { CREDITSSCRCMD_MAP, CREDITS_MAP_##map, duration }
+#define CREDITS_MON(mon) { CREDITSSCRCMD_MON, CREDITSMON_##mon }
+#define CREDITS_THEENDGFX(idx, duration) { CREDITSSCRCMD_THEENDGFX, CREDITSCLOSING_##idx, duration }
+#define CREDITS_WAITBUTTON(time) { CREDITSSCRCMD_WAITBUTTON, .duration = time }
+
+static const struct CreditsScrcmd sCreditsScript[] = {
+ CREDITS_MAPNEXT(ROUTE23, 16),
+ CREDITS_PRINT(DIRECTOR, 300),
+ CREDITS_PRINT(ART_DIRECTOR_BATTLE_DIRECTOR, 300),
+ CREDITS_PRINT(PROGRAM_LEADER_PLANNING_LEADER_GRAPHIC_DESIGN_LEADER, 300),
+ CREDITS_PRINT(DUMMY, 60),
+ CREDITS_MAPNEXT(VIRIDIAN_CITY, 0),
+ CREDITS_PRINT(PROGRAMMERS, 211),
+ CREDITS_PRINT(SYSTEM_PROGRAMMERS, 211),
+ CREDITS_PRINT(GRAPHIC_DESIGNERS, 211),
+ CREDITS_MAPNEXT(PEWTER_CITY, 0),
+ CREDITS_PRINT(GRAPHIC_DESIGNERS_2, 211),
+ CREDITS_PRINT(MUSIC_COMPOSITION, 210),
+ CREDITS_PRINT(SOUND_EFFECTS, 210),
+ CREDITS_MON(CHARIZARD),
+ CREDITS_MAP(CERULEAN_CITY, 16),
+ CREDITS_PRINT(GAME_DESIGNERS, 211),
+ CREDITS_PRINT(GAME_DESIGNERS_2, 210),
+ CREDITS_PRINT(GAME_SCENARIO, 210),
+ CREDITS_MAPNEXT(ROUTE25, 16),
+ CREDITS_PRINT(SCRIPT_DESIGNER_MAP_DESIGNER, 211),
+ CREDITS_PRINT(PARAMETRIC_DESIGNERS, 210),
+ CREDITS_PRINT(POKEDEX_TEXT, 210),
+ CREDITS_MAPNEXT(VERMILION_CITY, 16),
+ CREDITS_PRINT(POKEMON_DESIGNERS, 211),
+ CREDITS_PRINT(POKEMON_DESIGNERS_2, 210),
+ CREDITS_PRINT(POKEMON_DESIGNERS_3, 210),
+ CREDITS_MON(VENUSAUR),
+ CREDITS_MAP(ROUTE10, 16),
+ CREDITS_PRINT(SUPPORTING_PROGRAMMERS, 211),
+ CREDITS_PRINT(NCL_PRODUCT_TESTING, 210),
+ CREDITS_PRINT(SPECIAL_THANKS, 210),
+ CREDITS_MAPNEXT(CELADON_CITY, 16),
+ CREDITS_PRINT(SPECIAL_THANKS_2, 221),
+ CREDITS_PRINT(SPECIAL_THANKS_3, 221),
+ CREDITS_PRINT(BRAILLE_CODE_CHECK, 221),
+ CREDITS_PRINT(INFORMATION_SUPERVISORS, 221),
+ CREDITS_PRINT(DUMMY, 51),
+ CREDITS_MAPNEXT(SAFFRON_CITY_DUPLICATE, 16),
+ CREDITS_PRINT(COORDINATORS, 211),
+ CREDITS_PRINT(TASK_MANAGERS, 210),
+ CREDITS_PRINT(PRODUCERS, 210),
+ CREDITS_MON(BLASTOISE),
+ CREDITS_MAP(ROUTE17, 16),
+ CREDITS_PRINT(EXECUTIVE_DIRECTOR, 331),
+ CREDITS_PRINT(EXECUTIVE_PRODUCER, 331),
+ CREDITS_PRINT(EXECUTIVE_PRODUCER_2, 331),
+ CREDITS_MAPNEXT(FUCHSIA_CITY, 16),
+ CREDITS_PRINT(ENGLISH_VERSION_COORDINATORS, 221),
+ CREDITS_PRINT(TRANSLATOR_TEXT_EDITOR, 221),
+ CREDITS_PRINT(PROGRAMMERS_2, 221),
+ CREDITS_PRINT(ENVIRONMENT_TOOL_PROGRAMMERS, 221),
+ CREDITS_PRINT(DUMMY, 52),
+ CREDITS_MAPNEXT(CINNABAR_ISLAND, 16),
+ CREDITS_PRINT(GRAPHIC_DESIGNER, 210),
+ CREDITS_PRINT(NOA_PRODUCT_TESTING, 210),
+ CREDITS_PRINT(BRAILLE_CODE_CHECK_2, 211),
+ CREDITS_MON(PIKACHU),
+ CREDITS_MAP(ROUTE21_NORTH, 16),
+ CREDITS_PRINT(BRAILLE_CODE_CHECK_3, 221),
+ CREDITS_PRINT(BRAILLE_CODE_CHECK_4, 221),
+ CREDITS_PRINT(SPECIAL_THANKS_4, 221),
+ CREDITS_PRINT(SPECIAL_THANKS_5, 221),
+ CREDITS_PRINT(DUMMY, 52),
+ CREDITS_THEENDGFX(ALLRIGHTSRESERVED, 224),
+ CREDITS_THEENDGFX(THEEND, 240),
+ CREDITS_WAITBUTTON(600)
+};
+
+static const ALIGNED(4) u8 sTextColor_Unused[3] = {0, 1, 2};
+static const ALIGNED(4) u8 sTextColor_Header[3] = {0, 5, 2};
+static const ALIGNED(4) u8 sTextColor_Regular[3] = {0, 1, 2};
+
+static const struct WindowTemplate sCreditsWindowTemplate = {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 4,
+ .width = 30,
+ .height = 12,
+ .paletteNum = 15,
+ .baseBlock = 0x008
+};
+
+static const u16 sMalePlayerSpritePal[] = INCBIN_U16("data/credits/unk_8410E10.gbapal");
+static const u32 sMalePlayerSpriteGfx[] = INCBIN_U32("data/credits/unk_8410E30.4bpp.lz");
+static const u16 sFemalePlayerSpritePal[] = INCBIN_U16("data/credits/unk_8411BF8.gbapal");
+static const u32 sFemalePlayerSpriteGfx[] = INCBIN_U32("data/credits/unk_8411C18.4bpp.lz");
+static const u16 sRivalSpritePal[] = INCBIN_U16("data/credits/unk_84129A0.gbapal");
+static const u32 sRivalSpriteGfx[] = INCBIN_U32("data/credits/unk_84129C0.4bpp.lz");
+static const u16 sGroundSpritePal_Grass[] = INCBIN_U16("data/credits/unk_8413318.gbapal");
+static const u32 sGroundSpriteGfx_Grass[] = INCBIN_U32("data/credits/unk_8413338.4bpp.lz");
+static const u16 sGroundSpritePal_Dirt[] = INCBIN_U16("data/credits/unk_8413854.gbapal");
+static const u32 sGroundSpriteGfx_Dirt[] = INCBIN_U32("data/credits/unk_8413874.4bpp.lz");
+static const u16 sGroundSpritePal_City[] = INCBIN_U16("data/credits/unk_8413D98.gbapal");
+static const u32 sGroundSpriteGfx_City[] = INCBIN_U32("data/credits/unk_8413DB8.4bpp.lz");
+
+static const u16 sPlayerRivalSpriteParams[][3] = {
+ { 0, 3, 1 },
+ { 0, 2, 0 },
+ { 0, 3, 0 },
+ { 1, 1, 2 },
+ { 0, 0, 3 }
+};
+
+static const struct OamData sOamData_PlayerOrRival = {
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .mosaic = FALSE,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
+ .shape = ST_OAM_SQUARE,
+ .size = ST_OAM_SIZE_3,
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 15
+};
+
+const union AnimCmd sAnimCmds_PlayerOrRival[] = {
+ ANIMCMD_FRAME(0x000, 8),
+ ANIMCMD_FRAME(0x040, 8),
+ ANIMCMD_FRAME(0x080, 8),
+ ANIMCMD_FRAME(0x0C0, 8),
+ ANIMCMD_FRAME(0x100, 8),
+ ANIMCMD_FRAME(0x140, 8),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd *const sAnimCmdTable_PlayerOrRival[] = {
+ sAnimCmds_PlayerOrRival
+};
+
+static const struct SpriteTemplate sPlayerOrRivalSpriteTemplate = {
+ .oam = &sOamData_PlayerOrRival,
+ .anims = sAnimCmdTable_PlayerOrRival,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct OamData sOamData_Ground = {
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .mosaic = FALSE,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
+ .shape = ST_OAM_H_RECTANGLE,
+ .size = ST_OAM_SIZE_3,
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 14
+};
+
+const union AnimCmd sAnimCmds_GroundRunning[] = {
+ ANIMCMD_FRAME(0x00, 8),
+ ANIMCMD_FRAME(0x20, 8),
+ ANIMCMD_FRAME(0x40, 8),
+ ANIMCMD_FRAME(0x60, 8),
+ ANIMCMD_FRAME(0x80, 8),
+ ANIMCMD_FRAME(0xA0, 8),
+ ANIMCMD_FRAME(0xC0, 8),
+ ANIMCMD_FRAME(0xE0, 8),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd sAnimCmds_GroundStatic[] = {
+ ANIMCMD_FRAME(0x00, 8),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd *const sAnimCmdTable_GroundRunning[] = {
+ sAnimCmds_GroundRunning
+};
+
+const union AnimCmd *const sAnimCmdTable_GroundStatic[] = {
+ sAnimCmds_GroundStatic
+};
+
+static const struct SpriteTemplate sGroundSpriteTemplate_Running = {
+ .oam = &sOamData_Ground,
+ .anims = sAnimCmdTable_GroundRunning,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate sGroundSpriteTemplate_Static = {
+ .oam = &sOamData_Ground,
+ .anims = sAnimCmdTable_GroundStatic,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_Route23[] = {
+ { 0x00fe, MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23) },
+ { 0x000b, 0x006b, 0x0001 },
+ { 0x0000, 0x0001, 0x0500 }, // Scroll down
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_ViridianCity[] = {
+ { 0x00fe, MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY) },
+ { 0x001e, 0x0022, 0x0001 },
+ { 0x0000, 0xffff, 0x0500 }, // Scroll up
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_PewterCity[] = {
+ { 0x00fe, MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY) },
+ { 0x0014, 0x001a, 0x0001 },
+ { 0x0000, 0xffff, 0x0500 }, // Scroll up
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_CeruleanCity[] = {
+ { 0x00fe, MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY) },
+ { 0x0008, 0x0006, 0x0001 },
+ { 0x0001, 0x0001, 0x0500 }, // Scroll right and down
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_Route25[] = {
+ { 0x00fe, MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
+ { 0x0019, 0x0006, 0x0001 },
+ { 0x0001, 0x0000, 0x0500 }, // Scroll right
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_VermilionCity[] = {
+ { 0x00fe, MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY) },
+ { 0x0009, 0x0007, 0x0001 },
+ { 0x0001, 0x0001, 0x0500 }, // Scroll right and down
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_Route10[] = {
+ { 0x00fe, MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) },
+ { 0x000b, 0x0044, 0x0001 },
+ { 0x0000, 0x0001, 0x0500 }, // Scroll down
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_CeladonCity[] = {
+ { 0x00fe, MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY) },
+ { 0x0030, 0x0010, 0x0001 },
+ { 0xffff, 0x0000, 0x0500 }, // Scroll left
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_SaffronCity[] = {
+ { 0x00fe, MAP_GROUP(SAFFRON_CITY_DUPLICATE), MAP_NUM(SAFFRON_CITY_DUPLICATE) },
+ { 0x0027, 0x0005, 0x0001 },
+ { 0x0000, 0x0001, 0x0500 }, // Scroll down
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_Route17[] = {
+ { 0x00fe, MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
+ { 0x0007, 0x002b, 0x0001 },
+ { 0x0000, 0x0001, 0x0500 }, // Scroll down
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_FuchsiaCity[] = {
+ { 0x00fe, MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY) },
+ { 0x001c, 0x0005, 0x0001 },
+ { 0x0000, 0x0001, 0x0500 }, // Scroll down
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_CinnabarIsland[] = {
+ { 0x00fe, MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND) },
+ { 0x000d, 0x0011, 0x0001 },
+ { 0x0000, 0xffff, 0x0500 }, // Scroll up
+ { 0x00fd, 0x00fd, 0x00fd }
+};
+
+static const struct CreditsOverworldCmd sOverworldCmd_Route21[] = {
+ { 0x00fe, MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
+ { 0x0008, 0x0014, 0x0001 },
+ { 0x0000, 0xffff, 0x0500 }, // Scroll up
+ { 0x00fd, 0x00fd, 0x00fd },
+};
+
+static const struct CreditsOverworldCmd *const sOverworldMapScenes[] = {
+ sOverworldCmd_Route23,
+ sOverworldCmd_ViridianCity,
+ sOverworldCmd_PewterCity,
+ sOverworldCmd_CeruleanCity,
+ sOverworldCmd_Route25,
+ sOverworldCmd_VermilionCity,
+ sOverworldCmd_Route10,
+ sOverworldCmd_CeladonCity,
+ sOverworldCmd_SaffronCity,
+ sOverworldCmd_Route17,
+ sOverworldCmd_FuchsiaCity,
+ sOverworldCmd_CinnabarIsland,
+ sOverworldCmd_Route21
+};
+
+static const struct CreditsTextHeader sCreditsTexts[] = {
+ { gCreditsString_Director, gCreditsString_Junichi_Masuda, FALSE },
+ { gCreditsString_Art_Director_Battle_Director, gCreditsString_Ken_Sugimori_Shigeki_Morimoto, FALSE },
+ { gCreditsString_Program_Leader_Planning_Leader_Graphic_Design_Leader, gCreditsString_Tetsuya_Watanabe_Koji_Nishino_Takao_Unno, FALSE },
+ { gCreditsString_Programmers, gCreditsString_Hiroyuki_Nakamura_Masao_Taya_Satoshi_Nohara_Miyuki_Iwasawa_Daisuke_Goto, FALSE },
+ { gCreditsString_System_Programmers, gCreditsString_Tetsuya_Watanabe_Akito_Mori_Hisashi_Sogabe_Sousuke_Tamada, TRUE },
+ { gCreditsString_Graphic_Designers, gCreditsString_Takao_Unno_Asuka_Iwashita_Kanako_Eo_Hiroki_Fuchino, TRUE },
+ { gCreditsString_Graphic_Designers_2, gCreditsString_Ken_Sugimori_Hironobu_Yoshida, TRUE },
+ { gCreditsString_Music_Composition, gCreditsString_Go_Ichinose_Junichi_Masuda, TRUE },
+ { gCreditsString_Sound_Effects, gCreditsString_Go_Ichinose, FALSE },
+ { gCreditsString_Game_Designers, gCreditsString_Junichi_Masuda_Koji_Nishino_Tetsuji_Ohta, FALSE },
+ { gCreditsString_Game_Designers_2, gCreditsString_Hitomi_Sato_Shigeru_Ohmori_Tadashi_Takahashi, FALSE },
+ { gCreditsString_Game_Scenario, gCreditsString_Hitomi_Sato_Satoshi_Tajiri, TRUE },
+ { gCreditsString_Script_Designer_Map_Designer, gCreditsString_Satoshi_Nohara_Shigeru_Ohmori, FALSE },
+ { gCreditsString_Parametric_Designers, gCreditsString_Koji_Nishino_Tetsuji_Ohta_Shigeki_Morimoto, FALSE },
+ { gCreditsString_POKeDEX_Text, gCreditsString_Kenji_Matsushima, FALSE },
+ { gCreditsString_POKeMON_Designers, gCreditsString_Ken_Sugimori_Motofumi_Fujiwara_Shigeki_Morimoto_Hironobu_Yoshida, TRUE },
+ { gCreditsString_POKeMON_Designers_2, gCreditsString_Satoshi_Ohta_Asuka_Iwashita_Takao_Unno_Kanako_Eo_Aimi_Tomita, FALSE },
+ { gCreditsString_POKeMON_Designers_3, gCreditsString_Atsuko_Nishida_Muneo_Saito_Rena_Yoshikawa_Jun_Okutani, TRUE },
+ { gCreditsString_Supporting_Programmers, gCreditsString_Teruyuki_Yoshioka_Takao_Nakano_Satoshi_Mitsuhara_Daisuke_Hoshino, FALSE },
+ { gCreditsString_NCL_Product_Testing, gCreditsString_NCL_Super_Mario_Club, FALSE },
+ { gCreditsString_Special_Thanks, gCreditsString_Hiro_Nakamura_Hiroyuki_Uesugi_Teruki_Murakawa_Kazuya_Suyama, FALSE },
+ { gCreditsString_Special_Thanks_2, gCreditsString_Kenji_Tominaga_Kenjiro_Ito_Tomotaka_Komura_Michiko_Takizawa, FALSE },
+ { gCreditsString_Special_Thanks_3, gCreditsString_Makiko_Takada_Mikiko_Ohashi_Shusaku_Egami_Takanao_Kondo_Rui_Kawaguchi, FALSE },
+ { gCreditsString_Braille_Code_Check, gCreditsString_Japan_Braille_Library, FALSE },
+ { gCreditsString_Information_Supervisors, gCreditsString_Hiroki_Enomoto_Kazuyuki_Terada_Yuri_Sakurai_Yumi_Funasaka_Naoko_Yanase, FALSE },
+ { gCreditsString_Coordinators, gCreditsString_Azusa_Tajima_Akira_Kinashi_Kazuki_Yoshihara_Retsuji_Nomoto, FALSE },
+ { gCreditsString_Task_Managers, gCreditsString_Hitoshi_Yamagami_Gakuji_Nomoto, TRUE },
+ { gCreditsString_Producers, gCreditsString_Hiroyuki_Jinnai_Takehiro_Izushi_Hiroaki_Tsuru, FALSE },
+ { gCreditsString_Executive_Director, gCreditsString_Satoshi_Tajiri, FALSE },
+ { gCreditsString_Executive_Producer, gCreditsString_Satoru_Iwata, FALSE },
+ { gCreditsString_Executive_Producer_2, gCreditsString_Tsunekaz_Ishihara, FALSE },
+ { gCreditsString_English_Version_Coordinators, gCreditsString_Hiro_Nakamura_Seth_McMahill, FALSE },
+ { gCreditsString_Translator_Text_Editor, gCreditsString_Nob_Ogasawara_Teresa_Lillygren, FALSE },
+ { gCreditsString_Programmers_2, gCreditsString_Teruki_Murakawa_Souichi_Yamamoto_Yuichiro_Ito_Akira_Kinashi, FALSE },
+ { gCreditsString_Environment_Tool_Programmers, gCreditsString_Teruki_Murakawa_Souichi_Yamamoto_Kimiko_Nakamichi, TRUE },
+ { gCreditsString_NOA_Product_Testing, gCreditsString_Thomas_Hertzog_Kathy_Huguenard_Mika_Kurosawa, TRUE },
+ { gCreditsString_Braille_Code_Check_2, gCreditsString_National_Federation_of_the_Blind_Patricia_A_Maurer_Japan_Braille_Library_European_Blind_Union, TRUE },
+ { gCreditsString_Braille_Code_Check_3, gCreditsString_National_Information_Library_Service_Margaret_Campion, TRUE },
+ { gCreditsString_Special_Thanks_4, gCreditsString_Takehiro_Izushi_Motoyasu_Tojima_Hitoshi_Yamagami_Hiroyuki_Uesugi, FALSE },
+ { gCreditsString_Special_Thanks_5, gCreditsString_Nicola_Pratt_Barlow_Shellie_Dow_Anthony_Howitt_Naoko_Saeki_Kyoko_Onishi, FALSE },
+ { gCreditsString_Braille_Code_Check_4, gCreditsString_The_Royal_New_Zealand_Foundation_of_the_Blind_Greg_Moran, FALSE },
+ { gCreditsString_Graphic_Designer, gCreditsString_Akira_Kinashi, FALSE },
+ { gString_Dummy, gString_Dummy, FALSE }
+};
+
+void Special_Credits(void)
+{
+ sCreditsMgr = AllocZeroed(sizeof(*sCreditsMgr));
+ ResetTasks();
+ sCreditsMgr->taskId = 0xFF;
+ sCreditsMgr->unk_1D = 0;
+ ResetSpriteData();
+ SetMainCallback2(CB2_Credits);
+}
+
+static void CB2_Credits(void)
+{
+ switch (RollCredits())
+ {
+ case 0:
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ break;
+ case 1:
+ if (sCreditsMgr->unk_1D & 1)
+ {
+ Overworld_CreditsMainCB();
+ }
+ else
+ {
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ }
+ sCreditsMgr->unk_1D++;
+ break;
+ case 2:
+ FlagClear(0x4000);
+ gDisableMapMusicChangeOnMapLoad = MUSIC_DISABLE_OFF;
+ Free(sCreditsMgr);
+ SoftReset(RESET_ALL);
+ // noreturn
+ }
+}
+
+static void SwitchWin1OffWin0On(void)
+{
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ SetGpuReg(REG_OFFSET_WININ, 0x1F3F);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x000E);
+}
+
+static void InitBgDarkenEffect(void)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4));
+ SetGpuReg(REG_OFFSET_BLDY, 10);
+}
+
+static void CreateCreditsWindow(void)
+{
+ sCreditsMgr->windowId = AddWindow(&sCreditsWindowTemplate);
+ FillWindowPixelBuffer(sCreditsMgr->windowId, PIXEL_FILL(0));
+ PutWindowTilemap(sCreditsMgr->windowId);
+ CopyWindowToVram(sCreditsMgr->windowId, 3);
+ sCreditsMgr->windowIsActive = TRUE;
+}
+
+static void DestroyCreditsWindow(void)
+{
+ if (sCreditsMgr->windowIsActive)
+ {
+ RemoveWindow(sCreditsMgr->windowId);
+ CleanupOverworldWindowsAndTilemaps();
+ sCreditsMgr->windowIsActive = FALSE;
+ }
+}
+
+static bool32 DoOverworldMapScrollScene(UNUSED u8 unused)
+{
+ switch (sCreditsMgr->subseqno)
+ {
+ case 0:
+ FlagSet(0x4000);
+ gDisableMapMusicChangeOnMapLoad = MUSIC_DISABLE_KEEP;
+ sCreditsMgr->ovwldseqno = 0;
+ sCreditsMgr->subseqno++;
+ // fallthrough
+ case 1:
+ if (!Overworld_DoScrollSceneForCredits(&sCreditsMgr->ovwldseqno, sOverworldMapScenes[sCreditsMgr->whichMon], 0))
+ return FALSE;
+ CreateCreditsWindow();
+ SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0x247C);
+ SwitchWin1OffWin0On();
+ InitBgDarkenEffect();
+ Menu_LoadStdPalAt(0xF0);
+ gPlttBufferUnfaded[0xFF] = RGB_BLACK;
+ gPlttBufferFaded[0xFF] = RGB_BLACK;
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+#ifdef NONMATCHING
+static s32 RollCredits(void)
+{
+ u16 win0v[8];
+
+ switch (sCreditsMgr->mainseqno)
+ {
+ case CREDITSSCENE_INIT_WIN0:
+ SwitchWin1OffWin0On();
+ SetGpuReg(REG_OFFSET_WIN0H, 0x40);
+ SetGpuReg(REG_OFFSET_WIN0V, 0x4F51);
+ sCreditsMgr->mainseqno = CREDITSSCENE_SETUP_DARKEN_EFFECT;
+ return 0;
+ case CREDITSSCENE_SETUP_DARKEN_EFFECT:
+ InitBgDarkenEffect();
+ CreateCreditsWindow();
+ Menu_LoadStdPalAt(0xF0);
+ gPlttBufferUnfaded[0xFF] = RGB_BLACK;
+ gPlttBufferFaded[0xFF] = RGB_BLACK;
+ sCreditsMgr->mainseqno = CREDITSSCENE_OPEN_WIN0;
+ return 0;
+ case CREDITSSCENE_OPEN_WIN0:
+ win0v[0] = GetGpuReg(REG_OFFSET_WIN0V) >> 8;
+ win0v[1] = GetGpuReg(REG_OFFSET_WIN0V) & 0xFF;
+ if (win0v[0] == 0x24)
+ {
+ sCreditsMgr->timer = 0;
+ sCreditsMgr->mainseqno = CREDITSSCENE_LOAD_PLAYER_SPRITE_AT_INDIGO;
+ }
+ else
+ {
+ win0v[0]--;
+ win0v[1]++;
+ SetGpuReg(REG_OFFSET_WIN0V, win0v[1] + (win0v[0] << 8));
+ }
+ return 0;
+ case CREDITSSCENE_LOAD_PLAYER_SPRITE_AT_INDIGO:
+ if (sCreditsMgr->timer != 0)
+ {
+ LoadPlayerOrRivalSprite(0);
+ sCreditsMgr->timer = 100;
+ sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_TITLE_STAFF;
+ }
+ else
+ {
+ sCreditsMgr->timer--;
+ }
+ return 0;
+ case CREDITSSCENE_PRINT_TITLE_STAFF:
+ if (sCreditsMgr->timer == 0)
+ {
+ sCreditsMgr->timer = 360;
+ AddTextPrinterParameterized4(sCreditsMgr->windowId, 1, 0x08, 0x29, 1, 2, sTextColor_Header, 0, TITLE_TEXT);
+ sCreditsMgr->mainseqno = CREDITSSCENE_WAIT_TITLE_STAFF;
+ }
+ else
+ {
+ sCreditsMgr->timer--;
+ }
+ return 0;
+ case CREDITSSCENE_WAIT_TITLE_STAFF:
+ if (sCreditsMgr->timer != 0)
+ {
+ sCreditsMgr->timer--;
+ }
+ else
+ {
+ DestroyCreditsWindow();
+ sCreditsMgr->mainseqno = CREDITSSCENE_EXEC_CMD;
+ sCreditsMgr->timer = 0;
+ sCreditsMgr->scrcmdidx = 0;
+ }
+ return 0;
+ case CREDITSSCENE_EXEC_CMD:
+ if (sCreditsMgr->timer != 0)
+ {
+ sCreditsMgr->timer--;
+ return sCreditsMgr->canSpeedThrough;
+ }
+ else
+ {
+ switch (sCreditsScript[sCreditsMgr->scrcmdidx].cmd)
+ {
+ case CREDITSSCRCMD_PRINT:
+ BeginNormalPaletteFade(0x00008000, 0, 0, 16, RGB_BLACK);
+ sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_ADDPRINTER1;
+ FillWindowPixelBuffer(sCreditsMgr->windowId, PIXEL_FILL(0));
+ return sCreditsMgr->canSpeedThrough;
+ case CREDITSSCRCMD_MAPNEXT:
+ sCreditsMgr->mainseqno = CREDITSSCENE_MAPNEXT_DESTROYWINDOW;
+ sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
+ FieldWeather_StartFadingOutCreditsMap(1, 0, 0x3FFFFFFF);
+ break;
+ case CREDITSSCRCMD_MAP:
+ sCreditsMgr->mainseqno = CREDITSSCENE_MAP_LOADMAP_CREATESPRITES;
+ sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
+ break;
+ case CREDITSSCRCMD_MON:
+ sCreditsMgr->mainseqno = CREDITSSCENE_MON_DESTROY_ASSETS;
+ sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
+ fade_screen(1, 0);
+ break;
+ case CREDITSSCRCMD_THEENDGFX:
+ sCreditsMgr->mainseqno = CREDITSSCENE_THEEND_DESTROY_ASSETS;
+ sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
+ BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 16, RGB_BLACK);
+ break;
+ case CREDITSSCRCMD_WAITBUTTON:
+ sCreditsMgr->mainseqno = CREDITSSCENE_WAITBUTTON;
+ break;
+ }
+ sCreditsMgr->timer = sCreditsScript[sCreditsMgr->scrcmdidx].duration;
+ sCreditsMgr->scrcmdidx++;
+ return 0;
+ }
+ case CREDITSSCENE_PRINT_ADDPRINTER1:
+ if (!gPaletteFade.active)
+ {
+ win0v[0] = sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].unk1].unk_8; // unused
+ AddTextPrinterParameterized4(sCreditsMgr->windowId, 1, 2, 6, 0, 0, sTextColor_Header, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].unk1].unk_0);
+ sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_ADDPRINTER2;
+ }
+ return sCreditsMgr->canSpeedThrough;
+ case CREDITSSCENE_PRINT_ADDPRINTER2:
+ win0v[0] = sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].unk1].unk_8;
+ AddTextPrinterParameterized4(sCreditsMgr->windowId, 1, 2, 6, 0, 0, sTextColor_Header, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].unk1].unk_4);
+ sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_DELAY;
+ return sCreditsMgr->canSpeedThrough;
+ case CREDITSSCENE_PRINT_DELAY:
+ CopyWindowToVram(sCreditsMgr->windowId, 2);
+ sCreditsMgr->timer = sCreditsScript[sCreditsMgr->scrcmdidx].duration;
+ sCreditsMgr->scrcmdidx++;
+ BeginNormalPaletteFade(0x00008000, 0, 16, 0, RGB_BLACK);
+ sCreditsMgr->mainseqno = CREDITSSCENE_EXEC_CMD;
+ return sCreditsMgr->canSpeedThrough;
+ case CREDITSSCENE_MAPNEXT_DESTROYWINDOW:
+ if (!gPaletteFade.active)
+ {
+ DestroyCreditsWindow();
+ sCreditsMgr->subseqno = 0;
+ sCreditsMgr->mainseqno = CREDITSSCENE_MAPNEXT_LOADMAP;
+ }
+ return 0;
+ case CREDITSSCENE_MAPNEXT_LOADMAP:
+ if (DoOverworldMapScrollScene(sCreditsMgr->whichMon))
+ {
+ sCreditsMgr->canSpeedThrough = 1;
+ sCreditsMgr->mainseqno = CREDITSSCENE_EXEC_CMD;
+ }
+ return 0;
+ case CREDITSSCENE_MAP_LOADMAP_CREATESPRITES:
+ if (!gPaletteFade.active)
+ {
+ DestroyCreditsWindow();
+ sCreditsMgr->subseqno = 0;
+ while (DoOverworldMapScrollScene(sCreditsMgr->whichMon))
+ {}
+ switch (sCreditsMgr->whichMon)
+ {
+ default:
+ win0v[0] = 1;
+ break;
+ case 6:
+ win0v[0] = 2;
+ break;
+ case 9:
+ win0v[0] = 3;
+ break;
+ case 12:
+ win0v[0] = 4;
+ break;
+ }
+ LoadPlayerOrRivalSprite(win0v[0]);
+ sCreditsMgr->canSpeedThrough = 1;
+ sCreditsMgr->mainseqno = CREDITSSCENE_EXEC_CMD;
+ }
+ return 0;
+ case CREDITSSCENE_MON_DESTROY_ASSETS:
+ if (!gPaletteFade.active)
+ {
+ DestroyPlayerOrRivalSprite();
+ DestroyCreditsWindow();
+ sCreditsMgr->subseqno = 0;
+ sCreditsMgr->canSpeedThrough = 0;
+ sCreditsMgr->mainseqno = CREDITSSCENE_MON_SHOW;
+ }
+ return 0;
+ case CREDITSSCENE_MON_SHOW:
+ if (DoCreditsMonScene())
+ {
+ sCreditsMgr->mainseqno = CREDITSSCENE_EXEC_CMD;
+ }
+ return 0;
+ case CREDITSSCENE_THEEND_DESTROY_ASSETS:
+ if (!gPaletteFade.active)
+ {
+ DestroyCreditsWindow();
+ sCreditsMgr->subseqno = 0;
+ sCreditsMgr->canSpeedThrough = 0;
+ sCreditsMgr->mainseqno = CREDITSSCENE_THEEND_SHOW;
+ }
+ return 0;
+ case CREDITSSCENE_THEEND_SHOW:
+ if (DoCopyrightOrTheEndGfxScene())
+ {
+ sCreditsMgr->mainseqno = CREDITSSCENE_EXEC_CMD;
+ }
+ return 0;
+ case CREDITSSCENE_WAITBUTTON:
+ if (JOY_NEW(A_BUTTON))
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE);
+ sCreditsMgr->mainseqno = CREDITSSCENE_TERMINATE;
+ }
+ else if (sCreditsMgr->timer == 0)
+ {
+ sCreditsMgr->mainseqno = CREDITSSCENE_TERMINATE;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE);
+ }
+ else
+ sCreditsMgr->timer--;
+ return 0;
+ case CREDITSSCENE_TERMINATE:
+ if (!gPaletteFade.active)
+ DestroyCreditsWindow();
+ break;
+ }
+ return 2;
+}
+#else
+NAKED
+static s32 RollCredits(void)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tsub sp, 0x24\n"
+ "\tldr r1, _080F3BEC @ =sCreditsMgr\n"
+ "\tldr r0, [r1]\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r7, r1, 0\n"
+ "\tcmp r0, 0x12\n"
+ "\tbls _080F3BE2\n"
+ "\tb _080F4180_default_return2\n"
+ "_080F3BE2:\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _080F3BF0 @ =_080F3BF4\n"
+ "\tadds r0, r1\n"
+ "\tldr r0, [r0]\n"
+ "\tmov pc, r0\n"
+ "\t.align 2, 0\n"
+ "_080F3BEC: .4byte sCreditsMgr\n"
+ "_080F3BF0: .4byte _080F3BF4\n"
+ "\t.align 2, 0\n"
+ "_080F3BF4:\n"
+ "\t.4byte _080F3C40_case00\n"
+ "\t.4byte _080F3C64_case01\n"
+ "\t.4byte _080F3C98_case02\n"
+ "\t.4byte _080F3CEE_case03\n"
+ "\t.4byte _080F3D0A_case04\n"
+ "\t.4byte _080F3D48_case05\n"
+ "\t.4byte _080F3D6A_case06\n"
+ "\t.4byte _080F3EB4_case07\n"
+ "\t.4byte _080F3F24_case08\n"
+ "\t.4byte _080F3F84_case09\n"
+ "\t.4byte _080F3FC4_case0A\n"
+ "\t.4byte _080F3FF0_case0B\n"
+ "\t.4byte _080F400A_case0C\n"
+ "\t.4byte _080F4084_case0D\n"
+ "\t.4byte _080F40B8_case0E\n"
+ "\t.4byte _080F40D0_case0F\n"
+ "\t.4byte _080F4100_case10\n"
+ "\t.4byte _080F4118_case11\n"
+ "\t.4byte _080F4170_case12\n"
+ "_080F3C40_case00:\n"
+ "\tbl SwitchWin1OffWin0On\n"
+ "\tmovs r0, 0x40\n"
+ "\tmovs r1, 0xF0\n"
+ "\tbl SetGpuReg\n"
+ "\tldr r1, _080F3C5C @ =0x00004f51\n"
+ "\tmovs r0, 0x44\n"
+ "\tbl SetGpuReg\n"
+ "\tldr r0, _080F3C60 @ =sCreditsMgr\n"
+ "\tldr r1, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F3C5C: .4byte 0x00004f51\n"
+ "_080F3C60: .4byte sCreditsMgr\n"
+ "_080F3C64_case01:\n"
+ "\tbl InitBgDarkenEffect\n"
+ "\tbl CreateCreditsWindow\n"
+ "\tmovs r0, 0xF0\n"
+ "\tbl Menu_LoadStdPalAt\n"
+ "\tldr r0, _080F3C8C @ =gPlttBufferUnfaded\n"
+ "\tmovs r2, 0xFF\n"
+ "\tlsls r2, 1\n"
+ "\tadds r0, r2\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r1, [r0]\n"
+ "\tldr r0, _080F3C90 @ =gPlttBufferFaded\n"
+ "\tadds r0, r2\n"
+ "\tstrh r1, [r0]\n"
+ "\tldr r0, _080F3C94 @ =sCreditsMgr\n"
+ "\tldr r1, [r0]\n"
+ "\tmovs r0, 0x2\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F3C8C: .4byte gPlttBufferUnfaded\n"
+ "_080F3C90: .4byte gPlttBufferFaded\n"
+ "_080F3C94: .4byte sCreditsMgr\n"
+ "_080F3C98_case02:\n"
+ "\tmovs r0, 0x44\n"
+ "\tbl GetGpuReg\n"
+ "\tadd r1, sp, 0x14\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 24\n"
+ "\tstrh r0, [r1]\n"
+ "\tmovs r0, 0x44\n"
+ "\tbl GetGpuReg\n"
+ "\tadd r2, sp, 0x14\n"
+ "\tmovs r1, 0xFF\n"
+ "\tands r1, r0\n"
+ "\tstrh r1, [r2, 0x2]\n"
+ "\tadds r0, r2, 0\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, 0x24\n"
+ "\tbne _080F3CCC\n"
+ "\tldr r0, _080F3CC8 @ =sCreditsMgr\n"
+ "\tldr r1, [r0]\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r1, 0x4]\n"
+ "\tmovs r0, 0x3\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F3CC8: .4byte sCreditsMgr\n"
+ "_080F3CCC:\n"
+ "\tadd r1, sp, 0x14\n"
+ "\tsubs r0, 0x1\n"
+ "\tstrh r0, [r1]\n"
+ "\tadds r2, r1, 0\n"
+ "\tadds r0, r1, 0\n"
+ "\tldrh r1, [r0, 0x2]\n"
+ "\tadds r1, 0x1\n"
+ "\tstrh r1, [r2, 0x2]\n"
+ "\tldrh r0, [r0]\n"
+ "\tlsls r0, 8\n"
+ "\tadds r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r1, 16\n"
+ "\tmovs r0, 0x44\n"
+ "\tbl SetGpuReg\n"
+ "\tb _080F3D06_return0\n"
+ "_080F3CEE_case03:\n"
+ "\tldr r1, [r7]\n"
+ "\tldrh r0, [r1, 0x4]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080F3D52_decfield4_return0\n"
+ "\tmovs r0, 0\n"
+ "\tbl LoadPlayerOrRivalSprite\n"
+ "\tldr r0, [r7]\n"
+ "\tmovs r1, 0x64\n"
+ "\tstrh r1, [r0, 0x4]\n"
+ "\tmovs r1, 0x4\n"
+ "\tstrb r1, [r0]\n"
+ "_080F3D06_return0:\n"
+ "\tmovs r0, 0\n"
+ "\tb _080F4182_return\n"
+ "_080F3D0A_case04:\n"
+ "\tldr r1, [r7]\n"
+ "\tldrh r0, [r1, 0x4]\n"
+ "\tadds r2, r0, 0\n"
+ "\tcmp r2, 0\n"
+ "\tbne _080F3D52_decfield4_return0\n"
+ "\tmovs r0, 0xB4\n"
+ "\tlsls r0, 1\n"
+ "\tstrh r0, [r1, 0x4]\n"
+ "\tldrb r0, [r1, 0xA]\n"
+ "\tmovs r1, 0x1\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r1, 0x2\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tldr r1, _080F3D40 @ =sTextColor_Header\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tldr r1, _080F3D44 @ =TITLE_TEXT\n"
+ "\tstr r1, [sp, 0x10]\n"
+ "\tmovs r1, 0x1\n"
+ "\tmovs r2, 0x8\n"
+ "\tmovs r3, 0x29\n"
+ "\tbl AddTextPrinterParameterized4\n"
+ "\tldr r1, [r7]\n"
+ "\tmovs r0, 0x5\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F3D40: .4byte sTextColor_Header\n"
+ "_080F3D44: .4byte TITLE_TEXT\n"
+ "_080F3D48_case05:\n"
+ "\tldr r1, [r7]\n"
+ "\tldrh r0, [r1, 0x4]\n"
+ "\tadds r4, r0, 0\n"
+ "\tcmp r4, 0\n"
+ "\tbeq _080F3D58\n"
+ "_080F3D52_decfield4_return0:\n"
+ "\tsubs r0, 0x1\n"
+ "\tstrh r0, [r1, 0x4]\n"
+ "\tb _080F3D06_return0\n"
+ "_080F3D58:\n"
+ "\tbl DestroyCreditsWindow\n"
+ "\tldr r0, [r7]\n"
+ "\tmovs r1, 0x6\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r7]\n"
+ "\tstrh r4, [r0, 0x4]\n"
+ "\tstrh r4, [r0, 0x6]\n"
+ "\tb _080F3D06_return0\n"
+ "_080F3D6A_case06:\n"
+ "\tldr r2, [r7]\n"
+ "\tldrh r0, [r2, 0x4]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F3D7A\n"
+ "\tsubs r0, 0x1\n"
+ "\tstrh r0, [r2, 0x4]\n"
+ "\tldrb r0, [r2, 0x8]\n"
+ "\tb _080F4182_return\n"
+ "_080F3D7A:\n"
+ "\tldr r1, _080F3D94 @ =sCreditsScript\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0x5\n"
+ "\tbls _080F3D8A\n"
+ "\tb _080F3E94\n"
+ "_080F3D8A:\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _080F3D98 @ =_080F3D9C\n"
+ "\tadds r0, r1\n"
+ "\tldr r0, [r0]\n"
+ "\tmov pc, r0\n"
+ "\t.align 2, 0\n"
+ "_080F3D94: .4byte sCreditsScript\n"
+ "_080F3D98: .4byte _080F3D9C\n"
+ "\t.align 2, 0\n"
+ "_080F3D9C:\n"
+ "\t.4byte _080F3DB4\n"
+ "\t.4byte _080F3DE0\n"
+ "\t.4byte _080F3E10\n"
+ "\t.4byte _080F3E30\n"
+ "\t.4byte _080F3E58\n"
+ "\t.4byte _080F3E8C\n"
+ "_080F3DB4:\n"
+ "\tmovs r0, 0x80\n"
+ "\tlsls r0, 8\n"
+ "\tmovs r1, 0\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r3, 0x10\n"
+ "\tbl BeginNormalPaletteFade\n"
+ "\tldr r4, _080F3DDC @ =sCreditsMgr\n"
+ "\tldr r1, [r4]\n"
+ "\tmovs r0, 0x7\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r0, [r4]\n"
+ "\tldrb r0, [r0, 0xA]\n"
+ "\tmovs r1, 0\n"
+ "\tbl FillWindowPixelBuffer\n"
+ "\tldr r0, [r4]\n"
+ "\tldrb r0, [r0, 0x8]\n"
+ "\tb _080F4182_return\n"
+ "\t.align 2, 0\n"
+ "_080F3DDC: .4byte sCreditsMgr\n"
+ "_080F3DE0:\n"
+ "\tldr r2, _080F3E04 @ =sCreditsMgr\n"
+ "\tldr r1, [r2]\n"
+ "\tmovs r0, 0xA\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r2, [r2]\n"
+ "\tldr r1, _080F3E08 @ =sCreditsScript\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tstrb r0, [r2, 0x9]\n"
+ "\tldr r2, _080F3E0C @ =0x3fffffff\n"
+ "\tmovs r0, 0x1\n"
+ "\tmovs r1, 0\n"
+ "\tbl FieldWeather_StartFadingOutCreditsMap\n"
+ "\tb _080F3E94\n"
+ "\t.align 2, 0\n"
+ "_080F3E04: .4byte sCreditsMgr\n"
+ "_080F3E08: .4byte sCreditsScript\n"
+ "_080F3E0C: .4byte 0x3fffffff\n"
+ "_080F3E10:\n"
+ "\tldr r2, _080F3E28 @ =sCreditsMgr\n"
+ "\tldr r1, [r2]\n"
+ "\tmovs r0, 0xC\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r2, [r2]\n"
+ "\tldr r1, _080F3E2C @ =sCreditsScript\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tstrb r0, [r2, 0x9]\n"
+ "\tb _080F3E94\n"
+ "\t.align 2, 0\n"
+ "_080F3E28: .4byte sCreditsMgr\n"
+ "_080F3E2C: .4byte sCreditsScript\n"
+ "_080F3E30:\n"
+ "\tldr r2, _080F3E50 @ =sCreditsMgr\n"
+ "\tldr r1, [r2]\n"
+ "\tmovs r0, 0xD\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r2, [r2]\n"
+ "\tldr r1, _080F3E54 @ =sCreditsScript\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tstrb r0, [r2, 0x9]\n"
+ "\tmovs r0, 0x1\n"
+ "\tmovs r1, 0\n"
+ "\tbl fade_screen\n"
+ "\tb _080F3E94\n"
+ "\t.align 2, 0\n"
+ "_080F3E50: .4byte sCreditsMgr\n"
+ "_080F3E54: .4byte sCreditsScript\n"
+ "_080F3E58:\n"
+ "\tldr r2, _080F3E84 @ =sCreditsMgr\n"
+ "\tldr r1, [r2]\n"
+ "\tmovs r3, 0\n"
+ "\tmovs r0, 0xF\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r2, [r2]\n"
+ "\tldr r1, _080F3E88 @ =sCreditsScript\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tstrb r0, [r2, 0x9]\n"
+ "\tmovs r0, 0x1\n"
+ "\tnegs r0, r0\n"
+ "\tstr r3, [sp]\n"
+ "\tmovs r1, 0x4\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r3, 0x10\n"
+ "\tbl BeginNormalPaletteFade\n"
+ "\tb _080F3E94\n"
+ "\t.align 2, 0\n"
+ "_080F3E84: .4byte sCreditsMgr\n"
+ "_080F3E88: .4byte sCreditsScript\n"
+ "_080F3E8C:\n"
+ "\tldr r0, _080F3EAC @ =sCreditsMgr\n"
+ "\tldr r1, [r0]\n"
+ "\tmovs r0, 0x11\n"
+ "\tstrb r0, [r1]\n"
+ "_080F3E94:\n"
+ "\tldr r0, _080F3EAC @ =sCreditsMgr\n"
+ "\tldr r1, [r0]\n"
+ "\tldr r2, _080F3EB0 @ =sCreditsScript\n"
+ "\tldrh r0, [r1, 0x6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r2\n"
+ "\tldrh r0, [r0, 0x2]\n"
+ "\tstrh r0, [r1, 0x4]\n"
+ "\tldrh r0, [r1, 0x6]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r1, 0x6]\n"
+ "\tb _080F3D06_return0\n"
+ "\t.align 2, 0\n"
+ "_080F3EAC: .4byte sCreditsMgr\n"
+ "_080F3EB0: .4byte sCreditsScript\n"
+ "_080F3EB4_case07:\n"
+ "\tldr r0, _080F3F14 @ =gPaletteFade\n"
+ "\tldrb r1, [r0, 0x7]\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tcmp r6, 0\n"
+ "\tbne _080F3FBA_returnfield8\n"
+ "\tadd r3, sp, 0x14\n"
+ "\tldr r5, _080F3F18 @ =sCreditsTexts\n"
+ "\tldr r4, _080F3F1C @ =sCreditsScript\n"
+ "\tldr r2, [r7]\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r4\n"
+ "\tldrb r1, [r0, 0x1]\n"
+ "\tlsls r0, r1, 1\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r5\n"
+ "\tldrb r0, [r0, 0x8]\n"
+ "\tstrh r0, [r3]\n"
+ "\tldrb r0, [r2, 0xA]\n"
+ "\tstr r6, [sp]\n"
+ "\tstr r6, [sp, 0x4]\n"
+ "\tldr r1, _080F3F20 @ =sTextColor_Header\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tmovs r1, 0x1\n"
+ "\tnegs r1, r1\n"
+ "\tstr r1, [sp, 0xC]\n"
+ "\tldrh r1, [r2, 0x6]\n"
+ "\tlsls r1, 2\n"
+ "\tadds r1, r4\n"
+ "\tldrb r2, [r1, 0x1]\n"
+ "\tlsls r1, r2, 1\n"
+ "\tadds r1, r2\n"
+ "\tlsls r1, 2\n"
+ "\tadds r1, r5\n"
+ "\tldr r1, [r1]\n"
+ "\tstr r1, [sp, 0x10]\n"
+ "\tmovs r1, 0x1\n"
+ "\tmovs r2, 0x2\n"
+ "\tmovs r3, 0x6\n"
+ "\tbl AddTextPrinterParameterized4\n"
+ "\tldr r1, [r7]\n"
+ "\tmovs r0, 0x8\n"
+ "\tb _080F3FB8_setfield0_returnfield8\n"
+ "\t.align 2, 0\n"
+ "_080F3F14: .4byte gPaletteFade\n"
+ "_080F3F18: .4byte sCreditsTexts\n"
+ "_080F3F1C: .4byte sCreditsScript\n"
+ "_080F3F20: .4byte sTextColor_Header\n"
+ "_080F3F24_case08:\n"
+ "\tadd r4, sp, 0x14\n"
+ "\tldr r3, _080F3F78 @ =sCreditsTexts\n"
+ "\tldr r5, _080F3F7C @ =sCreditsScript\n"
+ "\tldr r2, [r7]\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r5\n"
+ "\tldrb r1, [r0, 0x1]\n"
+ "\tlsls r0, r1, 1\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r3\n"
+ "\tldrb r0, [r0, 0x8]\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r0, [r4]\n"
+ "\tldrb r0, [r2, 0xA]\n"
+ "\tstr r1, [sp]\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tldr r1, _080F3F80 @ =sTextColor_Regular\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tmovs r1, 0x1\n"
+ "\tnegs r1, r1\n"
+ "\tstr r1, [sp, 0xC]\n"
+ "\tldrh r1, [r2, 0x6]\n"
+ "\tlsls r1, 2\n"
+ "\tadds r1, r5\n"
+ "\tldrb r2, [r1, 0x1]\n"
+ "\tlsls r1, r2, 1\n"
+ "\tadds r1, r2\n"
+ "\tlsls r1, 2\n"
+ "\tadds r3, 0x4\n"
+ "\tadds r1, r3\n"
+ "\tldr r1, [r1]\n"
+ "\tstr r1, [sp, 0x10]\n"
+ "\tmovs r1, 0x2\n"
+ "\tmovs r2, 0x8\n"
+ "\tmovs r3, 0x6\n"
+ "\tbl AddTextPrinterParameterized4\n"
+ "\tldr r1, [r7]\n"
+ "\tmovs r0, 0x9\n"
+ "\tb _080F3FB8_setfield0_returnfield8\n"
+ "\t.align 2, 0\n"
+ "_080F3F78: .4byte sCreditsTexts\n"
+ "_080F3F7C: .4byte sCreditsScript\n"
+ "_080F3F80: .4byte sTextColor_Regular\n"
+ "_080F3F84_case09:\n"
+ "\tldr r0, [r7]\n"
+ "\tldrb r0, [r0, 0xA]\n"
+ "\tmovs r1, 0x2\n"
+ "\tbl CopyWindowToVram\n"
+ "\tldr r1, [r7]\n"
+ "\tldr r2, _080F3FC0 @ =sCreditsScript\n"
+ "\tldrh r0, [r1, 0x6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r2\n"
+ "\tldrh r0, [r0, 0x2]\n"
+ "\tmovs r2, 0\n"
+ "\tstrh r0, [r1, 0x4]\n"
+ "\tldrh r0, [r1, 0x6]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r1, 0x6]\n"
+ "\tmovs r0, 0x80\n"
+ "\tlsls r0, 8\n"
+ "\tstr r2, [sp]\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0x10\n"
+ "\tmovs r3, 0\n"
+ "\tbl BeginNormalPaletteFade\n"
+ "\tldr r1, [r7]\n"
+ "\tmovs r0, 0x6\n"
+ "_080F3FB8_setfield0_returnfield8:\n"
+ "\tstrb r0, [r1]\n"
+ "_080F3FBA_returnfield8:\n"
+ "\tldr r0, [r7]\n"
+ "\tldrb r0, [r0, 0x8]\n"
+ "\tb _080F4182_return\n"
+ "\t.align 2, 0\n"
+ "_080F3FC0: .4byte sCreditsScript\n"
+ "_080F3FC4_case0A:\n"
+ "\tldr r0, _080F3FE8 @ =gPaletteFade\n"
+ "\tldrb r1, [r0, 0x7]\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tcmp r4, 0\n"
+ "\tbeq _080F3FD6\n"
+ "\tb _080F3D06_return0\n"
+ "_080F3FD6:\n"
+ "\tbl DestroyCreditsWindow\n"
+ "\tldr r1, _080F3FEC @ =sCreditsMgr\n"
+ "\tldr r0, [r1]\n"
+ "\tstrb r4, [r0, 0x1]\n"
+ "\tldr r1, [r1]\n"
+ "\tmovs r0, 0xB\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F3FE8: .4byte gPaletteFade\n"
+ "_080F3FEC: .4byte sCreditsMgr\n"
+ "_080F3FF0_case0B:\n"
+ "\tldr r0, [r7]\n"
+ "\tldrb r0, [r0, 0x9]\n"
+ "\tbl DoOverworldMapScrollScene\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080F3FFE\n"
+ "\tb _080F3D06_return0\n"
+ "_080F3FFE:\n"
+ "\tldr r1, [r7]\n"
+ "\tmovs r0, 0x1\n"
+ "\tstrb r0, [r1, 0x8]\n"
+ "\tldr r1, [r7]\n"
+ "\tmovs r0, 0x6\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "_080F400A_case0C:\n"
+ "\tldr r0, _080F4050 @ =gPaletteFade\n"
+ "\tldrb r1, [r0, 0x7]\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tcmp r4, 0\n"
+ "\tbeq _080F401C\n"
+ "\tb _080F3D06_return0\n"
+ "_080F401C:\n"
+ "\tbl DestroyCreditsWindow\n"
+ "\tldr r1, _080F4054 @ =sCreditsMgr\n"
+ "\tldr r0, [r1]\n"
+ "\tstrb r4, [r0, 0x1]\n"
+ "\tadds r4, r1, 0\n"
+ "_080F4028:\n"
+ "\tldr r0, [r4]\n"
+ "\tldrb r0, [r0, 0x9]\n"
+ "\tbl DoOverworldMapScrollScene\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F4028\n"
+ "\tldr r0, _080F4054 @ =sCreditsMgr\n"
+ "\tldr r0, [r0]\n"
+ "\tldrb r0, [r0, 0x9]\n"
+ "\tcmp r0, 0x6\n"
+ "\tbeq _080F4058\n"
+ "\tcmp r0, 0x6\n"
+ "\tble _080F404A\n"
+ "\tcmp r0, 0x9\n"
+ "\tbeq _080F405E\n"
+ "\tcmp r0, 0xC\n"
+ "\tbeq _080F4064\n"
+ "_080F404A:\n"
+ "\tadd r1, sp, 0x14\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _080F4068\n"
+ "\t.align 2, 0\n"
+ "_080F4050: .4byte gPaletteFade\n"
+ "_080F4054: .4byte sCreditsMgr\n"
+ "_080F4058:\n"
+ "\tadd r1, sp, 0x14\n"
+ "\tmovs r0, 0x2\n"
+ "\tb _080F4068\n"
+ "_080F405E:\n"
+ "\tadd r1, sp, 0x14\n"
+ "\tmovs r0, 0x3\n"
+ "\tb _080F4068\n"
+ "_080F4064:\n"
+ "\tadd r1, sp, 0x14\n"
+ "\tmovs r0, 0x4\n"
+ "_080F4068:\n"
+ "\tstrh r0, [r1]\n"
+ "\tadd r0, sp, 0x14\n"
+ "\tldrb r0, [r0]\n"
+ "\tbl LoadPlayerOrRivalSprite\n"
+ "\tldr r2, _080F4080 @ =sCreditsMgr\n"
+ "\tldr r1, [r2]\n"
+ "\tmovs r0, 0x1\n"
+ "\tstrb r0, [r1, 0x8]\n"
+ "\tldr r1, [r2]\n"
+ "\tmovs r0, 0x6\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F4080: .4byte sCreditsMgr\n"
+ "_080F4084_case0D:\n"
+ "\tldr r0, _080F40B0 @ =gPaletteFade\n"
+ "\tldrb r1, [r0, 0x7]\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tcmp r4, 0\n"
+ "\tbeq _080F4096\n"
+ "\tb _080F3D06_return0\n"
+ "_080F4096:\n"
+ "\tbl DestroyPlayerOrRivalSprite\n"
+ "\tbl DestroyCreditsWindow\n"
+ "\tldr r1, _080F40B4 @ =sCreditsMgr\n"
+ "\tldr r0, [r1]\n"
+ "\tstrb r4, [r0, 0x1]\n"
+ "\tldr r0, [r1]\n"
+ "\tstrb r4, [r0, 0x8]\n"
+ "\tldr r1, [r1]\n"
+ "\tmovs r0, 0xE\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F40B0: .4byte gPaletteFade\n"
+ "_080F40B4: .4byte sCreditsMgr\n"
+ "_080F40B8_case0E:\n"
+ "\tbl DoCreditsMonScene\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080F40C2\n"
+ "\tb _080F3D06_return0\n"
+ "_080F40C2:\n"
+ "\tldr r0, _080F40CC @ =sCreditsMgr\n"
+ "\tldr r1, [r0]\n"
+ "\tmovs r0, 0x6\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F40CC: .4byte sCreditsMgr\n"
+ "_080F40D0_case0F:\n"
+ "\tldr r0, _080F40F8 @ =gPaletteFade\n"
+ "\tldrb r1, [r0, 0x7]\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tcmp r4, 0\n"
+ "\tbeq _080F40E2\n"
+ "\tb _080F3D06_return0\n"
+ "_080F40E2:\n"
+ "\tbl DestroyCreditsWindow\n"
+ "\tldr r1, _080F40FC @ =sCreditsMgr\n"
+ "\tldr r0, [r1]\n"
+ "\tstrb r4, [r0, 0x1]\n"
+ "\tldr r0, [r1]\n"
+ "\tstrb r4, [r0, 0x8]\n"
+ "\tldr r1, [r1]\n"
+ "\tmovs r0, 0x10\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F40F8: .4byte gPaletteFade\n"
+ "_080F40FC: .4byte sCreditsMgr\n"
+ "_080F4100_case10:\n"
+ "\tbl DoCopyrightOrTheEndGfxScene\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080F410A\n"
+ "\tb _080F3D06_return0\n"
+ "_080F410A:\n"
+ "\tldr r0, _080F4114 @ =sCreditsMgr\n"
+ "\tldr r1, [r0]\n"
+ "\tmovs r0, 0x6\n"
+ "\tb _080F413C_setfield0_return0\n"
+ "\t.align 2, 0\n"
+ "_080F4114: .4byte sCreditsMgr\n"
+ "_080F4118_case11:\n"
+ "\tldr r0, _080F4140 @ =gMain\n"
+ "\tldrh r1, [r0, 0x2E]\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F414C\n"
+ "\tmovs r0, 0x1\n"
+ "\tnegs r0, r0\n"
+ "\tldr r1, _080F4144 @ =0x00007fff\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r3, 0x10\n"
+ "\tbl BeginNormalPaletteFade\n"
+ "\tldr r0, _080F4148 @ =sCreditsMgr\n"
+ "\tldr r1, [r0]\n"
+ "\tmovs r0, 0x12\n"
+ "_080F413C_setfield0_return0:\n"
+ "\tstrb r0, [r1]\n"
+ "\tb _080F3D06_return0\n"
+ "\t.align 2, 0\n"
+ "_080F4140: .4byte gMain\n"
+ "_080F4144: .4byte 0x00007fff\n"
+ "_080F4148: .4byte sCreditsMgr\n"
+ "_080F414C:\n"
+ "\tldr r1, [r7]\n"
+ "\tldrh r0, [r1, 0x4]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F4156\n"
+ "\tb _080F3D52_decfield4_return0\n"
+ "_080F4156:\n"
+ "\tmovs r0, 0x12\n"
+ "\tstrb r0, [r1]\n"
+ "\tsubs r0, 0x13\n"
+ "\tldr r1, _080F416C @ =0x00007fff\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r3, 0x10\n"
+ "\tbl BeginNormalPaletteFade\n"
+ "\tb _080F3D06_return0\n"
+ "\t.align 2, 0\n"
+ "_080F416C: .4byte 0x00007fff\n"
+ "_080F4170_case12:\n"
+ "\tldr r0, _080F418C @ =gPaletteFade\n"
+ "\tldrb r1, [r0, 0x7]\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080F4180_default_return2\n"
+ "\tbl DestroyCreditsWindow\n"
+ "_080F4180_default_return2:\n"
+ "\tmovs r0, 0x2\n"
+ "_080F4182_return:\n"
+ "\tadd sp, 0x24\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+ "_080F418C: .4byte gPaletteFade");
+}
+#endif //NONMATCHING
+
+static void VBlankCB(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void LoadCreditsMonPic(u8 whichMon)
+{
+ switch (whichMon)
+ {
+ case CREDITSMON_CHARIZARD:
+ InitWindows(sWindowTemplates_Charizard);
+ FillWindowPixelBuffer(0, PIXEL_FILL(0));
+ LoadMonPicInWindow(SPECIES_CHARIZARD, 8, 0, TRUE, 10, 0);
+ CopyToWindowPixelBuffer(1, (const void *)sWindow1Map_Charizard, 0, 0);
+ CopyToWindowPixelBuffer(2, (const void *)sWindow2Map_Charizard, 0, 0);
+ break;
+ case CREDITSMON_VENUSAUR:
+ InitWindows(sWindowTemplates_Venusaur);
+ FillWindowPixelBuffer(0, PIXEL_FILL(0));
+ LoadMonPicInWindow(SPECIES_VENUSAUR, 8, 0, TRUE, 10, 0);
+ CopyToWindowPixelBuffer(1, (const void *)sWindow1Map_Venusaur, 0, 0);
+ CopyToWindowPixelBuffer(2, (const void *)sWindow2Map_Venusaur, 0, 0);
+ break;
+ case CREDITSMON_BLASTOISE:
+ InitWindows(sWindowTemplates_Blastoise);
+ FillWindowPixelBuffer(0, PIXEL_FILL(0));
+ LoadMonPicInWindow(SPECIES_BLASTOISE, 8, 0, TRUE, 10, 0);
+ CopyToWindowPixelBuffer(1, (const void *)sWindow1Map_Blastoise, 0, 0);
+ CopyToWindowPixelBuffer(2, (const void *)sWindow2Map_Blastoise, 0, 0);
+ break;
+ case CREDITSMON_PIKACHU:
+ InitWindows(sWindowTemplates_Pikachu);
+ FillWindowPixelBuffer(0, PIXEL_FILL(0));
+ LoadMonPicInWindow(SPECIES_PIKACHU, 8, 0, TRUE, 10, 0);
+ CopyToWindowPixelBuffer(1, (const void *)sWindow1Map_Pikachu, 0, 0);
+ CopyToWindowPixelBuffer(2, (const void *)sWindow2Map_Pikachu, 0, 0);
+ break;
+ }
+ CopyWindowToVram(0, 2);
+ CopyWindowToVram(1, 2);
+ CopyWindowToVram(2, 2);
+}
+
+static u16 GetCreditsMonSpecies(u8 whichMon)
+{
+ switch (whichMon)
+ {
+ case CREDITSMON_CHARIZARD:
+ return SPECIES_CHARIZARD;
+ case CREDITSMON_VENUSAUR:
+ return SPECIES_VENUSAUR;
+ case CREDITSMON_BLASTOISE:
+ return SPECIES_BLASTOISE;
+ case CREDITSMON_PIKACHU:
+ return SPECIES_PIKACHU;
+ default:
+ return SPECIES_NONE;
+ }
+}
+
+static bool32 DoCreditsMonScene(void)
+{
+ switch (sCreditsMgr->subseqno)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ ResetBgsAndClearDma3BusyFlags(1);
+ InitBgsFromTemplates(1, sBgTemplates_MonSceneOrTheEnd, NELEMS(sBgTemplates_MonSceneOrTheEnd));
+ SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE));
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ sCreditsMgr->creditsMonTimer = 0;
+ sCreditsMgr->unk_0E = 0;
+ SetBgAffine(2, 0x8000, 0x8000, 0x78, 0x50, sCreditsMgr->creditsMonTimer, sCreditsMgr->creditsMonTimer, 0);
+ DecompressAndLoadBgGfxUsingHeap(1, gCreditsPokeballBgGfxTiles, 0x2000, 0, 0);
+ DecompressAndLoadBgGfxUsingHeap(2, sAffineCircleGfx, 0x2000, 0, 0);
+ DecompressAndLoadBgGfxUsingHeap(1, gCreditsPokeballBgGfxMap, 0x500, 0, 1);
+ DecompressAndLoadBgGfxUsingHeap(2, sAffineCircleMap, 0x400, 0, 1);
+ LoadPalette(gCreditsMonBackdropPals[sCreditsMgr->whichMon], 0, 0x20);
+ LoadPalette(sPalette_OneBlackThenAllWhite, 0xF0, 0x20);
+ LoadCreditsMonPic(sCreditsMgr->whichMon);
+ SetVBlankCallback(VBlankCB);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ sCreditsMgr->subseqno++;
+ break;
+ case 1:
+ FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, PIXEL_FILL(1));
+ PutWindowTilemap(0);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(0);
+ sCreditsMgr->subseqno++;
+ break;
+ case 2:
+ ShowBg(2);
+ ShowBg(0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ sCreditsMgr->creditsMonTimer = 40;
+ sCreditsMgr->subseqno++;
+ break;
+ case 3:
+ if (sCreditsMgr->creditsMonTimer != 0)
+ sCreditsMgr->creditsMonTimer--;
+ else
+ sCreditsMgr->subseqno++;
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ sCreditsMgr->creditsMonTimer = 8;
+ sCreditsMgr->unk_0E = 1;
+ sCreditsMgr->subseqno++;
+ }
+ break;
+ case 5:
+ if (sCreditsMgr->creditsMonTimer != 0)
+ sCreditsMgr->creditsMonTimer--;
+ else
+ {
+ if (sCreditsMgr->unk_0E < 3)
+ {
+ PutWindowTilemap(sCreditsMgr->unk_0E);
+ CopyBgTilemapBufferToVram(0);
+ sCreditsMgr->creditsMonTimer = 4;
+ sCreditsMgr->unk_0E++;
+ }
+ else
+ sCreditsMgr->subseqno++;
+ }
+ break;
+ case 6:
+ if (sCreditsMgr->creditsMonTimer < 256)
+ {
+ sCreditsMgr->creditsMonTimer += 16;
+ SetBgAffine(2, 0x8000, 0x8000, 0x78, 0x50, sCreditsMgr->creditsMonTimer, sCreditsMgr->creditsMonTimer, 0);
+ }
+ else
+ {
+ SetBgAffine(2, 0x8000, 0x8000, 0x78, 0x50, 0x100, 0x100, 0);
+ sCreditsMgr->creditsMonTimer = 32;
+ sCreditsMgr->subseqno++;
+ }
+ break;
+ case 7:
+ if (sCreditsMgr->creditsMonTimer != 0)
+ sCreditsMgr->creditsMonTimer--;
+ else
+ {
+ HideBg(2);
+ ShowBg(1);
+ PlayCry2(GetCreditsMonSpecies(sCreditsMgr->whichMon), 0, 125, 10);
+ sCreditsMgr->creditsMonTimer = 128;
+ sCreditsMgr->subseqno++;
+ }
+ break;
+ case 8:
+ if (sCreditsMgr->creditsMonTimer != 0)
+ sCreditsMgr->creditsMonTimer--;
+ else
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sCreditsMgr->subseqno++;
+ }
+ break;
+ case 9:
+ if (!gPaletteFade.active)
+ {
+ FreeAllWindowBuffers();
+ Free(GetBgTilemapBuffer(0));
+ sCreditsMgr->subseqno = 0;
+ return TRUE;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+static bool32 DoCopyrightOrTheEndGfxScene(void)
+{
+ switch (sCreditsMgr->subseqno)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ ResetBgsAndClearDma3BusyFlags(1);
+ InitBgsFromTemplates(0, sBgTemplates_MonSceneOrTheEnd, 1);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ DecompressAndLoadBgGfxUsingHeap(0, sCopyrightOrTheEndGfxHeaders[sCreditsMgr->whichMon].tiles, 0x2000, 0, 0);
+ DecompressAndLoadBgGfxUsingHeap(0, sCopyrightOrTheEndGfxHeaders[sCreditsMgr->whichMon].map, 0x800, 0, 1);
+ LoadPalette(sCopyrightOrTheEndGfxHeaders[sCreditsMgr->whichMon].palette, 0x00, 0x200);
+ SetVBlankCallback(VBlankCB);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ sCreditsMgr->subseqno++;
+ break;
+ case 1:
+ CopyBgTilemapBufferToVram(0);
+ sCreditsMgr->subseqno++;
+ break;
+ case 2:
+ ShowBg(0);
+ if (sCreditsMgr->whichMon != 0)
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0, RGB_BLACK);
+ else
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ sCreditsMgr->subseqno++;
+ break;
+ case 3:
+ if (!gPaletteFade.active)
+ {
+ sCreditsMgr->subseqno = 0;
+ return TRUE;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+static void Task_MovePlayerAndGroundSprites(u8 taskId)
+{
+ struct CreditsTaskData * data = (void *)gTasks[taskId].data;
+ switch (data->spriteMoveCmd)
+ {
+ case 0:
+ break;
+ case 1:
+ if (gSprites[data->playerSpriteId].pos1.x != 0xD0)
+ {
+ gSprites[data->playerSpriteId].pos1.x--;
+ gSprites[data->groundSpriteId].pos1.x--;
+ }
+ else
+ {
+ data->spriteMoveCmd = 0;
+ }
+ break;
+ case 2:
+ if (sCreditsMgr->unk_1D & 1)
+ {
+ if (gSprites[data->playerSpriteId].pos1.y != 0x50)
+ {
+ gSprites[data->playerSpriteId].pos1.y--;
+ gSprites[data->groundSpriteId].pos1.y--;
+ }
+ else
+ {
+ data->spriteMoveCmd = 0;
+ }
+ }
+ break;
+ case 3:
+ if (sCreditsMgr->mainseqno == 15)
+ {
+ gSprites[data->playerSpriteId].pos1.x--;
+ gSprites[data->groundSpriteId].pos1.x--;
+ }
+ break;
+ }
+}
+
+static void DestroyPlayerOrRivalSprite(void)
+{
+ if (sCreditsMgr->taskId != 0xFF)
+ {
+ struct CreditsTaskData * data = (void *)gTasks[sCreditsMgr->taskId].data;
+ FreeSpriteTilesByTag(data->playerTilesTag);
+ DestroySprite(&gSprites[data->playerSpriteId]);
+ FreeSpriteTilesByTag(data->groundTilesTag);
+ DestroySprite(&gSprites[data->groundSpriteId]);
+ DestroyTask(sCreditsMgr->taskId);
+ sCreditsMgr->taskId = 0xFF;
+ }
+}
+
+static void LoadPlayerOrRivalSprite(u8 whichScene)
+{
+ u8 taskId;
+ struct CreditsTaskData * data;
+ s32 x, y;
+ struct SpriteTemplate sprTemplate;
+ struct CompressedSpriteSheet sprSheet;
+
+ if (sCreditsMgr->taskId == 0xFF)
+ {
+ taskId = CreateTask(Task_MovePlayerAndGroundSprites, 0);
+ data = (void *)gTasks[taskId].data;
+ sCreditsMgr->taskId = taskId;
+ switch (sPlayerRivalSpriteParams[whichScene][2])
+ {
+ default:
+ case 0:
+ x = 0xd0;
+ y = 0x50;
+ break;
+ case 1:
+ x = 0x110;
+ y = 0x50;
+ break;
+ case 2:
+ x = 0xd0;
+ y = 0xa0;
+ break;
+ }
+ data->spriteMoveCmd = sPlayerRivalSpriteParams[whichScene][2];
+ data->playerTilesTag = 0x2000;
+ data->field_04 = 0xFFFF;
+ switch (sPlayerRivalSpriteParams[whichScene][0])
+ {
+ case 0:
+ // Player
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ {
+ sprSheet.data = sMalePlayerSpriteGfx;
+ sprSheet.size = 0x3000;
+ sprSheet.tag = data->playerTilesTag;
+ LoadCompressedSpriteSheet(&sprSheet);
+ LoadPalette(sMalePlayerSpritePal, 0x1F0, 0x20);
+ }
+ else
+ {
+ sprSheet.data = sFemalePlayerSpriteGfx;
+ sprSheet.size = 0x3000;
+ sprSheet.tag = data->playerTilesTag;
+ LoadCompressedSpriteSheet(&sprSheet);
+ LoadPalette(sFemalePlayerSpritePal, 0x1F0, 0x20);
+ }
+ break;
+ case 1:
+ // Rival
+ sprSheet.data = sRivalSpriteGfx;
+ sprSheet.size = 0x3000;
+ sprSheet.tag = data->playerTilesTag;
+ LoadCompressedSpriteSheet(&sprSheet);
+ LoadPalette(sRivalSpritePal, 0x1F0, 0x20);
+ break;
+ }
+ sprTemplate = sPlayerOrRivalSpriteTemplate;
+ sprTemplate.tileTag = data->playerTilesTag;
+ data->playerSpriteId = CreateSprite(&sprTemplate, x, y, 0);
+ gSprites[data->playerSpriteId].oam.paletteNum = 0xF;
+ gSprites[data->playerSpriteId].subpriority = 0;
+
+ data->groundTilesTag = 0x2001;
+ data->field_0A = 0xFFFF;
+ switch (sPlayerRivalSpriteParams[whichScene][1])
+ {
+ case 0:
+ sprSheet.data = sGroundSpriteGfx_Grass;
+ sprSheet.size = 0x3000;
+ sprSheet.tag = data->groundTilesTag;
+ LoadCompressedSpriteSheet(&sprSheet);
+ LoadPalette(sGroundSpritePal_Grass, 0x1E0, 0x20);
+ sprTemplate = sGroundSpriteTemplate_Running;
+ break;
+ case 1:
+ sprSheet.data = sGroundSpriteGfx_Grass;
+ sprSheet.size = 0x3000;
+ sprSheet.tag = data->groundTilesTag;
+ LoadCompressedSpriteSheet(&sprSheet);
+ LoadPalette(sGroundSpritePal_Grass, 0x1E0, 0x20);
+ sprTemplate = sGroundSpriteTemplate_Static;
+ break;
+ case 2:
+ sprSheet.data = sGroundSpriteGfx_Dirt;
+ sprSheet.size = 0x3000;
+ sprSheet.tag = data->groundTilesTag;
+ LoadCompressedSpriteSheet(&sprSheet);
+ LoadPalette(sGroundSpritePal_Dirt, 0x1E0, 0x20);
+ sprTemplate = sGroundSpriteTemplate_Running;
+ break;
+ case 3:
+ sprSheet.data = sGroundSpriteGfx_City;
+ sprSheet.size = 0x3000;
+ sprSheet.tag = data->groundTilesTag;
+ LoadCompressedSpriteSheet(&sprSheet);
+ LoadPalette(sGroundSpritePal_City, 0x1E0, 0x20);
+ sprTemplate = sGroundSpriteTemplate_Running;
+ break;
+ }
+ sprTemplate.tileTag = data->groundTilesTag;
+ data->groundSpriteId = CreateSprite(&sprTemplate, x, y + 0x26, 0);
+ gSprites[data->groundSpriteId].oam.paletteNum = 0xE;
+ gSprites[data->groundSpriteId].subpriority = 1;
+ }
+}
diff --git a/src/data/items.json b/src/data/items.json
index b976e4c3e..48d614a80 100644
--- a/src/data/items.json
+++ b/src/data/items.json
@@ -6059,4 +6059,4 @@
"secondaryId": 0
}
]
-} \ No newline at end of file
+}
diff --git a/src/item_pc.c b/src/item_pc.c
index 3b60a5bee..24f6afed2 100644
--- a/src/item_pc.c
+++ b/src/item_pc.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "bg.h"
-#include "data2.h"
+#include "data.h"
#include "decompress.h"
#include "gpu_regs.h"
#include "graphics.h"
diff --git a/src/menu2.c b/src/menu2.c
index 6ee1488b1..c6d5ab094 100644
--- a/src/menu2.c
+++ b/src/menu2.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "text.h"
+#include "blit.h"
#include "gpu_regs.h"
#include "task.h"
#include "wild_encounter.h"
@@ -502,261 +503,75 @@ void sub_812E6DC(u8 windowId, const u8 * src, u16 x, u16 y)
}
}
-// Yeah, no, I'm not bothering with this
-NAKED
-static void sub_812E768(void * a0, void * a1, u16 a2, u16 a3, u16 a4, u16 a5, u16 a6, u16 a7)
+static void sub_812E768(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height)
{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x28\n"
- "\tstr r0, [sp]\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tldr r0, [sp, 0x48]\n"
- "\tldr r4, [sp, 0x4C]\n"
- "\tldr r1, [sp, 0x50]\n"
- "\tldr r5, [sp, 0x54]\n"
- "\tlsls r2, 16\n"
- "\tlsrs r2, 16\n"
- "\tstr r2, [sp, 0x8]\n"
- "\tlsls r3, 16\n"
- "\tlsrs r3, 16\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tstr r0, [sp, 0xC]\n"
- "\tlsls r4, 16\n"
- "\tlsrs r4, 16\n"
- "\tlsls r1, 16\n"
- "\tlsrs r1, 16\n"
- "\tlsls r5, 16\n"
- "\tlsrs r5, 16\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tldrh r0, [r2, 0x4]\n"
- "\tldr r2, [sp, 0xC]\n"
- "\tsubs r0, r2\n"
- "\tldr r2, [sp, 0x8]\n"
- "\tadds r2, r1, r2\n"
- "\tstr r2, [sp, 0x10]\n"
- "\tcmp r0, r1\n"
- "\tbge _0812E7B4\n"
- "\tldr r1, [sp, 0x8]\n"
- "\tadds r0, r1\n"
- "\tstr r0, [sp, 0x10]\n"
- "_0812E7B4:\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tldrh r1, [r2, 0x6]\n"
- "\tsubs r0, r1, r4\n"
- "\tcmp r0, r5\n"
- "\tbge _0812E7C6\n"
- "\tadds r0, r3, r1\n"
- "\tsubs r0, r4\n"
- "\tstr r0, [sp, 0x14]\n"
- "\tb _0812E7CA\n"
- "_0812E7C6:\n"
- "\tadds r5, r3, r5\n"
- "\tstr r5, [sp, 0x14]\n"
- "_0812E7CA:\n"
- "\tldr r0, [sp]\n"
- "\tldrh r1, [r0, 0x4]\n"
- "\tmovs r2, 0x7\n"
- "\tadds r0, r1, 0\n"
- "\tands r0, r2\n"
- "\tadds r1, r0\n"
- "\tasrs r1, 3\n"
- "\tstr r1, [sp, 0x18]\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tldrh r1, [r0, 0x4]\n"
- "\tadds r0, r1, 0\n"
- "\tands r0, r2\n"
- "\tadds r1, r0\n"
- "\tasrs r1, 3\n"
- "\tstr r1, [sp, 0x1C]\n"
- "\tmov r12, r3\n"
- "\tmov r8, r4\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tcmp r12, r1\n"
- "\tblt _0812E7F4\n"
- "\tb _0812E932\n"
- "_0812E7F4:\n"
- "\tldr r5, [sp, 0x8]\n"
- "\tldr r6, [sp, 0xC]\n"
- "\tmov r2, r12\n"
- "\tadds r2, 0x1\n"
- "\tstr r2, [sp, 0x20]\n"
- "\tmov r0, r8\n"
- "\tadds r0, 0x1\n"
- "\tstr r0, [sp, 0x24]\n"
- "\tldr r1, [sp, 0x10]\n"
- "\tcmp r5, r1\n"
- "\tblt _0812E80C\n"
- "\tb _0812E922\n"
- "_0812E80C:\n"
- "\tmovs r7, 0x1\n"
- "\tmovs r2, 0xF0\n"
- "\tmov r10, r2\n"
- "\tmovs r0, 0xF\n"
- "\tmov r9, r0\n"
- "_0812E816:\n"
- "\tasrs r0, r5, 1\n"
- "\tmovs r1, 0x3\n"
- "\tands r0, r1\n"
- "\tldr r2, [sp]\n"
- "\tldr r1, [r2]\n"
- "\tadds r1, r0\n"
- "\tasrs r0, r5, 3\n"
- "\tlsls r0, 5\n"
- "\tadds r1, r0\n"
- "\tmov r2, r12\n"
- "\tasrs r0, r2, 3\n"
- "\tldr r2, [sp, 0x18]\n"
- "\tmuls r0, r2\n"
- "\tlsls r0, 5\n"
- "\tadds r1, r0\n"
- "\tmov r2, r12\n"
- "\tlsls r0, r2, 29\n"
- "\tlsrs r0, 27\n"
- "\tadds r3, r1, r0\n"
- "\tasrs r0, r6, 1\n"
- "\tmovs r1, 0x3\n"
- "\tands r0, r1\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tldr r1, [r2]\n"
- "\tadds r1, r0\n"
- "\tasrs r0, r6, 3\n"
- "\tlsls r0, 5\n"
- "\tadds r1, r0\n"
- "\tmov r2, r8\n"
- "\tasrs r0, r2, 3\n"
- "\tldr r2, [sp, 0x1C]\n"
- "\tmuls r0, r2\n"
- "\tlsls r0, 5\n"
- "\tadds r1, r0\n"
- "\tmov r2, r8\n"
- "\tlsls r0, r2, 29\n"
- "\tlsrs r0, 27\n"
- "\tadds r4, r1, r0\n"
- "\tadds r0, r4, 0\n"
- "\tands r0, r7\n"
- "\tcmp r0, 0\n"
- "\tbeq _0812E8C2\n"
- "\tsubs r4, 0x1\n"
- "\tadds r0, r6, 0\n"
- "\tands r0, r7\n"
- "\tcmp r0, 0\n"
- "\tbeq _0812E89A\n"
- "\tldrh r0, [r4]\n"
- "\tldr r2, _0812E88C @ =0x00000fff\n"
- "\tands r2, r0\n"
- "\tadds r0, r5, 0\n"
- "\tands r0, r7\n"
- "\tcmp r0, 0\n"
- "\tbeq _0812E890\n"
- "\tldrb r1, [r3]\n"
- "\tmov r0, r10\n"
- "\tands r0, r1\n"
- "\tlsls r0, 8\n"
- "\tb _0812E912\n"
- "\t.align 2, 0\n"
- "_0812E88C: .4byte 0x00000fff\n"
- "_0812E890:\n"
- "\tldrb r1, [r3]\n"
- "\tmov r0, r9\n"
- "\tands r0, r1\n"
- "\tlsls r0, 12\n"
- "\tb _0812E912\n"
- "_0812E89A:\n"
- "\tldrh r0, [r4]\n"
- "\tldr r2, _0812E8B4 @ =0x0000f0ff\n"
- "\tands r2, r0\n"
- "\tadds r0, r5, 0\n"
- "\tands r0, r7\n"
- "\tcmp r0, 0\n"
- "\tbeq _0812E8B8\n"
- "\tldrb r1, [r3]\n"
- "\tmov r0, r10\n"
- "\tands r0, r1\n"
- "\tlsls r0, 4\n"
- "\tb _0812E912\n"
- "\t.align 2, 0\n"
- "_0812E8B4: .4byte 0x0000f0ff\n"
- "_0812E8B8:\n"
- "\tldrb r1, [r3]\n"
- "\tmov r0, r9\n"
- "\tands r0, r1\n"
- "\tlsls r0, 8\n"
- "\tb _0812E912\n"
- "_0812E8C2:\n"
- "\tadds r0, r6, 0\n"
- "\tands r0, r7\n"
- "\tcmp r0, 0\n"
- "\tbeq _0812E8EE\n"
- "\tldrh r0, [r4]\n"
- "\tldr r2, _0812E8E0 @ =0x0000ff0f\n"
- "\tands r2, r0\n"
- "\tadds r0, r5, 0\n"
- "\tands r0, r7\n"
- "\tcmp r0, 0\n"
- "\tbeq _0812E8E4\n"
- "\tldrb r1, [r3]\n"
- "\tmov r0, r10\n"
- "\tb _0812E910\n"
- "\t.align 2, 0\n"
- "_0812E8E0: .4byte 0x0000ff0f\n"
- "_0812E8E4:\n"
- "\tldrb r1, [r3]\n"
- "\tmov r0, r9\n"
- "\tands r0, r1\n"
- "\tlsls r0, 4\n"
- "\tb _0812E912\n"
- "_0812E8EE:\n"
- "\tldrh r0, [r4]\n"
- "\tldr r2, _0812E908 @ =0x0000fff0\n"
- "\tands r2, r0\n"
- "\tadds r0, r5, 0\n"
- "\tands r0, r7\n"
- "\tcmp r0, 0\n"
- "\tbeq _0812E90C\n"
- "\tldrb r1, [r3]\n"
- "\tmov r0, r10\n"
- "\tands r0, r1\n"
- "\tlsrs r0, 4\n"
- "\tb _0812E912\n"
- "\t.align 2, 0\n"
- "_0812E908: .4byte 0x0000fff0\n"
- "_0812E90C:\n"
- "\tldrb r1, [r3]\n"
- "\tmov r0, r9\n"
- "_0812E910:\n"
- "\tands r0, r1\n"
- "_0812E912:\n"
- "\torrs r2, r0\n"
- "\tstrh r2, [r4]\n"
- "\tadds r5, 0x1\n"
- "\tadds r6, 0x1\n"
- "\tldr r0, [sp, 0x10]\n"
- "\tcmp r5, r0\n"
- "\tbge _0812E922\n"
- "\tb _0812E816\n"
- "_0812E922:\n"
- "\tldr r1, [sp, 0x20]\n"
- "\tmov r12, r1\n"
- "\tldr r2, [sp, 0x24]\n"
- "\tmov r8, r2\n"
- "\tldr r0, [sp, 0x14]\n"
- "\tcmp r12, r0\n"
- "\tbge _0812E932\n"
- "\tb _0812E7F4\n"
- "_0812E932:\n"
- "\tadd sp, 0x28\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0");
+ s32 loopSrcY, loopDstY, loopSrcX, loopDstX, xEnd, yEnd, multiplierSrcY, multiplierDstY;
+ u16 toOrr;
+ const u8 *pixelsSrc;
+ u16 *pixelsDst;
+
+ if (dst->width - dstX < width)
+ xEnd = dst->width - dstX + srcX;
+ else
+ xEnd = width + srcX;
+
+ if (dst->height - dstY < height)
+ yEnd = srcY + dst->height - dstY;
+ else
+ yEnd = srcY + height;
+ multiplierSrcY = (src->width + (src->width & 7)) >> 3;
+ multiplierDstY = (dst->width + (dst->width & 7)) >> 3;
+ for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
+ {
+ for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
+ {
+ #ifndef NONMATCHING
+ asm("":::"r4");
+ #endif
+ pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
+ pixelsDst = (u16 *)(dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)( loopDstY << 0x1d) >> 0x1B));
+
+ if ((uintptr_t)pixelsDst & 0x1)
+ {
+ pixelsDst = (void *)pixelsDst - 1;
+ if (loopDstX & 0x1)
+ {
+ toOrr = *pixelsDst & 0x0fff;
+ if (loopSrcX & 0x1)
+ *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 8);
+ else
+ *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 12);
+ }
+ else
+ {
+ toOrr = *pixelsDst & 0xf0ff;
+ if (loopSrcX & 0x1)
+ *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 4);
+ else
+ *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 8);
+ }
+ }
+ else
+ {
+ if (loopDstX & 1)
+ {
+ toOrr = *pixelsDst & 0xff0f;
+ if (loopSrcX & 1)
+ *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 0);
+ else
+ *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 4);
+ }
+ else
+ {
+ toOrr = *pixelsDst & 0xfff0;
+ if (loopSrcX & 1)
+ *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) >> 4);
+ else
+ *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) >> 0);
+ }
+ }
+ }
+ }
}
#define tEvA data[0]
diff --git a/src/mevent.c b/src/mevent.c
index fc0c1f2d4..d0d7f59aa 100644
--- a/src/mevent.c
+++ b/src/mevent.c
@@ -134,7 +134,7 @@ static void ResetTTDataBuffer(void)
{
memset(gDecompressionBuffer, 0, 0x2000);
gLinkType = 0x5502;
- sub_8009804();
+ OpenLink();
SetSuppressLinkErrorMessage(TRUE);
}
@@ -156,7 +156,7 @@ bool32 sub_81436EC(void)
static bool32 IsEReaderConnectionSane(void)
{
- if (sub_800AA48() && GetLinkPlayerCount_2() == 2)
+ if (IsLinkMaster() && GetLinkPlayerCount_2() == 2)
return TRUE;
return FALSE;
}
@@ -171,7 +171,7 @@ u32 sub_8143770(u8 * r4, u16 * r5)
switch (*r4)
{
case 0:
- if (sub_800AA48() && GetLinkPlayerCount_2() > 1)
+ if (IsLinkMaster() && GetLinkPlayerCount_2() > 1)
{
*r4 = 1;
;
@@ -193,7 +193,7 @@ u32 sub_8143770(u8 * r4, u16 * r5)
if (GetLinkPlayerCount_2() == 2)
{
PlaySE(SE_TOY_G);
- sub_800A5BC();
+ CheckShouldAdvanceLinkState();
*r5 = 0;
*r4 = 3;
}
diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c
index 35efa68c8..6df5207f0 100644
--- a/src/mevent_server_helpers.c
+++ b/src/mevent_server_helpers.c
@@ -155,7 +155,7 @@ static bool32 mevent_send_func(struct mevent_srv_sub * svr)
switch (svr->seqno)
{
case 0:
- if (sub_800A4BC())
+ if (IsLinkTaskFinished())
{
header.ident = svr->sendIdent;
header.size = svr->sendSize;
@@ -167,7 +167,7 @@ static bool32 mevent_send_func(struct mevent_srv_sub * svr)
}
break;
case 1:
- if (sub_800A4BC())
+ if (IsLinkTaskFinished())
{
if (mevent_has_received(svr->sendPlayerNo))
{
@@ -189,7 +189,7 @@ static bool32 mevent_send_func(struct mevent_srv_sub * svr)
}
break;
case 2:
- if (sub_800A4BC())
+ if (IsLinkTaskFinished())
{
if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC)
sub_80FA190();
diff --git a/src/pokemon.c b/src/pokemon.c
index fd4b23c6f..9c2532243 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -5,21 +5,20 @@
#include "random.h"
#include "main.h"
#include "text.h"
-#include "data2.h"
+#include "data.h"
#include "string_util.h"
#include "battle.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "item.h"
#include "event_data.h"
#include "util.h"
#include "pokemon_storage_system.h"
-#include "data2.h"
+#include "data.h"
#include "battle_gfx_sfx_util.h"
#include "battle_controllers.h"
#include "evolution_scene.h"
#include "battle_message.h"
#include "battle_util.h"
-#include "battle_ai_script_commands.h"
#include "link.h"
#include "m4a.h"
#include "sound.h"
@@ -1792,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);
@@ -1941,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;
@@ -1998,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);
}
@@ -2553,7 +2552,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
damage /= 2;
// sunny
- if (gBattleWeather & WEATHER_SUNNY_ANY)
+ if (gBattleWeather & WEATHER_SUN_ANY)
{
switch (type)
{
@@ -2568,7 +2567,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
}
// flash fire triggered
- if ((gBattleResources->flags->flags[battlerIdAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
+ if ((gBattleResources->flags->flags[battlerIdAtk] & RESOURCE_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
damage = (15 * damage) / 10;
}
@@ -2592,7 +2591,7 @@ u8 CountAliveMonsInBattle(u8 caseId)
case BATTLE_ALIVE_ATK_SIDE:
for (i = 0; i < 4; i++)
{
- if (GetBattlerSide(i) == GetBattlerSide(sBattler_AI) && !(gAbsentBattlerFlags & gBitTable[i]))
+ if (GetBattlerSide(i) == GetBattlerSide(gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[i]))
retVal++;
}
break;
@@ -3100,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;
@@ -3503,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);
@@ -3699,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];
@@ -3712,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)
@@ -3859,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);
@@ -4118,14 +4117,14 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
gAbsentBattlerFlags &= ~gBitTable[sp34];
CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlerPartyIndexes[sp34]));
- if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.unk4 < 255)
- gBattleResults.unk4++;
+ if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.numRevivesUsed < 255)
+ gBattleResults.numRevivesUsed++;
}
else
{
gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2];
- if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.unk4 < 255)
- gBattleResults.unk4++;
+ if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.numRevivesUsed < 255)
+ gBattleResults.numRevivesUsed++;
}
}
}
@@ -4165,13 +4164,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
gBattleMons[sp34].hp = data;
if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == 0)
{
- if (gBattleResults.unk3 < 255)
- gBattleResults.unk3++;
+ if (gBattleResults.numHealingItemsUsed < 255)
+ gBattleResults.numHealingItemsUsed++;
// I have to re-use this variable to match.
r5 = gActiveBattler;
gActiveBattler = sp34;
BtlController_EmitGetMonData(0, 0, 0);
- MarkBufferBankForExecution(gActiveBattler);
+ MarkBattlerForControllerExec(gActiveBattler);
gActiveBattler = r5;
}
}
@@ -4205,7 +4204,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
SetMonData(mon, MON_DATA_PP1 + r5, &data);
if (gMain.inBattle
&& sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
- && !(gDisableStructs[sp34].unk18_b & gBitTable[r5]))
+ && !(gDisableStructs[sp34].mimickedMoves & gBitTable[r5]))
gBattleMons[sp34].pp[r5] = data;
retVal = FALSE;
}
@@ -4230,7 +4229,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
SetMonData(mon, MON_DATA_PP1 + moveIndex, &data);
if (gMain.inBattle
&& sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
- && !(gDisableStructs[sp34].unk18_b & gBitTable[moveIndex]))
+ && !(gDisableStructs[sp34].mimickedMoves & gBitTable[moveIndex]))
gBattleMons[sp34].pp[moveIndex] = data;
retVal = FALSE;
}
@@ -5845,7 +5844,7 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId)
}
else
{
- sBattler_AI = gBattlerInMenuId;
+ gBattlerAttacker = gBattlerInMenuId;
BattleStringExpandPlaceholdersToDisplayedString(BattleText_GetPumped);
}
}
@@ -5853,7 +5852,7 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId)
if (itemEffect[3] & 0x80)
{
- sBattler_AI = gBattlerInMenuId;
+ gBattlerAttacker = gBattlerInMenuId;
BattleStringExpandPlaceholdersToDisplayedString(BattleText_MistShroud);
}
@@ -6205,9 +6204,9 @@ bool8 sub_80435E0(void)
return retVal;
}
-bool8 GetLinkTrainerFlankId(u8 linkPlayerId)
+bool16 GetLinkTrainerFlankId(u8 linkPlayerId)
{
- bool8 retVal = FALSE;
+ bool16 retVal = FALSE;
switch (gLinkPlayers[linkPlayerId].id)
{
case 0:
@@ -6222,7 +6221,7 @@ bool8 GetLinkTrainerFlankId(u8 linkPlayerId)
return retVal;
}
-s32 GetBankMultiplayerId(u16 a1)
+s32 GetBattlerMultiplayerId(u16 a1)
{
s32 id;
for (id = 0; id < MAX_LINK_PLAYERS; id++)
@@ -6701,10 +6700,10 @@ const u32 *GetMonFrontSpritePal(struct Pokemon *mon)
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality);
+ return GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality);
}
-const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality)
+const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality)
{
u32 shinyValue;
@@ -6814,15 +6813,9 @@ void BoxMonRestorePP(struct BoxPokemon *boxMon)
}
}
-// SetMonPreventsSwitchingString
-void sub_8044348(void)
+void SetMonPreventsSwitchingString(void)
{
-#ifdef NONMATCHING
- gLastUsedAbility = gBattleStruct -> abilityPreventingSwitchout; // fixed from the original
-#else
- gLastUsedAbility = ((u8 *) gBattleStruct)[0xac]; // huh? why is this wrong?
-#endif
-
+ gLastUsedAbility = gBattleStruct -> abilityPreventingSwitchout;
gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
gBattleTextBuff1[1] = B_BUFF_MON_NICK_WITH_PREFIX;
gBattleTextBuff1[2] = gBattleStruct->battlerPreventingSwitchout;
@@ -6879,7 +6872,7 @@ static bool8 IsShinyOtIdPersonality(u32 otId, u32 personality)
u8 *GetTrainerPartnerName(void)
{
u8 id = GetMultiplayerId();
- return gLinkPlayers[GetBankMultiplayerId(gLinkPlayers[id].id ^ 2)].name;
+ return gLinkPlayers[GetBattlerMultiplayerId(gLinkPlayers[id].id ^ 2)].name;
}
u8 GetPlayerPartyHighestLevel(void)
diff --git a/src/quest_log.c b/src/quest_log.c
index 7a3084d8c..8b9ee9395 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "constants/species.h"
#include "constants/items.h"
-#include "data2.h"
+#include "data.h"
#include "malloc.h"
#include "main.h"
#include "task.h"
@@ -871,7 +871,7 @@ void sub_8110F90(u8 unused)
gSaveBlock1Ptr->location.mapNum = 19;
gSaveBlock1Ptr->location.warpId = -1;
gUnknown_203ADF8 = 0;
- gUnknown_2031DD8 = 1;
+ gDisableMapMusicChangeOnMapLoad = 1;
sub_8082740(1);
sub_8111368();
}
@@ -1567,7 +1567,7 @@ void sub_81120AC(u8 taskId)
switch (data[0])
{
case 0:
- gUnknown_2031DD8 = 0;
+ gDisableMapMusicChangeOnMapLoad = 0;
Overworld_PlaySpecialMapMusic();
sub_811229C();
FillWindowPixelRect(gUnknown_203ADFE[0], 0xF, 0, 0, gUnknown_845661C[0].width * 8, gUnknown_845661C[0].height * 8);
diff --git a/src/quest_log_battle.c b/src/quest_log_battle.c
index 3dfc2eb57..2687e4ea5 100644
--- a/src/quest_log_battle.c
+++ b/src/quest_log_battle.c
@@ -26,7 +26,7 @@ void sub_812C334(s32 *, s32 *);
void sub_812BFDC(void)
{
- if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_POKEDUDE)) && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT))
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_OLDMAN_TUTORIAL | BATTLE_TYPE_POKEDUDE)) && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT))
{
struct QuestLogStruct_TrainerBattleRecord * questLogTrainerBattleRecord = Alloc(sizeof(struct QuestLogStruct_TrainerBattleRecord));
struct QuestLogStruct_WildBattleRecord * questLogWildBattleRecord = Alloc(sizeof(struct QuestLogStruct_WildBattleRecord));
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
new file mode 100644
index 000000000..6dd743176
--- /dev/null
+++ b/src/reshow_battle_screen.c
@@ -0,0 +1,322 @@
+#include "global.h"
+#include "bg.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "main.h"
+#include "link.h"
+#include "data.h"
+#include "sprite.h"
+#include "text.h"
+#include "gpu_regs.h"
+#include "scanline_effect.h"
+#include "help_system.h"
+#include "battle.h"
+#include "battle_interface.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "reshow_battle_screen.h"
+#include "constants/species.h"
+
+static void CB2_ReshowBattleScreenAfterMenu(void);
+static void sub_8077AAC(void);
+static bool8 LoadBattlerSpriteGfx(u8 battlerId);
+static void CreateBattlerSprite(u8 battlerId);
+static void CreateHealthboxSprite(u8 battlerId);
+
+void nullsub_44(void)
+{
+}
+
+void ReshowBattleScreenAfterMenu(void)
+{
+ gPaletteFade.bufferTransferDisabled = 1;
+ SetHBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ gBattleScripting.reshowMainState = 0;
+ gBattleScripting.reshowHelperState = 0;
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ HelpSystem_SetSomeVariable2(0x19);
+ else
+ HelpSystem_SetSomeVariable2(0x18);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ {
+ HelpSystem_SetSomeVariable2(0x1A);
+ }
+ else
+ {
+ HelpSystem_SetSomeVariable2(0x17);
+ }
+ }
+ SetMainCallback2(CB2_ReshowBattleScreenAfterMenu);
+}
+
+static void CB2_ReshowBattleScreenAfterMenu(void)
+{
+ u8 opponentBattler;
+ u16 species;
+
+ switch (gBattleScripting.reshowMainState)
+ {
+ case 0:
+ ResetSpriteData();
+ break;
+ case 1:
+ SetVBlankCallback(NULL);
+ ScanlineEffect_Clear();
+ sub_800F324();
+ SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
+ SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ ResetPaletteFade();
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 0;
+ gBattle_BG3_Y = 0;
+ break;
+ case 2:
+ CpuFastFill(0, (void *)VRAM, VRAM_SIZE);
+ break;
+ case 3:
+ LoadBattleTextboxAndBackground();
+ break;
+ case 4:
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+ break;
+ case 5:
+ ClearSpritesHealthboxAnimData();
+ break;
+ case 6:
+ if (BattleLoadAllHealthBoxesGfx(gBattleScripting.reshowHelperState))
+ {
+ gBattleScripting.reshowHelperState = 0;
+ }
+ else
+ {
+ ++gBattleScripting.reshowHelperState;
+ --gBattleScripting.reshowMainState;
+ }
+ break;
+ case 7:
+ if (!LoadBattlerSpriteGfx(0))
+ --gBattleScripting.reshowMainState;
+ break;
+ case 8:
+ if (!LoadBattlerSpriteGfx(1))
+ --gBattleScripting.reshowMainState;
+ break;
+ case 9:
+ if (!LoadBattlerSpriteGfx(2))
+ --gBattleScripting.reshowMainState;
+ break;
+ case 0xA:
+ if (!LoadBattlerSpriteGfx(3))
+ --gBattleScripting.reshowMainState;
+ break;
+ case 0xB:
+ CreateBattlerSprite(0);
+ break;
+ case 0xC:
+ CreateBattlerSprite(1);
+ break;
+ case 0xD:
+ CreateBattlerSprite(2);
+ break;
+ case 0xE:
+ CreateBattlerSprite(3);
+ break;
+ case 0xF:
+ CreateHealthboxSprite(0);
+ break;
+ case 0x10:
+ CreateHealthboxSprite(1);
+ break;
+ case 0x11:
+ CreateHealthboxSprite(2);
+ break;
+ case 0x12:
+ CreateHealthboxSprite(3);
+ break;
+ case 0x13:
+ LoadAndCreateEnemyShadowSprites();
+ opponentBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBattler]], MON_DATA_SPECIES);
+ SetBattlerShadowSpriteCallback(opponentBattler, species);
+ if (IsDoubleBattle())
+ {
+ opponentBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBattler]], MON_DATA_SPECIES);
+ SetBattlerShadowSpriteCallback(opponentBattler, species);
+ }
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gBattlerInMenuId], 0);
+ if (gWirelessCommType && gReceivedRemoteLinkPlayers)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ break;
+ case 0x14:
+ SetVBlankCallback(VBlankCB_Battle);
+ sub_8077AAC();
+ BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1);
+ gPaletteFade.bufferTransferDisabled = 0;
+ SetMainCallback2(BattleMainCB2);
+ sub_80357C8();
+ break;
+ default:
+ break;
+ }
+ ++gBattleScripting.reshowMainState;
+}
+
+static void sub_8077AAC(void)
+{
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0x3F);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x3F);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WIN1H, 0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_OBJWIN_ON);
+}
+
+static bool8 LoadBattlerSpriteGfx(u8 battler)
+{
+ if (battler < gBattlersCount)
+ {
+ if (GetBattlerSide(battler) != B_SIDE_PLAYER)
+ {
+ if ((gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_GHOST)) == BATTLE_TYPE_GHOST)
+ DecompressGhostFrontPic(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
+ else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battler]], battler);
+ else
+ BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
+ DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, battler);
+ else if (gBattleTypeFlags & BATTLE_TYPE_OLDMAN_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
+ DecompressTrainerBackPalette(5, battler);
+ else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
+ else
+ BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE);
+ gBattleScripting.reshowHelperState = 0;
+ }
+ return TRUE;
+}
+
+static void CreateBattlerSprite(u8 battler)
+{
+ if (battler < gBattlersCount)
+ {
+ u8 posY;
+
+ if ((gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_GHOST)) == BATTLE_TYPE_GHOST)
+ posY = GetGhostSpriteDefault_Y(battler);
+ else if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
+ posY = GetSubstituteSpriteDefault_Y(battler);
+ else
+ posY = GetBattlerSpriteDefault_Y(battler);
+ if (GetBattlerSide(battler) != B_SIDE_PLAYER)
+ {
+ if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
+ return;
+ SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler));
+ gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
+ gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
+ gSprites[gBattlerSpriteIds[battler]].data[2] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], gBattleMonForms[battler]);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT)
+ {
+ SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(B_POSITION_PLAYER_LEFT));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
+ (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80,
+ GetBattlerSpriteSubpriority(0));
+ gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
+ gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_OLDMAN_TUTORIAL && battler == B_POSITION_PLAYER_LEFT)
+ {
+ SetMultiuseSpriteTemplateToTrainerBack(5, GetBattlerPosition(0));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
+ (8 - gTrainerBackPicCoords[5].size) * 4 + 80,
+ GetBattlerSpriteSubpriority(0));
+ gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
+ gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
+ }
+ else if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
+ {
+ return;
+ }
+ else
+ {
+ SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler));
+ gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
+ gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
+ gSprites[gBattlerSpriteIds[battler]].data[2] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], gBattleMonForms[battler]);
+ }
+ gSprites[gBattlerSpriteIds[battler]].invisible = gBattleSpritesDataPtr->battlerData[battler].invisible;
+ }
+}
+
+static void CreateHealthboxSprite(u8 battler)
+{
+ if (battler < gBattlersCount)
+ {
+ u8 healthboxSpriteId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT)
+ healthboxSpriteId = CreateSafariPlayerHealthboxSprites();
+ else if (gBattleTypeFlags & BATTLE_TYPE_OLDMAN_TUTORIAL && battler == B_POSITION_PLAYER_LEFT)
+ return;
+ else
+ healthboxSpriteId = CreateBattlerHealthboxSprites(battler);
+ gHealthboxSpriteIds[battler] = healthboxSpriteId;
+ InitBattlerHealthboxCoords(battler);
+ SetHealthboxSpriteVisible(healthboxSpriteId);
+ if (GetBattlerSide(battler) != B_SIDE_PLAYER)
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gEnemyParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL);
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_SAFARI_ALL_TEXT);
+ else
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL);
+ if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT || GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)
+ DummyBattleInterfaceFunc(gHealthboxSpriteIds[battler], TRUE);
+ else
+ DummyBattleInterfaceFunc(gHealthboxSpriteIds[battler], FALSE);
+ if (GetBattlerSide(battler) != B_SIDE_PLAYER)
+ {
+ if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
+ SetHealthboxSpriteInvisible(healthboxSpriteId);
+ }
+ else if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
+ {
+ SetHealthboxSpriteInvisible(healthboxSpriteId);
+ }
+ }
+}
diff --git a/src/save.c b/src/save.c
index d3d31a22e..9f580477b 100644
--- a/src/save.c
+++ b/src/save.c
@@ -68,7 +68,7 @@ const struct SaveSectionOffsets gSaveSectionOffsets[] =
extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen
extern void sub_800AB9C(void); // link
-extern bool8 sub_800A4BC(void); // link
+extern bool8 IsLinkTaskFinished(void); // link
extern void save_serialize_map(void); // fieldmap
extern void sub_804C1C0(void); // load_save
extern void sav2_gender2_inplace_and_xFE(void); // load_save
@@ -865,7 +865,7 @@ void sub_80DA634(u8 taskId)
gTasks[taskId].data[0] = 2;
break;
case 2:
- if (sub_800A4BC())
+ if (IsLinkTaskFinished())
{
save_serialize_map();
gTasks[taskId].data[0] = 3;
@@ -899,7 +899,7 @@ void sub_80DA634(u8 taskId)
gTasks[taskId].data[0] = 8;
break;
case 8:
- if (sub_800A4BC())
+ if (IsLinkTaskFinished())
{
sub_80DA434();
gTasks[taskId].data[0] = 9;
@@ -910,7 +910,7 @@ void sub_80DA634(u8 taskId)
gTasks[taskId].data[0] = 10;
break;
case 10:
- if (sub_800A4BC())
+ if (IsLinkTaskFinished())
gTasks[taskId].data[0]++;
break;
case 11:
diff --git a/src/scrcmd.c b/src/scrcmd.c
index cef1a1eb7..bcf8c231d 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -25,7 +25,7 @@
#include "start_menu.h"
#include "script_menu.h"
#include "string_util.h"
-#include "data2.h"
+#include "data.h"
#include "field_specials.h"
#include "constants/items.h"
#include "script_pokemon_util_80A0058.h"
diff --git a/src/sound.c b/src/sound.c
index dc4b9f604..41b9f5b7d 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -15,7 +15,7 @@ struct Fanfare
};
// TODO: what are these
-extern u8 gUnknown_2031DD8;
+extern u8 gDisableMapMusicChangeOnMapLoad;
extern u8 gUnknown_203ADFA;
extern u8 gUnknown_203F174;
@@ -571,7 +571,7 @@ void PlayBGM(u16 songNum)
void PlaySE(u16 songNum)
{
- if(gUnknown_2031DD8 == 0 && gUnknown_203ADFA != 2)
+ if(gDisableMapMusicChangeOnMapLoad == 0 && gUnknown_203ADFA != 2)
m4aSongNumStart(songNum);
}
diff --git a/src/teachy_tv.c b/src/teachy_tv.c
index 3594c79a2..fa687fbef 100644
--- a/src/teachy_tv.c
+++ b/src/teachy_tv.c
@@ -23,7 +23,7 @@
#include "event_data.h"
#include "load_save.h"
#include "battle_transition.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "battle.h"
#include "global.fieldmap.h"
#include "teachy_tv.h"
diff --git a/src/text.c b/src/text.c
index d36a448ad..5b88e9f75 100644
--- a/src/text.c
+++ b/src/text.c
@@ -6,19 +6,18 @@
#include "text.h"
#include "sprite.h"
#include "blit.h"
+#include "sound.h"
+#include "m4a.h"
+#include "quest_log.h"
+#include "window.h"
+#include "graphics.h"
+#include "dynamic_placeholder_text_util.h"
extern u8 gGlyphInfo[0x90];
-extern u8 gUnknown_203ADFA;
-extern u16 gTMCaseMainWindowPalette[];
extern const struct OamData gOamData_83AC9D0;
-extern void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-extern void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight);
-extern u8 GetKeypadIconWidth(u8 keypadIconId);
-extern void CopyWindowToVram(u8 windowId, u8 mode);
-extern s32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese);
-extern void PlaySE(u16 songNum);
-extern u8* DynamicPlaceholderTextUtil_GetPlaceholderPtr(u8 a1);
+static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese);
+static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese);
TextFlags gTextFlags;
@@ -378,107 +377,107 @@ const u16 gFont9JapaneseGlyphs[] = INCBIN_U16("data/graphics/fonts/font9_jap.fwj
u16 Font0Func(struct TextPrinter *textPrinter)
{
- struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
- if (subStruct->field_1_top == 0)
+ if (subStruct->hasGlyphIdBeenSet == 0)
{
- textPrinter->sub_union.sub.font_type = 0;
- subStruct->field_1_top = 1;
+ textPrinter->subUnion.sub.glyphId = 0;
+ subStruct->hasGlyphIdBeenSet = 1;
}
return RenderText(textPrinter);
}
u16 Font1Func(struct TextPrinter *textPrinter)
{
- struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
- if (subStruct->field_1_top == 0)
+ if (subStruct->hasGlyphIdBeenSet == 0)
{
- textPrinter->sub_union.sub.font_type = 1;
- subStruct->field_1_top = 1;
+ textPrinter->subUnion.sub.glyphId = 1;
+ subStruct->hasGlyphIdBeenSet = 1;
}
return RenderText(textPrinter);
}
u16 Font2Func(struct TextPrinter *textPrinter)
{
- struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
- if (subStruct->field_1_top == 0)
+ if (subStruct->hasGlyphIdBeenSet == 0)
{
- textPrinter->sub_union.sub.font_type = 2;
- subStruct->field_1_top = 1;
+ textPrinter->subUnion.sub.glyphId = 2;
+ subStruct->hasGlyphIdBeenSet = 1;
}
return RenderText(textPrinter);
}
u16 Font3Func(struct TextPrinter *textPrinter)
{
- struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
- if (subStruct->field_1_top == 0)
+ if (subStruct->hasGlyphIdBeenSet == 0)
{
- textPrinter->sub_union.sub.font_type = 3;
- subStruct->field_1_top = 1;
+ textPrinter->subUnion.sub.glyphId = 3;
+ subStruct->hasGlyphIdBeenSet = 1;
}
return RenderText(textPrinter);
}
u16 Font4Func(struct TextPrinter *textPrinter)
{
- struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
- if (subStruct->field_1_top == 0)
+ if (subStruct->hasGlyphIdBeenSet == 0)
{
- textPrinter->sub_union.sub.font_type = 4;
- subStruct->field_1_top = 1;
+ textPrinter->subUnion.sub.glyphId = 4;
+ subStruct->hasGlyphIdBeenSet = 1;
}
return RenderText(textPrinter);
}
u16 Font5Func(struct TextPrinter *textPrinter)
{
- struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
- if (subStruct->field_1_top == 0)
+ if (subStruct->hasGlyphIdBeenSet == 0)
{
- textPrinter->sub_union.sub.font_type = 5;
- subStruct->field_1_top = 1;
+ textPrinter->subUnion.sub.glyphId = 5;
+ subStruct->hasGlyphIdBeenSet = 1;
}
return RenderText(textPrinter);
}
void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter)
{
- struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
if (gTextFlags.autoScroll == 1)
- subStruct->frames_visible_counter = 0;
+ subStruct->autoScrollDelay = 0;
else
{
- subStruct->field_1_upmid = 0;
- subStruct->field_1 = 0;
+ subStruct->downArrowYPosIdx = 0;
+ subStruct->downArrowDelay = 0;
}
}
void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter)
{
- struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
const u8 *arrowTiles;
if (gTextFlags.autoScroll == 0)
{
- if (subStruct->field_1 != 0)
+ if (subStruct->downArrowDelay != 0)
{
- subStruct->field_1 = ((*(u32*)&textPrinter->sub_union.sub) << 19 >> 27) - 1; // convoluted way of getting field_1, necessary to match
+ subStruct->downArrowDelay = ((*(u32*)&textPrinter->subUnion.sub) << 19 >> 27) - 1; // convoluted way of getting field_1, necessary to match
}
else
{
FillWindowPixelRect(
- textPrinter->subPrinter.windowId,
- textPrinter->subPrinter.bgColor << 4 | textPrinter->subPrinter.bgColor,
- textPrinter->subPrinter.currentX,
- textPrinter->subPrinter.currentY,
+ textPrinter->printerTemplate.windowId,
+ textPrinter->printerTemplate.bgColor << 4 | textPrinter->printerTemplate.bgColor,
+ textPrinter->printerTemplate.currentX,
+ textPrinter->printerTemplate.currentY,
10,
12);
@@ -494,20 +493,20 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter)
}
BlitBitmapRectToWindow(
- textPrinter->subPrinter.windowId,
+ textPrinter->printerTemplate.windowId,
arrowTiles,
- gDownArrowYCoords[*(u32*)subStruct << 17 >> 30], // subStruct->field_1_upmid but again, stupidly retrieved
+ gDownArrowYCoords[*(u32*)subStruct << 17 >> 30], // subStruct->downArrowYPosIdx but again, stupidly retrieved
0,
0x80,
0x10,
- textPrinter->subPrinter.currentX,
- textPrinter->subPrinter.currentY,
+ textPrinter->printerTemplate.currentX,
+ textPrinter->printerTemplate.currentY,
10,
12);
- CopyWindowToVram(textPrinter->subPrinter.windowId, 0x2);
+ CopyWindowToVram(textPrinter->printerTemplate.windowId, 0x2);
- subStruct->field_1 = 0x8;
- subStruct->field_1_upmid = (*(u32*)subStruct << 17 >> 30) + 1;
+ subStruct->downArrowDelay = 0x8;
+ subStruct->downArrowYPosIdx = (*(u32*)subStruct << 17 >> 30) + 1;
}
}
}
@@ -515,27 +514,27 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter)
void TextPrinterClearDownArrow(struct TextPrinter *textPrinter)
{
FillWindowPixelRect(
- textPrinter->subPrinter.windowId,
- textPrinter->subPrinter.bgColor << 4 | textPrinter->subPrinter.bgColor,
- textPrinter->subPrinter.currentX,
- textPrinter->subPrinter.currentY,
+ textPrinter->printerTemplate.windowId,
+ textPrinter->printerTemplate.bgColor << 4 | textPrinter->printerTemplate.bgColor,
+ textPrinter->printerTemplate.currentX,
+ textPrinter->printerTemplate.currentY,
10,
12);
- CopyWindowToVram(textPrinter->subPrinter.windowId, 0x2);
+ CopyWindowToVram(textPrinter->printerTemplate.windowId, 0x2);
}
bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter)
{
- struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
u8 delay = (gUnknown_203ADFA == 2) ? 50 : 120;
- if (subStruct->frames_visible_counter == delay)
+ if (subStruct->autoScrollDelay == delay)
{
return TRUE;
}
else
{
- subStruct->frames_visible_counter++;
+ subStruct->autoScrollDelay++;
return FALSE;
}
}
@@ -550,7 +549,7 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
else
{
TextPrinterDrawDownArrow(textPrinter);
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
{
result = TRUE;
PlaySE(5);
@@ -568,7 +567,7 @@ bool16 TextPrinterWait(struct TextPrinter *textPrinter)
}
else
{
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
{
result = TRUE;
PlaySE(5);
@@ -619,772 +618,291 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c
}
}
-__attribute__((naked))
u16 RenderText(struct TextPrinter *textPrinter)
{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- adds r6, r0, 0\n\
- adds r4, r6, 0\n\
- adds r4, 0x14\n\
- ldrb r0, [r6, 0x1C]\n\
- cmp r0, 0x6\n\
- bls _080057A0\n\
- b _08005D68\n\
-_080057A0:\n\
- lsls r0, 2\n\
- ldr r1, _080057AC @ =_080057B0\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_080057AC: .4byte _080057B0\n\
- .align 2, 0\n\
-_080057B0:\n\
- .4byte _080057CC\n\
- .4byte _08005C58\n\
- .4byte _08005C6C\n\
- .4byte _08005C98\n\
- .4byte _08005CD0\n\
- .4byte _08005D44\n\
- .4byte _08005D56\n\
-_080057CC:\n\
- ldr r2, _08005820 @ =gMain\n\
- ldrh r1, [r2, 0x2C]\n\
- movs r0, 0x3\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080057E6\n\
- ldrb r1, [r4]\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080057E6\n\
- movs r0, 0\n\
- strb r0, [r6, 0x1E]\n\
-_080057E6:\n\
- ldrb r1, [r6, 0x1E]\n\
- cmp r1, 0\n\
- beq _08005828\n\
- ldrb r0, [r6, 0x1D]\n\
- cmp r0, 0\n\
- beq _08005828\n\
- subs r0, r1, 0x1\n\
- strb r0, [r6, 0x1E]\n\
- ldr r0, _08005824 @ =gTextFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08005804\n\
- b _08005B30\n\
-_08005804:\n\
- ldrh r1, [r2, 0x2E]\n\
- movs r0, 0x3\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08005810\n\
- b _08005B30\n\
-_08005810:\n\
- ldrb r0, [r4]\n\
- movs r1, 0x10\n\
- orrs r0, r1\n\
- strb r0, [r4]\n\
- movs r0, 0\n\
- strb r0, [r6, 0x1E]\n\
- b _08005B30\n\
- .align 2, 0\n\
-_08005820: .4byte gMain\n\
-_08005824: .4byte gTextFlags\n\
-_08005828:\n\
- ldr r2, _08005838 @ =gTextFlags\n\
- ldrb r1, [r2]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0800583C\n\
- movs r0, 0x1\n\
- b _0800583E\n\
- .align 2, 0\n\
-_08005838: .4byte gTextFlags\n\
-_0800583C:\n\
- ldrb r0, [r6, 0x1D]\n\
-_0800583E:\n\
- strb r0, [r6, 0x1E]\n\
- ldr r0, [r6]\n\
- ldrb r3, [r0]\n\
- adds r0, 0x1\n\
- str r0, [r6]\n\
- adds r0, r3, 0\n\
- subs r0, 0xF8\n\
- cmp r0, 0x7\n\
- bls _08005852\n\
- b _08005B6C\n\
-_08005852:\n\
- lsls r0, 2\n\
- ldr r1, _0800585C @ =_08005860\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_0800585C: .4byte _08005860\n\
- .align 2, 0\n\
-_08005860:\n\
- .4byte _08005B46\n\
- .4byte _08005B34\n\
- .4byte _08005B26\n\
- .4byte _08005B22\n\
- .4byte _080058AC\n\
- .4byte _080058A8\n\
- .4byte _08005880\n\
- .4byte _08005D68\n\
-_08005880:\n\
- ldrb r0, [r6, 0x6]\n\
- strb r0, [r6, 0x8]\n\
- ldrb r1, [r6, 0x5]\n\
- ldr r0, _080058A4 @ =gFonts\n\
- ldr r2, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r1, [r6, 0xB]\n\
- ldrb r0, [r0, 0x5]\n\
- adds r1, r0\n\
- ldrb r0, [r6, 0x9]\n\
- adds r0, r1\n\
- strb r0, [r6, 0x9]\n\
-_0800589E:\n\
- movs r0, 0x2\n\
- b _08005D6A\n\
- .align 2, 0\n\
-_080058A4: .4byte gFonts\n\
-_080058A8:\n\
- ldr r0, [r6]\n\
- b _08005B0A\n\
-_080058AC:\n\
- ldr r0, [r6]\n\
- ldrb r3, [r0]\n\
- adds r0, 0x1\n\
- str r0, [r6]\n\
- subs r0, r3, 0x1\n\
- cmp r0, 0x17\n\
- bls _080058BC\n\
- b _08005B6C\n\
-_080058BC:\n\
- lsls r0, 2\n\
- ldr r1, _080058C8 @ =_080058CC\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_080058C8: .4byte _080058CC\n\
- .align 2, 0\n\
-_080058CC:\n\
- .4byte _0800592C\n\
- .4byte _0800594E\n\
- .4byte _08005972\n\
- .4byte _0800598C\n\
- .4byte _080059D8\n\
- .4byte _080059DC\n\
- .4byte _0800589E\n\
- .4byte _080059F4\n\
- .4byte _08005A04\n\
- .4byte _08005A1A\n\
- .4byte _08005A1E\n\
- .4byte _08005A66\n\
- .4byte _08005A70\n\
- .4byte _08005A78\n\
- .4byte _08005A84\n\
- .4byte _08005A4C\n\
- .4byte _08005AB0\n\
- .4byte _08005ACC\n\
- .4byte _08005ADC\n\
- .4byte _08005B00\n\
- .4byte _08005B10\n\
- .4byte _08005B18\n\
- .4byte _08005A96\n\
- .4byte _08005AA4\n\
-_0800592C:\n\
- ldr r2, [r6]\n\
- ldrb r1, [r2]\n\
- lsls r1, 4\n\
- ldrb r3, [r6, 0xC]\n\
- movs r0, 0xF\n\
- ands r0, r3\n\
- orrs r0, r1\n\
- strb r0, [r6, 0xC]\n\
- adds r2, 0x1\n\
- str r2, [r6]\n\
- lsls r0, 24\n\
- lsrs r0, 28\n\
- ldrb r2, [r6, 0xD]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 28\n\
- lsrs r2, 4\n\
- b _080059D2\n\
-_0800594E:\n\
- ldr r1, [r6]\n\
- ldrb r2, [r1]\n\
- movs r0, 0xF\n\
- ands r0, r2\n\
- ldrb r3, [r6, 0xD]\n\
- movs r2, 0x10\n\
- negs r2, r2\n\
- ands r2, r3\n\
- orrs r2, r0\n\
- strb r2, [r6, 0xD]\n\
- adds r1, 0x1\n\
- str r1, [r6]\n\
- ldrb r0, [r6, 0xC]\n\
- lsrs r0, 4\n\
- lsls r1, r2, 28\n\
- lsrs r1, 28\n\
- lsrs r2, 4\n\
- b _080059D2\n\
-_08005972:\n\
- ldr r1, [r6]\n\
- ldrb r0, [r1]\n\
- lsls r0, 4\n\
- ldrb r3, [r6, 0xD]\n\
- movs r2, 0xF\n\
- ands r2, r3\n\
- orrs r2, r0\n\
- strb r2, [r6, 0xD]\n\
- adds r1, 0x1\n\
- str r1, [r6]\n\
- ldrb r0, [r6, 0xC]\n\
- lsrs r0, 4\n\
- b _080059CA\n\
-_0800598C:\n\
- ldr r3, [r6]\n\
- ldrb r1, [r3]\n\
- lsls r1, 4\n\
- ldrb r4, [r6, 0xC]\n\
- movs r2, 0xF\n\
- adds r0, r2, 0\n\
- ands r0, r4\n\
- orrs r0, r1\n\
- strb r0, [r6, 0xC]\n\
- adds r5, r3, 0x1\n\
- str r5, [r6]\n\
- ldrb r3, [r3, 0x1]\n\
- adds r1, r2, 0\n\
- ands r1, r3\n\
- ldrb r4, [r6, 0xD]\n\
- movs r3, 0x10\n\
- negs r3, r3\n\
- ands r3, r4\n\
- orrs r3, r1\n\
- strb r3, [r6, 0xD]\n\
- adds r4, r5, 0x1\n\
- str r4, [r6]\n\
- ldrb r1, [r5, 0x1]\n\
- lsls r1, 4\n\
- ands r2, r3\n\
- orrs r2, r1\n\
- strb r2, [r6, 0xD]\n\
- adds r4, 0x1\n\
- str r4, [r6]\n\
- lsls r0, 24\n\
- lsrs r0, 28\n\
-_080059CA:\n\
- lsls r1, r2, 28\n\
- lsrs r1, 28\n\
- lsls r2, 24\n\
- lsrs r2, 28\n\
-_080059D2:\n\
- bl GenerateFontHalfRowLookupTable\n\
- b _0800589E\n\
-_080059D8:\n\
- ldr r0, [r6]\n\
- b _08005B0A\n\
-_080059DC:\n\
- ldr r0, [r6]\n\
- ldrb r0, [r0]\n\
- movs r1, 0xF\n\
- ands r1, r0\n\
- ldrb r2, [r4]\n\
- movs r0, 0x10\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r4]\n\
- ldr r0, [r6]\n\
- b _08005B0A\n\
-_080059F4:\n\
- ldr r0, [r6]\n\
- ldrb r1, [r0]\n\
- strb r1, [r6, 0x1E]\n\
- adds r0, 0x1\n\
- str r0, [r6]\n\
- movs r0, 0x6\n\
- strb r0, [r6, 0x1C]\n\
- b _0800589E\n\
-_08005A04:\n\
- movs r0, 0x1\n\
- strb r0, [r6, 0x1C]\n\
- ldrb r1, [r2]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08005A14\n\
- b _08005B30\n\
-_08005A14:\n\
- movs r0, 0\n\
- strb r0, [r4, 0x2]\n\
- b _08005B30\n\
-_08005A1A:\n\
- movs r0, 0x5\n\
- b _08005D52\n\
-_08005A1E:\n\
- ldr r0, [r6]\n\
- ldrb r3, [r0]\n\
- adds r1, r0, 0x1\n\
- str r1, [r6]\n\
- ldrb r0, [r0, 0x1]\n\
- lsls r0, 8\n\
- orrs r3, r0\n\
- adds r1, 0x1\n\
- str r1, [r6]\n\
- ldr r0, _08005A48 @ =gUnknown_203ADFA\n\
- ldrb r0, [r0]\n\
- subs r0, 0x2\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bhi _08005A40\n\
- b _0800589E\n\
-_08005A40:\n\
- adds r0, r3, 0\n\
- bl PlayBGM\n\
- b _0800589E\n\
- .align 2, 0\n\
-_08005A48: .4byte gUnknown_203ADFA\n\
-_08005A4C:\n\
- ldr r0, [r6]\n\
- ldrb r3, [r0]\n\
- adds r1, r0, 0x1\n\
- str r1, [r6]\n\
- ldrb r0, [r0, 0x1]\n\
- lsls r0, 8\n\
- orrs r3, r0\n\
- adds r1, 0x1\n\
- str r1, [r6]\n\
- adds r0, r3, 0\n\
- bl PlaySE\n\
- b _0800589E\n\
-_08005A66:\n\
- ldr r1, [r6]\n\
- adds r0, r1, 0x1\n\
- str r0, [r6]\n\
- ldrb r3, [r1, 0x1]\n\
- b _08005B6C\n\
-_08005A70:\n\
- ldr r1, [r6]\n\
- ldrb r0, [r1]\n\
- ldrb r2, [r6, 0x6]\n\
- b _08005AD2\n\
-_08005A78:\n\
- ldr r1, [r6]\n\
- ldrb r0, [r1]\n\
- ldrb r3, [r6, 0x7]\n\
- adds r0, r3\n\
- strb r0, [r6, 0x9]\n\
- b _08005AD6\n\
-_08005A84:\n\
- ldrb r0, [r6, 0x4]\n\
- ldrb r2, [r6, 0xD]\n\
- lsls r2, 28\n\
- lsrs r1, r2, 4\n\
- orrs r1, r2\n\
- lsrs r1, 24\n\
- bl FillWindowPixelBuffer\n\
- b _0800589E\n\
-_08005A96:\n\
- ldr r0, _08005AA0 @ =gMPlayInfo_BGM\n\
- bl m4aMPlayStop\n\
- b _0800589E\n\
- .align 2, 0\n\
-_08005AA0: .4byte gMPlayInfo_BGM\n\
-_08005AA4:\n\
- ldr r0, _08005AAC @ =gMPlayInfo_BGM\n\
- bl m4aMPlayContinue\n\
- b _0800589E\n\
- .align 2, 0\n\
-_08005AAC: .4byte gMPlayInfo_BGM\n\
-_08005AB0:\n\
- ldr r0, [r6]\n\
- ldrb r4, [r0]\n\
- adds r0, 0x1\n\
- str r0, [r6]\n\
- cmp r4, 0\n\
- bgt _08005ABE\n\
- b _0800589E\n\
-_08005ABE:\n\
- adds r0, r6, 0\n\
- adds r1, r4, 0\n\
- bl ClearTextSpan\n\
- ldrb r0, [r6, 0x8]\n\
- adds r0, r4\n\
- b _08005C4E\n\
-_08005ACC:\n\
- ldr r1, [r6]\n\
- ldrb r0, [r6, 0x6]\n\
- ldrb r2, [r1]\n\
-_08005AD2:\n\
- adds r0, r2\n\
- strb r0, [r6, 0x8]\n\
-_08005AD6:\n\
- adds r1, 0x1\n\
- str r1, [r6]\n\
- b _0800589E\n\
-_08005ADC:\n\
- ldr r0, [r6]\n\
- ldrb r2, [r0]\n\
- ldrb r1, [r6, 0x6]\n\
- adds r2, r1\n\
- adds r0, 0x1\n\
- str r0, [r6]\n\
- ldrb r0, [r6, 0x8]\n\
- subs r4, r2, r0\n\
- cmp r4, 0\n\
- bgt _08005AF2\n\
- b _0800589E\n\
-_08005AF2:\n\
- adds r0, r6, 0\n\
- adds r1, r4, 0\n\
- bl ClearTextSpan\n\
- ldrb r0, [r6, 0x8]\n\
- adds r0, r4\n\
- b _08005C4E\n\
-_08005B00:\n\
- ldr r0, [r6]\n\
- ldrb r2, [r0]\n\
- adds r1, r6, 0\n\
- adds r1, 0x20\n\
- strb r2, [r1]\n\
-_08005B0A:\n\
- adds r0, 0x1\n\
- str r0, [r6]\n\
- b _0800589E\n\
-_08005B10:\n\
- adds r1, r6, 0\n\
- adds r1, 0x21\n\
- movs r0, 0x1\n\
- b _08005B1E\n\
-_08005B18:\n\
- adds r1, r6, 0\n\
- adds r1, 0x21\n\
- movs r0, 0\n\
-_08005B1E:\n\
- strb r0, [r1]\n\
- b _0800589E\n\
-_08005B22:\n\
- movs r0, 0x2\n\
- b _08005B28\n\
-_08005B26:\n\
- movs r0, 0x3\n\
-_08005B28:\n\
- strb r0, [r6, 0x1C]\n\
- adds r0, r6, 0\n\
- bl TextPrinterInitDownArrowCounters\n\
-_08005B30:\n\
- movs r0, 0x3\n\
- b _08005D6A\n\
-_08005B34:\n\
- ldr r0, [r6]\n\
- ldrb r3, [r0]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r1, r2, 0\n\
- orrs r3, r1\n\
- adds r0, 0x1\n\
- str r0, [r6]\n\
- b _08005B6C\n\
-_08005B46:\n\
- ldr r0, [r6]\n\
- ldrb r3, [r0]\n\
- adds r0, 0x1\n\
- str r0, [r6]\n\
- ldrb r0, [r6, 0x4]\n\
- adds r1, r3, 0\n\
- ldrb r2, [r6, 0x8]\n\
- ldrb r3, [r6, 0x9]\n\
- bl DrawKeypadIcon\n\
- ldr r1, _08005B68 @ =gGlyphInfo\n\
- adds r1, 0x80\n\
- strb r0, [r1]\n\
- ldrb r3, [r6, 0xA]\n\
- adds r0, r3\n\
- b _08005C4A\n\
- .align 2, 0\n\
-_08005B68: .4byte gGlyphInfo\n\
-_08005B6C:\n\
- ldr r0, [r4]\n\
- lsls r0, 28\n\
- lsrs r0, 28\n\
- cmp r0, 0x5\n\
- bhi _08005BEE\n\
- lsls r0, 2\n\
- ldr r1, _08005B80 @ =_08005B84\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_08005B80: .4byte _08005B84\n\
- .align 2, 0\n\
-_08005B84:\n\
- .4byte _08005B9C\n\
- .4byte _08005BAA\n\
- .4byte _08005BB8\n\
- .4byte _08005BC6\n\
- .4byte _08005BD4\n\
- .4byte _08005BE2\n\
-_08005B9C:\n\
- adds r0, r6, 0\n\
- adds r0, 0x21\n\
- ldrb r1, [r0]\n\
- adds r0, r3, 0\n\
- bl DecompressGlyphFont0\n\
- b _08005BEE\n\
-_08005BAA:\n\
- adds r0, r6, 0\n\
- adds r0, 0x21\n\
- ldrb r1, [r0]\n\
- adds r0, r3, 0\n\
- bl DecompressGlyphFont1\n\
- b _08005BEE\n\
-_08005BB8:\n\
- adds r0, r6, 0\n\
- adds r0, 0x21\n\
- ldrb r1, [r0]\n\
- adds r0, r3, 0\n\
- bl DecompressGlyphFont2\n\
- b _08005BEE\n\
-_08005BC6:\n\
- adds r0, r6, 0\n\
- adds r0, 0x21\n\
- ldrb r1, [r0]\n\
- adds r0, r3, 0\n\
- bl DecompressGlyphFont3\n\
- b _08005BEE\n\
-_08005BD4:\n\
- adds r0, r6, 0\n\
- adds r0, 0x21\n\
- ldrb r1, [r0]\n\
- adds r0, r3, 0\n\
- bl DecompressGlyphFont4\n\
- b _08005BEE\n\
-_08005BE2:\n\
- adds r0, r6, 0\n\
- adds r0, 0x21\n\
- ldrb r1, [r0]\n\
- adds r0, r3, 0\n\
- bl DecompressGlyphFont5\n\
-_08005BEE:\n\
- adds r0, r6, 0\n\
- bl CopyGlyphToWindow\n\
- adds r2, r6, 0\n\
- adds r2, 0x20\n\
- ldrb r0, [r2]\n\
- cmp r0, 0\n\
- beq _08005C28\n\
- ldr r1, _08005C24 @ =gGlyphInfo\n\
- adds r1, 0x80\n\
- ldrb r0, [r1]\n\
- ldrb r3, [r6, 0x8]\n\
- adds r0, r3\n\
- strb r0, [r6, 0x8]\n\
- ldrb r2, [r2]\n\
- ldrb r0, [r1]\n\
- subs r4, r2, r0\n\
- cmp r4, 0\n\
- ble _08005C50\n\
- adds r0, r6, 0\n\
- adds r1, r4, 0\n\
- bl ClearTextSpan\n\
- ldrb r0, [r6, 0x8]\n\
- adds r0, r4\n\
- b _08005C4E\n\
- .align 2, 0\n\
-_08005C24: .4byte gGlyphInfo\n\
-_08005C28:\n\
- adds r0, r6, 0\n\
- adds r0, 0x21\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08005C44\n\
- ldr r0, _08005C40 @ =gGlyphInfo\n\
- adds r0, 0x80\n\
- ldrb r1, [r6, 0xA]\n\
- ldrb r0, [r0]\n\
- adds r1, r0\n\
- ldrb r0, [r6, 0x8]\n\
- b _08005C4C\n\
- .align 2, 0\n\
-_08005C40: .4byte gGlyphInfo\n\
-_08005C44:\n\
- ldr r0, _08005C54 @ =gGlyphInfo\n\
- adds r0, 0x80\n\
- ldrb r0, [r0]\n\
-_08005C4A:\n\
- ldrb r1, [r6, 0x8]\n\
-_08005C4C:\n\
- adds r0, r1\n\
-_08005C4E:\n\
- strb r0, [r6, 0x8]\n\
-_08005C50:\n\
- movs r0, 0\n\
- b _08005D6A\n\
- .align 2, 0\n\
-_08005C54: .4byte gGlyphInfo\n\
-_08005C58:\n\
- adds r0, r6, 0\n\
- bl TextPrinterWait\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _08005C66\n\
- b _08005B30\n\
-_08005C66:\n\
- movs r0, 0\n\
- strb r0, [r6, 0x1C]\n\
- b _08005B30\n\
-_08005C6C:\n\
- adds r0, r6, 0\n\
- bl TextPrinterWaitWithDownArrow\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _08005C7A\n\
- b _08005B30\n\
-_08005C7A:\n\
- ldrb r0, [r6, 0x4]\n\
- ldrb r2, [r6, 0xD]\n\
- lsls r2, 28\n\
- lsrs r1, r2, 4\n\
- orrs r1, r2\n\
- lsrs r1, 24\n\
- bl FillWindowPixelBuffer\n\
- ldrb r0, [r6, 0x6]\n\
- movs r1, 0\n\
- strb r0, [r6, 0x8]\n\
- ldrb r0, [r6, 0x7]\n\
- strb r0, [r6, 0x9]\n\
- strb r1, [r6, 0x1C]\n\
- b _08005B30\n\
-_08005C98:\n\
- adds r0, r6, 0\n\
- bl TextPrinterWaitWithDownArrow\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _08005CA6\n\
- b _08005B30\n\
-_08005CA6:\n\
- adds r0, r6, 0\n\
- bl TextPrinterClearDownArrow\n\
- ldrb r1, [r6, 0x5]\n\
- ldr r0, _08005CCC @ =gFonts\n\
- ldr r2, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r1, [r6, 0xB]\n\
- ldrb r0, [r0, 0x5]\n\
- adds r1, r0\n\
- strb r1, [r6, 0x1F]\n\
- ldrb r0, [r6, 0x6]\n\
- strb r0, [r6, 0x8]\n\
- movs r0, 0x4\n\
- strb r0, [r6, 0x1C]\n\
- b _08005B30\n\
- .align 2, 0\n\
-_08005CCC: .4byte gFonts\n\
-_08005CD0:\n\
- ldrb r2, [r6, 0x1F]\n\
- cmp r2, 0\n\
- beq _08005D40\n\
- ldr r4, _08005D04 @ =gWindowVerticalScrollSpeeds\n\
- ldr r5, _08005D08 @ =gSaveBlock2Ptr\n\
- ldr r0, [r5]\n\
- ldrb r0, [r0, 0x14]\n\
- lsls r1, r0, 29\n\
- lsrs r0, r1, 29\n\
- adds r0, r4\n\
- ldrb r0, [r0]\n\
- cmp r2, r0\n\
- bcs _08005D0C\n\
- ldrb r0, [r6, 0x4]\n\
- ldrb r1, [r6, 0xD]\n\
- lsls r1, 28\n\
- lsrs r3, r1, 4\n\
- orrs r3, r1\n\
- lsrs r3, 24\n\
- movs r1, 0\n\
- bl ScrollWindow\n\
- movs r0, 0\n\
- strb r0, [r6, 0x1F]\n\
- b _08005D36\n\
- .align 2, 0\n\
-_08005D04: .4byte gWindowVerticalScrollSpeeds\n\
-_08005D08: .4byte gSaveBlock2Ptr\n\
-_08005D0C:\n\
- ldrb r0, [r6, 0x4]\n\
- lsrs r1, 29\n\
- adds r1, r4\n\
- ldrb r2, [r1]\n\
- ldrb r1, [r6, 0xD]\n\
- lsls r1, 28\n\
- lsrs r3, r1, 4\n\
- orrs r3, r1\n\
- lsrs r3, 24\n\
- movs r1, 0\n\
- bl ScrollWindow\n\
- ldr r0, [r5]\n\
- ldrb r0, [r0, 0x14]\n\
- lsls r0, 29\n\
- lsrs r0, 29\n\
- adds r0, r4\n\
- ldrb r1, [r6, 0x1F]\n\
- ldrb r0, [r0]\n\
- subs r1, r0\n\
- strb r1, [r6, 0x1F]\n\
-_08005D36:\n\
- ldrb r0, [r6, 0x4]\n\
- movs r1, 0x2\n\
- bl CopyWindowToVram\n\
- b _08005B30\n\
-_08005D40:\n\
- strb r2, [r6, 0x1C]\n\
- b _08005B30\n\
-_08005D44:\n\
- bl IsSEPlaying\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0\n\
- beq _08005D52\n\
- b _08005B30\n\
-_08005D52:\n\
- strb r0, [r6, 0x1C]\n\
- b _08005B30\n\
-_08005D56:\n\
- ldrb r0, [r6, 0x1E]\n\
- adds r1, r0, 0\n\
- cmp r1, 0\n\
- beq _08005D64\n\
- subs r0, 0x1\n\
- strb r0, [r6, 0x1E]\n\
- b _08005B30\n\
-_08005D64:\n\
- strb r1, [r6, 0x1C]\n\
- b _08005B30\n\
-_08005D68:\n\
- movs r0, 0x1\n\
-_08005D6A:\n\
- pop {r4-r6}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided");
+ struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
+ u16 currChar;
+ s32 width;
+ s32 widthHelper;
+
+ switch (textPrinter->state)
+ {
+ case 0:
+ if (JOY_HELD(A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp)
+ textPrinter->delayCounter = 0;
+
+ if (textPrinter->delayCounter && textPrinter->textSpeed)
+ {
+ textPrinter->delayCounter--;
+ if (gTextFlags.canABSpeedUpPrint && JOY_NEW(A_BUTTON | B_BUTTON))
+ {
+ subStruct->hasPrintBeenSpedUp = TRUE;
+ textPrinter->delayCounter = 0;
+ }
+ return 3;
+ }
+
+ if (gTextFlags.autoScroll)
+ textPrinter->delayCounter = 1;
+ else
+ textPrinter->delayCounter = textPrinter->textSpeed;
+
+ currChar = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+
+ switch (currChar)
+ {
+ case CHAR_NEWLINE:
+ textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
+ textPrinter->printerTemplate.currentY += gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
+ return 2;
+ case PLACEHOLDER_BEGIN:
+ textPrinter->printerTemplate.currentChar++;
+ return 2;
+ case EXT_CTRL_CODE_BEGIN:
+ currChar = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ switch (currChar)
+ {
+ case 1:
+ textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
+ return 2;
+ case 2:
+ textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
+ return 2;
+ case 3:
+ textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
+ return 2;
+ case 4:
+ textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
+ return 2;
+ case 5:
+ textPrinter->printerTemplate.currentChar++;
+ return 2;
+ case 6:
+ subStruct->glyphId = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ return 2;
+ case EXT_CTRL_CODE_UNKNOWN_7:
+ return 2;
+ case 8:
+ textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ textPrinter->state = 6;
+ return 2;
+ case 9:
+ textPrinter->state = 1;
+ if (gTextFlags.autoScroll)
+ subStruct->autoScrollDelay = 0;
+ return 3;
+ case 10:
+ textPrinter->state = 5;
+ return 3;
+ case 11:
+ currChar = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ currChar |= *textPrinter->printerTemplate.currentChar << 8;
+ textPrinter->printerTemplate.currentChar++;
+ if ((u8)(gUnknown_203ADFA - 2u) > 1)
+ PlayBGM(currChar);
+ return 2;
+ case 16:
+ currChar = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ currChar |= (*textPrinter->printerTemplate.currentChar << 8);
+ textPrinter->printerTemplate.currentChar++;
+ PlaySE(currChar);
+ return 2;
+ case 12:
+ textPrinter->printerTemplate.currentChar++;
+ currChar = *textPrinter->printerTemplate.currentChar;
+ break;
+ case 13:
+ textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ return 2;
+ case 14:
+ textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ return 2;
+ case 15:
+ FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
+ return 2;
+ case 23:
+ m4aMPlayStop(&gMPlayInfo_BGM);
+ return 2;
+ case 24:
+ m4aMPlayContinue(&gMPlayInfo_BGM);
+ return 2;
+ case EXT_CTRL_CODE_CLEAR:
+ width = *textPrinter->printerTemplate.currentChar;
+ textPrinter->printerTemplate.currentChar++;
+ if (width > 0)
+ {
+ ClearTextSpan(textPrinter, width);
+ textPrinter->printerTemplate.currentX += width;
+ return 0;
+ }
+ return 2;
+ case 18:
+ textPrinter->printerTemplate.currentX = *textPrinter->printerTemplate.currentChar + textPrinter->printerTemplate.x;
+ textPrinter->printerTemplate.currentChar++;
+ return 2;
+ case EXT_CTRL_CODE_CLEAR_TO:
+ {
+ widthHelper = *textPrinter->printerTemplate.currentChar;
+ widthHelper += textPrinter->printerTemplate.x;
+ textPrinter->printerTemplate.currentChar++;
+ width = widthHelper - textPrinter->printerTemplate.currentX;
+ if (width > 0)
+ {
+ ClearTextSpan(textPrinter, width);
+ textPrinter->printerTemplate.currentX += width;
+ return 0;
+ }
+ }
+ return 2;
+ case EXT_CTRL_CODE_MIN_LETTER_SPACING:
+ textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++;
+ return 2;
+ case EXT_CTRL_CODE_JPN:
+ textPrinter->japanese = 1;
+ return 2;
+ case EXT_CTRL_CODE_ENG:
+ textPrinter->japanese = 0;
+ return 2;
+ }
+ break;
+ case CHAR_PROMPT_CLEAR:
+ textPrinter->state = 2;
+ TextPrinterInitDownArrowCounters(textPrinter);
+ return 3;
+ case CHAR_PROMPT_SCROLL:
+ textPrinter->state = 3;
+ TextPrinterInitDownArrowCounters(textPrinter);
+ return 3;
+ case CHAR_EXTRA_EMOJI:
+ currChar = *textPrinter->printerTemplate.currentChar | 0x100;
+ textPrinter->printerTemplate.currentChar++;
+ break;
+ case CHAR_KEYPAD_ICON:
+ currChar = *textPrinter->printerTemplate.currentChar++;
+ gGlyphInfo[0x80] = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY);
+ textPrinter->printerTemplate.currentX += gGlyphInfo[0x80] + textPrinter->printerTemplate.letterSpacing;
+ return 0;
+ case EOS:
+ return 1;
+ }
+
+ switch (subStruct->glyphId)
+ {
+ case 0:
+ DecompressGlyphFont0(currChar, textPrinter->japanese);
+ break;
+ case 1:
+ DecompressGlyphFont1(currChar, textPrinter->japanese);
+ break;
+ case 2:
+ DecompressGlyphFont2(currChar, textPrinter->japanese);
+ break;
+ case 3:
+ DecompressGlyphFont3(currChar, textPrinter->japanese);
+ break;
+ case 4:
+ DecompressGlyphFont4(currChar, textPrinter->japanese);
+ break;
+ case 5:
+ DecompressGlyphFont5(currChar, textPrinter->japanese);
+ }
+
+ CopyGlyphToWindow(textPrinter);
+
+ if (textPrinter->minLetterSpacing)
+ {
+ textPrinter->printerTemplate.currentX += gGlyphInfo[0x80];
+ width = textPrinter->minLetterSpacing - gGlyphInfo[0x80];
+ if (width > 0)
+ {
+ ClearTextSpan(textPrinter, width);
+ textPrinter->printerTemplate.currentX += width;
+ }
+ }
+ else
+ {
+ if (textPrinter->japanese)
+ textPrinter->printerTemplate.currentX += (gGlyphInfo[0x80] + textPrinter->printerTemplate.letterSpacing);
+ else
+ textPrinter->printerTemplate.currentX += gGlyphInfo[0x80];
+ }
+ return 0;
+ case 1:
+ if (TextPrinterWait(textPrinter))
+ textPrinter->state = 0;
+ return 3;
+ case 2:
+ if (TextPrinterWaitWithDownArrow(textPrinter))
+ {
+ FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
+ textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
+ textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y;
+ textPrinter->state = 0;
+ }
+ return 3;
+ case 3:
+ if (TextPrinterWaitWithDownArrow(textPrinter))
+ {
+ TextPrinterClearDownArrow(textPrinter);
+ textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
+ textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
+ textPrinter->state = 4;
+ }
+ return 3;
+ case 4:
+ if (textPrinter->scrollDistance)
+ {
+
+ if (textPrinter->scrollDistance < gWindowVerticalScrollSpeeds[gSaveBlock2Ptr->optionsTextSpeed])
+ {
+ ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
+ textPrinter->scrollDistance = 0;
+ }
+ else
+ {
+ ScrollWindow(textPrinter->printerTemplate.windowId, 0, gWindowVerticalScrollSpeeds[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor));
+ textPrinter->scrollDistance -= gWindowVerticalScrollSpeeds[gSaveBlock2Ptr->optionsTextSpeed];
+ }
+ CopyWindowToVram(textPrinter->printerTemplate.windowId, 2);
+ }
+ else
+ {
+ textPrinter->state = 0;
+ }
+ return 3;
+ case 5:
+ if (!IsSEPlaying())
+ textPrinter->state = 0;
+ return 3;
+ case 6:
+ if (textPrinter->delayCounter != 0)
+ textPrinter->delayCounter--;
+ else
+ textPrinter->state = 0;
+ return 3;
+ }
+
+ return 1;
}
s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing)
@@ -1484,7 +1002,7 @@ s32 (*GetFontWidthFunc(u8 glyphId))(u16 _glyphId, bool32 _isJapanese)
for (i = 0; i < 7; ++i)
{
- if (glyphId == gGlyphWidthFuncs[i].font_id)
+ if (glyphId == gGlyphWidthFuncs[i].fontId)
return *gGlyphWidthFuncs[i].func;
}
@@ -1498,7 +1016,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
s32 (*func)(u16 glyphId, bool32 isJapanese);
int localLetterSpacing;
register u32 lineWidth asm("r5");
- u8 *bufferPointer;
+ const u8 *bufferPointer;
int glyphWidth;
u32 width;
@@ -1516,7 +1034,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
width = 0;
lineWidth = 0;
- bufferPointer = 0;
+ bufferPointer = NULL;
while (*str != 0xFF)
{
@@ -1559,7 +1077,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
}
lineWidth += glyphWidth;
}
- bufferPointer = 0;
+ bufferPointer = NULL;
break;
case 0xFC:
switch (*++str)
@@ -1813,7 +1331,7 @@ u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y)
{
BlitBitmapRectToWindow(
windowId,
- gKeypadIconTiles + (gKeypadIcons[keypadIconId].tile_offset * 0x20),
+ gKeypadIconTiles + (gKeypadIcons[keypadIconId].tileOffset * 0x20),
0,
0,
0x80,
@@ -1827,7 +1345,7 @@ u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y)
u8 GetKeypadIconTileOffset(u8 keypadIconId)
{
- return gKeypadIcons[keypadIconId].tile_offset;
+ return gKeypadIcons[keypadIconId].tileOffset;
}
u8 GetKeypadIconWidth(u8 keypadIconId)
@@ -1976,7 +1494,7 @@ s32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese)
}
}
-void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese)
+static void DecompressGlyphFont3(u16 glyphId, bool32 isJapanese)
{
const u16* glyphs;
int i;
@@ -2019,7 +1537,7 @@ s32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese)
return gFont2LatinGlyphWidths[glyphId];
}
-void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese)
+static void DecompressGlyphFont4(u16 glyphId, bool32 isJapanese)
{
const u16* glyphs;
int i;
diff --git a/src/text_printer.c b/src/text_printer.c
index 6c124b448..28377b55a 100644
--- a/src/text_printer.c
+++ b/src/text_printer.c
@@ -45,27 +45,27 @@ void DeactivateAllTextPrinters (void)
{
int printer;
for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer)
- sTextPrinters[printer].sub_union.sub.active = 0;
+ sTextPrinters[printer].active = 0;
}
u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
{
- struct TextPrinterTemplate subPrinter;
-
- subPrinter.currentChar = str;
- subPrinter.windowId = windowId;
- subPrinter.fontId = fontId;
- subPrinter.x = x;
- subPrinter.y = y;
- subPrinter.currentX = x;
- subPrinter.currentY = y;
- subPrinter.letterSpacing = gFonts[fontId].letterSpacing;
- subPrinter.lineSpacing = gFonts[fontId].lineSpacing;
- subPrinter.unk = gFonts[fontId].unk;
- subPrinter.fgColor = gFonts[fontId].fgColor;
- subPrinter.bgColor = gFonts[fontId].bgColor;
- subPrinter.shadowColor = gFonts[fontId].shadowColor;
- return AddTextPrinter(&subPrinter, speed, callback);
+ struct TextPrinterTemplate printerTemplate;
+
+ printerTemplate.currentChar = str;
+ printerTemplate.windowId = windowId;
+ printerTemplate.fontId = fontId;
+ printerTemplate.x = x;
+ printerTemplate.y = y;
+ printerTemplate.currentX = x;
+ printerTemplate.currentY = y;
+ printerTemplate.letterSpacing = gFonts[fontId].letterSpacing;
+ printerTemplate.lineSpacing = gFonts[fontId].lineSpacing;
+ printerTemplate.unk = gFonts[fontId].unk;
+ printerTemplate.fgColor = gFonts[fontId].fgColor;
+ printerTemplate.bgColor = gFonts[fontId].bgColor;
+ printerTemplate.shadowColor = gFonts[fontId].shadowColor;
+ return AddTextPrinter(&printerTemplate, speed, callback);
}
bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
@@ -76,18 +76,18 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void
if (!gFonts)
return FALSE;
- sTempTextPrinter.sub_union.sub.active = 1;
+ sTempTextPrinter.active = 1;
sTempTextPrinter.state = 0;
- sTempTextPrinter.text_speed = speed;
+ sTempTextPrinter.textSpeed = speed;
sTempTextPrinter.delayCounter = 0;
sTempTextPrinter.scrollDistance = 0;
for (i = 0; i < 7; ++i)
{
- sTempTextPrinter.sub_union.sub_fields[i] = 0;
+ sTempTextPrinter.subUnion.fields[i] = 0;
}
- sTempTextPrinter.subPrinter = *textSubPrinter;
+ sTempTextPrinter.printerTemplate = *textSubPrinter;
sTempTextPrinter.callback = callback;
sTempTextPrinter.minLetterSpacing = 0;
sTempTextPrinter.japanese = 0;
@@ -95,12 +95,12 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void
GenerateFontHalfRowLookupTable(textSubPrinter->fgColor, textSubPrinter->bgColor, textSubPrinter->shadowColor);
if (speed != TEXT_SPEED_FF && speed != 0x0)
{
- --sTempTextPrinter.text_speed;
+ --sTempTextPrinter.textSpeed;
sTextPrinters[textSubPrinter->windowId] = sTempTextPrinter;
}
else
{
- sTempTextPrinter.text_speed = 0;
+ sTempTextPrinter.textSpeed = 0;
for (j = 0; j < 0x400; ++j)
{
if ((u32)RenderFont(&sTempTextPrinter) == 1)
@@ -108,8 +108,8 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void
}
if (speed != TEXT_SPEED_FF)
- CopyWindowToVram(sTempTextPrinter.subPrinter.windowId, 2);
- sTextPrinters[textSubPrinter->windowId].sub_union.sub.active = 0;
+ CopyWindowToVram(sTempTextPrinter.printerTemplate.windowId, 2);
+ sTextPrinters[textSubPrinter->windowId].active = 0;
}
return TRUE;
}
@@ -121,18 +121,18 @@ void RunTextPrinters(void)
for (i = 0; i < 0x20; ++i)
{
- if (sTextPrinters[i].sub_union.sub.active != 0)
+ if (sTextPrinters[i].active != 0)
{
temp = RenderFont(&sTextPrinters[i]);
switch (temp) {
case 0:
- CopyWindowToVram(sTextPrinters[i].subPrinter.windowId, 2);
+ CopyWindowToVram(sTextPrinters[i].printerTemplate.windowId, 2);
case 3:
if (sTextPrinters[i].callback != 0)
- sTextPrinters[i].callback(&sTextPrinters[i].subPrinter, temp);
+ sTextPrinters[i].callback(&sTextPrinters[i].printerTemplate, temp);
break;
case 1:
- sTextPrinters[i].sub_union.sub.active = 0;
+ sTextPrinters[i].active = 0;
break;
}
}
@@ -141,7 +141,7 @@ void RunTextPrinters(void)
bool16 IsTextPrinterActive(u8 id)
{
- return sTextPrinters[id].sub_union.sub.active;
+ return sTextPrinters[id].active;
}
u32 RenderFont(struct TextPrinter *textPrinter)
@@ -149,7 +149,7 @@ u32 RenderFont(struct TextPrinter *textPrinter)
u32 ret;
while (TRUE)
{
- ret = gFonts[textPrinter->subPrinter.fontId].fontFunction(textPrinter);
+ ret = gFonts[textPrinter->printerTemplate.fontId].fontFunction(textPrinter);
if (ret != 2)
return ret;
}
diff --git a/src/tm_case.c b/src/tm_case.c
index 2031234af..b9c89b6b3 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -21,7 +21,7 @@
#include "pokemon_storage_system.h"
#include "string_util.h"
#include "party_menu.h"
-#include "data2.h"
+#include "data.h"
#include "scanline_effect.h"
#include "sound.h"
#include "strings.h"
diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c
index 25a8d4515..2ef5e02f0 100644
--- a/src/trainer_pokemon_sprites.c
+++ b/src/trainer_pokemon_sprites.c
@@ -104,7 +104,7 @@ void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 palett
if (paletteTag == 0xFFFF)
{
sCreatingSpriteTemplate.paletteTag = 0xFFFF;
- LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20);
+ LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20);
}
else
{
@@ -130,7 +130,7 @@ void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 palett
void LoadPicPaletteBySlot(u16 species, u32 otId, u32 personality, u8 paletteSlot, bool8 isTrainer)
{
if (!isTrainer)
- LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20);
+ LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20);
else
LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, paletteSlot * 0x10, 0x20);
}
@@ -278,7 +278,7 @@ u16 FreeAndDestroyMonPicSprite(u16 spriteId)
return FreeAndDestroyPicSpriteInternal(spriteId);
}
-u16 sub_810C228(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId)
+u16 LoadMonPicInWindow(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId)
{
return sub_810C0C0(species, otId, personality, isFrontPic, 0, 0, paletteSlot, windowId, FALSE);
}
diff --git a/src/trainer_tower.c b/src/trainer_tower.c
index 7194d2271..da3cf6dda 100644
--- a/src/trainer_tower.c
+++ b/src/trainer_tower.c
@@ -17,7 +17,7 @@
#include "battle_setup.h"
#include "battle_transition.h"
#include "battle.h"
-#include "battle_2.h"
+#include "battle_main.h"
#include "overworld.h"
#include "item.h"
#include "window.h"
@@ -626,12 +626,12 @@ 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];
}
-void sub_815DA54(void)
+void InitTrainerTowerBattleStruct(void)
{
u16 r10;
s32 r9;
@@ -660,7 +660,7 @@ void sub_815DA54(void)
sub_815DD2C();
}
-void sub_815DBDC(void)
+void FreeTrainerTowerBattleStruct(void)
{
Free(gUnknown_203F45C);
gUnknown_203F45C = NULL;
@@ -1122,7 +1122,7 @@ void sub_815E124(u8 taskId)
void sub_815E160(void)
{
- gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_FACTORY;
+ gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_TRAINER_TOWER;
if (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002 == 1)
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
gTrainerBattleOpponent_A = 0;
diff --git a/src/window.c b/src/window.c
index 5ccd05f35..4aaa6d9b4 100644
--- a/src/window.c
+++ b/src/window.c
@@ -364,7 +364,7 @@ void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16
FillBitmapRect4Bit(&pixelRect, x, y, width, height, fillValue);
}
-void CopyToWindowPixelBuffer(u8 windowId, const u8 *src, u16 size, u16 tileOffset)
+void CopyToWindowPixelBuffer(u8 windowId, const void *src, u16 size, u16 tileOffset)
{
if (size != 0)
CpuCopy16(src, gWindows[windowId].tileData + (0x20 * tileOffset), size);
diff --git a/sym_common.txt b/sym_common.txt
index e875d439b..a5c25be05 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -105,28 +105,28 @@ gUnknown_3004F70: @ 3004F70
gUnknown_3004F74: @ 3004F74
.space 0xC
-gUnknown_3004F80: @ 3004F80
+gPreBattleCallback1: @ 3004F80
.space 0x4
-gUnknown_3004F84: @ 3004F84
+gBattleMainFunc: @ 3004F84
.space 0xC
gBattleResults: @ 3004F90
.space 0x44
-gUnknown_3004FD4: @ 3004FD4
+gLeveledUpInBattle: @ 3004FD4
.space 0xC
-gUnknown_3004FE0: @ 3004FE0
+gBattlerControllerFuncs: @ 3004FE0
.space 0x10
-gUnknown_3004FF0: @ 3004FF0
+gHealthboxSpriteIds: @ 3004FF0
.space 0x4
-gUnknown_3004FF4: @ 3004FF4
+gMultiUsePlayerCursor: @ 3004FF4
.space 0x4
-gUnknown_3004FF8: @ 3004FF8
+gNumberOfMovesToChoose: @ 3004FF8
.space 0x4
gUnknown_3004FFC: @ 3004FFC
diff --git a/sym_ewram.txt b/sym_ewram.txt
index f6540358e..0a91bcce7 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -79,20 +79,7 @@ gUnknown_2022860: @ 2022860
.space 0xC
@ .include "src/link_rfu.o"
-gUnknown_202286C: @ 202286C
- .space 0x1
-
-gUnknown_202286D: @ 202286D
- .space 0x1
-
-gUnknown_202286E: @ 202286E
- .space 0x2
-
-gUnknown_2022870: @ 2022870
- .space 0x4
-
-gUnknown_2022874: @ 2022874
- .space 0x100
+ .include "src/battle_controllers.o"
gBattle_BG0_X: @ 2022974
.space 0x2
@@ -139,7 +126,7 @@ gBattleTextBuff1: @ 2022AB8
gBattleTextBuff2: @ 2022AC8
.space 0x10
-gUnknown_2022AD8: @ 2022AD8
+gBattleTextBuff3: @ 2022AD8
.space 0x10
gUnknown_2022AE8: @ 2022AE8
@@ -148,7 +135,7 @@ gUnknown_2022AE8: @ 2022AE8
gBattleTypeFlags: @ 2022B4C
.space 0x4
-gUnknown_2022B50: @ 2022B50
+gBattleTerrain: @ 2022B50
.space 0x4
gUnknown_2022B54: @ 2022B54
@@ -166,7 +153,7 @@ gUnknown_2022BBC: @ 2022BBC
gUnknown_2022BC0: @ 2022BC0
.space 0x4
-gUnknown_2022BC4: @ 2022BC4
+gBattleBufferA: @ 2022BC4
.space 0x2
gUnknown_2022BC6: @ 2022BC6
@@ -178,7 +165,7 @@ gUnknown_2022BC7: @ 2022BC7
gUnknown_2022BC8: @ 2022BC8
.space 0x7FC
-gUnknown_20233C4: @ 20233C4
+gBattleBufferB: @ 20233C4
.space 0x4
gUnknown_20233C8: @ 20233C8
@@ -187,7 +174,7 @@ gUnknown_20233C8: @ 20233C8
gActiveBattler: @ 2023BC4
.space 0x4
-gUnknown_2023BC8: @ 2023BC8
+gBattleControllerExecFlags: @ 2023BC8
.space 0x4
gBattlersCount: @ 2023BCC
@@ -196,19 +183,19 @@ gBattlersCount: @ 2023BCC
gBattlerPartyIndexes: @ 2023BCE
.space 0x8
-gUnknown_2023BD6: @ 2023BD6
+gBattlerPositions: @ 2023BD6
.space 0x4
-gUnknown_2023BDA: @ 2023BDA
+gActionsByTurnOrder: @ 2023BDA
.space 0x4
-gUnknown_2023BDE: @ 2023BDE
+gBattlerByTurnOrder: @ 2023BDE
.space 0x4
-gUnknown_2023BE2: @ 2023BE2
+gCurrentTurnActionNumber: @ 2023BE2
.space 0x1
-gUnknown_2023BE3: @ 2023BE3
+gCurrentActionFuncId: @ 2023BE3
.space 0x1
gBattleMons: @ 2023BE4
@@ -235,46 +222,46 @@ gUnknown_2023C34: @ 2023C34
gBattlerSpriteIds: @ 2023D44
.space 0x4
-gUnknown_2023D48: @ 2023D48
+gCurrMovePos: @ 2023D48
.space 0x1
-gUnknown_2023D49: @ 2023D49
+gChosenMovePos: @ 2023D49
.space 0x1
gCurrentMove: @ 2023D4A
.space 0x2
-gUnknown_2023D4C: @ 2023D4C
+gChosenMove: @ 2023D4C
.space 0x2
-gUnknown_2023D4E: @ 2023D4E
+gCalledMove: @ 2023D4E
.space 0x2
gBattleMoveDamage: @ 2023D50
.space 0x4
-gUnknown_2023D54: @ 2023D54
+gHpDealt: @ 2023D54
.space 0x4
-gUnknown_2023D58: @ 2023D58
+gTakenDmg: @ 2023D58
.space 0x10
-gUnknown_2023D68: @ 2023D68
+gLastUsedItem: @ 2023D68
.space 0x2
gLastUsedAbility: @ 2023D6A
.space 0x1
-sBattler_AI: @ 2023D6B
+gBattlerAttacker: @ 2023D6B
.space 0x1
gBattlerTarget: @ 2023D6C
.space 0x1
-gUnknown_2023D6D: @ 2023D6D
+gBattlerFainted: @ 2023D6D
.space 0x1
-gUnknown_2023D6E: @ 2023D6E
+gEffectBattler: @ 2023D6E
.space 0x1
gPotentialItemEffectBattler: @ 2023D6F
@@ -286,58 +273,58 @@ gAbsentBattlerFlags: @ 2023D70
gCritMultiplier: @ 2023D71
.space 0x1
-gUnknown_2023D72: @ 2023D72
+gMultiHitCounter: @ 2023D72
.space 0x2
-gUnknown_2023D74: @ 2023D74
+gBattlescriptCurrInstr: @ 2023D74
.space 0x8
-gUnknown_2023D7C: @ 2023D7C
+gChosenActionByBattler: @ 2023D7C
.space 0x4
-gUnknown_2023D80: @ 2023D80
+gSelectionBattleScripts: @ 2023D80
.space 0x10
-gUnknown_2023D90: @ 2023D90
+gLastPrintedMoves: @ 2023D90
.space 0x8
-gLastUsedMove: @ 2023D98
+gLastMoves: @ 2023D98
.space 0x8
-gUnknown_2023DA0: @ 2023DA0
+gLastLandedMoves: @ 2023DA0
.space 0x8
-gUnknown_2023DA8: @ 2023DA8
+gLastHitByType: @ 2023DA8
.space 0x8
-gUnknown_2023DB0: @ 2023DB0
+gLastResultingMoves: @ 2023DB0
.space 0x8
-gUnknown_2023DB8: @ 2023DB8
+gLockedMoves: @ 2023DB8
.space 0x8
-gUnknown_2023DC0: @ 2023DC0
+gLastHitBy: @ 2023DC0
.space 0x4
-gUnknown_2023DC4: @ 2023DC4
+gChosenMoveByBattler: @ 2023DC4
.space 0x8
gMoveResultFlags: @ 2023DCC
.space 0x4
-gUnknown_2023DD0: @ 2023DD0
+gHitMarker: @ 2023DD0
.space 0x4
gUnknown_2023DD4: @ 2023DD4
.space 0x4
-gUnknown_2023DD8: @ 2023DD8
+gTakenDmgByBattler: @ 2023DD8
.space 0x4
gUnknown_2023DDC: @ 2023DDC
.space 0x2
-gSideAffecting: @ 2023DDE
+gSideStatuses: @ 2023DDE
.space 0x6
gSideTimers: @ 2023DE4
@@ -349,16 +336,16 @@ gStatuses3: @ 2023DFC
gDisableStructs: @ 2023E0C
.space 0x70
-gUnknown_2023E7C: @ 2023E7C
+gPauseCounterBattle: @ 2023E7C
.space 0x2
-gUnknown_2023E7E: @ 2023E7E
+gPaydayMoney: @ 2023E7E
.space 0x2
gUnknown_2023E80: @ 2023E80
.space 0x2
-gUnknown_2023E82: @ 2023E82
+gBattleCommunication: @ 2023E82
.space 0x1
gUnknown_2023E83: @ 2023E83
@@ -367,28 +354,28 @@ gUnknown_2023E83: @ 2023E83
gBattleOutcome: @ 2023E8A
.space 0x2
-gUnknown_2023E8C: @ 2023E8C
+gProtectStructs: @ 2023E8C
.space 0x40
-gUnknown_2023ECC: @ 2023ECC
+gSpecialStatuses: @ 2023ECC
.space 0x50
gBattleWeather: @ 2023F1C
.space 0x4
-gUnknown_2023F20: @ 2023F20
+gWishFutureKnock: @ 2023F20
.space 0x2C
-gUnknown_2023F4C: @ 2023F4C
+gIntroSlideFlags: @ 2023F4C
.space 0x2
-gUnknown_2023F4E: @ 2023F4E
+gSentPokesToOpponent: @ 2023F4E
.space 0x2
gDynamicBasePower: @ 2023F50
.space 0x2
-gUnknown_2023F52: @ 2023F52
+gExpShareExp: @ 2023F52
.space 0x2
gEnigmaBerries: @ 2023F54
@@ -403,34 +390,34 @@ gUnknown_2023FC8: @ 2023FC8
gBattleStruct: @ 2023FE8
.space 0x4
-gUnknown_2023FEC: @ 2023FEC
+gLinkBattleSendBuffer: @ 2023FEC
.space 0x4
-gUnknown_2023FF0: @ 2023FF0
+gLinkBattleRecvBuffer: @ 2023FF0
.space 0x4
gBattleResources: @ 2023FF4
.space 0x4
-gUnknown_2023FF8: @ 2023FF8
+gActionSelectionCursor: @ 2023FF8
.space 0x4
-gUnknown_2023FFC: @ 2023FFC
+gMoveSelectionCursor: @ 2023FFC
.space 0x4
-gUnknown_2024000: @ 2024000
+gBattlerStatusSummaryTaskId: @ 2024000
.space 0x4
gBattlerInMenuId: @ 2024004
.space 0x1
-gUnknown_2024005: @ 2024005
+gDoingBattleAnim: @ 2024005
.space 0x3
-gUnknown_2024008: @ 2024008
+gTransformedPersonalities: @ 2024008
.space 0x10
-gUnknown_2024018: @ 2024018
+gBattleSpritesDataPtr: @ 2024018
.space 0x4
gMonSpritesGfxPtr: @ 202401C
@@ -529,7 +516,7 @@ gUnknown_2031DCC: @ 2031DCC
gUnknown_2031DD4: @ 2031DD4
.space 0x4
-gUnknown_2031DD8: @ 2031DD8
+gDisableMapMusicChangeOnMapLoad: @ 2031DD8
.space 0x2
gUnknown_2031DDA: @ 2031DDA
@@ -702,13 +689,13 @@ gUnknown_2037ED4: @ 2037ED4
gUnknown_2037ED8: @ 2037ED8
.space 0x4
-gUnknown_2037EDC: @ 2037EDC
+gAnimScriptCallback: @ 2037EDC
.space 0x4
gUnknown_2037EE0: @ 2037EE0
.space 0x1
-gUnknown_2037EE1: @ 2037EE1
+gAnimScriptActive: @ 2037EE1
.space 0x1
gUnknown_2037EE2: @ 2037EE2
@@ -720,19 +707,19 @@ gUnknown_2037EE3: @ 2037EE3
gAnimDisableStructPtr: @ 2037EE4
.space 0x4
-gUnknown_2037EE8: @ 2037EE8
+gAnimMoveDmg: @ 2037EE8
.space 0x4
-gUnknown_2037EEC: @ 2037EEC
+gAnimMovePower: @ 2037EEC
.space 0x2
gUnknown_2037EEE: @ 2037EEE
.space 0x10
-gUnknown_2037EFE: @ 2037EFE
+gAnimFriendship: @ 2037EFE
.space 0x2
-gUnknown_2037F00: @ 2037F00
+gWeatherMoveAnim: @ 2037F00
.space 0x2
gBattleAnimArgs: @ 2037F02
@@ -1099,8 +1086,7 @@ gUnknown_203AB38: @ 203AB38
gUnknown_203AB3C: @ 203AB3C
.space 0x4
-gUnknown_203AB40: @ 203AB40
- .space 0x4
+ .include "src/credits.o"
gUnknown_203AB44: @ 203AB44
.space 0x4