summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiegoisawesome <diego@domoreaweso.me>2017-11-29 00:52:32 -0600
committerDiegoisawesome <diego@domoreaweso.me>2017-11-29 00:52:32 -0600
commit70743f4b951bb84ca33fd2151e55b2f5018eb6c5 (patch)
tree7298959f4e81c88adeac0c26b9016b9d197da1fd
parent52624c4fb7c145c33a2d0edc1d64b2d6e09c1336 (diff)
parent54da96309186b98263b4434911e1c5b8d4b4e3ec (diff)
Merge branch 'master' of https://github.com/pret/pokeemerald
-rwxr-xr-xasm/battle_frontier_1.s2
-rwxr-xr-xasm/battle_frontier_2.s88
-rw-r--r--asm/battle_records.s12
-rw-r--r--asm/battle_setup.s18
-rw-r--r--asm/berry_blender.s8788
-rw-r--r--asm/cable_club.s52
-rw-r--r--asm/coins.s74
-rw-r--r--asm/contest.s2
-rw-r--r--asm/contest_link_80FC4F4.s8
-rw-r--r--asm/easy_chat.s8
-rw-r--r--asm/field_control_avatar.s4
-rw-r--r--asm/field_player_avatar.s4
-rwxr-xr-xasm/item_menu.s2
-rw-r--r--asm/link.s300
-rw-r--r--asm/load_save.s669
-rw-r--r--asm/macros/battle_script.inc1389
-rwxr-xr-xasm/menu.s2
-rw-r--r--asm/mystery_event_menu.s2
-rw-r--r--asm/naming_screen.s2
-rwxr-xr-xasm/new_menu_helpers.s12
-rwxr-xr-xasm/party_menu.s2
-rw-r--r--asm/pokeblock_feed.s4
-rwxr-xr-xasm/pokemon_storage_system.s8
-rwxr-xr-xasm/pokemon_summary_screen.s10
-rwxr-xr-xasm/pokenav.s20
-rw-r--r--asm/record_mixing.s2
-rw-r--r--asm/recorded_battle.s2749
-rw-r--r--asm/rom4.s12
-rw-r--r--asm/rom6.s50
-rw-r--r--asm/shop.s2
-rw-r--r--asm/trade.s14
-rw-r--r--asm/trainer_card.s4
-rw-r--r--asm/unk_81BAD84.s57
-rwxr-xr-xasm/unk_text_util.s99
-rwxr-xr-xasm/use_pokeblock.s2
-rw-r--r--asm/wild_encounter.s2353
-rw-r--r--constants/battle_constants.inc170
-rw-r--r--constants/battle_script_constants.inc169
-rw-r--r--constants/battle_text.inc375
-rw-r--r--constants/flags.inc2
-rw-r--r--constants/variables.inc2
-rw-r--r--data/battle_scripts_1.s5166
-rw-r--r--data/battle_scripts_2.s257
-rw-r--r--data/graphics.s2
-rw-r--r--data/link.s20
-rw-r--r--data/scripts/field_move_scripts.inc2
-rw-r--r--data/scripts/maps/SeafloorCavern_Room9.inc2
-rw-r--r--data/scripts/maps/SootopolisCity.inc4
-rw-r--r--data/scripts/pokeblocks.inc16
-rw-r--r--data/specials.inc6
-rw-r--r--data/unk_81BAD84.s7
-rw-r--r--data/wild_encounter.s8
-rw-r--r--include/battle.h17
-rw-r--r--include/battle_controllers.h4
-rw-r--r--include/battle_message.h12
-rw-r--r--include/battle_move_effects.h4
-rw-r--r--include/battle_script_commands.h6
-rw-r--r--include/battle_scripts.h640
-rw-r--r--include/battle_setup.h3
-rw-r--r--include/berry.h10
-rw-r--r--include/berry_blender.h8
-rw-r--r--include/decompress.h2
-rw-r--r--include/flags.h4
-rw-r--r--include/gba/m4a_internal.h2
-rw-r--r--include/global.h33
-rw-r--r--include/graphics.h18
-rw-r--r--include/item_menu_icons.h6
-rw-r--r--include/items.h4
-rw-r--r--include/link.h6
-rw-r--r--include/menu.h3
-rw-r--r--include/new_menu_helpers.h1
-rw-r--r--include/pokeblock.h22
-rw-r--r--include/pokemon.h4
-rw-r--r--include/recorded_battle.h37
-rw-r--r--include/save.h61
-rw-r--r--include/strings.h1
-rw-r--r--include/text.h3
-rw-r--r--include/tv.h2
-rw-r--r--include/unk_text_util.h9
-rw-r--r--include/vars.h1
-rw-r--r--include/wild_encounter.h44
-rw-r--r--ld_script.txt13
-rw-r--r--src/battle_2.c161
-rw-r--r--src/battle_ai_script_commands.c12
-rw-r--r--src/battle_ai_switch_items.c32
-rw-r--r--src/battle_controller_link_opponent.c12
-rw-r--r--src/battle_controller_link_partner.c12
-rw-r--r--src/battle_controller_opponent.c12
-rw-r--r--src/battle_controller_player.c12
-rw-r--r--src/battle_controller_player_partner.c12
-rw-r--r--src/battle_controller_recorded_opponent.c14
-rw-r--r--src/battle_controller_recorded_player.c14
-rw-r--r--src/battle_controller_safari.c12
-rw-r--r--src/battle_controller_wally.c12
-rw-r--r--src/battle_controllers.c14
-rw-r--r--src/battle_message.c294
-rw-r--r--src/battle_script_commands.c953
-rw-r--r--src/battle_util.c612
-rw-r--r--src/berry.c22
-rw-r--r--src/berry_blender.c3180
-rw-r--r--src/berry_fix_program.c3
-rwxr-xr-xsrc/clear_save_data_screen.c2
-rw-r--r--src/coins.c28
-rw-r--r--src/decompress.c5
-rw-r--r--src/decoration.c1
-rw-r--r--src/egg_hatch.c3
-rw-r--r--src/international_string_util.c2
-rw-r--r--src/item.c10
-rw-r--r--src/load_save.c339
-rw-r--r--src/m4a_4.c4
-rw-r--r--src/mail.c4
-rw-r--r--src/pokemon_3.c4
-rwxr-xr-xsrc/pokemon_summary_screen.c61
-rw-r--r--src/recorded_battle.c1676
-rw-r--r--src/region_map.c4
-rw-r--r--src/save.c3
-rwxr-xr-xsrc/save_failed_screen.c2
-rw-r--r--src/text.c8
-rw-r--r--src/tv.c2
-rw-r--r--src/unk_81BAD84.c47
-rw-r--r--src/unk_text_util.c56
-rw-r--r--src/wild_encounter.c933
-rw-r--r--sym_common.txt6
-rw-r--r--sym_ewram.txt138
124 files changed, 15405 insertions, 17342 deletions
diff --git a/asm/battle_frontier_1.s b/asm/battle_frontier_1.s
index e52ed0c3d..973e87fbb 100755
--- a/asm/battle_frontier_1.s
+++ b/asm/battle_frontier_1.s
@@ -14531,7 +14531,7 @@ sub_81965D8: @ 81965D8
negs r0, r0
ands r0, r1
strb r0, [r2]
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
diff --git a/asm/battle_frontier_2.s b/asm/battle_frontier_2.s
index f92f964bb..d90fa94f0 100755
--- a/asm/battle_frontier_2.s
+++ b/asm/battle_frontier_2.s
@@ -14280,7 +14280,7 @@ sub_81A1C4C: @ 81A1C4C
adds r3, r0, 0
lsls r0, r5, 3
adds r5, r0, 0x1
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
ldrb r0, [r0]
lsls r3, 24
lsrs r3, 24
@@ -14306,7 +14306,7 @@ sub_81A1C90: @ 81A1C90
push {r4,lr}
sub sp, 0x34
adds r2, r0, 0
- ldr r3, =gUnknown_0203AB74
+ ldr r3, =gResultsWindowId
movs r1, 0xAE
mov r0, sp
adds r0, 0x2F
@@ -14361,7 +14361,7 @@ sub_81A1CD8: @ 81A1CD8
lsls r0, 24
lsrs r0, 24
adds r7, r0, 0
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r10, r0
ldrb r0, [r0]
str r7, [sp]
@@ -14580,7 +14580,7 @@ sub_81A1EA8: @ 81A1EA8
sub sp, 0xC
lsls r0, 24
lsrs r7, r0, 24
- ldr r4, =gUnknown_0203AB74
+ ldr r4, =gResultsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r4]
@@ -14621,7 +14621,7 @@ _081A1F28:
ldr r0, =gStringVar4
movs r1, 0x2
bl sub_81A1C4C
- ldr r6, =gUnknown_0203AB74
+ ldr r6, =gResultsWindowId
ldrb r0, [r6]
ldr r2, =gText_Lv502
movs r1, 0x31
@@ -14734,7 +14734,7 @@ sub_81A2008: @ 81A2008
lsrs r6, 24
lsls r5, 24
lsrs r5, 24
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r10, r0
ldrb r0, [r0]
str r5, [sp]
@@ -14868,7 +14868,7 @@ sub_81A2134: @ 81A2134
sub sp, 0xC
lsls r0, 24
lsrs r7, r0, 24
- ldr r4, =gUnknown_0203AB74
+ ldr r4, =gResultsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r4]
@@ -14893,7 +14893,7 @@ _081A2184:
ldr r0, =gStringVar4
movs r1, 0
bl sub_81A1C4C
- ldr r1, =gUnknown_0203AB74
+ ldr r1, =gResultsWindowId
ldrb r0, [r1]
ldr r2, =gText_Lv502
movs r6, 0x21
@@ -14905,7 +14905,7 @@ _081A2184:
movs r1, 0x1
movs r3, 0x8
bl PrintTextOnWindow
- ldr r1, =gUnknown_0203AB74
+ ldr r1, =gResultsWindowId
ldrb r0, [r1]
ldr r2, =gText_OpenLv
movs r1, 0x61
@@ -14988,10 +14988,10 @@ _081A2184:
mov r1, r8
movs r3, 0x40
bl sub_81A2008
- ldr r1, =gUnknown_0203AB74
+ ldr r1, =gResultsWindowId
ldrb r0, [r1]
bl PutWindowTilemap
- ldr r1, =gUnknown_0203AB74
+ ldr r1, =gResultsWindowId
ldrb r0, [r1]
movs r1, 0x3
bl CopyWindowToVram
@@ -15027,7 +15027,7 @@ sub_81A22B8: @ 81A22B8
lsls r0, 24
lsrs r0, 24
adds r7, r0, 0
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r10, r0
ldrb r0, [r0]
str r7, [sp]
@@ -15221,7 +15221,7 @@ sub_81A2460: @ 81A2460
sub sp, 0xC
lsls r0, 24
lsrs r7, r0, 24
- ldr r4, =gUnknown_0203AB74
+ ldr r4, =gResultsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r4]
@@ -15246,7 +15246,7 @@ _081A24B0:
ldr r0, =gStringVar4
movs r1, 0x2
bl sub_81A1C4C
- ldr r6, =gUnknown_0203AB74
+ ldr r6, =gResultsWindowId
ldrb r0, [r6]
ldr r2, =gText_Lv502
movs r1, 0x31
@@ -15356,7 +15356,7 @@ sub_81A258C: @ 81A258C
lsrs r6, 24
lsls r5, 24
lsrs r5, 24
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r10, r0
ldrb r0, [r0]
str r5, [sp]
@@ -15469,7 +15469,7 @@ sub_81A2698: @ 81A2698
mov r5, r8
push {r5-r7}
sub sp, 0xC
- ldr r6, =gUnknown_0203AB74
+ ldr r6, =gResultsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r6]
@@ -15608,7 +15608,7 @@ sub_81A27E8: @ 81A27E8
lsls r0, 24
lsrs r0, 24
adds r7, r0, 0
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r10, r0
ldrb r0, [r0]
str r7, [sp]
@@ -15772,7 +15772,7 @@ _081A2956:
sub_81A2968: @ 81A2968
push {r4-r6,lr}
sub sp, 0xC
- ldr r5, =gUnknown_0203AB74
+ ldr r5, =gResultsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r5]
@@ -15871,7 +15871,7 @@ sub_81A2A28: @ 81A2A28
lsls r0, 24
lsrs r0, 24
adds r6, r0, 0
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r10, r0
ldrb r0, [r0]
str r6, [sp]
@@ -16147,7 +16147,7 @@ sub_81A2C94: @ 81A2C94
sub sp, 0xC
lsls r0, 24
lsrs r7, r0, 24
- ldr r4, =gUnknown_0203AB74
+ ldr r4, =gResultsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r4]
@@ -16172,7 +16172,7 @@ _081A2CE0:
ldr r0, =gStringVar4
movs r1, 0
bl sub_81A1C4C
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r8, r0
ldrb r0, [r0]
ldr r2, =gText_Lv502
@@ -16276,7 +16276,7 @@ sub_81A2DB4: @ 81A2DB4
lsls r0, 24
lsrs r0, 24
adds r7, r0, 0
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r10, r0
ldrb r0, [r0]
str r7, [sp]
@@ -16442,7 +16442,7 @@ _081A2F26:
sub_81A2F38: @ 81A2F38
push {r4-r6,lr}
sub sp, 0xC
- ldr r5, =gUnknown_0203AB74
+ ldr r5, =gResultsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r5]
@@ -16520,7 +16520,7 @@ sub_81A2FF8: @ 81A2FF8
mov r6, r8
push {r6,r7}
sub sp, 0xC
- ldr r4, =gUnknown_0203AB74
+ ldr r4, =gResultsWindowId
ldr r0, =gUnknown_08611C7C
bl AddWindow
strb r0, [r4]
@@ -16686,7 +16686,7 @@ _081A315C:
movs r2, 0x1
movs r3, 0x4
bl ConvertIntToDecimalStringN
- ldr r6, =gUnknown_0203AB74
+ ldr r6, =gResultsWindowId
ldrb r0, [r6]
movs r1, 0x26
adds r3, r5, 0
@@ -18962,7 +18962,7 @@ sub_81A4594: @ 81A4594
sub sp, 0x2C
mov r8, r1
adds r6, r3, 0
- ldr r1, =gUnknown_0203AB74
+ ldr r1, =gResultsWindowId
ldrb r5, [r1]
lsls r4, r0, 1
adds r4, r0
@@ -18998,7 +18998,7 @@ sub_81A4594: @ 81A4594
ldrb r2, [r6, 0xE]
add r0, sp, 0xC
bl TVShowConvertInternationalString
- ldr r1, =gUnknown_0203AB74
+ ldr r1, =gResultsWindowId
ldrb r0, [r1]
mov r3, r8
adds r3, 0x2
@@ -19038,7 +19038,7 @@ _081A4618:
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
- ldr r1, =gUnknown_0203AB74
+ ldr r1, =gResultsWindowId
ldrb r0, [r1]
str r7, [sp]
mov r1, r10
@@ -19072,7 +19072,7 @@ sub_81A4684: @ 81A4684
adds r7, r1, 0
mov r10, r2
adds r5, r3, 0
- ldr r1, =gUnknown_0203AB74
+ ldr r1, =gResultsWindowId
ldrb r0, [r1]
lsls r2, r6, 1
adds r2, r6
@@ -19112,7 +19112,7 @@ sub_81A4684: @ 81A4684
ldrb r2, [r5, 0x1A]
add r0, sp, 0xC
bl TVShowConvertInternationalString
- ldr r1, =gUnknown_0203AB74
+ ldr r1, =gResultsWindowId
ldrb r0, [r1]
adds r3, r7, 0x2
lsls r3, 27
@@ -19147,7 +19147,7 @@ _081A4734:
adds r1, r4, 0
bl StringCopy
_081A473C:
- ldr r2, =gUnknown_0203AB74
+ ldr r2, =gResultsWindowId
mov r9, r2
ldrb r0, [r2]
adds r3, r7, 0x4
@@ -19468,7 +19468,7 @@ sub_81A4998: @ 81A4998
ldr r1, [r5]
adds r0, r6, 0
bl StringExpandPlaceholders
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r8, r0
ldrb r0, [r0]
movs r1, 0x1
@@ -19567,7 +19567,7 @@ _081A4A90:
thumb_func_start sub_81A4AA0
sub_81A4AA0: @ 81A4AA0
push {r4,lr}
- ldr r4, =gUnknown_0203AB74
+ ldr r4, =gResultsWindowId
ldr r0, =gUnknown_08611C84
bl AddWindow
strb r0, [r4]
@@ -19595,7 +19595,7 @@ sub_81A4AA0: @ 81A4AA0
thumb_func_start sub_81A4AE8
sub_81A4AE8: @ 81A4AE8
push {r4,lr}
- ldr r4, =gUnknown_0203AB74
+ ldr r4, =gResultsWindowId
ldrb r0, [r4]
movs r1, 0x11
bl FillWindowPixelBuffer
@@ -25426,8 +25426,8 @@ sub_81A7B84: @ 81A7B84
.pool
thumb_func_end sub_81A7B84
- thumb_func_start sub_81A7B90
-sub_81A7B90: @ 81A7B90
+ thumb_func_start TryGenerateBattlePikeWildMon
+TryGenerateBattlePikeWildMon: @ 81A7B90
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -25437,7 +25437,7 @@ sub_81A7B90: @ 81A7B90
lsls r0, 24
lsrs r0, 24
mov r8, r0
- bl sub_81A7D00
+ bl GetBattlePikeWildMonHeaderId
lsls r0, 24
lsrs r6, r0, 24
ldr r7, =gSaveBlock2Ptr
@@ -25596,10 +25596,10 @@ _081A7CE2:
pop {r1}
bx r1
.pool
- thumb_func_end sub_81A7B90
+ thumb_func_end TryGenerateBattlePikeWildMon
- thumb_func_start sub_81A7D00
-sub_81A7D00: @ 81A7D00
+ thumb_func_start GetBattlePikeWildMonHeaderId
+GetBattlePikeWildMonHeaderId: @ 81A7D00
push {lr}
ldr r0, =gSaveBlock2Ptr
ldr r1, [r0]
@@ -25638,7 +25638,7 @@ _081A7D4C:
adds r0, r1, 0
pop {r1}
bx r1
- thumb_func_end sub_81A7D00
+ thumb_func_end GetBattlePikeWildMonHeaderId
thumb_func_start sub_81A7D54
sub_81A7D54: @ 81A7D54
@@ -29386,8 +29386,8 @@ _081A9B86:
.pool
thumb_func_end sub_81A9B44
- thumb_func_start sub_81A9C04
-sub_81A9C04: @ 81A9C04
+ thumb_func_start GenerateBattlePyramidWildMon
+GenerateBattlePyramidWildMon: @ 81A9C04
push {r4-r6,lr}
sub sp, 0x14
ldr r0, =gSaveBlock2Ptr
@@ -29627,7 +29627,7 @@ _081A9E0C:
pop {r0}
bx r0
.pool
- thumb_func_end sub_81A9C04
+ thumb_func_end GenerateBattlePyramidWildMon
thumb_func_start sub_81A9E28
sub_81A9E28: @ 81A9E28
diff --git a/asm/battle_records.s b/asm/battle_records.s
index c961aefe3..c441adc74 100644
--- a/asm/battle_records.s
+++ b/asm/battle_records.s
@@ -496,7 +496,7 @@ sub_813C2F4: @ 813C2F4
movs r2, 0xD0
bl GetStringCenterAlignXOffset
adds r3, r0, 0
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
ldrb r0, [r0]
lsls r3, 24
lsrs r3, 24
@@ -531,7 +531,7 @@ sub_813C384: @ 813C384
ldr r7, [r6, 0xC]
cmp r7, 0
bne _0813C40C
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r8, r0
ldrb r0, [r0]
ldr r2, =gUnknown_085B3D84
@@ -587,7 +587,7 @@ _0813C40C:
lsrs r1, 24
ldr r0, =gStringVar1
bl ConvertInternationalString
- ldr r0, =gUnknown_0203AB74
+ ldr r0, =gResultsWindowId
mov r8, r0
ldrb r0, [r0]
lsls r4, 3
@@ -661,7 +661,7 @@ sub_813C4BC: @ 813C4BC
mov r6, r8
push {r6,r7}
sub sp, 0xC
- ldr r6, =gUnknown_0203AB74
+ ldr r6, =gResultsWindowId
ldr r0, =gUnknown_085B3D7C
bl AddWindow
strb r0, [r6]
@@ -729,7 +729,7 @@ _0813C540:
adds r4, 0x1
cmp r4, 0x4
ble _0813C540
- ldr r4, =gUnknown_0203AB74
+ ldr r4, =gResultsWindowId
ldrb r0, [r4]
bl PutWindowTilemap
ldrb r0, [r4]
@@ -748,7 +748,7 @@ _0813C540:
thumb_func_start sub_813C5A0
sub_813C5A0: @ 813C5A0
push {r4,lr}
- ldr r4, =gUnknown_0203AB74
+ ldr r4, =gResultsWindowId
ldrb r0, [r4]
movs r1, 0
bl sub_819746C
diff --git a/asm/battle_setup.s b/asm/battle_setup.s
index 621749734..f77e7a5d0 100644
--- a/asm/battle_setup.s
+++ b/asm/battle_setup.s
@@ -82,8 +82,8 @@ task_add_01_battle_start: @ 80B065C
.pool
thumb_func_end task_add_01_battle_start
- thumb_func_start sub_80B0698
-sub_80B0698: @ 80B0698
+ thumb_func_start BattleSetup_StartWildBattle
+BattleSetup_StartWildBattle: @ 80B0698
push {lr}
bl GetSafariZoneFlag
cmp r0, 0
@@ -95,15 +95,15 @@ _080B06A8:
_080B06AC:
pop {r0}
bx r0
- thumb_func_end sub_80B0698
+ thumb_func_end BattleSetup_StartWildBattle
- thumb_func_start sub_80B06B0
-sub_80B06B0: @ 80B06B0
+ thumb_func_start BattleSetup_StartBattlePikeWildBattle
+BattleSetup_StartBattlePikeWildBattle: @ 80B06B0
push {lr}
bl sub_80B07B4
pop {r0}
bx r0
- thumb_func_end sub_80B06B0
+ thumb_func_end BattleSetup_StartBattlePikeWildBattle
thumb_func_start sub_80B06BC
sub_80B06BC: @ 80B06BC
@@ -147,8 +147,8 @@ _080B06F2:
.pool
thumb_func_end sub_80B06BC
- thumb_func_start sub_80B072C
-sub_80B072C: @ 80B072C
+ thumb_func_start BattleSetup_StartRoamerBattle
+BattleSetup_StartRoamerBattle: @ 80B072C
push {lr}
bl ScriptContext2_Enable
bl player_bitmagic
@@ -174,7 +174,7 @@ sub_80B072C: @ 80B072C
pop {r0}
bx r0
.pool
- thumb_func_end sub_80B072C
+ thumb_func_end BattleSetup_StartRoamerBattle
thumb_func_start sub_80B077C
sub_80B077C: @ 80B077C
diff --git a/asm/berry_blender.s b/asm/berry_blender.s
deleted file mode 100644
index f0d1b48d7..000000000
--- a/asm/berry_blender.s
+++ /dev/null
@@ -1,8788 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_807F738
-sub_807F738: @ 807F738
- push {lr}
- ldr r0, =gMPlay_SE2
- ldr r1, =0x0000ffff
- ldr r2, =gUnknown_020322A4
- ldr r2, [r2]
- adds r2, 0x4C
- movs r3, 0
- ldrsh r2, [r2, r3]
- subs r2, 0x80
- lsls r2, 17
- asrs r2, 16
- bl m4aMPlayPitchControl
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_807F738
-
- thumb_func_start sub_807F764
-sub_807F764: @ 807F764
- push {r4,lr}
- sub sp, 0x10
- bl sub_8082DF4
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- mov r12, r0
- movs r0, 0xA0
- lsls r0, 1
- add r0, r12
- ldr r1, [r0]
- movs r0, 0xA2
- lsls r0, 1
- add r0, r12
- ldr r2, [r0]
- movs r0, 0xA4
- lsls r0, 1
- add r0, r12
- movs r4, 0
- ldrsh r3, [r0, r4]
- movs r0, 0xA5
- lsls r0, 1
- add r0, r12
- movs r4, 0
- ldrsh r0, [r0, r4]
- str r0, [sp]
- movs r0, 0xA6
- lsls r0, 1
- add r0, r12
- movs r4, 0
- ldrsh r0, [r0, r4]
- str r0, [sp, 0x4]
- movs r0, 0xA7
- lsls r0, 1
- add r0, r12
- movs r4, 0
- ldrsh r0, [r0, r4]
- str r0, [sp, 0x8]
- movs r0, 0xA8
- lsls r0, 1
- add r0, r12
- ldrh r0, [r0]
- str r0, [sp, 0xC]
- movs r0, 0x2
- bl SetBgAffine
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_807F764
-
- thumb_func_start sub_807F7D8
-sub_807F7D8: @ 807F7D8
- push {r4,r5,lr}
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- ldrb r0, [r0, 0x1]
- adds r5, r1, 0
- cmp r0, 0x9
- bls _0807F7E8
- b _0807F9C8
-_0807F7E8:
- lsls r0, 2
- ldr r1, =_0807F7FC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0807F7FC:
- .4byte _0807F824
- .4byte _0807F854
- .4byte _0807F880
- .4byte _0807F8AC
- .4byte _0807F8C8
- .4byte _0807F8F4
- .4byte _0807F910
- .4byte _0807F940
- .4byte _0807F950
- .4byte _0807F980
-_0807F824:
- ldr r5, =gUnknown_08D91598
- adds r0, r5, 0
- bl sub_8034974
- adds r0, 0x64
- bl AllocZeroed
- adds r1, r0, 0
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- ldr r2, =0x000011bc
- adds r0, r2
- str r1, [r0]
- adds r0, r5, 0
- bl LZDecompressWram
- ldr r1, [r4]
- b _0807F966
- .pool
-_0807F854:
- ldr r1, =sBlenderCenterMap
- movs r2, 0x80
- lsls r2, 3
- movs r0, 0x2
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- ldr r0, =sBlenderCenterPal
- movs r2, 0x80
- lsls r2, 1
- movs r1, 0
- bl LoadPalette
- b _0807F962
- .pool
-_0807F880:
- ldr r0, [r5]
- ldr r1, =0x000011bc
- adds r0, r1
- ldr r4, [r0]
- ldr r0, =gUnknown_08D91598
- bl sub_8034974
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x2
- adds r1, r4, 0
- movs r3, 0
- bl LoadBgTiles
- ldr r1, [r5]
- b _0807F966
- .pool
-_0807F8AC:
- ldr r0, =gUnknown_08D91DB8
- ldr r1, [r5]
- ldr r2, =0x000011bc
- adds r1, r2
- ldr r1, [r1]
- bl LZDecompressWram
- ldr r1, [r5]
- b _0807F966
- .pool
-_0807F8C8:
- ldr r0, [r5]
- ldr r1, =0x000011bc
- adds r0, r1
- ldr r4, [r0]
- ldr r0, =gUnknown_08D91DB8
- bl sub_8034974
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- adds r1, r4, 0
- movs r3, 0
- bl LoadBgTiles
- ldr r1, [r5]
- b _0807F966
- .pool
-_0807F8F4:
- ldr r0, =gUnknown_08D927EC
- ldr r1, [r5]
- ldr r2, =0x000011bc
- adds r1, r2
- ldr r1, [r1]
- bl LZDecompressWram
- ldr r1, [r5]
- b _0807F966
- .pool
-_0807F910:
- ldr r0, [r5]
- ldr r1, =0x000011bc
- adds r0, r1
- ldr r4, [r0]
- ldr r0, =gUnknown_08D927EC
- bl sub_8034974
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- adds r1, r4, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- ldr r1, [r5]
- b _0807F966
- .pool
-_0807F940:
- ldr r0, =sBlenderOuterPal
- movs r1, 0x80
- movs r2, 0x20
- bl LoadPalette
- b _0807F962
- .pool
-_0807F950:
- ldr r0, =sSpriteSheet_BlenderArrow
- bl LoadSpriteSheet
- ldr r0, =gUnknown_08339BD8
- bl LoadSpriteSheet
- ldr r0, =gUnknown_08339B38
- bl LoadSpriteSheet
-_0807F962:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
-_0807F966:
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _0807F9C8
- .pool
-_0807F980:
- ldr r0, =gUnknown_08339C24
- bl LoadSpriteSheet
- ldr r0, =gUnknown_08339C58
- bl LoadSpriteSheet
- ldr r0, =sSpritePal_BlenderArrow
- bl LoadSpritePalette
- ldr r0, =sSpritePal_BlenderMisc
- bl LoadSpritePalette
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- ldr r2, =0x000011bc
- adds r0, r2
- ldr r0, [r0]
- bl Free
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1, 0x1]
- movs r0, 0x1
- b _0807F9CA
- .pool
-_0807F9C8:
- movs r0, 0
-_0807F9CA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_807F7D8
-
- thumb_func_start sub_807F9D0
-sub_807F9D0: @ 807F9D0
- push {lr}
- sub sp, 0x8
- movs r0, 0x1E
- str r0, [sp]
- movs r0, 0x14
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuRegBits
- 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
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_807F9D0
-
- thumb_func_start sub_807FA34
-sub_807FA34: @ 807FA34
- push {r4,lr}
- sub sp, 0x8
- ldr r0, =gUnknown_08339980
- bl InitWindows
- lsls r0, 16
- cmp r0, 0
- beq _0807FA74
- bl DeactivateAllTextPrinters
- movs r4, 0
-_0807FA4A:
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0
- bl FillWindowPixelBuffer
- adds r4, 0x1
- cmp r4, 0x4
- ble _0807FA4A
- movs r0, 0x1E
- str r0, [sp]
- movs r0, 0x14
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0xE0
- bl sub_81978B0
-_0807FA74:
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_807FA34
-
- thumb_func_start sub_807FA80
-sub_807FA80: @ 807FA80
- push {r4,lr}
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- cmp r0, 0
- bne _0807FA94
- movs r0, 0x8F
- lsls r0, 5
- bl AllocZeroed
- str r0, [r4]
-_0807FA94:
- ldr r0, [r4]
- adds r0, 0x63
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r4]
- strb r1, [r0]
- ldr r0, [r4]
- adds r0, 0x63
- strb r1, [r0]
- ldr r0, =gSpecialVar_0x8004
- ldrb r0, [r0]
- bl sub_807FE54
- ldr r0, =sub_807FAC8
- bl SetMainCallback2
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_807FA80
-
- thumb_func_start sub_807FAC8
-sub_807FAC8: @ 807FAC8
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r6, r1, 0
- cmp r0, 0x6
- bls _0807FADA
- b _0807FCE2
-_0807FADA:
- lsls r0, 2
- ldr r1, =_0807FAEC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0807FAEC:
- .4byte _0807FB08
- .4byte _0807FBAC
- .4byte _0807FC38
- .4byte _0807FC4E
- .4byte _0807FC64
- .4byte _0807FC90
- .4byte _0807FCB0
-_0807FB08:
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_08339974
- movs r0, 0x1
- movs r2, 0x3
- bl InitBgsFromTemplates
- ldr r4, =gUnknown_020322A4
- ldr r1, [r4]
- movs r0, 0xDC
- lsls r0, 1
- adds r1, r0
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r0, =0x000009b8
- adds r1, r0
- movs r0, 0x2
- bl SetBgTilemapBuffer
- movs r0, 0
- movs r1, 0x1
- movs r2, 0xD0
- bl sub_809882C
- movs r0, 0
- movs r1, 0x14
- movs r2, 0xF0
- bl copy_textbox_border_tile_patterns_to_vram
- bl sub_807FA34
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- movs r2, 0
- strb r0, [r1]
- ldr r3, [r4]
- movs r1, 0x8C
- lsls r1, 1
- adds r0, r3, r1
- movs r1, 0
- strh r2, [r0]
- movs r4, 0x8B
- lsls r4, 1
- adds r0, r3, r4
- strh r2, [r0]
- movs r0, 0x8D
- lsls r0, 1
- adds r4, r3, r0
- movs r0, 0x50
- strh r0, [r4]
- movs r4, 0x8E
- lsls r4, 1
- adds r0, r3, r4
- strh r2, [r0]
- adds r4, 0x2
- adds r0, r3, r4
- strh r2, [r0]
- strb r1, [r3, 0x1]
- bl sub_8082D28
- b _0807FCE2
- .pool
-_0807FBAC:
- bl sub_807F7D8
- lsls r0, 24
- cmp r0, 0
- bne _0807FBB8
- b _0807FCE2
-_0807FBB8:
- movs r4, 0
- ldr r5, =sBlenderSyncArrowsPos
- ldr r6, =gUnknown_020322A4
-_0807FBBE:
- ldrb r1, [r5]
- ldrb r2, [r5, 0x1]
- ldr r0, =sBlenderSyncArrow_SpriteTemplate
- movs r3, 0x1
- bl CreateSprite
- ldr r1, [r6]
- adds r1, 0x50
- adds r1, r4
- strb r0, [r1]
- ldr r0, [r6]
- adds r0, 0x50
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- adds r1, r4, 0
- adds r1, 0x8
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAnim
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _0807FBBE
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807FC14
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807FC14
- bl sub_800E0E8
- movs r0, 0
- movs r1, 0
- bl sub_800DFB4
-_0807FC14:
- ldr r0, =sub_807F764
- bl SetVBlankCallback
- b _0807FCA0
- .pool
-_0807FC38:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- bl sub_8082D28
- b _0807FCA0
-_0807FC4E:
- bl sub_807F9D0
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0807FCE2
- b _0807FCA0
- .pool
-_0807FC64:
- ldr r4, [r6]
- ldr r0, =0x000011b8
- adds r4, r0
- ldr r5, =gText_BerryBlenderStart
- bl sav2_get_text_speed
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_808417C
- cmp r0, 0
- beq _0807FCE2
- ldr r1, [r6]
- b _0807FCA4
- .pool
-_0807FC90:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_0807FCA0:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
-_0807FCA4:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0807FCE2
- .pool
-_0807FCB0:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0807FCE2
- bl FreeAllWindowBuffers
- movs r0, 0x2
- bl UnsetBgTilemapBuffer
- movs r0, 0x1
- bl UnsetBgTilemapBuffer
- movs r0, 0
- bl SetVBlankCallback
- ldr r0, =sub_807FFA4
- bl sub_81AABF0
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- strb r4, [r0]
-_0807FCE2:
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_807FAC8
-
- thumb_func_start sub_807FD08
-sub_807FD08: @ 807FD08
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x3A]
- ldrh r1, [r4, 0x30]
- adds r0, r1
- strh r0, [r4, 0x30]
- ldrh r1, [r4, 0x32]
- ldrh r2, [r4, 0x36]
- subs r1, r2
- ldrh r0, [r4, 0x3C]
- adds r1, r0
- strh r1, [r4, 0x32]
- ldrh r3, [r4, 0x2E]
- adds r0, r3
- strh r0, [r4, 0x2E]
- subs r2, 0x1
- strh r2, [r4, 0x36]
- lsls r0, 16
- lsls r1, 16
- cmp r0, r1
- bge _0807FD56
- ldrh r0, [r4, 0x34]
- subs r0, 0x1
- strh r0, [r4, 0x36]
- strh r0, [r4, 0x34]
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- ble _0807FD50
- adds r0, r4, 0
- bl DestroySprite
- b _0807FD56
-_0807FD50:
- movs r0, 0x74
- bl PlaySE
-_0807FD56:
- ldrh r0, [r4, 0x30]
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x32]
- strh r0, [r4, 0x22]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_807FD08
-
- thumb_func_start sub_807FD64
-sub_807FD64: @ 807FD64
- push {r4-r6,lr}
- ldr r5, [sp, 0x10]
- ldr r6, [sp, 0x14]
- lsls r2, 16
- lsrs r2, 16
- movs r4, 0
- strh r2, [r0, 0x2E]
- strh r1, [r0, 0x30]
- strh r2, [r0, 0x32]
- strh r3, [r0, 0x34]
- movs r1, 0xA
- strh r1, [r0, 0x36]
- strh r4, [r0, 0x38]
- strh r5, [r0, 0x3A]
- strh r6, [r0, 0x3C]
- ldr r1, =sub_807FD08
- str r1, [r0, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_807FD64
-
- thumb_func_start sub_807FD90
-sub_807FD90: @ 807FD90
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x8
- adds r6, r1, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r0, 24
- movs r1, 0xF6
- lsls r1, 23
- adds r0, r1
- lsrs r0, 24
- movs r3, 0x1
- ands r3, r6
- movs r1, 0
- movs r2, 0x50
- bl sub_80D511C
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- mov r8, r2
- add r8, r0
- mov r3, r8
- lsls r3, 2
- mov r8, r3
- ldr r0, =gSprites
- add r8, r0
- ldr r5, =gUnknown_08339C78
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 1
- adds r0, r4, r5
- movs r6, 0
- ldrsh r1, [r0, r6]
- adds r0, r5, 0x2
- adds r0, r4, r0
- movs r3, 0
- ldrsh r2, [r0, r3]
- adds r0, r5, 0x4
- adds r0, r4, r0
- movs r6, 0
- ldrsh r3, [r0, r6]
- adds r0, r5, 0x6
- adds r0, r4, r0
- movs r6, 0
- ldrsh r0, [r0, r6]
- str r0, [sp]
- adds r5, 0x8
- adds r4, r5
- movs r5, 0
- ldrsh r0, [r4, r5]
- str r0, [sp, 0x4]
- mov r0, r8
- bl sub_807FD64
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_807FD90
-
- thumb_func_start sub_807FE14
-sub_807FE14: @ 807FE14
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r5, r1, 16
- lsrs r5, 16
- adds r0, r5, 0
- adds r0, 0x7C
- lsls r0, 24
- lsrs r0, 24
- bl GetBerryInfo
- adds r4, r0, 0
- strh r5, [r6]
- adds r0, r6, 0x2
- adds r1, r4, 0
- bl StringCopy
- ldrb r0, [r4, 0x15]
- strb r0, [r6, 0x9]
- ldrb r0, [r4, 0x16]
- strb r0, [r6, 0xA]
- ldrb r0, [r4, 0x17]
- strb r0, [r6, 0xB]
- ldrb r0, [r4, 0x18]
- strb r0, [r6, 0xC]
- ldrb r0, [r4, 0x19]
- strb r0, [r6, 0xD]
- ldrb r0, [r4, 0x1A]
- strb r0, [r6, 0xE]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_807FE14
-
- thumb_func_start sub_807FE54
-sub_807FE54: @ 807FE54
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- beq _0807FE7C
- cmp r5, 0x1
- bgt _0807FE68
- cmp r5, 0
- beq _0807FE72
- b _0807FF88
-_0807FE68:
- cmp r5, 0x2
- beq _0807FEE8
- cmp r5, 0x3
- beq _0807FF3C
- b _0807FF88
-_0807FE72:
- ldr r0, =gUnknown_03005D98
- strb r5, [r0]
- b _0807FF88
- .pool
-_0807FE7C:
- ldr r0, =gUnknown_03005D98
- strb r5, [r0]
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r0, 0x7C
- movs r1, 0x2
- strb r1, [r0]
- ldr r4, =gLinkPlayers + 8
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- adds r0, r4, 0
- bl StringCopy
- movs r0, 0xD0
- lsls r0, 2
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _0807FEC8
- adds r0, r4, 0
- adds r0, 0x1C
- ldr r1, =sBlenderOpponentsNames
- ldr r1, [r1, 0xC]
- bl StringCopy
- b _0807FED4
- .pool
-_0807FEC8:
- adds r0, r4, 0
- adds r0, 0x1C
- ldr r1, =sBlenderOpponentsNames
- ldr r1, [r1]
- bl StringCopy
-_0807FED4:
- ldr r1, =gLinkPlayers
- movs r0, 0x2
- strh r0, [r1, 0x1A]
- strh r0, [r1, 0x36]
- b _0807FF88
- .pool
-_0807FEE8:
- ldr r0, =gUnknown_03005D98
- strb r5, [r0]
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r0, 0x7C
- movs r1, 0x3
- strb r1, [r0]
- ldr r6, =gLinkPlayers + 8
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- adds r0, r6, 0
- bl StringCopy
- adds r0, r6, 0
- adds r0, 0x1C
- ldr r4, =sBlenderOpponentsNames
- ldr r1, [r4, 0x10]
- bl StringCopy
- adds r0, r6, 0
- adds r0, 0x38
- ldr r1, [r4, 0x8]
- bl StringCopy
- adds r0, r6, 0
- subs r0, 0x8
- strh r5, [r0, 0x1A]
- strh r5, [r0, 0x36]
- adds r0, 0x52
- strh r5, [r0]
- b _0807FF88
- .pool
-_0807FF3C:
- ldr r0, =gUnknown_03005D98
- strb r5, [r0]
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r0, 0x7C
- movs r1, 0x4
- strb r1, [r0]
- ldr r5, =gLinkPlayers + 8
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- adds r0, r5, 0
- bl StringCopy
- adds r0, r5, 0
- adds r0, 0x1C
- ldr r4, =sBlenderOpponentsNames
- ldr r1, [r4, 0x14]
- bl StringCopy
- adds r0, r5, 0
- adds r0, 0x38
- ldr r1, [r4, 0x4]
- bl StringCopy
- adds r0, r5, 0
- adds r0, 0x54
- ldr r1, [r4, 0x8]
- bl StringCopy
- adds r0, r5, 0
- subs r0, 0x8
- movs r1, 0x2
- strh r1, [r0, 0x1A]
- strh r1, [r0, 0x36]
- adds r0, 0x52
- strh r1, [r0]
- adds r0, 0x1C
- strh r1, [r0]
-_0807FF88:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_807FE54
-
- thumb_func_start sub_807FFA4
-sub_807FFA4: @ 807FFA4
- push {r4,r5,lr}
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- cmp r0, 0
- bne _0807FFC0
- movs r0, 0x8F
- lsls r0, 5
- bl AllocZeroed
- str r0, [r4]
-_0807FFC0:
- ldr r0, [r4]
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r4]
- movs r2, 0x86
- lsls r2, 1
- adds r0, r2
- str r1, [r0]
- movs r2, 0
- ldr r5, =gSpecialVar_0x8004
- movs r3, 0
-_0807FFD6:
- ldr r0, [r4]
- lsls r1, r2, 1
- adds r0, 0x74
- adds r0, r1
- strh r3, [r0]
- adds r2, 0x1
- cmp r2, 0x3
- ble _0807FFD6
- ldrb r0, [r5]
- bl sub_807FE54
- ldrh r0, [r5]
- cmp r0, 0
- bne _08080008
- ldr r0, =sub_8080018
- bl SetMainCallback2
- b _0808000E
- .pool
-_08080008:
- ldr r0, =sub_80808D4
- bl SetMainCallback2
-_0808000E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_807FFA4
-
- thumb_func_start sub_8080018
-sub_8080018: @ 8080018
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r2, r1, 0
- cmp r0, 0x15
- bls _0808002A
- b _08080546
-_0808002A:
- lsls r0, 2
- ldr r1, =_0808003C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0808003C:
- .4byte _08080094
- .4byte _08080100
- .4byte _08080120
- .4byte _0808019C
- .4byte _080801AE
- .4byte _080801C8
- .4byte _08080546
- .4byte _08080546
- .4byte _080801F8
- .4byte _08080248
- .4byte _0808026C
- .4byte _08080302
- .4byte _0808035C
- .4byte _080803D4
- .4byte _08080408
- .4byte _0808049C
- .4byte _080804D0
- .4byte _08080546
- .4byte _080804F8
- .4byte _080804E4
- .4byte _080804EA
- .4byte _08080508
-_08080094:
- bl sub_8080588
- ldr r1, =gUnknown_020229C6
- ldr r2, =0x00004422
- adds r0, r2, 0
- strh r0, [r1]
- ldr r2, =gUnknown_020322A4
- ldr r0, [r2]
- adds r0, 0x72
- movs r1, 0
- strb r1, [r0]
- movs r5, 0
- movs r6, 0
- movs r7, 0x92
- lsls r7, 1
-_080800B2:
- ldr r0, [r2]
- lsls r1, r5, 1
- adds r0, 0x64
- adds r0, r1
- strh r6, [r0]
- adds r4, r5, 0x1
- adds r1, r5
- lsls r1, 1
- movs r3, 0x2
-_080800C4:
- ldr r0, [r2]
- adds r0, r7
- adds r0, r1
- strh r6, [r0]
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _080800C4
- adds r5, r4, 0
- cmp r5, 0x3
- ble _080800B2
- ldr r3, =gUnknown_020322A4
- ldr r4, [r3]
- adds r1, r4, 0
- adds r1, 0x70
- movs r2, 0
- movs r0, 0
- strh r0, [r1]
- subs r1, 0x22
- strh r0, [r1]
- strb r2, [r4, 0x1]
- ldr r1, [r3]
- b _080804FC
- .pool
-_08080100:
- bl sub_807F7D8
- lsls r0, 24
- cmp r0, 0
- bne _0808010C
- b _08080546
-_0808010C:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bl sub_8082D28
- b _08080546
- .pool
-_08080120:
- movs r5, 0
- ldr r4, =sBlenderSyncArrowsPos
- ldr r6, =gUnknown_020322A4
-_08080126:
- ldrb r1, [r4]
- ldrb r2, [r4, 0x1]
- ldr r0, =sBlenderSyncArrow_SpriteTemplate
- movs r3, 0x1
- bl CreateSprite
- ldr r1, [r6]
- adds r1, 0x54
- adds r1, r5
- strb r0, [r1]
- ldr r0, [r6]
- adds r0, 0x54
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- adds r1, r5, 0
- adds r1, 0x8
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAnim
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08080126
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0808016A
- b _080804F8
-_0808016A:
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _08080174
- b _080804F8
-_08080174:
- bl sub_800E0E8
- movs r0, 0
- movs r1, 0
- bl sub_800DFB4
- b _080804F8
- .pool
-_0808019C:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- b _080804F8
-_080801AE:
- bl sub_807F9D0
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080801C0
- b _08080546
-_080801C0:
- b _080804F8
- .pool
-_080801C8:
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- ldr r3, =0x000011b8
- adds r0, r3
- ldr r1, =sText_CommunicationStandby
- movs r2, 0
- bl sub_808417C
- ldr r1, [r4]
- movs r2, 0
- movs r0, 0x8
- strb r0, [r1]
- ldr r0, [r4]
- movs r1, 0x84
- lsls r1, 1
- adds r0, r1
- str r2, [r0]
- b _08080546
- .pool
-_080801F8:
- ldr r4, =gUnknown_020322A4
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- movs r6, 0
- strb r0, [r1]
- ldr r0, [r4]
- movs r2, 0x8A
- lsls r2, 1
- adds r0, r2
- strb r6, [r0]
- ldr r0, [r4]
- movs r5, 0xAC
- lsls r5, 1
- adds r0, r5
- ldr r1, =gSpecialVar_ItemId
- ldrh r1, [r1]
- bl sub_807FE14
- ldr r0, =gUnknown_020228C4
- ldr r1, [r4]
- adds r1, r5
- movs r2, 0x10
- bl memcpy
- bl sub_800ADF8
- ldr r0, [r4]
- movs r3, 0x84
- lsls r3, 1
- adds r0, r3
- str r6, [r0]
- b _08080546
- .pool
-_08080248:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- bne _08080254
- b _08080546
-_08080254:
- bl ResetBlockReceivedFlags
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- beq _08080264
- b _080804F8
-_08080264:
- movs r0, 0x4
- bl sub_800A4D8
- b _080804F8
-_0808026C:
- ldr r6, =gUnknown_020322A4
- ldr r1, [r6]
- movs r0, 0x84
- lsls r0, 1
- adds r1, r0
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x14
- bgt _08080282
- b _08080546
-_08080282:
- movs r0, 0x4
- movs r1, 0x1
- bl sub_8197DF8
- bl GetBlockReceivedStatus
- adds r4, r0, 0
- bl sub_800A9D8
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- beq _0808029E
- b _08080546
-_0808029E:
- movs r5, 0
- adds r7, r6, 0
- movs r6, 0xAC
- lsls r6, 1
- b _080802D4
- .pool
-_080802AC:
- ldr r0, [r7]
- lsls r4, r5, 4
- adds r0, r4, r0
- adds r0, r6
- lsls r1, r5, 8
- ldr r2, =gBlockRecvBuffer
- adds r1, r2
- movs r2, 0x10
- bl memcpy
- ldr r0, [r7]
- lsls r2, r5, 1
- adds r1, r0, 0
- adds r1, 0x74
- adds r1, r2
- adds r0, r4
- adds r0, r6
- ldrh r0, [r0]
- strh r0, [r1]
- adds r5, 0x1
-_080802D4:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- blt _080802AC
- bl ResetBlockReceivedFlags
- b _080804F8
- .pool
-_080802EC:
- ldrb r1, [r4]
- lsls r1, 1
- adds r0, r2, 0
- adds r0, 0x74
- adds r0, r1
- ldrh r0, [r0]
- lsls r1, r5, 24
- lsrs r1, 24
- bl sub_807FD90
- b _08080336
-_08080302:
- bl GetLinkPlayerCount
- ldr r2, =gUnknown_020322A4
- ldr r1, [r2]
- adds r1, 0x7C
- strb r0, [r1]
- movs r5, 0
- ldr r2, [r2]
- movs r1, 0x8A
- lsls r1, 1
- adds r4, r2, r1
- ldr r1, =gUnknown_083399D0
- adds r0, r2, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 2
- ldrb r3, [r4]
- adds r0, r1
-_08080328:
- ldrb r1, [r0]
- cmp r3, r1
- beq _080802EC
- adds r0, 0x1
- adds r5, 0x1
- cmp r5, 0x3
- ble _08080328
-_08080336:
- ldr r3, =gUnknown_020322A4
- ldr r1, [r3]
- movs r0, 0x84
- lsls r0, 1
- adds r2, r1, r0
- movs r0, 0
- str r0, [r2]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r1, [r3]
- movs r2, 0x8A
- lsls r2, 1
- adds r1, r2
- b _080804FC
- .pool
-_0808035C:
- ldr r3, [r2]
- movs r0, 0x84
- lsls r0, 1
- adds r1, r3, r0
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x3C
- bgt _08080370
- b _08080546
-_08080370:
- movs r1, 0x8A
- lsls r1, 1
- adds r0, r3, r1
- adds r1, r3, 0
- adds r1, 0x7C
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _080803B8
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- ldr r2, [r2]
- ldr r3, =gUnknown_083399DC
- ldr r1, =gUnknown_083399E4
- adds r0, r2, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- subs r0, 0x2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r3
- ldr r3, =0xffffa800
- adds r1, r3, 0
- ldrh r0, [r0]
- adds r1, r0
- adds r2, 0x4A
- strh r1, [r2]
- b _080803BE
- .pool
-_080803B8:
- ldrb r0, [r3]
- subs r0, 0x1
- strb r0, [r3]
-_080803BE:
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- movs r1, 0x84
- lsls r1, 1
- adds r0, r1
- movs r1, 0
- str r1, [r0]
- b _08080546
- .pool
-_080803D4:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- bne _080803E0
- b _08080546
-_080803E0:
- ldr r2, =gUnknown_020322A4
- ldr r1, [r2]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, [r2]
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2
- bl sub_8082CB4
- movs r0, 0x2B
- bl PlaySE
- movs r0, 0x2
- bl ShowBg
- b _08080546
- .pool
-_08080408:
- movs r1, 0x80
- lsls r1, 3
- movs r0, 0
- bl SetGpuRegBits
- ldr r4, =gUnknown_020322A4
- ldr r2, [r4]
- adds r1, r2, 0
- adds r1, 0x4A
- movs r3, 0x80
- lsls r3, 2
- adds r0, r3, 0
- ldrh r3, [r1]
- adds r0, r3
- strh r0, [r1]
- movs r0, 0x8D
- lsls r0, 1
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x4
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xFF
- bls _0808048C
- movs r0, 0xC
- movs r1, 0x2
- bl SetGpuRegBits
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r3, [r4]
- movs r2, 0x8D
- lsls r2, 1
- adds r1, r3, r2
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r1]
- ldr r2, =gUnknown_083399DC
- ldr r1, =gUnknown_083399E4
- adds r0, r3, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- subs r0, 0x2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- adds r1, r3, 0
- adds r1, 0x4A
- strh r0, [r1]
- movs r0, 0x84
- lsls r0, 1
- adds r1, r3, r0
- movs r0, 0
- str r0, [r1]
- movs r0, 0x34
- bl PlaySE
- bl sub_808074C
- bl sub_80807BC
-_0808048C:
- ldr r0, [r4]
- b _080804BE
- .pool
-_0808049C:
- bl sub_8083380
- lsls r0, 24
- cmp r0, 0
- beq _080804BA
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r3, 0x84
- lsls r3, 1
- adds r2, r1, r3
- movs r0, 0
- str r0, [r2]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_080804BA:
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
-_080804BE:
- movs r1, 0xA0
- lsls r1, 1
- adds r0, r1
- bl sub_8082CB4
- b _08080546
- .pool
-_080804D0:
- ldr r0, =gUnknown_08339C2C
- movs r2, 0x10
- negs r2, r2
- movs r1, 0x78
- movs r3, 0x3
- bl CreateSprite
- b _080804F8
- .pool
-_080804E4:
- bl sub_800ADF8
- b _080804F8
-_080804EA:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _08080546
- bl sub_800A418
-_080804F8:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
-_080804FC:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08080546
- .pool
-_08080508:
- ldr r5, =gUnknown_020322A4
- ldr r3, [r5]
- adds r1, r3, 0
- adds r1, 0x4C
- movs r2, 0
- movs r0, 0x80
- strh r0, [r1]
- movs r1, 0x82
- lsls r1, 1
- adds r0, r3, r1
- str r2, [r0]
- ldr r0, =sub_8081898
- bl SetMainCallback2
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =0x00000193
- cmp r0, r4
- beq _08080540
- bl GetCurrentMapMusic
- ldr r1, [r5]
- movs r2, 0xAA
- lsls r2, 1
- adds r1, r2
- strh r0, [r1]
-_08080540:
- adds r0, r4, 0
- bl PlayBGM
-_08080546:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r3, 0x8E
- lsls r3, 1
- adds r0, r1, r3
- movs r2, 0
- ldrsh r0, [r0, r2]
- adds r3, 0x2
- adds r1, r3
- movs r2, 0
- ldrsh r1, [r1, r2]
- bl nullsub_31
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8080018
-
- thumb_func_start sub_8080588
-sub_8080588: @ 8080588
- push {r4,lr}
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetTasks
- ldr r0, =sub_807F764
- bl SetVBlankCallback
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_08339974
- movs r0, 0x1
- movs r2, 0x3
- bl InitBgsFromTemplates
- ldr r4, =gUnknown_020322A4
- ldr r1, [r4]
- movs r0, 0xDC
- lsls r0, 1
- adds r1, r0
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r3, =0x000009b8
- adds r1, r3
- movs r0, 0x2
- bl SetBgTilemapBuffer
- movs r0, 0
- movs r1, 0x1
- movs r2, 0xD0
- bl sub_809882C
- movs r0, 0
- movs r1, 0x14
- movs r2, 0xF0
- bl copy_textbox_border_tile_patterns_to_vram
- bl sub_807FA34
- ldr r2, [r4]
- adds r0, r2, 0
- adds r0, 0x44
- movs r1, 0
- strh r1, [r0]
- adds r0, 0x8
- strh r1, [r0]
- subs r0, 0x2
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- movs r3, 0x8E
- lsls r3, 1
- adds r0, r2, r3
- strh r1, [r0]
- adds r3, 0x2
- adds r0, r2, r3
- strh r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8080588
-
- thumb_func_start task_tutorial_oak_boy_girl
-task_tutorial_oak_boy_girl: @ 8080624
- push {lr}
- lsls r0, 16
- lsls r1, 24
- lsrs r0, 24
- adds r2, r0, 0
- adds r2, 0x18
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- lsrs r1, 23
- adds r0, 0x96
- adds r0, r1
- ldrb r0, [r0]
- ldr r1, =gUnknown_083399E7
- adds r0, r1
- ldrb r1, [r0]
- cmp r2, r1
- bcc _0808066C
- adds r0, r1, 0
- adds r0, 0x30
- cmp r2, r0
- bcs _0808066C
- subs r0, 0x1C
- cmp r2, r0
- bcc _08080668
- adds r0, 0x8
- cmp r2, r0
- bcs _08080668
- movs r0, 0x2
- b _0808066E
- .pool
-_08080668:
- movs r0, 0x1
- b _0808066E
-_0808066C:
- movs r0, 0
-_0808066E:
- pop {r1}
- bx r1
- thumb_func_end task_tutorial_oak_boy_girl
-
- thumb_func_start sub_8080674
-sub_8080674: @ 8080674
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r1, 24
- lsrs r1, 24
- movs r6, 0
- cmp r5, 0xAF
- bne _080806AC
- movs r4, 0
- subs r7, r1, 0x1
- adds r2, 0x9
-_08080690:
- adds r0, r2, r6
- adds r1, r2, r4
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bls _0808069E
- adds r6, r4, 0
-_0808069E:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x4
- bls _08080690
- adds r0, r6, 0x5
- b _080806C4
-_080806AC:
- adds r0, r5, 0
- subs r0, 0x85
- lsls r0, 16
- lsrs r6, r0, 16
- subs r7, r1, 0x1
- cmp r6, 0x4
- bls _080806C8
- adds r0, r6, 0
- movs r1, 0x5
- bl __umodsi3
- adds r0, 0x5
-_080806C4:
- lsls r0, 16
- lsrs r6, r0, 16
-_080806C8:
- movs r4, 0
- cmp r4, r7
- bge _08080734
- ldr r0, =gUnknown_08339CA0
- mov r9, r0
- adds r0, r5, 0
- subs r0, 0xA3
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
-_080806DC:
- lsls r0, r6, 1
- adds r0, r6
- adds r0, r4, r0
- add r0, r9
- ldrb r5, [r0]
- movs r0, 0xD0
- lsls r0, 2
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _0808071A
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0x1
- bne _0808071A
- adds r0, r6, 0
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, =gUnknown_08339CBE
- adds r0, r6, r0
- ldrb r5, [r0]
- mov r0, r8
- cmp r0, 0x4
- bhi _0808071A
- subs r0, r5, 0x5
- lsls r0, 16
- lsrs r5, r0, 16
-_0808071A:
- adds r4, 0x1
- lsls r0, r4, 24
- lsrs r0, 24
- adds r1, r5, 0
- adds r1, 0x85
- lsls r1, 16
- lsrs r1, 16
- bl sub_8082FDC
- lsls r4, 16
- lsrs r4, 16
- cmp r4, r7
- blt _080806DC
-_08080734:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8080674
-
- thumb_func_start sub_808074C
-sub_808074C: @ 808074C
- push {r4-r7,lr}
- movs r4, 0
- ldr r7, =gUnknown_020322A4
- movs r6, 0xFF
- ldr r5, =gUnknown_083399D0
-_08080756:
- ldr r3, [r7]
- lsls r2, r4, 1
- adds r0, r3, 0
- adds r0, 0x96
- adds r0, r2
- strh r6, [r0]
- adds r1, r3, 0
- adds r1, 0x8E
- adds r1, r2
- adds r0, r3, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 2
- adds r0, r4, r0
- adds r0, r5
- ldrb r0, [r0]
- strh r0, [r1]
- adds r4, 0x1
- cmp r4, 0x3
- ble _08080756
- movs r3, 0
- ldr r7, =gUnknown_020322A4
-_08080784:
- movs r4, 0
- adds r6, r3, 0x1
- lsls r5, r3, 1
-_0808078A:
- ldr r2, [r7]
- lsls r0, r4, 1
- adds r1, r2, 0
- adds r1, 0x8E
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, r3
- bne _080807A2
- adds r0, r2, 0
- adds r0, 0x96
- adds r0, r5
- strh r4, [r0]
-_080807A2:
- adds r4, 0x1
- cmp r4, 0x3
- ble _0808078A
- adds r3, r6, 0
- cmp r3, 0x3
- ble _08080784
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808074C
-
- thumb_func_start sub_80807BC
-sub_80807BC: @ 80807BC
- 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 r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080807DE
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
-_080807DE:
- movs r6, 0
- ldr r7, =gUnknown_020322A4
- mov r8, r6
-_080807E4:
- ldr r2, [r7]
- lsls r5, r6, 1
- adds r0, r2, 0
- adds r0, 0x8E
- adds r3, r0, r5
- ldrh r0, [r3]
- cmp r0, 0xFF
- beq _080808B6
- adds r1, r2, 0
- adds r1, 0x50
- ldrh r3, [r3]
- adds r1, r3
- adds r0, r2, 0
- adds r0, 0x54
- adds r0, r6
- ldrb r0, [r0]
- movs r2, 0
- mov r9, r2
- strb r0, [r1]
- ldr r0, [r7]
- adds r1, r0, 0
- adds r1, 0x8E
- adds r1, r5
- adds r0, 0x50
- ldrh r1, [r1]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- mov r1, r8
- lsrs r4, r1, 24
- adds r1, r4, 0
- bl StartSpriteAnim
- add r1, sp, 0x8
- movs r0, 0xFF
- strb r0, [r1]
- ldr r0, [r7]
- adds r0, 0x8E
- adds r0, r5
- ldrh r0, [r0]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r0, =gLinkPlayers + 8
- adds r1, r0
- add r0, sp, 0x8
- bl StringCopy
- movs r0, 0x1
- add r1, sp, 0x8
- movs r2, 0x38
- bl GetStringCenterAlignXOffset
- adds r2, r0, 0
- ldr r0, [r7]
- adds r0, 0x8E
- adds r0, r5
- mov r5, r8
- ldrh r0, [r0]
- cmp r10, r0
- bne _08080890
- lsls r2, 24
- lsrs r2, 24
- mov r0, r9
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- adds r0, r4, 0
- add r1, sp, 0x8
- movs r3, 0x1
- bl sub_80840D4
- b _080808A6
- .pool
-_08080890:
- lsls r2, 24
- lsrs r2, 24
- mov r1, r9
- str r1, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- adds r0, r4, 0
- add r1, sp, 0x8
- movs r3, 0x1
- bl sub_80840D4
-_080808A6:
- lsrs r4, r5, 24
- adds r0, r4, 0
- bl PutWindowTilemap
- adds r0, r4, 0
- movs r1, 0x3
- bl CopyWindowToVram
-_080808B6:
- movs r2, 0x80
- lsls r2, 17
- add r8, r2
- adds r6, 0x1
- cmp r6, 0x3
- ble _080807E4
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80807BC
-
- thumb_func_start sub_80808D4
-sub_80808D4: @ 80808D4
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r2, r1, 0
- cmp r0, 0x15
- bls _080808E6
- b _08080DAE
-_080808E6:
- lsls r0, 2
- ldr r1, =_080808F8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080808F8:
- .4byte _08080950
- .4byte _080809E4
- .4byte _08080A04
- .4byte _08080A58
- .4byte _08080A84
- .4byte _08080DAE
- .4byte _08080DAE
- .4byte _08080DAE
- .4byte _08080ABC
- .4byte _08080DAE
- .4byte _08080DAE
- .4byte _08080AEC
- .4byte _08080B3C
- .4byte _08080BB0
- .4byte _08080BDC
- .4byte _08080C78
- .4byte _08080CA0
- .4byte _08080DAE
- .4byte _08080CAE
- .4byte _08080CAE
- .4byte _08080CAE
- .4byte _08080CC4
-_08080950:
- bl sub_800B4C0
- bl sub_8080588
- ldr r4, =gSpecialVar_ItemId
- ldrh r1, [r4]
- movs r0, 0
- bl sub_8082FDC
- ldr r5, =gUnknown_020322A4
- ldr r0, [r5]
- movs r6, 0xAC
- lsls r6, 1
- adds r0, r6
- ldrh r1, [r4]
- bl sub_807FE14
- ldrh r0, [r4]
- ldr r2, [r5]
- adds r1, r2, 0
- adds r1, 0x7C
- ldrb r1, [r1]
- adds r2, r6
- bl sub_8080674
- movs r4, 0
- movs r6, 0
- ldr r0, =gUnknown_020229C6
- mov r12, r0
- movs r7, 0x92
- lsls r7, 1
-_0808098E:
- ldr r0, [r5]
- lsls r1, r4, 1
- adds r0, 0x64
- adds r0, r1
- strh r6, [r0]
- adds r3, r4, 0x1
- adds r1, r4
- lsls r1, 1
- movs r2, 0x2
-_080809A0:
- ldr r0, [r5]
- adds r0, r7
- adds r0, r1
- strh r6, [r0]
- adds r1, 0x2
- subs r2, 0x1
- cmp r2, 0
- bge _080809A0
- adds r4, r3, 0
- cmp r4, 0x3
- ble _0808098E
- ldr r4, =gUnknown_020322A4
- ldr r3, [r4]
- adds r1, r3, 0
- adds r1, 0x70
- movs r2, 0
- movs r0, 0
- strh r0, [r1]
- strb r2, [r3, 0x1]
- ldr r1, =0x00004422
- adds r0, r1, 0
- mov r2, r12
- strh r0, [r2]
- ldr r1, [r4]
- b _08080CB2
- .pool
-_080809E4:
- bl sub_807F7D8
- lsls r0, 24
- cmp r0, 0
- bne _080809F0
- b _08080DAE
-_080809F0:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bl sub_8082D28
- b _08080DAE
- .pool
-_08080A04:
- movs r4, 0
- ldr r5, =sBlenderSyncArrowsPos
- ldr r6, =gUnknown_020322A4
-_08080A0A:
- ldrb r1, [r5]
- ldrb r2, [r5, 0x1]
- ldr r0, =sBlenderSyncArrow_SpriteTemplate
- movs r3, 0x1
- bl CreateSprite
- ldr r1, [r6]
- adds r1, 0x54
- adds r1, r4
- strb r0, [r1]
- ldr r0, [r6]
- adds r0, 0x54
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- adds r1, r4, 0
- adds r1, 0x8
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAnim
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _08080A0A
- b _08080CAE
- .pool
-_08080A58:
- movs r0, 0x1
- negs r0, r0
- movs r4, 0
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, =gUnknown_020322A4
- ldr r1, [r2]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, [r2]
- movs r3, 0x84
- lsls r3, 1
- adds r0, r3
- str r4, [r0]
- b _08080DAE
- .pool
-_08080A84:
- ldr r4, =gUnknown_020322A4
- ldr r1, [r4]
- movs r5, 0x84
- lsls r5, 1
- adds r1, r5
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x2
- bne _08080A9C
- bl sub_807F9D0
-_08080A9C:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08080AAA
- b _08080DAE
-_08080AAA:
- ldr r1, [r4]
- movs r0, 0x8
- strb r0, [r1]
- b _08080DAE
- .pool
-_08080ABC:
- ldr r2, =gUnknown_020322A4
- ldr r1, [r2]
- movs r3, 0
- movs r0, 0xB
- strb r0, [r1]
- ldr r0, [r2]
- movs r1, 0x8A
- lsls r1, 1
- adds r0, r1
- strb r3, [r0]
- b _08080DAE
- .pool
-_08080AD8:
- lsls r1, 1
- adds r0, r3, 0
- adds r0, 0x74
- adds r0, r1
- ldrh r0, [r0]
- lsls r1, r4, 24
- lsrs r1, 24
- bl sub_807FD90
- b _08080B16
-_08080AEC:
- movs r4, 0
- ldr r2, =gUnknown_083399D0
- ldr r0, =gUnknown_020322A4
- ldr r3, [r0]
- adds r0, r3, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 2
- movs r5, 0x8A
- lsls r5, 1
- adds r1, r3, r5
- ldrb r1, [r1]
- adds r0, r2
-_08080B08:
- ldrb r2, [r0]
- cmp r1, r2
- beq _08080AD8
- adds r0, 0x1
- adds r4, 0x1
- cmp r4, 0x3
- ble _08080B08
-_08080B16:
- ldr r3, =gUnknown_020322A4
- ldr r1, [r3]
- movs r5, 0x84
- lsls r5, 1
- adds r2, r1, r5
- movs r0, 0
- str r0, [r2]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r1, [r3]
- movs r0, 0x8A
- lsls r0, 1
- adds r1, r0
- b _08080CB2
- .pool
-_08080B3C:
- ldr r3, [r2]
- movs r2, 0x84
- lsls r2, 1
- adds r1, r3, r2
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x3C
- bgt _08080B50
- b _08080DAE
-_08080B50:
- movs r5, 0x8A
- lsls r5, 1
- adds r0, r3, r5
- adds r4, r3, 0
- adds r4, 0x7C
- ldrb r0, [r0]
- ldrb r1, [r4]
- cmp r0, r1
- bcc _08080B94
- ldr r2, =gUnknown_083399DC
- ldr r1, =gUnknown_083399E4
- ldrb r0, [r4]
- subs r0, 0x2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldr r2, =0xffffa800
- adds r1, r2, 0
- ldrh r0, [r0]
- adds r1, r0
- adds r0, r3, 0
- adds r0, 0x4A
- strh r1, [r0]
- ldrb r0, [r3]
- adds r0, 0x1
- b _08080B98
- .pool
-_08080B94:
- ldrb r0, [r3]
- subs r0, 0x1
-_08080B98:
- strb r0, [r3]
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- movs r3, 0x84
- lsls r3, 1
- adds r0, r3
- movs r1, 0
- str r1, [r0]
- b _08080DAE
- .pool
-_08080BB0:
- ldr r4, =gUnknown_020322A4
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bl sub_808074C
- movs r0, 0x2B
- bl PlaySE
- ldr r0, [r4]
- movs r5, 0xA0
- lsls r5, 1
- adds r0, r5
- bl sub_8082CB4
- movs r0, 0x2
- bl ShowBg
- b _08080DAE
- .pool
-_08080BDC:
- movs r1, 0x80
- lsls r1, 3
- movs r0, 0
- bl SetGpuRegBits
- ldr r4, =gUnknown_020322A4
- ldr r2, [r4]
- adds r1, r2, 0
- adds r1, 0x4A
- movs r3, 0x80
- lsls r3, 2
- adds r0, r3, 0
- ldrh r5, [r1]
- adds r0, r5
- strh r0, [r1]
- movs r0, 0x8D
- lsls r0, 1
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x4
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xFF
- bls _08080C5C
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- ldr r3, [r4]
- movs r2, 0x8D
- lsls r2, 1
- adds r1, r3, r2
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r1]
- ldr r2, =gUnknown_083399DC
- ldr r1, =gUnknown_083399E4
- adds r0, r3, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- subs r0, 0x2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- adds r0, r3, 0
- adds r0, 0x4A
- strh r1, [r0]
- movs r0, 0xC
- movs r1, 0x2
- bl SetGpuRegBits
- ldr r0, [r4]
- movs r3, 0x84
- lsls r3, 1
- adds r0, r3
- movs r1, 0
- str r1, [r0]
- movs r0, 0x34
- bl PlaySE
- bl sub_80807BC
-_08080C5C:
- ldr r0, [r4]
- movs r5, 0xA0
- lsls r5, 1
- adds r0, r5
- bl sub_8082CB4
- b _08080DAE
- .pool
-_08080C78:
- bl sub_8083380
- lsls r0, 24
- cmp r0, 0
- beq _08080C8C
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08080C8C:
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- movs r1, 0xA0
- lsls r1, 1
- adds r0, r1
- bl sub_8082CB4
- b _08080DAE
- .pool
-_08080CA0:
- ldr r0, =gUnknown_08339C2C
- movs r2, 0x10
- negs r2, r2
- movs r1, 0x78
- movs r3, 0x3
- bl CreateSprite
-_08080CAE:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
-_08080CB2:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08080DAE
- .pool
-_08080CC4:
- bl sub_8080DF8
- ldr r5, =gUnknown_020322A4
- ldr r4, [r5]
- adds r1, r4, 0
- adds r1, 0x4C
- movs r3, 0
- movs r2, 0
- movs r0, 0x80
- strh r0, [r1]
- movs r1, 0x82
- lsls r1, 1
- adds r0, r4, r1
- str r2, [r0]
- ldr r2, =0x00000123
- adds r0, r4, r2
- strb r3, [r0]
- ldr r0, [r5]
- adds r0, 0x72
- strb r3, [r0]
- ldr r0, =sub_8081898
- bl SetMainCallback2
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0x1
- bne _08080D44
- movs r0, 0xD0
- lsls r0, 2
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _08080D30
- ldr r0, =sub_8081224
- movs r1, 0xA
- bl CreateTask
- ldr r1, [r5]
- movs r3, 0x90
- lsls r3, 1
- adds r1, r3
- b _08080D42
- .pool
-_08080D30:
- ldr r0, =gUnknown_083399EC
- ldr r0, [r0]
- movs r1, 0xA
- bl CreateTask
- ldr r1, [r5]
- movs r5, 0x90
- lsls r5, 1
- adds r1, r5
-_08080D42:
- strb r0, [r1]
-_08080D44:
- ldr r1, =gSpecialVar_0x8004
- ldrh r0, [r1]
- cmp r0, 0x1
- bls _08080D80
- movs r4, 0
- ldrh r1, [r1]
- cmp r4, r1
- bge _08080D80
- movs r5, 0xA0
- lsls r5, 20
- ldr r6, =gUnknown_083399EC
-_08080D5A:
- ldm r6!, {r0}
- lsrs r1, r5, 24
- bl CreateTask
- ldr r1, =gUnknown_020322A4
- ldr r1, [r1]
- movs r2, 0x90
- lsls r2, 1
- adds r1, r2
- adds r1, r4
- strb r0, [r1]
- movs r3, 0x80
- lsls r3, 17
- adds r5, r3
- adds r4, 0x1
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r4, r0
- blt _08080D5A
-_08080D80:
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =0x00000193
- cmp r0, r4
- beq _08080D9E
- bl GetCurrentMapMusic
- ldr r1, =gUnknown_020322A4
- ldr r1, [r1]
- movs r5, 0xAA
- lsls r5, 1
- adds r1, r5
- strh r0, [r1]
-_08080D9E:
- adds r0, r4, 0
- bl PlayBGM
- movs r0, 0x35
- bl PlaySE
- bl sub_807F738
-_08080DAE:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r2, 0x8E
- lsls r2, 1
- adds r0, r1, r2
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r5, 0x8F
- lsls r5, 1
- adds r1, r5
- movs r2, 0
- ldrsh r1, [r1, r2]
- bl nullsub_31
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80808D4
-
- thumb_func_start sub_8080DF8
-sub_8080DF8: @ 8080DF8
- push {lr}
- ldr r3, =gUnknown_03003110
- movs r0, 0
- ldr r1, =gUnknown_03003090
- movs r2, 0x3
-_08080E02:
- strh r0, [r3]
- strh r0, [r3, 0x4]
- strh r0, [r1]
- strh r0, [r1, 0x4]
- adds r1, 0x10
- subs r2, 0x1
- cmp r2, 0
- bge _08080E02
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8080DF8
-
- thumb_func_start sub_8080E20
-sub_8080E20: @ 8080E20
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r2, r0, r1
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- lsls r0, 16
- asrs r0, 16
- movs r4, 0xA
- ldrsh r1, [r2, r4]
- cmp r0, r1
- ble _08080E58
- ldr r0, =gUnknown_03003090
- movs r4, 0xC
- ldrsh r1, [r2, r4]
- lsls r1, 4
- adds r0, 0x4
- adds r1, r0
- ldr r0, =0x00002345
- strh r0, [r1]
- adds r0, r3, 0
- bl DestroyTask
-_08080E58:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8080E20
-
- thumb_func_start sub_8080E6C
-sub_8080E6C: @ 8080E6C
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =sub_8080E20
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xA]
- strh r5, [r1, 0xC]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8080E6C
-
- thumb_func_start sub_8080EA4
-sub_8080EA4: @ 8080EA4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- adds r0, 0x4A
- ldrh r0, [r0]
- movs r1, 0x1
- bl task_tutorial_oak_boy_girl
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _08080EC2
- b _08080FB8
-_08080EC2:
- ldr r2, =gTasks
- lsls r1, r5, 2
- adds r0, r1, r5
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r6, r1, 0
- cmp r0, 0
- beq _08080ED8
- b _08080FC6
-_08080ED8:
- ldr r0, [r4]
- ldr r1, =0x00000123
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08080F9A
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =0x0000028f
- bl __udivsi3
- lsls r0, 24
- lsrs r1, r0, 24
- adds r3, r1, 0
- ldr r0, [r4]
- adds r0, 0x4C
- movs r4, 0
- ldrsh r2, [r0, r4]
- ldr r0, =0x000001f3
- cmp r2, r0
- bgt _08080F40
- cmp r1, 0x4B
- bls _08080F2C
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00004523
- b _08080F30
- .pool
-_08080F2C:
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00005432
-_08080F30:
- strh r0, [r1, 0x14]
- ldr r0, =0x00005432
- b _08080F9E
- .pool
-_08080F40:
- ldr r0, =0x000005db
- cmp r2, r0
- bgt _08080F6E
- cmp r1, 0x50
- bhi _08080F9A
- adds r0, r1, 0
- subs r0, 0x15
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3B
- bhi _08080F68
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00005432
- b _08080F9E
- .pool
-_08080F68:
- cmp r1, 0x9
- bhi _08080FA0
- b _08080F90
-_08080F6E:
- cmp r1, 0x5A
- bhi _08080F9A
- adds r0, r1, 0
- subs r0, 0x47
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bhi _08080F8C
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00005432
- b _08080F9E
- .pool
-_08080F8C:
- cmp r3, 0x1D
- bhi _08080FA0
-_08080F90:
- movs r0, 0x1
- movs r1, 0x5
- bl sub_8080E6C
- b _08080FA0
-_08080F9A:
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00004523
-_08080F9E:
- strh r0, [r1, 0x14]
-_08080FA0:
- ldr r0, =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- b _08080FC4
- .pool
-_08080FB8:
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- movs r0, 0
-_08080FC4:
- strh r0, [r1, 0x8]
-_08080FC6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8080EA4
-
- thumb_func_start sub_8080FD0
-sub_8080FD0: @ 8080FD0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r6, =gUnknown_020322A4
- ldr r3, [r6]
- adds r0, r3, 0
- adds r0, 0x4A
- ldrh r0, [r0]
- movs r1, 0xC0
- lsls r1, 5
- adds r0, r1
- ldr r1, =0x0000ffff
- ands r0, r1
- adds r1, r3, 0
- adds r1, 0x9A
- ldrb r1, [r1]
- lsrs r2, r0, 8
- ldr r0, =gUnknown_083399E7
- adds r1, r0
- ldrb r1, [r1]
- adds r0, r1, 0
- adds r0, 0x14
- cmp r2, r0
- bls _080810E0
- adds r0, 0x14
- cmp r2, r0
- bcs _080810E0
- ldr r2, =gTasks
- lsls r1, r4, 2
- adds r0, r1, r4
- lsls r0, 3
- adds r2, r0, r2
- movs r5, 0x8
- ldrsh r0, [r2, r5]
- adds r5, r1, 0
- cmp r0, 0
- bne _080810EE
- ldr r1, =0x00000123
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080810CC
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =0x0000028f
- bl __udivsi3
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- ldr r0, [r6]
- adds r0, 0x4C
- movs r6, 0
- ldrsh r1, [r0, r6]
- ldr r0, =0x000001f3
- cmp r1, r0
- bgt _08081088
- cmp r2, 0x42
- bls _08081078
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00004523
- strh r0, [r1, 0x24]
- b _080810B0
- .pool
-_08081078:
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00005432
- strh r0, [r1, 0x24]
- b _080810B0
- .pool
-_08081088:
- cmp r2, 0x41
- bls _08081092
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00004523
- strh r0, [r1, 0x24]
-_08081092:
- adds r0, r2, 0
- subs r0, 0x29
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x18
- bhi _080810A4
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00005432
- strh r0, [r1, 0x24]
-_080810A4:
- cmp r3, 0x9
- bhi _080810B0
- movs r0, 0x2
- movs r1, 0x5
- bl sub_8080E6C
-_080810B0:
- ldr r0, =gTasks
- adds r1, r5, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- b _080810EC
- .pool
-_080810CC:
- ldr r0, =gUnknown_03003090
- ldr r1, =0x00004523
- strh r1, [r0, 0x24]
- movs r0, 0x1
- strh r0, [r2, 0x8]
- b _080810EE
- .pool
-_080810E0:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0
-_080810EC:
- strh r0, [r1, 0x8]
-_080810EE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8080FD0
-
- thumb_func_start sub_80810F8
-sub_80810F8: @ 80810F8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, =gUnknown_020322A4
- ldr r3, [r5]
- adds r0, r3, 0
- adds r0, 0x4A
- ldrh r0, [r0]
- movs r1, 0xC0
- lsls r1, 5
- adds r0, r1
- ldr r1, =0x0000ffff
- ands r0, r1
- adds r1, r3, 0
- adds r1, 0x9C
- ldrb r1, [r1]
- lsrs r2, r0, 8
- ldr r0, =gUnknown_083399E7
- adds r1, r0
- ldrb r1, [r1]
- adds r0, r1, 0
- adds r0, 0x14
- cmp r2, r0
- bls _0808120C
- adds r0, 0x14
- cmp r2, r0
- bcs _0808120C
- ldr r2, =gTasks
- lsls r1, r4, 2
- adds r0, r1, r4
- lsls r0, 3
- adds r2, r0, r2
- movs r6, 0x8
- ldrsh r0, [r2, r6]
- adds r6, r1, 0
- cmp r0, 0
- bne _0808121A
- ldr r1, =0x00000123
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080811F8
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =0x0000028f
- bl __udivsi3
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, [r5]
- adds r0, 0x4C
- movs r3, 0
- ldrsh r1, [r0, r3]
- ldr r0, =0x000001f3
- cmp r1, r0
- bgt _080811AC
- cmp r2, 0x58
- bls _0808119C
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00004523
- strh r0, [r1, 0x34]
- b _080811DE
- .pool
-_0808119C:
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00005432
- strh r0, [r1, 0x34]
- b _080811DE
- .pool
-_080811AC:
- cmp r2, 0x3C
- bls _080811C0
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00004523
- b _080811D0
- .pool
-_080811C0:
- adds r0, r2, 0
- subs r0, 0x38
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _080811D2
- ldr r1, =gUnknown_03003090
- ldr r0, =0x00005432
-_080811D0:
- strh r0, [r1, 0x34]
-_080811D2:
- cmp r2, 0x4
- bhi _080811DE
- movs r0, 0x3
- movs r1, 0x5
- bl sub_8080E6C
-_080811DE:
- ldr r0, =gTasks
- adds r1, r6, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- b _08081218
- .pool
-_080811F8:
- ldr r0, =gUnknown_03003090
- ldr r1, =0x00004523
- strh r1, [r0, 0x34]
- movs r0, 0x1
- strh r0, [r2, 0x8]
- b _0808121A
- .pool
-_0808120C:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0
-_08081218:
- strh r0, [r1, 0x8]
-_0808121A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80810F8
-
- thumb_func_start sub_8081224
-sub_8081224: @ 8081224
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r0, 0x4A
- ldrh r0, [r0]
- movs r1, 0x1
- bl task_tutorial_oak_boy_girl
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08081270
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r2, r1, r0
- movs r1, 0x8
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _0808127E
- ldr r0, =gUnknown_03003090
- ldr r1, =0x00004523
- strh r1, [r0, 0x14]
- movs r0, 0x1
- strh r0, [r2, 0x8]
- b _0808127E
- .pool
-_08081270:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0
- strh r0, [r1, 0x8]
-_0808127E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8081224
-
- thumb_func_start sub_8081288
-sub_8081288: @ 8081288
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 16
- lsrs r7, r0, 16
- mov r8, r7
- lsls r1, 24
- ldr r0, =gUnknown_08339B40
- ldr r4, =sBlenderSyncArrowsPos
- lsrs r1, 23
- adds r2, r1, r4
- ldrb r6, [r2]
- ldr r5, =gUnknown_083399C0
- adds r2, r1, r5
- movs r3, 0
- ldrsb r3, [r2, r3]
- lsls r2, r3, 2
- adds r2, r3
- lsls r2, 1
- subs r6, r2
- adds r4, 0x1
- adds r4, r1, r4
- ldrb r2, [r4]
- adds r5, 0x1
- adds r1, r5
- movs r3, 0
- ldrsb r3, [r1, r3]
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 1
- subs r2, r1
- adds r1, r6, 0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- ldr r0, =0x00004523
- cmp r7, r0
- bne _08081314
- lsls r4, r1, 4
- adds r4, r1
- lsls r4, 2
- ldr r5, =gSprites
- adds r0, r4, r5
- movs r1, 0x2
- bl StartSpriteAnim
- adds r5, 0x1C
- adds r4, r5
- ldr r0, =sub_8082F9C
- str r0, [r4]
- movs r0, 0x28
- bl PlaySE
- b _08081358
- .pool
-_08081314:
- ldr r0, =0x00005432
- cmp r7, r0
- bne _0808133C
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- movs r0, 0x1F
- bl PlaySE
- b _08081358
- .pool
-_0808133C:
- ldr r0, =0x00002345
- cmp r8, r0
- bne _08081358
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAnim
- movs r0, 0x20
- bl PlaySE
-_08081358:
- bl sub_8082E84
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8081288
-
- thumb_func_start sub_8081370
-sub_8081370: @ 8081370
- push {r4-r7,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- adds r5, r4, 0
- bl sub_807F738
- ldr r0, =0x00004523
- cmp r4, r0
- beq _080813A4
- cmp r4, r0
- bgt _08081398
- ldr r0, =0x00002345
- cmp r4, r0
- beq _08081474
- b _080814A0
- .pool
-_08081398:
- ldr r0, =0x00005432
- cmp r5, r0
- beq _0808143C
- b _080814A0
- .pool
-_080813A4:
- ldr r7, =gUnknown_020322A4
- ldr r4, [r7]
- adds r5, r4, 0
- adds r5, 0x4C
- ldrh r6, [r5]
- movs r0, 0
- ldrsh r1, [r5, r0]
- ldr r0, =0x000005db
- cmp r1, r0
- bgt _080813E0
- ldr r1, =gUnknown_08339CC3
- adds r0, r4, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0xC0
- lsls r0, 1
- bl __divsi3
- adds r0, r6, r0
- strh r0, [r5]
- b _080814A0
- .pool
-_080813E0:
- ldr r1, =gUnknown_08339CC3
- adds r0, r4, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x80
- bl __divsi3
- adds r0, r6, r0
- strh r0, [r5]
- movs r1, 0x8E
- lsls r1, 1
- adds r4, r1
- movs r1, 0
- ldrsh r0, [r5, r1]
- movs r1, 0x64
- bl __divsi3
- adds r1, r0, 0
- subs r1, 0xA
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_80832BC
- ldr r0, [r7]
- movs r1, 0x8F
- lsls r1, 1
- adds r4, r0, r1
- adds r0, 0x4C
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r1, 0x64
- bl __divsi3
- adds r1, r0, 0
- subs r1, 0xA
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_80832BC
- b _080814A0
- .pool
-_0808143C:
- ldr r0, =gUnknown_020322A4
- ldr r2, [r0]
- adds r4, r2, 0
- adds r4, 0x4C
- ldrh r5, [r4]
- movs r0, 0
- ldrsh r1, [r4, r0]
- ldr r0, =0x000005db
- cmp r1, r0
- bgt _080814A0
- ldr r1, =gUnknown_08339CC3
- adds r0, r2, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- bl __divsi3
- adds r0, r5, r0
- b _0808149E
- .pool
-_08081474:
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r4, r0, 0
- adds r4, 0x4C
- ldr r1, =gUnknown_08339CC3
- adds r0, 0x7C
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- bl __divsi3
- ldrh r1, [r4]
- subs r1, r0
- strh r1, [r4]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x7F
- bgt _080814A0
- movs r0, 0x80
-_0808149E:
- strh r0, [r4]
-_080814A0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8081370
-
- thumb_func_start sub_80814B0
-sub_80814B0: @ 80814B0
- push {lr}
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080814E4
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _080814E4
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r3
- cmp r0, r2
- bne _080814EC
- movs r0, 0x1
- b _080814EE
- .pool
-_080814E4:
- cmp r3, r1
- bne _080814EC
- movs r0, 0x1
- b _080814EE
-_080814EC:
- movs r0, 0
-_080814EE:
- pop {r1}
- bx r1
- thumb_func_end sub_80814B0
-
- thumb_func_start sub_80814F4
-sub_80814F4: @ 80814F4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- beq _0808153C
- ldr r3, =gUnknown_03003110
- ldrh r0, [r3, 0x4]
- ldr r2, =gUnknown_03003090
- cmp r0, 0
- beq _0808151C
- movs r1, 0
- strh r0, [r2, 0x4]
- ldr r0, =0x00004444
- strh r0, [r2]
- strh r1, [r3, 0x4]
-_0808151C:
- ldr r0, =gUnknown_03003090
- ldr r3, =0x00004444
- adds r1, r2, 0
- adds r1, 0x10
- adds r2, r0, 0
- adds r2, 0x14
- movs r7, 0x2
-_0808152A:
- ldrh r0, [r2]
- cmp r0, 0
- beq _08081532
- strh r3, [r1]
-_08081532:
- adds r1, 0x10
- adds r2, 0x10
- subs r7, 0x1
- cmp r7, 0
- bge _0808152A
-_0808153C:
- movs r7, 0
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r7, r0
- blt _0808154C
- b _080816F6
-_0808154C:
- ldr r0, =gUnknown_03003090
- adds r2, r0, 0
- adds r2, 0x20
- str r2, [sp]
- movs r1, 0
- mov r9, r1
- movs r2, 0
- str r2, [sp, 0x4]
- mov r8, r0
- ldr r0, =0x00005432
- mov r10, r0
-_08081562:
- mov r1, r8
- ldrh r0, [r1]
- ldr r1, =0x00004444
- movs r2, 0x88
- lsls r2, 7
- bl sub_80814B0
- cmp r0, 0
- bne _08081576
- b _080816D2
-_08081576:
- ldr r6, =gUnknown_020322A4
- ldr r0, [r6]
- adds r0, 0x96
- ldr r2, [sp, 0x4]
- adds r0, r2
- ldrh r5, [r0]
- mov r0, r8
- ldrh r4, [r0, 0x4]
- ldr r1, =0x00004523
- cmp r4, r1
- bne _080815F4
- adds r0, r1, 0
- bl sub_8081370
- ldr r0, [r6]
- movs r2, 0x8B
- lsls r2, 1
- adds r4, r0, r2
- adds r0, 0x4C
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r1, 0x37
- bl __divsi3
- ldrh r1, [r4]
- adds r1, r0
- strh r1, [r4]
- lsls r1, 16
- ldr r0, =0x03e70000
- cmp r1, r0
- bls _080815BA
- movs r0, 0xFA
- lsls r0, 2
- strh r0, [r4]
-_080815BA:
- lsls r1, r5, 24
- lsrs r1, 24
- ldr r0, =0x00004523
- bl sub_8081288
- ldr r1, [r6]
- movs r2, 0x92
- lsls r2, 1
- adds r1, r2
- add r1, r9
- ldrh r0, [r1]
- adds r0, 0x1
- b _0808165E
- .pool
-_080815F4:
- cmp r4, r10
- bne _08081632
- mov r0, r10
- bl sub_8081370
- ldr r0, [r6]
- movs r1, 0x8B
- lsls r1, 1
- adds r4, r0, r1
- adds r0, 0x4C
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r1, 0x46
- bl __divsi3
- ldrh r1, [r4]
- adds r1, r0
- strh r1, [r4]
- lsls r1, r5, 24
- lsrs r1, 24
- mov r0, r10
- bl sub_8081288
- ldr r1, [r6]
- movs r0, 0x93
- lsls r0, 1
- adds r1, r0
- add r1, r9
- ldrh r0, [r1]
- adds r0, 0x1
- b _0808165E
-_08081632:
- ldr r0, =0x00002345
- cmp r4, r0
- bne _0808166A
- lsls r1, r5, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8081288
- adds r0, r4, 0
- bl sub_8081370
- ldr r0, [r6]
- movs r1, 0x94
- lsls r1, 1
- adds r0, r1
- mov r2, r9
- adds r1, r0, r2
- ldrh r2, [r1]
- ldr r0, =0x000003e6
- cmp r2, r0
- bhi _08081660
- adds r0, r2, 0x1
-_0808165E:
- strh r0, [r1]
-_08081660:
- mov r0, r8
- ldrh r1, [r0, 0x4]
- ldr r0, =0x00002345
- cmp r1, r0
- beq _08081678
-_0808166A:
- ldr r1, [sp]
- ldrh r0, [r1]
- ldr r2, =0x00004523
- cmp r0, r2
- beq _08081678
- cmp r0, r10
- bne _080816D2
-_08081678:
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r2, r0, 0
- adds r2, 0x4C
- movs r0, 0
- ldrsh r1, [r2, r0]
- ldr r0, =0x000005dc
- cmp r1, r0
- ble _080816C8
- adds r0, r1, 0
- ldr r2, =0xfffffd12
- adds r0, r2
- movs r1, 0x14
- bl __divsi3
- adds r1, r0, 0
- movs r0, 0x80
- lsls r0, 1
- adds r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r0, =gMPlay_BGM
- bl m4aMPlayTempoControl
- b _080816D2
- .pool
-_080816C8:
- ldr r0, =gMPlay_BGM
- movs r1, 0x80
- lsls r1, 1
- bl m4aMPlayTempoControl
-_080816D2:
- ldr r1, [sp]
- adds r1, 0x2
- str r1, [sp]
- movs r2, 0x6
- add r9, r2
- ldr r0, [sp, 0x4]
- adds r0, 0x2
- str r0, [sp, 0x4]
- movs r1, 0x10
- add r8, r1
- adds r7, 0x1
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r7, r0
- bge _080816F6
- b _08081562
-_080816F6:
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- beq _08081722
- movs r7, 0
- ldr r3, =gUnknown_020322A4
- ldr r0, [r3]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r7, r0
- bge _08081722
- movs r2, 0
- ldr r1, =gUnknown_03003090
-_08081710:
- strh r2, [r1]
- strh r2, [r1, 0x4]
- adds r1, 0x10
- adds r7, 0x1
- ldr r0, [r3]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r7, r0
- blt _08081710
-_08081722:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80814F4
-
- thumb_func_start sub_8081744
-sub_8081744: @ 8081744
- push {r4-r6,lr}
- movs r4, 0
- movs r6, 0
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808175A
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r6, r0, 24
-_0808175A:
- ldr r3, =gUnknown_020322A4
- ldr r1, [r3]
- lsls r2, r6, 1
- adds r0, r1, 0
- adds r0, 0x96
- adds r0, r2
- ldrb r5, [r0]
- adds r1, 0x63
- ldrb r0, [r1]
- cmp r0, 0
- bne _0808182C
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x2
- bne _080817A8
- ldr r2, =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080817B6
- ldrh r2, [r2, 0x28]
- ldr r1, =0x00000201
- adds r0, r1, 0
- ands r0, r2
- cmp r0, r1
- beq _080817B6
- b _080817BA
- .pool
-_080817A8:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080817B6
- movs r4, 0x1
-_080817B6:
- cmp r4, 0
- beq _0808182C
-_080817BA:
- ldr r4, =gUnknown_020322A4
- ldr r1, [r4]
- lsls r2, r5, 1
- adds r0, r1, 0
- adds r0, 0x8E
- adds r0, r2
- adds r1, 0x50
- ldrh r0, [r0]
- adds r1, r0
- ldrb r1, [r1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- adds r1, r5, 0x4
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAnim
- ldr r0, [r4]
- adds r0, 0x4A
- ldrh r0, [r0]
- adds r1, r6, 0
- bl task_tutorial_oak_boy_girl
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08081810
- ldr r1, =gUnknown_03003110
- ldr r0, =0x00004523
- b _08081828
- .pool
-_08081810:
- cmp r0, 0x1
- bne _08081824
- ldr r1, =gUnknown_03003110
- ldr r0, =0x00005432
- b _08081828
- .pool
-_08081824:
- ldr r1, =gUnknown_03003110
- ldr r0, =0x00002345
-_08081828:
- strh r0, [r1, 0x4]
- adds r3, r4, 0
-_0808182C:
- ldr r1, [r3]
- adds r1, 0x72
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bls _0808185A
- ldr r0, [r3]
- adds r1, r0, 0
- adds r1, 0x4C
- ldrh r2, [r1]
- movs r4, 0
- ldrsh r0, [r1, r4]
- cmp r0, 0x80
- ble _08081852
- subs r0, r2, 0x1
- strh r0, [r1]
-_08081852:
- ldr r0, [r3]
- adds r0, 0x72
- movs r1, 0
- strb r1, [r0]
-_0808185A:
- ldr r0, =gUnknown_020322D5
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808187E
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _0808187E
- ldr r0, [r3]
- ldr r1, =0x00000123
- adds r2, r0, r1
- ldrb r0, [r2]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r2]
-_0808187E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8081744
-
- thumb_func_start sub_8081898
-sub_8081898: @ 8081898
- push {r4-r6,lr}
- bl sub_8082D28
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- movs r1, 0x82
- lsls r1, 1
- adds r2, r0, r1
- ldr r1, [r2]
- ldr r0, =0x00057e03
- cmp r1, r0
- bhi _080818B4
- adds r0, r1, 0x1
- str r0, [r2]
-_080818B4:
- bl sub_8081744
- ldr r1, [r4]
- adds r0, r1, 0
- adds r0, 0x4C
- ldrh r0, [r0]
- movs r5, 0x8B
- lsls r5, 1
- adds r1, r5
- ldrh r1, [r1]
- bl sub_800A994
- bl sub_80814F4
- ldr r0, [r4]
- adds r0, r5
- ldrh r0, [r0]
- movs r6, 0xFA
- lsls r6, 2
- adds r1, r6, 0
- bl sub_8083140
- ldr r0, [r4]
- adds r0, 0x4C
- ldrh r0, [r0]
- bl sub_8083230
- bl sub_808330C
- bl sub_8082AD4
- ldr r2, [r4]
- adds r3, r2, 0
- adds r3, 0x63
- ldrb r0, [r3]
- cmp r0, 0
- bne _0808191A
- movs r1, 0x8C
- lsls r1, 1
- adds r0, r2, r1
- ldrh r1, [r0]
- ldr r0, =0x000003e7
- cmp r1, r0
- bls _0808191A
- adds r0, r2, r5
- strh r6, [r0]
- movs r0, 0x1
- strb r0, [r3]
- ldr r0, =sub_8081FC8
- bl SetMainCallback2
-_0808191A:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r2, 0x8E
- lsls r2, 1
- adds r0, r1, r2
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0x8F
- lsls r2, 1
- adds r1, r2
- movs r2, 0
- ldrsh r1, [r1, r2]
- bl nullsub_31
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8081898
-
- thumb_func_start nullsub_31
-nullsub_31: @ 8081960
- bx lr
- thumb_func_end nullsub_31
-
- thumb_func_start help_system_is_not_first_time
-help_system_is_not_first_time: @ 8081964
- push {r4,r5,lr}
- lsls r1, 24
- lsls r2, 24
- lsrs r1, 20
- adds r4, r1, r0
- lsrs r2, 20
- adds r5, r2, r0
- ldrh r0, [r4]
- ldrh r1, [r5]
- cmp r0, r1
- bne _080819A2
- adds r0, r4, 0x2
- adds r1, r5, 0x2
- bl StringCompare
- cmp r0, 0
- bne _080819B0
- ldr r0, [r4, 0x8]
- ldr r2, =0xffffff00
- ands r0, r2
- ldr r1, [r5, 0x8]
- ands r1, r2
- cmp r0, r1
- bne _080819B0
- ldr r0, [r4, 0xC]
- ldr r2, =0x00ffffff
- ands r0, r2
- ldr r1, [r5, 0xC]
- ands r1, r2
- cmp r0, r1
- bne _080819B0
-_080819A2:
- movs r0, 0x1
- b _080819B2
- .pool
-_080819B0:
- movs r0, 0
-_080819B2:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end help_system_is_not_first_time
-
- thumb_func_start sub_80819B8
-sub_80819B8: @ 80819B8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- mov r10, r0
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x10]
- lsls r3, 24
- lsrs r3, 24
- mov r2, sp
- movs r4, 0x5
-_080819D4:
- ldrh r0, [r1]
- strh r0, [r2]
- adds r1, 0x2
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080819D4
- movs r6, 0
- mov r1, sp
- movs r4, 0x4
-_080819E8:
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080819F2
- adds r6, 0x1
-_080819F2:
- adds r1, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080819E8
- cmp r6, 0x5
- beq _08081A46
- cmp r3, 0x3
- bhi _08081A46
- movs r4, 0
- ldr r3, [sp, 0x10]
- cmp r4, r3
- bge _08081A5E
- mov r3, r10
-_08081A0C:
- movs r6, 0
- ldr r7, [sp, 0x10]
- cmp r6, r7
- bge _08081A54
- mov r9, r3
- mov r5, r10
- lsls r0, r4, 24
- mov r8, r0
-_08081A1C:
- mov r1, r9
- ldrh r0, [r1]
- ldrh r2, [r5]
- cmp r0, r2
- bne _08081A4A
- cmp r4, r6
- beq _08081A4A
- cmp r0, 0xAF
- bne _08081A46
- lsls r2, r6, 24
- lsrs r2, 24
- mov r0, r10
- mov r7, r8
- lsrs r1, r7, 24
- str r3, [sp, 0xC]
- bl help_system_is_not_first_time
- lsls r0, 24
- ldr r3, [sp, 0xC]
- cmp r0, 0
- beq _08081A4A
-_08081A46:
- movs r0, 0xC
- b _08081B9E
-_08081A4A:
- adds r5, 0x10
- adds r6, 0x1
- ldr r0, [sp, 0x10]
- cmp r6, r0
- blt _08081A1C
-_08081A54:
- adds r3, 0x10
- adds r4, 0x1
- ldr r1, [sp, 0x10]
- cmp r4, r1
- blt _08081A0C
-_08081A5E:
- movs r2, 0
- mov r1, sp
- movs r4, 0x4
-_08081A64:
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0
- ble _08081A72
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_08081A72:
- adds r1, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _08081A64
- cmp r2, 0x3
- bls _08081A82
- movs r0, 0xD
- b _08081B9E
-_08081A82:
- cmp r2, 0x3
- bne _08081A8A
- movs r0, 0xB
- b _08081B9E
-_08081A8A:
- movs r4, 0
- mov r1, sp
-_08081A8E:
- movs r7, 0
- ldrsh r0, [r1, r7]
- cmp r0, 0x32
- ble _08081A98
- b _08081B98
-_08081A98:
- adds r1, 0x2
- adds r4, 0x1
- cmp r4, 0x4
- ble _08081A8E
- cmp r2, 0x1
- bne _08081AEA
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- ble _08081AB2
- movs r0, 0x1
- b _08081B9E
-_08081AB2:
- mov r0, sp
- ldrh r0, [r0, 0x2]
- lsls r0, 16
- cmp r0, 0
- ble _08081AC0
- movs r0, 0x2
- b _08081B9E
-_08081AC0:
- mov r0, sp
- movs r3, 0x4
- ldrsh r0, [r0, r3]
- cmp r0, 0
- ble _08081ACE
- movs r0, 0x3
- b _08081B9E
-_08081ACE:
- mov r0, sp
- movs r4, 0x6
- ldrsh r0, [r0, r4]
- cmp r0, 0
- ble _08081ADC
- movs r0, 0x4
- b _08081B9E
-_08081ADC:
- mov r0, sp
- movs r7, 0x8
- ldrsh r0, [r0, r7]
- cmp r0, 0
- ble _08081AEA
- movs r0, 0x5
- b _08081B9E
-_08081AEA:
- cmp r2, 0x2
- bne _08081B9C
- movs r4, 0
- ldr r5, =gUnknown_03000DF8
- mov r1, sp
- adds r2, r5, 0
-_08081AF6:
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0
- ble _08081B02
- strh r4, [r2]
- adds r2, 0x2
-_08081B02:
- adds r1, 0x2
- adds r4, 0x1
- cmp r4, 0x4
- ble _08081AF6
- movs r4, 0
- ldrsh r3, [r5, r4]
- lsls r0, r3, 1
- mov r7, sp
- adds r1, r7, r0
- movs r0, 0x2
- ldrsh r2, [r5, r0]
- lsls r0, r2, 1
- add r0, sp
- movs r4, 0
- ldrsh r1, [r1, r4]
- movs r7, 0
- ldrsh r0, [r0, r7]
- cmp r1, r0
- blt _08081B58
- adds r0, r3, 0
- cmp r0, 0
- bne _08081B38
- lsls r0, r2, 16
- b _08081B62
- .pool
-_08081B38:
- cmp r0, 0x1
- bne _08081B40
- lsls r0, r2, 16
- b _08081B6E
-_08081B40:
- cmp r0, 0x2
- bne _08081B48
- lsls r0, r2, 16
- b _08081B7A
-_08081B48:
- cmp r0, 0x3
- bne _08081B50
- lsls r0, r2, 16
- b _08081B86
-_08081B50:
- cmp r0, 0x4
- bne _08081B9C
- lsls r0, r2, 16
- b _08081B92
-_08081B58:
- movs r2, 0x2
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _08081B68
- lsls r0, r3, 16
-_08081B62:
- movs r1, 0x6
- orrs r0, r1
- b _08081B9E
-_08081B68:
- cmp r0, 0x1
- bne _08081B74
- lsls r0, r3, 16
-_08081B6E:
- movs r1, 0x7
- orrs r0, r1
- b _08081B9E
-_08081B74:
- cmp r0, 0x2
- bne _08081B80
- lsls r0, r3, 16
-_08081B7A:
- movs r1, 0x8
- orrs r0, r1
- b _08081B9E
-_08081B80:
- cmp r0, 0x3
- bne _08081B8C
- lsls r0, r3, 16
-_08081B86:
- movs r1, 0x9
- orrs r0, r1
- b _08081B9E
-_08081B8C:
- cmp r0, 0x4
- bne _08081B9C
- lsls r0, r3, 16
-_08081B92:
- movs r1, 0xA
- orrs r0, r1
- b _08081B9E
-_08081B98:
- movs r0, 0xE
- b _08081B9E
-_08081B9C:
- movs r0, 0
-_08081B9E:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80819B8
-
- thumb_func_start sub_8081BB0
-sub_8081BB0: @ 8081BB0
- ldr r1, =gUnknown_03000E04
- strh r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8081BB0
-
- thumb_func_start sub_8081BBC
-sub_8081BBC: @ 8081BBC
- ldr r0, =gUnknown_03000E04
- movs r1, 0
- ldrsh r0, [r0, r1]
- bx lr
- .pool
- thumb_func_end sub_8081BBC
-
- thumb_func_start sub_8081BC8
-sub_8081BC8: @ 8081BC8
- ldr r1, =gUnknown_03000E06
- strh r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8081BC8
-
- thumb_func_start sub_8081BD4
-sub_8081BD4: @ 8081BD4
- ldr r0, =gUnknown_03000E06
- movs r1, 0
- ldrsh r0, [r0, r1]
- bx lr
- .pool
- thumb_func_end sub_8081BD4
-
- thumb_func_start sub_8081BE0
-sub_8081BE0: @ 8081BE0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- str r0, [sp]
- mov r8, r1
- str r3, [sp, 0x4]
- ldr r0, [sp, 0x30]
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x8]
- ldr r7, =gUnknown_03000DE8
- adds r2, r7, 0
- movs r1, 0
- adds r0, r7, 0
- adds r0, 0xA
-_08081C0A:
- strh r1, [r0]
- subs r0, 0x2
- cmp r0, r2
- bge _08081C0A
- movs r6, 0
- cmp r6, r9
- bge _08081C40
- ldr r0, =gUnknown_03000DE8
- mov r12, r0
- ldr r5, [sp]
- adds r5, 0x9
-_08081C20:
- movs r3, 0
- adds r4, r5, 0
- mov r2, r12
-_08081C26:
- adds r1, r4, r3
- ldrh r0, [r2]
- ldrb r1, [r1]
- adds r0, r1
- strh r0, [r2]
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x5
- ble _08081C26
- adds r5, 0x10
- adds r6, 0x1
- cmp r6, r9
- blt _08081C20
-_08081C40:
- movs r1, 0
- ldrsh r3, [r7, r1]
- ldrh r0, [r7]
- ldrh r1, [r7, 0x2]
- subs r0, r1
- strh r0, [r7]
- ldrh r0, [r7, 0x4]
- subs r1, r0
- strh r1, [r7, 0x2]
- ldrh r1, [r7, 0x6]
- subs r0, r1
- strh r0, [r7, 0x4]
- ldrh r0, [r7, 0x8]
- subs r1, r0
- strh r1, [r7, 0x6]
- subs r0, r3
- strh r0, [r7, 0x8]
- movs r3, 0
- movs r2, 0
- adds r1, r7, 0
- movs r6, 0x4
-_08081C6A:
- movs r4, 0
- ldrsh r0, [r1, r4]
- cmp r0, 0
- bge _08081C76
- strh r2, [r1]
- adds r3, 0x1
-_08081C76:
- adds r1, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _08081C6A
- lsls r0, r3, 24
- lsrs r0, 24
- mov r10, r0
- movs r4, 0
- ldr r1, =gUnknown_03000DE8
- movs r6, 0x4
-_08081C8A:
- ldrh r2, [r1]
- movs r5, 0
- ldrsh r0, [r1, r5]
- cmp r0, 0
- ble _08081CA4
- cmp r0, r3
- bge _08081CA0
- strh r4, [r1]
- b _08081CA4
- .pool
-_08081CA0:
- subs r0, r2, r3
- strh r0, [r1]
-_08081CA4:
- adds r1, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _08081C8A
- ldr r1, =gUnknown_03000DE8
- ldr r2, =gUnknown_020322A8
- movs r6, 0x4
-_08081CB2:
- movs r3, 0
- ldrsh r0, [r1, r3]
- stm r2!, {r0}
- adds r1, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _08081CB2
- ldr r1, =0x0000014d
- ldr r0, [sp, 0x8]
- bl __udivsi3
- lsls r0, 16
- lsrs r0, 16
- adds r3, r0, 0
- adds r3, 0x64
- ldr r4, =gUnknown_020322D0
- str r3, [r4]
- movs r6, 0x4
-_08081CD6:
- movs r0, 0
- ldrsh r5, [r7, r0]
- adds r0, r5, 0
- muls r0, r3
- movs r1, 0xA
- str r3, [sp, 0xC]
- bl __divsi3
- adds r5, r0, 0
- movs r1, 0xA
- bl __modsi3
- adds r4, r0, 0
- adds r0, r5, 0
- movs r1, 0xA
- bl __divsi3
- adds r5, r0, 0
- ldr r3, [sp, 0xC]
- cmp r4, 0x4
- ble _08081D02
- adds r5, 0x1
-_08081D02:
- strh r5, [r7]
- adds r7, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _08081CD6
- ldr r1, =gUnknown_03000DE8
- ldr r2, =gUnknown_020322BC
- movs r6, 0x4
-_08081D12:
- movs r3, 0
- ldrsh r0, [r1, r3]
- stm r2!, {r0}
- adds r1, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _08081D12
- ldr r4, =gUnknown_03000DE8
- ldr r0, [sp]
- adds r1, r4, 0
- mov r2, r9
- mov r3, r10
- bl sub_80819B8
- mov r5, r8
- strb r0, [r5]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- mov r1, r9
- bl __divsi3
- mov r3, r9
- subs r0, r3
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bge _08081D4C
- movs r0, 0
- strh r0, [r4, 0xA]
-_08081D4C:
- mov r5, r8
- ldrb r0, [r5]
- cmp r0, 0xC
- bne _08081DA6
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- lsrs r3, r0, 16
- movs r6, 0
- ldr r0, =gUnknown_08339CC8
- adds r0, r3, r0
- ldrb r0, [r0]
- adds r1, r4, 0
- movs r4, 0x1
- movs r3, 0x2
-_08081D74:
- adds r2, r0, 0
- asrs r2, r6
- ands r2, r4
- cmp r2, 0
- beq _08081D9C
- strh r3, [r1]
- b _08081D9E
- .pool
-_08081D9C:
- strh r2, [r1]
-_08081D9E:
- adds r1, 0x2
- adds r6, 0x1
- cmp r6, 0x4
- ble _08081D74
-_08081DA6:
- ldr r7, =gUnknown_03000DE8
- movs r2, 0xFF
- adds r1, r7, 0
- movs r6, 0x5
-_08081DAE:
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0xFF
- ble _08081DB8
- strh r2, [r1]
-_08081DB8:
- adds r1, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _08081DAE
- ldrh r0, [r7]
- mov r4, r8
- strb r0, [r4, 0x1]
- ldrh r0, [r7, 0x2]
- strb r0, [r4, 0x2]
- ldrh r0, [r7, 0x4]
- strb r0, [r4, 0x3]
- ldrh r0, [r7, 0x6]
- strb r0, [r4, 0x4]
- ldrh r0, [r7, 0x8]
- strb r0, [r4, 0x5]
- ldrh r0, [r7, 0xA]
- strb r0, [r4, 0x6]
- movs r6, 0
- adds r2, r7, 0
-_08081DDE:
- ldr r5, [sp, 0x4]
- adds r1, r5, r6
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r6, 0x1
- cmp r6, 0x5
- ble _08081DDE
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8081BE0
-
- thumb_func_start sub_8081E04
-sub_8081E04: @ 8081E04
- push {r4,lr}
- sub sp, 0x4
- ldr r4, [sp, 0xC]
- lsls r2, 24
- lsrs r2, 24
- lsls r4, 16
- lsrs r4, 16
- str r4, [sp]
- bl sub_8081BE0
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8081E04
-
- thumb_func_start sub_8081E20
-sub_8081E20: @ 8081E20
- push {r4-r6,lr}
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- movs r2, 0x82
- lsls r2, 1
- adds r1, r0, r2
- ldrh r1, [r1]
- adds r0, 0x4E
- ldrh r4, [r0]
- movs r2, 0
- ldr r5, =0x00000383
- cmp r1, r5
- bhi _08081E48
- movs r2, 0x5
- b _08081E9A
- .pool
-_08081E48:
- ldr r3, =0xfffffc7c
- adds r0, r1, r3
- lsls r0, 16
- lsrs r0, 16
- ldr r3, =0x00000257
- cmp r0, r3
- bhi _08081E64
- movs r2, 0x4
- b _08081E9A
- .pool
-_08081E64:
- ldr r6, =0xfffffa24
- adds r0, r1, r6
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r3
- bhi _08081E78
- movs r2, 0x3
- b _08081E9A
- .pool
-_08081E78:
- ldr r3, =0xfffff7cc
- adds r0, r1, r3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r5
- bhi _08081E8C
- movs r2, 0x2
- b _08081E9A
- .pool
-_08081E8C:
- ldr r6, =0xfffff31c
- adds r0, r1, r6
- lsls r0, 16
- ldr r1, =0x012b0000
- cmp r0, r1
- bhi _08081E9A
- movs r2, 0x1
-_08081E9A:
- lsls r0, r2, 16
- asrs r0, 16
- bl sub_8081BC8
- movs r2, 0
- cmp r4, 0x40
- bhi _08081F7C
- adds r0, r4, 0
- subs r0, 0x32
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bhi _08081EC4
- ldr r2, =0x0000ffff
- b _08081F7C
- .pool
-_08081EC4:
- adds r0, r4, 0
- subs r0, 0x64
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bhi _08081ED8
- ldr r2, =0x0000fffe
- b _08081F7C
- .pool
-_08081ED8:
- adds r0, r4, 0
- subs r0, 0x96
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bhi _08081EEC
- ldr r2, =0x0000fffd
- b _08081F7C
- .pool
-_08081EEC:
- adds r0, r4, 0
- subs r0, 0xC8
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bhi _08081F00
- ldr r2, =0x0000fffc
- b _08081F7C
- .pool
-_08081F00:
- adds r0, r4, 0
- subs r0, 0xFA
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bhi _08081F14
- ldr r2, =0x0000fffb
- b _08081F7C
- .pool
-_08081F14:
- ldr r1, =0xfffffea2
- adds r0, r4, r1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bhi _08081F2C
- ldr r2, =0x0000fffa
- b _08081F7C
- .pool
-_08081F2C:
- ldr r3, =0xfffffe70
- adds r0, r4, r3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bhi _08081F44
- ldr r2, =0x0000fff9
- b _08081F7C
- .pool
-_08081F44:
- ldr r6, =0xfffffe0c
- adds r0, r4, r6
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bhi _08081F5C
- ldr r2, =0x0000fff8
- b _08081F7C
- .pool
-_08081F5C:
- ldr r1, =0xfffffdda
- adds r0, r4, r1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bhi _08081F74
- ldr r2, =0x0000fff7
- b _08081F7C
- .pool
-_08081F74:
- ldr r0, =0x00000257
- cmp r4, r0
- bls _08081F7C
- ldr r2, =0x0000fff6
-_08081F7C:
- lsls r0, r2, 16
- asrs r0, 16
- bl sub_8081BB0
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8081E20
-
- thumb_func_start sub_8081F94
-sub_8081F94: @ 8081F94
- push {lr}
- adds r1, r0, 0
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08081FB8
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08081FB8
- movs r2, 0xBC
- lsls r2, 6
- b _08081FBA
- .pool
-_08081FB8:
- ldr r2, =0x00002fff
-_08081FBA:
- adds r0, r2, 0
- strh r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8081F94
-
- thumb_func_start sub_8081FC8
-sub_8081FC8: @ 8081FC8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- adds r0, 0x63
- ldrb r0, [r0]
- cmp r0, 0x2
- bhi _08081FDE
- bl sub_8082D28
-_08081FDE:
- bl GetMultiplayerId
- ldr r0, [r4]
- adds r0, 0x63
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r0, 0xC
- bls _08081FF0
- b _0808249E
-_08081FF0:
- lsls r0, 2
- ldr r1, =_08082004
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08082004:
- .4byte _08082038
- .4byte _08082078
- .4byte _080820D4
- .4byte _080821C8
- .4byte _08082278
- .4byte _08082286
- .4byte _080822B0
- .4byte _08082458
- .4byte _080822E4
- .4byte _08082308
- .4byte _080823B0
- .4byte _08082430
- .4byte _0808246C
-_08082038:
- ldr r0, =gMPlay_BGM
- movs r1, 0x80
- lsls r1, 1
- bl m4aMPlayTempoControl
- movs r4, 0
- b _08082064
- .pool
-_0808204C:
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- adds r0, r1
- adds r0, r4
- ldrb r0, [r0]
- bl DestroyTask
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_08082064:
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r4, r0
- bcc _0808204C
- b _08082458
- .pool
-_08082078:
- ldr r4, =gUnknown_020322A4
- ldr r1, [r4]
- adds r1, 0x4C
- ldrh r0, [r1]
- subs r0, 0x20
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bgt _080820C6
- bl sub_8009F8C
- ldr r2, [r4]
- adds r1, r2, 0
- adds r1, 0x4C
- movs r0, 0
- strh r0, [r1]
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080820B0
- adds r1, 0x17
- ldrb r0, [r1]
- adds r0, 0x1
- b _080820B6
- .pool
-_080820B0:
- adds r1, r2, 0
- adds r1, 0x63
- movs r0, 0x5
-_080820B6:
- strb r0, [r1]
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1]
- ldr r0, =gMPlay_SE2
- bl m4aMPlayStop
-_080820C6:
- bl sub_807F738
- b _0808249E
- .pool
-_080820D4:
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- beq _080820E0
- b _08082458
-_080820E0:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- bne _080820EC
- b _0808249E
-_080820EC:
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808218C
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808218C
- ldr r3, =gUnknown_020322A4
- ldr r1, [r3]
- movs r4, 0x8E
- lsls r4, 5
- adds r2, r1, r4
- movs r5, 0x82
- lsls r5, 1
- adds r0, r1, r5
- ldr r0, [r0]
- str r0, [r2]
- adds r0, r1, 0
- adds r0, 0x4E
- ldrh r0, [r0]
- ldr r2, =0x000011c4
- adds r1, r2
- strh r0, [r1]
- movs r4, 0
- mov r8, r3
- mov r12, r8
- ldr r7, =0x000011c8
- movs r6, 0x92
- lsls r6, 1
-_08082128:
- movs r3, 0
- adds r5, r4, 0x1
- lsls r0, r4, 1
- adds r0, r4
- lsls r4, r0, 1
-_08082132:
- mov r1, r12
- ldr r0, [r1]
- lsls r1, r3, 1
- adds r1, r4
- adds r2, r0, r7
- adds r2, r1
- adds r0, r6
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r2]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x2
- bls _08082132
- lsls r0, r5, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _08082128
- mov r2, r8
- ldr r1, [r2]
- movs r4, 0x8E
- lsls r4, 5
- adds r1, r4
- movs r0, 0
- movs r2, 0x20
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- bne _08082172
- b _0808249E
-_08082172:
- mov r5, r8
- ldr r1, [r5]
- b _0808245C
- .pool
-_0808218C:
- ldr r4, =gUnknown_020322A4
- ldr r3, [r4]
- movs r0, 0xCC
- lsls r0, 1
- adds r1, r3, r0
- movs r2, 0x82
- lsls r2, 1
- adds r0, r3, r2
- ldr r0, [r0]
- str r0, [r1]
- adds r0, r3, 0
- adds r0, 0x4E
- ldrh r2, [r0]
- movs r5, 0xCE
- lsls r5, 1
- adds r0, r3, r5
- strh r2, [r0]
- movs r0, 0
- movs r2, 0x28
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- bne _080821BE
- b _0808249E
-_080821BE:
- ldr r1, [r4]
- b _0808245C
- .pool
-_080821C8:
- bl GetBlockReceivedStatus
- lsls r0, 24
- cmp r0, 0
- bne _080821D4
- b _0808249E
-_080821D4:
- bl ResetBlockReceivedFlags
- ldr r5, =gUnknown_020322A4
- ldr r1, [r5]
- adds r1, 0x63
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08082254
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08082254
- ldr r2, =gBlockRecvBuffer
- ldr r3, [r5]
- ldrh r0, [r2, 0x4]
- adds r1, r3, 0
- adds r1, 0x4E
- strh r0, [r1]
- movs r0, 0x82
- lsls r0, 1
- adds r1, r3, r0
- ldr r0, [r2]
- str r0, [r1]
- movs r4, 0
- adds r7, r2, 0
- adds r7, 0x8
- adds r6, r5, 0
- movs r2, 0x92
- lsls r2, 1
-_08082216:
- movs r3, 0
- adds r5, r4, 0x1
- lsls r0, r4, 1
- adds r0, r4
- lsls r4, r0, 1
-_08082220:
- ldr r1, [r6]
- lsls r0, r3, 1
- adds r0, r4
- adds r1, r2
- adds r1, r0
- adds r0, r7, r0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x2
- bls _08082220
- lsls r0, r5, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _08082216
- b _0808249E
- .pool
-_08082254:
- ldr r2, =gBlockRecvBuffer
- ldr r0, =gUnknown_020322A4
- ldr r3, [r0]
- ldrh r0, [r2, 0x4]
- adds r1, r3, 0
- adds r1, 0x4E
- strh r0, [r1]
- movs r4, 0x82
- lsls r4, 1
- adds r1, r3, r4
- ldr r0, [r2]
- str r0, [r1]
- b _0808249E
- .pool
-_08082278:
- bl sub_8083B08
- lsls r0, 24
- cmp r0, 0
- bne _08082284
- b _0808249E
-_08082284:
- b _08082458
-_08082286:
- bl berry_blender_related
- lsls r0, 24
- cmp r0, 0
- bne _08082292
- b _0808249E
-_08082292:
- ldr r0, =gUnknown_03005D98
- ldrb r0, [r0]
- cmp r0, 0
- bne _080822A8
- movs r0, 0x22
- bl IncrementGameStat
- b _08082458
- .pool
-_080822A8:
- movs r0, 0x21
- bl IncrementGameStat
- b _08082458
-_080822B0:
- ldr r6, =gUnknown_020322A4
- ldr r4, [r6]
- ldr r5, =0x000011b8
- adds r4, r5
- ldr r5, =sText_WouldLikeToBlendAnotherBerry
- bl sav2_get_text_speed
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_808417C
- cmp r0, 0
- bne _080822D2
- b _0808249E
-_080822D2:
- ldr r1, [r6]
- b _0808245C
- .pool
-_080822E4:
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- adds r0, 0x9E
- movs r1, 0
- strb r1, [r0]
- ldr r0, =gUnknown_083399B8
- movs r1, 0x1
- movs r2, 0xD
- movs r3, 0
- bl CreateYesNoMenu
- ldr r1, [r4]
- b _0808245C
- .pool
-_08082308:
- bl sub_8198C58
- lsls r0, 24
- asrs r2, r0, 24
- cmp r2, 0
- beq _0808236C
- cmp r2, 0
- bgt _08082322
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- beq _08082328
- b _0808249E
-_08082322:
- cmp r2, 0x1
- beq _08082328
- b _0808249E
-_08082328:
- ldr r2, =gUnknown_020322A4
- ldr r0, [r2]
- adds r0, 0x9E
- movs r1, 0x1
- strb r1, [r0]
- ldr r1, [r2]
- adds r1, 0x63
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r4, 0
-_0808233E:
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- lsls r1, r4, 1
- adds r0, 0x8E
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0xFF
- beq _0808235C
- adds r0, r4, 0
- bl PutWindowTilemap
- adds r0, r4, 0
- movs r1, 0x3
- bl CopyWindowToVram
-_0808235C:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0808233E
- b _0808249E
- .pool
-_0808236C:
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- adds r0, 0x9E
- strb r2, [r0]
- ldr r1, [r1]
- adds r1, 0x63
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r4, 0
-_08082380:
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- lsls r1, r4, 1
- adds r0, 0x8E
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0xFF
- beq _0808239E
- adds r0, r4, 0
- bl PutWindowTilemap
- adds r0, r4, 0
- movs r1, 0x3
- bl CopyWindowToVram
-_0808239E:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _08082380
- b _0808249E
- .pool
-_080823B0:
- ldr r6, =gUnknown_03003110
- adds r0, r6, 0
- bl sub_8081F94
- ldr r4, =gUnknown_020322A4
- ldr r2, [r4]
- adds r0, r2, 0
- adds r0, 0x9E
- ldrb r5, [r0]
- cmp r5, 0
- bne _0808241C
- movs r0, 0x4
- bl IsBagPocketNonEmpty
- lsls r0, 24
- cmp r0, 0
- bne _080823EC
- ldr r0, [r4]
- adds r0, 0x70
- movs r1, 0x2
- strh r1, [r0]
- ldr r0, =0x00009999
- b _08082414
- .pool
-_080823EC:
- bl sub_8136EF4
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _0808240C
- ldr r0, [r4]
- adds r0, 0x70
- movs r1, 0x3
- strh r1, [r0]
- ldr r0, =0x0000aaaa
- b _08082414
- .pool
-_0808240C:
- ldr r0, [r4]
- adds r0, 0x70
- strh r5, [r0]
- ldr r0, =0x00007779
-_08082414:
- strh r0, [r6, 0x2]
- b _08082458
- .pool
-_0808241C:
- adds r1, r2, 0
- adds r1, 0x70
- movs r0, 0x1
- strh r0, [r1]
- ldr r0, =0x00008888
- strh r0, [r6, 0x2]
- subs r1, 0xD
- b _0808245E
- .pool
-_08082430:
- ldr r0, =gUnknown_03005D98
- ldrb r0, [r0]
- cmp r0, 0
- beq _08082458
- ldr r0, =sub_8082924
- bl SetMainCallback2
- ldr r2, =gUnknown_020322A4
- ldr r0, [r2]
- adds r0, 0x63
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r2]
- b _0808249C
- .pool
-_08082458:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
-_0808245C:
- adds r1, 0x63
-_0808245E:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808249E
- .pool
-_0808246C:
- ldr r6, =gUnknown_020322A4
- ldr r4, [r6]
- ldr r0, =0x000011b8
- adds r4, r0
- ldr r5, =sText_CommunicationStandby
- bl sav2_get_text_speed
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_808417C
- cmp r0, 0
- beq _0808249E
- ldr r0, =sub_8082644
- bl SetMainCallback2
- ldr r0, [r6]
- adds r0, 0x63
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r6]
-_0808249C:
- strb r1, [r0]
-_0808249E:
- bl sub_808330C
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- adds r0, 0x4C
- ldrh r0, [r0]
- bl sub_8083230
- bl sub_8082AD4
- ldr r1, [r4]
- movs r2, 0x8E
- lsls r2, 1
- adds r0, r1, r2
- movs r4, 0
- ldrsh r0, [r0, r4]
- movs r5, 0x8F
- lsls r5, 1
- adds r1, r5
- movs r2, 0
- ldrsh r1, [r1, r2]
- bl nullsub_31
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8081FC8
-
- thumb_func_start sub_80824FC
-sub_80824FC: @ 80824FC
- push {r4,lr}
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- movs r2, 0xD0
- lsls r2, 1
- adds r0, r2
- ldr r0, [r0]
- adds r4, r1, 0
- cmp r0, 0x6
- bls _08082512
- b _0808263C
-_08082512:
- lsls r0, 2
- ldr r1, =_08082524
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08082524:
- .4byte _08082540
- .4byte _08082558
- .4byte _08082584
- .4byte _08082594
- .4byte _080825BA
- .4byte _08082600
- .4byte _0808261A
-_08082540:
- bl sub_800ADF8
- ldr r0, =gUnknown_020322A4
- ldr r2, [r0]
- movs r3, 0xD0
- lsls r3, 1
- adds r1, r2, r3
- movs r0, 0x1
- b _0808260C
- .pool
-_08082558:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _0808263C
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r2, 0xD0
- lsls r2, 1
- adds r1, r2
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- ldr r1, =gSoftResetDisabled
- movs r0, 0x1
- strb r0, [r1]
- b _0808263C
- .pool
-_08082584:
- bl sub_8153430
- ldr r0, =gUnknown_020322A4
- ldr r2, [r0]
- b _08082602
- .pool
-_08082594:
- ldr r1, [r4]
- movs r2, 0x84
- lsls r2, 1
- adds r1, r2
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0xA
- bne _0808263C
- bl sub_800ADF8
- ldr r1, [r4]
- movs r3, 0xD0
- lsls r3, 1
- adds r1, r3
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- b _0808263C
-_080825BA:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _0808263C
- bl sub_8153474
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _080825E4
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- movs r1, 0xD0
- lsls r1, 1
- adds r0, r1
- movs r1, 0x5
- str r1, [r0]
- b _0808263C
- .pool
-_080825E4:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r3, 0x84
- lsls r3, 1
- adds r0, r1, r3
- str r2, [r0]
- movs r0, 0xD0
- lsls r0, 1
- adds r1, r0
- movs r0, 0x3
- str r0, [r1]
- b _0808263C
- .pool
-_08082600:
- ldr r2, [r4]
-_08082602:
- movs r3, 0xD0
- lsls r3, 1
- adds r1, r2, r3
- ldr r0, [r1]
- adds r0, 0x1
-_0808260C:
- str r0, [r1]
- movs r0, 0x84
- lsls r0, 1
- adds r1, r2, r0
- movs r0, 0
- str r0, [r1]
- b _0808263C
-_0808261A:
- ldr r1, [r4]
- movs r2, 0x84
- lsls r2, 1
- adds r1, r2
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x5
- ble _0808263C
- ldr r1, =gSoftResetDisabled
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x1
- b _0808263E
- .pool
-_0808263C:
- movs r0, 0
-_0808263E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80824FC
-
- thumb_func_start sub_8082644
-sub_8082644: @ 8082644
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- adds r0, 0x63
- ldrb r0, [r0]
- adds r6, r1, 0
- cmp r0, 0xC
- bls _08082658
- b _080828DC
-_08082658:
- lsls r0, 2
- ldr r1, =_0808266C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0808266C:
- .4byte _080826A0
- .4byte _080826EC
- .4byte _0808271C
- .4byte _08082754
- .4byte _0808278C
- .4byte _080827AA
- .4byte _080827C8
- .4byte _080827FC
- .4byte _08082818
- .4byte _08082828
- .4byte _0808284C
- .4byte _080828A4
- .4byte _080828C6
-_080826A0:
- ldr r1, [r6]
- adds r0, r1, 0
- adds r0, 0x64
- ldrh r2, [r0]
- ldr r0, =0x00002222
- cmp r2, r0
- bne _080826B0
- b _080827A2
-_080826B0:
- ldr r0, =0x00001111
- cmp r2, r0
- beq _080826B8
- b _080828DC
-_080826B8:
- adds r0, r1, 0
- adds r0, 0x6C
- ldrh r2, [r0]
- ldr r0, =0x00009999
- cmp r2, r0
- bne _080826D8
- adds r1, 0x63
- movs r0, 0x2
- strb r0, [r1]
- b _080828DC
- .pool
-_080826D8:
- ldr r0, =0x0000aaaa
- cmp r2, r0
- bne _080827A2
- adds r1, 0x63
- movs r0, 0x1
- strb r0, [r1]
- b _080828DC
- .pool
-_080826EC:
- ldr r0, [r6]
- adds r0, 0x63
- movs r1, 0x3
- strb r1, [r0]
- ldr r4, =gStringVar4
- ldr r0, [r6]
- adds r0, 0x6E
- ldrh r0, [r0]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r0, =gLinkPlayers + 8
- adds r1, r0
- adds r0, r4, 0
- bl StringCopy
- ldr r1, =sText_ApostropheSPokeblockCaseIsFull
- b _08082740
- .pool
-_0808271C:
- ldr r1, [r6]
- adds r1, 0x63
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r4, =gStringVar4
- ldr r0, [r6]
- adds r0, 0x6E
- ldrh r0, [r0]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r0, =gLinkPlayers + 8
- adds r1, r0
- adds r0, r4, 0
- bl StringCopy
- ldr r1, =sText_HasNoBerriesToPut
-_08082740:
- adds r0, r4, 0
- bl StringAppend
- b _080828DC
- .pool
-_08082754:
- ldr r4, [r6]
- ldr r0, =0x000011b8
- adds r4, r0
- ldr r5, =gStringVar4
- bl sav2_get_text_speed
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_808417C
- cmp r0, 0
- bne _08082774
- b _080828DC
-_08082774:
- ldr r1, [r6]
- movs r0, 0x84
- lsls r0, 1
- adds r2, r1, r0
- movs r0, 0
- str r0, [r2]
- b _080828BC
- .pool
-_0808278C:
- ldr r4, [r6]
- movs r2, 0x84
- lsls r2, 1
- adds r1, r4, r2
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x3C
- bgt _080827A0
- b _080828DC
-_080827A0:
- adds r1, r4, 0
-_080827A2:
- adds r1, 0x63
- movs r0, 0x5
- strb r0, [r1]
- b _080828DC
-_080827AA:
- ldr r0, [r6]
- ldr r1, =0x000011b8
- adds r0, r1
- ldr r1, =gText_SavingDontTurnOff2
- movs r2, 0
- bl sub_808417C
- bl sub_800ADF8
- b _080828BA
- .pool
-_080827C8:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- bne _080827D4
- b _080828DC
-_080827D4:
- ldr r3, =gUnknown_020322A4
- ldr r1, [r3]
- movs r2, 0x84
- lsls r2, 1
- adds r0, r1, r2
- movs r2, 0
- str r2, [r0]
- adds r1, 0x63
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, [r3]
- movs r1, 0xD0
- lsls r1, 1
- adds r0, r1
- str r2, [r0]
- b _080828DC
- .pool
-_080827FC:
- bl sub_80824FC
- lsls r0, 24
- cmp r0, 0
- beq _080828DC
- movs r0, 0x37
- bl PlaySE
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- b _080828BC
- .pool
-_08082818:
- ldr r1, [r6]
- adds r1, 0x63
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bl sub_800ADF8
- b _080828DC
-_08082828:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _080828DC
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- b _080828BC
- .pool
-_0808284C:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080828DC
- ldr r2, [r6]
- adds r0, r2, 0
- adds r0, 0x64
- ldrh r1, [r0]
- ldr r0, =0x00002222
- cmp r1, r0
- bne _08082898
- bl FreeAllWindowBuffers
- movs r0, 0x2
- bl UnsetBgTilemapBuffer
- movs r0, 0x1
- bl UnsetBgTilemapBuffer
- ldr r0, [r6]
- bl Free
- str r4, [r6]
- ldr r0, =sub_807FA80
- bl SetMainCallback2
- b _080828DC
- .pool
-_08082898:
- movs r1, 0x84
- lsls r1, 1
- adds r0, r2, r1
- str r4, [r0]
- adds r1, r2, 0
- b _080828BC
-_080828A4:
- ldr r1, [r6]
- movs r2, 0x84
- lsls r2, 1
- adds r1, r2
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x1E
- ble _080828DC
- bl sub_800AC34
-_080828BA:
- ldr r1, [r6]
-_080828BC:
- adds r1, 0x63
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _080828DC
-_080828C6:
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r4, [r0]
- cmp r4, 0
- bne _080828DC
- ldr r0, [r6]
- bl Free
- str r4, [r6]
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
- bl SetMainCallback2
-_080828DC:
- bl sub_8082AD4
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r2, 0x8E
- lsls r2, 1
- adds r0, r1, r2
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0x8F
- lsls r2, 1
- adds r1, r2
- movs r2, 0
- ldrsh r1, [r1, r2]
- bl nullsub_31
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8082644
-
- thumb_func_start sub_8082924
-sub_8082924: @ 8082924
- push {r4-r6,lr}
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- adds r0, 0x63
- ldrb r0, [r0]
- adds r6, r1, 0
- cmp r0, 0xA
- bls _08082936
- b _08082A92
-_08082936:
- lsls r0, 2
- ldr r1, =_08082948
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08082948:
- .4byte _08082974
- .4byte _080829AA
- .4byte _080829D4
- .4byte _08082A00
- .4byte _08082A92
- .4byte _08082A92
- .4byte _08082A92
- .4byte _08082A92
- .4byte _08082A92
- .4byte _08082A30
- .4byte _08082A48
-_08082974:
- ldr r1, [r6]
- adds r0, r1, 0
- adds r0, 0x70
- ldrh r0, [r0]
- cmp r0, 0x1
- bhi _08082986
- adds r1, 0x63
- movs r0, 0x9
- strb r0, [r1]
-_08082986:
- ldr r2, [r6]
- adds r0, r2, 0
- adds r0, 0x70
- ldrh r1, [r0]
- cmp r1, 0x2
- bne _08082996
- subs r0, 0xD
- strb r1, [r0]
-_08082996:
- ldr r1, [r6]
- adds r0, r1, 0
- adds r0, 0x70
- ldrh r0, [r0]
- cmp r0, 0x3
- bne _08082A92
- adds r1, 0x63
- movs r0, 0x1
- strb r0, [r1]
- b _08082A92
-_080829AA:
- ldr r0, [r6]
- adds r0, 0x63
- movs r2, 0
- movs r1, 0x3
- strb r1, [r0]
- ldr r0, [r6]
- ldr r1, =0x000011b8
- adds r0, r1
- strh r2, [r0]
- ldr r0, =gStringVar4
- ldr r1, =sText_YourPokeblockCaseIsFull
- bl StringCopy
- b _08082A92
- .pool
-_080829D4:
- ldr r1, [r6]
- adds r1, 0x63
- ldrb r0, [r1]
- adds r0, 0x1
- movs r2, 0
- strb r0, [r1]
- ldr r0, [r6]
- ldr r1, =0x000011b8
- adds r0, r1
- strh r2, [r0]
- ldr r0, =gStringVar4
- ldr r1, =sText_RunOutOfBerriesForBlending
- bl StringCopy
- b _08082A92
- .pool
-_08082A00:
- ldr r4, [r6]
- ldr r2, =0x000011b8
- adds r4, r2
- ldr r5, =gStringVar4
- bl sav2_get_text_speed
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_808417C
- cmp r0, 0
- beq _08082A92
- ldr r0, [r6]
- adds r0, 0x63
- movs r1, 0x9
- strb r1, [r0]
- b _08082A92
- .pool
-_08082A30:
- movs r0, 0x3
- bl BeginFastPaletteFade
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- adds r1, 0x63
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08082A92
- .pool
-_08082A48:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08082A92
- ldr r0, [r6]
- adds r0, 0x70
- ldrh r0, [r0]
- cmp r0, 0
- bne _08082A70
- ldr r0, =sub_807FA80
- bl SetMainCallback2
- b _08082A76
- .pool
-_08082A70:
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
- bl SetMainCallback2
-_08082A76:
- bl FreeAllWindowBuffers
- movs r0, 0x2
- bl UnsetBgTilemapBuffer
- movs r0, 0x1
- bl UnsetBgTilemapBuffer
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- bl Free
- movs r0, 0
- str r0, [r4]
-_08082A92:
- bl sub_8082AD4
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r2, 0x8E
- lsls r2, 1
- adds r0, r1, r2
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0x8F
- lsls r2, 1
- adds r1, r2
- movs r2, 0
- ldrsh r1, [r1, r2]
- bl nullsub_31
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8082924
-
- thumb_func_start sub_8082AD4
-sub_8082AD4: @ 8082AD4
- push {r4-r7,lr}
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08082AE0
- b _08082CA4
-_08082AE0:
- ldr r4, =gUnknown_03003090
- ldrh r0, [r4]
- ldr r1, =0x00002fff
- movs r2, 0xBC
- lsls r2, 6
- bl sub_80814B0
- cmp r0, 0
- beq _08082B66
- ldrh r1, [r4, 0x2]
- ldr r0, =0x00001111
- cmp r1, r0
- bne _08082B58
- ldrh r3, [r4, 0x4]
- ldr r0, =0x00009999
- cmp r3, r0
- beq _08082B38
- cmp r3, r0
- bgt _08082B24
- ldr r0, =0x00008888
- b _08082B26
- .pool
-_08082B24:
- ldr r0, =0x0000aaaa
-_08082B26:
- cmp r3, r0
- beq _08082B38
- ldr r2, =gUnknown_020322A4
- b _08082B48
- .pool
-_08082B38:
- ldr r2, =gUnknown_020322A4
- ldr r0, [r2]
- adds r1, r0, 0
- adds r1, 0x6C
- strh r3, [r1]
- ldrh r1, [r4, 0x6]
- adds r0, 0x6E
- strh r1, [r0]
-_08082B48:
- ldr r0, [r2]
- adds r0, 0x64
- ldr r1, =0x00001111
- b _08082B64
- .pool
-_08082B58:
- ldr r0, =0x00002222
- cmp r1, r0
- bne _08082B66
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r0, 0x64
-_08082B64:
- strh r1, [r0]
-_08082B66:
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- beq _08082B72
- b _08082CA4
-_08082B72:
- ldr r2, =gUnknown_020322A4
- ldr r0, [r2]
- adds r0, 0x64
- ldrh r1, [r0]
- ldr r0, =0x00001111
- cmp r1, r0
- bne _08082B82
- b _08082CA4
-_08082B82:
- ldr r0, =0x00002222
- cmp r1, r0
- bne _08082B8A
- b _08082CA4
-_08082B8A:
- movs r5, 0
- adds r7, r2, 0
- b _08082BF4
- .pool
-_08082B9C:
- ldr r6, =gUnknown_03003090
- lsls r4, r5, 4
- adds r0, r4, r6
- ldrh r0, [r0]
- ldr r1, =0x00002fff
- movs r2, 0xBC
- lsls r2, 6
- bl sub_80814B0
- cmp r0, 0
- beq _08082BEE
- adds r0, r6, 0x2
- adds r0, r4, r0
- ldrh r2, [r0]
- ldr r0, =0x00008888
- cmp r2, r0
- beq _08082BE4
- cmp r2, r0
- bgt _08082BD8
- ldr r0, =0x00007779
- b _08082BE0
- .pool
-_08082BD8:
- ldr r0, =0x00009999
- cmp r2, r0
- beq _08082BE4
- ldr r0, =0x0000aaaa
-_08082BE0:
- cmp r2, r0
- bne _08082BEE
-_08082BE4:
- ldr r0, [r7]
- lsls r1, r5, 1
- adds r0, 0x64
- adds r0, r1
- strh r2, [r0]
-_08082BEE:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_08082BF4:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bcc _08082B9C
- movs r5, 0
- b _08082C12
- .pool
-_08082C0C:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_08082C12:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bcs _08082C2E
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- lsls r1, r5, 1
- adds r0, 0x64
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0
- bne _08082C0C
-_08082C2E:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bne _08082CA4
- movs r5, 0
- ldr r4, =0x00007779
- b _08082C4E
- .pool
-_08082C48:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_08082C4E:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bcs _08082C6A
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- lsls r1, r5, 1
- adds r0, 0x64
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r4
- beq _08082C48
-_08082C6A:
- ldr r4, =gUnknown_03003110
- adds r0, r4, 0
- bl sub_8081F94
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bne _08082C90
- ldr r0, =0x00002222
- strh r0, [r4, 0x2]
- b _08082CA4
- .pool
-_08082C90:
- ldr r0, =0x00001111
- strh r0, [r4, 0x2]
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- lsls r1, r5, 1
- adds r0, 0x64
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4, 0x4]
- strh r5, [r4, 0x6]
-_08082CA4:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8082AD4
-
- thumb_func_start sub_8082CB4
-sub_8082CB4: @ 8082CB4
- push {r4,lr}
- sub sp, 0x14
- movs r1, 0xF0
- lsls r1, 7
- str r1, [sp]
- movs r1, 0xA0
- lsls r1, 7
- str r1, [sp, 0x4]
- mov r3, sp
- ldr r1, =gUnknown_020322A4
- ldr r1, [r1]
- mov r12, r1
- movs r1, 0x8E
- lsls r1, 1
- add r1, r12
- ldrh r2, [r1]
- movs r1, 0x78
- subs r1, r2
- strh r1, [r3, 0x8]
- movs r1, 0x8F
- lsls r1, 1
- add r1, r12
- ldrh r2, [r1]
- movs r1, 0x50
- subs r1, r2
- strh r1, [r3, 0xA]
- mov r2, sp
- movs r3, 0x8D
- lsls r3, 1
- add r3, r12
- ldrh r1, [r3]
- strh r1, [r2, 0xC]
- ldrh r1, [r3]
- strh r1, [r2, 0xE]
- mov r1, r12
- adds r1, 0x4A
- ldrh r1, [r1]
- strh r1, [r2, 0x10]
- mov r1, sp
- ldm r1!, {r2-r4}
- stm r0!, {r2-r4}
- ldm r1!, {r2,r3}
- stm r0!, {r2,r3}
- add sp, 0x14
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8082CB4
-
- thumb_func_start sub_8082D18
-sub_8082D18: @ 8082D18
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r0, 0x4A
- ldrh r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_8082D18
-
- thumb_func_start sub_8082D28
-sub_8082D28: @ 8082D28
- push {r4,lr}
- movs r1, 0
- ldr r4, =gReceivedRemoteLinkPlayers
- ldrb r0, [r4]
- cmp r0, 0
- beq _08082D3C
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r1, r0, 24
-_08082D3C:
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08082DCC
- ldrb r0, [r4]
- cmp r0, 0
- beq _08082DCC
- cmp r1, 0
- bne _08082D90
- ldr r0, =gUnknown_020322A4
- ldr r3, [r0]
- adds r2, r3, 0
- adds r2, 0x4A
- adds r0, r3, 0
- adds r0, 0x4C
- ldrh r0, [r0]
- ldrh r1, [r2]
- adds r0, r1
- strh r0, [r2]
- ldr r1, =gUnknown_03003110
- movs r4, 0x8B
- lsls r4, 1
- adds r0, r3, r4
- ldrh r0, [r0]
- strh r0, [r1, 0xA]
- ldrh r0, [r2]
- strh r0, [r1, 0xC]
- movs r1, 0xA0
- lsls r1, 1
- adds r0, r3, r1
- bl sub_8082CB4
- b _08082DEA
- .pool
-_08082D90:
- ldr r3, =gUnknown_03003090
- ldrh r0, [r3]
- movs r1, 0xFF
- lsls r1, 8
- ands r1, r0
- movs r0, 0x88
- lsls r0, 7
- cmp r1, r0
- bne _08082DEA
- ldr r0, =gUnknown_020322A4
- ldr r2, [r0]
- ldrh r0, [r3, 0xA]
- movs r4, 0x8B
- lsls r4, 1
- adds r1, r2, r4
- strh r0, [r1]
- ldrh r0, [r3, 0xC]
- adds r1, r2, 0
- adds r1, 0x4A
- strh r0, [r1]
- movs r1, 0xA0
- lsls r1, 1
- adds r0, r2, r1
- bl sub_8082CB4
- b _08082DEA
- .pool
-_08082DCC:
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- adds r2, r1, 0
- adds r2, 0x4A
- adds r0, r1, 0
- adds r0, 0x4C
- ldrh r0, [r0]
- ldrh r3, [r2]
- adds r0, r3
- strh r0, [r2]
- movs r4, 0xA0
- lsls r4, 1
- adds r0, r1, r4
- bl sub_8082CB4
-_08082DEA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8082D28
-
- thumb_func_start sub_8082DF4
-sub_8082DF4: @ 8082DF4
- push {r4-r6,lr}
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- movs r6, 0x8E
- lsls r6, 1
- adds r0, r6
- ldrh r1, [r0]
- movs r0, 0x14
- bl SetGpuReg
- ldr r0, [r4]
- movs r5, 0x8F
- lsls r5, 1
- adds r0, r5
- ldrh r1, [r0]
- movs r0, 0x16
- bl SetGpuReg
- ldr r0, [r4]
- adds r0, r6
- ldrh r1, [r0]
- movs r0, 0x10
- bl SetGpuReg
- ldr r0, [r4]
- adds r0, r5
- ldrh r1, [r0]
- movs r0, 0x12
- bl SetGpuReg
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8082DF4
-
- thumb_func_start sub_8082E3C
-sub_8082E3C: @ 8082E3C
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- ldrh r1, [r2, 0x32]
- adds r0, r1
- strh r0, [r2, 0x32]
- ldrh r0, [r2, 0x30]
- ldrh r1, [r2, 0x34]
- adds r0, r1
- strh r0, [r2, 0x34]
- movs r1, 0x32
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bge _08082E5A
- adds r0, 0x7
-_08082E5A:
- asrs r0, 3
- strh r0, [r2, 0x24]
- movs r1, 0x34
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bge _08082E68
- adds r0, 0x7
-_08082E68:
- asrs r0, 3
- strh r0, [r2, 0x26]
- adds r0, r2, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08082E80
- adds r0, r2, 0
- bl DestroySprite
-_08082E80:
- pop {r0}
- bx r0
- thumb_func_end sub_8082E3C
-
- thumb_func_start sub_8082E84
-sub_8082E84: @ 8082E84
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- bl Random
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0x1
- ands r1, r0
- adds r0, r1, 0x1
- cmp r0, 0
- beq _08082F40
- ldr r0, =gSineTable
- mov r9, r0
- ldr r2, =gSprites
- mov r10, r2
- adds r6, r1, 0x1
- movs r3, 0x1F
- mov r8, r3
- movs r7, 0x10
-_08082EB0:
- bl Random
- ldr r1, =gUnknown_020322A4
- ldr r4, [r1]
- adds r4, 0x4A
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x14
- bl __umodsi3
- ldrh r1, [r4]
- adds r1, r0
- lsls r1, 16
- movs r0, 0xFF
- lsls r0, 16
- ands r0, r1
- lsrs r2, r0, 16
- adds r0, r2, 0
- adds r0, 0x40
- lsls r0, 1
- add r0, r9
- movs r3, 0
- ldrsh r1, [r0, r3]
- cmp r1, 0
- bge _08082EE4
- adds r1, 0x3
-_08082EE4:
- asrs r1, 2
- lsls r0, r2, 1
- add r0, r9
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0
- bge _08082EF4
- adds r0, 0x3
-_08082EF4:
- asrs r2, r0, 2
- adds r1, 0x78
- adds r2, 0x50
- ldr r0, =gUnknown_08339BE0
- movs r3, 0x1
- bl CreateSprite
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl Random
- lsls r5, r4, 4
- adds r5, r4
- lsls r5, 2
- mov r3, r10
- adds r4, r5, r3
- lsls r0, 16
- lsrs r0, 16
- mov r1, r8
- ands r0, r1
- subs r0, r7, r0
- strh r0, [r4, 0x2E]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- mov r2, r8
- ands r0, r2
- subs r0, r7, r0
- strh r0, [r4, 0x30]
- ldr r3, =gSprites + 0x1C
- adds r5, r3
- ldr r0, =sub_8082E3C
- str r0, [r5]
- subs r6, 0x1
- cmp r6, 0
- bne _08082EB0
-_08082F40:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8082E84
-
- thumb_func_start sub_8082F68
-sub_8082F68: @ 8082F68
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- movs r1, 0x3
- bl __divsi3
- negs r0, r0
- strh r0, [r4, 0x26]
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08082F94
- adds r0, r4, 0
- bl DestroySprite
-_08082F94:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8082F68
-
- thumb_func_start sub_8082F9C
-sub_8082F9C: @ 8082F9C
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- lsls r0, 1
- negs r0, r0
- strh r0, [r2, 0x26]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0xC
- negs r1, r1
- cmp r0, r1
- bge _08082FC0
- ldr r0, =0x0000fff4
- strh r0, [r2, 0x26]
-_08082FC0:
- adds r0, r2, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08082FD4
- adds r0, r2, 0
- bl DestroySprite
-_08082FD4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8082F9C
-
- thumb_func_start sub_8082FDC
-sub_8082FDC: @ 8082FDC
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- ldr r2, =gUnknown_020322A4
- ldr r3, [r2]
- lsls r4, r0, 1
- adds r2, r3, 0
- adds r2, 0x74
- adds r2, r4
- strh r1, [r2]
- lsls r0, 4
- movs r2, 0xAC
- lsls r2, 1
- adds r0, r2
- adds r3, r0
- adds r0, r3, 0
- bl sub_807FE14
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8082FDC
-
- thumb_func_start sub_8083010
-sub_8083010: @ 8083010
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0808304C
- cmp r0, 0x1
- bgt _08083026
- cmp r0, 0
- beq _0808302C
- b _080830B2
-_08083026:
- cmp r0, 0x2
- beq _08083066
- b _080830B2
-_0808302C:
- ldrh r0, [r4, 0x30]
- adds r0, 0x8
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x58
- ble _080830B2
- movs r0, 0x58
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0x38
- bl PlaySE
- b _080830B2
-_0808304C:
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _080830B2
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0
- strh r0, [r4, 0x32]
- b _080830B2
-_08083066:
- ldrh r0, [r4, 0x30]
- adds r0, 0x4
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB0
- ble _080830B2
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- adds r1, r0, 0
- strh r0, [r4, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _080830A0
- adds r0, r4, 0
- bl DestroySprite
- ldr r0, =gUnknown_08339C60
- movs r2, 0x14
- negs r2, r2
- movs r1, 0x78
- movs r3, 0x2
- bl CreateSprite
- b _080830B2
- .pool
-_080830A0:
- movs r0, 0
- strh r0, [r4, 0x2E]
- ldr r0, =0x0000fff0
- strh r0, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
-_080830B2:
- ldrh r0, [r4, 0x30]
- strh r0, [r4, 0x26]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8083010
-
- thumb_func_start sub_80830C0
-sub_80830C0: @ 80830C0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080830FC
- cmp r0, 0x1
- bgt _080830D6
- cmp r0, 0
- beq _080830DC
- b _08083130
-_080830D6:
- cmp r0, 0x2
- beq _08083112
- b _08083130
-_080830DC:
- ldrh r0, [r4, 0x30]
- adds r0, 0x8
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5C
- ble _08083130
- movs r0, 0x5C
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0x15
- bl PlaySE
- b _08083130
-_080830FC:
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _08083130
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _08083130
-_08083112:
- ldrh r0, [r4, 0x30]
- adds r0, 0x4
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB0
- ble _08083130
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- adds r0, r4, 0
- bl DestroySprite
-_08083130:
- ldrh r0, [r4, 0x30]
- strh r0, [r4, 0x26]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80830C0
-
- thumb_func_start sub_8083140
-sub_8083140: @ 8083140
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r3, r1, 16
- ldr r1, =gUnknown_020322A4
- ldr r1, [r1]
- movs r2, 0x8C
- lsls r2, 1
- adds r1, r2
- ldrh r2, [r1]
- cmp r2, r0
- bcs _08083166
- adds r0, r2, 0x2
- strh r0, [r1]
- ldrh r0, [r1]
- adds r1, r3, 0
- bl sub_8083170
-_08083166:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8083140
-
- thumb_func_start sub_8083170
-sub_8083170: @ 8083170
- push {r4-r7,lr}
- lsls r0, 16
- lsls r1, 16
- lsrs r1, 16
- ldr r7, =0x06006000
- lsrs r0, 10
- bl __divsi3
- adds r1, r0, 0
- cmp r1, 0
- bge _08083188
- adds r0, r1, 0x7
-_08083188:
- asrs r4, r0, 3
- movs r3, 0
- cmp r3, r4
- bge _080831B0
- ldr r0, =0x000080e9
- adds r6, r0, 0
- adds r0, 0x10
- adds r5, r0, 0
- adds r2, r7, 0
- adds r2, 0x56
- adds r0, r7, 0
- adds r3, r4, 0
-_080831A0:
- strh r6, [r0, 0x16]
- strh r5, [r2]
- adds r2, 0x2
- adds r0, 0x2
- subs r3, 0x1
- cmp r3, 0
- bne _080831A0
- adds r3, r4, 0
-_080831B0:
- adds r0, r1, 0
- cmp r1, 0
- bge _080831B8
- adds r0, r1, 0x7
-_080831B8:
- asrs r2, r0, 3
- lsls r0, r2, 3
- subs r2, r1, r0
- cmp r2, 0
- beq _080831D6
- lsls r0, r3, 1
- adds r0, r7
- ldr r4, =0xffff80e1
- adds r1, r2, r4
- strh r1, [r0, 0x16]
- adds r0, 0x56
- adds r4, 0x10
- adds r1, r2, r4
- strh r1, [r0]
- adds r3, 0x1
-_080831D6:
- cmp r3, 0x7
- bgt _080831FA
- ldr r0, =0x000080e1
- adds r4, r0, 0
- adds r0, 0x10
- adds r2, r0, 0
- lsls r1, r3, 1
- adds r0, r1, 0
- adds r0, 0x56
- adds r0, r7
- adds r1, r7
-_080831EC:
- strh r4, [r1, 0x16]
- strh r2, [r0]
- adds r0, 0x2
- adds r1, 0x2
- adds r3, 0x1
- cmp r3, 0x7
- ble _080831EC
-_080831FA:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8083170
-
- thumb_func_start sub_8083210
-sub_8083210: @ 8083210
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =0x00057e40
- muls r0, r1
- cmp r0, 0
- bge _08083222
- ldr r1, =0x0000ffff
- adds r0, r1
-_08083222:
- asrs r0, 16
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8083210
-
- thumb_func_start sub_8083230
-sub_8083230: @ 8083230
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 16
- lsrs r0, 16
- bl sub_8083210
- adds r5, r0, 0
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x4E
- ldrh r0, [r1]
- cmp r0, r5
- bcs _0808324E
- strh r5, [r1]
-_0808324E:
- movs r6, 0
-_08083250:
- mov r0, sp
- adds r4, r0, r6
- adds r0, r5, 0
- movs r1, 0xA
- bl __umodsi3
- strb r0, [r4]
- adds r0, r5, 0
- movs r1, 0xA
- bl __udivsi3
- adds r5, r0, 0
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x4
- bls _08083250
- ldr r2, =0x06006458
- mov r0, sp
- ldr r3, =0x00008072
- adds r1, r3, 0
- ldrb r0, [r0, 0x4]
- adds r0, r1, r0
- strh r0, [r2]
- adds r2, 0x2
- mov r0, sp
- ldrb r0, [r0, 0x3]
- adds r0, r1
- strh r0, [r2]
- adds r2, 0x2
- mov r0, sp
- ldrb r0, [r0, 0x2]
- adds r0, r1
- strh r0, [r2]
- adds r2, 0x4
- mov r0, sp
- ldrb r0, [r0, 0x1]
- adds r0, r1
- strh r0, [r2]
- adds r2, 0x2
- mov r0, sp
- ldrb r0, [r0]
- adds r1, r0
- strh r1, [r2]
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8083230
-
- thumb_func_start sub_80832BC
-sub_80832BC: @ 80832BC
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r4, r1, 16
- lsrs r5, r4, 16
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _080832E0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r5, 0
- bl __umodsi3
- lsrs r1, r4, 17
- subs r0, r1
- strh r0, [r6]
-_080832E0:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80832BC
-
- thumb_func_start sub_80832E8
-sub_80832E8: @ 80832E8
- push {lr}
- adds r1, r0, 0
- ldrh r2, [r1]
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bge _080832FA
- adds r0, r2, 0x1
- strh r0, [r1]
-_080832FA:
- ldrh r2, [r1]
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0
- ble _08083308
- subs r0, r2, 0x1
- strh r0, [r1]
-_08083308:
- pop {r0}
- bx r0
- thumb_func_end sub_80832E8
-
- thumb_func_start sub_808330C
-sub_808330C: @ 808330C
- push {r4,lr}
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- movs r1, 0x8E
- lsls r1, 1
- adds r0, r1
- bl sub_80832E8
- ldr r0, [r4]
- movs r1, 0x8F
- lsls r1, 1
- adds r0, r1
- bl sub_80832E8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808330C
-
- thumb_func_start sub_8083334
-sub_8083334: @ 8083334
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r1, 16
- movs r5, 0x8
- cmp r1, 0x9
- bhi _08083344
- movs r5, 0x10
-_08083344:
- ldrh r0, [r4]
- movs r2, 0
- ldrsh r1, [r4, r2]
- cmp r1, 0
- bne _08083362
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r5, 0
- bl __modsi3
- lsrs r1, r5, 1
- subs r0, r1
- b _08083376
-_08083362:
- cmp r1, 0
- bge _0808336A
- adds r0, 0x1
- strh r0, [r4]
-_0808336A:
- ldrh r1, [r4]
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0
- ble _08083378
- subs r0, r1, 0x1
-_08083376:
- strh r0, [r4]
-_08083378:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8083334
-
- thumb_func_start sub_8083380
-sub_8083380: @ 8083380
- push {r4,r5,lr}
- ldr r5, =gUnknown_020322A4
- ldr r2, [r5]
- movs r4, 0x84
- lsls r4, 1
- adds r0, r2, r4
- ldr r1, [r0]
- cmp r1, 0
- bne _080833A0
- movs r3, 0x8E
- lsls r3, 1
- adds r0, r2, r3
- strh r1, [r0]
- adds r3, 0x2
- adds r0, r2, r3
- strh r1, [r0]
-_080833A0:
- ldr r0, [r5]
- adds r2, r0, r4
- ldr r1, [r2]
- adds r1, 0x1
- str r1, [r2]
- movs r2, 0x8E
- lsls r2, 1
- adds r0, r2
- lsls r1, 16
- lsrs r1, 16
- bl sub_8083334
- ldr r1, [r5]
- movs r3, 0x8F
- lsls r3, 1
- adds r0, r1, r3
- adds r1, r4
- ldrh r1, [r1]
- bl sub_8083334
- ldr r2, [r5]
- adds r0, r2, r4
- ldr r0, [r0]
- cmp r0, 0x14
- beq _080833DC
- movs r0, 0
- b _080833F0
- .pool
-_080833DC:
- movs r1, 0x8E
- lsls r1, 1
- adds r0, r2, r1
- movs r1, 0
- strh r1, [r0]
- movs r3, 0x8F
- lsls r3, 1
- adds r0, r2, r3
- strh r1, [r0]
- movs r0, 0x1
-_080833F0:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8083380
-
- thumb_func_start sub_80833F8
-sub_80833F8: @ 80833F8
- ldr r1, =gUnknown_020322A4
- ldr r2, [r1]
- movs r3, 0x8E
- lsls r3, 1
- adds r1, r2, r3
- ldrh r1, [r1]
- negs r1, r1
- strh r1, [r0, 0x24]
- adds r3, 0x2
- adds r1, r2, r3
- ldrh r1, [r1]
- negs r1, r1
- strh r1, [r0, 0x26]
- bx lr
- .pool
- thumb_func_end sub_80833F8
-
- thumb_func_start UpdateBerryBlenderRecord
-@ void UpdateBerryBlenderRecord()
-UpdateBerryBlenderRecord: @ 8083418
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 1
- ldr r3, =0x000009bc
- adds r2, r3
- adds r2, r0
- adds r1, 0x4E
- ldrh r1, [r1]
- ldrh r0, [r2]
- cmp r0, r1
- bcs _0808343E
- strh r1, [r2]
-_0808343E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end UpdateBerryBlenderRecord
-
- thumb_func_start berry_blender_related
-berry_blender_related: @ 8083450
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4C
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r4, r1, 0
- cmp r0, 0x6
- bls _0808346A
- b _08083898
-_0808346A:
- lsls r0, 2
- ldr r1, =_0808347C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0808347C:
- .4byte _08083498
- .4byte _080834AE
- .4byte _080834C8
- .4byte _08083518
- .4byte _08083790
- .4byte _080837A8
- .4byte _0808386C
-_08083498:
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, [r4]
- movs r1, 0x84
- lsls r1, 1
- adds r0, r1
- movs r1, 0x11
- str r1, [r0]
- b _08083898
-_080834AE:
- ldr r1, [r4]
- movs r3, 0x84
- lsls r3, 1
- adds r2, r1, r3
- ldr r0, [r2]
- subs r0, 0xA
- str r0, [r2]
- cmp r0, 0
- blt _080834C2
- b _08083898
-_080834C2:
- movs r0, 0
- str r0, [r2]
- b _08083854
-_080834C8:
- ldr r1, [r4]
- movs r0, 0x84
- lsls r0, 1
- adds r1, r0
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x14
- bgt _080834DC
- b _08083898
-_080834DC:
- movs r6, 0
-_080834DE:
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- adds r0, 0x46
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x2
- bls _080834DE
- ldr r1, [r4]
- movs r3, 0x84
- lsls r3, 1
- adds r2, r1, r3
- movs r0, 0
- str r0, [r2]
- b _08083854
- .pool
-_08083518:
- ldr r4, =sText_BlendingResults
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0xA8
- bl GetStringCenterAlignXOffset
- lsls r2, r0, 24
- lsrs r2, 24
- movs r0, 0xFF
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- movs r0, 0x5
- adds r1, r4, 0
- movs r3, 0x1
- bl sub_80840D4
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- adds r2, r0, 0
- adds r2, 0x7C
- ldrb r0, [r2]
- movs r3, 0x15
- mov r9, r3
- cmp r0, 0x4
- bne _08083550
- movs r0, 0x11
- mov r9, r0
-_08083550:
- movs r6, 0
- mov r3, sp
- adds r3, 0x10
- str r3, [sp, 0x48]
- ldrb r2, [r2]
- cmp r6, r2
- bcs _0808361A
- adds r7, r1, 0
- movs r0, 0x3
- mov r10, r0
-_08083564:
- ldr r0, [r7]
- movs r2, 0x9E
- lsls r2, 1
- adds r1, r0, r2
- adds r1, r6
- ldrb r5, [r1]
- adds r0, 0x9F
- adds r6, 0x1
- mov r8, r6
- mov r1, r8
- movs r2, 0
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- ldr r0, [r7]
- adds r0, 0x9F
- ldr r1, =sText_Dot
- bl StringAppend
- ldr r0, [r7]
- adds r0, 0x9F
- ldr r1, =gText_Space
- bl StringAppend
- ldr r0, [r7]
- adds r0, 0x9F
- lsls r4, r5, 3
- subs r4, r5
- lsls r4, 2
- ldr r3, =gLinkPlayers + 8
- adds r1, r4, r3
- bl StringAppend
- ldr r1, [r7]
- adds r1, 0x9F
- mov r0, r9
- lsls r6, r0, 24
- lsrs r6, 24
- movs r2, 0xFF
- str r2, [sp]
- mov r3, r10
- str r3, [sp, 0x4]
- movs r0, 0x5
- movs r2, 0x8
- adds r3, r6, 0
- bl sub_80840D4
- ldr r1, [r7]
- adds r0, r1, 0
- adds r0, 0x9F
- lsls r5, 4
- adds r5, r1
- movs r1, 0xAD
- lsls r1, 1
- adds r5, r1
- adds r1, r5, 0
- bl StringCopy
- ldr r0, [r7]
- adds r0, 0x9F
- ldr r2, =gLinkPlayers
- adds r4, r2
- ldrb r1, [r4, 0x1A]
- bl ConvertInternationalString
- ldr r0, [r7]
- adds r0, 0x9F
- ldr r1, =sText_SpaceBerry
- bl StringAppend
- ldr r1, [r7]
- adds r1, 0x9F
- movs r3, 0xFF
- str r3, [sp]
- mov r0, r10
- str r0, [sp, 0x4]
- movs r0, 0x5
- movs r2, 0x54
- adds r3, r6, 0
- bl sub_80840D4
- movs r1, 0x10
- add r9, r1
- mov r2, r8
- lsls r2, 16
- lsrs r6, r2, 16
- ldr r0, [r7]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r6, r0
- bcc _08083564
-_0808361A:
- ldr r1, =sText_MaximumSpeed
- movs r3, 0xFF
- mov r10, r3
- str r3, [sp]
- movs r0, 0x3
- mov r9, r0
- str r0, [sp, 0x4]
- movs r0, 0x5
- movs r2, 0
- movs r3, 0x51
- bl sub_80840D4
- ldr r6, =gUnknown_020322A4
- ldr r0, [r6]
- adds r4, r0, 0
- adds r4, 0x9F
- adds r0, 0x4E
- ldrh r0, [r0]
- movs r1, 0x64
- bl __udivsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r0, [r6]
- adds r0, 0x9F
- ldr r1, =sText_Dot
- bl StringAppend
- ldr r0, [r6]
- adds r0, 0x4E
- ldrh r0, [r0]
- movs r1, 0x64
- bl __umodsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r0, [sp, 0x48]
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, [r6]
- adds r0, 0x9F
- ldr r1, [sp, 0x48]
- bl StringAppend
- ldr r0, [r6]
- adds r0, 0x9F
- ldr r1, =sText_RPM
- bl StringAppend
- ldr r1, [r6]
- adds r1, 0x9F
- movs r0, 0x1
- movs r2, 0xA8
- bl GetStringRightAlignXOffset
- ldr r1, [r6]
- adds r1, 0x9F
- lsls r2, r0, 24
- lsrs r2, 24
- mov r3, r10
- str r3, [sp]
- mov r0, r9
- str r0, [sp, 0x4]
- movs r0, 0x5
- movs r3, 0x51
- bl sub_80840D4
- ldr r1, =sText_Time
- mov r2, r10
- str r2, [sp]
- mov r3, r9
- str r3, [sp, 0x4]
- movs r0, 0x5
- movs r2, 0
- movs r3, 0x61
- bl sub_80840D4
- ldr r5, [r6]
- movs r1, 0x82
- lsls r1, 1
- adds r0, r5, r1
- ldr r0, [r0]
- mov r8, r0
- movs r1, 0x3C
- bl __udivsi3
- movs r1, 0x3C
- bl __umodsi3
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- movs r1, 0xE1
- lsls r1, 4
- mov r0, r8
- bl __udivsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r5, 0x9F
- adds r0, r5, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, [r6]
- adds r0, 0x9F
- ldr r1, =sText_Min
- bl StringAppend
- adds r1, r4, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, [r6]
- adds r0, 0x9F
- ldr r1, =sText_Sec
- bl StringAppend
- ldr r1, [r6]
- adds r1, 0x9F
- movs r0, 0x1
- movs r2, 0xA8
- bl GetStringRightAlignXOffset
- ldr r1, [r6]
- adds r1, 0x9F
- lsls r2, r0, 24
- lsrs r2, 24
- mov r3, r10
- str r3, [sp]
- mov r0, r9
- str r0, [sp, 0x4]
- movs r0, 0x5
- movs r3, 0x61
- bl sub_80840D4
- ldr r1, [r6]
- movs r3, 0x84
- lsls r3, 1
- adds r2, r1, r3
- movs r0, 0
- str r0, [r2]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r0, 0x5
- movs r1, 0x2
- bl CopyWindowToVram
- b _08083898
- .pool
-_08083790:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0808379E
- b _08083898
-_0808379E:
- ldr r1, [r4]
- b _08083854
- .pool
-_080837A8:
- movs r0, 0x5
- movs r1, 0x1
- bl sub_8198070
- movs r6, 0
- add r7, sp, 0x40
- ldr r5, =gUnknown_020322A4
-_080837B6:
- ldr r0, [r5]
- lsls r2, r6, 1
- adds r0, 0x74
- adds r0, r2
- ldrh r1, [r0]
- cmp r1, 0
- beq _080837CC
- add r0, sp, 0x38
- adds r0, r2
- subs r1, 0x85
- strh r1, [r0]
-_080837CC:
- ldr r0, [r5]
- adds r0, 0x8E
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, 0xFF
- beq _080837EA
- lsls r4, r6, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl PutWindowTilemap
- adds r0, r4, 0
- movs r1, 0x3
- bl CopyWindowToVram
-_080837EA:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bls _080837B6
- bl sub_8081E20
- ldr r4, =gUnknown_020322A4
- ldr r3, [r4]
- movs r1, 0xAC
- lsls r1, 1
- adds r0, r3, r1
- adds r1, r3, 0
- adds r1, 0x7C
- ldrb r2, [r1]
- subs r1, 0x2E
- ldrh r1, [r1]
- str r1, [sp]
- adds r1, r7, 0
- add r3, sp, 0x8
- bl sub_8081BE0
- ldr r1, [r4]
- adds r1, 0x9F
- adds r0, r7, 0
- bl sub_80838AC
- ldr r1, [r4]
- movs r2, 0xD4
- lsls r2, 1
- adds r1, r2
- adds r0, r7, 0
- bl sub_8083F94
- ldr r0, =sub_8083F3C
- movs r1, 0x6
- bl CreateTask
- bl sub_80EECEC
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- movs r1, 0x1
- bl RemoveBagItem
- adds r0, r7, 0
- bl sub_8136F2C
- ldr r1, [r4]
- ldr r3, =0x000011b8
- adds r2, r1, r3
- movs r0, 0
- strh r0, [r2]
-_08083854:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08083898
- .pool
-_0808386C:
- ldr r4, [r4]
- ldr r0, =0x000011b8
- adds r5, r4, r0
- adds r4, 0x9F
- bl sav2_get_text_speed
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_808417C
- cmp r0, 0
- beq _08083898
- bl UpdateBerryBlenderRecord
- movs r0, 0x1
- b _0808389A
- .pool
-_08083898:
- movs r0, 0
-_0808389A:
- add sp, 0x4C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end berry_blender_related
-
- thumb_func_start sub_80838AC
-sub_80838AC: @ 80838AC
- push {r4-r6,lr}
- sub sp, 0xC
- adds r5, r0, 0
- adds r6, r1, 0
- movs r0, 0xFF
- strb r0, [r6]
- ldr r1, =gPokeblockNames
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r6, 0
- bl StringCopy
- ldr r1, =gText_WasMade
- adds r0, r6, 0
- bl StringAppend
- ldr r1, =sText_NewLine
- adds r0, r6, 0
- bl StringAppend
- adds r0, r5, 0
- bl sub_8136EA4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- bl sub_8136EDC
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r1, =sText_TheLevelIs
- adds r0, r6, 0
- bl StringAppend
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r0, r6, 0
- mov r1, sp
- bl StringAppend
- ldr r1, =sText_TheFeelIs
- adds r0, r6, 0
- bl StringAppend
- mov r0, sp
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r0, r6, 0
- mov r1, sp
- bl StringAppend
- ldr r1, =sText_Dot2
- adds r0, r6, 0
- bl StringAppend
- ldr r1, =gText_NewParagraph
- adds r0, r6, 0
- bl StringAppend
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80838AC
-
- thumb_func_start sub_808395C
-sub_808395C: @ 808395C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r0
- mov r12, r2
- lsls r1, 24
- lsrs r7, r1, 24
- movs r0, 0
- cmp r0, r7
- bge _080839A8
-_08083972:
- movs r5, 0
- adds r1, r0, 0x1
- mov r8, r1
- cmp r5, r7
- bge _080839A2
- mov r1, r9
- adds r6, r1, r0
-_08083980:
- ldrb r4, [r6]
- lsls r1, r4, 2
- add r1, r12
- mov r0, r9
- adds r2, r0, r5
- ldrb r3, [r2]
- lsls r0, r3, 2
- add r0, r12
- ldr r1, [r1]
- ldr r0, [r0]
- cmp r1, r0
- bls _0808399C
- strb r3, [r6]
- strb r4, [r2]
-_0808399C:
- adds r5, 0x1
- cmp r5, r7
- blt _08083980
-_080839A2:
- mov r0, r8
- cmp r0, r7
- blt _08083972
-_080839A8:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_808395C
-
- thumb_func_start sub_80839B4
-sub_80839B4: @ 80839B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- movs r5, 0
- ldr r2, =gUnknown_020322A4
- ldr r0, [r2]
- adds r0, 0x7C
- adds r1, r2, 0
- add r3, sp, 0x4
- mov r10, r3
- b _080839E4
- .pool
-_080839D4:
- mov r4, sp
- adds r0, r4, r5
- strb r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, [r2]
- adds r0, 0x7C
-_080839E4:
- ldrb r0, [r0]
- cmp r5, r0
- bcc _080839D4
- movs r5, 0
- ldr r0, [r1]
- adds r1, r0, 0
- adds r1, 0x7C
- ldrb r2, [r1]
- cmp r5, r2
- bcs _08083A5E
- mov r9, r10
- movs r3, 0x92
- lsls r3, 1
- adds r3, r0
- mov r8, r3
- mov r12, r1
- movs r4, 0x93
- lsls r4, 1
- adds r7, r0, r4
- movs r1, 0x94
- lsls r1, 1
- adds r6, r0, r1
-_08083A10:
- lsls r4, r5, 2
- add r4, r9
- lsls r3, r5, 1
- adds r3, r5
- lsls r3, 1
- mov r2, r8
- adds r0, r2, r3
- ldrh r2, [r0]
- lsls r0, r2, 5
- subs r0, r2
- lsls r1, r0, 6
- subs r1, r0
- lsls r1, 3
- adds r1, r2
- lsls r1, 6
- str r1, [r4]
- adds r0, r7, r3
- ldrh r2, [r0]
- lsls r0, r2, 5
- subs r0, r2
- lsls r0, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0
- str r1, [r4]
- movs r0, 0xFA
- lsls r0, 2
- adds r1, r0
- adds r3, r6, r3
- ldrh r0, [r3]
- subs r1, r0
- str r1, [r4]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- mov r1, r12
- ldrb r1, [r1]
- cmp r5, r1
- bcc _08083A10
-_08083A5E:
- ldr r4, =gUnknown_020322A4
- ldr r0, [r4]
- adds r0, 0x7C
- ldrb r1, [r0]
- mov r0, sp
- mov r2, r10
- bl sub_808395C
- movs r5, 0
- ldr r0, [r4]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r5, r0
- bcs _08083A9E
- adds r2, r4, 0
- movs r3, 0x9E
- lsls r3, 1
-_08083A80:
- ldr r1, [r2]
- adds r1, r3
- adds r1, r5
- mov r4, sp
- adds r0, r4, r5
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, [r2]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r5, r0
- bcc _08083A80
-_08083A9E:
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08083AB4
- movs r3, 0
- b _08083ABC
- .pool
-_08083AB4:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r3, r0, 24
-_08083ABC:
- movs r5, 0
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r5, r0
- bcs _08083AF2
- movs r6, 0x9E
- lsls r6, 1
- movs r4, 0xD2
- lsls r4, 1
-_08083AD2:
- ldr r2, [r1]
- adds r0, r2, r6
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, r3
- bne _08083AE2
- adds r0, r2, r4
- strb r5, [r0]
-_08083AE2:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, [r1]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r5, r0
- bcc _08083AD2
-_08083AF2:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80839B4
-
- thumb_func_start sub_8083B08
-sub_8083B08: @ 8083B08
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- ldr r1, =gUnknown_020322A4
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r2, r1, 0
- cmp r0, 0x6
- bls _08083B22
- b _08083E12
-_08083B22:
- lsls r0, 2
- ldr r1, =_08083B34
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08083B34:
- .4byte _08083B50
- .4byte _08083B66
- .4byte _08083B80
- .4byte _08083B9A
- .4byte _08083DC8
- .4byte _08083DE2
- .4byte _08083E08
-_08083B50:
- ldr r1, [r2]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, [r2]
- movs r1, 0x84
- lsls r1, 1
- adds r0, r1
- movs r1, 0xFF
- str r1, [r0]
- b _08083E12
-_08083B66:
- ldr r1, [r2]
- movs r3, 0x84
- lsls r3, 1
- adds r2, r1, r3
- ldr r0, [r2]
- subs r0, 0xA
- str r0, [r2]
- cmp r0, 0
- blt _08083B7A
- b _08083E12
-_08083B7A:
- movs r0, 0
- str r0, [r2]
- b _08083DF8
-_08083B80:
- ldr r1, [r2]
- movs r0, 0x84
- lsls r0, 1
- adds r2, r1, r0
- ldr r0, [r2]
- adds r0, 0x1
- str r0, [r2]
- cmp r0, 0x14
- bgt _08083B94
- b _08083E12
-_08083B94:
- movs r0, 0
- str r0, [r2]
- b _08083DF8
-_08083B9A:
- movs r0, 0x5
- movs r1, 0
- movs r2, 0x1
- movs r3, 0xD
- bl SetWindowBorderStyle
- ldr r4, =sText_Ranking
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0xA8
- bl GetStringCenterAlignXOffset
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0xFF
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- movs r0, 0x5
- adds r1, r4, 0
- movs r3, 0x1
- bl sub_80840D4
- ldr r1, =gUnknown_08339B40
- mov r8, r1
- mov r0, r8
- movs r1, 0x80
- movs r2, 0x34
- movs r3, 0
- bl CreateSprite
- ldr r7, =gUnknown_020322A4
- ldr r1, [r7]
- adds r1, 0x46
- strb r0, [r1]
- ldr r0, [r7]
- adds r0, 0x46
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r6, =gSprites
- adds r0, r6
- movs r1, 0x3
- bl StartSpriteAnim
- ldr r0, [r7]
- adds r0, 0x46
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r5, r6, 0
- adds r5, 0x1C
- adds r0, r5
- ldr r4, =SpriteCallbackDummy
- str r4, [r0]
- mov r0, r8
- movs r1, 0xA0
- movs r2, 0x34
- movs r3, 0
- bl CreateSprite
- ldr r1, [r7]
- adds r1, 0x47
- strb r0, [r1]
- ldr r0, [r7]
- adds r0, 0x47
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- str r4, [r0]
- mov r0, r8
- movs r1, 0xC0
- movs r2, 0x34
- movs r3, 0
- bl CreateSprite
- ldr r1, [r7]
- adds r1, 0x48
- strb r0, [r1]
- ldr r0, [r7]
- adds r0, 0x48
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, [r7]
- adds r0, 0x48
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- str r4, [r0]
- bl sub_80839B4
- movs r2, 0x29
- str r2, [sp, 0x8]
- movs r2, 0
- ldr r0, [r7]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r2, r0
- bcc _08083C7C
- b _08083D8A
-_08083C7C:
- movs r3, 0xFF
- mov r10, r3
- movs r0, 0x3
- mov r9, r0
-_08083C84:
- ldr r0, [r7]
- movs r3, 0x9E
- lsls r3, 1
- adds r1, r0, r3
- adds r1, r2
- ldrb r5, [r1]
- adds r0, 0x9F
- adds r2, 0x1
- mov r8, r2
- mov r1, r8
- movs r2, 0
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- ldr r0, [r7]
- adds r0, 0x9F
- ldr r1, =sText_Dot
- bl StringAppend
- ldr r0, [r7]
- adds r0, 0x9F
- ldr r1, =gText_Space
- bl StringAppend
- ldr r0, [r7]
- adds r0, 0x9F
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- ldr r2, =gLinkPlayers + 8
- adds r1, r2
- bl StringAppend
- ldr r1, [r7]
- adds r1, 0x9F
- ldr r0, [sp, 0x8]
- lsls r6, r0, 24
- lsrs r6, 24
- mov r2, r10
- str r2, [sp]
- mov r3, r9
- str r3, [sp, 0x4]
- movs r0, 0x5
- movs r2, 0
- adds r3, r6, 0
- bl sub_80840D4
- ldr r1, [r7]
- adds r0, r1, 0
- adds r0, 0x9F
- lsls r4, r5, 1
- adds r4, r5
- lsls r4, 1
- movs r2, 0x92
- lsls r2, 1
- adds r1, r2
- adds r1, r4
- ldrh r1, [r1]
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r1, [r7]
- adds r1, 0x9F
- mov r3, r10
- str r3, [sp]
- mov r0, r9
- str r0, [sp, 0x4]
- movs r0, 0x5
- movs r2, 0x4E
- adds r3, r6, 0
- bl sub_80840D4
- ldr r1, [r7]
- adds r0, r1, 0
- adds r0, 0x9F
- movs r2, 0x93
- lsls r2, 1
- adds r1, r2
- adds r1, r4
- ldrh r1, [r1]
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r1, [r7]
- adds r1, 0x9F
- mov r3, r10
- str r3, [sp]
- mov r0, r9
- str r0, [sp, 0x4]
- movs r0, 0x5
- movs r2, 0x6E
- adds r3, r6, 0
- bl sub_80840D4
- ldr r1, [r7]
- adds r0, r1, 0
- adds r0, 0x9F
- movs r2, 0x94
- lsls r2, 1
- adds r1, r2
- adds r1, r4
- ldrh r1, [r1]
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r1, [r7]
- adds r1, 0x9F
- mov r3, r10
- str r3, [sp]
- mov r0, r9
- str r0, [sp, 0x4]
- movs r0, 0x5
- movs r2, 0x8E
- adds r3, r6, 0
- bl sub_80840D4
- ldr r1, [sp, 0x8]
- adds r1, 0x10
- str r1, [sp, 0x8]
- mov r2, r8
- lsls r2, 16
- lsrs r2, 16
- ldr r0, [r7]
- adds r0, 0x7C
- ldrb r0, [r0]
- cmp r2, r0
- bcs _08083D8A
- b _08083C84
-_08083D8A:
- movs r0, 0x5
- bl PutWindowTilemap
- movs r0, 0x5
- movs r1, 0x3
- bl CopyWindowToVram
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
- movs r3, 0x84
- lsls r3, 1
- adds r2, r1, r3
- movs r0, 0
- str r0, [r2]
- b _08083DF8
- .pool
-_08083DC8:
- ldr r2, [r2]
- movs r0, 0x84
- lsls r0, 1
- adds r1, r2, r0
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x14
- ble _08083E12
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- b _08083E12
-_08083DE2:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08083E12
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gUnknown_020322A4
- ldr r1, [r0]
-_08083DF8:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08083E12
- .pool
-_08083E08:
- ldr r1, [r2]
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x1
- b _08083E14
-_08083E12:
- movs r0, 0
-_08083E14:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8083B08
-
- thumb_func_start ShowBerryBlenderRecordWindow
-ShowBerryBlenderRecordWindow: @ 8083E24
- push {r4-r7,lr}
- sub sp, 0x34
- ldr r0, =gUnknown_08339D14
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x2C]
- str r1, [sp, 0x30]
- ldr r5, =gUnknown_0203AB74
- add r0, sp, 0x2C
- bl AddWindow
- strb r0, [r5]
- ldrb r0, [r5]
- movs r1, 0
- bl sub_81973FC
- ldrb r0, [r5]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r6, =gText_BlenderMaxSpeedRecord
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x90
- bl GetStringCenterAlignXOffset
- adds r3, r0, 0
- ldrb r0, [r5]
- lsls r3, 24
- lsrs r3, 24
- movs r1, 0x1
- str r1, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- adds r2, r6, 0
- bl PrintTextOnWindow
- ldrb r0, [r5]
- ldr r2, =gText_234Players
- movs r1, 0x29
- str r1, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0x4
- bl PrintTextOnWindow
- movs r6, 0
- movs r7, 0xA4
- lsls r7, 22
-_08083E8A:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- lsls r1, r6, 1
- ldr r2, =0x000009bc
- adds r0, r2
- adds r0, r1
- ldrh r4, [r0]
- adds r0, r4, 0
- movs r1, 0x64
- bl __udivsi3
- adds r1, r0, 0
- add r0, sp, 0xC
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r5, r0, 0
- ldr r1, =sText_Dot
- bl StringAppend
- adds r5, r0, 0
- adds r0, r4, 0
- movs r1, 0x64
- bl __umodsi3
- adds r1, r0, 0
- adds r0, r5, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r5, r0, 0
- ldr r1, =sText_RPM
- bl StringAppend
- movs r0, 0x1
- add r1, sp, 0xC
- movs r2, 0x8C
- bl GetStringRightAlignXOffset
- adds r3, r0, 0
- ldr r4, =gUnknown_0203AB74
- ldrb r0, [r4]
- lsls r3, 24
- lsrs r3, 24
- lsrs r1, r7, 24
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x1
- add r2, sp, 0xC
- bl PrintTextOnWindow
- movs r0, 0x80
- lsls r0, 21
- adds r7, r0
- adds r6, 0x1
- cmp r6, 0x2
- ble _08083E8A
- ldrb r0, [r4]
- bl PutWindowTilemap
- ldrb r0, [r4]
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0x34
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ShowBerryBlenderRecordWindow
-
- thumb_func_start sub_8083F3C
-sub_8083F3C: @ 8083F3C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08083F62
- ldr r0, =0x0000016f
- bl PlayFanfare
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08083F62:
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _08083F82
- ldr r0, =gUnknown_020322A4
- ldr r0, [r0]
- movs r1, 0xAA
- lsls r1, 1
- adds r0, r1
- ldrh r0, [r0]
- bl PlayBGM
- adds r0, r5, 0
- bl DestroyTask
-_08083F82:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8083F3C
-
- thumb_func_start sub_8083F94
-sub_8083F94: @ 8083F94
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- adds r6, r0, 0
- adds r7, r1, 0
- bl sub_8136EA4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl sub_8136EDC
- adds r1, r0, 0
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 1
- lsls r1, 24
- lsrs r1, 24
- bl __divsi3
- lsls r0, 16
- lsrs r3, r0, 16
- strb r3, [r7, 0xD]
- ldrb r0, [r6]
- strb r0, [r7, 0xC]
- movs r0, 0xFF
- strb r0, [r7]
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080840C4
- ldr r0, =gUnknown_020322A4
- ldr r2, [r0]
- movs r4, 0xD2
- lsls r4, 1
- adds r1, r2, r4
- ldrb r1, [r1]
- mov r8, r0
- cmp r1, 0
- bne _08084058
- cmp r3, 0x14
- bls _08084058
- adds r0, r2, 0
- adds r0, 0x7C
- ldrb r1, [r0]
- subs r1, 0x1
- movs r0, 0x9E
- lsls r0, 1
- mov r9, r0
- adds r0, r2, r0
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r5, =gLinkPlayers + 8
- adds r1, r5
- adds r0, r7, 0
- bl StringCopy
- adds r0, r6, 0
- bl sub_81370B4
- strb r0, [r7, 0xB]
- ldrb r1, [r7, 0xB]
- ldrb r2, [r7, 0xC]
- ldrb r3, [r7, 0xD]
- mov r6, r8
- ldr r4, [r6]
- adds r0, r4, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- subs r0, 0x1
- add r4, r9
- adds r4, r0
- ldrb r4, [r4]
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r5, r0
- ldrb r0, [r5, 0x12]
- str r0, [sp]
- adds r0, r7, 0
- bl Put3CheersForPokeblocksOnTheAir
- lsls r0, 24
- cmp r0, 0
- bne _080840BA
- b _080840C4
- .pool
-_08084058:
- mov r0, r8
- ldr r2, [r0]
- movs r1, 0xD2
- lsls r1, 1
- adds r0, r2, r1
- ldrb r1, [r0]
- adds r0, r2, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _080840C4
- cmp r3, 0x14
- bhi _080840C4
- movs r4, 0x9E
- lsls r4, 1
- adds r0, r2, r4
- ldrb r0, [r0]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r5, =gLinkPlayers + 8
- adds r1, r5
- adds r0, r7, 0
- bl StringCopy
- adds r0, r6, 0
- bl sub_81370B4
- strb r0, [r7, 0xB]
- ldrb r1, [r7, 0xB]
- ldrb r2, [r7, 0xC]
- ldrb r3, [r7, 0xD]
- mov r6, r8
- ldr r0, [r6]
- adds r0, r4
- ldrb r4, [r0]
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r5, r0
- ldrb r0, [r5, 0x12]
- str r0, [sp]
- adds r0, r7, 0
- bl Put3CheersForPokeblocksOnTheAir
- lsls r0, 24
- cmp r0, 0
- beq _080840C4
-_080840BA:
- movs r0, 0x1
- b _080840C6
- .pool
-_080840C4:
- movs r0, 0
-_080840C6:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8083F94
-
- thumb_func_start sub_80840D4
-sub_80840D4: @ 80840D4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x18
- mov r9, r1
- ldr r4, [sp, 0x38]
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r3, 24
- lsrs r7, r3, 24
- movs r5, 0
- cmp r4, 0x1
- beq _08084116
- cmp r4, 0x1
- bgt _08084100
- cmp r4, 0
- beq _08084108
- b _08084132
-_08084100:
- cmp r4, 0x2
- beq _08084124
- cmp r4, 0x3
- bne _08084136
-_08084108:
- add r1, sp, 0x14
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- movs r0, 0x3
- b _08084130
-_08084116:
- add r0, sp, 0x14
- strb r5, [r0]
- adds r1, r0, 0
- movs r0, 0x2
- strb r0, [r1, 0x1]
- movs r0, 0x3
- b _08084130
-_08084124:
- add r0, sp, 0x14
- strb r5, [r0]
- adds r1, r0, 0
- movs r0, 0x4
- strb r0, [r1, 0x1]
- movs r0, 0x5
-_08084130:
- strb r0, [r1, 0x2]
-_08084132:
- cmp r4, 0x3
- beq _08084148
-_08084136:
- add r0, sp, 0x14
- ldrb r0, [r0]
- lsls r1, r0, 4
- orrs r1, r0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl FillWindowPixelBuffer
-_08084148:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- add r0, sp, 0x14
- str r0, [sp, 0x8]
- ldr r0, [sp, 0x34]
- lsls r0, 24
- asrs r0, 24
- str r0, [sp, 0xC]
- mov r0, r9
- str r0, [sp, 0x10]
- adds r0, r6, 0
- movs r1, 0x1
- mov r2, r8
- adds r3, r7, 0
- bl AddTextPrinterParametrized2
- add sp, 0x18
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80840D4
-
- thumb_func_start sub_808417C
-sub_808417C: @ 808417C
- push {r4-r7,lr}
- sub sp, 0x8
- adds r5, r0, 0
- adds r7, r1, 0
- adds r6, r2, 0
- movs r0, 0
- ldrsh r4, [r5, r0]
- cmp r4, 0
- beq _08084194
- cmp r4, 0x1
- beq _080841C6
- b _080841DA
-_08084194:
- movs r0, 0x4
- movs r1, 0
- movs r2, 0x14
- movs r3, 0xF
- bl sub_8197B1C
- str r6, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x4
- adds r1, r7, 0
- movs r2, 0
- movs r3, 0x1
- bl sub_80840D4
- movs r0, 0x4
- bl PutWindowTilemap
- movs r0, 0x4
- movs r1, 0x3
- bl CopyWindowToVram
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _080841DA
-_080841C6:
- movs r0, 0x4
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _080841DA
- strh r0, [r5]
- movs r0, 0x1
- b _080841DC
-_080841DA:
- movs r0, 0
-_080841DC:
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_808417C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/cable_club.s b/asm/cable_club.s
index 2ce8bb0b1..611b87eef 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -244,7 +244,7 @@ sub_80B252C: @ 80B252C
lsrs r1, r0, 24
cmp r1, 0
bne _080B2570
- ldr r0, =gUnknown_020229C6
+ ldr r0, =gLinkType
strh r1, [r0]
ldr r1, =gTasks
lsls r0, r4, 2
@@ -286,7 +286,7 @@ _080B258E:
b _080B25BA
.pool
_080B25A4:
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
movs r0, 0
strh r0, [r1]
ldr r1, =gTasks
@@ -743,7 +743,7 @@ _080B2994:
strb r0, [r1]
ldrb r0, [r4]
bl sub_800AA04
- ldr r4, =gUnknown_020228C4
+ ldr r4, =gBlockSendBuffer
adds r0, r4, 0
bl sub_80C30A4
ldr r0, =gUnknown_0203CEF8
@@ -833,7 +833,7 @@ _080B2A6C:
strb r0, [r1]
ldrb r0, [r4]
bl sub_800AA04
- ldr r4, =gUnknown_020228C4
+ ldr r4, =gBlockSendBuffer
adds r0, r4, 0
bl sub_80C30A4
ldr r0, =gUnknown_0203CEF8
@@ -964,7 +964,7 @@ task_map_chg_seq_0807EC34: @ 80B2B94
ldrh r0, [r5]
cmp r0, 0x1
bne _080B2C10
- ldr r0, =gUnknown_020229C6
+ ldr r0, =gLinkType
ldrh r2, [r0]
ldr r0, =0x00002266
cmp r2, r0
@@ -1215,20 +1215,20 @@ _080B2DC0:
b _080B2E34
_080B2DCA:
movs r3, 0x2
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r4, =0x00002233
b _080B2E30
.pool
_080B2DDC:
movs r3, 0x2
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r4, =0x00002244
b _080B2E30
.pool
_080B2DEC:
movs r3, 0x4
movs r2, 0x4
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r4, =0x00002255
b _080B2E30
.pool
@@ -1243,12 +1243,12 @@ _080B2E00:
ands r0, r1
cmp r0, 0
bne _080B2E2C
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r4, =0x00002266
b _080B2E30
.pool
_080B2E2C:
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r4, =0x00002277
_080B2E30:
adds r0, r4, 0
@@ -1266,7 +1266,7 @@ _080B2E34:
thumb_func_start sub_80B2E4C
sub_80B2E4C: @ 80B2E4C
push {lr}
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00001133
adds r0, r2, 0
strh r0, [r1]
@@ -1287,7 +1287,7 @@ sub_80B2E74: @ 80B2E74
ldr r1, =gSpecialVar_Result
movs r0, 0
strh r0, [r1]
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00003311
adds r0, r2, 0
strh r0, [r1]
@@ -1454,7 +1454,7 @@ _080B2FC6:
thumb_func_start sub_80B2FD8
sub_80B2FD8: @ 80B2FD8
push {lr}
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00004411
adds r0, r2, 0
strh r0, [r1]
@@ -1472,7 +1472,7 @@ sub_80B2FD8: @ 80B2FD8
thumb_func_start sub_80B3000
sub_80B3000: @ 80B3000
push {lr}
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00006601
adds r0, r2, 0
strh r0, [r1]
@@ -1490,7 +1490,7 @@ sub_80B3000: @ 80B3000
thumb_func_start sub_80B3028
sub_80B3028: @ 80B3028
push {lr}
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00006602
adds r0, r2, 0
strh r0, [r1]
@@ -1540,17 +1540,17 @@ _080B3084:
.4byte _080B3128
.4byte _080B30D8
_080B30A8:
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00002233
b _080B3124
.pool
_080B30B8:
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00002244
b _080B3124
.pool
_080B30C8:
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00002255
b _080B3124
.pool
@@ -1564,22 +1564,22 @@ _080B30D8:
ands r0, r1
cmp r0, 0
bne _080B3100
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00002266
b _080B3124
.pool
_080B3100:
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00002277
b _080B3124
.pool
_080B3110:
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00001111
b _080B3124
.pool
_080B3120:
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00003322
_080B3124:
adds r0, r2, 0
@@ -1809,7 +1809,7 @@ _080B32F8:
movs r0, 0x1
movs r1, 0
bl fade_screen
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00002211
adds r0, r2, 0
strh r0, [r1]
@@ -1922,7 +1922,7 @@ _080B3408:
movs r0, 0x1
movs r1, 0
bl fade_screen
- ldr r0, =gUnknown_020229C6
+ ldr r0, =gLinkType
ldr r2, =0x00002211
adds r1, r2, 0
strh r1, [r0]
@@ -2548,7 +2548,7 @@ nullsub_37: @ 80B3964
thumb_func_start sub_80B3968
sub_80B3968: @ 80B3968
push {lr}
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00002211
adds r0, r2, 0
strh r0, [r1]
@@ -2829,7 +2829,7 @@ sub_80B3BC4: @ 80B3BC4
ldrb r0, [r0]
cmp r0, 0
bne _080B3BD6
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00002288
adds r0, r2, 0
strh r0, [r1]
diff --git a/asm/coins.s b/asm/coins.s
deleted file mode 100644
index d2b6cbb47..000000000
--- a/asm/coins.s
+++ /dev/null
@@ -1,74 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start GiveCoins
-@ bool8 GiveCoins(u16 toAdd)
-GiveCoins: @ 8145C80
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl GetCoins
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, =0x0000270e
- cmp r1, r0
- bls _08145C9C
- movs r0, 0
- b _08145CC0
- .pool
-_08145C9C:
- adds r0, r1, r4
- cmp r1, r0
- ble _08145CAC
- ldr r0, =0x0000270f
- b _08145CBA
- .pool
-_08145CAC:
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, =0x0000270f
- cmp r1, r0
- bls _08145CB8
- adds r1, r0, 0
-_08145CB8:
- adds r0, r1, 0
-_08145CBA:
- bl SetCoins
- movs r0, 0x1
-_08145CC0:
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GiveCoins
-
- thumb_func_start TakeCoins
-@ bool8 TakeCoins(u16 toSub)
-TakeCoins: @ 8145CCC
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl GetCoins
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r4
- bcs _08145CE2
- movs r0, 0
- b _08145CEE
-_08145CE2:
- subs r0, r4
- lsls r0, 16
- lsrs r0, 16
- bl SetCoins
- movs r0, 0x1
-_08145CEE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end TakeCoins
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/contest.s b/asm/contest.s
index f9dc933f3..dba7ae17e 100644
--- a/asm/contest.s
+++ b/asm/contest.s
@@ -14067,7 +14067,7 @@ _080DEC80:
b _080DEC9C
.pool
_080DEC94:
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
lsls r0, 24
lsrs r1, r0, 24
_080DEC9C:
diff --git a/asm/contest_link_80FC4F4.s b/asm/contest_link_80FC4F4.s
index f1e2019da..ba96bf4ea 100644
--- a/asm/contest_link_80FC4F4.s
+++ b/asm/contest_link_80FC4F4.s
@@ -284,7 +284,7 @@ _080FC6FE:
lsls r0, 24
cmp r0, 0
beq _080FC7F4
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
ldr r1, =gUnknown_02039F25
ldrb r1, [r1]
lsls r1, 6
@@ -297,7 +297,7 @@ _080FC6FE:
b _080FC7F4
.pool
_080FC738:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
ldr r1, =gUnknown_02039F25
ldrb r1, [r1]
lsls r1, 6
@@ -487,7 +487,7 @@ _080FC8D8:
beq _080FC954
b _080FC96E
_080FC8DE:
- ldr r1, =gUnknown_020228C4
+ ldr r1, =gBlockSendBuffer
ldrh r0, [r4, 0x1A]
strb r0, [r1]
bl GetMultiplayerId
@@ -1142,7 +1142,7 @@ _080FCE8C:
beq _080FCEFC
b _080FCF16
_080FCE92:
- ldr r1, =gUnknown_020228C4
+ ldr r1, =gBlockSendBuffer
movs r0, 0x6E
strb r0, [r1]
bl GetMultiplayerId
diff --git a/asm/easy_chat.s b/asm/easy_chat.s
index eb20e68fa..602e7b3e7 100644
--- a/asm/easy_chat.s
+++ b/asm/easy_chat.s
@@ -3691,7 +3691,7 @@ sub_811BDF0: @ 811BDF0
adds r6, r0, 0
ldr r0, =gSaveBlock1Ptr
ldr r4, [r0]
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
ldr r0, =0x00003b70
adds r5, r4, r0
adds r0, r5, 0
@@ -3707,17 +3707,17 @@ sub_811BDF0: @ 811BDF0
bl TVShowConvertInternationalString
movs r0, 0
mov r1, sp
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
b _0811BE3C
.pool
_0811BE34:
ldr r1, =gText_Lady
movs r0, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
_0811BE3C:
ldr r1, =gText_F700sQuiz
adds r0, r6, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
add sp, 0x20
pop {r4-r6}
pop {r0}
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s
index b85c6de07..29164ed7b 100644
--- a/asm/field_control_avatar.s
+++ b/asm/field_control_avatar.s
@@ -1246,7 +1246,7 @@ sub_809C8DC: @ 809C8DC
lsrs r0, 24
cmp r0, 0x1
beq _0809C92E
- bl sub_80B5870
+ bl UpdateRepelCounter
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1607,7 +1607,7 @@ _0809CC0C:
ldr r5, =gUnknown_020375D6
ldrh r1, [r5]
adds r0, r4, 0
- bl is_it_battle_time_2
+ bl StandardWildEncounter
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s
index 34ff54f61..ae405f127 100644
--- a/asm/field_player_avatar.s
+++ b/asm/field_player_avatar.s
@@ -4316,7 +4316,7 @@ fish5: @ 808CABC
adds r0, 0x1
strh r0, [r5, 0x8]
movs r6, 0
- bl GetFishingWildMonListHeader
+ bl DoesCurrentMapHaveFishingMons
lsls r0, 24
cmp r0, 0
bne _0808CADC
@@ -4640,7 +4640,7 @@ _0808CD58:
ldrh r0, [r5, 0x26]
lsls r0, 24
lsrs r0, 24
- bl sub_80B5734
+ bl FishingWildEncounter
movs r0, 0x1
bl sub_80ED950
ldr r0, =Task_Fish
diff --git a/asm/item_menu.s b/asm/item_menu.s
index a868b2672..61bd5c6e9 100755
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -1863,7 +1863,7 @@ DisplayItemMessage: @ 81ABB4C
strh r0, [r4, 0x14]
movs r1, 0x11
bl FillWindowPixelBuffer
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
lsls r0, 24
lsrs r0, 24
ldrb r1, [r4, 0x14]
diff --git a/asm/link.s b/asm/link.s
index d2dc05630..2e6f3f8d3 100644
--- a/asm/link.s
+++ b/asm/link.s
@@ -206,7 +206,7 @@ sub_8009570: @ 8009570
ldr r0, =sub_80096BC
bl SetVBlankCallback
bl sub_800A2E0
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00001111
adds r0, r2, 0
strh r0, [r1]
@@ -291,7 +291,7 @@ sub_8009638: @ 8009638
ldr r0, [r4]
ldrb r0, [r0, 0x8]
strb r0, [r5, 0x13]
- ldr r0, =gUnknown_020229C6
+ ldr r0, =gLinkType
ldrh r0, [r0]
str r0, [r5, 0x14]
ldr r0, =gGameLanguage
@@ -339,7 +339,7 @@ sub_80096BC: @ 80096BC
sub_80096D0: @ 80096D0
push {lr}
ldr r3, =gUnknown_020229C4
- ldr r1, =gUnknown_03003110
+ ldr r1, =gSendCmd
ldr r2, =0x0000efff
adds r0, r1, 0
adds r0, 0xE
@@ -646,7 +646,7 @@ _08009976:
orrs r1, r0
_08009990:
adds r0, r2, 0
- bl sub_800A994
+ bl SetLinkDebugValues
_08009996:
add sp, 0x4
pop {r4,r5}
@@ -685,7 +685,7 @@ sub_80099E0: @ 80099E0
_080099F4:
movs r1, 0
ldr r5, =gUnknown_03003084
- ldr r3, =gUnknown_03003110
+ ldr r3, =gSendCmd
movs r2, 0
_080099FC:
lsls r0, r1, 1
@@ -781,7 +781,7 @@ _08009AAE:
movs r0, 0
strh r0, [r3]
lsls r4, r6, 4
- ldr r5, =gUnknown_03003090
+ ldr r5, =gRecvCmds
adds r2, r4, r5
ldrh r0, [r2]
mov r12, r1
@@ -901,12 +901,12 @@ _08009BC4:
adds r1, r0
movs r2, 0
strh r2, [r1]
- ldr r0, =gUnknown_03003090
+ ldr r0, =gRecvCmds
adds r0, 0x2
adds r0, r4, r0
ldrh r0, [r0]
strh r0, [r1, 0x2]
- ldr r0, =gUnknown_03003090
+ ldr r0, =gRecvCmds
adds r0, 0x4
adds r0, r4, r0
ldrh r0, [r0]
@@ -930,7 +930,7 @@ _08009BF0:
mov r8, r0
movs r2, 0
adds r5, r3, 0
- ldr r7, =gUnknown_03003090
+ ldr r7, =gRecvCmds
adds r3, r4, 0
_08009C14:
ldrh r1, [r5]
@@ -955,7 +955,7 @@ _08009C40:
ldr r1, =gBlockRecvBuffer
mov r9, r1
adds r7, r3, 0
- ldr r3, =gUnknown_03003090
+ ldr r3, =gRecvCmds
mov r8, r3
lsls r5, r6, 8
adds r3, r4, 0
@@ -1069,7 +1069,7 @@ _08009D38:
b _08009D6E
_08009D3E:
ldr r3, =gUnknown_082ED1A8
- ldr r0, =gUnknown_03003090
+ ldr r0, =gRecvCmds
adds r0, 0x2
adds r0, r4, r0
ldrh r2, [r0]
@@ -1084,7 +1084,7 @@ _08009D3E:
b _08009D6E
.pool
_08009D64:
- ldr r0, =gUnknown_03003090
+ ldr r0, =gRecvCmds
adds r0, 0x2
adds r0, r4, r0
ldrh r0, [r0]
@@ -1183,26 +1183,26 @@ _08009E2C:
b _08009F06
.pool
_08009E38:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
strh r2, [r0]
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldrh r1, [r1]
b _08009F04
.pool
_08009E4C:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
strh r2, [r0]
ldr r1, =gMain
ldrh r1, [r1, 0x2C]
b _08009F04
.pool
_08009E60:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
movs r1, 0
b _08009F02
.pool
_08009E6C:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
strh r2, [r0]
movs r1, 0
adds r3, r0, 0
@@ -1219,7 +1219,7 @@ _08009E76:
b _08009F06
.pool
_08009E8C:
- ldr r1, =gUnknown_03003110
+ ldr r1, =gSendCmd
strh r2, [r1]
ldr r2, =gUnknown_03000D10
ldrh r0, [r2, 0x2]
@@ -1230,28 +1230,28 @@ _08009E8C:
b _08009F06
.pool
_08009EA8:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
strh r2, [r0]
ldr r1, =gSpecialVar_ItemId
ldrh r1, [r1]
b _08009F04
.pool
_08009EBC:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
strh r2, [r0]
ldr r1, =gUnknown_03003150
ldrb r1, [r1]
b _08009F04
.pool
_08009ED0:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
strh r2, [r0]
ldr r1, =gUnknown_030030F4
ldrh r1, [r1]
b _08009F04
.pool
_08009EE4:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
strh r2, [r0]
b _08009F06
.pool
@@ -1264,7 +1264,7 @@ _08009EF0:
ldrb r0, [r0]
cmp r0, 0
bne _08009F06
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
_08009F02:
strh r2, [r0]
_08009F04:
@@ -1814,7 +1814,7 @@ _0800A30C:
str r7, [r4, 0x4]
b _0800A336
_0800A324:
- ldr r5, =gUnknown_020228C4
+ ldr r5, =gBlockSendBuffer
cmp r7, r5
beq _0800A334
adds r0, r5, 0
@@ -1863,7 +1863,7 @@ sub_800A388: @ 800A388
push {r4-r6,lr}
ldr r0, =gUnknown_03000D10
ldr r5, [r0, 0x4]
- ldr r2, =gUnknown_03003110
+ ldr r2, =gSendCmd
ldr r1, =0x00008888
strh r1, [r2]
movs r3, 0
@@ -2644,15 +2644,15 @@ _0800A94E:
.pool
thumb_func_end task00_link_test
- thumb_func_start sub_800A994
-sub_800A994: @ 800A994
+ thumb_func_start SetLinkDebugValues
+SetLinkDebugValues: @ 800A994
ldr r2, =gUnknown_0300302C
str r0, [r2]
ldr r0, =gUnknown_03003070
str r1, [r0]
bx lr
.pool
- thumb_func_end sub_800A994
+ thumb_func_end SetLinkDebugValues
thumb_func_start sub_800A9A8
sub_800A9A8: @ 800A9A8
@@ -2772,7 +2772,7 @@ sub_800AA60: @ 800AA60
ldr r0, =gUnknown_02022A74
ldr r2, =0x00002288
mov r8, r2
- ldr r7, =gUnknown_020229C6
+ ldr r7, =gLinkType
mov r6, r12
adds r6, 0x14
adds r5, r0, 0x4
@@ -3798,7 +3798,7 @@ sub_800B348: @ 800B348
strh r2, [r0]
ldrb r2, [r3, 0x2]
strb r2, [r0, 0x2]
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r2, 0x3C
bl memcpy
pop {r4-r6}
@@ -3861,8 +3861,8 @@ HandleLinkConnection: @ 800B40C
cmp r0, 0
bne _0800B45C
ldr r0, =gUnknown_03003144
- ldr r1, =gUnknown_03003110
- ldr r2, =gUnknown_03003090
+ ldr r1, =gSendCmd
+ ldr r2, =gRecvCmds
bl sub_800B638
ldr r4, =gUnknown_030030E0
str r0, [r4]
@@ -10247,13 +10247,13 @@ _0800E64A:
adds r0, r4, 0
bl sub_800D724
strh r5, [r7]
- ldr r1, =gUnknown_03003110
+ ldr r1, =gSendCmd
ldr r2, =0x01000008
adds r0, r7, 0
bl CpuSet
mov r0, r8
strh r5, [r0]
- ldr r1, =gUnknown_03003090
+ ldr r1, =gRecvCmds
ldr r2, =0x01000028
bl CpuSet
mov r0, r9
@@ -10306,7 +10306,7 @@ sub_800E700: @ 800E700
lsrs r1, r0, 16
cmp r1, 0
bne _0800E732
- ldr r0, =gUnknown_020229C6
+ ldr r0, =gLinkType
strh r1, [r0]
bl sub_800AAF4
movs r0, 0
@@ -11278,7 +11278,7 @@ sub_800EFB0: @ 800EFB0
push {r4-r7,lr}
sub sp, 0x4
movs r2, 0
- ldr r7, =gUnknown_03003090
+ ldr r7, =gRecvCmds
ldr r0, =gUnknown_03005000
adds r6, r7, 0
ldr r1, =0x00000c87
@@ -11323,8 +11323,8 @@ _0800EFD0:
thumb_func_start sub_800F014
sub_800F014: @ 800F014
push {lr}
- ldr r3, =gUnknown_03003110
- ldr r2, =gUnknown_03003090
+ ldr r3, =gSendCmd
+ ldr r2, =gRecvCmds
movs r1, 0x6
_0800F01C:
ldrh r0, [r3]
@@ -11334,7 +11334,7 @@ _0800F01C:
subs r1, 0x1
cmp r1, 0
bge _0800F01C
- ldr r1, =gUnknown_03003110
+ ldr r1, =gSendCmd
movs r2, 0
adds r0, r1, 0
adds r0, 0xC
@@ -11413,7 +11413,7 @@ _0800F0C4:
.pool
_0800F0CC:
movs r3, 0
- ldr r4, =gUnknown_03003090
+ ldr r4, =gRecvCmds
_0800F0D0:
movs r2, 0
lsls r0, r3, 4
@@ -11681,7 +11681,7 @@ _0800F2E0:
str r2, [sp, 0x4]
adds r5, 0x1
str r5, [sp]
- ldr r1, =gUnknown_03003090
+ ldr r1, =gRecvCmds
mov r9, r1
adds r5, r3, 0
adds r7, r4, 0
@@ -11908,7 +11908,7 @@ sub_800F4F0: @ 800F4F0
mov r1, sp
bl sub_800D934
movs r1, 0
- ldr r0, =gUnknown_03003090
+ ldr r0, =gRecvCmds
mov r12, r0
_0800F506:
movs r4, 0
@@ -12012,7 +12012,7 @@ _0800F5C0:
ldrb r1, [r2]
strb r0, [r2]
bl sub_8010528
- ldr r5, =gUnknown_03003110
+ ldr r5, =gSendCmd
add r4, sp, 0x48
adds r0, r5, 0
adds r1, r4, 0
@@ -12305,8 +12305,8 @@ sub_800F820: @ 800F820
lsls r0, 24
cmp r0, 0
bne _0800F83C
- bl sub_8082D18
- ldr r1, =gUnknown_03003110
+ bl GetBlenderArrowPosition
+ ldr r1, =gSendCmd
strh r0, [r1, 0xC]
_0800F83C:
ldr r1, =gUnknown_020223C0
@@ -12345,7 +12345,7 @@ sub_800F86C: @ 800F86C
_0800F87A:
mov r1, r8
lsls r0, r1, 4
- ldr r2, =gUnknown_03003090
+ ldr r2, =gRecvCmds
adds r1, r0, r2
ldrh r7, [r1]
movs r3, 0xFF
@@ -12555,7 +12555,7 @@ _0800FA0E:
adds r2, r4, 0x1
lsls r0, r2, 1
adds r0, r3
- ldr r4, =gUnknown_03003090
+ ldr r4, =gRecvCmds
adds r0, r4
ldrh r0, [r0]
strh r0, [r1]
@@ -12686,7 +12686,7 @@ _0800FB10:
adds r0, r7, r2
strb r1, [r0]
_0800FB48:
- ldr r0, =gUnknown_03003090
+ ldr r0, =gRecvCmds
adds r0, 0x6
adds r0, r5, r0
ldrh r0, [r0]
@@ -12699,7 +12699,7 @@ _0800FB78:
movs r0, 0xEE
lsls r0, 8
bl sub_800FD14
- ldr r1, =gUnknown_03003110
+ ldr r1, =gSendCmd
ldr r3, =gUnknown_03003092
adds r0, r5, r3
ldrh r0, [r0]
@@ -12708,7 +12708,7 @@ _0800FB78:
adds r0, r5, r4
ldrh r0, [r0]
strh r0, [r1, 0x4]
- ldr r0, =gUnknown_03003090
+ ldr r0, =gRecvCmds
adds r0, 0x6
adds r0, r5, r0
ldrh r0, [r0]
@@ -12910,7 +12910,7 @@ sub_800FD14: @ 800FD14
push {r4,r5,lr}
lsls r0, 16
lsrs r1, r0, 16
- ldr r5, =gUnknown_03003110
+ ldr r5, =gSendCmd
strh r1, [r5]
movs r0, 0xF0
lsls r0, 7
@@ -13063,7 +13063,7 @@ _0800FE46:
sub_800FE50: @ 800FE50
push {r4,lr}
adds r4, r0, 0
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0800FE76
@@ -13097,7 +13097,7 @@ sub_800FE84: @ 800FE84
ldr r0, [r5]
cmp r0, 0
bne _0800FEB8
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0800FEB8
@@ -13149,7 +13149,7 @@ _0800FEC8:
str r7, [r5, 0x70]
b _0800FF1C
_0800FF0A:
- ldr r4, =gUnknown_020228C4
+ ldr r4, =gBlockSendBuffer
cmp r7, r4
beq _0800FF1A
adds r0, r4, 0
@@ -13182,7 +13182,7 @@ _0800FF32:
thumb_func_start rfufunc_80F9F44
rfufunc_80F9F44: @ 800FF4C
push {r4,r5,lr}
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0800FFA0
@@ -13207,7 +13207,7 @@ rfufunc_80F9F44: @ 800FF4C
.pool
_0800FF84:
bl GetMultiplayerId
- ldr r1, =gUnknown_03003090
+ ldr r1, =gRecvCmds
lsls r0, 24
lsrs r0, 20
adds r0, r1
@@ -13233,7 +13233,7 @@ sub_800FFB0: @ 800FFB0
ldr r0, =gUnknown_03005000
mov r12, r0
ldr r5, [r0, 0x70]
- ldr r3, =gUnknown_03003110
+ ldr r3, =gSendCmd
mov r2, r12
adds r2, 0x6C
ldrh r1, [r2]
@@ -13302,7 +13302,7 @@ rfufunc_80FA020: @ 8010028
ldrb r0, [r5, 0xC]
cmp r0, 0
bne _080100F0
- ldr r3, =gUnknown_03003110
+ ldr r3, =gSendCmd
adds r2, r5, 0
adds r2, 0x6E
ldrh r0, [r2]
@@ -13313,7 +13313,7 @@ rfufunc_80FA020: @ 8010028
strh r0, [r3]
movs r4, 0
mov r9, r5
- ldr r0, =gUnknown_03003090
+ ldr r0, =gRecvCmds
mov r12, r0
lsls r5, r6, 4
adds r7, r2, 0
@@ -13539,7 +13539,7 @@ _08010220:
thumb_func_start sub_801022C
sub_801022C: @ 801022C
push {r4,lr}
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0801024E
@@ -13694,7 +13694,7 @@ sub_8010358: @ 8010358
ldrb r0, [r0]
cmp r0, 0
bne _0801037A
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0801037A
@@ -13723,7 +13723,7 @@ sub_8010390: @ 8010390
ldrb r0, [r0]
cmp r0, 0
bne _0801041E
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0801041E
@@ -13766,7 +13766,7 @@ _080103FA:
ldrb r0, [r0]
cmp r0, 0
bne _0801041E
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0801041E
@@ -14404,7 +14404,7 @@ _080108F0:
b _080109D2
.pool
_08010904:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _080109D2
@@ -14676,7 +14676,7 @@ _08010B28:
.4byte _08010C0A
.4byte _08010C94
_08010B40:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
beq _08010B4A
@@ -14690,7 +14690,7 @@ _08010B4A:
b _08010C4A
.pool
_08010B60:
- ldr r0, =gUnknown_03003110
+ ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
beq _08010B6A
@@ -14734,7 +14734,7 @@ _08010B8C:
b _08010C4A
.pool
_08010BC0:
- ldr r5, =gUnknown_020228C4
+ ldr r5, =gBlockSendBuffer
adds r1, r5, 0
ldr r0, =gUnknown_082ED7EC
ldm r0!, {r2-r4}
@@ -14772,7 +14772,7 @@ _08010BE2:
adds r0, 0x1
strh r0, [r1, 0x8]
_08010C0A:
- ldr r5, =gUnknown_020228C4
+ ldr r5, =gBlockSendBuffer
ldr r1, =gUnknown_03005000
ldrb r0, [r1, 0xD]
strb r0, [r5, 0xF]
@@ -14796,7 +14796,7 @@ _08010C20:
mov r1, r12
movs r2, 0x8C
bl memcpy
- ldr r1, =gUnknown_020228C4
+ ldr r1, =gBlockSendBuffer
movs r0, 0
movs r2, 0xA0
bl SendBlock
@@ -14921,7 +14921,7 @@ _08010D56:
cmp r0, 0
beq _08010DA6
bl sub_800B348
- ldr r1, =gUnknown_020228C4
+ ldr r1, =gBlockSendBuffer
movs r0, 0
movs r2, 0x3C
bl SendBlock
@@ -16575,7 +16575,7 @@ sub_8011AC8: @ 8011AC8
sub sp, 0x4
movs r0, 0
str r0, [sp]
- ldr r1, =gUnknown_03003090
+ ldr r1, =gRecvCmds
ldr r2, =0x05000014
mov r0, sp
bl CpuSet
@@ -16608,7 +16608,7 @@ sub_8011AFC: @ 8011AFC
lsls r0, 24
cmp r0, 0
beq _08011B70
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00001111
adds r0, r2, 0
strh r0, [r1]
@@ -16968,7 +16968,7 @@ sub_8011E2C: @ 8011E2C
push {r4-r6,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r6, =gUnknown_03003110
+ ldr r6, =gSendCmd
ldrh r0, [r6]
cmp r0, 0
bne _08011E7A
@@ -20832,7 +20832,7 @@ _08013FFC:
b _0801405A
.pool
_08014038:
- ldr r4, =gUnknown_020228C4
+ ldr r4, =gBlockSendBuffer
ldr r0, =gSaveBlock1Ptr
ldr r1, [r0]
ldr r0, =0x00002be0
@@ -21403,7 +21403,7 @@ _080145D8:
.pool
_080145F4:
bl overworld_free_bg_tilemaps
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r1, 0x1
bl sub_80143E4
bl sp000_heal_pokemon
@@ -21422,7 +21422,7 @@ _08014620:
bl sp000_heal_pokemon
bl copy_player_party_to_sav1
bl copy_bags_and_unk_data_from_save_blocks
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r1, 0x1
bl sub_80143E4
movs r0, 0x2
@@ -21438,7 +21438,7 @@ _0801464C:
bl sp000_heal_pokemon
bl copy_player_party_to_sav1
bl copy_bags_and_unk_data_from_save_blocks
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r1, 0x1
bl sub_80143E4
movs r0, 0x5
@@ -21450,7 +21450,7 @@ _0801464C:
b _080146B0
.pool
_08014678:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r1, 0x1
bl sub_80143E4
bl overworld_free_bg_tilemaps
@@ -21463,7 +21463,7 @@ _08014678:
b _080146B0
.pool
_08014698:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r1, 0x1
bl sub_80143E4
bl overworld_free_bg_tilemaps
@@ -21503,7 +21503,7 @@ _080146F6:
bl sub_801DD98
b _08014764
_080146FC:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r1, 0
bl sub_80143E4
ldr r0, =sub_80141A4
@@ -21573,7 +21573,7 @@ sub_8014790: @ 8014790
lsls r0, 3
ldr r1, =gTasks + 0x8
adds r7, r0, r1
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
mov r9, r0
movs r1, 0
ldrsh r0, [r7, r1]
@@ -23720,7 +23720,7 @@ _08015BBE:
bne _08015BCA
bl _08016878
_08015BCA:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r1, 0x1
bl sub_80143E4
ldr r0, =sub_80140E0
@@ -24247,7 +24247,7 @@ _080160DA:
bne _080160E4
b _08016878
_080160E4:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r1, 0x1
bl sub_80143E4
ldr r0, =sub_80140E0
@@ -25082,7 +25082,7 @@ _08016894:
sub_801689C: @ 801689C
push {r4,r5,lr}
adds r2, r0, 0
- ldr r3, =gUnknown_03003090
+ ldr r3, =gRecvCmds
ldrh r5, [r3, 0x12]
adds r4, r5, 0
cmp r4, 0
@@ -28007,14 +28007,14 @@ _08017F8A:
lsls r0, r4, 24
lsrs r0, 24
adds r1, r5, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
adds r5, 0x10
adds r4, 0x1
cmp r4, 0x3
ble _08017F8A
ldr r1, =gUnknown_082EE47C
adds r0, r7, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
b _08017FB4
.pool
_08017FAC:
@@ -28045,7 +28045,7 @@ _08017FC6:
sub_8017FD8: @ 8017FD8
push {lr}
adds r2, r0, 0
- ldr r0, =gUnknown_03003090
+ ldr r0, =gRecvCmds
ldrh r1, [r0, 0x2]
cmp r1, 0
beq _08017FFC
@@ -28379,7 +28379,7 @@ sub_8018220: @ 8018220
ldr r0, =gUnknown_02039B58
adds r1, r0
mov r8, r1
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
mov r6, r9
adds r6, 0xC0
bl sub_8068BB0
@@ -28393,11 +28393,11 @@ sub_8018220: @ 8018220
bl StringCopy
movs r0, 0
adds r1, r6, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
mov r1, r8
adds r1, 0x30
movs r0, 0x1
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r4, 0xBA
lsls r4, 1
add r4, r9
@@ -28411,7 +28411,7 @@ sub_8018220: @ 8018220
bl StringCopy
movs r0, 0x2
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
mov r5, r9
adds r5, 0xDE
mov r0, r8
@@ -28422,7 +28422,7 @@ sub_8018220: @ 8018220
bl ConvertIntToDecimalStringN
movs r0, 0x3
adds r1, r5, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r2, 0xED
add r2, r9
mov r10, r2
@@ -28442,16 +28442,16 @@ sub_8018220: @ 8018220
bl ConvertIntToDecimalStringN
movs r0, 0x4
mov r1, r10
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r0, 0x5
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r4, 0xD2
lsls r4, 1
add r4, r9
ldr r1, =gUnknown_082EFF64
adds r0, r4, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
ldr r0, =gStringVar4
adds r1, r4, 0
bl StringCopy
@@ -28468,7 +28468,7 @@ _0801830C:
bl ConvertIntToDecimalStringN
movs r0, 0
adds r1, r6, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
mov r2, r8
ldrh r1, [r2, 0x16]
cmp r1, r4
@@ -28483,7 +28483,7 @@ _08018328:
bl ConvertIntToDecimalStringN
movs r0, 0x2
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
mov r0, r8
ldrh r1, [r0, 0x20]
adds r0, r5, 0
@@ -28492,7 +28492,7 @@ _08018328:
bl ConvertIntToDecimalStringN
movs r0, 0x3
adds r1, r5, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r7, 0
movs r6, 0x80
lsls r6, 19
@@ -28505,7 +28505,7 @@ _08018360:
bl CopyEasyChatWord
lsrs r0, r6, 24
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r2, 0x80
lsls r2, 17
adds r6, r2
@@ -28519,7 +28519,7 @@ _08018360:
add r4, r9
ldr r1, =gUnknown_082EFFA4
adds r0, r4, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
ldr r5, =gStringVar4
adds r0, r5, 0
adds r1, r4, 0
@@ -28529,7 +28529,7 @@ _08018360:
bne _080183D0
ldr r1, =gUnknown_082F0020
adds r0, r4, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
adds r0, r5, 0
adds r1, r4, 0
bl StringAppend
@@ -28546,7 +28546,7 @@ _080183D0:
adds r1, r0
ldr r1, [r1]
adds r0, r4, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
adds r0, r5, 0
adds r1, r4, 0
bl StringAppend
@@ -32659,7 +32659,7 @@ sub_801A43C: @ 801A43C
bl LoadPalette
movs r0, 0xF0
bl sub_81978B0
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
movs r0, 0x20
str r0, [sp]
str r0, [sp, 0x4]
@@ -33721,7 +33721,7 @@ _0801AE48:
beq _0801AE54
b _0801AFAE
_0801AE54:
- ldr r4, =gUnknown_020228C4
+ ldr r4, =gBlockSendBuffer
adds r0, r4, 0
movs r1, 0
movs r2, 0x20
@@ -33738,7 +33738,7 @@ _0801AE78:
movs r0, 0x51
_0801AE7A:
strb r0, [r4]
- ldr r1, =gUnknown_020228C4
+ ldr r1, =gBlockSendBuffer
movs r0, 0
movs r2, 0x20
bl SendBlock
@@ -41936,10 +41936,10 @@ _0801F020:
ldrb r1, [r4, 0x8]
cmp r0, r1
beq _0801F0A8
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
movs r0, 0
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r1, =gText_F700JoinedChat
b _0801F094
.pool
@@ -41976,14 +41976,14 @@ _0801F07A:
ldrb r5, [r5]
cmp r0, r5
beq _0801F0A8
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
movs r0, 0
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r1, =gText_F700LeftChat
_0801F094:
adds r0, r6, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
movs r0, 0x1
b _0801F0AA
.pool
@@ -43456,11 +43456,11 @@ sub_801FBF8: @ 801FBF8
beq _0801FC38
b _0801FC42
_0801FC08:
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
bl sub_801F1D0
adds r1, r0, 0
movs r0, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r0, 0x5
movs r1, 0
bl sub_801FF18
@@ -43617,11 +43617,11 @@ sub_801FD30: @ 801FD30
beq _0801FD74
b _0801FD7E
_0801FD40:
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
ldr r0, =gSaveBlock2Ptr
ldr r1, [r0]
movs r0, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r0, 0x9
movs r1, 0
bl sub_801FF18
@@ -43925,7 +43925,7 @@ _0801FF98:
adds r0, r1, 0
adds r0, 0x22
ldr r1, [r4]
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
ldr r0, [r5]
adds r6, r0, 0
adds r6, 0x22
@@ -47204,7 +47204,7 @@ _08021A92:
lsls r4, 2
str r4, [sp, 0x24]
_08021A98:
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
ldr r0, [sp, 0x10]
cmp r0, 0x1
beq _08021B48
@@ -47463,10 +47463,10 @@ _08021CC8:
ldr r0, [sp, 0xC]
adds r1, r0, r1
movs r0, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r0, =gStringVar4
adds r1, r4, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
ldr r1, [sp, 0xC]
movs r2, 0xDD
lsls r2, 1
@@ -50249,7 +50249,7 @@ sub_802339C: @ 802339C
mov r10, r3
_080233C0:
lsls r0, r7, 4
- ldr r1, =gUnknown_03003090
+ ldr r1, =gRecvCmds
adds r2, r0, r1
ldrh r1, [r2]
movs r0, 0xFF
@@ -50858,7 +50858,7 @@ sub_802385C: @ 802385C
push {r4,r5,lr}
adds r5, r0, 0
movs r4, 0
- ldr r3, =gUnknown_03003090
+ ldr r3, =gRecvCmds
ldrb r0, [r5, 0x9]
cmp r4, r0
bcs _08023880
@@ -52672,8 +52672,8 @@ SetBerryPowder: @ 802467C
.pool
thumb_func_end SetBerryPowder
- thumb_func_start ApplyNewEncyprtionKeyToBerryPowder
-ApplyNewEncyprtionKeyToBerryPowder: @ 8024690
+ thumb_func_start ApplyNewEncryptionKeyToBerryPowder
+ApplyNewEncryptionKeyToBerryPowder: @ 8024690
push {lr}
adds r1, r0, 0
ldr r0, =gSaveBlock2Ptr
@@ -52681,11 +52681,11 @@ ApplyNewEncyprtionKeyToBerryPowder: @ 8024690
movs r2, 0xFA
lsls r2, 1
adds r0, r2
- bl ApplyNewEncyprtionKeyToWord
+ bl ApplyNewEncryptionKeyToWord
pop {r0}
bx r0
.pool
- thumb_func_end ApplyNewEncyprtionKeyToBerryPowder
+ thumb_func_end ApplyNewEncryptionKeyToBerryPowder
thumb_func_start sub_80246AC
sub_80246AC: @ 80246AC
@@ -59626,7 +59626,7 @@ sub_8027DD0: @ 8027DD0
sub_8027DFC: @ 8027DFC
push {lr}
adds r2, r0, 0
- ldr r3, =gUnknown_03003090
+ ldr r3, =gRecvCmds
ldrh r0, [r3]
movs r1, 0xFF
lsls r1, 8
@@ -60082,7 +60082,7 @@ sub_8028164: @ 8028164
mov r9, r0
adds r2, r7, 0
adds r2, 0x14
- ldr r4, =gUnknown_03003090
+ ldr r4, =gRecvCmds
ldrh r0, [r4]
movs r1, 0xFF
lsls r1, 8
@@ -60295,7 +60295,7 @@ sub_8028318: @ 8028318
push {r4,lr}
adds r2, r0, 0
adds r4, r1, 0
- ldr r3, =gUnknown_03003090
+ ldr r3, =gRecvCmds
ldrh r0, [r3]
movs r1, 0xFF
lsls r1, 8
@@ -60347,7 +60347,7 @@ sub_8028350: @ 8028350
sub_8028374: @ 8028374
push {lr}
adds r2, r0, 0
- ldr r3, =gUnknown_03003090
+ ldr r3, =gRecvCmds
ldrh r0, [r3]
movs r1, 0xFF
lsls r1, 8
@@ -63514,7 +63514,7 @@ _08029DA0:
movs r1, 0x1
adds r2, r5, 0
bl PrintTextOnWindow
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
bl sub_802762C
lsls r0, 16
lsrs r0, 16
@@ -63523,11 +63523,11 @@ _08029DA0:
bl CopyItemName
movs r0, 0
adds r1, r5, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r7, =gStringVar4
ldr r1, =gText_FirstPlacePrize
adds r0, r7, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
ldr r0, [r4]
add r0, r10
ldrb r0, [r0]
@@ -63548,7 +63548,7 @@ _08029DA0:
beq _08029EC8
cmp r4, 0x3
beq _08029EC8
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
bl sub_802762C
lsls r0, 16
lsrs r0, 16
@@ -63556,12 +63556,12 @@ _08029DA0:
bl CopyItemName
movs r0, 0
adds r1, r5, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
cmp r4, 0x2
bne _08029E9C
ldr r1, =gText_CantHoldAnyMore
adds r0, r7, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
b _08029EA8
.pool
_08029E9C:
@@ -63569,7 +63569,7 @@ _08029E9C:
bne _08029EA8
ldr r1, =gText_FilledStorageSpace
adds r0, r7, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
_08029EA8:
ldr r0, =gUnknown_02022CF8
ldr r0, [r0]
@@ -70729,19 +70729,19 @@ sub_802D7E8: @ 802D7E8
movs r2, 0
movs r3, 0x1
bl ConvertIntToDecimalStringN
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
ldr r1, [r5]
adds r1, 0x26
movs r0, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r1, [r5]
adds r1, 0x66
movs r0, 0x1
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r0, [r5]
adds r0, 0xA6
ldr r1, =gText_AwesomeWonF701F700
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
movs r0, 0x4
movs r1, 0x8
movs r2, 0x16
@@ -70786,15 +70786,15 @@ sub_802D884: @ 802D884
ldr r1, [r4]
adds r1, 0x26
bl CopyItemName
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
ldr r1, [r4]
adds r1, 0x26
movs r0, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r0, [r4]
adds r0, 0xA6
ldr r1, =gText_FilledStorageSpace2
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
movs r0, 0x4
movs r1, 0x8
movs r2, 0x16
@@ -70839,15 +70839,15 @@ sub_802D8FC: @ 802D8FC
ldr r1, [r4]
adds r1, 0x26
bl CopyItemName
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
ldr r1, [r4]
adds r1, 0x26
movs r0, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r0, [r4]
adds r0, 0xA6
ldr r1, =gText_CantHoldMore
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
movs r0, 0x4
movs r1, 0x9
movs r2, 0x16
@@ -71819,7 +71819,7 @@ sub_802E0D0: @ 802E0D0
push {r4,lr}
sub sp, 0xC
adds r4, r1, 0
- ldr r3, =gUnknown_03003090
+ ldr r3, =gRecvCmds
lsls r2, r0, 4
adds r0, r2, r3
ldrh r1, [r0]
@@ -71946,7 +71946,7 @@ sub_802E1BC: @ 802E1BC
sub sp, 0xC
adds r5, r0, 0
adds r4, r1, 0
- ldr r2, =gUnknown_03003090
+ ldr r2, =gRecvCmds
ldrh r0, [r2]
movs r1, 0xFF
lsls r1, 8
@@ -72036,7 +72036,7 @@ sub_802E264: @ 802E264
adds r4, r0, 0
adds r5, r2, 0
adds r6, r3, 0
- ldr r3, =gUnknown_03003090
+ ldr r3, =gRecvCmds
lsls r2, r1, 4
adds r0, r2, r3
ldrh r1, [r0]
@@ -72091,7 +72091,7 @@ sub_802E2D0: @ 802E2D0
push {r4,lr}
sub sp, 0xC
adds r4, r0, 0
- ldr r3, =gUnknown_03003090
+ ldr r3, =gRecvCmds
lsls r2, r1, 4
adds r0, r2, r3
ldrh r1, [r0]
@@ -73085,7 +73085,7 @@ sub_802EAB0: @ 802EAB0
ldrb r0, [r0]
cmp r0, 0
beq _0802EB14
- ldr r1, =gUnknown_03003090
+ ldr r1, =gRecvCmds
ldrh r0, [r1, 0x2]
ldr r5, =0x00007fff
cmp r0, r5
diff --git a/asm/load_save.s b/asm/load_save.s
deleted file mode 100644
index 2b4be8e67..000000000
--- a/asm/load_save.s
+++ /dev/null
@@ -1,669 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start MoveSaveBlocks_ResetHeap
-MoveSaveBlocks_ResetHeap: @ 8076C2C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r5, =gMain
- ldr r0, [r5, 0xC]
- str r0, [sp]
- ldr r1, [r5, 0x10]
- str r1, [sp, 0x4]
- movs r0, 0
- str r0, [r5, 0xC]
- str r0, [r5, 0x10]
- ldr r1, =gUnknown_0203CF5C
- str r0, [r1]
- ldr r4, =0x02000000
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- ldr r6, =0x00000f2c
- adds r0, r4, 0
- adds r2, r6, 0
- bl memcpy
- ldr r1, =gSaveBlock1Ptr
- mov r10, r1
- ldr r1, [r1]
- ldr r7, =0x00003d88
- ldr r0, =0x02000f2c
- adds r2, r7, 0
- bl memcpy
- ldr r0, =gPokemonStoragePtr
- mov r8, r0
- ldr r1, [r0]
- ldr r0, =0x000083d0
- mov r9, r0
- ldr r0, =0x02004cb4
- mov r2, r9
- bl memcpy
- ldrb r1, [r4, 0xA]
- ldrb r0, [r4, 0xB]
- adds r1, r0
- ldrb r0, [r4, 0xC]
- adds r1, r0
- ldrb r0, [r4, 0xD]
- adds r0, r1
- bl SetSaveBlocksPointers
- ldr r1, =gSaveBlock2Ptr
- ldr r0, [r1]
- adds r1, r4, 0
- adds r2, r6, 0
- bl memcpy
- mov r1, r10
- ldr r0, [r1]
- ldr r1, =0x02000f2c
- adds r2, r7, 0
- bl memcpy
- mov r1, r8
- ldr r0, [r1]
- ldr r1, =0x02004cb4
- mov r2, r9
- bl memcpy
- movs r1, 0xE0
- lsls r1, 9
- adds r0, r4, 0
- bl InitHeap
- ldr r0, [sp, 0x4]
- str r0, [r5, 0x10]
- ldr r1, [sp]
- str r1, [r5, 0xC]
- bl Random
- adds r4, r0, 0
- bl Random
- lsls r4, 16
- lsls r0, 16
- lsrs r0, 16
- adds r4, r0
- adds r0, r4, 0
- bl ApplyNewEncyprtionKeyToAllEncryptedData
- ldr r1, =gSaveBlock2Ptr
- ldr r0, [r1]
- adds r0, 0xAC
- str r4, [r0]
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end MoveSaveBlocks_ResetHeap
-
- thumb_func_start sav2_x1_query_bit1
-sav2_x1_query_bit1: @ 8076D24
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r1, [r0, 0x9]
- movs r0, 0x1
- ands r0, r1
- bx lr
- .pool
- thumb_func_end sav2_x1_query_bit1
-
- thumb_func_start sav2_x9_clear_bit1
-sav2_x9_clear_bit1: @ 8076D34
- ldr r0, =gSaveBlock2Ptr
- ldr r2, [r0]
- ldrb r1, [r2, 0x9]
- movs r0, 0xFE
- ands r0, r1
- strb r0, [r2, 0x9]
- bx lr
- .pool
- thumb_func_end sav2_x9_clear_bit1
-
- thumb_func_start sub_8076D48
-sub_8076D48: @ 8076D48
- ldr r0, =gSaveBlock2Ptr
- ldr r2, [r0]
- ldrb r1, [r2, 0x9]
- movs r0, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- bx lr
- .pool
- thumb_func_end sub_8076D48
-
- thumb_func_start sub_8076D5C
-sub_8076D5C: @ 8076D5C
- push {lr}
- movs r0, 0
- bl sub_8084FAC
- ldr r0, =gSaveBlock2Ptr
- ldr r2, [r0]
- ldrb r1, [r2, 0x9]
- movs r0, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8076D5C
-
- thumb_func_start sav2_gender2_inplace_and_xFE
-sav2_gender2_inplace_and_xFE: @ 8076D78
- ldr r0, =gSaveBlock2Ptr
- ldr r2, [r0]
- ldrb r1, [r2, 0x9]
- movs r0, 0xFE
- ands r0, r1
- strb r0, [r2, 0x9]
- bx lr
- .pool
- thumb_func_end sav2_gender2_inplace_and_xFE
-
- thumb_func_start copy_player_party_to_sav1
-@ void copy_player_party_to_sav1()
-copy_player_party_to_sav1: @ 8076D8C
- push {r4,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =gPlayerPartyCount
- ldrb r1, [r1]
- movs r2, 0x8D
- lsls r2, 2
- adds r0, r2
- strb r1, [r0]
- movs r4, 0
-_08076DA0:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x64
- muls r1, r4
- adds r0, r1
- movs r2, 0x8E
- lsls r2, 2
- adds r0, r2
- ldr r2, =gPlayerParty
- adds r1, r2
- movs r2, 0x64
- bl memcpy
- adds r4, 0x1
- cmp r4, 0x5
- ble _08076DA0
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end copy_player_party_to_sav1
-
- thumb_func_start copy_player_party_from_sav1
-copy_player_party_from_sav1: @ 8076DD4
- push {r4,r5,lr}
- ldr r1, =gPlayerPartyCount
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r2, 0x8D
- lsls r2, 2
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- movs r4, 0
- ldr r5, =gPlayerParty
-_08076DEA:
- movs r0, 0x64
- adds r2, r4, 0
- muls r2, r0
- adds r0, r2, r5
- ldr r1, =gSaveBlock1Ptr
- ldr r1, [r1]
- adds r1, r2
- movs r2, 0x8E
- lsls r2, 2
- adds r1, r2
- movs r2, 0x64
- bl memcpy
- adds r4, 0x1
- cmp r4, 0x5
- ble _08076DEA
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end copy_player_party_from_sav1
-
- thumb_func_start save_serialize_npcs
-save_serialize_npcs: @ 8076E1C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, =gSaveBlock1Ptr
- mov r12, r0
- movs r5, 0xA3
- lsls r5, 4
- mov r8, r5
- ldr r4, =gMapObjects
- movs r3, 0
- movs r2, 0xF
-_08076E32:
- mov r6, r12
- ldr r1, [r6]
- adds r1, r3
- add r1, r8
- adds r0, r4, 0
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- adds r4, 0x24
- adds r3, 0x24
- subs r2, 0x1
- cmp r2, 0
- bge _08076E32
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end save_serialize_npcs
-
- thumb_func_start save_deserialize_npcs
-save_deserialize_npcs: @ 8076E64
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, =gSaveBlock1Ptr
- mov r12, r0
- movs r5, 0xA3
- lsls r5, 4
- mov r8, r5
- ldr r4, =gMapObjects
- movs r3, 0
- movs r2, 0xF
-_08076E7A:
- mov r6, r12
- ldr r1, [r6]
- adds r1, r3
- adds r0, r4, 0
- add r1, r8
- ldm r1!, {r5-r7}
- stm r0!, {r5-r7}
- ldm r1!, {r5-r7}
- stm r0!, {r5-r7}
- ldm r1!, {r5-r7}
- stm r0!, {r5-r7}
- adds r4, 0x24
- adds r3, 0x24
- subs r2, 0x1
- cmp r2, 0
- bge _08076E7A
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end save_deserialize_npcs
-
- thumb_func_start SaveSerializedGame
-SaveSerializedGame: @ 8076EAC
- push {lr}
- bl copy_player_party_to_sav1
- bl save_serialize_npcs
- pop {r0}
- bx r0
- thumb_func_end SaveSerializedGame
-
- thumb_func_start LoadSerializedGame
-LoadSerializedGame: @ 8076EBC
- push {lr}
- bl copy_player_party_from_sav1
- bl save_deserialize_npcs
- pop {r0}
- bx r0
- thumb_func_end LoadSerializedGame
-
- thumb_func_start copy_bags_and_unk_data_from_save_blocks
-copy_bags_and_unk_data_from_save_blocks: @ 8076ECC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r2, 0
- ldr r0, =gUnknown_02032180
- mov r12, r0
- ldr r1, =gSaveBlock2Ptr
- mov r10, r1
- ldr r5, =gSaveBlock1Ptr
- movs r3, 0xAC
- lsls r3, 3
- ldr r4, =gUnknown_02031C58
-_08076EE8:
- lsls r0, r2, 2
- ldr r1, [r5]
- adds r1, r3
- adds r1, r0
- ldr r0, [r1]
- stm r4!, {r0}
- adds r2, 0x1
- cmp r2, 0x1D
- ble _08076EE8
- movs r2, 0
- ldr r0, =gUnknown_02031C58
- ldr r5, =gSaveBlock1Ptr
- movs r3, 0xBB
- lsls r3, 3
- adds r4, r0, 0
- adds r4, 0x78
-_08076F08:
- lsls r0, r2, 2
- ldr r1, [r5]
- adds r1, r3
- adds r1, r0
- ldr r0, [r1]
- stm r4!, {r0}
- adds r2, 0x1
- cmp r2, 0x1D
- ble _08076F08
- movs r2, 0
- ldr r0, =gUnknown_02031C58
- ldr r5, =gSaveBlock1Ptr
- movs r3, 0xCA
- lsls r3, 3
- adds r4, r0, 0
- adds r4, 0xF0
-_08076F28:
- lsls r0, r2, 2
- ldr r1, [r5]
- adds r1, r3
- adds r1, r0
- ldr r0, [r1]
- stm r4!, {r0}
- adds r2, 0x1
- cmp r2, 0xF
- ble _08076F28
- movs r2, 0
- ldr r0, =gUnknown_02031C58
- ldr r5, =gSaveBlock1Ptr
- movs r6, 0x98
- lsls r6, 1
- adds r4, r0, r6
- movs r3, 0xD2
- lsls r3, 3
-_08076F4A:
- lsls r0, r2, 2
- ldr r1, [r5]
- adds r1, r3
- adds r1, r0
- ldr r0, [r1]
- stm r4!, {r0}
- adds r2, 0x1
- cmp r2, 0x3F
- ble _08076F4A
- movs r2, 0
- ldr r0, =gUnknown_02031C58
- ldr r5, =gSaveBlock1Ptr
- movs r7, 0x8C
- lsls r7, 2
- adds r4, r0, r7
- movs r3, 0xF2
- lsls r3, 3
-_08076F6C:
- lsls r0, r2, 2
- ldr r1, [r5]
- adds r1, r3
- adds r1, r0
- ldr r0, [r1]
- stm r4!, {r0}
- adds r2, 0x1
- cmp r2, 0x2D
- ble _08076F6C
- ldr r0, =gUnknown_02031C58
- ldr r1, =gSaveBlock1Ptr
- mov r8, r1
- movs r5, 0xBA
- lsls r5, 2
- adds r4, r0, r5
- movs r3, 0
- ldr r6, =0x00002be0
- mov r9, r6
- movs r2, 0xF
-_08076F92:
- mov r7, r8
- ldr r1, [r7]
- adds r1, r3
- adds r0, r4, 0
- add r1, r9
- ldm r1!, {r5-r7}
- stm r0!, {r5-r7}
- ldm r1!, {r5-r7}
- stm r0!, {r5-r7}
- ldm r1!, {r5-r7}
- stm r0!, {r5-r7}
- adds r4, 0x24
- adds r3, 0x24
- subs r2, 0x1
- cmp r2, 0
- bge _08076F92
- mov r1, r10
- ldr r0, [r1]
- adds r0, 0xAC
- ldr r0, [r0]
- mov r5, r12
- str r0, [r5]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end copy_bags_and_unk_data_from_save_blocks
-
- thumb_func_start copy_bags_and_unk_data_to_save_blocks
-copy_bags_and_unk_data_to_save_blocks: @ 8076FE0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r2, 0
- ldr r0, =gSaveBlock2Ptr
- mov r8, r0
- ldr r1, =gUnknown_02032180
- mov r12, r1
- ldr r5, =gSaveBlock1Ptr
- movs r3, 0xAC
- lsls r3, 3
- ldr r4, =gUnknown_02031C58
-_08076FFC:
- ldr r0, [r5]
- lsls r1, r2, 2
- adds r0, r3
- adds r0, r1
- ldm r4!, {r1}
- str r1, [r0]
- adds r2, 0x1
- cmp r2, 0x1D
- ble _08076FFC
- movs r2, 0
- ldr r5, =gSaveBlock1Ptr
- movs r4, 0xBB
- lsls r4, 3
- ldr r0, =gUnknown_02031C58
- adds r3, r0, 0
- adds r3, 0x78
-_0807701C:
- ldr r0, [r5]
- lsls r1, r2, 2
- adds r0, r4
- adds r0, r1
- ldm r3!, {r1}
- str r1, [r0]
- adds r2, 0x1
- cmp r2, 0x1D
- ble _0807701C
- movs r2, 0
- ldr r5, =gSaveBlock1Ptr
- movs r4, 0xCA
- lsls r4, 3
- ldr r0, =gUnknown_02031C58
- adds r3, r0, 0
- adds r3, 0xF0
-_0807703C:
- ldr r0, [r5]
- lsls r1, r2, 2
- adds r0, r4
- adds r0, r1
- ldm r3!, {r1}
- str r1, [r0]
- adds r2, 0x1
- cmp r2, 0xF
- ble _0807703C
- movs r2, 0
- ldr r5, =gSaveBlock1Ptr
- movs r4, 0xD2
- lsls r4, 3
- ldr r0, =gUnknown_02031C58
- movs r6, 0x98
- lsls r6, 1
- adds r3, r0, r6
-_0807705E:
- ldr r0, [r5]
- lsls r1, r2, 2
- adds r0, r4
- adds r0, r1
- ldm r3!, {r1}
- str r1, [r0]
- adds r2, 0x1
- cmp r2, 0x3F
- ble _0807705E
- movs r2, 0
- ldr r5, =gSaveBlock1Ptr
- movs r4, 0xF2
- lsls r4, 3
- ldr r0, =gUnknown_02031C58
- movs r7, 0x8C
- lsls r7, 2
- adds r3, r0, r7
-_08077080:
- ldr r0, [r5]
- lsls r1, r2, 2
- adds r0, r4
- adds r0, r1
- ldm r3!, {r1}
- str r1, [r0]
- adds r2, 0x1
- cmp r2, 0x2D
- ble _08077080
- ldr r0, =gSaveBlock1Ptr
- mov r9, r0
- ldr r1, =0x00002be0
- mov r10, r1
- ldr r4, =gUnknown_02031C58
- movs r3, 0
- movs r2, 0xF
-_080770A0:
- mov r5, r9
- ldr r1, [r5]
- adds r1, r3
- add r1, r10
- movs r6, 0xBA
- lsls r6, 2
- adds r0, r4, r6
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- adds r4, 0x24
- adds r3, 0x24
- subs r2, 0x1
- cmp r2, 0
- bge _080770A0
- mov r7, r8
- ldr r0, [r7]
- adds r0, 0xAC
- ldr r4, [r0]
- mov r2, r12
- ldr r1, [r2]
- str r1, [r0]
- adds r0, r4, 0
- bl ApplyNewEncyprtionKeyToBagItems
- ldr r0, [r7]
- adds r0, 0xAC
- str r4, [r0]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end copy_bags_and_unk_data_to_save_blocks
-
- thumb_func_start ApplyNewEncyprtionKeyToHword
-ApplyNewEncyprtionKeyToHword: @ 8077100
- ldr r2, =gSaveBlock2Ptr
- ldr r2, [r2]
- adds r2, 0xAC
- ldr r2, [r2]
- ldrh r3, [r0]
- eors r2, r3
- eors r2, r1
- strh r2, [r0]
- bx lr
- .pool
- thumb_func_end ApplyNewEncyprtionKeyToHword
-
- thumb_func_start ApplyNewEncyprtionKeyToWord
-ApplyNewEncyprtionKeyToWord: @ 8077118
- ldr r2, =gSaveBlock2Ptr
- ldr r3, [r2]
- adds r3, 0xAC
- ldr r2, [r0]
- ldr r3, [r3]
- eors r2, r3
- eors r2, r1
- str r2, [r0]
- bx lr
- .pool
- thumb_func_end ApplyNewEncyprtionKeyToWord
-
- thumb_func_start ApplyNewEncyprtionKeyToAllEncryptedData
-ApplyNewEncyprtionKeyToAllEncryptedData: @ 8077130
- push {r4,r5,lr}
- adds r4, r0, 0
- bl ApplyNewEncyprtionKeyToGameStats
- adds r0, r4, 0
- bl ApplyNewEncyprtionKeyToBagItems_
- adds r0, r4, 0
- bl ApplyNewEncyprtionKeyToBerryPowder
- ldr r5, =gSaveBlock1Ptr
- ldr r0, [r5]
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- adds r1, r4, 0
- bl ApplyNewEncyprtionKeyToWord
- ldr r0, [r5]
- ldr r1, =0x00000494
- adds r0, r1
- adds r1, r4, 0
- bl ApplyNewEncyprtionKeyToHword
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ApplyNewEncyprtionKeyToAllEncryptedData
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc
new file mode 100644
index 000000000..47e124a86
--- /dev/null
+++ b/asm/macros/battle_script.inc
@@ -0,0 +1,1389 @@
+@ commands
+ .macro attackcanceler
+ .byte 0x0
+ .endm
+
+ .macro accuracycheck param0, param1
+ .byte 0x1
+ .4byte \param0
+ .2byte \param1
+ .endm
+
+ .macro attackstring
+ .byte 0x2
+ .endm
+
+ .macro ppreduce
+ .byte 0x3
+ .endm
+
+ .macro critcalc
+ .byte 0x4
+ .endm
+
+ .macro damagecalc
+ .byte 0x5
+ .endm
+
+ .macro typecalc
+ .byte 0x6
+ .endm
+
+ .macro adjustnormaldamage
+ .byte 0x7
+ .endm
+
+ .macro adjustnormaldamage2
+ .byte 0x8
+ .endm
+
+ .macro attackanimation
+ .byte 0x9
+ .endm
+
+ .macro waitanimation
+ .byte 0xa
+ .endm
+
+ .macro healthbarupdate bank
+ .byte 0xb
+ .byte \bank
+ .endm
+
+ .macro datahpupdate bank
+ .byte 0xc
+ .byte \bank
+ .endm
+
+ .macro critmessage
+ .byte 0xd
+ .endm
+
+ .macro effectivenesssound
+ .byte 0xe
+ .endm
+
+ .macro resultmessage
+ .byte 0xf
+ .endm
+
+ .macro printstring param0
+ .byte 0x10
+ .2byte \param0
+ .endm
+
+ .macro printselectionstring param0
+ .byte 0x11
+ .2byte \param0
+ .endm
+
+ .macro waitmessage param0
+ .byte 0x12
+ .2byte \param0
+ .endm
+
+ .macro printfromtable param0
+ .byte 0x13
+ .4byte \param0
+ .endm
+
+ .macro printselectionstringfromtable param0
+ .byte 0x14
+ .4byte \param0
+ .endm
+
+ .macro seteffectwithchance
+ .byte 0x15
+ .endm
+
+ .macro seteffectprimary
+ .byte 0x16
+ .endm
+
+ .macro seteffectsecondary
+ .byte 0x17
+ .endm
+
+ .macro clearstatusfromeffect bank
+ .byte 0x18
+ .byte \bank
+ .endm
+
+ .macro tryfaintmon bank, param1, param2
+ .byte 0x19
+ .byte \bank
+ .byte \param1
+ .4byte \param2
+ .endm
+
+ .macro dofaintanimation bank
+ .byte 0x1a
+ .byte \bank
+ .endm
+
+ .macro cleareffectsonfaint bank
+ .byte 0x1b
+ .byte \bank
+ .endm
+
+ .macro jumpifstatus bank, status1, param2
+ .byte 0x1c
+ .byte \bank
+ .4byte \status1
+ .4byte \param2
+ .endm
+
+ .macro jumpifstatus2 bank, status2, param2
+ .byte 0x1d
+ .byte \bank
+ .4byte \status2
+ .4byte \param2
+ .endm
+
+ .macro jumpifability param0, ability, param2
+ .byte 0x1e
+ .byte \param0
+ .byte \ability
+ .4byte \param2
+ .endm
+
+ .macro jumpifsideaffecting bank, sidestatus, param2
+ .byte 0x1f
+ .byte \bank
+ .2byte \sidestatus
+ .4byte \param2
+ .endm
+
+ .macro jumpifstat bank, ifflag, stat, param3, param4
+ .byte 0x20
+ .byte \bank
+ .byte \ifflag
+ .byte \stat
+ .byte \param3
+ .4byte \param4
+ .endm
+
+ .macro jumpifstatus3condition bank, status3, param2, param3
+ .byte 0x21
+ .byte \bank
+ .4byte \status3
+ .byte \param2
+ .4byte \param3
+ .endm
+
+ .macro jumpiftype bank, type, param2
+ .byte 0x22
+ .byte \bank
+ .byte \type
+ .4byte \param2
+ .endm
+
+ .macro getexp bank
+ .byte 0x23
+ .byte \bank
+ .endm
+
+ .macro atk24 param0
+ .byte 0x24
+ .4byte \param0
+ .endm
+
+ .macro movevaluescleanup
+ .byte 0x25
+ .endm
+
+ .macro setmultihit param0
+ .byte 0x26
+ .byte \param0
+ .endm
+
+ .macro decrementmultihit param0
+ .byte 0x27
+ .4byte \param0
+ .endm
+
+ .macro goto param0
+ .byte 0x28
+ .4byte \param0
+ .endm
+
+ .macro jumpifbyte ifflag, param1, param2, param3
+ .byte 0x29
+ .byte \ifflag
+ .4byte \param1
+ .byte \param2
+ .4byte \param3
+ .endm
+
+ .macro jumpifhalfword ifflag, param1, param2, param3
+ .byte 0x2a
+ .byte \ifflag
+ .4byte \param1
+ .2byte \param2
+ .4byte \param3
+ .endm
+
+ .macro jumpifword ifflag, param1, param2, param3
+ .byte 0x2b
+ .byte \ifflag
+ .4byte \param1
+ .4byte \param2
+ .4byte \param3
+ .endm
+
+ .macro jumpifarrayequal param0, param1, param2, param3
+ .byte 0x2c
+ .4byte \param0
+ .4byte \param1
+ .byte \param2
+ .4byte \param3
+ .endm
+
+ .macro jumpifarraynotequal param0, param1, param2, param3
+ .byte 0x2d
+ .4byte \param0
+ .4byte \param1
+ .byte \param2
+ .4byte \param3
+ .endm
+
+ .macro setbyte param0, param1
+ .byte 0x2e
+ .4byte \param0
+ .byte \param1
+ .endm
+
+ .macro addbyte param0, param1
+ .byte 0x2f
+ .4byte \param0
+ .byte \param1
+ .endm
+
+ .macro subbyte param0, param1
+ .byte 0x30
+ .4byte \param0
+ .byte \param1
+ .endm
+
+ .macro copyarray param0, param1, param2
+ .byte 0x31
+ .4byte \param0
+ .4byte \param1
+ .byte \param2
+ .endm
+
+ .macro copyarraywithindex param0, param1, param2, param3
+ .byte 0x32
+ .4byte \param0
+ .4byte \param1
+ .4byte \param2
+ .byte \param3
+ .endm
+
+ .macro orbyte param0, param1
+ .byte 0x33
+ .4byte \param0
+ .byte \param1
+ .endm
+
+ .macro orhalfword param0, param1
+ .byte 0x34
+ .4byte \param0
+ .2byte \param1
+ .endm
+
+ .macro orword param0, param1
+ .byte 0x35
+ .4byte \param0
+ .4byte \param1
+ .endm
+
+ .macro bicbyte param0, param1
+ .byte 0x36
+ .4byte \param0
+ .byte \param1
+ .endm
+
+ .macro bichalfword param0, param1
+ .byte 0x37
+ .4byte \param0
+ .2byte \param1
+ .endm
+
+ .macro bicword param0, param1
+ .byte 0x38
+ .4byte \param0
+ .4byte \param1
+ .endm
+
+ .macro pause param0
+ .byte 0x39
+ .2byte \param0
+ .endm
+
+ .macro waitstate
+ .byte 0x3a
+ .endm
+
+ .macro healthbar_update bank
+ .byte 0x3b
+ .byte \bank
+ .endm
+
+ .macro return
+ .byte 0x3c
+ .endm
+
+ .macro end
+ .byte 0x3d
+ .endm
+
+ .macro end2
+ .byte 0x3e
+ .endm
+
+ .macro end3
+ .byte 0x3f
+ .endm
+
+ .macro jumpifaffectedbyprotect param0
+ .byte 0x40
+ .4byte \param0
+ .endm
+
+ .macro call param0
+ .byte 0x41
+ .4byte \param0
+ .endm
+
+ .macro jumpiftype2 bank, type, param2
+ .byte 0x42
+ .byte \bank
+ .byte \type
+ .4byte \param2
+ .endm
+
+ .macro jumpifabilitypresent ability, param1
+ .byte 0x43
+ .byte \ability
+ .4byte \param1
+ .endm
+
+ .macro endselectionscript
+ .byte 0x44
+ .endm
+
+ .macro playanimation bank, param1, param2
+ .byte 0x45
+ .byte \bank
+ .byte \param1
+ .4byte \param2
+ .endm
+
+ .macro playanimation2 bank, param1, param2
+ .byte 0x46
+ .byte \bank
+ .4byte \param1
+ .4byte \param2
+ .endm
+
+ .macro setgraphicalstatchangevalues
+ .byte 0x47
+ .endm
+
+ .macro playstatchangeanimation bank, param1, param2
+ .byte 0x48
+ .byte \bank
+ .byte \param1
+ .byte \param2
+ .endm
+
+ .macro moveend param0, param1
+ .byte 0x49
+ .byte \param0
+ .byte \param1
+ .endm
+
+ .macro typecalc2
+ .byte 0x4a
+ .endm
+
+ .macro returnatktoball
+ .byte 0x4b
+ .endm
+
+ .macro getswitchedmondata bank
+ .byte 0x4c
+ .byte \bank
+ .endm
+
+ .macro switchindataupdate bank
+ .byte 0x4d
+ .byte \bank
+ .endm
+
+ .macro switchinanim bank, param1
+ .byte 0x4e
+ .byte \bank
+ .byte \param1
+ .endm
+
+ .macro jumpifcantswitch bank, param1
+ .byte 0x4f
+ .byte \bank
+ .4byte \param1
+ .endm
+
+ .macro openpartyscreen param0, param1
+ .byte 0x50
+ .byte \param0
+ .4byte \param1
+ .endm
+
+ .macro switchhandleorder bank, param1
+ .byte 0x51
+ .byte \bank
+ .byte \param1
+ .endm
+
+ .macro switchineffects bank
+ .byte 0x52
+ .byte \bank
+ .endm
+
+ .macro trainerslidein bank
+ .byte 0x53
+ .byte \bank
+ .endm
+
+ .macro playse param0
+ .byte 0x54
+ .2byte \param0
+ .endm
+
+ .macro fanfare param0
+ .byte 0x55
+ .2byte \param0
+ .endm
+
+ .macro playfaintcry bank
+ .byte 0x56
+ .byte \bank
+ .endm
+
+ .macro atk57
+ .byte 0x57
+ .endm
+
+ .macro returntoball bank
+ .byte 0x58
+ .byte \bank
+ .endm
+
+ .macro handlelearnnewmove param0, param1, param2
+ .byte 0x59
+ .4byte \param0
+ .4byte \param1
+ .byte \param2
+ .endm
+
+ .macro yesnoboxlearnmove param0
+ .byte 0x5a
+ .4byte \param0
+ .endm
+
+ .macro yesnoboxstoplearningmove param0
+ .byte 0x5b
+ .4byte \param0
+ .endm
+
+ .macro hitanimation bank
+ .byte 0x5c
+ .byte \bank
+ .endm
+
+ .macro getmoneyreward
+ .byte 0x5d
+ .endm
+
+ .macro atk5E bank
+ .byte 0x5e
+ .byte \bank
+ .endm
+
+ .macro atk5F
+ .byte 0x5f
+ .endm
+
+ .macro incrementgamestat param0
+ .byte 0x60
+ .byte \param0
+ .endm
+
+ .macro drawpartystatussummary bank
+ .byte 0x61
+ .byte \bank
+ .endm
+
+ .macro atk62 bank
+ .byte 0x62
+ .byte \bank
+ .endm
+
+ .macro jumptorandomattack param0
+ .byte 0x63
+ .byte \param0
+ .endm
+
+ .macro statusanimation bank
+ .byte 0x64
+ .byte \bank
+ .endm
+
+ .macro status2animation bank, status2
+ .byte 0x65
+ .byte \bank
+ .4byte \status2
+ .endm
+
+ .macro chosenstatusanimation bank, param1, param2
+ .byte 0x66
+ .byte \bank
+ .byte \param1
+ .4byte \param2
+ .endm
+
+ .macro yesnobox
+ .byte 0x67
+ .endm
+
+ .macro cancelallactions
+ .byte 0x68
+ .endm
+
+ .macro adjustsetdamage
+ .byte 0x69
+ .endm
+
+ .macro removeitem bank
+ .byte 0x6a
+ .byte \bank
+ .endm
+
+ .macro atknameinbuff1
+ .byte 0x6b
+ .endm
+
+ .macro drawlvlupbox
+ .byte 0x6c
+ .endm
+
+ .macro resetsentmonsvalue
+ .byte 0x6d
+ .endm
+
+ .macro setatktoplayer0
+ .byte 0x6e
+ .endm
+
+ .macro makevisible bank
+ .byte 0x6f
+ .byte \bank
+ .endm
+
+ .macro recordlastability bank
+ .byte 0x70
+ .byte \bank
+ .endm
+
+ .macro buffermovetolearn
+ .byte 0x71
+ .endm
+
+ .macro jumpifplayerran param0
+ .byte 0x72
+ .4byte \param0
+ .endm
+
+ .macro hpthresholds bank
+ .byte 0x73
+ .byte \bank
+ .endm
+
+ .macro hpthresholds2 bank
+ .byte 0x74
+ .byte \bank
+ .endm
+
+ .macro useitemonopponent
+ .byte 0x75
+ .endm
+
+ .macro various bank, param1
+ .byte 0x76
+ .byte \bank
+ .byte \param1
+ .endm
+
+ .macro setprotectlike
+ .byte 0x77
+ .endm
+
+ .macro faintifabilitynotdamp
+ .byte 0x78
+ .endm
+
+ .macro setatkhptozero
+ .byte 0x79
+ .endm
+
+ .macro jumpifnexttargetvalid param0
+ .byte 0x7a
+ .4byte \param0
+ .endm
+
+ .macro tryhealhalfhealth param0, bank
+ .byte 0x7b
+ .4byte \param0
+ .byte \bank
+ .endm
+
+ .macro trymirrormove
+ .byte 0x7c
+ .endm
+
+ .macro setrain
+ .byte 0x7d
+ .endm
+
+ .macro setreflect
+ .byte 0x7e
+ .endm
+
+ .macro setseeded
+ .byte 0x7f
+ .endm
+
+ .macro manipulatedamage param0
+ .byte 0x80
+ .byte \param0
+ .endm
+
+ .macro trysetrest param0
+ .byte 0x81
+ .4byte \param0
+ .endm
+
+ .macro jumpifnotfirstturn param0
+ .byte 0x82
+ .4byte \param0
+ .endm
+
+ .macro nop
+ .byte 0x83
+ .endm
+
+ .macro jumpifcantmakeasleep param0
+ .byte 0x84
+ .4byte \param0
+ .endm
+
+ .macro stockpile
+ .byte 0x85
+ .endm
+
+ .macro stockpiletobasedamage param0
+ .byte 0x86
+ .4byte \param0
+ .endm
+
+ .macro stockpiletohpheal param0
+ .byte 0x87
+ .4byte \param0
+ .endm
+
+ .macro negativedamage
+ .byte 0x88
+ .endm
+
+ .macro statbuffchange param0, param1
+ .byte 0x89
+ .byte \param0
+ .4byte \param1
+ .endm
+
+ .macro normalisebuffs
+ .byte 0x8a
+ .endm
+
+ .macro setbide
+ .byte 0x8b
+ .endm
+
+ .macro confuseifrepeatingattackends
+ .byte 0x8c
+ .endm
+
+ .macro setmultihitcounter param0
+ .byte 0x8d
+ .byte \param0
+ .endm
+
+ .macro initmultihitstring
+ .byte 0x8e
+ .endm
+
+ .macro forcerandomswitch param0
+ .byte 0x8f
+ .4byte \param0
+ .endm
+
+ .macro tryconversiontypechange param0
+ .byte 0x90
+ .4byte \param0
+ .endm
+
+ .macro givepaydaymoney
+ .byte 0x91
+ .endm
+
+ .macro setlightscreen
+ .byte 0x92
+ .endm
+
+ .macro tryKO param0
+ .byte 0x93
+ .4byte \param0
+ .endm
+
+ .macro damagetohalftargethp
+ .byte 0x94
+ .endm
+
+ .macro setsandstorm
+ .byte 0x95
+ .endm
+
+ .macro weatherdamage
+ .byte 0x96
+ .endm
+
+ .macro tryinfatuating param0
+ .byte 0x97
+ .4byte \param0
+ .endm
+
+ .macro updatestatusicon bank
+ .byte 0x98
+ .byte \bank
+ .endm
+
+ .macro setmist
+ .byte 0x99
+ .endm
+
+ .macro setfocusenergy
+ .byte 0x9a
+ .endm
+
+ .macro transformdataexecution
+ .byte 0x9b
+ .endm
+
+ .macro setsubstitute
+ .byte 0x9c
+ .endm
+
+ .macro mimicattackcopy param0
+ .byte 0x9d
+ .4byte \param0
+ .endm
+
+ .macro metronome
+ .byte 0x9e
+ .endm
+
+ .macro dmgtolevel
+ .byte 0x9f
+ .endm
+
+ .macro psywavedamageeffect
+ .byte 0xa0
+ .endm
+
+ .macro counterdamagecalculator param0
+ .byte 0xa1
+ .4byte \param0
+ .endm
+
+ .macro mirrorcoatdamagecalculator param0
+ .byte 0xa2
+ .4byte \param0
+ .endm
+
+ .macro disablelastusedattack param0
+ .byte 0xa3
+ .4byte \param0
+ .endm
+
+ .macro trysetencore param0
+ .byte 0xa4
+ .4byte \param0
+ .endm
+
+ .macro painsplitdmgcalc param0
+ .byte 0xa5
+ .4byte \param0
+ .endm
+
+ .macro settypetorandomresistance param0
+ .byte 0xa6
+ .4byte \param0
+ .endm
+
+ .macro setalwayshitflag
+ .byte 0xa7
+ .endm
+
+ .macro copymovepermanently param0
+ .byte 0xa8
+ .4byte \param0
+ .endm
+
+ .macro trychoosesleeptalkmove param0
+ .byte 0xa9
+ .4byte \param0
+ .endm
+
+ .macro setdestinybond
+ .byte 0xaa
+ .endm
+
+ .macro trysetdestinybondtohappen
+ .byte 0xab
+ .endm
+
+ .macro remaininghptopower
+ .byte 0xac
+ .endm
+
+ .macro tryspiteppreduce param0
+ .byte 0xad
+ .4byte \param0
+ .endm
+
+ .macro healpartystatus
+ .byte 0xae
+ .endm
+
+ .macro cursetarget param0
+ .byte 0xaf
+ .4byte \param0
+ .endm
+
+ .macro trysetspikes param0
+ .byte 0xb0
+ .4byte \param0
+ .endm
+
+ .macro setforesight
+ .byte 0xb1
+ .endm
+
+ .macro trysetperishsong param0
+ .byte 0xb2
+ .4byte \param0
+ .endm
+
+ .macro rolloutdamagecalculation
+ .byte 0xb3
+ .endm
+
+ .macro jumpifconfusedandstatmaxed stat, param1
+ .byte 0xb4
+ .byte \stat
+ .4byte \param1
+ .endm
+
+ .macro furycuttercalc
+ .byte 0xb5
+ .endm
+
+ .macro happinesstodamagecalculation
+ .byte 0xb6
+ .endm
+
+ .macro presentdamagecalculation
+ .byte 0xb7
+ .endm
+
+ .macro setsafeguard
+ .byte 0xb8
+ .endm
+
+ .macro magnitudedamagecalculation
+ .byte 0xb9
+ .endm
+
+ .macro jumpifnopursuitswitchdmg param0
+ .byte 0xba
+ .4byte \param0
+ .endm
+
+ .macro setsunny
+ .byte 0xbb
+ .endm
+
+ .macro maxattackhalvehp param0
+ .byte 0xbc
+ .4byte \param0
+ .endm
+
+ .macro copyfoestats param0
+ .byte 0xbd
+ .4byte \param0
+ .endm
+
+ .macro rapidspinfree
+ .byte 0xbe
+ .endm
+
+ .macro setdefensecurlbit
+ .byte 0xbf
+ .endm
+
+ .macro recoverbasedonsunlight param0
+ .byte 0xc0
+ .4byte \param0
+ .endm
+
+ .macro hiddenpowercalc
+ .byte 0xc1
+ .endm
+
+ .macro selectfirstvalidtarget
+ .byte 0xc2
+ .endm
+
+ .macro trysetfutureattack param0
+ .byte 0xc3
+ .4byte \param0
+ .endm
+
+ .macro trydobeatup param0, param1
+ .byte 0xc4
+ .4byte \param0
+ .4byte \param1
+ .endm
+
+ .macro setsemiinvulnerablebit
+ .byte 0xc5
+ .endm
+
+ .macro clearsemiinvulnerablebit
+ .byte 0xc6
+ .endm
+
+ .macro setminimize
+ .byte 0xc7
+ .endm
+
+ .macro sethail
+ .byte 0xc8
+ .endm
+
+ .macro jumpifattackandspecialattackcannotfall param0
+ .byte 0xc9
+ .4byte \param0
+ .endm
+
+ .macro setforcedtarget
+ .byte 0xca
+ .endm
+
+ .macro setcharge
+ .byte 0xcb
+ .endm
+
+ .macro callterrainattack
+ .byte 0xcc
+ .endm
+
+ .macro cureifburnedparalysedorpoisoned param0
+ .byte 0xcd
+ .4byte \param0
+ .endm
+
+ .macro settorment param0
+ .byte 0xce
+ .4byte \param0
+ .endm
+
+ .macro jumpifnodamage param0
+ .byte 0xcf
+ .4byte \param0
+ .endm
+
+ .macro settaunt param0
+ .byte 0xd0
+ .4byte \param0
+ .endm
+
+ .macro trysethelpinghand param0
+ .byte 0xd1
+ .4byte \param0
+ .endm
+
+ .macro tryswapitems param0
+ .byte 0xd2
+ .4byte \param0
+ .endm
+
+ .macro trycopyability param0
+ .byte 0xd3
+ .4byte \param0
+ .endm
+
+ .macro trywish param0, param1
+ .byte 0xd4
+ .byte \param0
+ .4byte \param1
+ .endm
+
+ .macro trysetroots param0
+ .byte 0xd5
+ .4byte \param0
+ .endm
+
+ .macro doubledamagedealtifdamaged
+ .byte 0xd6
+ .endm
+
+ .macro setyawn param0
+ .byte 0xd7
+ .4byte \param0
+ .endm
+
+ .macro setdamagetohealthdifference param0
+ .byte 0xd8
+ .4byte \param0
+ .endm
+
+ .macro scaledamagebyhealthratio
+ .byte 0xd9
+ .endm
+
+ .macro tryswapabilities param0
+ .byte 0xda
+ .4byte \param0
+ .endm
+
+ .macro tryimprision param0
+ .byte 0xdb
+ .4byte \param0
+ .endm
+
+ .macro trysetgrudge param0
+ .byte 0xdc
+ .4byte \param0
+ .endm
+
+ .macro weightdamagecalculation
+ .byte 0xdd
+ .endm
+
+ .macro asistattackselect param0
+ .byte 0xde
+ .4byte \param0
+ .endm
+
+ .macro trysetmagiccoat param0
+ .byte 0xdf
+ .4byte \param0
+ .endm
+
+ .macro trysetsnatch param0
+ .byte 0xe0
+ .4byte \param0
+ .endm
+
+ .macro trygetintimidatetarget param0
+ .byte 0xe1
+ .4byte \param0
+ .endm
+
+ .macro switchoutabilities bank
+ .byte 0xe2
+ .byte \bank
+ .endm
+
+ .macro jumpifhasnohp bank, param1
+ .byte 0xe3
+ .byte \bank
+ .4byte \param1
+ .endm
+
+ .macro getsecretpowereffect
+ .byte 0xe4
+ .endm
+
+ .macro pickup
+ .byte 0xe5
+ .endm
+
+ .macro docastformchangeanimation
+ .byte 0xe6
+ .endm
+
+ .macro trycastformdatachange
+ .byte 0xe7
+ .endm
+
+ .macro settypebasedhalvers param0
+ .byte 0xe8
+ .4byte \param0
+ .endm
+
+ .macro setweatherballtype
+ .byte 0xe9
+ .endm
+
+ .macro tryrecycleitem param0
+ .byte 0xea
+ .4byte \param0
+ .endm
+
+ .macro settypetoterrain param0
+ .byte 0xeb
+ .4byte \param0
+ .endm
+
+ .macro pursuitrelated param0
+ .byte 0xec
+ .4byte \param0
+ .endm
+
+ .macro snatchsetbanks
+ .byte 0xed
+ .endm
+
+ .macro removelightscreenreflect
+ .byte 0xee
+ .endm
+
+ .macro handleballthrow
+ .byte 0xef
+ .endm
+
+ .macro givecaughtmon
+ .byte 0xf0
+ .endm
+
+ .macro trysetcaughtmondexflags param0
+ .byte 0xf1
+ .4byte \param0
+ .endm
+
+ .macro displaydexinfo
+ .byte 0xf2
+ .endm
+
+ .macro trygivecaughtmonnick param0
+ .byte 0xf3
+ .4byte \param0
+ .endm
+
+ .macro subattackerhpbydmg
+ .byte 0xf4
+ .endm
+
+ .macro removeattackerstatus1
+ .byte 0xf5
+ .endm
+
+ .macro finishaction
+ .byte 0xf6
+ .endm
+
+ .macro finishturn
+ .byte 0xf7
+ .endm
+
+ .macro trainerslideout param0
+ .byte 0xf8
+ .byte \param0
+ .endm
+
+@ various command changed to more readable macros
+ .macro cancelmultiturnmoves bank
+ various \bank, VARIOUS_CANCEL_MULTI_TURN_MOVES
+ .endm
+
+ .macro setmagiccoattarget bank
+ various \bank, VARIOUS_SET_MAGIC_COAT_TARGET
+ .endm
+
+ .macro getifcantrunfrombattle bank
+ various \bank, VARIOUS_IS_RUNNING_IMPOSSIBLE
+ .endm
+
+ .macro getmovetarget bank
+ various \bank, VARIOUS_GET_MOVE_TARGET
+ .endm
+
+ .macro various4 bank
+ various \bank, 4
+ .endm
+
+ .macro resetintrimidatetracebits bank
+ various \bank, VARIOUS_RESET_INTIMIDATE_TRACE_BITS
+ .endm
+
+ .macro updatechoicemoveonlvlup bank
+ various \bank, VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP
+ .endm
+
+ .macro various7 bank
+ various \bank, 7
+ .endm
+
+ .macro various8 bank
+ various \bank, 8
+ .endm
+
+ .macro various9 bank
+ various \bank, 9
+ .endm
+
+ .macro various10 bank
+ various \bank, 10
+ .endm
+
+ .macro various11 bank
+ various \bank, 11
+ .endm
+
+ .macro various12 bank
+ various \bank, 12
+ .endm
+
+ .macro forfeityesnobox bank
+ various \bank, VARIOUS_EMIT_YESNOBOX
+ .endm
+
+ .macro various14 bank
+ various \bank, 14
+ .endm
+
+ .macro various15 bank
+ various \bank, 15
+ .endm
+
+ .macro various16 bank
+ various \bank, 16
+ .endm
+
+ .macro various17 bank
+ various \bank, 17
+ .endm
+
+ .macro waitcry bank
+ various \bank, VARIOUS_WAIT_CRY
+ .endm
+
+ .macro returnopponentmon1toball bank
+ various \bank, VARIOUS_RETURN_OPPONENT_MON1
+ .endm
+
+ .macro returnopponentmon2toball bank
+ various \bank, VARIOUS_RETURN_OPPONENT_MON2
+ .endm
+
+ .macro various21 bank
+ various \bank, 21
+ .endm
+
+ .macro various22 bank
+ various \bank, 22
+ .endm
+
+ .macro various23 bank
+ various \bank, 23
+ .endm
+
+ .macro various24 bank
+ various \bank, 24
+ .endm
+
+ .macro setoutcomeonteleport bank
+ various \bank, VARIOUS_SET_TELEPORT_OUTCOME
+ .endm
+
+ .macro playtrainerdefeatbgm bank
+ various \bank, VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC
+ .endm
+
+@ helpful macros
+ .macro setstatchanger stat, stages, down
+ setbyte sSTATCHANGER \stat | \stages << 4 | \down << 7
+ .endm
+
+ .macro setmoveeffect effect
+ setbyte cEFFECT_CHOOSER \effect
+ .endm
+
+ .macro chosenstatus1animation bank, status
+ chosenstatusanimation \bank 0x0 \status
+ .endm
+
+ .macro chosenstatus2animation bank, status
+ chosenstatusanimation \bank 0x1 \status
+ .endm
+
+ .macro sethword dst, value
+ setbyte \dst, \value & 0xFF
+ setbyte \dst + 1, (\value >> 8) & 0xFF
+ .endm
+
+ .macro setword dst, value
+ setbyte \dst, \value & 0xFF
+ setbyte \dst + 1, (\value >> 8) & 0xFF
+ setbyte \dst + 2, (\value >> 16) & 0xFF
+ setbyte \dst + 3, (\value >> 24) & 0xFF
+ .endm
+
+ .macro copybyte dst, src
+ copyarray \dst, \src, 0x1
+ .endm
+
+ .macro copyhword dst, src
+ copyarray \dst, \src, 0x2
+ .endm
+
+ .macro copyword dst, src
+ copyarray \dst, \src, 0x4
+ .endm
+
+ .macro jumpifbytenotequal byte1, byte2, jumpptr
+ jumpifarraynotequal \byte1, \byte2, 0x1, \jumpptr
+ .endm
+
+ .macro jumpifbyteequal byte1, byte2, jumpptr
+ jumpifarrayequal \byte1, \byte2, 0x1, \jumpptr
+ .endm
+
+ .macro jumpifmove move, jumpptr
+ jumpifhalfword EQUAL, gCurrentMove, \move, \jumpptr
+ .endm
+
+ .macro jumpifnotmove move, jumpptr
+ jumpifhalfword NOT_EQUAL, gCurrentMove, \move, \jumpptr
+ .endm
+
+ .macro jumpifstatus3 bank, status, jumpptr
+ jumpifstatus3condition \bank, \status, 0x0, \jumpptr
+ .endm
+
+ .macro jumpifnostatus3 bank, status, jumpptr
+ jumpifstatus3condition \bank, \status, 0x1, \jumpptr
+ .endm
diff --git a/asm/menu.s b/asm/menu.s
index 71ff9218c..e1102893a 100755
--- a/asm/menu.s
+++ b/asm/menu.s
@@ -22,7 +22,7 @@ AddTextPrinterWithCallbackForMessage: @ 8197A9C
ands r1, r2
orrs r1, r0
strb r1, [r3]
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
diff --git a/asm/mystery_event_menu.s b/asm/mystery_event_menu.s
index df8e443a1..f15346b81 100644
--- a/asm/mystery_event_menu.s
+++ b/asm/mystery_event_menu.s
@@ -232,7 +232,7 @@ _08178B56:
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00005501
adds r0, r2, 0
strh r0, [r1]
diff --git a/asm/naming_screen.s b/asm/naming_screen.s
index 22d7b260e..cded48783 100644
--- a/asm/naming_screen.s
+++ b/asm/naming_screen.s
@@ -904,7 +904,7 @@ _080E3586:
movs r1, 0x1
orrs r0, r1
strb r0, [r2]
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
diff --git a/asm/new_menu_helpers.s b/asm/new_menu_helpers.s
index d79f7df32..25f7fe605 100755
--- a/asm/new_menu_helpers.s
+++ b/asm/new_menu_helpers.s
@@ -185,7 +185,7 @@ AddTextPrinterForMessage: @ 81972C4
ands r1, r2
orrs r1, r0
strb r1, [r3]
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -222,7 +222,7 @@ AddTextPrinterForMessage_2: @ 8197310
ands r1, r2
orrs r1, r0
strb r1, [r3]
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -945,7 +945,7 @@ DisplayItemMessageOnField: @ 81978EC
lsls r4, 24
lsrs r4, 24
bl sub_81973A4
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
lsls r0, 24
lsrs r0, 24
movs r2, 0x80
@@ -1021,8 +1021,8 @@ _0819798A:
bx r1
thumb_func_end sub_8197964
- thumb_func_start sav2_get_text_speed
-sav2_get_text_speed: @ 8197990
+ thumb_func_start GetPlayerTextSpeed
+GetPlayerTextSpeed: @ 8197990
push {lr}
ldr r0, =gSaveBlock2Ptr
ldr r2, [r0]
@@ -1045,7 +1045,7 @@ _081979AC:
pop {r1}
bx r1
.pool
- thumb_func_end sav2_get_text_speed
+ thumb_func_end GetPlayerTextSpeed
thumb_func_start sub_81979C4
sub_81979C4: @ 81979C4
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 018ee7b84..4ae689d4d 100755
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -5992,7 +5992,7 @@ sub_81B3300: @ 81B3300
movs r1, 0x1
orrs r0, r1
strb r0, [r2]
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
diff --git a/asm/pokeblock_feed.s b/asm/pokeblock_feed.s
index 9830db888..aef726c16 100644
--- a/asm/pokeblock_feed.s
+++ b/asm/pokeblock_feed.s
@@ -704,7 +704,7 @@ sub_817A1C4: @ 817A1C4
lsls r0, 24
lsrs r0, 24
adds r1, r4, 0
- bl sub_8136FE4
+ bl PokeblockGetGain
ldr r6, =gUnknown_0203BC9E
strh r0, [r6]
ldr r1, =gStringVar1
@@ -740,7 +740,7 @@ _0817A268:
movs r1, 0x1
orrs r0, r1
strb r0, [r2]
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index 94245f93b..c30cd7c28 100755
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -6737,7 +6737,7 @@ sub_80CAC58: @ 80CAC58
sub sp, 0xC
lsls r0, 24
lsrs r6, r0, 24
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
ldr r1, =gUnknown_0857276C
lsls r0, r6, 3
adds r0, r1
@@ -6774,7 +6774,7 @@ _080CACB8:
adds r1, r2
_080CACC0:
movs r0, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
b _080CAD30
.pool
_080CACD0:
@@ -6817,7 +6817,7 @@ _080CAD16:
ldr r0, =0x000021eb
adds r1, r0
movs r0, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
_080CAD30:
ldr r5, =gUnknown_02039D08
ldr r0, [r5]
@@ -6827,7 +6827,7 @@ _080CAD30:
lsls r1, r6, 3
adds r1, r2
ldr r1, [r1]
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
movs r0, 0x1
movs r1, 0x11
bl FillWindowPixelBuffer
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index d30c6b4ee..4441767db 100755
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -212,17 +212,17 @@ _081C3FEC:
movs r2, 0x1
movs r3, 0x2
bl ConvertIntToDecimalStringN
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
movs r0, 0
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r0, 0x1
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r4, =gStringVar4
ldr r1, =gUnknown_0861CE97
adds r0, r4, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
movs r0, 0x1
adds r1, r4, 0
movs r2, 0x2C
@@ -5547,7 +5547,7 @@ DisplayItemMessageInBattlePyramid: @ 81C6DD8
movs r0, 0x2
movs r1, 0x11
bl FillWindowPixelBuffer
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
lsls r0, 24
lsrs r0, 24
movs r1, 0x1
diff --git a/asm/pokenav.s b/asm/pokenav.s
index 249258404..532d7599b 100755
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -10207,7 +10207,7 @@ sub_81CC158: @ 81CC158
adds r1, 0xF
bl sub_81CAF78
adds r5, r0, 0
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
lsls r0, 24
lsrs r0, 24
ldrb r2, [r4, 0x14]
@@ -16941,17 +16941,17 @@ sub_81CF7F4: @ 81CF7F4
mov r8, r0
bl sub_81CF0F0
adds r7, r0, 0
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
ldr r4, =gStringVar1
movs r0, 0
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
movs r0, 0xFF
strb r0, [r4]
ldr r5, =gStringVar2
ldr r1, =gText_NumberF700
adds r0, r5, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
mov r1, r8
ldrb r0, [r1, 0x8]
movs r1, 0x1
@@ -19854,14 +19854,14 @@ sub_81D0E84: @ 81D0E84
movs r2, 0
movs r3, 0x2
bl ConvertIntToDecimalStringN
- bl sub_81AFBF0
+ bl UnkTextUtil_Reset
movs r0, 0
adds r1, r4, 0
- bl sub_81AFC0C
+ bl UnkTextUtil_SetPtrI
ldr r4, =gStringVar4
ldr r1, =gText_RibbonsF700
adds r0, r4, 0
- bl sub_81AFC28
+ bl UnkTextUtil_StringExpandPlaceholders
ldrb r0, [r5, 0xA]
movs r1, 0x44
bl FillWindowPixelBuffer
@@ -23751,7 +23751,7 @@ sub_81D2BF4: @ 81D2BF4
movs r1, 0x1
orrs r0, r1
strb r0, [r2]
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -25722,7 +25722,7 @@ sub_81D3AD8: @ 81D3AD8
adds r5, r0, 0
adds r4, r1, 0
movs r0, 0x1E
- bl sub_81535DC
+ bl TryCopySpecialSaveSection
cmp r0, 0x1
bne _081D3B04
ldr r2, =0x00000ee8
@@ -28068,7 +28068,7 @@ sub_81D4E30: @ 81D4E30
lsls r2, 6
movs r1, 0
bl memset
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00005503
adds r0, r2, 0
strh r0, [r1]
diff --git a/asm/record_mixing.s b/asm/record_mixing.s
index 35e0557ee..e7d7c8a38 100644
--- a/asm/record_mixing.s
+++ b/asm/record_mixing.s
@@ -993,7 +993,7 @@ _080E75AC:
movs r0, 0xC8
muls r0, r2
adds r1, r0
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
movs r2, 0xC8
bl memcpy
b _080E75FC
diff --git a/asm/recorded_battle.s b/asm/recorded_battle.s
deleted file mode 100644
index 2545e478d..000000000
--- a/asm/recorded_battle.s
+++ /dev/null
@@ -1,2749 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8184DA4
-sub_8184DA4: @ 8184DA4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- ldr r0, =gUnknown_0203C7AC
- mov r1, r12
- strb r1, [r0]
- ldr r1, =gUnknown_0203CCD0
- movs r0, 0
- strb r0, [r1]
- movs r2, 0
- movs r7, 0
- ldr r3, =gUnknown_0203C7BC
- mov r10, r3
- ldr r6, =gUnknown_0203C794
- mov r9, r6
- ldr r0, =gUnknown_0203BD34
- mov r8, r0
-_08184DD0:
- lsls r0, r2, 1
- mov r3, r9
- adds r1, r0, r3
- strh r7, [r1]
- ldr r6, =gUnknown_0203C79C
- adds r1, r0, r6
- strh r7, [r1]
- ldr r1, =gUnknown_0203C7A4
- adds r0, r1
- strh r7, [r0]
- adds r4, r2, 0x1
- mov r3, r12
- cmp r3, 0x1
- bne _08184E1C
- ldr r5, =gBattleTypeFlags
- movs r3, 0xFF
- movs r1, 0xA6
- lsls r1, 2
- adds r0, r2, 0
- muls r0, r1
- mov r6, r8
- adds r2, r0, r6
-_08184DFC:
- ldrb r0, [r2]
- orrs r0, r3
- strb r0, [r2]
- adds r2, 0x1
- subs r1, 0x1
- cmp r1, 0
- bne _08184DFC
- ldr r0, [r5]
- ldr r1, =gUnknown_0203C7B8
- str r0, [r1]
- ldr r3, =gBattleResources
- ldr r0, [r3]
- ldr r0, [r0, 0x14]
- ldr r0, [r0, 0xC]
- mov r6, r10
- str r0, [r6]
-_08184E1C:
- adds r2, r4, 0
- cmp r2, 0x3
- ble _08184DD0
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8184DA4
-
- thumb_func_start sub_8184E58
-sub_8184E58: @ 8184E58
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- ldr r0, =gUnknown_0203C7AC
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08184EA0
- ldr r1, =gRecordedBattleRngSeed
- ldr r0, =gRngValue
- ldr r0, [r0]
- str r0, [r1]
- ldr r4, =gUnknown_0203C7AE
- ldr r0, =0x000040cf
- bl VarGet
- strb r0, [r4]
- ldr r4, =gUnknown_0203C7AF
- bl sub_81A513C
- strb r0, [r4]
- b _08184EAC
- .pool
-_08184EA0:
- cmp r0, 0x2
- bne _08184EAC
- ldr r0, =gRngValue
- ldr r1, =gRecordedBattleRngSeed
- ldr r1, [r1]
- str r1, [r0]
-_08184EAC:
- ldr r0, =gBattleTypeFlags
- ldr r5, [r0]
- movs r0, 0x2
- ands r5, r0
- cmp r5, 0
- beq _08184F64
- bl GetMultiplayerId
- ldr r1, =gUnknown_0203C7B4
- strb r0, [r1]
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- movs r5, 0
- ldr r0, =gUnknown_0203CC80
- mov r9, r0
- ldr r6, =gLinkPlayers
- movs r0, 0x8
- adds r0, r6
- mov r8, r0
- mov r7, r9
- adds r7, 0x4
-_08184EDC:
- lsls r0, r5, 2
- adds r0, r5
- lsls r4, r0, 2
- mov r0, r9
- adds r2, r4, r0
- lsls r0, r5, 3
- subs r0, r5
- lsls r3, r0, 2
- adds r0, r6, 0x4
- adds r0, r3, r0
- ldr r0, [r0]
- str r0, [r2]
- adds r1, r3, r6
- ldrb r0, [r1, 0x13]
- strb r0, [r2, 0xC]
- ldrh r0, [r1, 0x18]
- strh r0, [r2, 0xE]
- ldrh r0, [r1, 0x1A]
- strh r0, [r2, 0x10]
- cmp r5, r10
- bge _08184F3C
- mov r0, r8
- adds r1, r3, r0
- mov r0, sp
- bl StringCopy
- mov r0, sp
- bl StripExtCtrlCodes
- adds r0, r4, r7
- mov r1, sp
- bl StringCopy
- adds r5, 0x1
- b _08184F56
- .pool
-_08184F3C:
- adds r5, 0x1
- ldr r0, =gLinkPlayers + 8
- adds r1, r3, r0
- ldr r0, =gUnknown_0203CC84
- adds r2, r4, r0
- movs r3, 0x7
-_08184F48:
- ldrb r0, [r1]
- strb r0, [r2]
- adds r1, 0x1
- adds r2, 0x1
- subs r3, 0x1
- cmp r3, 0
- bge _08184F48
-_08184F56:
- cmp r5, 0x3
- ble _08184EDC
- b _08184FA0
- .pool
-_08184F64:
- ldr r3, =gUnknown_0203CC80
- ldr r4, =gSaveBlock2Ptr
- ldr r2, [r4]
- ldrb r1, [r2, 0xA]
- ldrb r0, [r2, 0xB]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0xC]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0xD]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- ldrb r0, [r2, 0x8]
- strb r0, [r3, 0xC]
- strh r5, [r3, 0xE]
- ldr r0, =gGameLanguage
- ldrb r0, [r0]
- strh r0, [r3, 0x10]
- movs r5, 0
- adds r3, 0x4
-_08184F90:
- adds r0, r5, r3
- ldr r1, [r4]
- adds r1, r5
- ldrb r1, [r1]
- strb r1, [r0]
- adds r5, 0x1
- cmp r5, 0x7
- ble _08184F90
-_08184FA0:
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8184E58
-
- thumb_func_start RecordedBattle_SetBankAction
-RecordedBattle_SetBankAction: @ 8184FBC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- ldr r1, =gUnknown_0203C794
- lsls r0, r5, 1
- adds r4, r0, r1
- ldrh r2, [r4]
- adds r3, r2, 0
- ldr r0, =0x00000297
- cmp r3, r0
- bhi _08184FF0
- ldr r0, =gUnknown_0203C7AC
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _08184FF0
- ldr r1, =gUnknown_0203BD34
- adds r0, r2, 0x1
- strh r0, [r4]
- movs r0, 0xA6
- lsls r0, 2
- muls r0, r5
- adds r0, r3, r0
- adds r0, r1
- strb r6, [r0]
-_08184FF0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RecordedBattle_SetBankAction
-
- thumb_func_start RecordedBattle_ClearBankAction
-RecordedBattle_ClearBankAction: @ 8185008
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- movs r3, 0
- cmp r3, r4
- bge _08185046
- ldr r0, =gUnknown_0203C794
- lsls r1, r5, 1
- adds r2, r1, r0
- ldr r7, =gUnknown_0203BD34
- movs r0, 0xA6
- lsls r0, 2
- muls r5, r0
- movs r6, 0xFF
-_08185028:
- ldrh r0, [r2]
- subs r0, 0x1
- strh r0, [r2]
- ldrh r1, [r2]
- adds r1, r5
- adds r1, r7
- ldrb r0, [r1]
- orrs r0, r6
- strb r0, [r1]
- ldrh r0, [r2]
- cmp r0, 0
- beq _08185046
- adds r3, 0x1
- cmp r3, r4
- blt _08185028
-_08185046:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RecordedBattle_ClearBankAction
-
- thumb_func_start RecordedBattle_ReadBankAction
-RecordedBattle_ReadBankAction: @ 8185054
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, =gUnknown_0203C794
- lsls r0, r3, 1
- adds r2, r0, r1
- ldrh r1, [r2]
- ldr r0, =0x00000297
- cmp r1, r0
- bhi _0818507A
- ldr r4, =gUnknown_0203BD34
- adds r0, 0x1
- muls r3, r0
- adds r0, r1, r3
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _081850BC
-_0818507A:
- ldr r2, =gSpecialVar_Result
- ldr r1, =gBattleOutcome
- movs r0, 0x5
- strb r0, [r1]
- movs r0, 0x5
- strh r0, [r2]
- bl ResetPaletteFadeControl
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, =CB2_QuitRecordedBattle
- bl SetMainCallback2
- movs r0, 0xFF
- b _081850C6
- .pool
-_081850BC:
- adds r0, r1, 0x1
- strh r0, [r2]
- adds r0, r1, r3
- adds r0, r4
- ldrb r0, [r0]
-_081850C6:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end RecordedBattle_ReadBankAction
-
- thumb_func_start sub_81850D0
-sub_81850D0: @ 81850D0
- ldr r0, =gUnknown_0203C7AC
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_81850D0
-
- thumb_func_start sub_81850DC
-sub_81850DC: @ 81850DC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r0
- movs r7, 0
- movs r0, 0
- mov r12, r0
-_081850F0:
- mov r1, r12
- lsls r3, r1, 1
- ldr r0, =gUnknown_0203C794
- adds r5, r3, r0
- ldr r1, =gUnknown_0203C79C
- adds r6, r3, r1
- ldrh r0, [r5]
- mov r9, r3
- mov r1, r12
- adds r1, 0x1
- str r1, [sp]
- ldrh r1, [r6]
- cmp r0, r1
- beq _0818517E
- adds r1, r7, 0
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- adds r2, r7, 0
- add r1, r8
- mov r0, r12
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- add r2, r8
- ldrb r0, [r5]
- ldrb r1, [r6]
- subs r0, r1
- strb r0, [r2]
- movs r4, 0
- ldrh r0, [r5]
- ldrh r1, [r6]
- subs r0, r1
- cmp r4, r0
- bge _08185172
- ldr r1, =gUnknown_0203BD34
- mov r10, r1
- ldr r6, =gUnknown_0203C79C
- movs r0, 0xA6
- lsls r0, 2
- mov r5, r12
- muls r5, r0
-_08185146:
- adds r1, r7, 0
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- add r1, r8
- adds r2, r3, r6
- ldrh r0, [r2]
- adds r0, r4
- adds r0, r5
- add r0, r10
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, =gUnknown_0203C794
- adds r0, r3, r1
- ldrh r1, [r0]
- ldrh r0, [r2]
- subs r1, r0
- cmp r4, r1
- blt _08185146
-_08185172:
- ldr r0, =gUnknown_0203C79C
- add r0, r9
- ldr r1, =gUnknown_0203C794
- add r1, r9
- ldrh r1, [r1]
- strh r1, [r0]
-_0818517E:
- ldr r1, [sp]
- lsls r0, r1, 24
- lsrs r0, 24
- mov r12, r0
- cmp r0, 0x3
- bls _081850F0
- adds r0, r7, 0
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81850DC
-
- thumb_func_start sub_81851A8
-sub_81851A8: @ 81851A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r7, r0, 0
- movs r1, 0x2
- mov r0, sp
- strb r1, [r0]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- ands r0, r1
- cmp r0, 0
- beq _0818525E
- movs r5, 0
- ldr r4, =gLinkPlayers
- b _081851DA
- .pool
-_081851D0:
- ldrb r0, [r4]
- cmp r0, 0x3
- bne _0818525E
- adds r4, 0x1C
- adds r5, 0x1
-_081851DA:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- blt _081851D0
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x4
- ands r0, r1
- cmp r0, 0
- bne _0818525E
- ldrb r0, [r7]
- mov r4, sp
- adds r4, 0x1
- strb r0, [r4]
- ldrb r0, [r4]
- mov r8, r4
- cmp r0, 0
- beq _0818525E
-_08185202:
- adds r0, r7, 0
- mov r1, sp
- adds r2, r4, 0
- bl sub_8185278
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r7, 0
- mov r1, sp
- adds r2, r4, 0
- bl sub_8185278
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _08185256
- ldr r3, =gUnknown_0203BD34
- ldr r0, =gUnknown_0203C7A4
- lsls r1, r6, 1
- adds r4, r1, r0
- adds r5, r2, 0
- movs r0, 0xA6
- lsls r0, 2
- muls r6, r0
-_08185232:
- adds r0, r7, 0
- mov r1, sp
- mov r2, r8
- str r3, [sp, 0x4]
- bl sub_8185278
- ldrh r1, [r4]
- adds r2, r1, 0x1
- strh r2, [r4]
- lsls r1, 16
- lsrs r1, 16
- adds r1, r6
- ldr r3, [sp, 0x4]
- adds r1, r3
- strb r0, [r1]
- subs r5, 0x1
- cmp r5, 0
- bne _08185232
-_08185256:
- mov r4, r8
- ldrb r0, [r4]
- cmp r0, 0
- bne _08185202
-_0818525E:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81851A8
-
- thumb_func_start sub_8185278
-sub_8185278: @ 8185278
- ldrb r3, [r2]
- subs r3, 0x1
- strb r3, [r2]
- ldrb r2, [r1]
- adds r3, r2, 0x1
- strb r3, [r1]
- lsls r2, 24
- lsrs r2, 24
- adds r0, r2
- ldrb r0, [r0]
- bx lr
- thumb_func_end sub_8185278
-
- thumb_func_start sub_8185290
-sub_8185290: @ 8185290
- push {r4,r5,lr}
- movs r0, 0xF8
- lsls r0, 4
- bl AllocZeroed
- adds r4, r0, 0
- bl start_ov_to_battle_anim
- adds r5, r0, 0
- adds r0, r4, 0
- bl Free
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8185290
-
- thumb_func_start sub_81852B0
-sub_81852B0: @ 81852B0
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r1, =0x000004ec
- adds r0, r5, r1
- ldr r1, [r0]
- cmp r1, 0
- beq _081852E8
- ldr r0, =0x7d007e92
- ands r1, r0
- cmp r1, 0
- bne _081852E8
- ldr r4, =0x00000f7c
- adds r0, r5, 0
- adds r1, r4, 0
- bl CalcByteArraySum
- adds r4, r5, r4
- ldr r1, [r4]
- cmp r0, r1
- bne _081852E8
- movs r0, 0x1
- b _081852EA
- .pool
-_081852E8:
- movs r0, 0
-_081852EA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81852B0
-
- thumb_func_start sub_81852F0
-sub_81852F0: @ 81852F0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- movs r2, 0x80
- lsls r2, 5
- adds r0, r5, 0
- movs r1, 0
- bl memset
- movs r2, 0xF8
- lsls r2, 4
- adds r0, r5, 0
- adds r1, r4, 0
- bl memcpy
- ldr r4, =0x00000f7c
- adds r0, r5, 0
- adds r1, r4, 0
- bl CalcByteArraySum
- adds r4, r5, r4
- str r0, [r4]
- movs r0, 0x1F
- adds r1, r5, 0
- bl sub_8153634
- cmp r0, 0x1
- bne _08185330
- movs r0, 0x1
- b _08185332
- .pool
-_08185330:
- movs r0, 0
-_08185332:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81852F0
-
- thumb_func_start MoveRecordedBattleToSaveData
-MoveRecordedBattleToSaveData: @ 8185338
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- movs r0, 0
- str r0, [sp, 0x4]
- movs r0, 0xF8
- lsls r0, 4
- bl AllocZeroed
- adds r7, r0, 0
- movs r0, 0x80
- lsls r0, 5
- bl AllocZeroed
- str r0, [sp]
- movs r6, 0
-_0818535E:
- movs r0, 0x64
- adds r4, r6, 0
- muls r4, r0
- adds r5, r7, r4
- ldr r1, =gUnknown_0203C7C0
- adds r1, r4, r1
- adds r0, r5, 0
- movs r2, 0x64
- bl memcpy
- movs r1, 0x96
- lsls r1, 2
- adds r5, r1
- ldr r0, =gUnknown_0203CA18
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x64
- bl memcpy
- adds r6, 0x1
- cmp r6, 0x5
- ble _0818535E
- movs r6, 0
- ldr r2, =gSaveBlock2Ptr
- mov r9, r2
- movs r3, 0x9A
- lsls r3, 3
- adds r3, r7, r3
- str r3, [sp, 0x8]
- ldr r5, =gUnknown_0203CC80
- mov r8, r6
- mov r12, r6
- movs r4, 0x96
- lsls r4, 3
- adds r4, r7
- mov r10, r4
- ldr r0, =0x000004e4
- adds r4, r7, r0
-_081853AC:
- lsls r1, r6, 3
- ldr r0, =gUnknown_0203CC80
- adds r0, 0x4
- mov r3, r8
- adds r2, r3, r0
- add r1, r10
- movs r3, 0x7
-_081853BA:
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x1
- adds r1, 0x1
- subs r3, 0x1
- cmp r3, 0
- bge _081853BA
- ldr r0, [sp, 0x8]
- adds r1, r0, r6
- ldrb r0, [r5, 0xC]
- strb r0, [r1]
- ldrh r0, [r5, 0x10]
- strb r0, [r4]
- ldrh r0, [r5, 0xE]
- strb r0, [r4, 0xC]
- ldr r1, =0x000004d4
- adds r0, r7, r1
- add r0, r12
- ldr r1, [r5]
- str r1, [r0]
- adds r5, 0x14
- movs r2, 0x14
- add r8, r2
- movs r3, 0x4
- add r12, r3
- adds r4, 0x1
- adds r6, 0x1
- cmp r6, 0x3
- ble _081853AC
- movs r4, 0x9D
- lsls r4, 3
- adds r1, r7, r4
- ldr r5, =gRecordedBattleRngSeed
- ldr r0, [r5]
- str r0, [r1]
- ldr r0, =gUnknown_0203C7B8
- ldr r2, [r0]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _081854DC
- ldr r1, =0x000004ec
- adds r3, r7, r1
- movs r1, 0x23
- negs r1, r1
- ands r1, r2
- movs r0, 0x80
- lsls r0, 18
- orrs r1, r0
- str r1, [r3]
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- beq _08185454
- movs r0, 0x80
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _081854E2
- .pool
-_08185454:
- movs r0, 0x40
- ands r2, r0
- cmp r2, 0
- beq _081854E2
- ldr r2, =gUnknown_0203CC80
- ldrh r0, [r2, 0xE]
- cmp r0, 0x1
- beq _081854A8
- cmp r0, 0x1
- bgt _08185474
- cmp r0, 0
- beq _0818547E
- b _081854E2
- .pool
-_08185474:
- cmp r0, 0x2
- beq _0818547E
- cmp r0, 0x3
- beq _081854A8
- b _081854E2
-_0818547E:
- ldr r3, =gUnknown_0203C7B4
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- ldr r4, =gUnknown_0203CC80
- adds r0, r4
- ldrh r1, [r0, 0xE]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _081854E2
- ldr r5, =0x000004ec
- adds r0, r7, r5
- b _081854C4
- .pool
-_081854A8:
- ldr r0, =gUnknown_0203C7B4
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_0203CC80
- adds r0, r1
- ldrh r1, [r0, 0xE]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081854E2
- ldr r2, =0x000004ec
- adds r0, r7, r2
-_081854C4:
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 24
- orrs r1, r2
- str r1, [r0]
- b _081854E2
- .pool
-_081854DC:
- ldr r3, =0x000004ec
- adds r0, r7, r3
- str r2, [r0]
-_081854E2:
- ldr r4, =gTrainerBattleOpponent_A
- ldrh r1, [r4]
- ldr r5, =0x000004f4
- adds r0, r7, r5
- strh r1, [r0]
- ldr r0, =gTrainerBattleOpponent_B
- ldrh r1, [r0]
- ldr r2, =0x000004f6
- adds r0, r7, r2
- strh r1, [r0]
- ldr r3, =gPartnerTrainerId
- ldrh r1, [r3]
- movs r4, 0x9F
- lsls r4, 3
- adds r0, r7, r4
- strh r1, [r0]
- ldr r5, =gUnknown_0203C7B4
- ldrb r1, [r5]
- adds r2, 0x4
- adds r0, r7, r2
- strh r1, [r0]
- mov r3, r9
- ldr r0, [r3]
- ldr r4, =0x00000ca9
- adds r0, r4
- ldrb r0, [r0]
- lsls r0, 30
- lsrs r0, 30
- ldr r5, =0x000004fc
- adds r1, r7, r5
- strb r0, [r1]
- ldr r0, =gUnknown_0203C7AE
- ldrb r1, [r0]
- adds r2, 0x3
- adds r0, r7, r2
- strb r1, [r0]
- ldr r3, =gUnknown_0203C7AF
- ldrb r1, [r3]
- ldr r4, =0x000004fe
- adds r0, r7, r4
- strb r1, [r0]
- mov r5, r9
- ldr r0, [r5]
- ldrb r1, [r0, 0x15]
- lsls r1, 29
- ldr r0, =0x000004ff
- adds r3, r7, r0
- lsrs r1, 31
- ldrb r2, [r3]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- ldr r1, [r5]
- ldrb r1, [r1, 0x14]
- lsls r1, 29
- lsrs r1, 28
- movs r2, 0xF
- negs r2, r2
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- movs r2, 0xA0
- lsls r2, 3
- adds r1, r7, r2
- ldr r3, =gUnknown_0203C7BC
- ldr r0, [r3]
- str r0, [r1]
- ldr r4, =0xfffffed4
- adds r1, r4, 0
- ldr r5, =gTrainerBattleOpponent_A
- ldrh r5, [r5]
- adds r0, r1, r5
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x63
- bls _08185580
- b _081856C4
-_08185580:
- movs r6, 0
- ldr r0, =0x00000504
- adds r3, r7, r0
- mov r10, r9
- ldr r1, =gTrainerBattleOpponent_A
- mov r12, r1
- adds r2, r4, 0
- mov r8, r2
- ldr r4, =0x0000073c
-_08185592:
- adds r2, r3, r6
- mov r5, r10
- ldr r1, [r5]
- mov r5, r12
- ldrh r0, [r5]
- add r0, r8
- movs r5, 0xEC
- muls r0, r5
- adds r0, r6, r0
- adds r1, r4
- adds r1, r0
- ldrb r0, [r1]
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x7
- ble _08185592
- mov r0, r9
- ldr r2, [r0]
- ldr r1, =gTrainerBattleOpponent_A
- ldrh r0, [r1]
- ldr r3, =0xfffffed4
- adds r0, r3
- movs r1, 0xEC
- muls r0, r1
- adds r2, r0
- ldr r4, =0x00000739
- adds r2, r4
- ldrb r1, [r2]
- ldr r5, =0x0000050c
- adds r0, r7, r5
- strb r1, [r0]
- ldr r1, =gUnknown_0203CCE8
- ldrb r0, [r1]
- cmp r0, 0x1
- bne _08185664
- movs r6, 0
- ldr r2, =0x0000050e
- adds r4, r7, r2
- mov r10, r9
- ldr r5, =gTrainerBattleOpponent_A
- mov r8, r5
- adds r5, r3, 0
-_081855E6:
- lsls r3, r6, 1
- mov r0, r10
- ldr r2, [r0]
- mov r1, r8
- ldrh r0, [r1]
- adds r0, r5
- movs r1, 0xEC
- muls r0, r1
- adds r3, r0
- movs r0, 0xEC
- lsls r0, 3
- adds r2, r0
- adds r2, r3
- ldrh r0, [r2]
- strh r0, [r4]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x5
- ble _081855E6
- b _08185696
- .pool
-_08185664:
- movs r6, 0
- ldr r1, =0x0000050e
- adds r4, r7, r1
- mov r10, r9
- ldr r2, =gTrainerBattleOpponent_A
- mov r8, r2
- adds r5, r3, 0
-_08185672:
- lsls r3, r6, 1
- mov r0, r10
- ldr r2, [r0]
- mov r1, r8
- ldrh r0, [r1]
- adds r0, r5
- movs r1, 0xEC
- muls r0, r1
- adds r3, r0
- ldr r0, =0x00000754
- adds r2, r0
- adds r2, r3
- ldrh r0, [r2]
- strh r0, [r4]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x5
- ble _08185672
-_08185696:
- mov r1, r9
- ldr r2, [r1]
- ldr r3, =gTrainerBattleOpponent_A
- ldrh r0, [r3]
- ldr r4, =0xfffffed4
- adds r0, r4
- movs r1, 0xEC
- muls r0, r1
- adds r2, r0
- ldr r5, =0x0000081c
- adds r2, r5
- ldrb r1, [r2]
- b _08185856
- .pool
-_081856C4:
- ldr r3, =gTrainerBattleOpponent_B
- ldrh r3, [r3]
- adds r0, r1, r3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x63
- bls _081856D4
- b _081857E4
-_081856D4:
- movs r6, 0
- ldr r4, =0x00000504
- adds r3, r7, r4
- mov r10, r9
- ldr r5, =gTrainerBattleOpponent_B
- mov r12, r5
- ldr r0, =0xfffffed4
- mov r8, r0
- ldr r4, =0x0000073c
-_081856E6:
- adds r2, r3, r6
- mov r5, r10
- ldr r1, [r5]
- mov r5, r12
- ldrh r0, [r5]
- add r0, r8
- movs r5, 0xEC
- muls r0, r5
- adds r0, r6, r0
- adds r1, r4
- adds r1, r0
- ldrb r0, [r1]
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x7
- ble _081856E6
- mov r0, r9
- ldr r2, [r0]
- ldr r1, =gTrainerBattleOpponent_B
- ldrh r0, [r1]
- ldr r3, =0xfffffed4
- adds r0, r3
- movs r1, 0xEC
- muls r0, r1
- adds r2, r0
- ldr r4, =0x00000739
- adds r2, r4
- ldrb r1, [r2]
- ldr r5, =0x0000050c
- adds r0, r7, r5
- strb r1, [r0]
- ldr r1, =gUnknown_0203CCE8
- ldrb r0, [r1]
- cmp r0, 0x1
- bne _08185784
- movs r6, 0
- ldr r2, =0x0000050e
- adds r4, r7, r2
- mov r10, r9
- ldr r5, =gTrainerBattleOpponent_B
- mov r8, r5
- adds r5, r3, 0
-_0818573A:
- lsls r3, r6, 1
- mov r0, r10
- ldr r2, [r0]
- mov r1, r8
- ldrh r0, [r1]
- adds r0, r5
- movs r1, 0xEC
- muls r0, r1
- adds r3, r0
- movs r0, 0xEC
- lsls r0, 3
- adds r2, r0
- adds r2, r3
- ldrh r0, [r2]
- strh r0, [r4]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x5
- ble _0818573A
- b _081857B6
- .pool
-_08185784:
- movs r6, 0
- ldr r1, =0x0000050e
- adds r4, r7, r1
- mov r10, r9
- ldr r2, =gTrainerBattleOpponent_B
- mov r8, r2
- adds r5, r3, 0
-_08185792:
- lsls r3, r6, 1
- mov r0, r10
- ldr r2, [r0]
- mov r1, r8
- ldrh r0, [r1]
- adds r0, r5
- movs r1, 0xEC
- muls r0, r1
- adds r3, r0
- ldr r0, =0x00000754
- adds r2, r0
- adds r2, r3
- ldrh r0, [r2]
- strh r0, [r4]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x5
- ble _08185792
-_081857B6:
- mov r1, r9
- ldr r2, [r1]
- ldr r3, =gTrainerBattleOpponent_B
- ldrh r0, [r3]
- ldr r4, =0xfffffed4
- adds r0, r4
- movs r1, 0xEC
- muls r0, r1
- adds r2, r0
- ldr r5, =0x0000081c
- adds r2, r5
- ldrb r1, [r2]
- b _08185856
- .pool
-_081857E4:
- ldr r3, =gPartnerTrainerId
- ldrh r3, [r3]
- adds r0, r1, r3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x63
- bhi _0818585C
- movs r6, 0
- ldr r4, =0x00000504
- adds r3, r7, r4
- mov r10, r9
- ldr r5, =gPartnerTrainerId
- mov r12, r5
- ldr r0, =0xfffffed4
- mov r8, r0
- ldr r4, =0x0000073c
-_08185804:
- adds r2, r3, r6
- mov r5, r10
- ldr r1, [r5]
- mov r5, r12
- ldrh r0, [r5]
- add r0, r8
- movs r5, 0xEC
- muls r0, r5
- adds r0, r6, r0
- adds r1, r4
- adds r1, r0
- ldrb r0, [r1]
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x7
- ble _08185804
- mov r0, r9
- ldr r1, [r0]
- ldr r2, =gPartnerTrainerId
- ldrh r0, [r2]
- ldr r3, =0xfffffed4
- adds r0, r3
- movs r2, 0xEC
- muls r0, r2
- adds r1, r0
- ldr r4, =0x00000739
- adds r1, r4
- ldrb r1, [r1]
- ldr r5, =0x0000050c
- adds r0, r7, r5
- strb r1, [r0]
- mov r0, r9
- ldr r1, [r0]
- ldr r4, =gPartnerTrainerId
- ldrh r0, [r4]
- adds r0, r3
- muls r0, r2
- adds r1, r0
- ldr r5, =0x0000081c
- adds r1, r5
- ldrb r1, [r1]
-_08185856:
- ldr r2, =0x0000051a
- adds r0, r7, r2
- strb r1, [r0]
-_0818585C:
- ldr r3, =gTrainerBattleOpponent_A
- ldrh r0, [r3]
- ldr r1, =0x0000018f
- cmp r0, r1
- bls _08185900
- mov r4, r9
- ldr r2, [r4]
- adds r1, r0, 0
- ldr r3, =0xfffffe70
- adds r1, r3
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0
- adds r2, 0xDC
- ldrb r0, [r2]
- lsls r0, 27
- lsrs r0, 27
- ldr r5, =0x0000050d
- adds r1, r7, r5
- strb r0, [r1]
- movs r6, 0
- ldr r0, =0x0000050e
- adds r4, r7, r0
- mov r10, r9
- ldr r1, =gTrainerBattleOpponent_A
- mov r8, r1
- adds r5, r3, 0
-_08185894:
- lsls r3, r6, 1
- mov r0, r10
- ldr r2, [r0]
- mov r0, r8
- ldrh r1, [r0]
- adds r1, r5
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r3, r0
- movs r1, 0x82
- lsls r1, 1
- adds r2, r1
- adds r2, r3
- ldrh r0, [r2]
- strh r0, [r4]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x5
- ble _08185894
- mov r3, r9
- ldr r2, [r3]
- ldr r4, =gTrainerBattleOpponent_A
- ldrh r1, [r4]
- ldr r5, =0xfffffe70
- adds r1, r5
- b _081859AC
- .pool
-_08185900:
- ldr r3, =gTrainerBattleOpponent_B
- ldrh r0, [r3]
- cmp r0, r1
- bls _0818597C
- mov r4, r9
- ldr r2, [r4]
- adds r1, r0, 0
- ldr r3, =0xfffffe70
- adds r1, r3
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0
- adds r2, 0xDC
- ldrb r0, [r2]
- lsls r0, 27
- lsrs r0, 27
- ldr r5, =0x0000050d
- adds r1, r7, r5
- strb r0, [r1]
- movs r6, 0
- ldr r0, =0x0000050e
- adds r4, r7, r0
- mov r10, r9
- ldr r1, =gTrainerBattleOpponent_B
- mov r8, r1
- adds r5, r3, 0
-_08185936:
- lsls r3, r6, 1
- mov r0, r10
- ldr r2, [r0]
- mov r0, r8
- ldrh r1, [r0]
- adds r1, r5
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r3, r0
- movs r1, 0x82
- lsls r1, 1
- adds r2, r1
- adds r2, r3
- ldrh r0, [r2]
- strh r0, [r4]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x5
- ble _08185936
- mov r3, r9
- ldr r2, [r3]
- ldr r4, =gTrainerBattleOpponent_B
- ldrh r1, [r4]
- ldr r5, =0xfffffe70
- adds r1, r5
- b _081859AC
- .pool
-_0818597C:
- ldr r3, =gPartnerTrainerId
- ldrh r0, [r3]
- cmp r0, r1
- bls _081859C0
- mov r4, r9
- ldr r2, [r4]
- adds r1, r0, 0
- ldr r3, =0xfffffe70
- adds r1, r3
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0
- adds r2, 0xDC
- ldrb r0, [r2]
- lsls r0, 27
- lsrs r0, 27
- ldr r5, =0x0000050d
- adds r1, r7, r5
- strb r0, [r1]
- ldr r2, [r4]
- ldr r0, =gPartnerTrainerId
- ldrh r1, [r0]
- adds r1, r3
-_081859AC:
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0
- ldr r1, =0x0000011b
- adds r0, r2, r1
- ldrb r1, [r0]
- ldr r2, =0x0000051b
- adds r0, r7, r2
- strb r1, [r0]
-_081859C0:
- movs r6, 0
- ldr r3, =0x00000297
- mov r10, r3
- ldr r4, =gUnknown_0203BD34
- mov r9, r4
- movs r5, 0xA6
- lsls r5, 2
- mov r8, r5
- ldr r0, =0x0000051c
- adds r5, r7, r0
-_081859D4:
- adds r4, r6, 0x1
- mov r0, r8
- muls r0, r6
- mov r1, r9
- adds r2, r0, r1
- adds r1, r0, r5
- mov r3, r10
- adds r3, 0x1
-_081859E4:
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x1
- adds r1, 0x1
- subs r3, 0x1
- cmp r3, 0
- bne _081859E4
- adds r6, r4, 0
- cmp r6, 0x3
- ble _081859D4
-_081859F8:
- adds r0, r7, 0
- ldr r1, [sp]
- bl sub_81852F0
- adds r4, r0, 0
- cmp r4, 0x1
- beq _08185A14
- ldr r0, [sp, 0x4]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- cmp r0, 0x2
- bls _081859F8
-_08185A14:
- adds r0, r7, 0
- bl Free
- ldr r0, [sp]
- bl Free
- adds r0, r4, 0
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end MoveRecordedBattleToSaveData
-
- thumb_func_start sub_8185A54
-sub_8185A54: @ 8185A54
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r0, 0x1F
- bl sub_81535DC
- cmp r0, 0x1
- bne _08185A7E
- movs r2, 0xF8
- lsls r2, 4
- adds r0, r5, 0
- adds r1, r4, 0
- bl memcpy
- adds r0, r5, 0
- bl sub_81852B0
- cmp r0, 0
- beq _08185A7E
- movs r0, 0x1
- b _08185A80
-_08185A7E:
- movs r0, 0
-_08185A80:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8185A54
-
- thumb_func_start start_ov_to_battle_anim
-start_ov_to_battle_anim: @ 8185A88
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x80
- lsls r0, 5
- bl AllocZeroed
- adds r5, r0, 0
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8185A54
- adds r4, r0, 0
- adds r0, r5, 0
- bl Free
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end start_ov_to_battle_anim
-
- thumb_func_start sub_8185AB0
-sub_8185AB0: @ 8185AB0
- push {lr}
- ldr r0, =gSaveBlock2Ptr
- ldr r2, [r0]
- ldr r0, =gUnknown_0203C7AD
- ldrb r0, [r0]
- ldr r1, =0x00000ca9
- adds r2, r1
- movs r1, 0x3
- ands r1, r0
- ldrb r3, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldr r1, =gBattleOutcome
- movs r0, 0
- strb r0, [r1]
- ldr r0, =gBattleTypeFlags
- movs r1, 0
- str r1, [r0]
- ldr r0, =gTrainerBattleOpponent_A
- strh r1, [r0]
- ldr r0, =gTrainerBattleOpponent_B
- strh r1, [r0]
- ldr r0, =gPartnerTrainerId
- strh r1, [r0]
- bl sub_8185EFC
- ldr r0, =gUnknown_0203C7B0
- ldr r0, [r0]
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8185AB0
-
- thumb_func_start sub_8185B1C
-sub_8185B1C: @ 8185B1C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x8]
- subs r1, 0x1
- strh r1, [r0, 0x8]
- lsls r1, 16
- cmp r1, 0
- bne _08185B4A
- ldr r0, =gMain
- ldr r1, =sub_8185AB0
- str r1, [r0, 0x8]
- ldr r0, =CB2_InitBattle
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_08185B4A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8185B1C
-
- thumb_func_start sub_8185B60
-sub_8185B60: @ 8185B60
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r7, r0, 0
- bl ZeroPlayerPartyMons
- bl ZeroEnemyPartyMons
- movs r6, 0
- ldr r0, =gPlayerParty
- mov r8, r0
-_08185B7C:
- movs r0, 0x64
- adds r4, r6, 0
- muls r4, r0
- mov r1, r8
- adds r0, r4, r1
- adds r5, r7, r4
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- ldr r0, =gEnemyParty
- adds r4, r0
- movs r2, 0x96
- lsls r2, 2
- adds r5, r2
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- adds r6, 0x1
- cmp r6, 0x5
- ble _08185B7C
- movs r6, 0
- ldr r3, =gLinkPlayers
- mov r8, r3
- mov r0, r8
- adds r0, 0x8
- str r0, [sp]
- mov r4, r8
- adds r4, 0x4
- mov r10, r6
- mov r9, r6
-_08185BBE:
- movs r1, 0
- mov r12, r1
- lsls r5, r6, 2
- movs r2, 0x96
- lsls r2, 3
- adds r0, r7, r2
- mov r3, r9
- adds r2, r3, r0
- mov r0, r10
- lsls r1, r0, 2
- mov r0, r8
- adds r0, 0x8
- adds r1, r0
- movs r3, 0x7
-_08185BDA:
- ldrb r0, [r2]
- strb r0, [r1]
- ldrb r0, [r2]
- cmp r0, 0xFF
- bne _08185BE8
- movs r0, 0x1
- mov r12, r0
-_08185BE8:
- adds r2, 0x1
- adds r1, 0x1
- subs r3, 0x1
- cmp r3, 0
- bge _08185BDA
- movs r1, 0x9A
- lsls r1, 3
- adds r0, r7, r1
- adds r0, r6
- ldrb r0, [r0]
- strb r0, [r4, 0xF]
- ldr r2, =0x000004e4
- adds r0, r7, r2
- adds r0, r6
- ldrb r1, [r0]
- strh r1, [r4, 0x16]
- movs r3, 0x9E
- lsls r3, 3
- adds r0, r7, r3
- adds r0, r6
- ldrb r0, [r0]
- strh r0, [r4, 0x14]
- subs r2, 0x10
- adds r0, r7, r2
- adds r0, r5
- ldr r0, [r0]
- str r0, [r4]
- mov r3, r12
- cmp r3, 0
- beq _08185C2A
- ldr r0, [sp]
- bl ConvertInternationalString
-_08185C2A:
- ldr r0, [sp]
- adds r0, 0x1C
- str r0, [sp]
- adds r4, 0x1C
- movs r1, 0x7
- add r10, r1
- movs r2, 0x8
- add r9, r2
- adds r6, 0x1
- cmp r6, 0x3
- ble _08185BBE
- ldr r1, =gRecordedBattleRngSeed
- movs r3, 0x9D
- lsls r3, 3
- adds r0, r7, r3
- ldr r0, [r0]
- str r0, [r1]
- ldr r2, =gBattleTypeFlags
- ldr r1, =0x000004ec
- adds r0, r7, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- orrs r0, r1
- str r0, [r2]
- ldr r1, =gTrainerBattleOpponent_A
- ldr r2, =0x000004f4
- adds r0, r7, r2
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r1, =gTrainerBattleOpponent_B
- adds r3, 0xE
- adds r0, r7, r3
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r1, =gPartnerTrainerId
- adds r2, 0x4
- adds r0, r7, r2
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r1, =gUnknown_0203C7B4
- adds r3, 0x4
- adds r0, r7, r3
- ldrh r0, [r0]
- strb r0, [r1]
- ldr r1, =gUnknown_0203C7AD
- ldr r3, =gSaveBlock2Ptr
- ldr r0, [r3]
- ldr r2, =0x00000ca9
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 30
- lsrs r0, 30
- strb r0, [r1]
- ldr r1, =gUnknown_0203C7AE
- ldr r2, =0x000004fd
- adds r0, r7, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r1, =gUnknown_0203C7AF
- adds r2, 0x1
- adds r0, r7, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r2, =gUnknown_0203C7B6
- ldr r1, =0x000004ff
- adds r0, r7, r1
- ldrb r1, [r0]
- lsls r0, r1, 31
- lsrs r0, 31
- strb r0, [r2]
- ldr r0, =gUnknown_0203C7B7
- lsls r1, 28
- lsrs r1, 29
- strb r1, [r0]
- ldr r1, =gUnknown_0203C7BC
- movs r2, 0xA0
- lsls r2, 3
- adds r0, r7, r2
- ldr r0, [r0]
- str r0, [r1]
- movs r6, 0
- mov r10, r3
- ldr r2, =gUnknown_0203CCD9
- ldr r3, =gUnknown_0203CCDA
- ldr r0, =gUnknown_03001278
- mov r8, r0
- ldr r1, =gUnknown_03001279
- mov r9, r1
- ldr r5, =gUnknown_0203CCD1
- ldr r0, =0x00000504
- adds r4, r7, r0
-_08185CE2:
- adds r0, r6, r5
- adds r1, r4, r6
- ldrb r1, [r1]
- strb r1, [r0]
- adds r6, 0x1
- cmp r6, 0x7
- ble _08185CE2
- ldr r1, =0x0000050c
- adds r0, r7, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r2, =0x0000050d
- adds r0, r7, r2
- ldrb r0, [r0]
- strb r0, [r3]
- ldr r3, =0x0000051a
- adds r0, r7, r3
- ldrb r0, [r0]
- mov r1, r8
- strb r0, [r1]
- adds r2, 0xE
- adds r0, r7, r2
- ldrb r0, [r0]
- mov r3, r9
- strb r0, [r3]
- ldr r0, =0x0000050e
- adds r1, r7, r0
- ldr r4, =gUnknown_0203CCDC
- movs r6, 0x5
-_08185D1C:
- ldrh r0, [r1]
- strh r0, [r4]
- adds r1, 0x2
- adds r4, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _08185D1C
- mov r1, r10
- ldr r2, [r1]
- ldr r3, =0x000004fc
- adds r0, r7, r3
- ldrb r0, [r0]
- ldr r1, =0x00000ca9
- adds r2, r1
- movs r1, 0x3
- ands r1, r0
- ldrb r3, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- movs r6, 0
- ldr r2, =0x00000297
- mov r10, r2
- ldr r3, =gUnknown_0203BD34
- mov r9, r3
- movs r0, 0xA6
- lsls r0, 2
- mov r8, r0
- ldr r1, =0x0000051c
- adds r5, r7, r1
-_08185D5C:
- adds r2, r6, 0x1
- mov r0, r8
- muls r0, r6
- adds r1, r0, r5
- mov r3, r9
- adds r4, r0, r3
- mov r3, r10
- adds r3, 0x1
-_08185D6C:
- ldrb r0, [r1]
- strb r0, [r4]
- adds r1, 0x1
- adds r4, 0x1
- subs r3, 0x1
- cmp r3, 0
- bne _08185D6C
- adds r6, r2, 0
- cmp r6, 0x3
- ble _08185D5C
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8185B60
-
- thumb_func_start sub_8185E24
-sub_8185E24: @ 8185E24
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r0, 0xF8
- lsls r0, 4
- bl AllocZeroed
- adds r4, r0, 0
- bl start_ov_to_battle_anim
- cmp r0, 0x1
- bne _08185E6E
- bl sub_8185EB8
- adds r0, r4, 0
- bl sub_8185B60
- ldr r0, =sub_8185B1C
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x80
- strh r0, [r1, 0x8]
- ldr r0, =gUnknown_0203C7B0
- str r5, [r0]
- movs r0, 0
- bl PlayMapChosenOrBattleBGM
- ldr r0, =sub_8185E8C
- bl SetMainCallback2
-_08185E6E:
- adds r0, r4, 0
- bl Free
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8185E24
-
- thumb_func_start sub_8185E8C
-sub_8185E8C: @ 8185E8C
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end sub_8185E8C
-
- thumb_func_start sub_8185EA0
-sub_8185EA0: @ 8185EA0
- ldr r0, =gUnknown_0203C7AE
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_8185EA0
-
- thumb_func_start sub_8185EAC
-sub_8185EAC: @ 8185EAC
- ldr r0, =gUnknown_0203C7AF
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_8185EAC
-
- thumb_func_start sub_8185EB8
-sub_8185EB8: @ 8185EB8
- push {r4-r6,lr}
- movs r5, 0
- ldr r6, =gUnknown_0203C7C0
-_08185EBE:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- adds r0, r4, r6
- ldr r1, =gPlayerParty
- adds r1, r4, r1
- movs r2, 0x64
- bl memcpy
- ldr r0, =gUnknown_0203CA18
- adds r0, r4, r0
- ldr r1, =gEnemyParty
- adds r4, r1
- adds r1, r4, 0
- movs r2, 0x64
- bl memcpy
- adds r5, 0x1
- cmp r5, 0x5
- ble _08185EBE
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8185EB8
-
- thumb_func_start sub_8185EFC
-sub_8185EFC: @ 8185EFC
- push {r4-r6,lr}
- movs r5, 0
- ldr r6, =gPlayerParty
-_08185F02:
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- adds r0, r4, r6
- ldr r1, =gUnknown_0203C7C0
- adds r1, r4, r1
- movs r2, 0x64
- bl memcpy
- ldr r0, =gEnemyParty
- adds r0, r4, r0
- ldr r1, =gUnknown_0203CA18
- adds r4, r1
- adds r1, r4, 0
- movs r2, 0x64
- bl memcpy
- adds r5, 0x1
- cmp r5, 0x5
- ble _08185F02
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8185EFC
-
- thumb_func_start sub_8185F40
-sub_8185F40: @ 8185F40
- push {r4,r5,lr}
- movs r2, 0
- ldr r0, =gLinkPlayers
- ldr r3, =gActiveBank
- ldrh r1, [r0, 0x18]
- adds r4, r0, 0
- ldrb r0, [r3]
- cmp r1, r0
- beq _08185F64
- adds r1, r4, 0
-_08185F54:
- adds r1, 0x1C
- adds r2, 0x1
- cmp r2, 0x3
- bgt _08185F64
- ldrh r0, [r1, 0x18]
- ldrb r5, [r3]
- cmp r0, r5
- bne _08185F54
-_08185F64:
- cmp r2, 0x4
- bne _08185F74
- movs r0, 0
- b _08185F7E
- .pool
-_08185F74:
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x13]
-_08185F7E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8185F40
-
- thumb_func_start sub_8185F84
-sub_8185F84: @ 8185F84
- ldr r1, =gUnknown_0203C7B5
- movs r0, 0
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8185F84
-
- thumb_func_start sub_8185F90
-sub_8185F90: @ 8185F90
- lsls r0, 16
- lsrs r0, 16
- ldr r2, =gUnknown_0203C7B5
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- lsls r0, 16
- lsrs r0, 31
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- bx lr
- .pool
- thumb_func_end sub_8185F90
-
- thumb_func_start sub_8185FAC
-sub_8185FAC: @ 8185FAC
- ldr r0, =gUnknown_0203C7B5
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_8185FAC
-
- thumb_func_start sub_8185FB8
-sub_8185FB8: @ 8185FB8
- ldr r0, =gUnknown_0203C7B6
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_8185FB8
-
- thumb_func_start sub_8185FC4
-sub_8185FC4: @ 8185FC4
- ldr r0, =gUnknown_0203C7B7
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_8185FC4
-
- thumb_func_start sub_8185FD0
-sub_8185FD0: @ 8185FD0
- push {r4-r7,lr}
- ldr r4, =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0818601C
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- ldr r1, =0x02000002
- ands r0, r1
- cmp r0, 0
- bne _0818601C
- ldr r0, =gUnknown_0203C7AC
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _0818601C
- movs r3, 0
- ldr r7, =gUnknown_0203CC70
- adds r6, r4, 0
- ldr r5, =gBattleMons + 0xC
- movs r4, 0x58
-_08186000:
- lsls r2, r3, 1
- ldrb r1, [r6]
- lsrs r0, r1, 1
- lsls r0, 3
- adds r0, r2, r0
- adds r0, r7
- muls r1, r4
- adds r2, r1
- adds r2, r5
- ldrh r1, [r2]
- strh r1, [r0]
- adds r3, 0x1
- cmp r3, 0x3
- ble _08186000
-_0818601C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8185FD0
-
- thumb_func_start sub_818603C
-sub_818603C: @ 818603C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x50
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x24]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- ldr r1, =0x02000002
- ands r0, r1
- cmp r0, 0
- beq _0818605C
- b _081863FC
-_0818605C:
- movs r0, 0
- mov r10, r0
- b _081863F2
- .pool
-_0818606C:
- mov r1, r10
- lsls r4, r1, 24
- lsrs r5, r4, 24
- adds r0, r5, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- str r4, [sp, 0x4C]
- mov r2, r10
- adds r2, 0x1
- str r2, [sp, 0x38]
- cmp r0, 0x1
- bne _0818608A
- b _081863EE
-_0818608A:
- ldr r3, [sp, 0x24]
- cmp r3, 0x1
- bne _0818611E
- movs r5, 0
- ldr r4, =gUnknown_0203CC70
- mov r0, r10
- asrs r6, r0, 31
- subs r0, r6
- asrs r0, 1
- lsls r0, 3
- adds r2, r0, r4
- movs r1, 0x58
- mov r0, r10
- muls r0, r1
- ldr r3, =gBattleMons + 0xC
- adds r1, r0, r3
-_081860AA:
- ldrh r0, [r1]
- ldrh r4, [r2]
- cmp r0, r4
- bne _081860BC
- adds r2, 0x2
- adds r1, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _081860AA
-_081860BC:
- cmp r5, 0x4
- bne _081860C2
- b _081863EE
-_081860C2:
- ldr r1, [sp, 0x4C]
- lsrs r0, r1, 24
- movs r1, 0x6
- bl RecordedBattle_SetBankAction
- movs r5, 0
- ldr r2, =gUnknown_0203CC70
- mov r8, r2
- movs r3, 0x58
- mov r7, r10
- muls r7, r3
- mov r4, r10
- subs r0, r4, r6
- asrs r4, r0, 1
-_081860DE:
- movs r2, 0
- lsls r0, r5, 1
- adds r5, 0x1
- adds r0, r7
- ldr r1, =gBattleMons + 0xC
- adds r3, r0, r1
- lsls r0, r4, 3
- mov r6, r8
- adds r1, r0, r6
-_081860F0:
- ldrh r0, [r3]
- ldrh r6, [r1]
- cmp r0, r6
- bne _08186110
- lsls r1, r2, 24
- lsrs r1, 24
- ldr r2, [sp, 0x4C]
- lsrs r0, r2, 24
- bl RecordedBattle_SetBankAction
- b _08186118
- .pool
-_08186110:
- adds r1, 0x2
- adds r2, 0x1
- cmp r2, 0x3
- ble _081860F0
-_08186118:
- cmp r5, 0x3
- ble _081860DE
- b _081863EE
-_0818611E:
- ldr r3, =gUnknown_0203BD34
- ldr r1, =gUnknown_0203C794
- mov r4, r10
- lsls r2, r4, 1
- adds r1, r2, r1
- movs r0, 0xA6
- lsls r0, 2
- mov r6, r10
- muls r6, r0
- adds r0, r6, 0
- ldrh r1, [r1]
- adds r0, r1
- adds r0, r3
- ldrb r0, [r0]
- str r2, [sp, 0x44]
- cmp r0, 0x6
- beq _08186142
- b _081863EE
-_08186142:
- adds r0, r5, 0
- bl RecordedBattle_ReadBankAction
- movs r5, 0
- mov r0, sp
- adds r0, 0x4
- str r0, [sp, 0x28]
- mov r1, sp
- adds r1, 0xC
- str r1, [sp, 0x30]
- mov r2, sp
- adds r2, 0x14
- str r2, [sp, 0x34]
- mov r3, sp
- adds r3, 0x18
- str r3, [sp, 0x3C]
- mov r4, sp
- adds r4, 0x8
- str r4, [sp, 0x2C]
- mov r6, r10
- lsls r6, 3
- str r6, [sp, 0x48]
- movs r1, 0x58
- mov r0, r10
- muls r0, r1
- ldr r2, =gBattleMons
- adds r0, r2
- adds r6, r0, 0
- adds r6, 0x3B
- movs r4, 0x3
-_0818617E:
- mov r0, sp
- adds r3, r0, r5
- ldrb r1, [r6]
- lsls r2, r5, 1
- adds r0, r4, 0
- lsls r0, r2
- ands r1, r0
- asrs r1, r2
- strb r1, [r3]
- adds r5, 0x1
- cmp r5, 0x3
- ble _0818617E
- movs r5, 0
- ldr r1, =gBattleMons
- mov r9, r1
- movs r2, 0x58
- mov r7, r10
- muls r7, r2
- ldr r4, [sp, 0x28]
- ldr r6, [sp, 0x30]
-_081861A6:
- ldr r3, [sp, 0x4C]
- lsrs r0, r3, 24
- bl RecordedBattle_ReadBankAction
- strb r0, [r4]
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r7
- movs r1, 0xC
- add r1, r9
- mov r8, r1
- add r0, r8
- ldrh r0, [r0]
- strh r0, [r6]
- ldr r2, [sp, 0x34]
- adds r1, r2, r5
- ldrb r0, [r4]
- adds r0, r7
- ldr r3, =gBattleMons + 0x24
- adds r0, r3
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, [sp, 0x3C]
- adds r1, r0, r5
- ldrb r0, [r4]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r1, [sp, 0x2C]
- adds r3, r1, r5
- ldr r2, [sp, 0x48]
- mov r1, r10
- subs r0, r2, r1
- lsls r0, 2
- ldr r2, =gDisableStructs
- adds r0, r2
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, =gBitTable
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- lsrs r1, r5
- strb r1, [r3]
- adds r4, 0x1
- adds r6, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _081861A6
- movs r5, 0
- movs r3, 0xC
- negs r3, r3
- add r3, r8
- mov r12, r3
- ldr r4, =gDisableStructs
- mov r9, r4
- movs r6, 0x58
- mov r1, r10
- muls r1, r6
- mov r0, r8
- adds r0, 0x18
- adds r4, r1, r0
- adds r3, r1, 0
- mov r7, r8
- ldr r6, [sp, 0x34]
- ldr r2, [sp, 0x30]
-_0818622C:
- adds r1, r3, r7
- ldrh r0, [r2]
- strh r0, [r1]
- adds r0, r6, r5
- ldrb r0, [r0]
- strb r0, [r4]
- adds r4, 0x1
- adds r3, 0x2
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _0818622C
- movs r0, 0x58
- mov r4, r10
- muls r4, r0
- mov r1, r12
- adds r0, r4, r1
- adds r0, 0x3B
- movs r1, 0
- strb r1, [r0]
- ldr r2, [sp, 0x48]
- mov r6, r10
- subs r3, r2, r6
- lsls r3, 2
- mov r0, r9
- adds r2, r3, r0
- ldrb r1, [r2, 0x18]
- movs r0, 0xF
- ands r0, r1
- strb r0, [r2, 0x18]
- movs r5, 0
- ldr r1, =gBattleMons
- adds r4, r1
- adds r4, 0x3B
- ldr r0, =gDisableStructs
- adds r6, r3, r0
-_08186274:
- ldr r2, [sp, 0x3C]
- adds r0, r2, r5
- ldrb r0, [r0]
- lsls r1, r5, 1
- lsls r0, r1
- ldrb r1, [r4]
- orrs r0, r1
- strb r0, [r4]
- ldrb r2, [r6, 0x18]
- lsrs r3, r2, 4
- ldr r1, [sp, 0x2C]
- adds r0, r1, r5
- ldrb r1, [r0]
- lsls r1, r5
- orrs r1, r3
- lsls r1, 4
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r6, 0x18]
- adds r5, 0x1
- cmp r5, 0x3
- ble _08186274
- movs r2, 0x58
- mov r0, r10
- muls r0, r2
- mov r1, r12
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _081862BC
- b _081863CA
-_081862BC:
- movs r5, 0
- mov r3, sp
- adds r3, 0x20
- str r3, [sp, 0x40]
- ldr r0, =gBattlePartyID
- ldr r4, [sp, 0x44]
- adds r6, r4, r0
-_081862CA:
- ldrh r1, [r6]
- movs r0, 0x64
- muls r0, r1
- ldr r4, =gPlayerParty
- adds r0, r4
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- mov r1, sp
- adds r3, r1, r5
- lsls r2, r5, 1
- movs r1, 0x3
- lsls r1, r2
- ands r0, r1
- lsrs r0, r2
- strb r0, [r3]
- adds r5, 0x1
- cmp r5, 0x3
- ble _081862CA
- movs r5, 0
- ldr r0, =gBattlePartyID
- ldr r2, [sp, 0x44]
- adds r7, r2, r0
- movs r3, 0x64
- mov r9, r3
- mov r8, r4
- ldr r4, [sp, 0x28]
- ldr r6, [sp, 0x30]
-_08186304:
- ldrh r0, [r7]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- ldrb r1, [r4]
- adds r1, 0xD
- movs r2, 0
- bl GetMonData
- strh r0, [r6]
- ldrh r0, [r7]
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- add r0, r8
- ldrb r1, [r4]
- adds r1, 0x11
- movs r2, 0
- bl GetMonData
- ldr r3, [sp, 0x34]
- adds r1, r3, r5
- strb r0, [r1]
- ldr r0, [sp, 0x3C]
- adds r1, r0, r5
- ldrb r0, [r4]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r1]
- adds r4, 0x1
- adds r6, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08186304
- movs r5, 0
- ldr r0, =gBattlePartyID
- ldr r1, [sp, 0x44]
- adds r7, r1, r0
- movs r2, 0x64
- mov r9, r2
- ldr r3, =gPlayerParty
- mov r8, r3
- ldr r6, [sp, 0x30]
- adds r6, 0x8
- ldr r4, [sp, 0x30]
-_08186360:
- ldrh r0, [r7]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- adds r1, r5, 0
- adds r1, 0xD
- adds r2, r4, 0
- bl SetMonData
- ldrh r0, [r7]
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- add r0, r8
- adds r1, r5, 0
- adds r1, 0x11
- adds r2, r6, 0
- bl SetMonData
- adds r6, 0x1
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08186360
- movs r0, 0
- ldr r3, [sp, 0x40]
- strb r0, [r3]
- movs r5, 0
- ldr r4, =gBattlePartyID
- ldr r6, =gPlayerParty
- ldr r3, [sp, 0x3C]
- ldr r2, [sp, 0x40]
-_081863A2:
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r5, 1
- lsls r1, r0
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r5, 0x1
- cmp r5, 0x3
- ble _081863A2
- ldr r1, [sp, 0x44]
- adds r0, r1, r4
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- adds r0, r6
- movs r1, 0x15
- ldr r2, [sp, 0x40]
- bl SetMonData
-_081863CA:
- ldr r2, =gChosenMovesByBanks
- ldr r3, [sp, 0x44]
- adds r2, r3, r2
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- add r0, r10
- adds r0, 0x80
- ldrb r0, [r0]
- lsls r0, 1
- movs r4, 0x58
- mov r1, r10
- muls r1, r4
- adds r0, r1
- ldr r1, =gBattleMons
- adds r1, 0xC
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r2]
-_081863EE:
- ldr r6, [sp, 0x38]
- mov r10, r6
-_081863F2:
- ldr r0, =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r10, r0
- bge _081863FC
- b _0818606C
-_081863FC:
- add sp, 0x50
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_818603C
-
- thumb_func_start GetAiScriptsInRecordedBattle
-GetAiScriptsInRecordedBattle: @ 8186438
- ldr r0, =gUnknown_0203C7BC
- ldr r0, [r0]
- bx lr
- .pool
- thumb_func_end GetAiScriptsInRecordedBattle
-
- thumb_func_start sub_8186444
-sub_8186444: @ 8186444
- ldr r1, =gUnknown_0203CCD0
- movs r0, 0x1
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8186444
-
- thumb_func_start sub_8186450
-sub_8186450: @ 8186450
- push {lr}
- movs r1, 0
- ldr r0, =gUnknown_0203CCD0
- ldrb r0, [r0]
- cmp r0, 0
- bne _0818645E
- movs r1, 0x1
-_0818645E:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8186450
-
- thumb_func_start sub_8186468
-sub_8186468: @ 8186468
- push {r4,r5,lr}
- adds r3, r0, 0
- movs r2, 0
- ldr r5, =gUnknown_03001278
- ldr r4, =gUnknown_0203CCD1
-_08186472:
- adds r0, r3, r2
- adds r1, r2, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x7
- ble _08186472
- movs r0, 0xFF
- strb r0, [r3, 0x7]
- ldrb r1, [r5]
- adds r0, r3, 0
- bl ConvertInternationalString
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8186468
-
- thumb_func_start sub_818649C
-sub_818649C: @ 818649C
- ldr r0, =gUnknown_0203CCD9
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_818649C
-
- thumb_func_start sub_81864A8
-sub_81864A8: @ 81864A8
- ldr r0, =gUnknown_0203CCDA
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_81864A8
-
- thumb_func_start sub_81864B4
-sub_81864B4: @ 81864B4
- ldr r0, =gUnknown_03001278
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_81864B4
-
- thumb_func_start sub_81864C0
-sub_81864C0: @ 81864C0
- ldr r0, =gUnknown_03001279
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_81864C0
-
- thumb_func_start sub_81864CC
-sub_81864CC: @ 81864CC
- ldr r0, =gUnknown_0203CCE8
- ldr r1, =gBattleOutcome
- ldrb r1, [r1]
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_81864CC
-
- thumb_func_start sub_81864E0
-sub_81864E0: @ 81864E0
- ldr r0, =gUnknown_0203CCDC
- bx lr
- .pool
- thumb_func_end sub_81864E0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/rom4.s b/asm/rom4.s
index 3f59c2807..ea03b8a8d 100644
--- a/asm/rom4.s
+++ b/asm/rom4.s
@@ -238,8 +238,8 @@ _08084854:
.pool
thumb_func_end sav12_xor_set
- thumb_func_start ApplyNewEncyprtionKeyToGameStats
-ApplyNewEncyprtionKeyToGameStats: @ 8084864
+ thumb_func_start ApplyNewEncryptionKeyToGameStats
+ApplyNewEncryptionKeyToGameStats: @ 8084864
push {r4-r6,lr}
adds r5, r0, 0
movs r4, 0
@@ -251,7 +251,7 @@ _0808486C:
ldr r0, [r6]
adds r0, r1
adds r1, r5, 0
- bl ApplyNewEncyprtionKeyToWord
+ bl ApplyNewEncryptionKeyToWord
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
@@ -261,7 +261,7 @@ _0808486C:
pop {r0}
bx r0
.pool
- thumb_func_end ApplyNewEncyprtionKeyToGameStats
+ thumb_func_end ApplyNewEncryptionKeyToGameStats
thumb_func_start CopyFieldObjectTemplatesToSav1
@ void CopyFieldObjectTemplatesToSav1()
@@ -2675,12 +2675,12 @@ sub_8085B2C: @ 8085B2C
ldr r1, =gUnknown_02032306
movs r0, 0x1
strb r0, [r1]
- bl sub_80B582C
+ bl GetLocalWaterMon
b _08085B62
.pool
_08085B5C:
ldr r0, =gUnknown_02032306
- bl wild_pokemon_rand_for_map
+ bl GetLocalWildMon
_08085B62:
ldr r1, =gUnknown_02032304
strh r0, [r1]
diff --git a/asm/rom6.s b/asm/rom6.s
index f07689a86..430ed7ee9 100644
--- a/asm/rom6.s
+++ b/asm/rom6.s
@@ -1223,7 +1223,7 @@ sub_8135F04: @ 8135F04
adds r4, 0x1
ldr r6, =gStringVar1
adds r0, r5, 0
- bl sub_8136EA4
+ bl GetHighestPokeblocksFlavorLevel
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -1364,7 +1364,7 @@ _08136032:
bls _08136002
ldr r4, =gStringVar1
mov r0, r8
- bl sub_8136EDC
+ bl GetPokeblocksFeel
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -2601,7 +2601,7 @@ sub_8136AB4: @ 8136AB4
ldr r1, =gText_ThrowAwayVar1
adds r0, r5, 0
bl StringExpandPlaceholders
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
lsls r0, 24
lsrs r0, 24
movs r1, 0x1
@@ -2657,7 +2657,7 @@ sub_8136B78: @ 8136B78
ldr r1, =gText_Var1ThrownAway
adds r0, r5, 0
bl StringExpandPlaceholders
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
lsls r0, 24
lsrs r0, 24
movs r1, 0x1
@@ -2779,7 +2779,7 @@ sub_8136C8C: @ 8136C8C
adds r2, r6
ldr r1, [r5]
adds r1, r2
- bl sub_8136FE4
+ bl PokeblockGetGain
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
@@ -2995,8 +2995,8 @@ _08136E8C:
bx r0
thumb_func_end ClearPokeblocks
- thumb_func_start sub_8136EA4
-sub_8136EA4: @ 8136EA4
+ thumb_func_start GetHighestPokeblocksFlavorLevel
+GetHighestPokeblocksFlavorLevel: @ 8136EA4
push {r4-r6,lr}
adds r6, r0, 0
movs r1, 0x1
@@ -3024,10 +3024,10 @@ _08136ECC:
pop {r4-r6}
pop {r1}
bx r1
- thumb_func_end sub_8136EA4
+ thumb_func_end GetHighestPokeblocksFlavorLevel
- thumb_func_start sub_8136EDC
-sub_8136EDC: @ 8136EDC
+ thumb_func_start GetPokeblocksFeel
+GetPokeblocksFeel: @ 8136EDC
push {lr}
movs r1, 0x6
bl sub_8136F9C
@@ -3039,10 +3039,10 @@ sub_8136EDC: @ 8136EDC
_08136EEE:
pop {r1}
bx r1
- thumb_func_end sub_8136EDC
+ thumb_func_end GetPokeblocksFeel
- thumb_func_start sub_8136EF4
-sub_8136EF4: @ 8136EF4
+ thumb_func_start GetFirstFreePokeblockSlot
+GetFirstFreePokeblockSlot: @ 8136EF4
push {lr}
movs r1, 0
ldr r0, =gSaveBlock1Ptr
@@ -3070,13 +3070,13 @@ _08136F18:
_08136F26:
pop {r1}
bx r1
- thumb_func_end sub_8136EF4
+ thumb_func_end GetFirstFreePokeblockSlot
- thumb_func_start sub_8136F2C
-sub_8136F2C: @ 8136F2C
+ thumb_func_start AddPokeblock
+AddPokeblock: @ 8136F2C
push {r4,lr}
adds r4, r0, 0
- bl sub_8136EF4
+ bl GetFirstFreePokeblockSlot
lsls r0, 24
asrs r1, r0, 24
movs r0, 0x1
@@ -3102,7 +3102,7 @@ _08136F62:
pop {r4}
pop {r1}
bx r1
- thumb_func_end sub_8136F2C
+ thumb_func_end AddPokeblock
thumb_func_start sub_8136F68
sub_8136F68: @ 8136F68
@@ -3177,8 +3177,8 @@ _08136FDE:
bx r1
thumb_func_end sub_8136F9C
- thumb_func_start sub_8136FE4
-sub_8136FE4: @ 8136FE4
+ thumb_func_start PokeblockGetGain
+PokeblockGetGain: @ 8136FE4
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -3227,7 +3227,7 @@ _0813702A:
pop {r1}
bx r1
.pool
- thumb_func_end sub_8136FE4
+ thumb_func_end PokeblockGetGain
thumb_func_start sub_8137044
sub_8137044: @ 8137044
@@ -3261,7 +3261,7 @@ _08137074:
ldr r0, =gUnknown_085B2720
adds r1, r0
adds r0, r5, 0
- bl sub_8136FE4
+ bl PokeblockGetGain
lsls r0, 16
cmp r0, 0
ble _081370A0
@@ -3287,8 +3287,8 @@ _081370AC:
bx r1
thumb_func_end sub_8137068
- thumb_func_start sub_81370B4
-sub_81370B4: @ 81370B4
+ thumb_func_start GetPokeblocksFlavor
+GetPokeblocksFlavor: @ 81370B4
push {r4-r7,lr}
adds r5, r0, 0
movs r7, 0
@@ -3324,7 +3324,7 @@ _081370E2:
pop {r4-r7}
pop {r1}
bx r1
- thumb_func_end sub_81370B4
+ thumb_func_end GetPokeblocksFlavor
thumb_func_start sub_81370FC
sub_81370FC: @ 81370FC
diff --git a/asm/shop.s b/asm/shop.s
index 94756624c..2d6791a62 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -1219,7 +1219,7 @@ BuyMenuDisplayMessage: @ 80E04E8
adds r6, r2, 0
lsls r4, 24
lsrs r4, 24
- bl sav2_get_text_speed
+ bl GetPlayerTextSpeed
lsls r0, 24
lsrs r0, 24
movs r1, 0x1
diff --git a/asm/trade.s b/asm/trade.s
index cbf980b74..74e907aee 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -401,7 +401,7 @@ _080774B2:
ldrb r2, [r0]
cmp r2, 0
bne _0807754C
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r5, =0x00001122
adds r0, r5, 0
strh r0, [r1]
@@ -2142,7 +2142,7 @@ _08078484:
.4byte _080786F0
.4byte _08078720
_080784DC:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
ldr r1, =gPlayerParty
movs r2, 0xC8
bl sub_8078438
@@ -2208,7 +2208,7 @@ _08078552:
b _080787A2
.pool
_0807857C:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
ldr r1, =gPlayerParty + 200
movs r2, 0xC8
bl sub_8078438
@@ -2247,7 +2247,7 @@ _080785B6:
b _080787A2
.pool
_080785E0:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
ldr r1, =gPlayerParty + 400
movs r2, 0xC8
bl sub_8078438
@@ -2286,7 +2286,7 @@ _0807861A:
b _080787A2
.pool
_08078644:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
ldr r1, =gSaveBlock1Ptr
ldr r1, [r1]
ldr r2, =0x00002be0
@@ -2328,7 +2328,7 @@ _0807868A:
b _080787A2
.pool
_080786B4:
- ldr r0, =gUnknown_020228C4
+ ldr r0, =gBlockSendBuffer
ldr r1, =gSaveBlock1Ptr
ldr r1, [r1]
ldr r2, =0x000031a8
@@ -7258,7 +7258,7 @@ _0807AEAC:
ldrb r0, [r0]
cmp r0, 0
bne _0807AEC0
- ldr r1, =gUnknown_020229C6
+ ldr r1, =gLinkType
ldr r2, =0x00001144
adds r0, r2, 0
strh r0, [r1]
diff --git a/asm/trainer_card.s b/asm/trainer_card.s
index bee1f4f7f..84d0cceab 100644
--- a/asm/trainer_card.s
+++ b/asm/trainer_card.s
@@ -5000,7 +5000,7 @@ _080C5240:
adds r0, r2
ldrh r0, [r0]
strh r0, [r1, 0x6]
- bl sub_8185290
+ bl CanCopyRecordedBattleSaveData
ldr r3, [r5]
movs r1, 0x1
ands r0, r1
@@ -5825,7 +5825,7 @@ _080C5970:
strh r0, [r1, 0x6]
bl sub_80C52E4
ldr r0, =sub_80C58D4
- bl sub_8185E24
+ bl PlayRecordedBattle
b _080C599A
.pool
_080C5994:
diff --git a/asm/unk_81BAD84.s b/asm/unk_81BAD84.s
deleted file mode 100644
index 2a95feed4..000000000
--- a/asm/unk_81BAD84.s
+++ /dev/null
@@ -1,57 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81BAD84
-sub_81BAD84: @ 81BAD84
- push {r4-r6,lr}
- movs r6, 0x80
- lsls r6, 19
- movs r2, 0
- strh r2, [r6]
- ldr r1, =0x04000010
- strh r2, [r1]
- adds r1, 0x2
- strh r2, [r1]
- adds r1, 0x3E
- strh r2, [r1]
- ldr r5, =gUnknown_08617128
- lsls r4, r0, 1
- adds r4, r0
- lsls r4, 2
- adds r0, r4, r5
- ldr r0, [r0]
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- adds r0, r5, 0x4
- adds r0, r4, r0
- ldr r0, [r0]
- ldr r1, =0x0600f800
- bl LZ77UnCompVram
- adds r5, 0x8
- adds r4, r5
- ldr r0, [r4]
- movs r1, 0xA0
- lsls r1, 19
- movs r4, 0x80
- lsls r4, 1
- adds r2, r4, 0
- bl CpuSet
- ldr r1, =0x04000008
- movs r2, 0xF8
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- strh r4, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BAD84
-
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/unk_text_util.s b/asm/unk_text_util.s
deleted file mode 100755
index f8dabb5b7..000000000
--- a/asm/unk_text_util.s
+++ /dev/null
@@ -1,99 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81AFBF0
-sub_81AFBF0: @ 81AFBF0
- push {lr}
- ldr r1, =gUnknown_0203CE9C
- movs r2, 0
- adds r0, r1, 0
- adds r0, 0x1C
-_081AFBFA:
- str r2, [r0]
- subs r0, 0x4
- cmp r0, r1
- bge _081AFBFA
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AFBF0
-
- thumb_func_start sub_81AFC0C
-sub_81AFC0C: @ 81AFC0C
- push {lr}
- adds r2, r1, 0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x7
- bhi _081AFC20
- ldr r1, =gUnknown_0203CE9C
- lsls r0, 2
- adds r0, r1
- str r2, [r0]
-_081AFC20:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AFC0C
-
- thumb_func_start sub_81AFC28
-sub_81AFC28: @ 81AFC28
- push {r4,r5,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- beq _081AFC68
- ldr r5, =gUnknown_0203CE9C
-_081AFC38:
- cmp r1, 0xF7
- beq _081AFC48
- strb r1, [r2]
- adds r4, 0x1
- adds r2, 0x1
- b _081AFC60
- .pool
-_081AFC48:
- adds r4, 0x1
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- cmp r1, 0
- beq _081AFC5E
- adds r0, r2, 0
- bl StringCopy
- adds r2, r0, 0
-_081AFC5E:
- adds r4, 0x1
-_081AFC60:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _081AFC38
-_081AFC68:
- movs r0, 0xFF
- strb r0, [r2]
- adds r0, r2, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81AFC28
-
- thumb_func_start sub_81AFC74
-sub_81AFC74: @ 81AFC74
- lsls r0, 24
- ldr r1, =gUnknown_0203CE9C
- lsrs r0, 22
- adds r0, r1
- ldr r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_81AFC74
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/use_pokeblock.s b/asm/use_pokeblock.s
index 3a8b76ab1..3c580654c 100755
--- a/asm/use_pokeblock.s
+++ b/asm/use_pokeblock.s
@@ -1769,7 +1769,7 @@ _0816721C:
adds r0, r6, r0
ldrb r1, [r0]
mov r0, r10
- bl GetMonFlavourRelation
+ bl GetMonFlavorRelation
lsls r0, 24
asrs r2, r0, 24
cmp r0, r9
diff --git a/asm/wild_encounter.s b/asm/wild_encounter.s
deleted file mode 100644
index 70346e4d7..000000000
--- a/asm/wild_encounter.s
+++ /dev/null
@@ -1,2353 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80B48B8
-sub_80B48B8: @ 80B48B8
- ldr r1, =gUnknown_02038C00
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_80B48B8
-
- thumb_func_start sub_80B48C4
-sub_80B48C4: @ 80B48C4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0x4]
- lsls r2, 24
- lsrs r2, 24
- ldr r3, =gUnknown_08553A7C
- lsls r1, r2, 1
- adds r1, r2
- lsls r2, r1, 1
- adds r2, r3
- adds r0, r1, 0x1
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- mov r9, r0
- adds r1, 0x2
- lsls r1, 1
- adds r1, r3
- ldrh r6, [r1]
- ldrh r5, [r2]
- cmp r5, r9
- bhi _080B496E
- ldr r0, =gMapHeader
- mov r10, r0
-_080B4906:
- movs r4, 0
- mov r1, r10
- ldr r0, [r1]
- ldr r0, [r0]
- cmp r4, r0
- bge _080B4964
- ldr r1, [sp]
- lsls r0, r1, 16
- asrs r0, 16
- mov r8, r0
- ldr r1, [sp, 0x4]
- lsls r0, r1, 16
- asrs r7, r0, 16
-_080B4920:
- adds r0, r4, 0x7
- adds r1, r5, 0x7
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSurfableAndNotWaterfall
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B4954
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r8, r4
- bne _080B4954
- cmp r7, r5
- bne _080B4954
- adds r0, r6, 0
- b _080B4974
- .pool
-_080B4954:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- mov r1, r10
- ldr r0, [r1]
- ldr r0, [r0]
- cmp r4, r0
- blt _080B4920
-_080B4964:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r9
- bls _080B4906
-_080B496E:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r0, 16
-_080B4974:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80B48C4
-
- thumb_func_start sub_80B4984
-sub_80B4984: @ 80B4984
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- movs r7, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0x88
- lsls r0, 6
- cmp r1, r0
- bne _080B4A7A
- add r5, sp, 0xC
- mov r4, sp
- adds r4, 0xE
- adds r0, r5, 0
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- ldrh r0, [r5]
- subs r0, 0x7
- strh r0, [r5]
- ldrh r0, [r4]
- subs r0, 0x7
- strh r0, [r4]
- movs r0, 0
- ldrsh r1, [r4, r0]
- ldr r0, =gUnknown_08553A7C
- mov r9, r5
- mov r8, r4
- ldrh r2, [r0, 0x6]
- cmp r1, r2
- blt _080B49D0
- ldrh r3, [r0, 0x8]
- cmp r1, r3
- bgt _080B49D0
- movs r7, 0x1
-_080B49D0:
- mov r2, r8
- movs r3, 0
- ldrsh r1, [r2, r3]
- ldrh r2, [r0, 0xC]
- cmp r1, r2
- blt _080B49E4
- ldrh r0, [r0, 0xE]
- cmp r1, r0
- bgt _080B49E4
- movs r7, 0x2
-_080B49E4:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x31
- bls _080B4A08
- b _080B4A7A
- .pool
-_080B4A04:
- movs r0, 0x1
- b _080B4A7C
-_080B4A08:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r3, =0x00002e6a
- adds r0, r3
- ldrh r0, [r0]
- bl sub_80B4AB8
- movs r5, 0
- ldr r6, =0x000001bf
-_080B4A1A:
- bl sub_80B4A98
- lsls r1, r5, 1
- mov r2, sp
- adds r4, r2, r1
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl __umodsi3
- strh r0, [r4]
- lsls r0, 16
- cmp r0, 0
- bne _080B4A38
- strh r6, [r4]
-_080B4A38:
- ldrh r0, [r4]
- subs r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- bls _080B4A4A
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_080B4A4A:
- cmp r5, 0x6
- bne _080B4A1A
- mov r3, r9
- movs r1, 0
- ldrsh r0, [r3, r1]
- mov r2, r8
- movs r3, 0
- ldrsh r1, [r2, r3]
- adds r2, r7, 0
- bl sub_80B48C4
- lsls r0, 16
- lsrs r1, r0, 16
- movs r5, 0
-_080B4A66:
- lsls r0, r5, 1
- add r0, sp
- ldrh r0, [r0]
- cmp r1, r0
- beq _080B4A04
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _080B4A66
-_080B4A7A:
- movs r0, 0
-_080B4A7C:
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B4984
-
- thumb_func_start sub_80B4A98
-sub_80B4A98: @ 80B4A98
- ldr r2, =gUnknown_02038C04
- ldr r1, [r2]
- ldr r0, =0x41c64e6d
- muls r0, r1
- ldr r1, =0x00003039
- adds r0, r1
- str r0, [r2]
- lsrs r0, 16
- bx lr
- .pool
- thumb_func_end sub_80B4A98
-
- thumb_func_start sub_80B4AB8
-sub_80B4AB8: @ 80B4AB8
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =gUnknown_02038C04
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_80B4AB8
-
- thumb_func_start wild_pokemon_rand_grass
-wild_pokemon_rand_grass: @ 80B4AC8
- push {lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x13
- bhi _080B4AE4
- movs r0, 0
- b _080B4B7E
-_080B4AE4:
- adds r0, r1, 0
- subs r0, 0x14
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bhi _080B4AF4
- movs r0, 0x1
- b _080B4B7E
-_080B4AF4:
- adds r0, r1, 0
- subs r0, 0x28
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x9
- bhi _080B4B04
- movs r0, 0x2
- b _080B4B7E
-_080B4B04:
- adds r0, r1, 0
- subs r0, 0x32
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x9
- bhi _080B4B14
- movs r0, 0x3
- b _080B4B7E
-_080B4B14:
- adds r0, r1, 0
- subs r0, 0x3C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x9
- bhi _080B4B24
- movs r0, 0x4
- b _080B4B7E
-_080B4B24:
- adds r0, r1, 0
- subs r0, 0x46
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x9
- bhi _080B4B34
- movs r0, 0x5
- b _080B4B7E
-_080B4B34:
- adds r0, r1, 0
- subs r0, 0x50
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _080B4B44
- movs r0, 0x6
- b _080B4B7E
-_080B4B44:
- adds r0, r1, 0
- subs r0, 0x55
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _080B4B54
- movs r0, 0x7
- b _080B4B7E
-_080B4B54:
- adds r0, r1, 0
- subs r0, 0x5A
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bhi _080B4B64
- movs r0, 0x8
- b _080B4B7E
-_080B4B64:
- adds r0, r1, 0
- subs r0, 0x5E
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bhi _080B4B74
- movs r0, 0x9
- b _080B4B7E
-_080B4B74:
- cmp r1, 0x62
- beq _080B4B7C
- movs r0, 0xB
- b _080B4B7E
-_080B4B7C:
- movs r0, 0xA
-_080B4B7E:
- pop {r1}
- bx r1
- thumb_func_end wild_pokemon_rand_grass
-
- thumb_func_start wild_pokemon_rand_water
-wild_pokemon_rand_water: @ 80B4B84
- push {lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- cmp r1, 0x3B
- bhi _080B4BA2
- movs r0, 0
- b _080B4BD4
-_080B4BA2:
- adds r0, r1, 0
- subs r0, 0x3C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1D
- bhi _080B4BB2
- movs r0, 0x1
- b _080B4BD4
-_080B4BB2:
- adds r0, r1, 0
- subs r0, 0x5A
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _080B4BC2
- movs r0, 0x2
- b _080B4BD4
-_080B4BC2:
- adds r0, r2, 0
- subs r0, 0x5F
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _080B4BD2
- movs r0, 0x4
- b _080B4BD4
-_080B4BD2:
- movs r0, 0x3
-_080B4BD4:
- pop {r1}
- bx r1
- thumb_func_end wild_pokemon_rand_water
-
- thumb_func_start sub_80B4BD8
-sub_80B4BD8: @ 80B4BD8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- movs r5, 0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r4, 0x1
- beq _080B4C12
- cmp r4, 0x1
- bgt _080B4C02
- cmp r4, 0
- beq _080B4C08
- b _080B4C6C
-_080B4C02:
- cmp r6, 0x2
- beq _080B4C36
- b _080B4C6C
-_080B4C08:
- movs r5, 0x1
- cmp r1, 0x45
- bhi _080B4C6C
- movs r5, 0
- b _080B4C6C
-_080B4C12:
- cmp r1, 0x3B
- bhi _080B4C18
- movs r5, 0x2
-_080B4C18:
- adds r0, r1, 0
- subs r0, 0x3C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bhi _080B4C26
- movs r5, 0x3
-_080B4C26:
- adds r0, r1, 0
- subs r0, 0x50
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bhi _080B4C6C
- movs r5, 0x4
- b _080B4C6C
-_080B4C36:
- cmp r1, 0x27
- bhi _080B4C3C
- movs r5, 0x5
-_080B4C3C:
- adds r0, r1, 0
- subs r0, 0x28
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x27
- bhi _080B4C4A
- movs r5, 0x6
-_080B4C4A:
- adds r0, r1, 0
- subs r0, 0x50
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xE
- bhi _080B4C58
- movs r5, 0x7
-_080B4C58:
- adds r0, r1, 0
- subs r0, 0x5F
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bhi _080B4C66
- movs r5, 0x8
-_080B4C66:
- cmp r1, 0x63
- bne _080B4C6C
- movs r5, 0x9
-_080B4C6C:
- adds r0, r5, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80B4BD8
-
- thumb_func_start sub_80B4C74
-sub_80B4C74: @ 80B4C74
- push {r4-r7,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0x1]
- ldrb r1, [r4]
- cmp r0, r1
- bcc _080B4C86
- ldrb r7, [r4]
- adds r6, r0, 0
- b _080B4C8A
-_080B4C86:
- ldrb r7, [r4, 0x1]
- ldrb r6, [r4]
-_080B4C8A:
- subs r4, r6, r7
- adds r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- bl __modsi3
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, =gPlayerParty
- adds r0, r5, 0
- movs r1, 0x6
- bl GetMonData
- cmp r0, 0
- bne _080B4CEA
- adds r0, r5, 0
- bl GetMonAbility
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x37
- beq _080B4CC8
- cmp r0, 0x48
- beq _080B4CC8
- cmp r0, 0x2E
- bne _080B4CEA
-_080B4CC8:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080B4CE0
- adds r0, r6, 0
- b _080B4CF0
- .pool
-_080B4CE0:
- cmp r4, 0
- beq _080B4CEA
- subs r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_080B4CEA:
- adds r0, r7, r4
- lsls r0, 24
- lsrs r0, 24
-_080B4CF0:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80B4C74
-
- thumb_func_start get_wild_data_index_for_map
-get_wild_data_index_for_map: @ 80B4CF8
- push {r4-r6,lr}
- movs r4, 0
- ldr r0, =gWildMonHeaders
- ldrb r1, [r0]
- adds r5, r0, 0
- cmp r1, 0xFF
- beq _080B4D6C
- ldr r6, =0x00006a18
-_080B4D08:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 2
- adds r3, r0, r5
- ldrb r1, [r3]
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- movs r0, 0x4
- ldrsb r0, [r2, r0]
- cmp r1, r0
- bne _080B4D58
- ldrb r1, [r3, 0x1]
- movs r0, 0x5
- ldrsb r0, [r2, r0]
- cmp r1, r0
- bne _080B4D58
- ldrh r0, [r2, 0x4]
- cmp r0, r6
- bne _080B4D44
- ldr r0, =0x0000403e
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x8
- bls _080B4D3E
- movs r0, 0
-_080B4D3E:
- adds r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
-_080B4D44:
- adds r0, r4, 0
- b _080B4D6E
- .pool
-_080B4D58:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 2
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _080B4D08
-_080B4D6C:
- ldr r0, =0x0000ffff
-_080B4D6E:
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end get_wild_data_index_for_map
-
- thumb_func_start sub_80B4D78
-sub_80B4D78: @ 80B4D78
- push {r4-r7,lr}
- sub sp, 0x1C
- bl GetSafariZoneFlag
- cmp r0, 0x1
- bne _080B4E0E
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x4F
- bhi _080B4E0E
- bl SafariZoneGetActivePokeblock
- adds r7, r0, 0
- cmp r7, 0
- beq _080B4E0E
- movs r5, 0
-_080B4DA6:
- mov r1, sp
- adds r0, r1, r5
- strb r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x18
- bls _080B4DA6
- movs r5, 0
-_080B4DB8:
- adds r1, r5, 0x1
- lsls r0, r1, 24
- lsrs r4, r0, 24
- adds r6, r1, 0
- cmp r4, 0x18
- bhi _080B4DE8
- add r5, sp
-_080B4DC6:
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _080B4DDE
- ldrb r2, [r5]
- mov r0, sp
- adds r1, r0, r4
- ldrb r0, [r1]
- strb r0, [r5]
- strb r2, [r1]
-_080B4DDE:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x18
- bls _080B4DC6
-_080B4DE8:
- lsls r0, r6, 24
- lsrs r5, r0, 24
- cmp r5, 0x17
- bls _080B4DB8
- movs r5, 0
-_080B4DF2:
- mov r1, sp
- adds r4, r1, r5
- ldrb r0, [r4]
- adds r1, r7, 0
- bl sub_8136FE4
- lsls r0, 16
- cmp r0, 0
- bgt _080B4E48
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x18
- bls _080B4DF2
-_080B4E0E:
- ldr r4, =gPlayerParty
- adds r0, r4, 0
- movs r1, 0x6
- bl GetMonData
- cmp r0, 0
- bne _080B4E4C
- adds r0, r4, 0
- bl GetMonAbility
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1C
- bne _080B4E4C
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080B4E4C
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- b _080B4E54
- .pool
-_080B4E48:
- ldrb r0, [r4]
- b _080B4E5E
-_080B4E4C:
- bl Random
- lsls r0, 16
- lsrs r0, 16
-_080B4E54:
- movs r1, 0x19
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
-_080B4E5E:
- add sp, 0x1C
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80B4D78
-
- thumb_func_start sub_80B4E68
-sub_80B4E68: @ 80B4E68
- push {r4-r7,lr}
- sub sp, 0xC
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 24
- lsrs r7, r1, 24
- bl ZeroEnemyPartyMons
- movs r2, 0x1
- ldr r1, =gBaseStats
- lsls r0, r6, 3
- subs r0, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x10]
- cmp r0, 0
- beq _080B4E96
- cmp r0, 0
- blt _080B4E98
- cmp r0, 0xFF
- bgt _080B4E98
- cmp r0, 0xFE
- blt _080B4E98
-_080B4E96:
- movs r2, 0
-_080B4E98:
- cmp r2, 0
- beq _080B4F28
- ldr r5, =gPlayerParty
- adds r0, r5, 0
- movs r1, 0x6
- bl GetMonData
- cmp r0, 0
- bne _080B4F28
- adds r0, r5, 0
- bl GetMonAbility
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x38
- bne _080B4F28
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _080B4F28
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0
- bl GetMonData
- adds r1, r0, 0
- adds r0, r4, 0
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xFE
- bne _080B4F00
- movs r4, 0
- b _080B4F02
- .pool
-_080B4F00:
- movs r4, 0xFE
-_080B4F02:
- bl sub_80B4D78
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gEnemyParty
- str r4, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- adds r0, r1, 0
- adds r1, r6, 0
- adds r2, r7, 0
- movs r3, 0x20
- bl CreateMonWithGenderNatureLetter
- b _080B4F40
- .pool
-_080B4F28:
- bl sub_80B4D78
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gEnemyParty
- str r0, [sp]
- adds r0, r1, 0
- adds r1, r6, 0
- adds r2, r7, 0
- movs r3, 0x20
- bl CreateMonWithNature
-_080B4F40:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B4E68
-
- thumb_func_start sub_80B4F4C
-sub_80B4F4C: @ 80B4F4C
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r1, 24
- lsrs r3, r1, 24
- adds r4, r3, 0
- lsls r2, 24
- lsrs r6, r2, 24
- movs r1, 0
- mov r0, sp
- strb r1, [r0]
- cmp r3, 0x1
- beq _080B4FA0
- cmp r3, 0x1
- bgt _080B4F70
- cmp r3, 0
- beq _080B4F76
- b _080B4FBA
-_080B4F70:
- cmp r4, 0x2
- beq _080B4FB2
- b _080B4FBA
-_080B4F76:
- ldr r0, [r5, 0x4]
- movs r1, 0x8
- movs r2, 0x2A
- mov r3, sp
- bl TryGetAbilityInfluencedWildMonIndex
- lsls r0, 24
- cmp r0, 0
- bne _080B4FBA
- ldr r0, [r5, 0x4]
- movs r1, 0xD
- movs r2, 0x9
- mov r3, sp
- bl TryGetAbilityInfluencedWildMonIndex
- lsls r0, 24
- cmp r0, 0
- bne _080B4FBA
- bl wild_pokemon_rand_grass
- b _080B4FB6
-_080B4FA0:
- ldr r0, [r5, 0x4]
- movs r1, 0xD
- movs r2, 0x9
- mov r3, sp
- bl TryGetAbilityInfluencedWildMonIndex
- lsls r0, 24
- cmp r0, 0
- bne _080B4FBA
-_080B4FB2:
- bl wild_pokemon_rand_water
-_080B4FB6:
- mov r1, sp
- strb r0, [r1]
-_080B4FBA:
- mov r0, sp
- ldrb r1, [r0]
- lsls r1, 2
- ldr r0, [r5, 0x4]
- adds r0, r1
- bl sub_80B4C74
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x1
- ands r0, r6
- cmp r0, 0
- beq _080B4FE0
- adds r0, r4, 0
- bl sub_80B58CC
- lsls r0, 24
- cmp r0, 0
- beq _080B5000
-_080B4FE0:
- ldr r0, =gMapHeader
- ldrh r1, [r0, 0x12]
- movs r0, 0xB3
- lsls r0, 1
- cmp r1, r0
- beq _080B5008
- movs r0, 0x2
- ands r0, r6
- cmp r0, 0
- beq _080B5008
- adds r0, r4, 0
- bl DoKeenEyeIntimidateWildEncounterTest
- lsls r0, 24
- cmp r0, 0
- bne _080B5008
-_080B5000:
- movs r0, 0
- b _080B501C
- .pool
-_080B5008:
- mov r0, sp
- ldrb r0, [r0]
- ldr r1, [r5, 0x4]
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x2]
- adds r1, r4, 0
- bl sub_80B4E68
- movs r0, 0x1
-_080B501C:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80B4F4C
-
- thumb_func_start sub_80B5024
-sub_80B5024: @ 80B5024
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r0, r1, 24
- lsrs r0, 24
- bl sub_80B4BD8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 22
- ldr r0, [r5, 0x4]
- adds r0, r4
- bl sub_80B4C74
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, [r5, 0x4]
- adds r0, r4, r0
- ldrh r0, [r0, 0x2]
- bl sub_80B4E68
- ldr r0, [r5, 0x4]
- adds r4, r0
- ldrh r0, [r4, 0x2]
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B5024
-
- thumb_func_start SetUpMassOutbreakEncounter
-SetUpMassOutbreakEncounter: @ 80B505C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B508C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002b94
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80B58CC
- lsls r0, 24
- cmp r0, 0
- bne _080B508C
- movs r0, 0
- b _080B50C6
- .pool
-_080B508C:
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r2, =0x00002b90
- adds r0, r1, r2
- ldrh r0, [r0]
- adds r2, 0x4
- adds r1, r2
- ldrb r1, [r1]
- bl sub_80B4E68
- movs r4, 0
-_080B50A2:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- lsls r1, r4, 1
- ldr r2, =0x00002b98
- adds r0, r2
- adds r0, r1
- ldrh r1, [r0]
- lsls r2, r4, 24
- lsrs r2, 24
- ldr r0, =gEnemyParty
- bl SetMonMoveSlot
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x3
- bls _080B50A2
- movs r0, 0x1
-_080B50C6:
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end SetUpMassOutbreakEncounter
-
- thumb_func_start DoMassOutbreakEncounterTest
-DoMassOutbreakEncounterTest: @ 80B50DC
- push {r4,lr}
- ldr r4, =gSaveBlock1Ptr
- ldr r2, [r4]
- ldr r1, =0x00002b90
- adds r0, r2, r1
- ldrh r0, [r0]
- cmp r0, 0
- beq _080B513C
- movs r1, 0x5
- ldrsb r1, [r2, r1]
- ldr r3, =0x00002b92
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r1, r0
- bne _080B513C
- movs r1, 0x4
- ldrsb r1, [r2, r1]
- adds r3, 0x1
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r1, r0
- bne _080B513C
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- ldr r1, [r4]
- ldr r2, =0x00002ba1
- adds r1, r2
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1]
- cmp r0, r1
- bcs _080B513C
- movs r0, 0x1
- b _080B513E
- .pool
-_080B513C:
- movs r0, 0
-_080B513E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end DoMassOutbreakEncounterTest
-
- thumb_func_start DoWildEncounterRateDiceRoll
-DoWildEncounterRateDiceRoll: @ 80B5144
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xB4
- lsls r1, 4
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r4
- bcc _080B5168
- movs r0, 0
- b _080B516A
-_080B5168:
- movs r0, 0x1
-_080B516A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end DoWildEncounterRateDiceRoll
-
- thumb_func_start DoWildEncounterRateTest
-DoWildEncounterRateTest: @ 80B5170
- push {r4,lr}
- sub sp, 0x4
- str r0, [sp]
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r0, 4
- str r0, [sp]
- movs r0, 0x6
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _080B519A
- ldr r1, [sp]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 4
- movs r1, 0x64
- bl __udivsi3
- str r0, [sp]
-_080B519A:
- mov r0, sp
- bl affects_encounter_rate_based_on_flags
- mov r0, sp
- bl ApplyCleanseTagWildEncounterRateReduction
- cmp r4, 0
- bne _080B5216
- ldr r4, =gPlayerParty
- adds r0, r4, 0
- movs r1, 0x6
- bl GetMonData
- cmp r0, 0
- bne _080B5216
- adds r0, r4, 0
- bl GetMonAbility
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B51E8
- ldr r0, =gMapHeader
- ldrh r1, [r0, 0x12]
- ldr r0, =0x00000169
- cmp r1, r0
- bne _080B5210
- ldr r1, [sp]
- lsls r0, r1, 1
- adds r0, r1
- lsrs r0, 2
- b _080B5214
- .pool
-_080B51E8:
- cmp r0, 0x23
- bne _080B51F2
- ldr r0, [sp]
- lsls r0, 1
- b _080B5214
-_080B51F2:
- cmp r0, 0x49
- beq _080B5210
- cmp r0, 0x47
- bne _080B5200
- ldr r0, [sp]
- lsls r0, 1
- b _080B5214
-_080B5200:
- cmp r0, 0x8
- bne _080B5216
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x2E
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _080B5216
-_080B5210:
- ldr r0, [sp]
- lsrs r0, 1
-_080B5214:
- str r0, [sp]
-_080B5216:
- ldr r0, [sp]
- movs r1, 0xB4
- lsls r1, 4
- cmp r0, r1
- bls _080B5222
- str r1, [sp]
-_080B5222:
- ldr r0, [sp]
- lsls r0, 16
- lsrs r0, 16
- bl DoWildEncounterRateDiceRoll
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end DoWildEncounterRateTest
-
- thumb_func_start DoGlobalWildEncounterDiceRoll
-DoGlobalWildEncounterDiceRoll: @ 80B523C
- push {lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3B
- bhi _080B5258
- movs r0, 0x1
- b _080B525A
-_080B5258:
- movs r0, 0
-_080B525A:
- pop {r1}
- bx r1
- thumb_func_end DoGlobalWildEncounterDiceRoll
-
- thumb_func_start sub_80B5260
-sub_80B5260: @ 80B5260
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0xE0
- lsls r0, 3
- cmp r1, r0
- bne _080B5280
- movs r0, 0x53
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- b _080B5282
- .pool
-_080B5280:
- movs r0, 0
-_080B5282:
- pop {r1}
- bx r1
- thumb_func_end sub_80B5260
-
- thumb_func_start is_it_battle_time_2
-is_it_battle_time_2: @ 80B5288
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 16
- lsrs r6, r0, 16
- mov r9, r6
- lsls r1, 16
- lsrs r7, r1, 16
- mov r8, r7
- ldr r0, =gUnknown_02038C00
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080B52A6
- b _080B54FE
-_080B52A6:
- bl get_wild_data_index_for_map
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, =0x0000ffff
- cmp r5, r0
- bne _080B539C
- ldr r0, =gMapHeader
- ldrh r1, [r0, 0x12]
- movs r0, 0xB3
- lsls r0, 1
- cmp r1, r0
- bne _080B5330
- bl sub_81A7D00
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r7, r6
- beq _080B52D8
- bl DoGlobalWildEncounterDiceRoll
- lsls r0, 24
- cmp r0, 0
- bne _080B52D8
- b _080B54FE
-_080B52D8:
- ldr r1, =gUnknown_08553A14
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 2
- adds r1, 0x4
- adds r4, r0, r1
- ldr r0, [r4]
- ldrb r0, [r0]
- movs r1, 0
- bl DoWildEncounterRateTest
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B52F8
- b _080B54FE
-_080B52F8:
- ldr r0, [r4]
- movs r1, 0
- movs r2, 0x2
- bl sub_80B4F4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B530C
- b _080B54FE
-_080B530C:
- movs r0, 0x1
- bl sub_81A7B90
- cmp r0, 0
- bne _080B5318
- b _080B54FE
-_080B5318:
- bl sub_80B06B0
- movs r0, 0x1
- b _080B5500
- .pool
-_080B5330:
- ldr r0, =0x00000169
- cmp r1, r0
- beq _080B5338
- b _080B54FE
-_080B5338:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r1, =0x00000cb2
- adds r0, r1
- ldrh r5, [r0]
- cmp r7, r6
- beq _080B5352
- bl DoGlobalWildEncounterDiceRoll
- lsls r0, 24
- cmp r0, 0
- bne _080B5352
- b _080B54FE
-_080B5352:
- ldr r1, =gUnknown_08553894
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 2
- adds r1, 0x4
- adds r4, r0, r1
- ldr r0, [r4]
- ldrb r0, [r0]
- movs r1, 0
- bl DoWildEncounterRateTest
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B5372
- b _080B54FE
-_080B5372:
- ldr r0, [r4]
- movs r1, 0
- movs r2, 0x2
- bl sub_80B4F4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B5386
- b _080B54FE
-_080B5386:
- bl sub_81A9C04
- b _080B54F6
- .pool
-_080B539C:
- lsls r0, r6, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsLandWildEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B543C
- ldr r1, =gWildMonHeaders
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 2
- adds r1, 0x4
- adds r0, r1
- ldr r0, [r0]
- adds r4, r2, 0
- cmp r0, 0
- bne _080B53C4
- b _080B54FE
-_080B53C4:
- cmp r7, r6
- beq _080B53D4
- bl DoGlobalWildEncounterDiceRoll
- lsls r0, 24
- cmp r0, 0
- bne _080B53D4
- b _080B54FE
-_080B53D4:
- ldr r1, =gWildMonHeaders
- adds r0, r4, r5
- lsls r0, 2
- adds r1, 0x4
- adds r0, r1
- ldr r0, [r0]
- ldrb r0, [r0]
- movs r1, 0
- bl DoWildEncounterRateTest
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B53F2
- b _080B54FE
-_080B53F2:
- bl TryStartRoamerEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B54BA
- bl DoMassOutbreakEncounterTest
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B5418
- movs r0, 0x3
- bl SetUpMassOutbreakEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B54F6
-_080B5418:
- ldr r1, =gWildMonHeaders
- adds r0, r4, r5
- lsls r0, 2
- adds r1, 0x4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0x3
- bl sub_80B4F4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B54F6
- b _080B54FE
- .pool
-_080B543C:
- adds r0, r4, 0
- bl MetatileBehavior_IsWaterWildEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B5464
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _080B54FE
- adds r0, r4, 0
- bl MetatileBehavior_IsBridge
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B54FE
-_080B5464:
- bl sub_80B5260
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B54FE
- ldr r1, =gWildMonHeaders
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 2
- adds r1, 0x8
- adds r0, r1
- ldr r0, [r0]
- adds r4, r2, 0
- cmp r0, 0
- beq _080B54FE
- cmp r8, r9
- beq _080B5492
- bl DoGlobalWildEncounterDiceRoll
- lsls r0, 24
- cmp r0, 0
- beq _080B54FE
-_080B5492:
- ldr r1, =gWildMonHeaders
- adds r0, r4, r5
- lsls r0, 2
- adds r1, 0x8
- adds r4, r0, r1
- ldr r0, [r4]
- ldrb r0, [r0]
- movs r1, 0
- bl DoWildEncounterRateTest
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B54FE
- bl TryStartRoamerEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B54E4
-_080B54BA:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x000031dc
- adds r0, r1
- ldrb r0, [r0, 0xC]
- bl sub_80B58CC
- lsls r0, 24
- cmp r0, 0
- beq _080B54FE
- bl sub_80B072C
- movs r0, 0x1
- b _080B5500
- .pool
-_080B54E4:
- ldr r0, [r4]
- movs r1, 0x1
- movs r2, 0x3
- bl sub_80B4F4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B54FE
-_080B54F6:
- bl sub_80B0698
- movs r0, 0x1
- b _080B5500
-_080B54FE:
- movs r0, 0
-_080B5500:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end is_it_battle_time_2
-
- thumb_func_start rock_smash_wild_pokemon_encounter
-rock_smash_wild_pokemon_encounter: @ 80B550C
- push {r4,lr}
- bl get_wild_data_index_for_map
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, =0x0000ffff
- cmp r2, r0
- beq _080B5568
- ldr r1, =gWildMonHeaders
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 2
- adds r1, 0xC
- adds r0, r1
- ldr r4, [r0]
- cmp r4, 0
- beq _080B5554
- ldrb r0, [r4]
- movs r1, 0x1
- bl DoWildEncounterRateTest
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B5568
- adds r0, r4, 0
- movs r1, 0x2
- movs r2, 0x3
- bl sub_80B4F4C
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bne _080B5568
- bl sub_80B0698
-_080B5554:
- ldr r0, =gSpecialVar_Result
- strh r4, [r0]
- b _080B556E
- .pool
-_080B5568:
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
-_080B556E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end rock_smash_wild_pokemon_encounter
-
- thumb_func_start SweetScentWildEncounter
-SweetScentWildEncounter: @ 80B5578
- push {r4,r5,lr}
- sub sp, 0x4
- mov r5, sp
- adds r5, 0x2
- mov r0, sp
- adds r1, r5, 0
- bl PlayerGetDestCoords
- bl get_wild_data_index_for_map
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, =0x0000ffff
- cmp r4, r0
- bne _080B562C
- ldr r0, =gMapHeader
- ldrh r1, [r0, 0x12]
- movs r0, 0xB3
- lsls r0, 1
- cmp r1, r0
- bne _080B55E4
- bl sub_81A7D00
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, =gUnknown_08553A14
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 2
- adds r1, 0x4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0
- bl sub_80B4F4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B55CA
- b _080B56F2
-_080B55CA:
- movs r0, 0
- bl sub_81A7B90
- bl sub_80B06B0
- movs r0, 0x1
- b _080B56F4
- .pool
-_080B55E4:
- ldr r0, =0x00000169
- cmp r1, r0
- beq _080B55EC
- b _080B56F2
-_080B55EC:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r1, =0x00000cb2
- adds r0, r1
- ldrh r4, [r0]
- ldr r1, =gUnknown_08553894
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 2
- adds r1, 0x4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0
- bl sub_80B4F4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B56F2
- bl sub_81A9C04
- b _080B56EA
- .pool
-_080B562C:
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsLandWildEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B568C
- ldr r1, =gWildMonHeaders
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 2
- adds r1, 0x4
- adds r0, r1
- ldr r4, [r0]
- cmp r4, 0
- beq _080B56F2
- bl TryStartRoamerEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B56D4
- bl DoMassOutbreakEncounterTest
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B5680
- movs r0, 0
- bl SetUpMassOutbreakEncounter
- b _080B56EA
- .pool
-_080B5680:
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- bl sub_80B4F4C
- b _080B56EA
-_080B568C:
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsWaterWildEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B56F2
- bl sub_80B5260
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080B56F2
- ldr r1, =gWildMonHeaders
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 2
- adds r1, 0x8
- adds r0, r1
- ldr r4, [r0]
- cmp r4, 0
- beq _080B56F2
- bl TryStartRoamerEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B56E0
-_080B56D4:
- bl sub_80B072C
- movs r0, 0x1
- b _080B56F4
- .pool
-_080B56E0:
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0
- bl sub_80B4F4C
-_080B56EA:
- bl sub_80B0698
- movs r0, 0x1
- b _080B56F4
-_080B56F2:
- movs r0, 0
-_080B56F4:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end SweetScentWildEncounter
-
- thumb_func_start GetFishingWildMonListHeader
-GetFishingWildMonListHeader: @ 80B56FC
- push {lr}
- bl get_wild_data_index_for_map
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, =0x0000ffff
- cmp r2, r0
- beq _080B572C
- ldr r0, =gWildMonHeaders
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0x10
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- beq _080B572C
- movs r0, 0x1
- b _080B572E
- .pool
-_080B572C:
- movs r0, 0
-_080B572E:
- pop {r1}
- bx r1
- thumb_func_end GetFishingWildMonListHeader
-
- thumb_func_start sub_80B5734
-sub_80B5734: @ 80B5734
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_80B4984
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B5764
- ldr r4, =gUnknown_08553A78
- adds r0, r4, 0
- bl sub_80B4C74
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldrh r4, [r4, 0x2]
- adds r0, r4, 0
- bl sub_80B4E68
- b _080B5784
- .pool
-_080B5764:
- ldr r4, =gWildMonHeaders
- bl get_wild_data_index_for_map
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r4, 0x10
- adds r1, r4
- ldr r0, [r1]
- adds r1, r5, 0
- bl sub_80B5024
- lsls r0, 16
- lsrs r4, r0, 16
-_080B5784:
- movs r0, 0xC
- bl IncrementGameStat
- adds r0, r4, 0
- bl sub_80EDA3C
- bl sub_80B0698
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B5734
-
- thumb_func_start wild_pokemon_rand_for_map
-wild_pokemon_rand_for_map: @ 80B57A0
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r0, 0
- strb r0, [r6]
- bl get_wild_data_index_for_map
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, =0x0000ffff
- cmp r3, r0
- beq _080B57D2
- ldr r2, =gWildMonHeaders
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r0, r2, 0x4
- adds r0, r1, r0
- ldr r5, [r0]
- adds r2, 0x8
- adds r1, r2
- ldr r4, [r1]
- cmp r5, 0
- bne _080B57E0
- cmp r4, 0
- bne _080B57E6
-_080B57D2:
- movs r0, 0
- b _080B5826
- .pool
-_080B57E0:
- cmp r4, 0
- bne _080B57F4
- b _080B5818
-_080B57E6:
- movs r0, 0x1
- strb r0, [r6]
- bl wild_pokemon_rand_water
- lsls r0, 24
- ldr r1, [r4, 0x4]
- b _080B5820
-_080B57F4:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x4F
- bls _080B5818
- movs r0, 0x1
- strb r0, [r6]
- bl wild_pokemon_rand_water
- lsls r0, 24
- ldr r1, [r4, 0x4]
- b _080B5820
-_080B5818:
- bl wild_pokemon_rand_grass
- lsls r0, 24
- ldr r1, [r5, 0x4]
-_080B5820:
- lsrs r0, 22
- adds r0, r1
- ldrh r0, [r0, 0x2]
-_080B5826:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end wild_pokemon_rand_for_map
-
- thumb_func_start sub_80B582C
-sub_80B582C: @ 80B582C
- push {r4,lr}
- bl get_wild_data_index_for_map
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, =0x0000ffff
- cmp r2, r0
- beq _080B5868
- ldr r1, =gWildMonHeaders
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 2
- adds r1, 0x8
- adds r0, r1
- ldr r4, [r0]
- cmp r4, 0
- beq _080B5868
- bl wild_pokemon_rand_water
- lsls r0, 24
- ldr r1, [r4, 0x4]
- lsrs r0, 22
- adds r0, r1
- ldrh r0, [r0, 0x2]
- b _080B586A
- .pool
-_080B5868:
- movs r0, 0
-_080B586A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B582C
-
- thumb_func_start sub_80B5870
-sub_80B5870: @ 80B5870
- push {r4,r5,lr}
- bl InBattlePike
- lsls r0, 24
- cmp r0, 0
- bne _080B58C4
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080B58C4
- bl InUnionRoom
- cmp r0, 0x1
- beq _080B58C4
- ldr r5, =0x00004021
- adds r0, r5, 0
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _080B58C4
- subs r4, r0, 0x1
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl VarSet
- cmp r4, 0
- bne _080B58C4
- ldr r0, =EventScript_RepelWoreOff
- bl ScriptContext1_SetupScript
- movs r0, 0x1
- b _080B58C6
- .pool
-_080B58C4:
- movs r0, 0
-_080B58C6:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B5870
-
- thumb_func_start sub_80B58CC
-sub_80B58CC: @ 80B58CC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, =0x00004021
- bl VarGet
- lsls r0, 16
- cmp r0, 0
- beq _080B5912
- movs r5, 0
-_080B58E0:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080B5920
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _080B5920
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- cmp r6, r0
- bcc _080B592A
-_080B5912:
- movs r0, 0x1
- b _080B592C
- .pool
-_080B5920:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _080B58E0
-_080B592A:
- movs r0, 0
-_080B592C:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80B58CC
-
- thumb_func_start DoKeenEyeIntimidateWildEncounterTest
-@ _BOOL1 DoKeenEyeIntimidateWildEncounterTest(u8 wildMonLevel)
-DoKeenEyeIntimidateWildEncounterTest: @ 80B5934
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gPlayerParty
- adds r0, r4, 0
- movs r1, 0x6
- bl GetMonData
- cmp r0, 0
- bne _080B5988
- adds r0, r4, 0
- bl GetMonAbility
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x33
- beq _080B595A
- cmp r0, 0x16
- bne _080B5988
-_080B595A:
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bls _080B5988
- subs r0, 0x5
- cmp r5, r0
- bgt _080B5988
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080B5988
- movs r0, 0
- b _080B598A
- .pool
-_080B5988:
- movs r0, 0x1
-_080B598A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end DoKeenEyeIntimidateWildEncounterTest
-
- thumb_func_start TryGetRandomWildMonIndexByType
-@ _BOOL1 TryGetRandomWildMonIndexByType(WildMonEntry *mons, u8 type, u8 numMons, u8 *monIndex)
-TryGetRandomWildMonIndexByType: @ 80B5990
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r7, sp
- mov r12, r0
- mov r8, r3
- lsls r1, 24
- lsrs r1, 24
- str r1, [r7]
- lsls r2, 24
- lsrs r2, 24
- mov r9, sp
- adds r0, r2, 0x3
- lsrs r0, 2
- lsls r0, 2
- mov r1, sp
- subs r1, r0
- mov sp, r1
- mov r5, sp
- movs r3, 0
- cmp r3, r2
- bcs _080B59D2
- movs r1, 0
-_080B59C4:
- adds r0, r5, r3
- strb r1, [r0]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r2
- bcc _080B59C4
-_080B59D2:
- movs r4, 0
- movs r3, 0
- cmp r4, r2
- bcs _080B5A12
- ldr r6, =gBaseStats
- mov r10, r6
-_080B59DE:
- lsls r0, r3, 2
- add r0, r12
- ldrh r1, [r0, 0x2]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- mov r6, r10
- adds r1, r0, r6
- ldrb r0, [r1, 0x6]
- ldr r6, [r7]
- cmp r0, r6
- beq _080B59FC
- ldrb r0, [r1, 0x7]
- cmp r0, r6
- bne _080B5A08
-_080B59FC:
- adds r1, r4, 0
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r1, r5, r1
- strb r3, [r1]
-_080B5A08:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r2
- bcc _080B59DE
-_080B5A12:
- cmp r4, 0
- beq _080B5A1A
- cmp r4, r2
- bne _080B5A24
-_080B5A1A:
- movs r0, 0
- b _080B5A3C
- .pool
-_080B5A24:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- bl __modsi3
- adds r0, r5, r0
- ldrb r0, [r0]
- mov r1, r8
- strb r0, [r1]
- movs r0, 0x1
-_080B5A3C:
- mov sp, r9
- 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 TryGetRandomWildMonIndexByType
-
- thumb_func_start TryGetAbilityInfluencedWildMonIndex
-@ _BOOL1 TryGetAbilityInfluencedWildMonIndex(WildMonEntry *mons, u8 type, u8 abilityId, u8 *monIndex)
-TryGetAbilityInfluencedWildMonIndex: @ 80B5A50
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- mov r8, r3
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r5, r2, 24
- ldr r4, =gPlayerParty
- adds r0, r4, 0
- movs r1, 0x6
- bl GetMonData
- cmp r0, 0
- bne _080B5AA4
- adds r0, r4, 0
- bl GetMonAbility
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r5
- bne _080B5AA4
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080B5AA4
- adds r0, r7, 0
- adds r1, r6, 0
- movs r2, 0xC
- mov r3, r8
- bl TryGetRandomWildMonIndexByType
- lsls r0, 24
- lsrs r0, 24
- b _080B5AA6
- .pool
-_080B5AA4:
- movs r0, 0
-_080B5AA6:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end TryGetAbilityInfluencedWildMonIndex
-
- thumb_func_start affects_encounter_rate_based_on_flags
-@ void affects_encounter_rate_based_on_flags(u32 *val)
-affects_encounter_rate_based_on_flags: @ 80B5AB0
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =0x000008ad
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B5AD0
- ldr r0, [r4]
- lsrs r1, r0, 1
- adds r0, r1
- b _080B5AE2
- .pool
-_080B5AD0:
- ldr r0, =0x000008ae
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B5AE4
- ldr r0, [r4]
- lsrs r0, 1
-_080B5AE2:
- str r0, [r4]
-_080B5AE4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end affects_encounter_rate_based_on_flags
-
- thumb_func_start ApplyCleanseTagWildEncounterRateReduction
-ApplyCleanseTagWildEncounterRateReduction: @ 80B5AF0
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gPlayerParty
- movs r1, 0xC
- bl GetMonData
- cmp r0, 0xBE
- bne _080B5B0C
- ldr r0, [r4]
- lsls r0, 1
- movs r1, 0x3
- bl __udivsi3
- str r0, [r4]
-_080B5B0C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ApplyCleanseTagWildEncounterRateReduction
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/constants/battle_constants.inc b/constants/battle_constants.inc
new file mode 100644
index 000000000..34f16a8c9
--- /dev/null
+++ b/constants/battle_constants.inc
@@ -0,0 +1,170 @@
+@ battle types
+ .set BATTLE_TYPE_DOUBLE , 0x0001
+ .set BATTLE_TYPE_LINK, 0x0002
+ .set BATTLE_TYPE_WILD, 0x0004
+ .set BATTLE_TYPE_TRAINER, 0x0008
+ .set BATTLE_TYPE_FIRST_BATTLE, 0x0010
+ .set BATTLE_TYPE_20, 0x0020
+ .set BATTLE_TYPE_MULTI, 0x0040
+ .set BATTLE_TYPE_SAFARI, 0x0080
+ .set BATTLE_TYPE_BATTLE_TOWER, 0x0100
+ .set BATTLE_TYPE_WALLY_TUTORIAL, 0x0200
+ .set BATTLE_TYPE_ROAMER, 0x0400
+ .set BATTLE_TYPE_EREADER_TRAINER, 0x0800
+ .set BATTLE_TYPE_KYOGRE_GROUDON, 0x1000
+ .set BATTLE_TYPE_LEGENDARY, 0x2000
+ .set BATTLE_TYPE_REGI, 0x4000
+ .set BATTLE_TYPE_TWO_OPPONENTS, 0x8000
+ .set BATTLE_TYPE_DOME, 0x10000
+ .set BATTLE_TYPE_PALACE, 0x20000
+ .set BATTLE_TYPE_ARENA, 0x40000
+ .set BATTLE_TYPE_FACTORY, 0x80000
+ .set BATTLE_TYPE_x100000, 0x100000
+ .set BATTLE_TYPE_PYRAMID, 0x200000
+ .set BATTLE_TYPE_INGAME_PARTNER, 0x400000
+ .set BATTLE_TYPE_x800000, 0x800000
+ .set BATTLE_TYPE_RECORDED, 0x1000000
+ .set BATTLE_TYPE_x2000000, 0x2000000
+ .set BATTLE_TYPE_x4000000, 0x4000000
+ .set BATTLE_TYPE_SECRET_BASE, 0x8000000
+ .set BATTLE_TYPE_GROUDON, 0x10000000
+ .set BATTLE_TYPE_KYORGE, 0x20000000
+ .set BATTLE_TYPE_RAYQUAZA, 0x40000000
+ .set BATTLE_TYPE_x80000000, 0x80000000
+
+@ battle outcomes
+ .set WON, 0x1
+ .set LOST, 0x2
+ .set DREW, 0x3
+ .set RAN, 0x4
+ .set PLAYER_TELEPORTED, 0x5
+ .set MON_FLED, 0x6
+ .set CAUGHT, 0x7
+ .set OUT_OF_BALLS, 0x8
+ .set FORFEITED, 0x9
+ .set OPPONENT_TELEPORTED, 0xA
+
+@ identities
+ .set IDENTITY_PLAYER_MON1, 0
+ .set IDENTITY_OPPONENT_MON1, 1
+ .set IDENTITY_PLAYER_MON2, 2
+ .set IDENTITY_OPPONENT_MON2, 3
+
+@ status 1
+ .set STATUS_SLEEP, 0x7
+ .set STATUS_POISON, 0x8
+ .set STATUS_BURN, 0x10
+ .set STATUS_FREEZE, 0x20
+ .set STATUS_PARALYSIS, 0x40
+ .set STATUS_TOXIC_POISON, 0x80
+ .set STATUS_TOXIC_COUNTER, 0xF00
+
+ .set STATUS_ANY, STATUS_SLEEP | STATUS_POISON | STATUS_BURN | STATUS_FREEZE | STATUS_PARALYSIS | STATUS_TOXIC_POISON
+
+@ status 2
+ .set STATUS2_CONFUSION, 0x00000007
+ .set STATUS2_FLINCHED, 0x00000008
+ .set STATUS2_UPROAR, 0x00000070
+ .set STATUS2_BIDE, 0x00000300
+ .set STATUS2_LOCK_CONFUSE, 0x00000C00
+ .set STATUS2_MULTIPLETURNS, 0x00001000
+ .set STATUS2_WRAPPED, 0x0000E000
+ .set STATUS2_INFATUATION, 0x000F0000
+ .set STATUS2_FOCUS_ENERGY, 0x00100000
+ .set STATUS2_TRANSFORMED, 0x00200000
+ .set STATUS2_RECHARGE, 0x00400000
+ .set STATUS2_RAGE, 0x00800000
+ .set STATUS2_SUBSTITUTE, 0x01000000
+ .set STATUS2_DESTINY_BOND, 0x02000000
+ .set STATUS2_ESCAPE_PREVENTION, 0x04000000
+ .set STATUS2_NIGHTMARE, 0x08000000
+ .set STATUS2_CURSED, 0x10000000
+ .set STATUS2_FORESIGHT, 0x20000000
+ .set STATUS2_DEFENSE_CURL, 0x40000000
+ .set STATUS2_TORMENT, 0x80000000
+
+@ status 3
+ .set STATUS3_LEECHSEED_BANK, 0x3
+ .set STATUS3_LEECHSEED, 0x4
+ .set STATUS3_ALWAYS_HITS, 0x18
+ .set STATUS3_PERISH_SONG, 0x20
+ .set STATUS3_ON_AIR, 0x40
+ .set STATUS3_UNDERGROUND, 0x80
+ .set STATUS3_MINIMIZED, 0x100
+ .set STATUS3_ROOTED, 0x400
+ .set STATUS3_CHARGED_UP, 0x200
+ .set STATUS3_YAWN, 0x1800
+ .set STATUS3_IMPRISONED_OTHERS, 0x2000
+ .set STATUS3_GRUDGE, 0x4000
+ .set STATUS3_CANT_SCORE_A_CRIT, 0x8000
+ .set STATUS3_MUDSPORT, 0x10000
+ .set STATUS3_WATERSPORT, 0x20000
+ .set STATUS3_UNDERWATER, 0x40000
+ .set STATUS3_INTIMIDATE_POKES, 0x80000
+ .set STATUS3_TRACE, 0x100000
+
+@ side status
+ .set SIDE_STATUS_REFLECT, 0x1
+ .set SIDE_STATUS_LIGHTSCREEN, 0x2
+ .set SIDE_STATUS_X4, 0x4
+ .set SIDE_STATUS_SPIKES, 0x10
+ .set SIDE_STATUS_SAFEGUARD, 0x20
+ .set SIDE_STATUS_FUTUREATTACK, 0x40
+ .set SIDE_STATUS_MIST, 0x100
+ .set SIDE_STATUS_SPIKES_DAMAGED, 0x200
+
+@ stats
+ .set HP, 0x0
+ .set ATK, 0x1
+ .set DEF, 0x2
+ .set SPEED, 0x3
+ .set SPATK, 0x4
+ .set SPDEF, 0x5
+ .set ACC, 0x6
+ .set EVASION, 0x7
+
+@ weather flags
+ .set WEATHER_RAIN_TEMPORARY, 0x01
+ .set WEATHER_RAIN_DOWNPOUR, 0x02
+ .set WEATHER_RAIN_PERMANENT, 0x04
+ .set WEATHER_SANDSTORM_TEMPORARY, 0x08
+ .set WEATHER_SANDSTORM_PERMANENT, 0x10
+ .set WEATHER_SUN_TEMPORARY, 0x20
+ .set WEATHER_SUN_PERMANENT, 0x40
+ .set WEATHER_HAIL, 0x80
+
+@ hitmarker
+ .set HITMARKER_x10, 0x00000010
+ .set HITMARKER_x20, 0x00000020
+ .set HITMARKER_DESTINYBOND, 0x00000040
+ .set HITMARKER_NO_ANIMATIONS, 0x00000080
+ .set HITMARKER_IGNORE_SUBSTITUTE, 0x00000100
+ .set HITMARKER_NO_ATTACKSTRING, 0x00000200
+ .set HITMARKER_ATTACKSTRING_PRINTED, 0x00000400
+ .set HITMARKER_NO_PPDEDUCT, 0x00000800
+ .set HITMARKER_PURSUIT_TRAP, 0x00001000
+ .set HITMARKER_IGNORE_SAFEGUARD, 0x00002000
+ .set HITMARKER_SYNCHRONISE_EFFECT, 0x00004000
+ .set HITMARKER_RUN, 0x00008000
+ .set HITMARKER_IGNORE_ON_AIR, 0x00010000
+ .set HITMARKER_IGNORE_UNDERGROUND, 0x00020000
+ .set HITMARKER_IGNORE_UNDERWATER, 0x00040000
+ .set HITMARKER_UNABLE_TO_USE_MOVE, 0x00080000
+ .set HITMARKER_x100000, 0x00100000
+ .set HITMARKER_x200000, 0x00200000
+ .set HITMARKER_x400000, 0x00400000
+ .set HITMARKER_x800000, 0x00800000
+ .set HITMARKER_GRUDGE, 0x01000000
+ .set HITMARKER_OBEYS, 0x02000000
+ .set HITMARKER_x4000000, 0x04000000
+ .set HITMARKER_x8000000, 0x08000000
+
+@ move flags
+ .set MOVESTATUS_MISSED, 0x1
+ .set MOVESTATUS_SUPEREFFECTIVE, 0x2
+ .set MOVESTATUS_NOTVERYEFFECTIVE, 0x4
+ .set MOVESTATUS_NOTAFFECTED, 0x8
+ .set MOVESTATUS_ONEHITKO, 0x10
+ .set MOVESTATUS_FAILED, 0x20
+ .set MOVESTATUS_ENDURED, 0x40
+ .set MOVESTATUS_HUNGON, 0x80
diff --git a/constants/battle_script_constants.inc b/constants/battle_script_constants.inc
new file mode 100644
index 000000000..fb0c39ab9
--- /dev/null
+++ b/constants/battle_script_constants.inc
@@ -0,0 +1,169 @@
+@ animation ids
+ .set ANIM_CASTFORM_CHANGE, 0x0
+ .set ANIM_STATS_CHANGE, 0x1
+ .set ANIM_SUBSTITUTE_FADE, 0x2
+ .set ANIM_SUBSTITUTE_APPEAR, 0x3
+ .set ANIM_x4, 0x4
+ .set ANIM_ITEM_KNOCKOFF, 0x5
+ .set ANIM_TURN_TRAP, 0x6
+ .set ANIM_ITEM_EFFECT, 0x7
+ .set ANIM_SMOKEBALL_ESCAPE, 0x8
+ .set ANIM_HANGED_ON, 0x9
+ .set ANIM_RAIN_CONTINUES, 0xA
+ .set ANIM_SUN_CONTINUES, 0xB
+ .set ANIM_SANDSTORM_CONTINUES, 0xC
+ .set ANIM_HAIL_CONTINUES, 0xD
+ .set ANIM_LEECH_SEED_DRAIN, 0xE
+ .set ANIM_MON_HIT, 0xF
+ .set ANIM_ITEM_STEAL, 0x10
+ .set ANIM_SNATCH_MOVE, 0x11
+ .set ANIM_FUTURE_SIGHT_HIT, 0x12
+ .set ANIM_x13, 0x13
+ .set ANIM_x14, 0x14
+ .set ANIM_INGRAIN_HEAL, 0x15
+ .set ANIM_WISH_HEAL, 0x16
+
+@ atk 80
+ .set ATK80_DMG_CHANGE_SIGN, 0x0
+ .set ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP, 0x1
+ .set ATK80_DMG_DOUBLED, 0x2
+
+@ compare operands
+ .set EQUAL, 0x0
+ .set NOT_EQUAL, 0x1
+ .set GREATER_THAN, 0x2
+ .set LESS_THAN, 0x3
+ .set COMMON_BITS, 0x4
+ .set NO_COMMON_BITS, 0x5
+
+@ move effects
+ .set EFFECT_SLEEP, 0x1
+ .set EFFECT_POISON, 0x2
+ .set EFFECT_BURN, 0x3
+ .set EFFECT_FREEZE, 0x4
+ .set EFFECT_PARALYSIS, 0x5
+ .set EFFECT_TOXIC, 0x6
+ .set EFFECT_CONFUSION, 0x7
+ .set EFFECT_FLINCH, 0x8
+ .set EFFECT_TRI_ATTACK, 0x9
+ .set EFFECT_UPROAR, 0xA
+ .set EFFECT_PAYDAY, 0xB
+ .set EFFECT_CHARGING, 0xC
+ .set EFFECT_WRAP, 0xD
+ .set EFFECT_RECOIL_25, 0xE
+ .set EFFECT_ATK_PLUS_1, 0xF
+ .set EFFECT_DEF_PLUS_1, 0x10
+ .set EFFECT_SPD_PLUS_1, 0x11
+ .set EFFECT_SP_ATK_PLUS_1, 0x12
+ .set EFFECT_SP_DEF_PLUS_1, 0x13
+ .set EFFECT_ACC_PLUS_1, 0x14
+ .set EFFECT_EVS_PLUS_1, 0x15
+ .set EFFECT_ATK_MINUS_1, 0x16
+ .set EFFECT_DEF_MINUS_1, 0x17
+ .set EFFECT_SPD_MINUS_1, 0x18
+ .set EFFECT_SP_ATK_MINUS_1, 0x19
+ .set EFFECT_SP_DEF_MINUS_1, 0x1A
+ .set EFFECT_ACC_MINUS_1, 0x1B
+ .set EFFECT_EVS_MINUS_1, 0x1C
+ .set EFFECT_RECHARGE, 0x1D
+ .set EFFECT_RAGE, 0x1E
+ .set EFFECT_STEAL_ITEM, 0x1F
+ .set EFFECT_PREVENT_ESCAPE, 0x20
+ .set EFFECT_NIGHTMARE, 0x21
+ .set EFFECT_ALL_STATS_UP, 0x22
+ .set EFFECT_RAPIDSPIN, 0x23
+ .set EFFECT_REMOVE_PARALYSIS, 0x24
+ .set EFFECT_ATK_DEF_DOWN, 0x25
+ .set EFFECT_RECOIL_33_PARALYSIS, 0x26
+ .set EFFECT_ATK_PLUS_2, 0x27
+ .set EFFECT_DEF_PLUS_2, 0x28
+ .set EFFECT_SPD_PLUS_2, 0x29
+ .set EFFECT_SP_ATK_PLUS_2, 0x2A
+ .set EFFECT_SP_DEF_PLUS_2, 0x2B
+ .set EFFECT_ACC_PLUS_2, 0x2C
+ .set EFFECT_EVS_PLUS_2, 0x2D
+ .set EFFECT_ATK_MINUS_2, 0x2E
+ .set EFFECT_DEF_MINUS_2, 0x2F
+ .set EFFECT_SPD_MINUS_2, 0x30
+ .set EFFECT_SP_ATK_MINUS_2, 0x31
+ .set EFFECT_SP_DEF_MINUS_2, 0x32
+ .set EFFECT_ACC_MINUS_2, 0x33
+ .set EFFECT_EVS_MINUS_2, 0x34
+ .set EFFECT_THRASH, 0x35
+ .set EFFECT_KNOCK_OFF, 0x36
+ .set EFFECT_NOTHING_37, 0x37
+ .set EFFECT_NOTHING_38, 0x38
+ .set EFFECT_NOTHING_39, 0x39
+ .set EFFECT_NOTHING_3A, 0x3A
+ .set EFFECT_SP_ATK_TWO_DOWN, 0x3B
+ .set EFFECT_NOTHING_3C, 0x3C
+ .set EFFECT_NOTHING_3D, 0x3D
+ .set EFFECT_NOTHING_3E, 0x3E
+ .set EFFECT_NOTHING_3F, 0x3F
+
+ .set AFFECTS_USER, 0x40
+ .set CERTAIN, 0x80
+
+@ accuracy calc
+ .set NO_ACC_CALC, 0xFFFE
+ .set NO_ACC_CALC_CHECK_LOCK_ON, 0xFFFF
+ .set ACC_CURR_MOVE, 0x0
+
+@ bank values
+ .set TARGET, 0x0
+ .set ATTACKER, 0x1
+ .set EFFECT_BANK, 0x2
+ .set GBANK_1, 0x3
+ .set ATTACKER_WITH_PARTNER, 0x4 @ only for cmd98
+ .set BANK0, 0x7
+ .set SCRIPTING_BANK, 0xA
+ .set OPPONENT1, 0xC
+
+@ various
+ .set VARIOUS_CANCEL_MULTI_TURN_MOVES, 0
+ .set VARIOUS_SET_MAGIC_COAT_TARGET, 1
+ .set VARIOUS_IS_RUNNING_IMPOSSIBLE, 2
+ .set VARIOUS_GET_MOVE_TARGET, 3
+ .set VARIOUS_RESET_INTIMIDATE_TRACE_BITS, 5
+ .set VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP, 6
+ .set VARIOUS_EMIT_YESNOBOX, 13
+ .set VARIOUS_WAIT_CRY, 18
+ .set VARIOUS_RETURN_OPPONENT_MON1, 19
+ .set VARIOUS_RETURN_OPPONENT_MON2, 20
+ .set VARIOUS_SET_TELEPORT_OUTCOME, 25
+ .set VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC, 26
+
+@ jumpifcant switch flag argument
+ .set ATK4F_DONT_CHECK_STATUSES, 0x80
+
+@ battle scripting struct
+ .equiv sPAINSPLIT_HP, gBattleScripting
+ .equiv sBIDE_DMG, gBattleScripting + 4
+ .equiv sMULTIHIT_STRING, gBattleScripting + 8
+ .equiv sDMG_MULTIPLIER, gBattleScripting + 0xE
+ .equiv sTWOTURN_STRINGID, gBattleScripting + 0xF
+ .equiv sANIM_ARG1, gBattleScripting + 0x10
+ .equiv sANIM_ARG2, gBattleScripting + 0x11
+ .equiv sTRIPLE_KICK_POWER, gBattleScripting + 0x12
+ .equiv sMOVEEND_STATE, gBattleScripting + 0x14
+ .equiv sFIELD_15, gBattleScripting + 0x15
+ .equiv sFIELD_16, gBattleScripting + 0x16
+ .equiv sBANK, gBattleScripting + 0x17
+ .equiv sANIM_TURN, gBattleScripting + 0x18
+ .equiv sANIM_TARGETS_HIT, gBattleScripting + 0x19
+ .equiv sSTATCHANGER, gBattleScripting + 0x1A
+ .equiv sFIELD_1B, gBattleScripting + 0x1B
+ .equiv sGIVEEXP_STATE, gBattleScripting + 0x1C
+ .equiv sBATTLE_STYLE, gBattleScripting + 0x1D
+ .equiv sLVLBOX_STATE, gBattleScripting + 0x1E
+ .equiv sLEARNMOVE_STATE, gBattleScripting + 0x1F
+ .equiv sFIELD_20, gBattleScripting + 0x20
+ .equiv sRESHOW_MAIN_STATE, gBattleScripting + 0x21
+ .equiv sRESHOW_HELPER_STATE, gBattleScripting + 0x22
+ .equiv sFIELD_23, gBattleScripting + 0x23
+ .equiv sFIELD_24, gBattleScripting + 0x24
+ .equiv sMULTIPLAYER_ID, gBattleScripting + 0x25
+
+@ battle communication struct
+ .equiv cEFFECT_CHOOSER, gBattleCommunication + 3
+ .equiv cMULTISTRING_CHOOSER, gBattleCommunication + 5
diff --git a/constants/battle_text.inc b/constants/battle_text.inc
new file mode 100644
index 000000000..1d3a5f346
--- /dev/null
+++ b/constants/battle_text.inc
@@ -0,0 +1,375 @@
+ .set STRINGID_INTROMSG, 0
+ .set STRINGID_INTROSENDOUT, 1
+ .set STRINGID_RETURNMON, 2
+ .set STRINGID_SWITCHINMON, 3
+ .set STRINGID_USEDMOVE, 4
+ .set STRINGID_BATTLEEND, 5
+ .set STRINGID_TRAINER1LOSETEXT, 12
+ .set STRINGID_PKMNGAINEDEXP, 13
+ .set STRINGID_PKMNGREWTOLV, 14
+ .set STRINGID_PKMNLEARNEDMOVE, 15
+ .set STRINGID_TRYTOLEARNMOVE1, 16
+ .set STRINGID_TRYTOLEARNMOVE2, 17
+ .set STRINGID_TRYTOLEARNMOVE3, 18
+ .set STRINGID_PKMNFORGOTMOVE, 19
+ .set STRINGID_STOPLEARNINGMOVE, 20
+ .set STRINGID_DIDNOTLEARNMOVE, 21
+ .set STRINGID_PKMNLEARNEDMOVE2, 22
+ .set STRINGID_ATTACKMISSED, 23
+ .set STRINGID_PKMNPROTECTEDITSELF, 24
+ .set STRINGID_STATSWONTINCREASE2, 25
+ .set STRINGID_AVOIDEDDAMAGE, 26
+ .set STRINGID_ITDOESNTAFFECT, 27
+ .set STRINGID_ATTACKERFAINTED, 28
+ .set STRINGID_TARGETFAINTED, 29
+ .set STRINGID_PLAYERGOTMONEY, 30
+ .set STRINGID_PLAYERWHITEOUT, 31
+ .set STRINGID_PLAYERWHITEOUT2, 32
+ .set STRINGID_PREVENTSESCAPE, 33
+ .set STRINGID_HITXTIMES, 34
+ .set STRINGID_PKMNFELLASLEEP, 35
+ .set STRINGID_PKMNMADESLEEP, 36
+ .set STRINGID_PKMNALREADYASLEEP, 37
+ .set STRINGID_PKMNALREADYASLEEP2, 38
+ .set STRINGID_PKMNWASNTAFFECTED, 39
+ .set STRINGID_PKMNWASPOISONED, 40
+ .set STRINGID_PKMNPOISONEDBY, 41
+ .set STRINGID_PKMNHURTBYPOISON, 42
+ .set STRINGID_PKMNALREADYPOISONED, 43
+ .set STRINGID_PKMNBADLYPOISONED, 44
+ .set STRINGID_PKMNENERGYDRAINED, 45
+ .set STRINGID_PKMNWASBURNED, 46
+ .set STRINGID_PKMNBURNEDBY, 47
+ .set STRINGID_PKMNHURTBYBURN, 48
+ .set STRINGID_PKMNWASFROZEN, 49
+ .set STRINGID_PKMNFROZENBY, 50
+ .set STRINGID_PKMNISFROZEN, 51
+ .set STRINGID_PKMNWASDEFROSTED, 52
+ .set STRINGID_PKMNWASDEFROSTED2, 53
+ .set STRINGID_PKMNWASDEFROSTEDBY, 54
+ .set STRINGID_PKMNWASPARALYZED, 55
+ .set STRINGID_PKMNWASPARALYZEDBY, 56
+ .set STRINGID_PKMNISPARALYZED, 57
+ .set STRINGID_PKMNISALREADYPARALYZED, 58
+ .set STRINGID_PKMNHEALEDPARALYSIS, 59
+ .set STRINGID_PKMNDREAMEATEN, 60
+ .set STRINGID_STATSWONTINCREASE, 61
+ .set STRINGID_STATSWONTDECREASE, 62
+ .set STRINGID_TEAMSTOPPEDWORKING, 63
+ .set STRINGID_FOESTOPPEDWORKING, 64
+ .set STRINGID_PKMNISCONFUSED, 65
+ .set STRINGID_PKMNHEALEDCONFUSION, 66
+ .set STRINGID_PKMNWASCONFUSED, 67
+ .set STRINGID_PKMNALREADYCONFUSED, 68
+ .set STRINGID_PKMNFELLINLOVE, 69
+ .set STRINGID_PKMNINLOVE, 70
+ .set STRINGID_PKMNIMMOBILIZEDBYLOVE, 71
+ .set STRINGID_PKMNBLOWNAWAY, 72
+ .set STRINGID_PKMNCHANGEDTYPE, 73
+ .set STRINGID_PKMNFLINCHED, 74
+ .set STRINGID_PKMNREGAINEDHEALTH, 75
+ .set STRINGID_PKMNHPFULL, 76
+ .set STRINGID_PKMNRAISEDSPDEF, 77
+ .set STRINGID_PKMNRAISEDDEF, 78
+ .set STRINGID_PKMNCOVEREDBYVEIL, 79
+ .set STRINGID_PKMNUSEDSAFEGUARD, 80
+ .set STRINGID_PKMNSAFEGUARDEXPIRED, 81
+ .set STRINGID_PKMNWENTTOSLEEP, 82
+ .set STRINGID_PKMNSLEPTHEALTHY, 83
+ .set STRINGID_PKMNWHIPPEDWHIRLWIND, 84
+ .set STRINGID_PKMNTOOKSUNLIGHT, 85
+ .set STRINGID_PKMNLOWEREDHEAD, 86
+ .set STRINGID_PKMNISGLOWING, 87
+ .set STRINGID_PKMNFLEWHIGH, 88
+ .set STRINGID_PKMNDUGHOLE, 89
+ .set STRINGID_PKMNSQUEEZEDBYBIND, 90
+ .set STRINGID_PKMNTRAPPEDINVORTEX, 91
+ .set STRINGID_PKMNWRAPPEDBY, 92
+ .set STRINGID_PKMNCLAMPED, 93
+ .set STRINGID_PKMNHURTBY, 94
+ .set STRINGID_PKMNFREEDFROM, 95
+ .set STRINGID_PKMNCRASHED, 96
+ .set STRINGID_PKMNSHROUDEDINMIST, 97
+ .set STRINGID_PKMNPROTECTEDBYMIST, 98
+ .set STRINGID_PKMNGETTINGPUMPED, 99
+ .set STRINGID_PKMNHITWITHRECOIL, 100
+ .set STRINGID_PKMNPROTECTEDITSELF2, 101
+ .set STRINGID_PKMNBUFFETEDBYSANDSTORM, 102
+ .set STRINGID_PKMNPELTEDBYHAIL, 103
+ .set STRINGID_PKMNSEEDED, 104
+ .set STRINGID_PKMNEVADEDATTACK, 105
+ .set STRINGID_PKMNSAPPEDBYLEECHSEED, 106
+ .set STRINGID_PKMNFASTASLEEP, 107
+ .set STRINGID_PKMNWOKEUP, 108
+ .set STRINGID_PKMNUPROARKEPTAWAKE, 109
+ .set STRINGID_PKMNWOKEUPINUPROAR, 110
+ .set STRINGID_PKMNCAUSEDUPROAR, 111
+ .set STRINGID_PKMNMAKINGUPROAR, 112
+ .set STRINGID_PKMNCALMEDDOWN, 113
+ .set STRINGID_PKMNCANTSLEEPINUPROAR, 114
+ .set STRINGID_PKMNSTOCKPILED, 115
+ .set STRINGID_PKMNCANTSTOCKPILE, 116
+ .set STRINGID_PKMNCANTSLEEPINUPROAR2, 117
+ .set STRINGID_UPROARKEPTPKMNAWAKE, 118
+ .set STRINGID_PKMNSTAYEDAWAKEUSING, 119
+ .set STRINGID_PKMNSTORINGENERGY, 120
+ .set STRINGID_PKMNUNLEASHEDENERGY, 121
+ .set STRINGID_PKMNFATIGUECONFUSION, 122
+ .set STRINGID_PKMNPICKEDUPITEM, 123
+ .set STRINGID_PKMNUNAFFECTED, 124
+ .set STRINGID_PKMNTRANSFORMEDINTO, 125
+ .set STRINGID_PKMNMADESUBSTITUTE, 126
+ .set STRINGID_PKMNHASSUBSTITUTE, 127
+ .set STRINGID_SUBSTITUTEDAMAGED, 128
+ .set STRINGID_PKMNSUBSTITUTEFADED, 129
+ .set STRINGID_PKMNMUSTRECHARGE, 130
+ .set STRINGID_PKMNRAGEBUILDING, 131
+ .set STRINGID_PKMNMOVEWASDISABLED, 132
+ .set STRINGID_PKMNMOVEISDISABLED, 133
+ .set STRINGID_PKMNMOVEDISABLEDNOMORE, 134
+ .set STRINGID_PKMNGOTENCORE, 135
+ .set STRINGID_PKMNENCOREENDED, 136
+ .set STRINGID_PKMNTOOKAIM, 137
+ .set STRINGID_PKMNSKETCHEDMOVE, 138
+ .set STRINGID_PKMNTRYINGTOTAKEFOE, 139
+ .set STRINGID_PKMNTOOKFOE, 140
+ .set STRINGID_PKMNREDUCEDPP, 141
+ .set STRINGID_PKMNSTOLEITEM, 142
+ .set STRINGID_TARGETCANTESCAPENOW, 143
+ .set STRINGID_PKMNFELLINTONIGHTMARE, 144
+ .set STRINGID_PKMNLOCKEDINNIGHTMARE, 145
+ .set STRINGID_PKMNLAIDCURSE, 146
+ .set STRINGID_PKMNAFFLICTEDBYCURSE, 147
+ .set STRINGID_SPIKESSCATTERED, 148
+ .set STRINGID_PKMNHURTBYSPIKES, 149
+ .set STRINGID_PKMNIDENTIFIED, 150
+ .set STRINGID_PKMNPERISHCOUNTFELL, 151
+ .set STRINGID_PKMNBRACEDITSELF, 152
+ .set STRINGID_PKMNENDUREDHIT, 153
+ .set STRINGID_MAGNITUDESTRENGTH, 154
+ .set STRINGID_PKMNCUTHPMAXEDATTACK, 155
+ .set STRINGID_PKMNCOPIEDSTATCHANGES, 156
+ .set STRINGID_PKMNGOTFREE, 157
+ .set STRINGID_PKMNSHEDLEECHSEED, 158
+ .set STRINGID_PKMNBLEWAWAYSPIKES, 159
+ .set STRINGID_PKMNFLEDFROMBATTLE, 160
+ .set STRINGID_PKMNFORESAWATTACK, 161
+ .set STRINGID_PKMNTOOKATTACK, 162
+ .set STRINGID_PKMNATTACK, 163
+ .set STRINGID_PKMNCENTERATTENTION, 164
+ .set STRINGID_PKMNCHARGINGPOWER, 165
+ .set STRINGID_NATUREPOWERTURNEDINTO, 166
+ .set STRINGID_PKMNSTATUSNORMAL, 167
+ .set STRINGID_PKMNHASNOMOVESLEFT, 168
+ .set STRINGID_PKMNSUBJECTEDTOTORMENT, 169
+ .set STRINGID_PKMNCANTUSEMOVETORMENT, 170
+ .set STRINGID_PKMNTIGHTENINGFOCUS, 171
+ .set STRINGID_PKMNFELLFORTAUNT, 172
+ .set STRINGID_PKMNCANTUSEMOVETAUNT, 173
+ .set STRINGID_PKMNREADYTOHELP, 174
+ .set STRINGID_PKMNSWITCHEDITEMS, 175
+ .set STRINGID_PKMNCOPIEDFOE, 176
+ .set STRINGID_PKMNMADEWISH, 177
+ .set STRINGID_PKMNWISHCAMETRUE, 178
+ .set STRINGID_PKMNPLANTEDROOTS, 179
+ .set STRINGID_PKMNABSORBEDNUTRIENTS, 180
+ .set STRINGID_PKMNANCHOREDITSELF, 181
+ .set STRINGID_PKMNWASMADEDROWSY, 182
+ .set STRINGID_PKMNKNOCKEDOFF, 183
+ .set STRINGID_PKMNSWAPPEDABILITIES, 184
+ .set STRINGID_PKMNSEALEDOPPONENTMOVE, 185
+ .set STRINGID_PKMNCANTUSEMOVESEALED, 186
+ .set STRINGID_PKMNWANTSGRUDGE, 187
+ .set STRINGID_PKMNLOSTPPGRUDGE, 188
+ .set STRINGID_PKMNSHROUDEDITSELF, 189
+ .set STRINGID_PKMNMOVEBOUNCED, 190
+ .set STRINGID_PKMNWAITSFORTARGET, 191
+ .set STRINGID_PKMNSNATCHEDMOVE, 192
+ .set STRINGID_PKMNMADEITRAIN, 193
+ .set STRINGID_PKMNRAISEDSPEED, 194
+ .set STRINGID_PKMNPROTECTEDBY, 195
+ .set STRINGID_PKMNPREVENTSUSAGE, 196
+ .set STRINGID_PKMNRESTOREDHPUSING, 197
+ .set STRINGID_PKMNCHANGEDTYPEWITH, 198
+ .set STRINGID_PKMNPREVENTSPARALYSISWITH, 199
+ .set STRINGID_PKMNPREVENTSROMANCEWITH, 200
+ .set STRINGID_PKMNPREVENTSPOISONINGWITH, 201
+ .set STRINGID_PKMNPREVENTSCONFUSIONWITH, 202
+ .set STRINGID_PKMNRAISEDFIREPOWERWITH, 203
+ .set STRINGID_PKMNANCHORSITSELFWITH, 204
+ .set STRINGID_PKMNCUTSATTACKWITH, 205
+ .set STRINGID_PKMNPREVENTSSTATLOSSWITH, 206
+ .set STRINGID_PKMNHURTSWITH, 207
+ .set STRINGID_PKMNTRACED, 208
+ .set STRINGID_STATSHARPLY, 209
+ .set STRINGID_STATROSE, 210
+ .set STRINGID_STATHARSHLY, 211
+ .set STRINGID_STATFELL, 212
+ .set STRINGID_PKMNSSTATCHANGED, 213
+ .set STRINGID_PKMNSSTATCHANGED2, 214
+ .set STRINGID_PKMNSSTATCHANGED3, 215
+ .set STRINGID_PKMNSSTATCHANGED4, 216
+ .set STRINGID_CRITICALHIT, 217
+ .set STRINGID_ONEHITKO, 218
+ .set STRINGID_123POOF, 219
+ .set STRINGID_ANDELLIPSIS, 220
+ .set STRINGID_NOTVERYEFFECTIVE, 221
+ .set STRINGID_SUPEREFFECTIVE, 222
+ .set STRINGID_GOTAWAYSAFELY, 223
+ .set STRINGID_WILDPKMNFLED, 224
+ .set STRINGID_NORUNNINGFROMTRAINERS, 225
+ .set STRINGID_CANTESCAPE, 226
+ .set STRINGID_DONTLEAVEBIRCH, 227
+ .set STRINGID_BUTNOTHINGHAPPENED, 228
+ .set STRINGID_BUTITFAILED, 229
+ .set STRINGID_ITHURTCONFUSION, 230
+ .set STRINGID_MIRRORMOVEFAILED, 231
+ .set STRINGID_STARTEDTORAIN, 232
+ .set STRINGID_DOWNPOURSTARTED, 233
+ .set STRINGID_RAINCONTINUES, 234
+ .set STRINGID_DOWNPOURCONTINUES, 235
+ .set STRINGID_RAINSTOPPED, 236
+ .set STRINGID_SANDSTORMBREWED, 237
+ .set STRINGID_SANDSTORMRAGES, 238
+ .set STRINGID_SANDSTORMSUBSIDED, 239
+ .set STRINGID_SUNLIGHTGOTBRIGHT, 240
+ .set STRINGID_SUNLIGHTSTRONG, 241
+ .set STRINGID_SUNLIGHTFADED, 242
+ .set STRINGID_STARTEDHAIL, 243
+ .set STRINGID_HAILCONTINUES, 244
+ .set STRINGID_HAILSTOPPED, 245
+ .set STRINGID_FAILEDTOSPITUP, 246
+ .set STRINGID_FAILEDTOSWALLOW, 247
+ .set STRINGID_WINDBECAMEHEATWAVE, 248
+ .set STRINGID_STATCHANGESGONE, 249
+ .set STRINGID_COINSSCATTERED, 250
+ .set STRINGID_TOOWEAKFORSUBSTITUTE, 251
+ .set STRINGID_SHAREDPAIN, 252
+ .set STRINGID_BELLCHIMED, 253
+ .set STRINGID_FAINTINTHREE, 254
+ .set STRINGID_NOPPLEFT, 255
+ .set STRINGID_BUTNOPPLEFT, 256
+ .set STRINGID_PLAYERUSEDITEM, 257
+ .set STRINGID_WALLYUSEDITEM, 258
+ .set STRINGID_TRAINERBLOCKEDBALL, 259
+ .set STRINGID_DONTBEATHIEF, 260
+ .set STRINGID_ITDODGEDBALL, 261
+ .set STRINGID_YOUMISSEDPKMN, 262
+ .set STRINGID_PKMNBROKEFREE, 263
+ .set STRINGID_ITAPPEAREDCAUGHT, 264
+ .set STRINGID_AARGHALMOSTHADIT, 265
+ .set STRINGID_SHOOTSOCLOSE, 266
+ .set STRINGID_GOTCHAPKMNCAUGHT, 267
+ .set STRINGID_GOTCHAPKMNCAUGHT2, 268
+ .set STRINGID_GIVENICKNAMECAPTURED, 269
+ .set STRINGID_PKMNSENTTOPC, 270
+ .set STRINGID_PKMNDATAADDEDTODEX, 271
+ .set STRINGID_ITISRAINING, 272
+ .set STRINGID_SANDSTORMISRAGING, 273
+ .set STRINGID_CANTESCAPE2, 274
+ .set STRINGID_PKMNIGNORESASLEEP, 275
+ .set STRINGID_PKMNIGNOREDORDERS, 276
+ .set STRINGID_PKMNBEGANTONAP, 277
+ .set STRINGID_PKMNLOAFING, 278
+ .set STRINGID_PKMNWONTOBEY, 279
+ .set STRINGID_PKMNTURNEDAWAY, 280
+ .set STRINGID_PKMNPRETENDNOTNOTICE, 281
+ .set STRINGID_ENEMYABOUTTOSWITCHPKMN, 282
+ .set STRINGID_CREPTCLOSER, 283
+ .set STRINGID_CANTGETCLOSER, 284
+ .set STRINGID_PKMNWATCHINGCAREFULLY, 285
+ .set STRINGID_PKMNCURIOUSABOUTX, 286
+ .set STRINGID_PKMNENTHRALLEDBYX, 287
+ .set STRINGID_PKMNIGNOREDX, 288
+ .set STRINGID_THREWPOKEBLOCKATPKMN, 289
+ .set STRINGID_OUTOFSAFARIBALLS, 290
+ .set STRINGID_PKMNSITEMCUREDPARALYSIS, 291
+ .set STRINGID_PKMNSITEMCUREDPOISON, 292
+ .set STRINGID_PKMNSITEMHEALEDBURN, 293
+ .set STRINGID_PKMNSITEMDEFROSTEDIT, 294
+ .set STRINGID_PKMNSITEMWOKEIT, 295
+ .set STRINGID_PKMNSITEMSNAPPEDOUT, 296
+ .set STRINGID_PKMNSITEMCUREDPROBLEM, 297
+ .set STRINGID_PKMNSITEMRESTOREDHEALTH, 298
+ .set STRINGID_PKMNSITEMRESTOREDPP, 299
+ .set STRINGID_PKMNSITEMRESTOREDSTATUS, 300
+ .set STRINGID_PKMNSITEMRESTOREDHPALITTLE, 301
+ .set STRINGID_ITEMALLOWSONLYYMOVE, 302
+ .set STRINGID_PKMNHUNGONWITHX, 303
+ .set STRINGID_EMPTYSTRING3, 304
+ .set STRINGID_PKMNSXPREVENTSBURNS, 305
+ .set STRINGID_PKMNSXBLOCKSY, 306
+ .set STRINGID_PKMNSXRESTOREDHPALITTLE2, 307
+ .set STRINGID_PKMNSXWHIPPEDUPSANDSTORM, 308
+ .set STRINGID_PKMNSXPREVENTSYLOSS, 309
+ .set STRINGID_PKMNSXINFATUATEDY, 310
+ .set STRINGID_PKMNSXMADEYINEFFECTIVE, 311
+ .set STRINGID_PKMNSXCUREDYPROBLEM, 312
+ .set STRINGID_ITSUCKEDLIQUIDOOZE, 313
+ .set STRINGID_PKMNTRANSFORMED, 314
+ .set STRINGID_ELECTRICITYWEAKENED, 315
+ .set STRINGID_FIREWEAKENED, 316
+ .set STRINGID_PKMNHIDUNDERWATER, 317
+ .set STRINGID_PKMNSPRANGUP, 318
+ .set STRINGID_HMMOVESCANTBEFORGOTTEN, 319
+ .set STRINGID_XFOUNDONEY, 320
+ .set STRINGID_PLAYERDEFEATEDTRAINER1, 321
+ .set STRINGID_SOOTHINGAROMA, 322
+ .set STRINGID_ITEMSCANTBEUSEDNOW, 323
+ .set STRINGID_FORXCOMMAYZ, 324
+ .set STRINGID_USINGXTHEYOFZN, 325
+ .set STRINGID_PKMNUSEDXTOGETPUMPED, 326
+ .set STRINGID_PKMNSXMADEYUSELESS, 327
+ .set STRINGID_PKMNTRAPPEDBYSANDTOMB, 328
+ .set STRINGID_EMPTYSTRING4, 329
+ .set STRINGID_ABOOSTED, 330
+ .set STRINGID_PKMNSXINTENSIFIEDSUN, 331
+ .set STRINGID_PKMNMAKESGROUNDMISS, 332
+ .set STRINGID_YOUTHROWABALLNOWRIGHT, 333
+ .set STRINGID_PKMNSXTOOKATTACK, 334
+ .set STRINGID_PKMNCHOSEXASDESTINY, 335
+ .set STRINGID_PKMNLOSTFOCUS, 336
+ .set STRINGID_USENEXTPKMN, 337
+ .set STRINGID_PKMNFLEDUSINGITS, 338
+ .set STRINGID_PKMNFLEDUSING, 339
+ .set STRINGID_PKMNWASDRAGGEDOUT, 340
+ .set STRINGID_PREVENTEDFROMWORKING, 341
+ .set STRINGID_PKMNSITEMNORMALIZEDSTATUS, 342
+ .set STRINGID_TRAINER1USEDITEM, 343
+ .set STRINGID_BOXISFULL, 344
+ .set STRINGID_PKMNAVOIDEDATTACK, 345
+ .set STRINGID_PKMNSXMADEITINEFFECTIVE, 346
+ .set STRINGID_PKMNSXPREVENTSFLINCHING, 347
+ .set STRINGID_PKMNALREADYHASBURN, 348
+ .set STRINGID_STATSWONTDECREASE2, 349
+ .set STRINGID_PKMNSXBLOCKSY2, 350
+ .set STRINGID_PKMNSXWOREOFF, 351
+ .set STRINGID_PKMNRAISEDDEFALITTLE, 352
+ .set STRINGID_PKMNRAISEDSPDEFALITTLE, 353
+ .set STRINGID_THEWALLSHATTERED, 354
+ .set STRINGID_PKMNSXPREVENTSYSZ, 355
+ .set STRINGID_PKMNSXCUREDITSYPROBLEM, 356
+ .set STRINGID_ATTACKERCANTESCAPE, 357
+ .set STRINGID_PKMNOBTAINEDX, 358
+ .set STRINGID_PKMNOBTAINEDX2, 359
+ .set STRINGID_PKMNOBTAINEDXYOBTAINEDZ, 360
+ .set STRINGID_BUTNOEFFECT, 361
+ .set STRINGID_PKMNSXHADNOEFFECTONY, 362
+ .set STRINGID_TWOENEMIESDEFEATED, 363
+ .set STRINGID_TRAINER2LOSETEXT, 364
+ .set STRINGID_PKMNINCAPABLEOFPOWER, 365
+ .set STRINGID_GLINTAPPEARSINEYE, 366
+ .set STRINGID_PKMNGETTINGINTOPOSITION, 367
+ .set STRINGID_PKMNBEGANGROWLINGDEEPLY, 368
+ .set STRINGID_PKMNEAGERFORMORE, 369
+ .set STRINGID_DEFEATEDOPPONENTBYREFEREE, 370
+ .set STRINGID_LOSTTOOPPONENTBYREFEREE, 371
+ .set STRINGID_TIEDOPPONENTBYREFEREE, 372
+ .set STRINGID_QUESTIONFORFEITMATCH, 373
+ .set STRINGID_FORFEITEDMATCH, 374
+ .set STRINGID_PKMNTRANSFERREDSOMEONESPC, 375
+ .set STRINGID_PKMNTRANSFERREDLANETTESPC, 376
+ .set STRINGID_PKMNBOXSOMEONESPCFULL, 377
+ .set STRINGID_PKMNBOXLANETTESPCFULL, 378
+ .set STRINGID_TRAINER1WINTEXT, 379
+ .set STRINGID_TRAINER2WINTEXT, 380
diff --git a/constants/flags.inc b/constants/flags.inc
index 2e4b60d73..66663cb65 100644
--- a/constants/flags.inc
+++ b/constants/flags.inc
@@ -80,7 +80,7 @@
.equiv FLAG_0x050, 0x50
.equiv FLAG_0x051, 0x51
.equiv FLAG_0x052, 0x52
- .equiv FLAG_0x053, 0x53
+ .equiv FLAG_LEGENDARIES_IN_SOOTOPOLIS, 0x53
.equiv FLAG_0x054, 0x54
.equiv FLAG_0x055, 0x55
.equiv FLAG_0x056, 0x56
diff --git a/constants/variables.inc b/constants/variables.inc
index e2719e10c..47748891b 100644
--- a/constants/variables.inc
+++ b/constants/variables.inc
@@ -60,7 +60,7 @@
.equiv VAR_0x403B, 0x403B
.equiv VAR_0x403C, 0x403C
.equiv VAR_0x403D, 0x403D
- .equiv VAR_0x403E, 0x403E
+ .equiv VAR_ALTERING_CAVE_WILD_SET, 0x403E
.equiv VAR_0x403F, 0x403F
.equiv VAR_DAYS, 0x4040
.equiv VAR_0x4041, 0x4041
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index b2dfec5d8..0be60d109 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -1,586 +1,4592 @@
.include "asm/macros.inc"
+ .include "asm/macros/battle_script.inc"
.include "constants/constants.inc"
+ .include "constants/battle_constants.inc"
+ .include "constants/battle_script_constants.inc"
+ .include "constants/battle_text.inc"
.section script_data, "aw", %progbits
gBattleScriptsForMoveEffects:: @ 82D86A8
- .incbin "baserom.gba", 0x2d86a8, 0x388
-
-BattleScript_PresentDamageTarget:: @ 82D8A30
- .incbin "baserom.gba", 0x2d8a30, 0x1e
-
-BattleScript_MoveEnd:: @ 82D8A4E
- .incbin "baserom.gba", 0x2d8a4e, 0x12
-
-BattleScript_PauseEffectivenessSoundResultMsgEndMove:: @ 82D8A60
- .incbin "baserom.gba", 0x2d8a60, 0x274
-
-BattleScript_StatUp:: @ 82D8CD4
- .incbin "baserom.gba", 0x2d8cd4, 0x91
-
-BattleScript_StatDown:: @ 82D8D65
- .incbin "baserom.gba", 0x2d8d65, 0x6fd
-
-BattleScript_MoveUsedMustRecharge:: @ 82D9462
- .incbin "baserom.gba", 0x2d9462, 0xa7f
-
-BattleScript_PresentHealTarget:: @ 82D9EE1
- .incbin "baserom.gba", 0x2d9ee1, 0x1a
-
-BattleScript_AlreadyAtFullHp:: @ 82D9EFB
- .incbin "baserom.gba", 0x2d9efb, 0x21
-
-BattleScript_ButItFailed:: @ 82D9F1C
- .incbin "baserom.gba", 0x2d9f1c, 0x88e
-
-BattleScript_FaintAttacker:: @ 82DA7AA
- .incbin "baserom.gba", 0x2da7aa, 0xd
-
-BattleScript_FaintTarget:: @ 82DA7B7
- .incbin "baserom.gba", 0x2da7b7, 0xd
-
-gUnknown_082DA7C4:: @ 82DA7C4
- .incbin "baserom.gba", 0x2da7c4, 0x9
-
-gUnknown_082DA7CD:: @ 82DA7CD
- .incbin "baserom.gba", 0x2da7cd, 0x160
-
-BattleScript_LocalTrainerBattleWon:: @ 82DA92D
- .incbin "baserom.gba", 0x2da92d, 0x3d
-
-BattleScript_PayDayMoneyAndPickUpItems:: @ 82DA96A
- .incbin "baserom.gba", 0x2da96a, 0x3
-
-BattleScript_LocalBattleLost:: @ 82DA96D
- .incbin "baserom.gba", 0x2da96d, 0x9e
-
-gUnknown_082DAA0B:: @ 82DAA0B
- .incbin "baserom.gba", 0x2daa0b, 0x2a
-
-BattleScript_LinkBattleWonOrLost:: @ 82DAA35
- .incbin "baserom.gba", 0x2daa35, 0x52
-
-BattleScript_FrontierTrainerBattleWon:: @ 82DAA87
- .incbin "baserom.gba", 0x2daa87, 0x54
-
-BattleScript_SmokeBallEscape:: @ 82DAADB
- .incbin "baserom.gba", 0x2daadb, 0xe
-
-BattleScript_RanAwayUsingMonAbility:: @ 82DAAE9
- .incbin "baserom.gba", 0x2daae9, 0x7
-
-BattleScript_GotAwaySafely:: @ 82DAAF0
- .incbin "baserom.gba", 0x2daaf0, 0x7
-
-BattleScript_WildMonFled:: @ 82DAAF7
- .incbin "baserom.gba", 0x2daaf7, 0x7
-
-gUnknown_082DAAFE:: @ 82DAAFE
- .incbin "baserom.gba", 0x2daafe, 0x4
-
-BattleScript_PrintFailedToRunString:: @ 82DAB02
- .incbin "baserom.gba", 0x2dab02, 0x9
-
-gUnknown_082DAB0B:: @ 82DAB0B
- .incbin "baserom.gba", 0x2dab0b, 0x6
-
-gUnknown_082DAB11:: @ 82DAB11
- .incbin "baserom.gba", 0x2dab11, 0x4
-
-BattleScript_ActionSwitch:: @ 82DAB15
- .incbin "baserom.gba", 0x2dab15, 0xa4
-
-BattleScript_Pausex20:: @ 82DABB9
- .incbin "baserom.gba", 0x2dabb9, 0x4
-
-BattleScript_LevelUp:: @ 82DABBD
- .incbin "baserom.gba", 0x2dabbd, 0x6f
-
-gUnknown_082DAC2C:: @ 82DAC2C
- .incbin "baserom.gba", 0x2dac2c, 0x1b
-
-gUnknown_082DAC47:: @ 82DAC47
- .incbin "baserom.gba", 0x2dac47, 0x82
-
-gUnknown_082DACC9:: @ 82DACC9
- .incbin "baserom.gba", 0x2dacc9, 0x9
-
-gUnknown_082DACD2:: @ 82DACD2
- .incbin "baserom.gba", 0x2dacd2, 0xe
-
-gUnknown_082DACE0:: @ 82DACE0
- .incbin "baserom.gba", 0x2dace0, 0x7
-
-gUnknown_082DACE7:: @ 82DACE7
- .incbin "baserom.gba", 0x2dace7, 0x13
-
-gUnknown_082DACFA:: @ 82DACFA
- .incbin "baserom.gba", 0x2dacfa, 0x11
-
-gUnknown_082DAD0B:: @ 82DAD0B
- .incbin "baserom.gba", 0x2dad0b, 0xa
-
-BattleScript_LeechSeedTurnDrain:: @ 82DAD15
- .incbin "baserom.gba", 0x2dad15, 0x5c
-
-BattleScript_BideStoringEnergy:: @ 82DAD71
- .incbin "baserom.gba", 0x2dad71, 0xb
-
-BattleScript_BideAttack:: @ 82DAD7C
- .incbin "baserom.gba", 0x2dad7c, 0x48
-
-BattleScript_BideNoEnergyToAttack:: @ 82DADC4
- .incbin "baserom.gba", 0x2dadc4, 0x14
-
-gUnknown_082DADD8:: @ 82DADD8
- .incbin "baserom.gba", 0x2dadd8, 0x2b
-
-BattleScript_MistProtected:: @ 82DAE03
- .incbin "baserom.gba", 0x2dae03, 0xa
-
-BattleScript_RageIsBuilding:: @ 82DAE0D
- .incbin "baserom.gba", 0x2dae0d, 0x7
-
-BattleScript_MoveUsedIsDisabled:: @ 82DAE14
- .incbin "baserom.gba", 0x2dae14, 0xb
-
-gUnknown_082DAE1F:: @ 82DAE1F
- .incbin "baserom.gba", 0x2dae1f, 0x4
-
-BattleScript_DisabledNoMore:: @ 82DAE23
- .incbin "baserom.gba", 0x2dae23, 0x7
-
-gUnknown_082DAE2A:: @ 82DAE2A
- .incbin "baserom.gba", 0x2dae2a, 0xd
-
-BattleScript_EncoredNoMore:: @ 82DAE37
- .incbin "baserom.gba", 0x2dae37, 0x7
-
-BattleScript_DestinyBondTakesLife:: @ 82DAE3E
- .incbin "baserom.gba", 0x2dae3e, 0x1b
-
-gUnknown_082DAE59:: @ 82DAE59
- .incbin "baserom.gba", 0x2dae59, 0x37
-
-gUnknown_082DAE90:: @ 82DAE90
- .incbin "baserom.gba", 0x2dae90, 0x37
-
-gUnknown_082DAEC7:: @ 82DAEC7
- .incbin "baserom.gba", 0x2daec7, 0x3e
-
-gUnknown_082DAF05:: @ 82DAF05
- .incbin "baserom.gba", 0x2daf05, 0x1b
-
-gUnknown_082DAF20:: @ 82DAF20
- .incbin "baserom.gba", 0x2daf20, 0x7
-
-BattleScript_AllStatsUp:: @ 82DAF27
- .incbin "baserom.gba", 0x2daf27, 0x9c
-
-BattleScript_RapidSpinAway:: @ 82DAFC3
- .incbin "baserom.gba", 0x2dafc3, 0x2
-
-BattleScript_WrapFree:: @ 82DAFC5
- .incbin "baserom.gba", 0x2dafc5, 0x11
-
-BattleScript_LeechSeedFree:: @ 82DAFD6
- .incbin "baserom.gba", 0x2dafd6, 0x7
-
-BattleScript_SpikesFree:: @ 82DAFDD
- .incbin "baserom.gba", 0x2dafdd, 0x7
-
-gUnknown_082DAFE4:: @ 82DAFE4
- .incbin "baserom.gba", 0x2dafe4, 0x8e
-
-BattleScript_NoMovesLeft:: @ 82DB072
- .incbin "baserom.gba", 0x2db072, 0x4
-
-gUnknown_082DB076:: @ 82DB076
- .incbin "baserom.gba", 0x2db076, 0x4
-
-BattleScript_NoPPForMove:: @ 82DB07A
- .incbin "baserom.gba", 0x2db07a, 0xf
-
-gUnknown_082DB089:: @ 82DB089
- .incbin "baserom.gba", 0x2db089, 0xf
-
-gUnknown_082DB098:: @ 82DB098
- .incbin "baserom.gba", 0x2db098, 0x8
-
-gUnknown_082DB0A0:: @ 82DB0A0
- .incbin "baserom.gba", 0x2db0a0, 0x4
-
-BattleScript_MoveUsedIsTaunted:: @ 82DB0A4
- .incbin "baserom.gba", 0x2db0a4, 0xb
-
-gUnknown_082DB0AF:: @ 82DB0AF
- .incbin "baserom.gba", 0x2db0af, 0x8
-
-BattleScript_WishComesTrue:: @ 82DB0B7
- .incbin "baserom.gba", 0x2db0b7, 0x37
-
-BattleScript_IngrainTurnHeal:: @ 82DB0EE
- .incbin "baserom.gba", 0x2db0ee, 0x29
-
-BattleScript_AtkDefDown:: @ 82DB117
- .incbin "baserom.gba", 0x2db117, 0x51
-
-BattleScript_KnockedOff:: @ 82DB168
- .incbin "baserom.gba", 0x2db168, 0xe
-
-BattleScript_MoveUsedIsImprisoned:: @ 82DB176
- .incbin "baserom.gba", 0x2db176, 0xb
-
-gUnknown_082DB181:: @ 82DB181
- .incbin "baserom.gba", 0x2db181, 0x4
-
-gUnknown_082DB185:: @ 82DB185
- .incbin "baserom.gba", 0x2db185, 0x8
-
-BattleScript_GrudgeTakesPp:: @ 82DB18D
- .incbin "baserom.gba", 0x2db18d, 0x7
-
-BattleScript_MagicCoatBounce:: @ 82DB194
- .incbin "baserom.gba", 0x2db194, 0x18
-
-BattleScript_SnatchedMove:: @ 82DB1AC
- .incbin "baserom.gba", 0x2db1ac, 0x1b
-
-BattleScript_EnduredMsg:: @ 82DB1C7
- .incbin "baserom.gba", 0x2db1c7, 0x7
-
-BattleScript_OneHitKOMsg:: @ 82DB1CE
- .incbin "baserom.gba", 0x2db1ce, 0x7
-
-BattleScript_SAtkDown2:: @ 82DB1D5
- .incbin "baserom.gba", 0x2db1d5, 0x2a
-
-BattleScript_FocusPunchSetUp:: @ 82DB1FF
- .incbin "baserom.gba", 0x2db1ff, 0x14
-
-BattleScript_MoveUsedIsAsleep:: @ 82DB213
- .incbin "baserom.gba", 0x2db213, 0xd
-
-BattleScript_MoveUsedWokeUp:: @ 82DB220
- .incbin "baserom.gba", 0x2db220, 0x14
-
-gUnknown_082DB234:: @ 82DB234
- .incbin "baserom.gba", 0x2db234, 0x9
-
-BattleScript_PoisonTurnDmg:: @ 82DB23D
- .incbin "baserom.gba", 0x2db23d, 0x22
-
-BattleScript_BurnTurnDmg:: @ 82DB25F
- .incbin "baserom.gba", 0x2db25f, 0xb
-
-BattleScript_MoveUsedIsFrozen:: @ 82DB26A
- .incbin "baserom.gba", 0x2db26a, 0xd
-
-BattleScript_MoveUsedUnfroze:: @ 82DB277
- .incbin "baserom.gba", 0x2db277, 0xb
-
-BattleScript_DefrostedViaFireMove:: @ 82DB282
- .incbin "baserom.gba", 0x2db282, 0x9
-
-BattleScript_MoveUsedIsParalyzed:: @ 82DB28B
- .incbin "baserom.gba", 0x2db28b, 0x10
-
-BattleScript_MoveUsedFlinched:: @ 82DB29B
- .incbin "baserom.gba", 0x2db29b, 0xb
-
-gUnknown_082DB2A6:: @ 82DB2A6
- .incbin "baserom.gba", 0x2db2a6, 0x9
-
-BattleScript_ThrashConfuses:: @ 82DB2AF
- .incbin "baserom.gba", 0x2db2af, 0xe
-
-BattleScript_MoveUsedIsConfused:: @ 82DB2BD
- .incbin "baserom.gba", 0x2db2bd, 0x43
-
-BattleScript_MoveUsedIsConfusedNoMore:: @ 82DB300
- .incbin "baserom.gba", 0x2db300, 0x7
-
-BattleScript_PrintPayDayMoneyString:: @ 82DB307
- .incbin "baserom.gba", 0x2db307, 0x7
-
-BattleScript_WrapTurnDmg:: @ 82DB30E
- .incbin "baserom.gba", 0x2db30e, 0x12
-
-BattleScript_WrapEnds:: @ 82DB320
- .incbin "baserom.gba", 0x2db320, 0x7
-
-BattleScript_MoveUsedIsInLove:: @ 82DB327
- .incbin "baserom.gba", 0x2db327, 0xd
-
-BattleScript_MoveUsedIsParalyzedCantAttack:: @ 82DB334
- .incbin "baserom.gba", 0x2db334, 0xb
-
-BattleScript_NightmareTurnDmg:: @ 82DB33F
- .incbin "baserom.gba", 0x2db33f, 0x11
-
-BattleScript_CurseTurnDmg:: @ 82DB350
- .incbin "baserom.gba", 0x2db350, 0x11
-
-BattleScript_TargetPRLZHeal:: @ 82DB361
- .incbin "baserom.gba", 0x2db361, 0x9
-
-BattleScript_MoveEffectSleep:: @ 82DB36A
- .incbin "baserom.gba", 0x2db36A, 0xE
-
-BattleScript_YawnMakesAsleep:: @ 82DB378
- .incbin "baserom.gba", 0x2db378, 0xE
-
-BattleScript_MoveEffectPoison:: @ 82DB386
- .incbin "baserom.gba", 0x2db386, 0xF
-
-BattleScript_MoveEffectBurn:: @ 82DB395
- .incbin "baserom.gba", 0x2db395, 0xF
-
-BattleScript_MoveEffectFreeze:: @ 82DB3A4
- .incbin "baserom.gba", 0x2db3A4, 0xF
-
-BattleScript_MoveEffectParalysis:: @ 82DB3B3
- .incbin "baserom.gba", 0x2db3B3, 0xF
-
-BattleScript_MoveEffectUproar:: @ 82DB3C2
- .incbin "baserom.gba", 0x2db3C2, 0x7
-
-BattleScript_MoveEffectToxic:: @ 82DB3C9
- .incbin "baserom.gba", 0x2db3C9, 0xD
-
-BattleScript_MoveEffectPayDay:: @ 82DB3D6
- .incbin "baserom.gba", 0x2db3D6, 0x7
-
-BattleScript_MoveEffectWrap:: @ 82DB3DD
- .incbin "baserom.gba", 0x2db3DD, 0x9
-
-BattleScript_MoveEffectConfusion:: @ 82DB3E6
- .incbin "baserom.gba", 0x2db3E6, 0xE
-
-BattleScript_MoveEffectRecoil33:: @ 82DB3F4
- .incbin "baserom.gba", 0x2db3F4, 0x2e
-
-BattleScript_ItemSteal:: @ 82DB422
- .incbin "baserom.gba", 0x2db422, 0xe
-
-BattleScript_DrizzleActivates:: @ 82DB430
- .incbin "baserom.gba", 0x2db430, 0x14
-
-BattleScript_SpeedBoostActivates:: @ 82DB444
- .incbin "baserom.gba", 0x2db444, 0xe
-
-BattleScript_TraceActivates:: @ 82DB452
- .incbin "baserom.gba", 0x2db452, 0xa
-
-BattleScript_RainDishActivates:: @ 82DB45C
- .incbin "baserom.gba", 0x2db45c, 0x14
-
-BattleScript_SandstreamActivates:: @ 82DB470
- .incbin "baserom.gba", 0x2db470, 0x14
-
-BattleScript_ShedSkinActivates:: @ 82DB484
- .incbin "baserom.gba", 0x2db484, 0x25
-
-BattleScript_CastformChange:: @ 82DB4A9
- .incbin "baserom.gba", 0x2db4a9, 0xf
-
-gUnknown_082DB4B8:: @ 82DB4B8
- .incbin "baserom.gba", 0x2db4b8, 0x9
-
-gUnknown_082DB4C1:: @ 82DB4C1
- .incbin "baserom.gba", 0x2db4c1, 0x69
-
-BattleScript_DroughtActivates:: @ 82DB52A
- .incbin "baserom.gba", 0x2db52a, 0x14
-
-BattleScript_TookAttack:: @ 82DB53E
- .incbin "baserom.gba", 0x2db53e, 0x14
-
-BattleScript_SturdyPreventsOHKO:: @ 82DB552
- .incbin "baserom.gba", 0x2db552, 0xe
-
-BattleScript_DampStopsExplosion:: @ 82DB560
- .incbin "baserom.gba", 0x2db560, 0xe
-
-BattleScript_MoveHPDrain_PPLoss:: @ 82DB56E
- .incbin "baserom.gba", 0x2db56e, 0x1
-
-BattleScript_MoveHPDrain:: @ 82DB56F
- .incbin "baserom.gba", 0x2db56f, 0x22
-
-gUnknown_082DB591:: @ 82DB591
- .incbin "baserom.gba", 0x2db591, 0x1
-
-gUnknown_082DB592:: @ 82DB592
- .incbin "baserom.gba", 0x2db592, 0x15
-
-BattleScript_FlashFireBoost_PPLoss:: @ 82DB5A7
- .incbin "baserom.gba", 0x2db5a7, 0x1
-
-BattleScript_FlashFireBoost:: @ 82DB5A8
- .incbin "baserom.gba", 0x2db5a8, 0x1f
-
-BattleScript_AbilityNoStatLoss:: @ 82DB5C7
- .incbin "baserom.gba", 0x2db5c7, 0xa
-
-BattleScript_BRNPrevention:: @ 82DB5D1
- .incbin "baserom.gba", 0x2db5d1, 0xc
-
-BattleScript_PRLZPrevention:: @ 82DB5DD
- .incbin "baserom.gba", 0x2db5dd, 0xc
-
-BattleScript_PSNPrevention:: @ 82DB5E9
- .incbin "baserom.gba", 0x2db5e9, 0xc
-
-BattleScript_ObliviousPreventsAttraction:: @ 82DB5F5
- .incbin "baserom.gba", 0x2db5f5, 0xe
-
-BattleScript_FlinchPrevention:: @ 82DB603
- .incbin "baserom.gba", 0x2db603, 0x1c
-
-BattleScript_SoundproofProtected:: @ 82DB61F
- .incbin "baserom.gba", 0x2db61f, 0x10
-
-BattleScript_AbilityNoSpecificStatLoss:: @ 82DB62F
- .incbin "baserom.gba", 0x2db62f, 0x10
-
-BattleScript_StickyHoldActivates:: @ 82DB63F
- .incbin "baserom.gba", 0x2db63f, 0xe
-
-BattleScript_ColorChangeActivates:: @ 82DB64D
- .incbin "baserom.gba", 0x2db64d, 0x7
-
-BattleScript_RoughSkinActivates:: @ 82DB654
- .incbin "baserom.gba", 0x2db654, 0x1b
-
-BattleScript_CuteCharmActivates:: @ 82DB66F
- .incbin "baserom.gba", 0x2db66f, 0xd
-
-BattleScript_ApplySecondaryEffect:: @ 82DB67C
- .incbin "baserom.gba", 0x2db67c, 0x3
-
-BattleScript_SynchronizeActivates:: @ 82DB67F
- .incbin "baserom.gba", 0x2db67f, 0x3
-
-BattleScript_NoItemSteal:: @ 82DB682
- .incbin "baserom.gba", 0x2db682, 0xa
-
-gUnknown_082DB68C:: @ 82DB68C
- .incbin "baserom.gba", 0x2db68c, 0x9
-
-gUnknown_082DB695:: @ 82DB695
- .incbin "baserom.gba", 0x2db695, 0x10
-
-gUnknown_082DB6A5:: @ 82DB6A5
- .incbin "baserom.gba", 0x2db6a5, 0x8
-
-BattleScript_MoveUsedLoafingAround:: @ 82DB6AD
- .incbin "baserom.gba", 0x2db6ad, 0x2c
-
-gUnknown_082DB6D9:: @ 82DB6D9
- .incbin "baserom.gba", 0x2db6d9, 0x17
-
-gUnknown_082DB6F0:: @ 82DB6F0
- .incbin "baserom.gba", 0x2db6f0, 0xb
-
-BattleScript_SubstituteFade:: @ 82DB6FB
- .incbin "baserom.gba", 0x2db6fb, 0xb
-
-BattleScript_BerryCurePrlzEnd2:: @ 82DB706
- .incbin "baserom.gba", 0x2db706, 0x6
-
-BattleScript_BerryCureParRet:: @ 82DB70C
- .incbin "baserom.gba", 0x2db70c, 0x12
-
-BattleScript_BerryCurePsnEnd2:: @ 82DB71E
- .incbin "baserom.gba", 0x2db71e, 0x6
-
-BattleScript_BerryCurePsnRet:: @ 82DB724
- .incbin "baserom.gba", 0x2db724, 0x12
-
-BattleScript_BerryCureBrnEnd2:: @ 82DB736
- .incbin "baserom.gba", 0x2db736, 0x6
-
-BattleScript_BerryCureBrnRet:: @ 82DB73C
- .incbin "baserom.gba", 0x2db73c, 0x12
-
-BattleScript_BerryCureFrzEnd2:: @ 82DB74E
- .incbin "baserom.gba", 0x2db74e, 0x6
-
-BattleScript_BerryCureFrzRet:: @ 82DB754
- .incbin "baserom.gba", 0x2db754, 0x12
-
-BattleScript_BerryCureSlpEnd2:: @ 82DB766
- .incbin "baserom.gba", 0x2db766, 0x6
-
-BattleScript_BerryCureSlpRet:: @ 82DB76C
- .incbin "baserom.gba", 0x2db76c, 0x12
-
-BattleScript_BerryCureConfusionEnd2:: @ 82DB77E
- .incbin "baserom.gba", 0x2db77e, 0x6
-
-BattleScript_BerryCureConfusionRet:: @ 82DB784
- .incbin "baserom.gba", 0x2db784, 0x10
-
-BattleScript_BerryCureChosenStatusEnd2:: @ 82DB794
- .incbin "baserom.gba", 0x2db794, 0x6
-
-BattleScript_BerryCureChosenStatusRet:: @ 82DB79A
- .incbin "baserom.gba", 0x2db79a, 0x14
-
-BattleScript_WhiteHerbEnd2:: @ 82DB7AE
- .incbin "baserom.gba", 0x2db7ae, 0x6
-
-BattleScript_WhiteHerbRet:: @ 82DB7B4
- .incbin "baserom.gba", 0x2db7b4, 0x10
-
-BattleScript_ItemHealHP_RemoveItem:: @ 82DB7C4
- .incbin "baserom.gba", 0x2db7c4, 0x1d
-
-BattleScript_BerryPPHealEnd2:: @ 82DB7E1
- .incbin "baserom.gba", 0x2db7e1, 0x10
-
-BattleScript_ItemHealHP_End2:: @ 82DB7F1
- .incbin "baserom.gba", 0x2db7f1, 0x6
-
-BattleScript_ItemHealHP_Ret:: @ 82DB7F7
- .incbin "baserom.gba", 0x2db7f7, 0x1b
-
-gUnknown_082DB812:: @ 82DB812
- .incbin "baserom.gba", 0x2db812, 0x4
-
-BattleScript_HangedOnMsg:: @ 82DB816
- .incbin "baserom.gba", 0x2db816, 0xe
-
-BattleScript_BerryConfuseHealEnd2:: @ 82DB824
- .incbin "baserom.gba", 0x2db824, 0x2a
-
-BattleScript_BerryStatRaiseEnd2:: @ 82DB84E
- .incbin "baserom.gba", 0x2db84e, 0x1b
-
-BattleScript_BerryFocusEnergyEnd2:: @ 82DB869
- .incbin "baserom.gba", 0x2db869, 0x10
-
-BattleScript_ActionSelectionItemsCantBeUsed:: @ 82DB879
- .incbin "baserom.gba", 0x2db879, 0x4
-
-gUnknown_082DB87D:: @ 82DB87D
- .incbin "baserom.gba", 0x2db87d, 0x4
-
-gUnknown_082DB881:: @ 82DB881
- .incbin "baserom.gba", 0x2db881, 0x3d
-
-gUnknown_082DB8BE:: @ 82DB8BE
- .incbin "baserom.gba", 0x2db8be, 0x35
-
-gUnknown_082DB8F3:: @ 82DB8F3
- .incbin "baserom.gba", 0x2db8f3, 0xc7
-
-gUnknown_082DB9BA:: @ 82DB9BA
- .incbin "baserom.gba", 0x2db9ba, 0x7
-
-gUnknown_082DB9C1:: @ 82DB9C1
- .incbin "baserom.gba", 0x2db9c1, 0x7
-
-gUnknown_082DB9C8:: @ 82DB9C8
- .incbin "baserom.gba", 0x2db9c8, 0xc
+ .4byte BattleScript_EffectHit
+ .4byte BattleScript_EffectSleep
+ .4byte BattleScript_EffectPoisonHit
+ .4byte BattleScript_EffectAbsorb
+ .4byte BattleScript_EffectBurnHit
+ .4byte BattleScript_EffectFreezeHit
+ .4byte BattleScript_EffectParalyzeHit
+ .4byte BattleScript_EffectExplosion
+ .4byte BattleScript_EffectDreamEater
+ .4byte BattleScript_EffectMirrorMove
+ .4byte BattleScript_EffectAttackUp
+ .4byte BattleScript_EffectDefenseUp
+ .4byte BattleScript_EffectSpeedUp
+ .4byte BattleScript_EffectSpecialAttackUp
+ .4byte BattleScript_EffectSpecialDefenseUp
+ .4byte BattleScript_EffectAccuracyUp
+ .4byte BattleScript_EffectEvasionUp
+ .4byte BattleScript_EffectAlwaysHit
+ .4byte BattleScript_EffectAttackDown
+ .4byte BattleScript_EffectDefenseDown
+ .4byte BattleScript_EffectSpeedDown
+ .4byte BattleScript_EffectSpecialAttackDown
+ .4byte BattleScript_EffectSpecialDefenseDown
+ .4byte BattleScript_EffectAccuracyDown
+ .4byte BattleScript_EffectEvasionDown
+ .4byte BattleScript_EffectHaze
+ .4byte BattleScript_EffectBide
+ .4byte BattleScript_EffectRampage
+ .4byte BattleScript_EffectRoar
+ .4byte BattleScript_EffectMultiHit
+ .4byte BattleScript_EffectConversion
+ .4byte BattleScript_EffectFlinchHit
+ .4byte BattleScript_EffectRestoreHp
+ .4byte BattleScript_EffectToxic
+ .4byte BattleScript_EffectPayDay
+ .4byte BattleScript_EffectLightScreen
+ .4byte BattleScript_EffectTriAttack
+ .4byte BattleScript_EffectRest
+ .4byte BattleScript_EffectOHKO
+ .4byte BattleScript_EffectRazorWind
+ .4byte BattleScript_EffectSuperFang
+ .4byte BattleScript_EffectDragonRage
+ .4byte BattleScript_EffectTrap
+ .4byte BattleScript_EffectHighCritical
+ .4byte BattleScript_EffectDoubleHit
+ .4byte BattleScript_EffectRecoilIfMiss
+ .4byte BattleScript_EffectMist
+ .4byte BattleScript_EffectFocusEnergy
+ .4byte BattleScript_EffectRecoil
+ .4byte BattleScript_EffectConfuse
+ .4byte BattleScript_EffectAttackUp2
+ .4byte BattleScript_EffectDefenseUp2
+ .4byte BattleScript_EffectSpeedUp2
+ .4byte BattleScript_EffectSpecialAttackUp2
+ .4byte BattleScript_EffectSpecialDefenseUp2
+ .4byte BattleScript_EffectAccuracyUp2
+ .4byte BattleScript_EffectEvasionUp2
+ .4byte BattleScript_EffectTransform
+ .4byte BattleScript_EffectAttackDown2
+ .4byte BattleScript_EffectDefenseDown2
+ .4byte BattleScript_EffectSpeedDown2
+ .4byte BattleScript_EffectSpecialAttackDown2
+ .4byte BattleScript_EffectSpecialDefenseDown2
+ .4byte BattleScript_EffectAccuracyDown2
+ .4byte BattleScript_EffectEvasionDown2
+ .4byte BattleScript_EffectReflect
+ .4byte BattleScript_EffectPoison
+ .4byte BattleScript_EffectParalyze
+ .4byte BattleScript_EffectAttackDownHit
+ .4byte BattleScript_EffectDefenseDownHit
+ .4byte BattleScript_EffectSpeedDownHit
+ .4byte BattleScript_EffectSpecialAttackDownHit
+ .4byte BattleScript_EffectSpecialDefenseDownHit
+ .4byte BattleScript_EffectAccuracyDownHit
+ .4byte BattleScript_EffectEvasionDownHit
+ .4byte BattleScript_EffectSkyAttack
+ .4byte BattleScript_EffectConfuseHit
+ .4byte BattleScript_EffectTwineedle
+ .4byte BattleScript_EffectVitalThrow
+ .4byte BattleScript_EffectSubstitute
+ .4byte BattleScript_EffectRecharge
+ .4byte BattleScript_EffectRage
+ .4byte BattleScript_EffectMimic
+ .4byte BattleScript_EffectMetronome
+ .4byte BattleScript_EffectLeechSeed
+ .4byte BattleScript_EffectSplash
+ .4byte BattleScript_EffectDisable
+ .4byte BattleScript_EffectLevelDamage
+ .4byte BattleScript_EffectPsywave
+ .4byte BattleScript_EffectCounter
+ .4byte BattleScript_EffectEncore
+ .4byte BattleScript_EffectPainSplit
+ .4byte BattleScript_EffectSnore
+ .4byte BattleScript_EffectConversion2
+ .4byte BattleScript_EffectLockOn
+ .4byte BattleScript_EffectSketch
+ .4byte BattleScript_EffectUnused60//Thaw
+ .4byte BattleScript_EffectSleepTalk
+ .4byte BattleScript_EffectDestinyBond
+ .4byte BattleScript_EffectFlail
+ .4byte BattleScript_EffectSpite
+ .4byte BattleScript_EffectFalseSwipe
+ .4byte BattleScript_EffectHealBell
+ .4byte BattleScript_EffectQuickAttack
+ .4byte BattleScript_EffectTripleKick
+ .4byte BattleScript_EffectThief
+ .4byte BattleScript_EffectMeanLook
+ .4byte BattleScript_EffectNightmare
+ .4byte BattleScript_EffectMinimize
+ .4byte BattleScript_EffectCurse
+ .4byte BattleScript_EffectUnused6e
+ .4byte BattleScript_EffectProtect
+ .4byte BattleScript_EffectSpikes
+ .4byte BattleScript_EffectForesight
+ .4byte BattleScript_EffectPerishSong
+ .4byte BattleScript_EffectSandstorm
+ .4byte BattleScript_EffectEndure
+ .4byte BattleScript_EffectRollout
+ .4byte BattleScript_EffectSwagger
+ .4byte BattleScript_EffectFuryCutter
+ .4byte BattleScript_EffectAttract
+ .4byte BattleScript_EffectReturn
+ .4byte BattleScript_EffectPresent
+ .4byte BattleScript_EffectFrustration
+ .4byte BattleScript_EffectSafeguard
+ .4byte BattleScript_EffectThawHit
+ .4byte BattleScript_EffectMagnitude
+ .4byte BattleScript_EffectBatonPass
+ .4byte BattleScript_EffectPursuit
+ .4byte BattleScript_EffectRapidSpin
+ .4byte BattleScript_EffectSonicboom
+ .4byte BattleScript_EffectUnused83
+ .4byte BattleScript_EffectMorningSun
+ .4byte BattleScript_EffectSynthesis
+ .4byte BattleScript_EffectMoonlight
+ .4byte BattleScript_EffectHiddenPower
+ .4byte BattleScript_EffectRainDance
+ .4byte BattleScript_EffectSunnyDay
+ .4byte BattleScript_EffectDefenseUpHit
+ .4byte BattleScript_EffectAttackUpHit
+ .4byte BattleScript_EffectAllStatsUpHit
+ .4byte BattleScript_EffectUnused8d
+ .4byte BattleScript_EffectBellyDrum
+ .4byte BattleScript_EffectPsychUp
+ .4byte BattleScript_EffectMirrorCoat
+ .4byte BattleScript_EffectSkullBash
+ .4byte BattleScript_EffectTwister
+ .4byte BattleScript_EffectEarthquake
+ .4byte BattleScript_EffectFutureSight
+ .4byte BattleScript_EffectGust
+ .4byte BattleScript_EffectStomp
+ .4byte BattleScript_EffectSolarbeam
+ .4byte BattleScript_EffectThunder
+ .4byte BattleScript_EffectTeleport
+ .4byte BattleScript_EffectBeatUp
+ .4byte BattleScript_EffectSemiInvulnerable
+ .4byte BattleScript_EffectDefenseCurl
+ .4byte BattleScript_EffectSoftboiled
+ .4byte BattleScript_EffectFakeOut
+ .4byte BattleScript_EffectUproar
+ .4byte BattleScript_EffectStockpile
+ .4byte BattleScript_EffectSpitUp
+ .4byte BattleScript_EffectSwallow
+ .4byte BattleScript_EffectUnusedA3
+ .4byte BattleScript_EffectHail
+ .4byte BattleScript_EffectTorment
+ .4byte BattleScript_EffectFlatter
+ .4byte BattleScript_EffectWillOWisp
+ .4byte BattleScript_EffectMemento
+ .4byte BattleScript_EffectFacade
+ .4byte BattleScript_EffectFocusPunch
+ .4byte BattleScript_EffectSmellingsalt
+ .4byte BattleScript_EffectFollowMe
+ .4byte BattleScript_EffectNaturePower
+ .4byte BattleScript_EffectCharge
+ .4byte BattleScript_EffectTaunt
+ .4byte BattleScript_EffectHelpingHand
+ .4byte BattleScript_EffectTrick
+ .4byte BattleScript_EffectRolePlay
+ .4byte BattleScript_EffectWish
+ .4byte BattleScript_EffectAssist
+ .4byte BattleScript_EffectIngrain
+ .4byte BattleScript_EffectSuperpower
+ .4byte BattleScript_EffectMagicCoat
+ .4byte BattleScript_EffectRecycle
+ .4byte BattleScript_EffectRevenge
+ .4byte BattleScript_EffectBrickBreak
+ .4byte BattleScript_EffectYawn
+ .4byte BattleScript_EffectKnockOff
+ .4byte BattleScript_EffectEndeavor
+ .4byte BattleScript_EffectEruption
+ .4byte BattleScript_EffectSkillSwap
+ .4byte BattleScript_EffectImprison
+ .4byte BattleScript_EffectRefresh
+ .4byte BattleScript_EffectGrudge
+ .4byte BattleScript_EffectSnatch
+ .4byte BattleScript_EffectLowKick
+ .4byte BattleScript_EffectSecretPower
+ .4byte BattleScript_EffectDoubleEdge
+ .4byte BattleScript_EffectTeeterDance
+ .4byte BattleScript_EffectBlazeKick
+ .4byte BattleScript_EffectMudSport
+ .4byte BattleScript_EffectPoisonFang
+ .4byte BattleScript_EffectWeatherBall
+ .4byte BattleScript_EffectOverheat
+ .4byte BattleScript_EffectTickle
+ .4byte BattleScript_EffectCosmicPower
+ .4byte BattleScript_EffectSkyUppercut
+ .4byte BattleScript_EffectBulkUp
+ .4byte BattleScript_EffectPoisonTail
+ .4byte BattleScript_EffectWaterSport
+ .4byte BattleScript_EffectCalmMind
+ .4byte BattleScript_EffectDragonDance
+ .4byte BattleScript_EffectCamouflage
+
+BattleScript_EffectSpeedUp::
+BattleScript_EffectSpecialDefenseUp::
+BattleScript_EffectAccuracyUp::
+BattleScript_EffectAlwaysHit::
+BattleScript_EffectSpecialAttackDown::
+BattleScript_EffectSpecialDefenseDown::
+BattleScript_EffectHighCritical::
+BattleScript_EffectAccuracyUp2::
+BattleScript_EffectEvasionUp2::
+BattleScript_EffectSpecialAttackDown2::
+BattleScript_EffectAccuracyDown2::
+BattleScript_EffectEvasionDown2::
+BattleScript_EffectEvasionDownHit::
+BattleScript_EffectVitalThrow::
+BattleScript_EffectUnused60::
+BattleScript_EffectFalseSwipe::
+BattleScript_EffectQuickAttack::
+BattleScript_EffectUnused6e::
+BattleScript_EffectPursuit::
+BattleScript_EffectUnused83::
+BattleScript_EffectUnused8d::
+BattleScript_EffectUnusedA3::
+BattleScript_EffectHit::
+ jumpifnotmove MOVE_SURF, BattleScript_HitFromAtkCanceler
+ jumpifnostatus3 TARGET, STATUS3_UNDERWATER, BattleScript_HitFromAtkCanceler
+ orword gHitMarker, HITMARKER_IGNORE_UNDERWATER
+ setbyte sDMG_MULTIPLIER, 0x2
+BattleScript_HitFromAtkCanceler::
+ attackcanceler
+BattleScript_HitFromAccCheck::
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+BattleScript_HitFromAtkString::
+ attackstring
+ ppreduce
+BattleScript_HitFromCritCalc::
+ critcalc
+ damagecalc
+ typecalc
+ adjustnormaldamage
+BattleScript_HitFromAtkAnimation::
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ resultmessage
+ waitmessage 0x40
+ seteffectwithchance
+ tryfaintmon TARGET, FALSE, NULL
+BattleScript_MoveEnd::
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x0, 0x0
+ end
+
+BattleScript_MakeMoveMissed::
+ orbyte gBattleMoveFlags, MOVESTATUS_MISSED
+BattleScript_PrintMoveMissed::
+ attackstring
+ ppreduce
+BattleScript_MoveMissedPause::
+ pause 0x20
+BattleScript_MoveMissed::
+ effectivenesssound
+ resultmessage
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSleep::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus TARGET, STATUS_SLEEP, BattleScript_AlreadyAsleep
+ jumpifcantmakeasleep BattleScript_CantMakeAsleep
+ jumpifstatus TARGET, STATUS_ANY, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ attackanimation
+ waitanimation
+ setmoveeffect EFFECT_SLEEP
+ seteffectprimary
+ goto BattleScript_MoveEnd
+
+BattleScript_AlreadyAsleep::
+ various23 ATTACKER
+ pause 0x20
+ printstring STRINGID_PKMNALREADYASLEEP
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_WasntAffected::
+ pause 0x20
+ printstring STRINGID_PKMNWASNTAFFECTED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_CantMakeAsleep::
+ pause 0x20
+ printfromtable gUproarAwakeStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPoisonHit::
+BattleScript_EffectPoisonTail::
+ setmoveeffect EFFECT_POISON
+ goto BattleScript_EffectHit
+
+BattleScript_EffectAbsorb::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ typecalc
+ adjustnormaldamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ resultmessage
+ waitmessage 0x40
+ negativedamage
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ jumpifability TARGET, ABILITY_LIQUID_OOZE, BattleScript_82D8B26
+ setbyte cMULTISTRING_CHOOSER, 0x0
+ goto BattleScript_82D8B2E
+BattleScript_82D8B26::
+ manipulatedamage ATK80_DMG_CHANGE_SIGN
+ setbyte cMULTISTRING_CHOOSER, 0x1
+BattleScript_82D8B2E::
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, BattleScript_82D8B45
+ printfromtable gLeechSeedDrainStringIds
+ waitmessage 0x40
+BattleScript_82D8B45::
+ tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon TARGET, FALSE, NULL
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectBurnHit::
+BattleScript_EffectBlazeKick::
+ setmoveeffect EFFECT_BURN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectFreezeHit::
+ setmoveeffect EFFECT_FREEZE
+ goto BattleScript_EffectHit
+
+BattleScript_EffectParalyzeHit::
+ setmoveeffect EFFECT_PARALYSIS
+ goto BattleScript_EffectHit
+
+BattleScript_EffectExplosion::
+ attackcanceler
+ attackstring
+ ppreduce
+ faintifabilitynotdamp
+ setatkhptozero
+ waitstate
+ jumpifbyte NO_COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED, BattleScript_82D8B94
+ call BattleScript_82D8BEA
+ goto BattleScript_82D8B96
+BattleScript_82D8B94::
+ attackanimation
+ waitanimation
+BattleScript_82D8B96::
+ movevaluescleanup
+ critcalc
+ damagecalc
+ typecalc
+ adjustnormaldamage
+ accuracycheck BattleScript_82D8BCF, ACC_CURR_MOVE
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ resultmessage
+ waitmessage 0x40
+ tryfaintmon TARGET, FALSE, NULL
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ jumpifnexttargetvalid BattleScript_82D8B96
+ tryfaintmon ATTACKER, FALSE, NULL
+ end
+BattleScript_82D8BCF::
+ effectivenesssound
+ resultmessage
+ waitmessage 0x40
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ jumpifnexttargetvalid BattleScript_82D8B96
+ tryfaintmon ATTACKER, FALSE, NULL
+ end
+
+BattleScript_82D8BEA::
+ bicbyte gBattleMoveFlags, MOVESTATUS_MISSED
+ attackanimation
+ waitanimation
+ orbyte gBattleMoveFlags, MOVESTATUS_MISSED
+ return
+
+BattleScript_EffectDreamEater::
+ attackcanceler
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_82D8C0E
+ jumpifstatus TARGET, STATUS_SLEEP, BattleScript_82D8C18
+BattleScript_82D8C0E::
+ attackstring
+ ppreduce
+ waitmessage 0x40
+ goto BattleScript_WasntAffected
+BattleScript_82D8C18::
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ typecalc
+ adjustnormaldamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ resultmessage
+ waitmessage 0x40
+ negativedamage
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, BattleScript_82D8C56
+ printstring STRINGID_PKMNDREAMEATEN
+ waitmessage 0x40
+BattleScript_82D8C56::
+ tryfaintmon TARGET, FALSE, NULL
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMirrorMove::
+ attackcanceler
+ attackstring
+ pause 0x40
+ trymirrormove
+ ppreduce
+ orbyte gBattleMoveFlags, MOVESTATUS_FAILED
+ printstring STRINGID_MIRRORMOVEFAILED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAttackUp::
+ setstatchanger ATK, 1, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectDefenseUp::
+ setstatchanger DEF, 1, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectSpecialAttackUp::
+ setstatchanger SPATK, 1, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectEvasionUp::
+ setstatchanger EVASION, 1, FALSE
+BattleScript_EffectStatUp::
+ attackcanceler
+BattleScript_EffectStatUpAfterAtkCanceler::
+ attackstring
+ ppreduce
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_StatUpEnd
+ jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_StatUpAttackAnim
+ pause 0x20
+ goto BattleScript_StatUpPrintString
+BattleScript_StatUpAttackAnim::
+ attackanimation
+ waitanimation
+BattleScript_StatUpDoAnim::
+ setgraphicalstatchangevalues
+ playanimation ATTACKER, ANIM_STATS_CHANGE, sANIM_ARG1
+BattleScript_StatUpPrintString::
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_StatUpEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_StatUp::
+ playanimation EFFECT_BANK, ANIM_STATS_CHANGE, sANIM_ARG1
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+ return
+
+BattleScript_EffectAttackDown::
+ setstatchanger ATK, 1, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectDefenseDown::
+ setstatchanger DEF, 1, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectSpeedDown::
+ setstatchanger SPEED, 1, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectAccuracyDown::
+ setstatchanger ACC, 1, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectEvasionDown::
+ setstatchanger EVASION, 1, TRUE
+BattleScript_EffectStatDown::
+ attackcanceler
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailedAtkStringPpReduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ statbuffchange 0x1, BattleScript_StatDownEnd
+ jumpifbyte LESS_THAN, cMULTISTRING_CHOOSER, 0x2, BattleScript_StatDownDoAnim
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x3, BattleScript_StatDownEnd
+ pause 0x20
+ goto BattleScript_StatDownPrintString
+BattleScript_StatDownDoAnim::
+ attackanimation
+ waitanimation
+ setgraphicalstatchangevalues
+ playanimation TARGET, ANIM_STATS_CHANGE, sANIM_ARG1
+BattleScript_StatDownPrintString::
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+BattleScript_StatDownEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_StatDown::
+ playanimation EFFECT_BANK, ANIM_STATS_CHANGE, sANIM_ARG1
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+ return
+
+BattleScript_EffectHaze::
+ attackcanceler
+ attackstring
+ ppreduce
+ attackanimation
+ waitanimation
+ normalisebuffs
+ printstring STRINGID_STATCHANGESGONE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectBide::
+ attackcanceler
+ attackstring
+ ppreduce
+ attackanimation
+ waitanimation
+ orword gHitMarker, HITMARKER_x8000000
+ setbide
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRampage::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_82D8DAE
+ ppreduce
+BattleScript_82D8DAE::
+ confuseifrepeatingattackends
+ goto BattleScript_HitFromCritCalc
+
+BattleScript_EffectRoar::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifability TARGET, ABILITY_SUCTION_CUPS, BattleScript_82DB5B9
+ jumpifstatus3 TARGET, STATUS3_ROOTED, BattleScript_82DB109
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_ARENA, BattleScript_ButItFailed
+ forcerandomswitch BattleScript_ButItFailed
+
+BattleScript_EffectMultiHit::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setmultihitcounter 0x0
+ initmultihitstring
+ setbyte sFIELD_16, 0x0
+BattleScript_82D8DFD::
+ jumpifhasnohp ATTACKER, BattleScript_82D8E93
+ jumpifhasnohp TARGET, BattleScript_82D8E74
+ jumpifhalfword EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_82D8E1F
+ jumpifstatus ATTACKER, STATUS_SLEEP, BattleScript_82D8E74
+BattleScript_82D8E1F::
+ movevaluescleanup
+ copybyte cEFFECT_CHOOSER, sFIELD_16
+ critcalc
+ damagecalc
+ typecalc
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, BattleScript_82D8E71
+ adjustnormaldamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 0x1
+ addbyte sMULTIHIT_STRING + 4, 0x1
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_ENDURED, BattleScript_82D8E74
+ decrementmultihit BattleScript_82D8DFD
+ goto BattleScript_82D8E74
+BattleScript_82D8E71::
+ pause 0x20
+BattleScript_82D8E74::
+ resultmessage
+ waitmessage 0x40
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, BattleScript_82D8E93
+ copyarray gBattleTextBuff1, sMULTIHIT_STRING, 0x6
+ printstring STRINGID_HITXTIMES
+ waitmessage 0x40
+BattleScript_82D8E93::
+ seteffectwithchance
+ tryfaintmon TARGET, FALSE, NULL
+ setbyte sMOVEEND_STATE, 0x2
+ moveend 0x1, 0x0
+ setbyte sMOVEEND_STATE, 0x4
+ moveend 0x0, 0x0
+ end
+
+BattleScript_EffectConversion::
+ attackcanceler
+ attackstring
+ ppreduce
+ tryconversiontypechange BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNCHANGEDTYPE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFlinchHit::
+ setmoveeffect EFFECT_FLINCH
+ goto BattleScript_EffectHit
+
+BattleScript_EffectRestoreHp::
+ attackcanceler
+ attackstring
+ ppreduce
+ tryhealhalfhealth BattleScript_AlreadyAtFullHp, ATTACKER
+ attackanimation
+ waitanimation
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ printstring STRINGID_PKMNREGAINEDHEALTH
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectToxic::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifability TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus TARGET, STATUS_POISON, BattleScript_AlreadyPoisoned
+ jumpifstatus TARGET, STATUS_TOXIC_POISON, BattleScript_AlreadyPoisoned
+ jumpifstatus TARGET, STATUS_ANY, BattleScript_ButItFailed
+ jumpiftype TARGET, TYPE_POISON, BattleScript_NotAffected
+ jumpiftype TARGET, TYPE_STEEL, BattleScript_NotAffected
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ attackanimation
+ waitanimation
+ setmoveeffect EFFECT_TOXIC
+ seteffectprimary
+ resultmessage
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_AlreadyPoisoned::
+ various23 ATTACKER
+ pause 0x40
+ printstring STRINGID_PKMNALREADYPOISONED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_ImmunityProtected::
+ copybyte gEffectBank, gBankTarget
+ setbyte cMULTISTRING_CHOOSER, 0x0
+ call BattleScript_PSNPrevention
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPayDay::
+ setmoveeffect EFFECT_PAYDAY
+ goto BattleScript_EffectHit
+
+BattleScript_EffectLightScreen::
+ attackcanceler
+ attackstring
+ ppreduce
+ setlightscreen
+ goto BattleScript_PrintReflectLightScreenSafeguardString
+
+BattleScript_EffectTriAttack::
+ setmoveeffect EFFECT_TRI_ATTACK
+ goto BattleScript_EffectHit
+
+BattleScript_EffectRest::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus ATTACKER, STATUS_SLEEP, BattleScript_RestIsAlreadyAsleep
+ jumpifcantmakeasleep BattleScript_RestCantSleep
+ trysetrest BattleScript_AlreadyAtFullHp
+ pause 0x20
+ printfromtable gRestUsedStringIds
+ waitmessage 0x40
+ updatestatusicon ATTACKER
+ waitstate
+ goto BattleScript_PresentHealTarget
+
+BattleScript_RestCantSleep::
+ pause 0x40
+ printfromtable gUproarAwakeStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_RestIsAlreadyAsleep::
+ various23 ATTACKER
+ pause 0x20
+ printstring STRINGID_PKMNALREADYASLEEP2
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectOHKO::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ typecalc
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, BattleScript_HitFromAtkAnimation
+ tryKO BattleScript_KOFail
+ trysetdestinybondtohappen
+ goto BattleScript_HitFromAtkAnimation
+BattleScript_KOFail::
+ pause 0x40
+ printfromtable gKOFailedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRazorWind::
+ jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
+ jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
+ setbyte sTWOTURN_STRINGID, 0x0
+ call BattleScriptFirstChargingTurn
+ goto BattleScript_MoveEnd
+
+BattleScript_TwoTurnMovesSecondTurn::
+ attackcanceler
+ setmoveeffect EFFECT_CHARGING
+ setbyte sANIM_TURN, 0x1
+ clearstatusfromeffect ATTACKER
+ orword gHitMarker, HITMARKER_NO_PPDEDUCT
+ jumpifnotmove MOVE_SKY_ATTACK, BattleScript_HitFromAccCheck
+ setmoveeffect EFFECT_FLINCH
+ goto BattleScript_HitFromAccCheck
+
+BattleScriptFirstChargingTurn::
+ attackcanceler
+ printstring STRINGID_EMPTYSTRING3
+ ppreduce
+ attackanimation
+ waitanimation
+ orword gHitMarker, HITMARKER_x8000000
+ setmoveeffect EFFECT_CHARGING | AFFECTS_USER
+ seteffectprimary
+ copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID
+ printfromtable gFirstTurnOfTwoStringIds
+ waitmessage 0x40
+ return
+
+BattleScript_EffectSuperFang::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc
+ bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE
+ damagetohalftargethp
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectDragonRage::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc
+ bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE
+ setword gBattleMoveDamage, 40
+ adjustsetdamage
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectTrap::
+ jumpifnotmove MOVE_WHIRLPOOL, BattleScript_DoWrapEffect
+ jumpifnostatus3 TARGET, STATUS3_UNDERWATER, BattleScript_DoWrapEffect
+ orword gHitMarker, HITMARKER_IGNORE_UNDERWATER
+ setbyte sDMG_MULTIPLIER, 0x2
+BattleScript_DoWrapEffect::
+ setmoveeffect EFFECT_WRAP
+ goto BattleScript_EffectHit
+
+BattleScript_EffectDoubleHit::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setmultihitcounter 0x2
+ initmultihitstring
+ setbyte sFIELD_16, 0x0
+ goto BattleScript_82D8DFD
+
+BattleScript_EffectRecoilIfMiss::
+ attackcanceler
+ accuracycheck BattleScript_82D9135, ACC_CURR_MOVE
+ goto BattleScript_HitFromAtkString
+
+BattleScript_82D9135::
+ attackstring
+ ppreduce
+ pause 0x40
+ resultmessage
+ waitmessage 0x40
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_NOTAFFECTED, BattleScript_MoveEnd
+ printstring STRINGID_PKMNCRASHED
+ waitmessage 0x40
+ damagecalc
+ typecalc
+ adjustnormaldamage
+ manipulatedamage ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP
+ bicbyte gBattleMoveFlags, MOVESTATUS_MISSED
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ tryfaintmon ATTACKER, FALSE, NULL
+ orbyte gBattleMoveFlags, MOVESTATUS_MISSED
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMist::
+ attackcanceler
+ attackstring
+ ppreduce
+ setmist
+ attackanimation
+ waitanimation
+ printfromtable gMistUsedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFocusEnergy::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus2 ATTACKER, STATUS2_FOCUS_ENERGY, BattleScript_ButItFailed
+ setfocusenergy
+ attackanimation
+ waitanimation
+ printfromtable gFocusEnergyUsedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRecoil::
+ setmoveeffect EFFECT_RECOIL_25 | AFFECTS_USER | CERTAIN
+ jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit
+ incrementgamestat 0x1B
+ goto BattleScript_EffectHit
+
+BattleScript_EffectConfuse::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 TARGET, STATUS2_CONFUSION, BattleScript_AlreadyConfused
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ attackanimation
+ waitanimation
+ setmoveeffect EFFECT_CONFUSION
+ seteffectprimary
+ resultmessage
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_AlreadyConfused::
+ various23 ATTACKER
+ pause 0x20
+ printstring STRINGID_PKMNALREADYCONFUSED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAttackUp2::
+ setstatchanger ATK, 2, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectDefenseUp2::
+ setstatchanger DEF, 2, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectSpeedUp2::
+ setstatchanger SPEED, 2, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectSpecialAttackUp2::
+ setstatchanger SPATK, 2, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectSpecialDefenseUp2::
+ setstatchanger SPDEF, 2, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectTransform::
+ attackcanceler
+ attackstring
+ ppreduce
+ transformdataexecution
+ attackanimation
+ waitanimation
+ printfromtable gTransformUsedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAttackDown2::
+ setstatchanger ATK, 2, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectDefenseDown2::
+ setstatchanger DEF, 2, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectSpeedDown2::
+ setstatchanger SPEED, 2, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectSpecialDefenseDown2::
+ setstatchanger SPDEF, 2, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectReflect::
+ attackcanceler
+ attackstring
+ ppreduce
+ setreflect
+BattleScript_PrintReflectLightScreenSafeguardString::
+ attackanimation
+ waitanimation
+ printfromtable gReflectLightScreenSafeguardStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPoison::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifability TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus TARGET, STATUS_POISON, BattleScript_AlreadyPoisoned
+ jumpifstatus TARGET, STATUS_TOXIC_POISON, BattleScript_AlreadyPoisoned
+ jumpiftype TARGET, TYPE_POISON, BattleScript_NotAffected
+ jumpiftype TARGET, TYPE_STEEL, BattleScript_NotAffected
+ jumpifstatus TARGET, STATUS_ANY, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ attackanimation
+ waitanimation
+ setmoveeffect EFFECT_POISON
+ seteffectprimary
+ resultmessage
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectParalyze::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifability TARGET, ABILITY_LIMBER, BattleScript_LimberProtected
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ typecalc
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, BattleScript_ButItFailed
+ jumpifstatus TARGET, STATUS_PARALYSIS, BattleScript_AlreadyParalyzed
+ jumpifstatus TARGET, STATUS_ANY, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ attackanimation
+ waitanimation
+ setmoveeffect EFFECT_PARALYSIS
+ seteffectprimary
+ resultmessage
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_AlreadyParalyzed::
+ various23 ATTACKER
+ pause 0x20
+ printstring STRINGID_PKMNISALREADYPARALYZED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_LimberProtected::
+ copybyte gEffectBank, gBankTarget
+ setbyte cMULTISTRING_CHOOSER, 0x0
+ call BattleScript_PRLZPrevention
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAttackDownHit::
+ setmoveeffect EFFECT_ATK_MINUS_1
+ goto BattleScript_EffectHit
+
+BattleScript_EffectDefenseDownHit::
+ setmoveeffect EFFECT_DEF_MINUS_1
+ goto BattleScript_EffectHit
+
+BattleScript_EffectSpeedDownHit::
+ setmoveeffect EFFECT_SPD_MINUS_1
+ goto BattleScript_EffectHit
+
+BattleScript_EffectSpecialAttackDownHit::
+ setmoveeffect EFFECT_SP_ATK_MINUS_1
+ goto BattleScript_EffectHit
+
+BattleScript_EffectSpecialDefenseDownHit::
+ setmoveeffect EFFECT_SP_DEF_MINUS_1
+ goto BattleScript_EffectHit
+
+BattleScript_EffectAccuracyDownHit::
+ setmoveeffect EFFECT_ACC_MINUS_1
+ goto BattleScript_EffectHit
+
+BattleScript_EffectSkyAttack::
+ jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
+ jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
+ setbyte sTWOTURN_STRINGID, 0x3
+ call BattleScriptFirstChargingTurn
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectConfuseHit::
+ setmoveeffect EFFECT_CONFUSION
+ goto BattleScript_EffectHit
+
+BattleScript_EffectTwineedle::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ setbyte sFIELD_16, 0x2
+ attackstring
+ ppreduce
+ setmultihitcounter 0x2
+ initmultihitstring
+ goto BattleScript_82D8DFD
+
+BattleScript_EffectSubstitute::
+ attackcanceler
+ ppreduce
+ attackstring
+ waitstate
+ jumpifstatus2 ATTACKER, STATUS2_SUBSTITUTE, BattleScript_AlreadyHasSubstitute
+ setsubstitute
+ jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x1, BattleScript_SubstituteAnim
+ pause 0x20
+ goto BattleScript_SubstituteString
+BattleScript_SubstituteAnim::
+ attackanimation
+ waitanimation
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+BattleScript_SubstituteString::
+ printfromtable gSubsituteUsedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+BattleScript_AlreadyHasSubstitute::
+ various23 ATTACKER
+ pause 0x20
+ printstring STRINGID_PKMNHASSUBSTITUTE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRecharge::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ setmoveeffect EFFECT_RECHARGE | AFFECTS_USER | CERTAIN
+ goto BattleScript_HitFromAtkString
+
+BattleScript_MoveUsedMustRecharge::
+ printstring STRINGID_PKMNMUSTRECHARGE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRage::
+ attackcanceler
+ accuracycheck BattleScript_RageMiss, ACC_CURR_MOVE
+ setmoveeffect EFFECT_RAGE
+ seteffectprimary
+ setmoveeffect 0
+ goto BattleScript_HitFromAtkString
+BattleScript_RageMiss::
+ setmoveeffect EFFECT_RAGE
+ clearstatusfromeffect ATTACKER
+ goto BattleScript_PrintMoveMissed
+
+BattleScript_EffectMimic::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ mimicattackcopy BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNLEARNEDMOVE2
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMetronome::
+ attackcanceler
+ attackstring
+ pause 0x20
+ attackanimation
+ waitanimation
+ setbyte sANIM_TURN, 0x0
+ setbyte sANIM_TARGETS_HIT, 0x0
+ metronome
+
+BattleScript_EffectLeechSeed::
+ attackcanceler
+ attackstring
+ pause 0x20
+ ppreduce
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ accuracycheck BattleScript_DoLeechSeed, ACC_CURR_MOVE
+BattleScript_DoLeechSeed::
+ setseeded
+ attackanimation
+ waitanimation
+ printfromtable gLeechSeedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSplash::
+ attackcanceler
+ attackstring
+ ppreduce
+ attackanimation
+ waitanimation
+ incrementgamestat 0x1A
+ printstring STRINGID_BUTNOTHINGHAPPENED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectDisable::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ disablelastusedattack BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNMOVEWASDISABLED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectLevelDamage::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc
+ bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE
+ dmgtolevel
+ adjustsetdamage
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectPsywave::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc
+ bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE
+ psywavedamageeffect
+ adjustsetdamage
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectCounter::
+ attackcanceler
+ counterdamagecalculator BattleScript_ButItFailedAtkStringPpReduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc2
+ adjustsetdamage
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectEncore::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ trysetencore BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNGOTENCORE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPainSplit::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ painsplitdmgcalc BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ copyword gBattleMoveDamage, sPAINSPLIT_HP
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ printstring STRINGID_SHAREDPAIN
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSnore::
+ attackcanceler
+ jumpifstatus ATTACKER, STATUS_SLEEP, BattleScript_SnoreIsAsleep
+ attackstring
+ ppreduce
+ goto BattleScript_ButItFailed
+BattleScript_SnoreIsAsleep::
+ jumpifhalfword EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoSnore
+ printstring STRINGID_PKMNFASTASLEEP
+ waitmessage 0x40
+ statusanimation ATTACKER
+BattleScript_DoSnore::
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
+ setmoveeffect EFFECT_FLINCH
+ goto BattleScript_HitFromCritCalc
+
+BattleScript_EffectConversion2::
+ attackcanceler
+ attackstring
+ ppreduce
+ settypetorandomresistance BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNCHANGEDTYPE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectLockOn::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ setalwayshitflag
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNTOOKAIM
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSketch::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ copymovepermanently BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSKETCHEDMOVE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSleepTalk::
+ attackcanceler
+ jumpifstatus ATTACKER, STATUS_SLEEP, BattleScript_SleepTalkIsAsleep
+ attackstring
+ ppreduce
+ goto BattleScript_ButItFailed
+BattleScript_SleepTalkIsAsleep::
+ printstring STRINGID_PKMNFASTASLEEP
+ waitmessage 0x40
+ statusanimation ATTACKER
+ attackstring
+ ppreduce
+ orword gHitMarker, HITMARKER_NO_PPDEDUCT
+ trychoosesleeptalkmove BattleScript_SleepTalkUsingMove
+ pause 0x40
+ goto BattleScript_ButItFailed
+BattleScript_SleepTalkUsingMove::
+ attackanimation
+ waitanimation
+ setbyte sANIM_TURN, 0x0
+ setbyte sANIM_TARGETS_HIT, 0x0
+ jumptorandomattack 0x1
+
+BattleScript_EffectDestinyBond::
+ attackcanceler
+ attackstring
+ ppreduce
+ setdestinybond
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNTRYINGTOTAKEFOE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFlail::
+ remaininghptopower
+ goto BattleScript_EffectHit
+
+BattleScript_EffectSpite::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ tryspiteppreduce BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNREDUCEDPP
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectHealBell::
+ attackcanceler
+ attackstring
+ ppreduce
+ healpartystatus
+ waitstate
+ attackanimation
+ waitanimation
+ printfromtable gPartyStatusHealStringIds
+ waitmessage 0x40
+ jumpifnotmove MOVE_HEAL_BELL, BattleScript_PartyHealEnd
+ jumpifbyte NO_COMMON_BITS, cMULTISTRING_CHOOSER, 0x1, BattleScript_CheckHealBellMon2Unaffected
+ printstring STRINGID_PKMNSXBLOCKSY
+ waitmessage 0x40
+BattleScript_CheckHealBellMon2Unaffected::
+ jumpifbyte NO_COMMON_BITS, cMULTISTRING_CHOOSER, 0x2, BattleScript_PartyHealEnd
+ printstring STRINGID_PKMNSXBLOCKSY2
+ waitmessage 0x40
+BattleScript_PartyHealEnd::
+ updatestatusicon ATTACKER_WITH_PARTNER
+ waitstate
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectTripleKick::
+ attackcanceler
+ attackstring
+ ppreduce
+ sethword sTRIPLE_KICK_POWER, 0x0
+ initmultihitstring
+ setmultihit 0x3
+BattleScript_TripleKickLoop::
+ jumpifhasnohp ATTACKER, BattleScript_TripleKickEnd
+ jumpifhasnohp TARGET, BattleScript_TripleKickNoMoreHits
+ jumpifhalfword EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoTripleKickAttack
+ jumpifstatus ATTACKER, STATUS_SLEEP, BattleScript_TripleKickNoMoreHits
+BattleScript_DoTripleKickAttack::
+ accuracycheck BattleScript_TripleKickNoMoreHits, ACC_CURR_MOVE
+ movevaluescleanup
+ addbyte sTRIPLE_KICK_POWER, 10
+ addbyte sMULTIHIT_STRING + 4, 0x1
+ copyhword gDynamicBasePower, sTRIPLE_KICK_POWER
+ critcalc
+ damagecalc
+ typecalc
+ adjustnormaldamage
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, BattleScript_TripleKickNoMoreHits
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 0x1
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_ENDURED, BattleScript_TripleKickPrintStrings
+ decrementmultihit BattleScript_TripleKickLoop
+ goto BattleScript_TripleKickPrintStrings
+BattleScript_TripleKickNoMoreHits::
+ pause 0x20
+ jumpifbyte EQUAL, sMULTIHIT_STRING + 4, 0x0, BattleScript_TripleKickPrintStrings
+ bicbyte gBattleMoveFlags, MOVESTATUS_MISSED
+BattleScript_TripleKickPrintStrings::
+ resultmessage
+ waitmessage 0x40
+ jumpifbyte EQUAL, sMULTIHIT_STRING + 4, 0x0, BattleScript_TripleKickEnd
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_NOTAFFECTED, BattleScript_TripleKickEnd
+ copyarray gBattleTextBuff1, sMULTIHIT_STRING, 0x6
+ printstring STRINGID_HITXTIMES
+ waitmessage 0x40
+BattleScript_TripleKickEnd::
+ seteffectwithchance
+ tryfaintmon TARGET, FALSE, NULL
+ setbyte sMOVEEND_STATE, 0xE
+ moveend 0x0, 0x0
+ end
+
+BattleScript_EffectThief::
+ setmoveeffect EFFECT_STEAL_ITEM
+ goto BattleScript_EffectHit
+
+BattleScript_EffectMeanLook::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC
+ jumpifstatus2 TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_ButItFailed
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ setmoveeffect EFFECT_PREVENT_ESCAPE
+ seteffectprimary
+ printstring STRINGID_TARGETCANTESCAPENOW
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectNightmare::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 TARGET, STATUS2_NIGHTMARE, BattleScript_ButItFailed
+ jumpifstatus TARGET, STATUS_SLEEP, BattleScript_NightmareWorked
+ goto BattleScript_ButItFailed
+BattleScript_NightmareWorked::
+ attackanimation
+ waitanimation
+ setmoveeffect EFFECT_NIGHTMARE
+ seteffectprimary
+ printstring STRINGID_PKMNFELLINTONIGHTMARE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMinimize::
+ attackcanceler
+ setminimize
+ setstatchanger EVASION, 1, FALSE
+ goto BattleScript_EffectStatUpAfterAtkCanceler
+
+BattleScript_EffectCurse::
+ jumpiftype2 ATTACKER, TYPE_GHOST, BattleScript_GhostCurse
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat ATTACKER, GREATER_THAN, SPEED, 0x0, BattleScript_CurseTrySpeed
+ jumpifstat ATTACKER, NOT_EQUAL, ATK, 0xC, BattleScript_CurseTrySpeed
+ jumpifstat ATTACKER, EQUAL, DEF, 0xC, BattleScript_ButItFailed
+BattleScript_CurseTrySpeed::
+ copybyte gBankTarget, gBankAttacker
+ setbyte sANIM_TURN, 0x1
+ attackanimation
+ waitanimation
+ setstatchanger SPEED, 1, TRUE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_CurseTryAttack
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+BattleScript_CurseTryAttack::
+ setstatchanger ATK, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_CurseTryDefence
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_CurseTryDefence::
+ setstatchanger DEF, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_CurseEnd
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_CurseEnd::
+ goto BattleScript_MoveEnd
+BattleScript_GhostCurse::
+ jumpifbytenotequal gBankAttacker, gBankTarget, BattleScript_DoGhostCurse
+ getmovetarget ATTACKER
+BattleScript_DoGhostCurse::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ cursetarget BattleScript_ButItFailed
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ setbyte sANIM_TURN, 0x0
+ attackanimation
+ waitanimation
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ printstring STRINGID_PKMNLAIDCURSE
+ waitmessage 0x40
+ tryfaintmon ATTACKER, FALSE, NULL
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectProtect::
+BattleScript_EffectEndure::
+ attackcanceler
+ attackstring
+ ppreduce
+ setprotectlike
+ attackanimation
+ waitanimation
+ printfromtable gProtectLikeUsedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSpikes::
+ attackcanceler
+ trysetspikes BattleScript_ButItFailedAtkStringPpReduce
+ attackstring
+ ppreduce
+ attackanimation
+ waitanimation
+ printstring STRINGID_SPIKESSCATTERED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectForesight::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setforesight
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNIDENTIFIED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPerishSong::
+ attackcanceler
+ attackstring
+ ppreduce
+ trysetperishsong BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_FAINTINTHREE
+ waitmessage 0x40
+ setbyte sBANK, 0x0
+BattleScript_PerishSongLoop::
+ jumpifability SCRIPTING_BANK, ABILITY_SOUNDPROOF, BattleScript_PerishSongNotAffected
+BattleScript_PerishSongLoopIncrement::
+ addbyte sBANK, 0x1
+ jumpifbytenotequal sBANK, gNoOfAllBanks, BattleScript_PerishSongLoop
+ goto BattleScript_MoveEnd
+
+BattleScript_PerishSongNotAffected::
+ printstring STRINGID_PKMNSXBLOCKSY2
+ waitmessage 0x40
+ goto BattleScript_PerishSongLoopIncrement
+
+BattleScript_EffectSandstorm::
+ attackcanceler
+ attackstring
+ ppreduce
+ setsandstorm
+ goto BattleScript_MoveWeatherChange
+
+BattleScript_EffectRollout::
+ attackcanceler
+ attackstring
+ jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_RolloutCheckAccuracy
+ ppreduce
+BattleScript_RolloutCheckAccuracy::
+ accuracycheck BattleScript_RolloutHit, ACC_CURR_MOVE
+BattleScript_RolloutHit::
+ typecalc2
+ rolloutdamagecalculation
+ goto BattleScript_HitFromCritCalc
+
+BattleScript_EffectSwagger::
+ attackcanceler
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ jumpifconfusedandstatmaxed ATK, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ setstatchanger ATK, 2, FALSE
+ statbuffchange 0x1, BattleScript_SwaggerTryConfuse
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_SwaggerTryConfuse
+ setgraphicalstatchangevalues
+ playanimation TARGET, ANIM_STATS_CHANGE, sANIM_ARG1
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_SwaggerTryConfuse::
+ jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ setmoveeffect EFFECT_CONFUSION
+ seteffectprimary
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFuryCutter::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_FuryCutterHit, ACC_CURR_MOVE
+BattleScript_FuryCutterHit::
+ furycuttercalc
+ critcalc
+ damagecalc
+ typecalc
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, BattleScript_FuryCutterHit
+ adjustnormaldamage
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectAttract::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ tryinfatuating BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNFELLINLOVE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectReturn::
+BattleScript_EffectFrustration::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ happinesstodamagecalculation
+ goto BattleScript_HitFromAtkString
+
+BattleScript_EffectPresent::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc
+ presentdamagecalculation
+
+BattleScript_EffectSafeguard::
+ attackcanceler
+ attackstring
+ ppreduce
+ setsafeguard
+ goto BattleScript_PrintReflectLightScreenSafeguardString
+
+BattleScript_EffectThawHit::
+ setmoveeffect EFFECT_BURN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectMagnitude::
+ attackcanceler
+ attackstring
+ ppreduce
+ selectfirstvalidtarget
+ magnitudedamagecalculation
+ pause 0x20
+ printstring STRINGID_MAGNITUDESTRENGTH
+ waitmessage 0x40
+ goto BattleScript_82D9C44
+
+BattleScript_EffectBatonPass::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_ARENA, BattleScript_ButItFailed
+ jumpifcantswitch ATK4F_DONT_CHECK_STATUSES | ATTACKER, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ openpartyscreen 0x1, BattleScript_ButItFailed
+ switchoutabilities ATTACKER
+ waitstate
+ switchhandleorder ATTACKER, 0x2
+ returntoball ATTACKER
+ getswitchedmondata ATTACKER
+ switchindataupdate ATTACKER
+ hpthresholds ATTACKER
+ printstring STRINGID_SWITCHINMON
+ switchinanim ATTACKER, 0x1
+ waitstate
+ switchineffects ATTACKER
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRapidSpin::
+ setmoveeffect EFFECT_RAPIDSPIN | AFFECTS_USER | CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectSonicboom::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc
+ bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE
+ setword gBattleMoveDamage, 20
+ adjustsetdamage
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectMorningSun::
+BattleScript_EffectSynthesis::
+BattleScript_EffectMoonlight::
+ attackcanceler
+ attackstring
+ ppreduce
+ recoverbasedonsunlight BattleScript_AlreadyAtFullHp
+ goto BattleScript_PresentHealTarget
+
+BattleScript_EffectHiddenPower::
+ hiddenpowercalc
+ goto BattleScript_EffectHit
+
+BattleScript_EffectRainDance::
+ attackcanceler
+ attackstring
+ ppreduce
+ setrain
+BattleScript_MoveWeatherChange::
+ attackanimation
+ waitanimation
+ printfromtable gMoveWeatherChangeStringIds
+ waitmessage 0x40
+ call BattleScript_WeatherFormChanges
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSunnyDay::
+ attackcanceler
+ attackstring
+ ppreduce
+ setsunny
+ goto BattleScript_MoveWeatherChange
+
+BattleScript_EffectDefenseUpHit::
+ setmoveeffect EFFECT_DEF_PLUS_1 | AFFECTS_USER
+ goto BattleScript_EffectHit
+
+BattleScript_EffectAttackUpHit::
+ setmoveeffect EFFECT_ATK_PLUS_1 | AFFECTS_USER
+ goto BattleScript_EffectHit
+
+BattleScript_EffectAllStatsUpHit::
+ setmoveeffect EFFECT_ALL_STATS_UP | AFFECTS_USER
+ goto BattleScript_EffectHit
+
+BattleScript_EffectBellyDrum::
+ attackcanceler
+ attackstring
+ ppreduce
+ maxattackhalvehp BattleScript_ButItFailed
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ attackanimation
+ waitanimation
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ printstring STRINGID_PKMNCUTHPMAXEDATTACK
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPsychUp::
+ attackcanceler
+ attackstring
+ ppreduce
+ copyfoestats BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNCOPIEDSTATCHANGES
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMirrorCoat::
+ attackcanceler
+ mirrorcoatdamagecalculator BattleScript_ButItFailedAtkStringPpReduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc2
+ adjustsetdamage
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectSkullBash::
+ jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
+ jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
+ setbyte sTWOTURN_STRINGID, 0x2
+ call BattleScriptFirstChargingTurn
+ setstatchanger DEF, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_SkullBashEnd
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_SkullBashEnd
+ setgraphicalstatchangevalues
+ playanimation ATTACKER, ANIM_STATS_CHANGE, sANIM_ARG1
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_SkullBashEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectTwister::
+ jumpifnostatus3 TARGET, STATUS3_ON_AIR, BattleScript_FlinchEffect
+ orword gHitMarker, HITMARKER_IGNORE_ON_AIR
+ setbyte sDMG_MULTIPLIER, 0x2
+BattleScript_FlinchEffect::
+ setmoveeffect EFFECT_FLINCH
+ goto BattleScript_EffectHit
+
+BattleScript_EffectEarthquake::
+ attackcanceler
+ attackstring
+ ppreduce
+ selectfirstvalidtarget
+BattleScript_82D9C44::
+ movevaluescleanup
+ jumpifnostatus3 TARGET, STATUS3_UNDERGROUND, BattleScript_82D9C64
+ orword gHitMarker, HITMARKER_IGNORE_UNDERGROUND
+ setbyte sDMG_MULTIPLIER, 0x2
+ goto BattleScript_82D9C73
+BattleScript_82D9C64::
+ bicword gHitMarker, HITMARKER_IGNORE_UNDERGROUND
+ setbyte sDMG_MULTIPLIER, 0x1
+BattleScript_82D9C73::
+ accuracycheck BattleScript_82D9CAC, ACC_CURR_MOVE
+ critcalc
+ damagecalc
+ typecalc
+ adjustnormaldamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ resultmessage
+ waitmessage 0x40
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 0x1
+ tryfaintmon TARGET, FALSE, NULL
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ jumpifnexttargetvalid BattleScript_82D9C44
+ end
+BattleScript_82D9CAC::
+ pause 0x20
+ typecalc
+ effectivenesssound
+ resultmessage
+ waitmessage 0x40
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ jumpifnexttargetvalid BattleScript_82D9C44
+ end
+
+BattleScript_EffectFutureSight::
+ attackcanceler
+ attackstring
+ ppreduce
+ trysetfutureattack BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printfromtable gFutureMoveUsedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectGust::
+ jumpifnostatus3 TARGET, STATUS3_ON_AIR, BattleScript_EffectHit
+ orword gHitMarker, HITMARKER_IGNORE_ON_AIR
+ setbyte sDMG_MULTIPLIER, 0x2
+ goto BattleScript_EffectHit
+
+BattleScript_EffectStomp::
+ jumpifnostatus3 TARGET, STATUS3_MINIMIZED, BattleScript_FlinchEffect
+ setbyte sDMG_MULTIPLIER, 0x2
+ goto BattleScript_FlinchEffect
+
+BattleScript_EffectSolarbeam::
+ jumpifabilitypresent ABILITY_CLOUD_NINE, BattleScript_SolarbeamDecideTurn
+ jumpifabilitypresent ABILITY_AIR_LOCK, BattleScript_SolarbeamDecideTurn
+ jumpifhalfword COMMON_BITS, gBattleWeather, WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT, BattleScript_SolarbeamOnFirstTurn
+BattleScript_SolarbeamDecideTurn::
+ jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
+ jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
+ setbyte sTWOTURN_STRINGID, 0x1
+ call BattleScriptFirstChargingTurn
+ goto BattleScript_MoveEnd
+BattleScript_SolarbeamOnFirstTurn::
+ orword gHitMarker, HITMARKER_x8000000
+ setmoveeffect EFFECT_CHARGING | AFFECTS_USER
+ seteffectprimary
+ ppreduce
+ goto BattleScript_TwoTurnMovesSecondTurn
+
+BattleScript_EffectThunder::
+ setmoveeffect EFFECT_PARALYSIS
+ orword gHitMarker, HITMARKER_IGNORE_ON_AIR
+ goto BattleScript_EffectHit
+
+BattleScript_EffectTeleport::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TRAINER, BattleScript_ButItFailed
+ getifcantrunfrombattle ATTACKER
+ jumpifbyte EQUAL, gBattleCommunication, 0x1, BattleScript_ButItFailed
+ jumpifbyte EQUAL, gBattleCommunication, 0x2, BattleScript_82DA382
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNFLEDFROMBATTLE
+ waitmessage 0x40
+ setoutcomeonteleport ATTACKER
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectBeatUp::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ pause 0x20
+ ppreduce
+ setbyte gBattleCommunication, 0x0
+BattleScript_BeatUpLoop::
+ movevaluescleanup
+ trydobeatup BattleScript_BeatUpEnd, BattleScript_ButItFailed
+ printstring STRINGID_PKMNATTACK
+ critcalc
+ jumpifbyte NOT_EQUAL, gCritMultiplier, 0x2, BattleScript_BeatUpAttack
+ manipulatedamage ATK80_DMG_DOUBLED
+BattleScript_BeatUpAttack::
+ adjustnormaldamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ resultmessage
+ waitmessage 0x40
+ tryfaintmon TARGET, FALSE, NULL
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ goto BattleScript_BeatUpLoop
+BattleScript_BeatUpEnd::
+ end
+
+BattleScript_EffectSemiInvulnerable::
+ jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SecondTurnSemiInvulnerable
+ jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_SecondTurnSemiInvulnerable
+ jumpifmove MOVE_FLY, BattleScript_FirstTurnFly
+ jumpifmove MOVE_DIVE, BattleScript_FirstTurnDive
+ jumpifmove MOVE_BOUNCE, BattleScript_FirstTurnBounce
+ setbyte sTWOTURN_STRINGID, 0x5
+ goto BattleScript_FirstTurnSemiInvulnerable
+
+BattleScript_FirstTurnBounce::
+ setbyte sTWOTURN_STRINGID, 0x7
+ goto BattleScript_FirstTurnSemiInvulnerable
+
+BattleScript_FirstTurnDive::
+ setbyte sTWOTURN_STRINGID, 0x6
+ goto BattleScript_FirstTurnSemiInvulnerable
+
+BattleScript_FirstTurnFly::
+ setbyte sTWOTURN_STRINGID, 0x4
+BattleScript_FirstTurnSemiInvulnerable::
+ call BattleScriptFirstChargingTurn
+ setsemiinvulnerablebit
+ goto BattleScript_MoveEnd
+
+BattleScript_SecondTurnSemiInvulnerable::
+ attackcanceler
+ setmoveeffect EFFECT_CHARGING
+ setbyte sANIM_TURN, 0x1
+ clearstatusfromeffect ATTACKER
+ orword gHitMarker, HITMARKER_NO_PPDEDUCT
+ jumpifnotmove MOVE_BOUNCE, BattleScript_SemiInvulnerableTryHit
+ setmoveeffect EFFECT_PARALYSIS
+BattleScript_SemiInvulnerableTryHit::
+ accuracycheck BattleScript_SemiInvulnerableMiss, ACC_CURR_MOVE
+ clearsemiinvulnerablebit
+ goto BattleScript_HitFromAtkString
+
+BattleScript_SemiInvulnerableMiss::
+ clearsemiinvulnerablebit
+ goto BattleScript_PrintMoveMissed
+
+BattleScript_EffectDefenseCurl::
+ attackcanceler
+ attackstring
+ ppreduce
+ setdefensecurlbit
+ setstatchanger DEF, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_DefenseCurlDoStatUpAnim
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_StatUpPrintString
+ attackanimation
+ waitanimation
+BattleScript_DefenseCurlDoStatUpAnim::
+ goto BattleScript_StatUpDoAnim
+
+BattleScript_EffectSoftboiled::
+ attackcanceler
+ attackstring
+ ppreduce
+ tryhealhalfhealth BattleScript_AlreadyAtFullHp, TARGET
+BattleScript_PresentHealTarget::
+ attackanimation
+ waitanimation
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ printstring STRINGID_PKMNREGAINEDHEALTH
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_AlreadyAtFullHp::
+ pause 0x20
+ printstring STRINGID_PKMNHPFULL
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFakeOut::
+ attackcanceler
+ jumpifnotfirstturn BattleScript_ButItFailedAtkStringPpReduce
+ setmoveeffect EFFECT_FLINCH | CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_ButItFailedAtkStringPpReduce::
+ attackstring
+BattleScript_ButItFailedPpReduce::
+ ppreduce
+BattleScript_ButItFailed::
+ pause 0x20
+ orbyte gBattleMoveFlags, MOVESTATUS_FAILED
+ resultmessage
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_NotAffected::
+ pause 0x20
+ orbyte gBattleMoveFlags, MOVESTATUS_NOTAFFECTED
+ resultmessage
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectUproar::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ setmoveeffect EFFECT_UPROAR | AFFECTS_USER
+ attackstring
+ jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_UproarHit
+ ppreduce
+BattleScript_UproarHit::
+ nop
+ goto BattleScript_HitFromCritCalc
+
+BattleScript_EffectStockpile::
+ attackcanceler
+ attackstring
+ ppreduce
+ stockpile
+ attackanimation
+ waitanimation
+ printfromtable gStockpileUsedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSpitUp::
+ attackcanceler
+ jumpifbyte EQUAL, gBattleCommunication + 6, 0x1, BattleScript_82D9FA2
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ stockpiletobasedamage BattleScript_SpitUpFail
+ typecalc
+ adjustsetdamage
+ goto BattleScript_HitFromAtkAnimation
+BattleScript_SpitUpFail::
+ pause 0x20
+ printstring STRINGID_FAILEDTOSPITUP
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_82D9FA2::
+ attackstring
+ ppreduce
+ pause 0x40
+ stockpiletobasedamage BattleScript_SpitUpFail
+ resultmessage
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSwallow::
+ attackcanceler
+ attackstring
+ ppreduce
+ stockpiletohpheal BattleScript_SwallowFail
+ goto BattleScript_PresentHealTarget
+
+BattleScript_SwallowFail::
+ pause 0x20
+ printfromtable gSwallowFailStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectHail::
+ attackcanceler
+ attackstring
+ ppreduce
+ sethail
+ goto BattleScript_MoveWeatherChange
+
+BattleScript_EffectTorment::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ settorment BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSUBJECTEDTOTORMENT
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFlatter::
+ attackcanceler
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ jumpifconfusedandstatmaxed SPATK, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ setstatchanger SPATK, 1, FALSE
+ statbuffchange 0x1, BattleScript_FlatterTryConfuse
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_FlatterTryConfuse
+ setgraphicalstatchangevalues
+ playanimation TARGET, ANIM_STATS_CHANGE, sANIM_ARG1
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_FlatterTryConfuse::
+ jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ setmoveeffect EFFECT_CONFUSION
+ seteffectprimary
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectWillOWisp::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus TARGET, STATUS_BURN, BattleScript_AlreadyBurned
+ jumpiftype TARGET, TYPE_FIRE, BattleScript_NotAffected
+ jumpifability TARGET, ABILITY_WATER_VEIL, BattleScript_WaterVeilPrevents
+ jumpifstatus TARGET, STATUS_ANY, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ attackanimation
+ waitanimation
+ setmoveeffect EFFECT_BURN
+ seteffectprimary
+ goto BattleScript_MoveEnd
+
+BattleScript_WaterVeilPrevents::
+ copybyte gEffectBank, gBankTarget
+ setbyte cMULTISTRING_CHOOSER, 0x0
+ call BattleScript_BRNPrevention
+ goto BattleScript_MoveEnd
+
+BattleScript_AlreadyBurned::
+ various23 ATTACKER
+ pause 0x20
+ printstring STRINGID_PKMNALREADYHASBURN
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMemento::
+ attackcanceler
+ jumpifbyte EQUAL, gBattleCommunication + 6, 0x1, BattleScript_82DA153
+ attackstring
+ ppreduce
+ jumpifattackandspecialattackcannotfall BattleScript_ButItFailed
+ setatkhptozero
+ attackanimation
+ waitanimation
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_82DA148
+ setbyte sFIELD_1B, 0x0
+ playstatchangeanimation TARGET, 0x12, 0x7
+ playstatchangeanimation TARGET, 0x2, 0x3
+ setstatchanger ATK, 2, TRUE
+ statbuffchange 0x1, BattleScript_82DA119
+ jumpifbyte GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DA119
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+BattleScript_82DA119::
+ playstatchangeanimation TARGET, 0x10, 0x3
+ setstatchanger SPATK, 2, TRUE
+ statbuffchange 0x1, BattleScript_82DA13C
+ jumpifbyte GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DA13C
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+BattleScript_82DA13C::
+ tryfaintmon ATTACKER, FALSE, NULL
+ goto BattleScript_MoveEnd
+BattleScript_82DA148::
+ printstring STRINGID_BUTNOEFFECT
+ waitmessage 0x40
+ goto BattleScript_82DA13C
+BattleScript_82DA153::
+ attackstring
+ ppreduce
+ jumpifattackandspecialattackcannotfall BattleScript_82DA15A
+BattleScript_82DA15A::
+ setatkhptozero
+ pause 0x40
+ effectivenesssound
+ resultmessage
+ waitmessage 0x40
+ tryfaintmon ATTACKER, FALSE, NULL
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFacade::
+ jumpifstatus ATTACKER, STATUS_POISON | STATUS_BURN | STATUS_PARALYSIS | STATUS_TOXIC_POISON, BattleScript_FacadeDoubleDmg
+ goto BattleScript_EffectHit
+
+BattleScript_FacadeDoubleDmg::
+ setbyte sDMG_MULTIPLIER, 0x2
+ goto BattleScript_EffectHit
+
+BattleScript_EffectFocusPunch::
+ attackcanceler
+ jumpifnodamage BattleScript_HitFromAccCheck
+ ppreduce
+ printstring STRINGID_PKMNLOSTFOCUS
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSmellingsalt::
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectHit
+ setmoveeffect EFFECT_REMOVE_PARALYSIS | CERTAIN
+ jumpifstatus TARGET, STATUS_PARALYSIS, BattleScript_82DA1BA
+ goto BattleScript_EffectHit
+
+BattleScript_82DA1BA::
+ setbyte sDMG_MULTIPLIER, 0x2
+ goto BattleScript_EffectHit
+
+BattleScript_EffectFollowMe::
+ attackcanceler
+ attackstring
+ ppreduce
+ setforcedtarget
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNCENTERATTENTION
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectNaturePower::
+ attackcanceler
+ attackstring
+ pause 0x20
+ callterrainattack
+ printstring STRINGID_NATUREPOWERTURNEDINTO
+ waitmessage 0x40
+ return
+
+BattleScript_EffectCharge::
+ attackcanceler
+ attackstring
+ ppreduce
+ setcharge
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNCHARGINGPOWER
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectTaunt::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ settaunt BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNFELLFORTAUNT
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectHelpingHand::
+ attackcanceler
+ attackstring
+ ppreduce
+ trysethelpinghand BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNREADYTOHELP
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectTrick::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ tryswapitems BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSWITCHEDITEMS
+ waitmessage 0x40
+ printfromtable gItemSwapStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRolePlay::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ trycopyability BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNCOPIEDFOE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectWish::
+ attackcanceler
+ attackstring
+ ppreduce
+ trywish 0x0, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAssist::
+ attackcanceler
+ attackstring
+ asistattackselect BattleScript_ButItFailedPpReduce
+ attackanimation
+ waitanimation
+ setbyte sANIM_TURN, 0x0
+ setbyte sANIM_TARGETS_HIT, 0x0
+ jumptorandomattack 0x1
+
+BattleScript_EffectIngrain::
+ attackcanceler
+ attackstring
+ ppreduce
+ trysetroots BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNPLANTEDROOTS
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSuperpower::
+ setmoveeffect EFFECT_ATK_DEF_DOWN | AFFECTS_USER | CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectMagicCoat::
+ attackcanceler
+ trysetmagiccoat BattleScript_ButItFailedAtkStringPpReduce
+ attackstring
+ ppreduce
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSHROUDEDITSELF
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRecycle::
+ attackcanceler
+ attackstring
+ ppreduce
+ tryrecycleitem BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_XFOUNDONEY
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRevenge::
+ doubledamagedealtifdamaged
+ goto BattleScript_EffectHit
+
+BattleScript_EffectBrickBreak::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ removelightscreenreflect
+ critcalc
+ damagecalc
+ typecalc
+ adjustnormaldamage
+ jumpifbyte EQUAL, sANIM_TURN, 0x0, BattleScript_82DA306
+ bicbyte gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED
+BattleScript_82DA306::
+ attackanimation
+ waitanimation
+ jumpifbyte LESS_THAN, sANIM_TURN, 0x2, BattleScript_82DA319
+ printstring STRINGID_THEWALLSHATTERED
+ waitmessage 0x40
+BattleScript_82DA319::
+ typecalc2
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ resultmessage
+ waitmessage 0x40
+ seteffectwithchance
+ tryfaintmon TARGET, FALSE, NULL
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectYawn::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifability TARGET, ABILITY_VITAL_SPIRIT, BattleScript_82DA378
+ jumpifability TARGET, ABILITY_INSOMNIA, BattleScript_82DA378
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ jumpifcantmakeasleep BattleScript_ButItFailed
+ setyawn BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNWASMADEDROWSY
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+BattleScript_82DA378::
+ copybyte sBANK, sFIELD_15
+BattleScript_82DA382::
+ pause 0x20
+ printstring STRINGID_PKMNSXMADEITINEFFECTIVE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectKnockOff::
+ setmoveeffect EFFECT_KNOCK_OFF
+ goto BattleScript_EffectHit
+
+BattleScript_EffectEndeavor::
+ attackcanceler
+ attackstring
+ ppreduce
+ setdamagetohealthdifference BattleScript_ButItFailed
+ copyword gHpDealt, gBattleMoveDamage
+ accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
+ typecalc
+ jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, BattleScript_HitFromAtkAnimation
+ bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE
+ copyword gBattleMoveDamage, gHpDealt
+ adjustsetdamage
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectEruption::
+ scaledamagebyhealthratio
+ goto BattleScript_EffectHit
+
+BattleScript_EffectSkillSwap::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ tryswapabilities BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSWAPPEDABILITIES
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectImprison::
+ attackcanceler
+ attackstring
+ ppreduce
+ tryimprision BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSEALEDOPPONENTMOVE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRefresh::
+ attackcanceler
+ attackstring
+ ppreduce
+ cureifburnedparalysedorpoisoned BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSTATUSNORMAL
+ waitmessage 0x40
+ updatestatusicon ATTACKER
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectGrudge::
+ attackcanceler
+ attackstring
+ ppreduce
+ trysetgrudge BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNWANTSGRUDGE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSnatch::
+ attackcanceler
+ trysetsnatch BattleScript_ButItFailedAtkStringPpReduce
+ attackstring
+ ppreduce
+ attackanimation
+ waitanimation
+ pause 0x20
+ printstring STRINGID_PKMNWAITSFORTARGET
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectLowKick::
+ attackcanceler
+ attackstring
+ ppreduce
+ weightdamagecalculation
+ accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
+ goto BattleScript_HitFromCritCalc
+
+BattleScript_EffectSecretPower::
+ getsecretpowereffect
+ goto BattleScript_EffectHit
+
+BattleScript_EffectDoubleEdge::
+ setmoveeffect EFFECT_RECOIL_33_PARALYSIS | AFFECTS_USER | CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectTeeterDance::
+ attackcanceler
+ attackstring
+ ppreduce
+ setbyte gBankTarget, 0x0
+BattleScript_82DA47B::
+ movevaluescleanup
+ setmoveeffect EFFECT_CONFUSION
+ jumpifbyteequal gBankAttacker, gBankTarget, BattleScript_82DA4D0
+ jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_82DA4E5
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_82DA501
+ jumpifstatus2 TARGET, STATUS2_CONFUSION, BattleScript_82DA50F
+ jumpifhasnohp TARGET, BattleScript_82DA4D0
+ accuracycheck BattleScript_82DA520, ACC_CURR_MOVE
+ jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_82DA4F3
+ attackanimation
+ waitanimation
+ seteffectprimary
+ resultmessage
+ waitmessage 0x40
+BattleScript_82DA4C7::
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+BattleScript_82DA4D0::
+ addbyte gBankTarget, 0x1
+ jumpifbytenotequal gBankTarget, gNoOfAllBanks, BattleScript_82DA47B
+ end
+
+BattleScript_82DA4E5::
+ pause 0x20
+ printstring STRINGID_PKMNPREVENTSCONFUSIONWITH
+ waitmessage 0x40
+ goto BattleScript_82DA4C7
+
+BattleScript_82DA4F3::
+ pause 0x20
+ printstring STRINGID_PKMNUSEDSAFEGUARD
+ waitmessage 0x40
+ goto BattleScript_82DA4C7
+
+BattleScript_82DA501::
+ pause 0x20
+ printstring STRINGID_BUTITFAILED
+ waitmessage 0x40
+ goto BattleScript_82DA4C7
+
+BattleScript_82DA50F::
+ various23 ATTACKER
+ pause 0x20
+ printstring STRINGID_PKMNALREADYCONFUSED
+ waitmessage 0x40
+ goto BattleScript_82DA4C7
+
+BattleScript_82DA520::
+ resultmessage
+ waitmessage 0x40
+ goto BattleScript_82DA4C7
+
+BattleScript_EffectMudSport::
+BattleScript_EffectWaterSport::
+ attackcanceler
+ attackstring
+ ppreduce
+ settypebasedhalvers BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printfromtable gSportsUsedStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPoisonFang::
+ setmoveeffect EFFECT_TOXIC
+ goto BattleScript_EffectHit
+
+BattleScript_EffectWeatherBall::
+ setweatherballtype
+ goto BattleScript_EffectHit
+
+BattleScript_EffectOverheat::
+ setmoveeffect EFFECT_SP_ATK_TWO_DOWN | AFFECTS_USER | CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectTickle::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat TARGET, GREATER_THAN, ATK, 0x0, BattleScript_TickleDoMoveAnim
+ jumpifstat TARGET, EQUAL, DEF, 0x0, BattleScript_CantLowerMultipleStats
+BattleScript_TickleDoMoveAnim::
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ attackanimation
+ waitanimation
+ setbyte sFIELD_1B, 0x0
+ playstatchangeanimation TARGET, 0x6, 0x5
+ playstatchangeanimation TARGET, 0x2, 0x1
+ setstatchanger ATK, 1, TRUE
+ statbuffchange 0x1, BattleScript_TickleTryLowerDef
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TickleTryLowerDef
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+BattleScript_TickleTryLowerDef::
+ playstatchangeanimation TARGET, 0x4, 0x1
+ setstatchanger DEF, 1, TRUE
+ statbuffchange 0x1, BattleScript_TickleEnd
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TickleEnd
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+BattleScript_TickleEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_CantLowerMultipleStats::
+ pause 0x20
+ orbyte gBattleMoveFlags, MOVESTATUS_FAILED
+ printstring STRINGID_STATSWONTDECREASE2
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectCosmicPower::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat ATTACKER, LESS_THAN, DEF, 0xC, BattleScript_CosmicPowerDoMoveAnim
+ jumpifstat ATTACKER, EQUAL, SPDEF, 0xC, BattleScript_CantRaiseMultipleStats
+BattleScript_CosmicPowerDoMoveAnim::
+ attackanimation
+ waitanimation
+ setbyte sFIELD_1B, 0x0
+ playstatchangeanimation ATTACKER, 0x24, 0x0
+ setstatchanger DEF, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_CosmicPowerTrySpDef
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CosmicPowerTrySpDef
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_CosmicPowerTrySpDef::
+ setstatchanger SPDEF, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_CosmicPowerEnd
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CosmicPowerEnd
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_CosmicPowerEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSkyUppercut::
+ orword gHitMarker, HITMARKER_IGNORE_ON_AIR
+ goto BattleScript_EffectHit
+
+BattleScript_EffectBulkUp::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat ATTACKER, LESS_THAN, ATK, 0xC, BattleScript_BulkUpDoMoveAnim
+ jumpifstat ATTACKER, EQUAL, DEF, 0xC, BattleScript_CantRaiseMultipleStats
+BattleScript_BulkUpDoMoveAnim::
+ attackanimation
+ waitanimation
+ setbyte sFIELD_1B, 0x0
+ playstatchangeanimation ATTACKER, 0x6, 0x0
+ setstatchanger ATK, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_BulkUpTryDef
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_BulkUpTryDef
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_BulkUpTryDef::
+ setstatchanger DEF, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_BulkUpEnd
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_BulkUpEnd
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_BulkUpEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectCalmMind::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat ATTACKER, LESS_THAN, SPATK, 0xC, BattleScript_CalmMindDoMoveAnim
+ jumpifstat ATTACKER, EQUAL, SPDEF, 0xC, BattleScript_CantRaiseMultipleStats
+BattleScript_CalmMindDoMoveAnim::
+ attackanimation
+ waitanimation
+ setbyte sFIELD_1B, 0x0
+ playstatchangeanimation ATTACKER, 0x30, 0x0
+ setstatchanger SPATK, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_CalmMindTrySpDef
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CalmMindTrySpDef
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_CalmMindTrySpDef::
+ setstatchanger SPDEF, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_CalmMindEnd
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CalmMindEnd
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_CalmMindEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_CantRaiseMultipleStats::
+ pause 0x20
+ orbyte gBattleMoveFlags, MOVESTATUS_FAILED
+ printstring STRINGID_STATSWONTINCREASE2
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectDragonDance::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat ATTACKER, LESS_THAN, ATK, 0xC, BattleScript_DragonDanceDoMoveAnim
+ jumpifstat ATTACKER, EQUAL, SPEED, 0xC, BattleScript_CantRaiseMultipleStats
+BattleScript_DragonDanceDoMoveAnim::
+ attackanimation
+ waitanimation
+ setbyte sFIELD_1B, 0x0
+ playstatchangeanimation ATTACKER, 0xA, 0x0
+ setstatchanger ATK, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_DragonDanceTrySpeed
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DragonDanceTrySpeed
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_DragonDanceTrySpeed::
+ setstatchanger SPEED, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_DragonDanceEnd
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DragonDanceEnd
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_DragonDanceEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectCamouflage::
+ attackcanceler
+ attackstring
+ ppreduce
+ settypetoterrain BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNCHANGEDTYPE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_FaintAttacker::
+ playfaintcry ATTACKER
+ pause 0x40
+ dofaintanimation ATTACKER
+ cleareffectsonfaint ATTACKER
+ printstring STRINGID_ATTACKERFAINTED
+ return
+
+BattleScript_FaintTarget::
+ playfaintcry TARGET
+ pause 0x40
+ dofaintanimation TARGET
+ cleareffectsonfaint TARGET
+ printstring STRINGID_TARGETFAINTED
+ return
+
+BattleScript_82DA7C4::
+ setbyte sGIVEEXP_STATE, 0x0
+ getexp TARGET
+ end2
+
+BattleScript_82DA7CD::
+ atk24 BattleScript_82DA8F6
+ jumpifbyte NOT_EQUAL, gBattleOutcome, 0, BattleScript_82DA8F5
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TRAINER, BattleScript_82DA816
+ jumpifword NO_COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_82DA816
+ printstring STRINGID_USENEXTPKMN
+ setbyte gBattleCommunication, 0x0
+ yesnobox
+ jumpifbyte EQUAL, gBattleCommunication + 1, 0x0, BattleScript_82DA816
+ jumpifplayerran BattleScript_82DA8F5
+ printstring STRINGID_CANTESCAPE2
+BattleScript_82DA816::
+ openpartyscreen 0x3, BattleScript_82DA8F5
+ switchhandleorder GBANK_1, 0x2
+ jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TRAINER, BattleScript_82DA8D0
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_LINK, BattleScript_82DA8D0
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_x2000000, BattleScript_82DA8D0
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_x100000 | BATTLE_TYPE_PYRAMID, BattleScript_82DA8D0
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_DOUBLE, BattleScript_82DA8D0
+ jumpifword COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_82DA8D0
+ jumpifbyte EQUAL, sBATTLE_STYLE, 0x1, BattleScript_82DA8D0
+ jumpifcantswitch 11, BattleScript_82DA8D0
+ printstring STRINGID_ENEMYABOUTTOSWITCHPKMN
+ setbyte gBattleCommunication, 0x0
+ yesnobox
+ jumpifbyte EQUAL, gBattleCommunication + 1, 0x1, BattleScript_82DA8D0
+ setatktoplayer0
+ openpartyscreen 0x81, BattleScript_82DA8D0
+ switchhandleorder ATTACKER, 0x2
+ jumpifbyte EQUAL, gBattleCommunication, 0x6, BattleScript_82DA8D0
+ atknameinbuff1
+ resetintrimidatetracebits ATTACKER
+ hpthresholds2 ATTACKER
+ printstring STRINGID_RETURNMON
+ switchoutabilities ATTACKER
+ waitstate
+ returnatktoball
+ waitstate
+ drawpartystatussummary ATTACKER
+ getswitchedmondata ATTACKER
+ switchindataupdate ATTACKER
+ hpthresholds ATTACKER
+ printstring STRINGID_SWITCHINMON
+ atk62 ATTACKER
+ switchinanim ATTACKER, 0x0
+ waitstate
+ switchineffects ATTACKER
+ resetsentmonsvalue
+BattleScript_82DA8D0::
+ drawpartystatussummary GBANK_1
+ getswitchedmondata GBANK_1
+ switchindataupdate GBANK_1
+ hpthresholds GBANK_1
+ printstring STRINGID_SWITCHINMON
+ atk62 GBANK_1
+ switchinanim GBANK_1, 0x0
+ waitstate
+ various7 ATTACKER
+ switchineffects GBANK_1
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_DOUBLE, BattleScript_82DA8F5
+ cancelallactions
+BattleScript_82DA8F5::
+ end2
+
+BattleScript_82DA8F6::
+ openpartyscreen 0x5, BattleScript_82DA8FC
+BattleScript_82DA8FC::
+ switchhandleorder GBANK_1, 0x0
+ openpartyscreen 0x6, BattleScript_82DA92C
+ switchhandleorder GBANK_1, 0x0
+BattleScript_82DA908::
+ switchhandleorder GBANK_1, 0x3
+ drawpartystatussummary GBANK_1
+ getswitchedmondata GBANK_1
+ switchindataupdate GBANK_1
+ hpthresholds GBANK_1
+ printstring STRINGID_SWITCHINMON
+ atk62 GBANK_1
+ switchinanim GBANK_1, 0x0
+ waitstate
+ switchineffects 5
+ jumpifbytenotequal gBank1, gNoOfAllBanks, BattleScript_82DA908
+BattleScript_82DA92C::
+ end2
+
+BattleScript_LocalTrainerBattleWon::
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TWO_OPPONENTS, BattleScript_LocalTwoTrainersDefeated
+ printstring STRINGID_PLAYERDEFEATEDTRAINER1
+ goto BattleScript_LocalBattleWonLoseTexts
+BattleScript_LocalTwoTrainersDefeated::
+ printstring STRINGID_TWOENEMIESDEFEATED
+BattleScript_LocalBattleWonLoseTexts::
+ trainerslidein ATTACKER
+ waitstate
+ printstring STRINGID_TRAINER1LOSETEXT
+ jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TWO_OPPONENTS, BattleScript_LocalBattleWonReward
+ trainerslideout IDENTITY_OPPONENT_MON1
+ waitstate
+ trainerslidein GBANK_1
+ waitstate
+ printstring STRINGID_TRAINER2LOSETEXT
+BattleScript_LocalBattleWonReward::
+ getmoneyreward
+ printstring STRINGID_PLAYERGOTMONEY
+ waitmessage 0x40
+BattleScript_PayDayMoneyAndPickUpItems::
+ givepaydaymoney
+ pickup
+ end2
+
+BattleScript_LocalBattleLost::
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_DOME, BattleScript_CheckDomeDrew
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_x100000 | BATTLE_TYPE_PYRAMID, BattleScript_LocalBattleLostPrintTrainersWinText
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_x4000000, BattleScript_LocalBattleLostPrintTrainersWinText
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_EREADER_TRAINER, BattleScript_LocalBattleLostEnd
+ jumpifhalfword EQUAL, gTrainerBattleOpponent_A, 0x400, BattleScript_LocalBattleLostEnd
+BattleScript_LocalBattleLostPrintWhiteOut::
+ printstring STRINGID_PLAYERWHITEOUT
+ waitmessage 0x40
+ printstring STRINGID_PLAYERWHITEOUT2
+ waitmessage 0x40
+BattleScript_LocalBattleLostEnd::
+ end2
+BattleScript_CheckDomeDrew::
+ jumpifbyte EQUAL, gBattleOutcome, DREW, BattleScript_LocalBattleLostEnd_
+BattleScript_LocalBattleLostPrintTrainersWinText::
+ jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TRAINER, BattleScript_LocalBattleLostPrintWhiteOut
+ returnopponentmon1toball ATTACKER
+ waitstate
+ returnopponentmon2toball ATTACKER
+ waitstate
+ trainerslidein ATTACKER
+ waitstate
+ printstring STRINGID_TRAINER1WINTEXT
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_x800000, BattleScript_LocalBattleLostDoTrainer2WinText
+ jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TWO_OPPONENTS, BattleScript_LocalBattleLostEnd_
+BattleScript_LocalBattleLostDoTrainer2WinText::
+ trainerslideout IDENTITY_OPPONENT_MON1
+ waitstate
+ trainerslidein GBANK_1
+ waitstate
+ printstring STRINGID_TRAINER2WINTEXT
+BattleScript_LocalBattleLostEnd_::
+ end2
+
+BattleScript_82DAA0B::
+ returnopponentmon1toball ATTACKER
+ waitstate
+ returnopponentmon2toball ATTACKER
+ waitstate
+ trainerslidein ATTACKER
+ waitstate
+ printstring STRINGID_TRAINER1WINTEXT
+ trainerslideout IDENTITY_OPPONENT_MON1
+ waitstate
+ trainerslidein GBANK_1
+ waitstate
+ printstring STRINGID_TRAINER2WINTEXT
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_RECORDED, BattleScript_82DAA31
+ atk57
+BattleScript_82DAA31::
+ waitmessage 0x40
+ end2
+
+BattleScript_LinkBattleWonOrLost::
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_BATTLE_TOWER, BattleScript_82DAA5C
+ printstring STRINGID_BATTLEEND
+ waitmessage 0x40
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_RECORDED, BattleScript_LinkBattleWonOrLostWaitEnd
+ atk57
+BattleScript_LinkBattleWonOrLostWaitEnd::
+ waitmessage 0x40
+ end2
+
+BattleScript_82DAA5C::
+ playtrainerdefeatbgm ATTACKER
+ printstring STRINGID_BATTLEEND
+ waitmessage 0x40
+ trainerslidein ATTACKER
+ waitstate
+ printstring STRINGID_TRAINER1LOSETEXT
+ trainerslideout IDENTITY_OPPONENT_MON1
+ waitstate
+ trainerslidein GBANK_1
+ waitstate
+ printstring STRINGID_TRAINER2LOSETEXT
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_RECORDED, BattleScript_82DAA83
+ atk57
+BattleScript_82DAA83::
+ waitmessage 0x40
+ end2
+
+BattleScript_FrontierTrainerBattleWon::
+ jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TRAINER, BattleScript_PayDayMoneyAndPickUpItems
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TWO_OPPONENTS, BattleScript_82DAAAB
+ printstring STRINGID_PLAYERDEFEATEDTRAINER1
+ goto BattleScript_82DAAAE
+BattleScript_82DAAAB::
+ printstring STRINGID_TWOENEMIESDEFEATED
+BattleScript_82DAAAE::
+ trainerslidein ATTACKER
+ waitstate
+ printstring STRINGID_TRAINER1LOSETEXT
+ jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TWO_OPPONENTS, BattleScript_82DAACB
+ trainerslideout IDENTITY_OPPONENT_MON1
+ waitstate
+ trainerslidein GBANK_1
+ waitstate
+ printstring STRINGID_TRAINER2LOSETEXT
+BattleScript_82DAACB::
+ jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_PYRAMID, BattleScript_82DAADA
+ pickup
+BattleScript_82DAADA::
+ end2
+
+BattleScript_SmokeBallEscape::
+ playanimation ATTACKER, ANIM_SMOKEBALL_ESCAPE, NULL
+ printstring STRINGID_PKMNFLEDUSINGITS
+ waitmessage 0x40
+ end2
+
+BattleScript_RanAwayUsingMonAbility::
+ printstring STRINGID_PKMNFLEDUSING
+ waitmessage 0x40
+ end2
+
+BattleScript_GotAwaySafely::
+ printstring STRINGID_GOTAWAYSAFELY
+ waitmessage 0x40
+ end2
+
+BattleScript_WildMonFled::
+ printstring STRINGID_WILDPKMNFLED
+ waitmessage 0x40
+ end2
+
+BattleScript_PrintCantRunFromTrainer::
+ printstring STRINGID_NORUNNINGFROMTRAINERS
+ end2
+
+BattleScript_PrintFailedToRunString::
+ printfromtable gNoEscapeStringIds
+ waitmessage 0x40
+ end2
+
+BattleScript_PrintCantEscapeFromBattle::
+ printselectionstringfromtable gNoEscapeStringIds
+ endselectionscript
+
+BattleScript_PrintFullBox::
+ printselectionstring STRINGID_BOXISFULL
+ endselectionscript
+
+BattleScript_ActionSwitch::
+ hpthresholds2 ATTACKER
+ printstring STRINGID_RETURNMON
+ setbyte sDMG_MULTIPLIER, 0x2
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_DOUBLE, BattleScript_82DAB35
+ setmultihit 0x1
+ goto BattleScript_82DAB37
+
+BattleScript_82DAB35::
+ setmultihit 0x2
+BattleScript_82DAB37::
+ jumpifnopursuitswitchdmg BattleScript_82DAB44
+ atk5F
+ trysetdestinybondtohappen
+ call BattleScript_82DAB77
+ atk5F
+BattleScript_82DAB44::
+ decrementmultihit BattleScript_82DAB37
+ switchoutabilities ATTACKER
+ waitstate
+ returnatktoball
+ waitstate
+ drawpartystatussummary ATTACKER
+ switchhandleorder ATTACKER, 0x1
+ getswitchedmondata ATTACKER
+ switchindataupdate ATTACKER
+ hpthresholds ATTACKER
+ printstring STRINGID_SWITCHINMON
+ atk62 ATTACKER
+ switchinanim ATTACKER, 0x0
+ waitstate
+ switchineffects ATTACKER
+ setbyte sMOVEEND_STATE, 0x4
+ moveend 0x1, 0x0
+ setbyte sMOVEEND_STATE, 0xF
+ moveend 0x1, 0x0
+ end2
+
+BattleScript_82DAB77::
+ pause 0x20
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ typecalc
+ adjustnormaldamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ critmessage
+ waitmessage 0x40
+ resultmessage
+ waitmessage 0x40
+ tryfaintmon TARGET, FALSE, NULL
+ setbyte sMOVEEND_STATE, 0x3
+ moveend 0x2, 0x6
+ various4 TARGET
+ jumpifbyte EQUAL, gBattleCommunication, 0x0, BattleScript_82DABB8
+ setbyte sGIVEEXP_STATE, 0x0
+ getexp TARGET
+BattleScript_82DABB8::
+ return
+
+BattleScript_Pausex20::
+ pause 0x20
+ return
+
+BattleScript_LevelUp::
+ fanfare BGM_FANFA1
+ printstring STRINGID_PKMNGREWTOLV
+ setbyte sLVLBOX_STATE, 0x0
+ drawlvlupbox
+ handlelearnnewmove BattleScript_LearnedNewMove, BattleScript_LearnMoveReturn, TRUE
+ goto BattleScript_AskToLearnMove
+BattleScript_TryLearnMoveLoop::
+ handlelearnnewmove BattleScript_LearnedNewMove, BattleScript_LearnMoveReturn, FALSE
+BattleScript_AskToLearnMove::
+ buffermovetolearn
+ printstring STRINGID_TRYTOLEARNMOVE1
+ printstring STRINGID_TRYTOLEARNMOVE2
+ printstring STRINGID_TRYTOLEARNMOVE3
+ waitstate
+ setbyte sLEARNMOVE_STATE, 0x0
+ yesnoboxlearnmove BattleScript_ForgotAndLearnedNewMove
+ printstring STRINGID_STOPLEARNINGMOVE
+ waitstate
+ setbyte sLEARNMOVE_STATE, 0x0
+ yesnoboxstoplearningmove BattleScript_AskToLearnMove
+ printstring STRINGID_DIDNOTLEARNMOVE
+ goto BattleScript_TryLearnMoveLoop
+BattleScript_ForgotAndLearnedNewMove::
+ printstring STRINGID_123POOF
+ printstring STRINGID_PKMNFORGOTMOVE
+ printstring STRINGID_ANDELLIPSIS
+BattleScript_LearnedNewMove::
+ buffermovetolearn
+ fanfare BGM_FANFA1
+ printstring STRINGID_PKMNLEARNEDMOVE
+ waitmessage 0x40
+ updatechoicemoveonlvlup ATTACKER
+ goto BattleScript_TryLearnMoveLoop
+BattleScript_LearnMoveReturn::
+ return
+
+BattleScript_RainContinuesOrEnds::
+ printfromtable gRainContinuesStringIds
+ waitmessage 0x40
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_RainContinuesOrEndsEnd
+ playanimation ATTACKER, ANIM_RAIN_CONTINUES, NULL
+BattleScript_RainContinuesOrEndsEnd::
+ end2
+
+BattleScript_DamagingWeatherContinues::
+ printfromtable gSandStormHailContinuesStringIds
+ waitmessage 0x40
+ playanimation2 ATTACKER, sANIM_ARG1, NULL
+ setbyte gBattleCommunication, 0x0
+BattleScript_DamagingWeatherLoop::
+ copyarraywithindex gBankAttacker, gBanksByTurnOrder, gBattleCommunication, 0x1
+ weatherdamage
+ jumpifword EQUAL, gBattleMoveDamage, 0x0, BattleScript_DamagingWeatherLoopIncrement
+ printfromtable gSandStormHailDmgStringIds
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_x20 | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 | HITMARKER_GRUDGE
+ effectivenesssound
+ hitanimation ATTACKER
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ tryfaintmon ATTACKER, FALSE, NULL
+ atk24 BattleScript_DamagingWeatherLoopIncrement
+BattleScript_DamagingWeatherLoopIncrement::
+ jumpifbyte NOT_EQUAL, gBattleOutcome, 0, BattleScript_DamagingWeatherContinuesEnd
+ addbyte gBattleCommunication, 0x1
+ jumpifbytenotequal gBattleCommunication, gNoOfAllBanks, BattleScript_DamagingWeatherLoop
+BattleScript_DamagingWeatherContinuesEnd::
+ bicword gHitMarker, HITMARKER_x20 | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 | HITMARKER_GRUDGE
+ end2
+
+BattleScript_SandStormHailEnds::
+ printfromtable gSandStormHailEndStringIds
+ waitmessage 0x40
+ end2
+
+BattleScript_SunlightContinues::
+ printstring STRINGID_SUNLIGHTSTRONG
+ waitmessage 0x40
+ playanimation ATTACKER, ANIM_SUN_CONTINUES, NULL
+ end2
+
+BattleScript_SunlightFaded::
+ printstring STRINGID_SUNLIGHTFADED
+ waitmessage 0x40
+ end2
+
+BattleScript_OverworldWeatherStarts::
+ printfromtable gWeatherContinuesStringIds
+ waitmessage 0x40
+ playanimation2 ATTACKER, sANIM_ARG1, NULL
+ end3
+
+BattleScript_SideStatusWoreOff::
+ printstring STRINGID_PKMNSXWOREOFF
+ waitmessage 0x40
+ end2
+
+BattleScript_SafeguardProtected::
+ pause 0x20
+ printstring STRINGID_PKMNUSEDSAFEGUARD
+ waitmessage 0x40
+ end2
+
+BattleScript_SafeguardEnds::
+ pause 0x20
+ printstring STRINGID_PKMNSAFEGUARDEXPIRED
+ waitmessage 0x40
+ end2
+
+BattleScript_LeechSeedTurnDrain::
+ playanimation ATTACKER, ANIM_LEECH_SEED_DRAIN, sANIM_ARG1
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ copyword gBattleMoveDamage, gHpDealt
+ jumpifability ATTACKER, ABILITY_LIQUID_OOZE, BattleScript_82DAD47
+ manipulatedamage ATK80_DMG_CHANGE_SIGN
+ setbyte cMULTISTRING_CHOOSER, 0x3
+ goto BattleScript_82DAD4D
+
+BattleScript_82DAD47::
+ setbyte cMULTISTRING_CHOOSER, 0x4
+BattleScript_82DAD4D::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ printfromtable gLeechSeedStringIds
+ waitmessage 0x40
+ tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon TARGET, FALSE, NULL
+ end2
+
+BattleScript_BideStoringEnergy::
+ printstring STRINGID_PKMNSTORINGENERGY
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_BideAttack::
+ attackcanceler
+ setmoveeffect EFFECT_CHARGING
+ clearstatusfromeffect ATTACKER
+ printstring STRINGID_PKMNUNLEASHEDENERGY
+ waitmessage 0x40
+ accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE
+ typecalc
+ bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE
+ copyword gBattleMoveDamage, sBIDE_DMG
+ adjustsetdamage
+ setbyte sANIM_TURN, 0x1
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ resultmessage
+ waitmessage 0x40
+ tryfaintmon TARGET, FALSE, NULL
+ goto BattleScript_MoveEnd
+
+BattleScript_BideNoEnergyToAttack::
+ attackcanceler
+ setmoveeffect EFFECT_CHARGING
+ clearstatusfromeffect ATTACKER
+ printstring STRINGID_PKMNUNLEASHEDENERGY
+ waitmessage 0x40
+ goto BattleScript_ButItFailed
+
+BattleScript_82DADD8::
+ attackanimation
+ waitanimation
+ switchoutabilities TARGET
+ returntoball TARGET
+ waitstate
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_TRAINER, BattleScript_82DADF1
+ setoutcomeonteleport ATTACKER
+ finishaction
+
+BattleScript_82DADF1::
+ getswitchedmondata TARGET
+ switchindataupdate TARGET
+ switchinanim TARGET, 0x0
+ waitstate
+ printstring STRINGID_PKMNWASDRAGGEDOUT
+ switchineffects TARGET
+ goto BattleScript_MoveEnd
+
+BattleScript_MistProtected::
+ pause 0x20
+ printstring STRINGID_PKMNPROTECTEDBYMIST
+ waitmessage 0x40
+ return
+
+BattleScript_RageIsBuilding::
+ printstring STRINGID_PKMNRAGEBUILDING
+ waitmessage 0x40
+ return
+
+BattleScript_MoveUsedIsDisabled::
+ printstring STRINGID_PKMNMOVEISDISABLED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_SelectingDisabledMove::
+ printselectionstring STRINGID_PKMNMOVEISDISABLED
+ endselectionscript
+
+BattleScript_DisabledNoMore::
+ printstring STRINGID_PKMNMOVEDISABLEDNOMORE
+ waitmessage 0x40
+ end2
+
+BattleScript_82DAE2A::
+ printstring STRINGID_PKMNMOVEISDISABLED
+BattleScript_82DAE2D::
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ end
+
+BattleScript_EncoredNoMore::
+ printstring STRINGID_PKMNENCOREENDED
+ waitmessage 0x40
+ end2
+
+BattleScript_DestinyBondTakesLife::
+ printstring STRINGID_PKMNTOOKFOE
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ tryfaintmon ATTACKER, FALSE, NULL
+ return
+
+BattleScript_SpikesOnAttacker::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ call BattleScript_82DAEFE
+ tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon ATTACKER, TRUE, BattleScript_82DAE7A
+ return
+
+BattleScript_82DAE7A::
+ setbyte sGIVEEXP_STATE, 0x0
+ getexp ATTACKER
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x0, 0x0
+ goto BattleScript_82DA7CD
+
+BattleScript_SpikesOnTarget::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ call BattleScript_82DAEFE
+ tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon TARGET, TRUE, BattleScript_82DAEB1
+ return
+
+BattleScript_82DAEB1::
+ setbyte sGIVEEXP_STATE, 0x0
+ getexp TARGET
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x0, 0x0
+ goto BattleScript_82DA7CD
+
+BattleScript_SpikesOngBank1::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate GBANK_1
+ datahpupdate GBANK_1
+ call BattleScript_82DAEFE
+ tryfaintmon GBANK_1, FALSE, NULL
+ tryfaintmon GBANK_1, TRUE, BattleScript_82DAEE8
+ return
+
+BattleScript_82DAEE8::
+ setbyte sGIVEEXP_STATE, 0x0
+ getexp GBANK_1
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x0, 0x0
+ goto BattleScript_82DA7CD
+
+BattleScript_82DAEFE::
+ printstring STRINGID_PKMNHURTBYSPIKES
+ waitmessage 0x40
+ return
+
+BattleScript_PerishSongTakesLife::
+ printstring STRINGID_PKMNPERISHCOUNTFELL
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ tryfaintmon ATTACKER, FALSE, NULL
+ end2
+
+BattleScript_PerishSongCountGoesDown::
+ printstring STRINGID_PKMNPERISHCOUNTFELL
+ waitmessage 0x40
+ end2
+
+BattleScript_AllStatsUp::
+ jumpifstat ATTACKER, LESS_THAN, ATK, 0xC, BattleScript_82DAF54
+ jumpifstat ATTACKER, LESS_THAN, DEF, 0xC, BattleScript_82DAF54
+ jumpifstat ATTACKER, LESS_THAN, SPEED, 0xC, BattleScript_82DAF54
+ jumpifstat ATTACKER, LESS_THAN, SPATK, 0xC, BattleScript_82DAF54
+ jumpifstat ATTACKER, EQUAL, SPDEF, 0xC, BattleScript_82DAFC2
+BattleScript_82DAF54::
+ setbyte sFIELD_1B, 0x0
+ playstatchangeanimation ATTACKER, 0x3E, 0x0
+ setstatchanger ATK, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_82DAF72
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_82DAF72::
+ setstatchanger DEF, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_82DAF86
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_82DAF86::
+ setstatchanger SPEED, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_82DAF9A
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_82DAF9A::
+ setstatchanger SPATK, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_82DAFAE
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_82DAFAE::
+ setstatchanger SPDEF, 1, FALSE
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_82DAFC2
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+BattleScript_82DAFC2::
+ return
+
+BattleScript_RapidSpinAway::
+ rapidspinfree
+ return
+
+BattleScript_WrapFree::
+ printstring STRINGID_PKMNGOTFREE
+ waitmessage 0x40
+ copybyte gBankTarget, sBANK
+ return
+
+BattleScript_LeechSeedFree::
+ printstring STRINGID_PKMNSHEDLEECHSEED
+ waitmessage 0x40
+ return
+
+BattleScript_SpikesFree::
+ printstring STRINGID_PKMNBLEWAWAYSPIKES
+ waitmessage 0x40
+ return
+
+BattleScript_MonTookFutureAttack::
+ printstring STRINGID_PKMNTOOKATTACK
+ waitmessage 0x40
+ jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x0, BattleScript_82DB001
+ accuracycheck BattleScript_82DB058, MOVE_FUTURE_SIGHT
+ goto BattleScript_82DB008
+BattleScript_82DB001::
+ accuracycheck BattleScript_82DB058, MOVE_DOOM_DESIRE
+BattleScript_82DB008::
+ adjustnormaldamage2
+ jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x0, BattleScript_82DB020
+ playanimation ATTACKER, ANIM_FUTURE_SIGHT_HIT, NULL
+ goto BattleScript_82DB027
+BattleScript_82DB020::
+ playanimation ATTACKER, ANIM_x13, NULL
+BattleScript_82DB027::
+ effectivenesssound
+ hitanimation TARGET
+ waitstate
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ resultmessage
+ waitmessage 0x40
+ tryfaintmon TARGET, FALSE, NULL
+ atk24 BattleScript_82DB03F
+BattleScript_82DB03F::
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x1, 0x0
+ setbyte sMOVEEND_STATE, 0xB
+ moveend 0x2, 0xE
+ setbyte gBattleMoveFlags, 0
+ end2
+BattleScript_82DB058::
+ pause 0x20
+ setbyte gBattleMoveFlags, 0
+ orbyte gBattleMoveFlags, MOVESTATUS_FAILED
+ resultmessage
+ waitmessage 0x40
+ setbyte gBattleMoveFlags, 0
+ end2
+
+BattleScript_NoMovesLeft::
+ printselectionstring STRINGID_PKMNHASNOMOVESLEFT
+ endselectionscript
+
+BattleScript_SelectingMoveWithNoPP::
+ printselectionstring STRINGID_NOPPLEFT
+ endselectionscript
+
+BattleScript_NoPPForMove::
+ attackstring
+ pause 0x20
+ printstring STRINGID_BUTNOPPLEFT
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_SelectingTormentedMove::
+ printselectionstring STRINGID_PKMNCANTUSEMOVETORMENT
+ endselectionscript
+
+BattleScript_82DB08D::
+ printstring STRINGID_PKMNCANTUSEMOVETORMENT
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_82DB098::
+ printstring STRINGID_PKMNCANTUSEMOVETORMENT
+ goto BattleScript_82DAE2D
+
+BattleScript_SelectingNotAllowedMoveTaunt::
+ printselectionstring STRINGID_PKMNCANTUSEMOVETAUNT
+ endselectionscript
+
+BattleScript_MoveUsedIsTaunted::
+ printstring STRINGID_PKMNCANTUSEMOVETAUNT
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_82DB0AF::
+ printstring STRINGID_PKMNCANTUSEMOVETAUNT
+ goto BattleScript_82DAE2D
+
+BattleScript_WishComesTrue::
+ trywish 0x1, BattleScript_82DB0DE
+ playanimation TARGET, ANIM_WISH_HEAL, NULL
+ printstring STRINGID_PKMNWISHCAMETRUE
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ printstring STRINGID_PKMNREGAINEDHEALTH
+ waitmessage 0x40
+ end2
+
+BattleScript_82DB0DE::
+ printstring STRINGID_PKMNWISHCAMETRUE
+ waitmessage 0x40
+ pause 0x20
+ printstring STRINGID_PKMNHPFULL
+ waitmessage 0x40
+ end2
+
+BattleScript_IngrainTurnHeal::
+ playanimation ATTACKER, ANIM_INGRAIN_HEAL, NULL
+ printstring STRINGID_PKMNABSORBEDNUTRIENTS
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ end2
+
+BattleScript_82DB109::
+ pause 0x20
+ printstring STRINGID_PKMNANCHOREDITSELF
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_AtkDefDown::
+ setbyte sFIELD_1B, 0x0
+ playstatchangeanimation ATTACKER, 0x6, 0xD
+ playstatchangeanimation ATTACKER, 0x2, 0x9
+ setstatchanger ATK, 1, TRUE
+ statbuffchange AFFECTS_USER | CERTAIN | 0x1, BattleScript_82DB144
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB144
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+BattleScript_82DB144::
+ playstatchangeanimation ATTACKER, 0x4, 0x9
+ setstatchanger DEF, 1, TRUE
+ statbuffchange AFFECTS_USER | CERTAIN | 0x1, BattleScript_82DB167
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB167
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+BattleScript_82DB167::
+ return
+
+BattleScript_KnockedOff::
+ playanimation TARGET, ANIM_ITEM_KNOCKOFF, NULL
+ printstring STRINGID_PKMNKNOCKEDOFF
+ waitmessage 0x40
+ return
+
+BattleScript_MoveUsedIsImprisoned::
+ printstring STRINGID_PKMNCANTUSEMOVESEALED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_SelectingImprisionedMove::
+ printselectionstring STRINGID_PKMNCANTUSEMOVESEALED
+ endselectionscript
+
+BattleScript_82DB185::
+ printstring STRINGID_PKMNCANTUSEMOVESEALED
+ goto BattleScript_82DAE2D
+
+BattleScript_GrudgeTakesPp::
+ printstring STRINGID_PKMNLOSTPPGRUDGE
+ waitmessage 0x40
+ return
+
+BattleScript_MagicCoatBounce::
+ attackstring
+ ppreduce
+ pause 0x20
+ printstring STRINGID_PKMNMOVEBOUNCED
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_x800000
+ setmagiccoattarget ATTACKER
+ return
+
+BattleScript_SnatchedMove::
+ attackstring
+ ppreduce
+ snatchsetbanks
+ playanimation TARGET, ANIM_SNATCH_MOVE, NULL
+ printstring STRINGID_PKMNSNATCHEDMOVE
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_x800000
+ atk5F
+ return
+
+BattleScript_EnduredMsg::
+ printstring STRINGID_PKMNENDUREDHIT
+ waitmessage 0x40
+ return
+
+BattleScript_OneHitKOMsg::
+ printstring STRINGID_ONEHITKO
+ waitmessage 0x40
+ return
+
+BattleScript_SAtkDown2::
+ setbyte sFIELD_1B, 0x0
+ playstatchangeanimation ATTACKER, 0x10, 0xB
+ setstatchanger SPATK, 2, TRUE
+ statbuffchange AFFECTS_USER | CERTAIN | 0x1, BattleScript_82DB1FE
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB1FE
+ printfromtable gStatDownStringIds
+ waitmessage 0x40
+BattleScript_82DB1FE::
+ return
+
+BattleScript_FocusPunchSetUp::
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 0x1
+ playanimation ATTACKER, ANIM_x14, NULL
+ printstring STRINGID_PKMNTIGHTENINGFOCUS
+ waitmessage 0x40
+ end2
+
+BattleScript_MoveUsedIsAsleep::
+ printstring STRINGID_PKMNFASTASLEEP
+ waitmessage 0x40
+ statusanimation ATTACKER
+ goto BattleScript_MoveEnd
+
+BattleScript_MoveUsedWokeUp::
+ bicword gHitMarker, HITMARKER_x10
+ printfromtable gWokeUpStringIds
+ waitmessage 0x40
+ updatestatusicon ATTACKER
+ return
+
+BattleScript_MonWokeUpInUproar::
+ printstring STRINGID_PKMNWOKEUPINUPROAR
+ waitmessage 0x40
+ updatestatusicon ATTACKER
+ end2
+
+BattleScript_PoisonTurnDmg::
+ printstring STRINGID_PKMNHURTBYPOISON
+ waitmessage 0x40
+BattleScript_82DB243::
+ statusanimation ATTACKER
+BattleScript_82DB245::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ tryfaintmon ATTACKER, FALSE, NULL
+ atk24 BattleScript_82DB25E
+BattleScript_82DB25E::
+ end2
+
+BattleScript_BurnTurnDmg::
+ printstring STRINGID_PKMNHURTBYBURN
+ waitmessage 0x40
+ goto BattleScript_82DB243
+
+BattleScript_MoveUsedIsFrozen::
+ printstring STRINGID_PKMNISFROZEN
+ waitmessage 0x40
+ statusanimation ATTACKER
+ goto BattleScript_MoveEnd
+
+BattleScript_MoveUsedUnfroze::
+ printfromtable gGotDefrostedStringIds
+ waitmessage 0x40
+ updatestatusicon ATTACKER
+ return
+
+BattleScript_DefrostedViaFireMove::
+ printstring STRINGID_PKMNWASDEFROSTED
+ waitmessage 0x40
+ updatestatusicon TARGET
+ return
+
+BattleScript_MoveUsedIsParalyzed::
+ printstring STRINGID_PKMNISPARALYZED
+ waitmessage 0x40
+ statusanimation ATTACKER
+ cancelmultiturnmoves ATTACKER
+ goto BattleScript_MoveEnd
+
+BattleScript_MoveUsedFlinched::
+ printstring STRINGID_PKMNFLINCHED
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_PrintUproarOverTurns::
+ printfromtable gUproarOverTurnStringIds
+ waitmessage 0x40
+ end2
+
+BattleScript_ThrashConfuses::
+ chosenstatus2animation ATTACKER, STATUS2_CONFUSION
+ printstring STRINGID_PKMNFATIGUECONFUSION
+ waitmessage 0x40
+ end2
+
+BattleScript_MoveUsedIsConfused::
+ printstring STRINGID_PKMNISCONFUSED
+ waitmessage 0x40
+ status2animation ATTACKER, STATUS2_CONFUSION
+ jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x0, BattleScript_82DB2FF
+BattleScript_82DB2D4::
+ cancelmultiturnmoves ATTACKER
+ adjustnormaldamage2
+ printstring STRINGID_ITHURTCONFUSION
+ waitmessage 0x40
+ effectivenesssound
+ hitanimation ATTACKER
+ waitstate
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ resultmessage
+ waitmessage 0x40
+ tryfaintmon ATTACKER, FALSE, NULL
+ goto BattleScript_MoveEnd
+BattleScript_82DB2FF::
+ return
+
+BattleScript_MoveUsedIsConfusedNoMore::
+ printstring STRINGID_PKMNHEALEDCONFUSION
+ waitmessage 0x40
+ return
+
+BattleScript_PrintPayDayMoneyString::
+ printstring STRINGID_PKMNPICKEDUPITEM
+ waitmessage 0x40
+ return
+
+BattleScript_WrapTurnDmg::
+ playanimation ATTACKER, ANIM_TURN_TRAP, sANIM_ARG1
+ printstring STRINGID_PKMNHURTBY
+ waitmessage 0x40
+ goto BattleScript_82DB245
+
+BattleScript_WrapEnds::
+ printstring STRINGID_PKMNFREEDFROM
+ waitmessage 0x40
+ end2
+
+BattleScript_MoveUsedIsInLove::
+ printstring STRINGID_PKMNINLOVE
+ waitmessage 0x40
+ status2animation ATTACKER, STATUS2_INFATUATION
+ return
+
+BattleScript_MoveUsedIsParalyzedCantAttack::
+ printstring STRINGID_PKMNIMMOBILIZEDBYLOVE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_NightmareTurnDmg::
+ printstring STRINGID_PKMNLOCKEDINNIGHTMARE
+ waitmessage 0x40
+ status2animation ATTACKER, STATUS2_NIGHTMARE
+ goto BattleScript_82DB245
+
+BattleScript_CurseTurnDmg::
+ printstring STRINGID_PKMNAFFLICTEDBYCURSE
+ waitmessage 0x40
+ status2animation ATTACKER, STATUS2_CURSED
+ goto BattleScript_82DB245
+
+BattleScript_TargetPRLZHeal::
+ printstring STRINGID_PKMNHEALEDPARALYSIS
+ waitmessage 0x40
+ updatestatusicon TARGET
+ return
+
+BattleScript_MoveEffectSleep::
+ statusanimation EFFECT_BANK
+ printfromtable gFellAsleepStringIds
+ waitmessage 0x40
+BattleScript_82DB374::
+ updatestatusicon EFFECT_BANK
+ waitstate
+ return
+
+BattleScript_YawnMakesAsleep::
+ statusanimation EFFECT_BANK
+ printstring STRINGID_PKMNFELLASLEEP
+ waitmessage 0x40
+ updatestatusicon EFFECT_BANK
+ waitstate
+ makevisible EFFECT_BANK
+ end2
+
+BattleScript_MoveEffectPoison::
+ statusanimation EFFECT_BANK
+ printfromtable gGotPoisonedStringIds
+ waitmessage 0x40
+ goto BattleScript_82DB374
+
+BattleScript_MoveEffectBurn::
+ statusanimation EFFECT_BANK
+ printfromtable gGotBurnedStringIds
+ waitmessage 0x40
+ goto BattleScript_82DB374
+
+BattleScript_MoveEffectFreeze::
+ statusanimation EFFECT_BANK
+ printfromtable gGotFrozenStringIds
+ waitmessage 0x40
+ goto BattleScript_82DB374
+
+BattleScript_MoveEffectParalysis::
+ statusanimation EFFECT_BANK
+ printfromtable gGotParalyzedStringIds
+ waitmessage 0x40
+ goto BattleScript_82DB374
+
+BattleScript_MoveEffectUproar::
+ printstring STRINGID_PKMNCAUSEDUPROAR
+ waitmessage 0x40
+ return
+
+BattleScript_MoveEffectToxic::
+ statusanimation EFFECT_BANK
+ printstring STRINGID_PKMNBADLYPOISONED
+ waitmessage 0x40
+ goto BattleScript_82DB374
+
+BattleScript_MoveEffectPayDay::
+ printstring STRINGID_COINSSCATTERED
+ waitmessage 0x40
+ return
+
+BattleScript_MoveEffectWrap::
+ printfromtable gWrappedStringIds
+ waitmessage 0x40
+ return
+
+BattleScript_MoveEffectConfusion::
+ chosenstatus2animation EFFECT_BANK, STATUS2_CONFUSION
+ printstring STRINGID_PKMNWASCONFUSED
+ waitmessage 0x40
+ return
+
+BattleScript_MoveEffectRecoil33::
+ jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil33
+ jumpifability ATTACKER, ABILITY_ROCK_HEAD, BattleScript_Recoil33End
+BattleScript_DoRecoil33::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ printstring STRINGID_PKMNHITWITHRECOIL
+ waitmessage 0x40
+ tryfaintmon ATTACKER, FALSE, NULL
+BattleScript_Recoil33End::
+ return
+
+BattleScript_ItemSteal::
+ playanimation TARGET, ANIM_ITEM_STEAL, NULL
+ printstring STRINGID_PKMNSTOLEITEM
+ waitmessage 0x40
+ return
+
+BattleScript_DrizzleActivates::
+ pause 0x20
+ printstring STRINGID_PKMNMADEITRAIN
+ waitstate
+ playanimation BANK0, ANIM_RAIN_CONTINUES, NULL
+ call BattleScript_WeatherFormChanges
+ end3
+
+BattleScript_SpeedBoostActivates::
+ playanimation ATTACKER, ANIM_STATS_CHANGE, sANIM_ARG1
+ printstring STRINGID_PKMNRAISEDSPEED
+ waitmessage 0x40
+ end3
+
+BattleScript_TraceActivates::
+ pause 0x20
+ printstring STRINGID_PKMNTRACED
+ waitmessage 0x40
+ end3
+
+BattleScript_RainDishActivates::
+ printstring STRINGID_PKMNSXRESTOREDHPALITTLE2
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ end3
+
+BattleScript_SandstreamActivates::
+ pause 0x20
+ printstring STRINGID_PKMNSXWHIPPEDUPSANDSTORM
+ waitstate
+ playanimation BANK0, ANIM_SANDSTORM_CONTINUES, NULL
+ call BattleScript_WeatherFormChanges
+ end3
+
+BattleScript_ShedSkinActivates::
+ printstring STRINGID_PKMNSXCUREDYPROBLEM
+ waitmessage 0x40
+ updatestatusicon ATTACKER
+ end3
+
+BattleScript_WeatherFormChanges::
+ setbyte sBANK, 0x0
+BattleScript_WeatherFormChangesLoop::
+ trycastformdatachange
+ addbyte sBANK, 0x1
+ jumpifbytenotequal sBANK, gNoOfAllBanks, BattleScript_WeatherFormChangesLoop
+ return
+
+BattleScript_CastformChange::
+ call BattleScript_82DB4AF
+ end3
+
+BattleScript_82DB4AF::
+ docastformchangeanimation
+ waitstate
+ printstring STRINGID_PKMNTRANSFORMED
+ waitmessage 0x40
+ return
+
+BattleScript_82DB4B8::
+ call BattleScript_82DB4BE
+ end3
+
+BattleScript_82DB4BE::
+ pause 0x20
+BattleScript_82DB4C1::
+ setbyte gBankTarget, 0x0
+ setstatchanger ATK, 1, TRUE
+BattleScript_82DB4CD::
+ trygetintimidatetarget BattleScript_82DB51B
+ jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_82DB510
+ jumpifability TARGET, ABILITY_CLEAR_BODY, BattleScript_82DB51C
+ jumpifability TARGET, ABILITY_HYPER_CUTTER, BattleScript_82DB51C
+ jumpifability TARGET, ABILITY_WHITE_SMOKE, BattleScript_82DB51C
+ statbuffchange 0x21, BattleScript_82DB510
+ jumpifbyte GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DB510
+ setgraphicalstatchangevalues
+ playanimation TARGET, ANIM_STATS_CHANGE, sANIM_ARG1
+ printstring STRINGID_PKMNCUTSATTACKWITH
+ waitmessage 0x40
+BattleScript_82DB510::
+ addbyte gBankTarget, 0x1
+ goto BattleScript_82DB4CD
+BattleScript_82DB51B::
+ return
+
+BattleScript_82DB51C::
+ pause 0x20
+ printstring STRINGID_PREVENTEDFROMWORKING
+ waitmessage 0x40
+ goto BattleScript_82DB510
+
+BattleScript_DroughtActivates::
+ pause 0x20
+ printstring STRINGID_PKMNSXINTENSIFIEDSUN
+ waitstate
+ playanimation BANK0, ANIM_SUN_CONTINUES, NULL
+ call BattleScript_WeatherFormChanges
+ end3
+
+BattleScript_TookAttack::
+ attackstring
+ pause 0x20
+ printstring STRINGID_PKMNSXTOOKATTACK
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED
+ return
+
+BattleScript_SturdyPreventsOHKO::
+ pause 0x20
+ printstring STRINGID_PKMNPROTECTEDBY
+ pause 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_DampStopsExplosion::
+ pause 0x20
+ printstring STRINGID_PKMNPREVENTSUSAGE
+ pause 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_MoveHPDrain_PPLoss::
+ ppreduce
+BattleScript_MoveHPDrain::
+ attackstring
+ pause 0x20
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate TARGET
+ datahpupdate TARGET
+ printstring STRINGID_PKMNRESTOREDHPUSING
+ waitmessage 0x40
+ orbyte gBattleMoveFlags, MOVESTATUS_NOTAFFECTED
+ goto BattleScript_MoveEnd
+
+BattleScript_MonMadeMoveUseless_PPLoss::
+ ppreduce
+BattleScript_MonMadeMoveUseless::
+ attackstring
+ pause 0x20
+ printstring STRINGID_PKMNSXMADEYUSELESS
+ waitmessage 0x40
+ orbyte gBattleMoveFlags, MOVESTATUS_NOTAFFECTED
+ goto BattleScript_MoveEnd
+
+BattleScript_FlashFireBoost_PPLoss::
+ ppreduce
+BattleScript_FlashFireBoost::
+ attackstring
+ pause 0x20
+ printfromtable gFlashFireStringIds
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_82DB5B9::
+ pause 0x20
+ printstring STRINGID_PKMNANCHORSITSELFWITH
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_AbilityNoStatLoss::
+ pause 0x20
+ printstring STRINGID_PKMNPREVENTSSTATLOSSWITH
+ waitmessage 0x40
+ return
+
+BattleScript_BRNPrevention::
+ pause 0x20
+ printfromtable gBRNPreventionStringIds
+ waitmessage 0x40
+ return
+
+BattleScript_PRLZPrevention::
+ pause 0x20
+ printfromtable gPRLZPreventionStringIds
+ waitmessage 0x40
+ return
+
+BattleScript_PSNPrevention::
+ pause 0x20
+ printfromtable gPSNPreventionStringIds
+ waitmessage 0x40
+ return
+
+BattleScript_ObliviousPreventsAttraction::
+ pause 0x20
+ printstring STRINGID_PKMNPREVENTSROMANCEWITH
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_FlinchPrevention::
+ pause 0x20
+ printstring STRINGID_PKMNSXPREVENTSFLINCHING
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_OwnTempoPrevents::
+ pause 0x20
+ printstring STRINGID_PKMNPREVENTSCONFUSIONWITH
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_SoundproofProtected::
+ attackstring
+ ppreduce
+ pause 0x20
+ printstring STRINGID_PKMNSXBLOCKSY
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_AbilityNoSpecificStatLoss::
+ pause 0x20
+ printstring STRINGID_PKMNSXPREVENTSYLOSS
+ waitmessage 0x40
+ setbyte cMULTISTRING_CHOOSER, 0x3
+ return
+
+BattleScript_StickyHoldActivates::
+ pause 0x20
+ printstring STRINGID_PKMNSXMADEYINEFFECTIVE
+ waitmessage 0x40
+ goto BattleScript_MoveEnd
+
+BattleScript_ColorChangeActivates::
+ printstring STRINGID_PKMNCHANGEDTYPEWITH
+ waitmessage 0x40
+ return
+
+BattleScript_RoughSkinActivates::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ printstring STRINGID_PKMNHURTSWITH
+ waitmessage 0x40
+ tryfaintmon ATTACKER, FALSE, NULL
+ return
+
+BattleScript_CuteCharmActivates::
+ status2animation ATTACKER, STATUS2_INFATUATION
+ printstring STRINGID_PKMNSXINFATUATEDY
+ waitmessage 0x40
+ return
+
+BattleScript_ApplySecondaryEffect::
+ waitstate
+ seteffectsecondary
+ return
+
+BattleScript_SynchronizeActivates::
+ waitstate
+ seteffectprimary
+ return
+
+BattleScript_NoItemSteal::
+ pause 0x20
+ printstring STRINGID_PKMNSXMADEYINEFFECTIVE
+ waitmessage 0x40
+ return
+
+BattleScript_AbilityCuredStatus::
+ printstring STRINGID_PKMNSXCUREDITSYPROBLEM
+ waitmessage 0x40
+ updatestatusicon SCRIPTING_BANK
+ return
+
+BattleScript_82DB695::
+ printstring STRINGID_PKMNIGNORESASLEEP
+ waitmessage 0x40
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ end
+
+BattleScript_IgnoresAndUsesRandomMove::
+ printstring STRINGID_PKMNIGNOREDORDERS
+ waitmessage 0x40
+ jumptorandomattack 0x0
+
+BattleScript_MoveUsedLoafingAround::
+ jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x4, BattleScript_82DB6C7
+ setbyte gBattleCommunication, 0x0
+ various24 ATTACKER
+ setbyte cMULTISTRING_CHOOSER, 0x4
+BattleScript_82DB6C7::
+ printfromtable gInobedientStringIds
+ waitmessage 0x40
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ end
+
+BattleScript_IgnoresAndFallsAsleep::
+ printstring STRINGID_PKMNBEGANTONAP
+ waitmessage 0x40
+ setmoveeffect EFFECT_SLEEP | AFFECTS_USER
+ seteffectprimary
+ setbyte sMOVEEND_STATE, 0x0
+ moveend 0x2, 0x10
+ end
+
+BattleScript_82DB6F0::
+ printstring STRINGID_PKMNWONTOBEY
+ waitmessage 0x40
+ goto BattleScript_82DB2D4
+
+BattleScript_SubstituteFade::
+ playanimation TARGET, ANIM_SUBSTITUTE_FADE, NULL
+ printstring STRINGID_PKMNSUBSTITUTEFADED
+ return
+
+BattleScript_BerryCurePrlzEnd2::
+ call BattleScript_BerryCureParRet
+ end2
+
+BattleScript_BerryCureParRet::
+ playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMCUREDPARALYSIS
+ waitmessage 0x40
+ updatestatusicon SCRIPTING_BANK
+ removeitem SCRIPTING_BANK
+ return
+
+BattleScript_BerryCurePsnEnd2::
+ call BattleScript_BerryCurePsnRet
+ end2
+
+BattleScript_BerryCurePsnRet::
+ playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMCUREDPOISON
+ waitmessage 0x40
+ updatestatusicon SCRIPTING_BANK
+ removeitem SCRIPTING_BANK
+ return
+
+BattleScript_BerryCureBrnEnd2::
+ call BattleScript_BerryCureBrnRet
+ end2
+
+BattleScript_BerryCureBrnRet::
+ playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMHEALEDBURN
+ waitmessage 0x40
+ updatestatusicon SCRIPTING_BANK
+ removeitem SCRIPTING_BANK
+ return
+
+BattleScript_BerryCureFrzEnd2::
+ call BattleScript_BerryCureFrzRet
+ end2
+
+BattleScript_BerryCureFrzRet::
+ playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMDEFROSTEDIT
+ waitmessage 0x40
+ updatestatusicon SCRIPTING_BANK
+ removeitem SCRIPTING_BANK
+ return
+
+BattleScript_BerryCureSlpEnd2::
+ call BattleScript_BerryCureSlpRet
+ end2
+
+BattleScript_BerryCureSlpRet::
+ playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMWOKEIT
+ waitmessage 0x40
+ updatestatusicon SCRIPTING_BANK
+ removeitem SCRIPTING_BANK
+ return
+
+BattleScript_BerryCureConfusionEnd2::
+ call BattleScript_BerryCureConfusionRet
+ end2
+
+BattleScript_BerryCureConfusionRet::
+ playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMSNAPPEDOUT
+ waitmessage 0x40
+ removeitem SCRIPTING_BANK
+ return
+
+BattleScript_BerryCureChosenStatusEnd2::
+ call BattleScript_BerryCureChosenStatusRet
+ end2
+
+BattleScript_BerryCureChosenStatusRet::
+ playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ printfromtable gBerryEffectStringIds
+ waitmessage 0x40
+ updatestatusicon SCRIPTING_BANK
+ removeitem SCRIPTING_BANK
+ return
+
+BattleScript_WhiteHerbEnd2::
+ call BattleScript_WhiteHerbRet
+ end2
+
+BattleScript_WhiteHerbRet::
+ playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMRESTOREDSTATUS
+ waitmessage 0x40
+ removeitem SCRIPTING_BANK
+ return
+
+BattleScript_ItemHealHP_RemoveItem::
+ playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMRESTOREDHEALTH
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ removeitem ATTACKER
+ end2
+
+BattleScript_BerryPPHealEnd2::
+ playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMRESTOREDPP
+ waitmessage 0x40
+ removeitem ATTACKER
+ end2
+
+BattleScript_ItemHealHP_End2::
+ call BattleScript_ItemHealHP_Ret
+ end2
+
+BattleScript_ItemHealHP_Ret::
+ playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMRESTOREDHPALITTLE
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ return
+
+BattleScript_SelectingNotAllowedMoveChoiceItem::
+ printselectionstring STRINGID_ITEMALLOWSONLYYMOVE
+ endselectionscript
+
+BattleScript_HangedOnMsg::
+ playanimation TARGET, ANIM_HANGED_ON, NULL
+ printstring STRINGID_PKMNHUNGONWITHX
+ waitmessage 0x40
+ return
+
+BattleScript_BerryConfuseHealEnd2::
+ playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNSITEMRESTOREDHEALTH
+ waitmessage 0x40
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ printstring STRINGID_FORXCOMMAYZ
+ waitmessage 0x40
+ setmoveeffect EFFECT_CONFUSION | AFFECTS_USER
+ seteffectprimary
+ removeitem ATTACKER
+ end2
+
+BattleScript_BerryStatRaiseEnd2::
+ playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ statbuffchange AFFECTS_USER | 0x1, BattleScript_82DB85B
+BattleScript_82DB85B::
+ setbyte cMULTISTRING_CHOOSER, 0x4
+ call BattleScript_StatUp
+ removeitem ATTACKER
+ end2
+
+BattleScript_BerryFocusEnergyEnd2::
+ playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ printstring STRINGID_PKMNUSEDXTOGETPUMPED
+ waitmessage 0x40
+ removeitem ATTACKER
+ end2
+
+BattleScript_ActionSelectionItemsCantBeUsed::
+ printselectionstring STRINGID_ITEMSCANTBEUSEDNOW
+ endselectionscript
+
+BattleScript_82DB87D::
+ printstring STRINGID_EMPTYSTRING3
+ return
+
+BattleScript_82DB881::
+ setbyte gBattleCommunication + 1, 0x0
+BattleScript_82DB887::
+ various8 ATTACKER
+ jumpifbyte NOT_EQUAL, gBattleCommunication, 0x1, BattleScript_82DB89D
+ printfromtable gStringIds_85CCF0A
+ waitmessage 0x40
+BattleScript_82DB89D::
+ addbyte gBattleCommunication + 1, 0x1
+ jumpifbytenotequal gBattleCommunication + 1, gNoOfAllBanks, BattleScript_82DB887
+ setbyte gBattleCommunication, 0x0
+ setbyte gBattleCommunication + 1, 0x0
+ end2
+
+BattleScript_82DB8BE::
+ waitcry ATTACKER
+ various21 ATTACKER
+ playse 0x109
+ pause 0x8
+ playse 0x109
+ various14 ATTACKER
+ various16 8
+ various17 8
+ pause 0x40
+ various15 ATTACKER
+ various22 ATTACKER
+ end2
+
+BattleScript_82DB8E0::
+ playse SE_PINPON
+ various14 ATTACKER
+ various16 TARGET
+ various17 TARGET
+ pause 0x40
+ various15 ATTACKER
+ end2
+
+BattleScript_82DB8F3::
+ makevisible 11
+ waitstate
+ makevisible OPPONENT1
+ waitstate
+ various21 ATTACKER
+ playse 0x109
+ pause 0x8
+ playse 0x109
+ pause 0x40
+ various14 ATTACKER
+ various16 ATTACKER
+ various17 ATTACKER
+ pause 0x40
+ setbyte gBattleCommunication, 0x0
+ various9 ATTACKER
+ pause 0x40
+ various9 ATTACKER
+ various16 EFFECT_BANK
+ various17 EFFECT_BANK
+ various9 ATTACKER
+ various16 GBANK_1
+ various17 GBANK_1
+ various9 ATTACKER
+ various16 0x4
+ various17 0x4
+ various9 ATTACKER
+ jumpifbyte EQUAL, gBattleCommunication + 1, 0x3, BattleScript_82DB973
+ jumpifbyte EQUAL, gBattleCommunication + 1, 0x4, BattleScript_82DB992
+ various16 0x5
+ various17 0x5
+ various9 ATTACKER
+ various15 ATTACKER
+ printstring STRINGID_DEFEATEDOPPONENTBYREFEREE
+ waitmessage 0x40
+ playfaintcry OPPONENT1
+ waitcry ATTACKER
+ dofaintanimation OPPONENT1
+ cleareffectsonfaint OPPONENT1
+ various10 ATTACKER
+ end2
+
+BattleScript_82DB973::
+ various16 0x6
+ various17 0x6
+ various9 ATTACKER
+ various15 ATTACKER
+ printstring STRINGID_LOSTTOOPPONENTBYREFEREE
+ waitmessage 0x40
+ playfaintcry 11
+ waitcry ATTACKER
+ dofaintanimation 11
+ cleareffectsonfaint 11
+ various11 ATTACKER
+ end2
+
+BattleScript_82DB992::
+ various16 BANK0
+ various17 BANK0
+ various9 ATTACKER
+ various15 ATTACKER
+ printstring STRINGID_TIEDOPPONENTBYREFEREE
+ waitmessage 0x40
+ playfaintcry 11
+ waitcry ATTACKER
+ dofaintanimation 11
+ cleareffectsonfaint 11
+ playfaintcry OPPONENT1
+ waitcry ATTACKER
+ dofaintanimation OPPONENT1
+ cleareffectsonfaint OPPONENT1
+ various12 ATTACKER
+ end2
+
+BattleScript_AskIfWantsToForfeitMatch::
+ printselectionstring STRINGID_QUESTIONFORFEITMATCH
+ forfeityesnobox ATTACKER
+ endselectionscript
+
+BattleScript_82DB9C1::
+ printstring STRINGID_FORFEITEDMATCH
+ waitmessage 0x40
+ end2
+
+BattleScript_82DB9C8::
+ printstring STRINGID_FORFEITEDMATCH
+ waitmessage 0x40
+ atk57
+ waitmessage 0x40
+ end2
diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s
index 4a4dc4665..88991ccd0 100644
--- a/data/battle_scripts_2.s
+++ b/data/battle_scripts_2.s
@@ -1,32 +1,36 @@
.include "asm/macros.inc"
+ .include "asm/macros/battle_script.inc"
.include "constants/constants.inc"
+ .include "constants/battle_constants.inc"
+ .include "constants/battle_script_constants.inc"
+ .include "constants/battle_text.inc"
.section script_data, "aw", %progbits
.align 2
gBattlescriptsForBallThrow:: @ 82DBD08
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD7E
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
- .4byte gUnknown_082DBD68
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_SafariBallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
+ .4byte BattleScript_BallThrow
.align 2
gUnknown_082DBD3C:: @ 82DBD3C
- .4byte gUnknown_082DBE12
- .4byte gUnknown_082DBE1C
- .4byte gUnknown_082DBE1C
- .4byte gUnknown_082DBE4B
- .4byte gUnknown_082DBE6F
- .4byte gUnknown_082DBE91
+ .4byte BattleScript_82DBE12
+ .4byte BattleScript_82DBE1C
+ .4byte BattleScript_82DBE1C
+ .4byte BattleScript_82DBE4B
+ .4byte BattleScript_82DBE6F
+ .4byte BattleScript_82DBE91
.align 2
gBattlescriptsForRunningByItem:: @ 82DBD54
@@ -34,55 +38,166 @@ gBattlescriptsForRunningByItem:: @ 82DBD54
.align 2
gBattlescriptsForSafariActions:: @ 82DBD58
- .4byte gUnknown_082DBEBD
- .4byte gUnknown_082DBEC4
- .4byte gUnknown_082DBECD
- .4byte gUnknown_082DBEE3
-
-gUnknown_082DBD68:: @ 82DBD68
- .incbin "baserom.gba", 0x2dbd68, 0x16
-
-gUnknown_082DBD7E:: @ 82DBD7E
- .incbin "baserom.gba", 0x2dbd7e, 0x6
-
-BattleScript_SuccessBallThrow:: @ 82DBD84
- .incbin "baserom.gba", 0x2dbd84, 0x46
-
-BattleScript_WallyBallThrow:: @ 82DBDCA
- .incbin "baserom.gba", 0x2dbdca, 0xa
-
-BattleScript_ShakeBallThrow:: @ 82DBDD4
- .incbin "baserom.gba", 0x2dbdd4, 0x2e
-
-BattleScript_TrainerBallBlock:: @ 82DBE02
- .incbin "baserom.gba", 0x2dbe02, 0x10
-
-gUnknown_082DBE12:: @ 82DBE12
- .incbin "baserom.gba", 0x2dbe12, 0xa
-
-gUnknown_082DBE1C:: @ 82DBE1C
- .incbin "baserom.gba", 0x2dbe1c, 0x2f
-
-gUnknown_082DBE4B:: @ 82DBE4B
- .incbin "baserom.gba", 0x2dbe4b, 0x24
-
-gUnknown_082DBE6F:: @ 82DBE6F
- .incbin "baserom.gba", 0x2dbe6f, 0x22
-
-gUnknown_082DBE91:: @ 82DBE91
- .incbin "baserom.gba", 0x2dbe91, 0x22
-
-BattleScript_RunByUsingItem:: @ 82DBEB3
- .incbin "baserom.gba", 0x2dbeb3, 0xA
-
-gUnknown_082DBEBD:: @ 82DBEBD
- .incbin "baserom.gba", 0x2dbebd, 0x7
-
-gUnknown_082DBEC4:: @ 82DBEC4
- .incbin "baserom.gba", 0x2dbec4, 0x9
-
-gUnknown_082DBECD:: @ 82DBECD
- .incbin "baserom.gba", 0x2dbecd, 0x16
-
-gUnknown_082DBEE3:: @ 82DBEE3
- .incbin "baserom.gba", 0x2dbee3, 0x15
+ .4byte BattleScript_ActionWatchesCarefully
+ .4byte BattleScript_ActionGetNear
+ .4byte BattleScript_ActionThrowPokeblock
+ .4byte BattleScript_82DBEE3
+
+BattleScript_BallThrow::
+ jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally
+ printstring STRINGID_PLAYERUSEDITEM
+ handleballthrow
+
+BattleScript_BallThrowByWally::
+ printstring STRINGID_WALLYUSEDITEM
+ handleballthrow
+
+BattleScript_SafariBallThrow::
+ printstring STRINGID_PLAYERUSEDITEM
+ updatestatusicon ATTACKER
+ handleballthrow
+
+BattleScript_SuccessBallThrow::
+ jumpifhalfword EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_82DBD92
+ incrementgamestat 0xB
+BattleScript_82DBD92::
+ printstring STRINGID_GOTCHAPKMNCAUGHT
+ trysetcaughtmondexflags BattleScript_82DBDA5
+ printstring STRINGID_PKMNDATAADDEDTODEX
+ waitstate
+ setbyte gBattleCommunication, 0x0
+ displaydexinfo
+BattleScript_82DBDA5::
+ printstring STRINGID_GIVENICKNAMECAPTURED
+ waitstate
+ setbyte gBattleCommunication, 0x0
+ trygivecaughtmonnick BattleScript_82DBDC2
+ givecaughtmon
+ printfromtable gCaughtMonStringIds
+ waitmessage 0x40
+ goto BattleScript_82DBDC3
+BattleScript_82DBDC2::
+ givecaughtmon
+BattleScript_82DBDC3::
+ setbyte gBattleOutcome, CAUGHT
+ finishturn
+
+BattleScript_WallyBallThrow::
+ printstring STRINGID_GOTCHAPKMNCAUGHT2
+ setbyte gBattleOutcome, CAUGHT
+ finishturn
+
+BattleScript_ShakeBallThrow::
+ printfromtable gBallEscapeStringIds
+ waitmessage 0x40
+ jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_82DBE01
+ jumpifbyte NOT_EQUAL, gNumSafariBalls, 0x0, BattleScript_82DBE01
+ printstring STRINGID_OUTOFSAFARIBALLS
+ waitmessage 0x40
+ setbyte gBattleOutcome, OUT_OF_BALLS
+BattleScript_82DBE01::
+ finishaction
+
+BattleScript_TrainerBallBlock::
+ waitmessage 0x40
+ printstring STRINGID_TRAINERBLOCKEDBALL
+ waitmessage 0x40
+ printstring STRINGID_DONTBEATHIEF
+ waitmessage 0x40
+ finishaction
+
+BattleScript_82DBE12::
+ setbyte sMOVEEND_STATE, 0xF
+ moveend 0x1, 0x0
+ end
+
+BattleScript_82DBE1C::
+ printstring STRINGID_EMPTYSTRING3
+ pause 0x30
+ playse SE_KAIFUKU
+ printstring STRINGID_TRAINER1USEDITEM
+ waitmessage 0x40
+ useitemonopponent
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate ATTACKER
+ datahpupdate ATTACKER
+ printstring STRINGID_PKMNSITEMRESTOREDHEALTH
+ waitmessage 0x40
+ updatestatusicon ATTACKER
+ setbyte sMOVEEND_STATE, 0xF
+ moveend 0x1, 0x0
+ finishaction
+
+BattleScript_82DBE4B::
+ printstring STRINGID_EMPTYSTRING3
+ pause 0x30
+ playse SE_KAIFUKU
+ printstring STRINGID_TRAINER1USEDITEM
+ waitmessage 0x40
+ useitemonopponent
+ printfromtable gTrainerItemCuredStatusStringIds
+ waitmessage 0x40
+ updatestatusicon ATTACKER
+ setbyte sMOVEEND_STATE, 0xF
+ moveend 0x1, 0x0
+ finishaction
+
+BattleScript_82DBE6F::
+ printstring STRINGID_EMPTYSTRING3
+ pause 0x30
+ playse SE_KAIFUKU
+ printstring STRINGID_TRAINER1USEDITEM
+ waitmessage 0x40
+ useitemonopponent
+ printfromtable gStatUpStringIds
+ waitmessage 0x40
+ setbyte sMOVEEND_STATE, 0xF
+ moveend 0x1, 0x0
+ finishaction
+
+BattleScript_82DBE91::
+ printstring STRINGID_EMPTYSTRING3
+ pause 0x30
+ playse SE_KAIFUKU
+ printstring STRINGID_TRAINER1USEDITEM
+ waitmessage 0x40
+ useitemonopponent
+ printfromtable gMistUsedStringIds
+ waitmessage 0x40
+ setbyte sMOVEEND_STATE, 0xF
+ moveend 0x1, 0x0
+ finishaction
+
+BattleScript_RunByUsingItem::
+ playse SE_NIGERU
+ setbyte gBattleOutcome, RAN
+ finishturn
+
+BattleScript_ActionWatchesCarefully::
+ printstring STRINGID_PKMNWATCHINGCAREFULLY
+ waitmessage 0x40
+ end2
+
+BattleScript_ActionGetNear::
+ printfromtable gSafariGetNearStringIds
+ waitmessage 0x40
+ end2
+
+BattleScript_ActionThrowPokeblock::
+ printstring STRINGID_THREWPOKEBLOCKATPKMN
+ waitmessage 0x40
+ playanimation ATTACKER, ANIM_x4, NULL
+ printfromtable gSafariPokeblockResultStringIds
+ waitmessage 0x40
+ end2
+
+BattleScript_82DBEE3::
+ printstring STRINGID_RETURNMON
+ waitmessage 0x40
+ returnatktoball
+ waitstate
+ trainerslidein TARGET
+ waitstate
+ printstring STRINGID_YOUTHROWABALLNOWRIGHT
+ waitmessage 0x40
+ end2
diff --git a/data/graphics.s b/data/graphics.s
index 87b983a80..72daf144f 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -682,7 +682,7 @@ gMonIcon_Egg:: @ 8D8FC74
.incbin "baserom.gba", 0xd90074, 0x1524
-gUnknown_08D91598:: @ 8D91598
+sBlenderCenterGfx:: @ 8D91598
.incbin "baserom.gba", 0xd91598, 0x820
gUnknown_08D91DB8:: @ 8D91DB8
diff --git a/data/link.s b/data/link.s
index d9cf886c5..336383678 100644
--- a/data/link.s
+++ b/data/link.s
@@ -28,15 +28,15 @@ g2BlankTilesGfx:: @ 82ED168
.incbin "graphics/interface/blank_1x2.4bpp"
gUnknown_082ED1A8:: @ 82ED1A8
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x000000C8
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x000000C8
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x00000064
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x000000DC
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x00000028
gUnknown_082ED1D0:: @ 82ED1D0
@@ -224,15 +224,15 @@ gUnknown_082ED6A5:: @ 82ED6A5
.align 2
gUnknown_082ED6B8:: @ 82ED6B8
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x000000c8
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x000000c8
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x00000064
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x000000dc
- .4byte gUnknown_020228C4
+ .4byte gBlockSendBuffer
.4byte 0x00000028
.align 2
diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc
index fd2ff3b01..76f2aac6b 100644
--- a/data/scripts/field_move_scripts.inc
+++ b/data/scripts/field_move_scripts.inc
@@ -116,7 +116,7 @@ Route111_EventScript_2907FB:: @ 82907FB
specialvar VAR_RESULT, sub_81393FC
compare_var_to_value VAR_RESULT, 1
goto_eq Route111_EventScript_290829
- special rock_smash_wild_pokemon_encounter
+ special RockSmashWildEncounter
compare_var_to_value VAR_RESULT, 0
goto_eq Route111_EventScript_290829
waitstate
diff --git a/data/scripts/maps/SeafloorCavern_Room9.inc b/data/scripts/maps/SeafloorCavern_Room9.inc
index 6f968b4d0..984d53295 100644
--- a/data/scripts/maps/SeafloorCavern_Room9.inc
+++ b/data/scripts/maps/SeafloorCavern_Room9.inc
@@ -127,7 +127,7 @@ SeafloorCavern_Room9_EventScript_234DC9:: @ 8234DC9
clearflag FLAG_0x3E6
clearflag FLAG_0x3E5
setflag FLAG_0x347
- setflag FLAG_0x053
+ setflag FLAG_LEGENDARIES_IN_SOOTOPOLIS
clearflag FLAG_0x3B0
clearflag FLAG_0x3B1
setflag FLAG_SYS_WEATHER_CTRL
diff --git a/data/scripts/maps/SootopolisCity.inc b/data/scripts/maps/SootopolisCity.inc
index 33b65714b..d9eaee6eb 100644
--- a/data/scripts/maps/SootopolisCity.inc
+++ b/data/scripts/maps/SootopolisCity.inc
@@ -545,7 +545,7 @@ SootopolisCity_EventScript_1E5C1E:: @ 81E5C1E
waitstate
clearflag FLAG_SYS_WEATHER_CTRL
setvar VAR_0x40CA, 3
- clearflag FLAG_0x053
+ clearflag FLAG_LEGENDARIES_IN_SOOTOPOLIS
fadenewbgm BGM_RUNECITY
delay 120
clearflag FLAG_SPECIAL_FLAG_0x4000
@@ -598,7 +598,7 @@ SootopolisCity_EventScript_1E5CCE:: @ 81E5CCE
waitstate
clearflag FLAG_SYS_WEATHER_CTRL
setvar VAR_0x40CA, 2
- clearflag FLAG_0x053
+ clearflag FLAG_LEGENDARIES_IN_SOOTOPOLIS
fadenewbgm BGM_NAMINORI
delay 120
clearflag FLAG_SPECIAL_FLAG_0x4000
diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc
index e77e4d789..a93c44615 100644
--- a/data/scripts/pokeblocks.inc
+++ b/data/scripts/pokeblocks.inc
@@ -290,7 +290,7 @@ LilycoveCity_ContestLobby_EventScript_293CEE:: @ 8293CEE
checkitem ITEM_POKEBLOCK_CASE, 1
compare_var_to_value VAR_RESULT, 0
goto_eq LilycoveCity_ContestLobby_EventScript_293D43
- specialvar VAR_RESULT, sub_8136EF4
+ specialvar VAR_RESULT, GetFirstFreePokeblockSlot
compare_var_to_value VAR_RESULT, 65535
goto_eq LilycoveCity_ContestLobby_EventScript_293D39
specialvar VAR_RESULT, PlayerHasBerries
@@ -303,7 +303,7 @@ LilycoveCity_ContestLobby_EventScript_293CEE:: @ 8293CEE
LilycoveCity_ContestLobby_EventScript_293D2C:: @ 8293D2C
copyvar VAR_0x8004, VAR_0x8009
fadescreen 1
- special sub_807FA80
+ special DoBerryBlending
waitstate
releaseall
end
@@ -365,7 +365,7 @@ LilycoveCity_ContestLobby_EventScript_293DC6:: @ 8293DC6
compare_var_to_value VAR_RESULT, 0
goto_eq LilycoveCity_ContestLobby_EventScript_293E14
msgbox LilycoveCity_ContestLobby_Text_293237, 4
- specialvar VAR_RESULT, sub_8136EF4
+ specialvar VAR_RESULT, GetFirstFreePokeblockSlot
compare_var_to_value VAR_RESULT, 65535
goto_if 5, LilycoveCity_ContestLobby_EventScript_293D91
compare_var_to_value VAR_RESULT, 65535
@@ -431,7 +431,7 @@ LilycoveCity_ContestLobby_EventScript_293EA3:: @ 8293EA3
compare_var_to_value VAR_RESULT, 0
goto_eq LilycoveCity_ContestLobby_EventScript_293EF1
msgbox LilycoveCity_ContestLobby_Text_29354E, 4
- specialvar VAR_RESULT, sub_8136EF4
+ specialvar VAR_RESULT, GetFirstFreePokeblockSlot
compare_var_to_value VAR_RESULT, 65535
goto_if 5, LilycoveCity_ContestLobby_EventScript_293E6E
compare_var_to_value VAR_RESULT, 65535
@@ -470,7 +470,7 @@ LilycoveCity_ContestLobby_EventScript_293F28:: @ 8293F28
specialvar VAR_RESULT, PlayerHasBerries
compare_var_to_value VAR_RESULT, 0
goto_eq LilycoveCity_ContestLobby_EventScript_293F1E
- specialvar VAR_RESULT, sub_8136EF4
+ specialvar VAR_RESULT, GetFirstFreePokeblockSlot
compare_var_to_value VAR_RESULT, 65535
goto_if 5, LilycoveCity_ContestLobby_EventScript_293F64
compare_var_to_value VAR_RESULT, 65535
@@ -536,7 +536,7 @@ LilycoveCity_ContestLobby_EventScript_293FF8:: @ 8293FF8
checkitem ITEM_POKEBLOCK_CASE, 1
compare_var_to_value VAR_RESULT, 0
goto_eq LilycoveCity_ContestLobby_EventScript_294028
- specialvar VAR_RESULT, sub_8136EF4
+ specialvar VAR_RESULT, GetFirstFreePokeblockSlot
compare_var_to_value VAR_RESULT, 65535
goto_eq LilycoveCity_ContestLobby_EventScript_294028
dodailyevents
@@ -570,7 +570,7 @@ LilycoveCity_ContestLobby_EventScript_294055:: @ 8294055
checkitem ITEM_POKEBLOCK_CASE, 1
compare_var_to_value VAR_RESULT, 0
goto_eq LilycoveCity_ContestLobby_EventScript_29416C
- specialvar VAR_RESULT, sub_8136EF4
+ specialvar VAR_RESULT, GetFirstFreePokeblockSlot
compare_var_to_value VAR_RESULT, 65535
goto_if 5, LilycoveCity_ContestLobby_EventScript_294092
compare_var_to_value VAR_RESULT, 65535
@@ -635,7 +635,7 @@ LilycoveCity_ContestLobby_EventScript_294147:: @ 8294147
removeobject 239
removeobject 238
removeobject 237
- special sub_807FA80
+ special DoBerryBlending
waitstate
releaseall
end
diff --git a/data/specials.inc b/data/specials.inc
index 51bb34dff..19adbae4d 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -170,8 +170,8 @@ gSpecials:: @ 81DBA64
def_special sub_80B086C
def_special ChangePokemonNickname
def_special sub_81B94B0
- def_special sub_8136EF4
- def_special sub_807FA80
+ def_special GetFirstFreePokeblockSlot
+ def_special DoBerryBlending
def_special sub_8142BC8
def_special sub_813BD60
def_special sub_813BCA8
@@ -181,7 +181,7 @@ gSpecials:: @ 81DBA64
def_special sub_813BF60
def_special sub_813BA60
def_special sub_813BF7C
- def_special rock_smash_wild_pokemon_encounter
+ def_special RockSmashWildEncounter
def_special GabbyAndTyGetBattleNum
def_special GabbyAndTyAfterInterview
def_special GabbyAndTyBeforeInterview
diff --git a/data/unk_81BAD84.s b/data/unk_81BAD84.s
deleted file mode 100644
index de88365ac..000000000
--- a/data/unk_81BAD84.s
+++ /dev/null
@@ -1,7 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-gUnknown_08617128:: @ 8617128
- .incbin "baserom.gba", 0x617128, 0x48
diff --git a/data/wild_encounter.s b/data/wild_encounter.s
index ddb842a76..e221c2f99 100644
--- a/data/wild_encounter.s
+++ b/data/wild_encounter.s
@@ -9,14 +9,14 @@
.incbin "baserom.gba", 0x55370c, 0x188
-gUnknown_08553894:: @ 8553894
+gBattlePyramidWildMonHeaders:: @ 8553894
.incbin "baserom.gba", 0x553894, 0x180
-gUnknown_08553A14:: @ 8553A14
+gBattlePikeWildMonHeaders:: @ 8553A14
.incbin "baserom.gba", 0x553a14, 0x64
-gUnknown_08553A78:: @ 8553A78
+gWildFeebasRoute119Data:: @ 8553A78
.incbin "baserom.gba", 0x553a78, 0x4
-gUnknown_08553A7C:: @ 8553A7C
+gRoute119WaterTileData:: @ 8553A7C
.incbin "baserom.gba", 0x553a7c, 0x14
diff --git a/include/battle.h b/include/battle.h
index 0939c92b6..c172cb0f6 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -272,6 +272,8 @@
#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
@@ -704,13 +706,6 @@ struct BattleStruct
extern struct BattleStruct* gBattleStruct;
-#define MEME_ACCESS_U8(structName, structPtr, arrayId, offsetField, value) \
-{ \
- u8* var2 = (u8*)((u32)(arrayId)); \
- var2 = (u32)(structPtr) + var2; \
- var2[offsetof(struct structName, offsetField)] = value; \
-}
-
#define GET_MOVE_TYPE(move, typeArg) \
{ \
if (gBattleStruct->dynamicMoveType) \
@@ -835,20 +830,20 @@ extern struct BattleStruct* gBattleStruct;
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
-#define SET_STAT_BUFF_ID(n)((n & 0xF))
#define SET_STAT_BUFF_VALUE(n)(((s8)(((s8)(n) << 4)) & 0xF0))
+#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7))
+
struct BattleScripting
{
s32 painSplitHp;
s32 bideDmg;
u8 multihitString[6];
u8 dmgMultiplier;
- u8 field_F;
+ u8 twoTurnsMoveStringId;
u8 animArg1;
u8 animArg2;
- u8 field_12;
- u8 field_13;
+ u16 tripleKickPower;
u8 atk49_state;
u8 field_15;
u8 field_16;
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 973a723e0..c69cb1017 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -198,7 +198,7 @@ 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 EmitPrintStringPlayerOnly(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);
@@ -224,7 +224,7 @@ void EmitCmd39(u8 bufferId); // unused
void EmitCmd40(u8 bufferId); // unused
void EmitHitAnimation(u8 bufferId);
void EmitCmd42(u8 bufferId);
-void EmitEffectivenessSound(u8 bufferId, u16 songId);
+void EmitPlaySE(u8 bufferId, u16 songId);
void EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM);
void EmitFaintingCry(u8 bufferId);
void EmitIntroSlide(u8 bufferId, u8 terrainId);
diff --git a/include/battle_message.h b/include/battle_message.h
index 3f9b38cad..30ddca469 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -67,13 +67,21 @@
#define B_BUFF_STAT 5
#define B_BUFF_SPECIES 6
#define B_BUFF_MON_NICK 7
-#define B_BUFF_NEGATIVE_FLAVOUR 8
+#define B_BUFF_NEGATIVE_FLAVOR 8
#define B_BUFF_ABILITY 9
#define B_BUFF_ITEM 10
#define B_BUFF_PLACEHOLDER_BEGIN 0xFD
#define B_BUFF_EOS 0xFF
+#define PREPARE_FLAVOR_BUFFER(textVar, flavorId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_NEGATIVE_FLAVOR; \
+ textVar[2] = flavorId; \
+ textVar[3] = B_BUFF_EOS; \
+}
+
#define PREPARE_STAT_BUFFER(textVar, statId) \
{ \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
@@ -189,7 +197,7 @@
struct StringInfoBattle
{
u16 currentMove;
- u16 lastMove;
+ u16 originallyUsedMove;
u16 lastItem;
u8 lastAbility;
u8 scrActive;
diff --git a/include/battle_move_effects.h b/include/battle_move_effects.h
index 4a9415379..23c19ded7 100644
--- a/include/battle_move_effects.h
+++ b/include/battle_move_effects.h
@@ -153,12 +153,12 @@ enum
EFFECT_EARTHQUAKE,
EFFECT_FUTURE_SIGHT,
EFFECT_GUST,
- EFFECT_FLINCH_HIT_2, // STOMP ASTONISH EXTRASENSORY NEEDLE_ARM
+ EFFECT_STOMP, // STOMP ASTONISH EXTRASENSORY NEEDLE_ARM
EFFECT_SOLARBEAM,
EFFECT_THUNDER,
EFFECT_TELEPORT,
EFFECT_BEAT_UP,
- EFFECT_FLY,
+ EFFECT_SEMI_INVULNERABLE,
EFFECT_DEFENSE_CURL,
EFFECT_SOFTBOILED,
EFFECT_FAKE_OUT,
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index ebfeabccc..80fabaa64 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -1,6 +1,10 @@
#ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H
#define GUARD_BATTLE_SCRIPT_COMMANDS_H
+#define NO_ACC_CALC 0xFFFE
+#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
+#define ACC_CURR_MOVE 0
+
#define CMP_EQUAL 0x0
#define CMP_NOT_EQUAL 0x1
#define CMP_GREATER_THAN 0x2
@@ -21,7 +25,7 @@
#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
#define VARIOUS_SET_MAGIC_COAT_TARGET 1
-#define VARIOUS_CAN_RUN_FROM_BATTLE 2
+#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
diff --git a/include/battle_scripts.h b/include/battle_scripts.h
new file mode 100644
index 000000000..5131778a8
--- /dev/null
+++ b/include/battle_scripts.h
@@ -0,0 +1,640 @@
+#ifndef GUARD_BATTLE_SCRIPTS_H
+#define GUARD_BATTLE_SCRIPTS_H
+
+extern const u8 BattleScript_EffectHit[];
+extern const u8 BattleScript_HitFromAtkCanceler[];
+extern const u8 BattleScript_HitFromAccCheck[];
+extern const u8 BattleScript_HitFromAtkString[];
+extern const u8 BattleScript_HitFromCritCalc[];
+extern const u8 BattleScript_HitFromAtkAnimation[];
+extern const u8 BattleScript_MoveEnd[];
+extern const u8 BattleScript_MakeMoveMissed[];
+extern const u8 BattleScript_PrintMoveMissed[];
+extern const u8 BattleScript_MoveMissedPause[];
+extern const u8 BattleScript_MoveMissed[];
+extern const u8 BattleScript_EffectSleep[];
+extern const u8 BattleScript_AlreadyAsleep[];
+extern const u8 BattleScript_WasntAffected[];
+extern const u8 BattleScript_CantMakeAsleep[];
+extern const u8 BattleScript_EffectPoisonHit[];
+extern const u8 BattleScript_EffectAbsorb[];
+extern const u8 BattleScript_82D8B26[];
+extern const u8 BattleScript_82D8B2E[];
+extern const u8 BattleScript_82D8B45[];
+extern const u8 BattleScript_EffectBurnHit[];
+extern const u8 BattleScript_EffectFreezeHit[];
+extern const u8 BattleScript_EffectParalyzeHit[];
+extern const u8 BattleScript_EffectExplosion[];
+extern const u8 BattleScript_82D8B94[];
+extern const u8 BattleScript_82D8B96[];
+extern const u8 BattleScript_82D8BCF[];
+extern const u8 BattleScript_82D8BEA[];
+extern const u8 BattleScript_EffectDreamEater[];
+extern const u8 BattleScript_82D8C0E[];
+extern const u8 BattleScript_82D8C18[];
+extern const u8 BattleScript_82D8C56[];
+extern const u8 BattleScript_EffectMirrorMove[];
+extern const u8 BattleScript_EffectAttackUp[];
+extern const u8 BattleScript_EffectDefenseUp[];
+extern const u8 BattleScript_EffectSpecialAttackUp[];
+extern const u8 BattleScript_EffectEvasionUp[];
+extern const u8 BattleScript_EffectStatUp[];
+extern const u8 BattleScript_EffectStatUpAfterAtkCanceler[];
+extern const u8 BattleScript_StatUpAttackAnim[];
+extern const u8 BattleScript_StatUpDoAnim[];
+extern const u8 BattleScript_StatUpPrintString[];
+extern const u8 BattleScript_StatUpEnd[];
+extern const u8 BattleScript_StatUp[];
+extern const u8 BattleScript_EffectAttackDown[];
+extern const u8 BattleScript_EffectDefenseDown[];
+extern const u8 BattleScript_EffectSpeedDown[];
+extern const u8 BattleScript_EffectAccuracyDown[];
+extern const u8 BattleScript_EffectEvasionDown[];
+extern const u8 BattleScript_EffectStatDown[];
+extern const u8 BattleScript_StatDownDoAnim[];
+extern const u8 BattleScript_StatDownPrintString[];
+extern const u8 BattleScript_82D8D60[];
+extern const u8 BattleScript_StatDown[];
+extern const u8 BattleScript_EffectHaze[];
+extern const u8 BattleScript_EffectBide[];
+extern const u8 BattleScript_EffectRampage[];
+extern const u8 BattleScript_82D8DAE[];
+extern const u8 BattleScript_EffectRoar[];
+extern const u8 BattleScript_EffectMultiHit[];
+extern const u8 BattleScript_82D8DFD[];
+extern const u8 BattleScript_82D8E1F[];
+extern const u8 BattleScript_82D8E71[];
+extern const u8 BattleScript_82D8E74[];
+extern const u8 BattleScript_82D8E93[];
+extern const u8 BattleScript_EffectConversion[];
+extern const u8 BattleScript_EffectFlinchHit[];
+extern const u8 BattleScript_EffectRestoreHp[];
+extern const u8 BattleScript_EffectToxic[];
+extern const u8 BattleScript_AlreadyPoisoned[];
+extern const u8 BattleScript_ImmunityProtected[];
+extern const u8 BattleScript_EffectPayDay[];
+extern const u8 BattleScript_EffectLightScreen[];
+extern const u8 BattleScript_EffectTriAttack[];
+extern const u8 BattleScript_EffectRest[];
+extern const u8 BattleScript_RestCantSleep[];
+extern const u8 BattleScript_RestIsAlreadyAsleep[];
+extern const u8 BattleScript_EffectOHKO[];
+extern const u8 BattleScript_KOFail[];
+extern const u8 BattleScript_EffectRazorWind[];
+extern const u8 BattleScript_TwoTurnMovesSecondTurn[];
+extern const u8 BattleScriptFirstChargingTurn[];
+extern const u8 BattleScript_EffectSuperFang[];
+extern const u8 BattleScript_EffectDragonRage[];
+extern const u8 BattleScript_EffectTrap[];
+extern const u8 BattleScript_DoWrapEffect[];
+extern const u8 BattleScript_EffectDoubleHit[];
+extern const u8 BattleScript_EffectRecoilIfMiss[];
+extern const u8 BattleScript_82D9135[];
+extern const u8 BattleScript_EffectMist[];
+extern const u8 BattleScript_EffectFocusEnergy[];
+extern const u8 BattleScript_EffectRecoil[];
+extern const u8 BattleScript_EffectConfuse[];
+extern const u8 BattleScript_AlreadyConfused[];
+extern const u8 BattleScript_EffectAttackUp2[];
+extern const u8 BattleScript_EffectDefenseUp2[];
+extern const u8 BattleScript_EffectSpeedUp2[];
+extern const u8 BattleScript_EffectSpecialAttackUp2[];
+extern const u8 BattleScript_EffectSpecialDefenseUp2[];
+extern const u8 BattleScript_EffectTransform[];
+extern const u8 BattleScript_EffectAttackDown2[];
+extern const u8 BattleScript_EffectDefenseDown2[];
+extern const u8 BattleScript_EffectSpeedDown2[];
+extern const u8 BattleScript_EffectSpecialDefenseDown2[];
+extern const u8 BattleScript_EffectReflect[];
+extern const u8 BattleScript_PrintReflectLightScreenSafeguardString[];
+extern const u8 BattleScript_EffectPoison[];
+extern const u8 BattleScript_EffectParalyze[];
+extern const u8 BattleScript_AlreadyParalyzed[];
+extern const u8 BattleScript_LimberProtected[];
+extern const u8 BattleScript_EffectAttackDownHit[];
+extern const u8 BattleScript_EffectDefenseDownHit[];
+extern const u8 BattleScript_EffectSpeedDownHit[];
+extern const u8 BattleScript_EffectSpecialAttackDownHit[];
+extern const u8 BattleScript_EffectSpecialDefenseDownHit[];
+extern const u8 BattleScript_EffectAccuracyDownHit[];
+extern const u8 BattleScript_EffectSkyAttack[];
+extern const u8 BattleScript_EffectConfuseHit[];
+extern const u8 BattleScript_EffectTwineedle[];
+extern const u8 BattleScript_EffectSubstitute[];
+extern const u8 BattleScript_SubstituteAnim[];
+extern const u8 BattleScript_SubstituteString[];
+extern const u8 BattleScript_AlreadyHasSubstitute[];
+extern const u8 BattleScript_EffectRecharge[];
+extern const u8 BattleScript_MoveUsedMustRecharge[];
+extern const u8 BattleScript_EffectRage[];
+extern const u8 BattleScript_RageMiss[];
+extern const u8 BattleScript_EffectMimic[];
+extern const u8 BattleScript_EffectMetronome[];
+extern const u8 BattleScript_EffectLeechSeed[];
+extern const u8 BattleScript_DoLeechSeed[];
+extern const u8 BattleScript_EffectSplash[];
+extern const u8 BattleScript_EffectDisable[];
+extern const u8 BattleScript_EffectLevelDamage[];
+extern const u8 BattleScript_EffectPsywave[];
+extern const u8 BattleScript_EffectCounter[];
+extern const u8 BattleScript_EffectEncore[];
+extern const u8 BattleScript_EffectPainSplit[];
+extern const u8 BattleScript_EffectSnore[];
+extern const u8 BattleScript_SnoreIsAsleep[];
+extern const u8 BattleScript_DoSnore[];
+extern const u8 BattleScript_EffectConversion2[];
+extern const u8 BattleScript_EffectLockOn[];
+extern const u8 BattleScript_EffectSketch[];
+extern const u8 BattleScript_EffectSleepTalk[];
+extern const u8 BattleScript_SleepTalkIsAsleep[];
+extern const u8 BattleScript_SleepTalkUsingMove[];
+extern const u8 BattleScript_EffectDestinyBond[];
+extern const u8 BattleScript_EffectFlail[];
+extern const u8 BattleScript_EffectSpite[];
+extern const u8 BattleScript_EffectHealBell[];
+extern const u8 BattleScript_CheckHealBellMon2Unaffected[];
+extern const u8 BattleScript_PartyHealEnd[];
+extern const u8 BattleScript_EffectTripleKick[];
+extern const u8 BattleScript_TripleKickLoop[];
+extern const u8 BattleScript_DoTripleKickAttack[];
+extern const u8 BattleScript_TripleKickNoMoreHits[];
+extern const u8 BattleScript_TripleKickPrintStrings[];
+extern const u8 BattleScript_TripleKickEnd[];
+extern const u8 BattleScript_EffectThief[];
+extern const u8 BattleScript_EffectMeanLook[];
+extern const u8 BattleScript_EffectNightmare[];
+extern const u8 BattleScript_NightmareWorked[];
+extern const u8 BattleScript_EffectMinimize[];
+extern const u8 BattleScript_EffectCurse[];
+extern const u8 BattleScript_CurseTrySpeed[];
+extern const u8 BattleScript_CurseTryAttack[];
+extern const u8 BattleScript_CurseTryDefence[];
+extern const u8 BattleScript_CurseEnd[];
+extern const u8 BattleScript_GhostCurse[];
+extern const u8 BattleScript_DoGhostCurse[];
+extern const u8 BattleScript_EffectProtect[];
+extern const u8 BattleScript_EffectSpikes[];
+extern const u8 BattleScript_EffectForesight[];
+extern const u8 BattleScript_EffectPerishSong[];
+extern const u8 BattleScript_PerishSongLoop[];
+extern const u8 BattleScript_PerishSongLoopIncrement[];
+extern const u8 BattleScript_PerishSongNotAffected[];
+extern const u8 BattleScript_EffectSandstorm[];
+extern const u8 BattleScript_EffectRollout[];
+extern const u8 BattleScript_RolloutCheckAccuracy[];
+extern const u8 BattleScript_RolloutHit[];
+extern const u8 BattleScript_EffectSwagger[];
+extern const u8 BattleScript_SwaggerTryConfuse[];
+extern const u8 BattleScript_EffectFuryCutter[];
+extern const u8 BattleScript_FuryCutterHit[];
+extern const u8 BattleScript_EffectAttract[];
+extern const u8 BattleScript_EffectReturn[];
+extern const u8 BattleScript_EffectPresent[];
+extern const u8 BattleScript_EffectSafeguard[];
+extern const u8 BattleScript_EffectThawHit[];
+extern const u8 BattleScript_EffectMagnitude[];
+extern const u8 BattleScript_EffectBatonPass[];
+extern const u8 BattleScript_EffectRapidSpin[];
+extern const u8 BattleScript_EffectSonicboom[];
+extern const u8 BattleScript_EffectMorningSun[];
+extern const u8 BattleScript_EffectHiddenPower[];
+extern const u8 BattleScript_EffectRainDance[];
+extern const u8 BattleScript_MoveWeatherChange[];
+extern const u8 BattleScript_EffectSunnyDay[];
+extern const u8 BattleScript_EffectDefenseUpHit[];
+extern const u8 BattleScript_EffectAttackUpHit[];
+extern const u8 BattleScript_EffectAllStatsUpHit[];
+extern const u8 BattleScript_EffectBellyDrum[];
+extern const u8 BattleScript_EffectPsychUp[];
+extern const u8 BattleScript_EffectMirrorCoat[];
+extern const u8 BattleScript_EffectSkullBash[];
+extern const u8 BattleScript_SkullBashEnd[];
+extern const u8 BattleScript_EffectTwister[];
+extern const u8 BattleScript_FlinchEffect[];
+extern const u8 BattleScript_EffectEarthquake[];
+extern const u8 BattleScript_82D9C44[];
+extern const u8 BattleScript_82D9C64[];
+extern const u8 BattleScript_82D9C73[];
+extern const u8 BattleScript_82D9CAC[];
+extern const u8 BattleScript_EffectFutureSight[];
+extern const u8 BattleScript_EffectGust[];
+extern const u8 BattleScript_EffectStomp[];
+extern const u8 BattleScript_EffectSolarbeam[];
+extern const u8 BattleScript_SolarbeamDecideTurn[];
+extern const u8 BattleScript_SolarbeamOnFirstTurn[];
+extern const u8 BattleScript_EffectThunder[];
+extern const u8 BattleScript_EffectTeleport[];
+extern const u8 BattleScript_EffectBeatUp[];
+extern const u8 BattleScript_BeatUpLoop[];
+extern const u8 BattleScript_BeatUpAttack[];
+extern const u8 BattleScript_BeatUpEnd[];
+extern const u8 BattleScript_EffectSemiInvulnerable[];
+extern const u8 BattleScript_FirstTurnBounce[];
+extern const u8 BattleScript_FirstTurnDive[];
+extern const u8 BattleScript_FirstTurnFly[];
+extern const u8 BattleScript_FirstTurnSemiInvulnerable[];
+extern const u8 BattleScript_SecondTurnSemiInvulnerable[];
+extern const u8 BattleScript_SemiInvulnerableTryHit[];
+extern const u8 BattleScript_SemiInvulnerableMiss[];
+extern const u8 BattleScript_EffectDefenseCurl[];
+extern const u8 BattleScript_DefenseCurlDoStatUpAnim[];
+extern const u8 BattleScript_EffectSoftboiled[];
+extern const u8 BattleScript_PresentHealTarget[];
+extern const u8 BattleScript_AlreadyAtFullHp[];
+extern const u8 BattleScript_EffectFakeOut[];
+extern const u8 BattleScript_ButItFailedAtkStringPpReduce[];
+extern const u8 BattleScript_ButItFailedPpReduce[];
+extern const u8 BattleScript_ButItFailed[];
+extern const u8 BattleScript_NotAffected[];
+extern const u8 BattleScript_EffectUproar[];
+extern const u8 BattleScript_UproarHit[];
+extern const u8 BattleScript_EffectStockpile[];
+extern const u8 BattleScript_EffectSpitUp[];
+extern const u8 BattleScript_SpitUpFail[];
+extern const u8 BattleScript_82D9FA2[];
+extern const u8 BattleScript_EffectSwallow[];
+extern const u8 BattleScript_SwallowFail[];
+extern const u8 BattleScript_EffectHail[];
+extern const u8 BattleScript_EffectTorment[];
+extern const u8 BattleScript_EffectFlatter[];
+extern const u8 BattleScript_FlatterTryConfuse[];
+extern const u8 BattleScript_EffectWillOWisp[];
+extern const u8 BattleScript_WaterVeilPrevents[];
+extern const u8 BattleScript_AlreadyBurned[];
+extern const u8 BattleScript_EffectMemento[];
+extern const u8 BattleScript_82DA119[];
+extern const u8 BattleScript_82DA13C[];
+extern const u8 BattleScript_82DA148[];
+extern const u8 BattleScript_82DA153[];
+extern const u8 BattleScript_82DA15A[];
+extern const u8 BattleScript_EffectFacade[];
+extern const u8 BattleScript_FacadeDoubleDmg[];
+extern const u8 BattleScript_EffectFocusPunch[];
+extern const u8 BattleScript_EffectSmellingsalt[];
+extern const u8 BattleScript_82DA1BA[];
+extern const u8 BattleScript_EffectFollowMe[];
+extern const u8 BattleScript_EffectNaturePower[];
+extern const u8 BattleScript_EffectCharge[];
+extern const u8 BattleScript_EffectTaunt[];
+extern const u8 BattleScript_EffectHelpingHand[];
+extern const u8 BattleScript_EffectTrick[];
+extern const u8 BattleScript_EffectRolePlay[];
+extern const u8 BattleScript_EffectWish[];
+extern const u8 BattleScript_EffectAssist[];
+extern const u8 BattleScript_EffectIngrain[];
+extern const u8 BattleScript_EffectSuperpower[];
+extern const u8 BattleScript_EffectMagicCoat[];
+extern const u8 BattleScript_EffectRecycle[];
+extern const u8 BattleScript_EffectRevenge[];
+extern const u8 BattleScript_EffectBrickBreak[];
+extern const u8 BattleScript_82DA306[];
+extern const u8 BattleScript_82DA319[];
+extern const u8 BattleScript_EffectYawn[];
+extern const u8 BattleScript_82DA378[];
+extern const u8 BattleScript_82DA382[];
+extern const u8 BattleScript_EffectKnockOff[];
+extern const u8 BattleScript_EffectEndeavor[];
+extern const u8 BattleScript_EffectEruption[];
+extern const u8 BattleScript_EffectSkillSwap[];
+extern const u8 BattleScript_EffectImprison[];
+extern const u8 BattleScript_EffectRefresh[];
+extern const u8 BattleScript_EffectGrudge[];
+extern const u8 BattleScript_EffectSnatch[];
+extern const u8 BattleScript_EffectLowKick[];
+extern const u8 BattleScript_EffectSecretPower[];
+extern const u8 BattleScript_EffectDoubleEdge[];
+extern const u8 BattleScript_EffectTeeterDance[];
+extern const u8 BattleScript_82DA47B[];
+extern const u8 BattleScript_82DA4C7[];
+extern const u8 BattleScript_82DA4D0[];
+extern const u8 BattleScript_82DA4E5[];
+extern const u8 BattleScript_82DA4F3[];
+extern const u8 BattleScript_82DA501[];
+extern const u8 BattleScript_82DA50F[];
+extern const u8 BattleScript_82DA520[];
+extern const u8 BattleScript_EffectMudSport[];
+extern const u8 BattleScript_EffectPoisonFang[];
+extern const u8 BattleScript_EffectWeatherBall[];
+extern const u8 BattleScript_EffectOverheat[];
+extern const u8 BattleScript_EffectTickle[];
+extern const u8 BattleScript_TickleDoMoveAnim[];
+extern const u8 BattleScript_TickleTryLowerDef[];
+extern const u8 BattleScript_TickleEnd[];
+extern const u8 BattleScript_CantLowerMultipleStats[];
+extern const u8 BattleScript_EffectCosmicPower[];
+extern const u8 BattleScript_CosmicPowerDoMoveAnim[];
+extern const u8 BattleScript_CosmicPowerTrySpDef[];
+extern const u8 BattleScript_CosmicPowerEnd[];
+extern const u8 BattleScript_EffectSkyUppercut[];
+extern const u8 BattleScript_EffectBulkUp[];
+extern const u8 BattleScript_BulkUpDoMoveAnim[];
+extern const u8 BattleScript_BulkUpTryDef[];
+extern const u8 BattleScript_BulkUpEnd[];
+extern const u8 BattleScript_EffectCalmMind[];
+extern const u8 BattleScript_CalmMindDoMoveAnim[];
+extern const u8 BattleScript_CalmMindTrySpDef[];
+extern const u8 BattleScript_CalmMindEnd[];
+extern const u8 BattleScript_CantRaiseMultipleStats[];
+extern const u8 BattleScript_EffectDragonDance[];
+extern const u8 BattleScript_DragonDanceDoMoveAnim[];
+extern const u8 BattleScript_DragonDanceTrySpeed[];
+extern const u8 BattleScript_DragonDanceEnd[];
+extern const u8 BattleScript_EffectCamouflage[];
+extern const u8 BattleScript_FaintAttacker[];
+extern const u8 BattleScript_FaintTarget[];
+extern const u8 BattleScript_82DA7C4[];
+extern const u8 BattleScript_82DA7CD[];
+extern const u8 BattleScript_82DA816[];
+extern const u8 BattleScript_82DA8D0[];
+extern const u8 BattleScript_82DA8F5[];
+extern const u8 BattleScript_82DA8F6[];
+extern const u8 BattleScript_82DA8FC[];
+extern const u8 BattleScript_82DA908[];
+extern const u8 BattleScript_82DA92C[];
+extern const u8 BattleScript_LocalTrainerBattleWon[];
+extern const u8 BattleScript_LocalTwoTrainersDefeated[];
+extern const u8 BattleScript_LocalBattleWonLoseTexts[];
+extern const u8 BattleScript_LocalBattleWonReward[];
+extern const u8 BattleScript_PayDayMoneyAndPickUpItems[];
+extern const u8 BattleScript_LocalBattleLost[];
+extern const u8 BattleScript_LocalBattleLostPrintWhiteOut[];
+extern const u8 BattleScript_LocalBattleLostEnd[];
+extern const u8 BattleScript_CheckDomeDrew[];
+extern const u8 BattleScript_LocalBattleLostPrintTrainersWinText[];
+extern const u8 BattleScript_LocalBattleLostDoTrainer2WinText[];
+extern const u8 BattleScript_LocalBattleLostEnd_[];
+extern const u8 BattleScript_82DAA0B[];
+extern const u8 BattleScript_82DAA31[];
+extern const u8 BattleScript_LinkBattleWonOrLost[];
+extern const u8 BattleScript_LinkBattleWonOrLostWaitEnd[];
+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[];
+extern const u8 BattleScript_WildMonFled[];
+extern const u8 BattleScript_PrintCantRunFromTrainer[];
+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_TryLearnMoveLoop[];
+extern const u8 BattleScript_AskToLearnMove[];
+extern const u8 BattleScript_ForgotAndLearnedNewMove[];
+extern const u8 BattleScript_LearnedNewMove[];
+extern const u8 BattleScript_LearnMoveReturn[];
+extern const u8 BattleScript_RainContinuesOrEnds[];
+extern const u8 BattleScript_RainContinuesOrEndsEnd[];
+extern const u8 BattleScript_DamagingWeatherContinues[];
+extern const u8 BattleScript_DamagingWeatherLoop[];
+extern const u8 BattleScript_DamagingWeatherLoopIncrement[];
+extern const u8 BattleScript_DamagingWeatherContinuesEnd[];
+extern const u8 BattleScript_SandStormHailEnds[];
+extern const u8 BattleScript_SunlightContinues[];
+extern const u8 BattleScript_SunlightFaded[];
+extern const u8 BattleScript_OverworldWeatherStarts[];
+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_82DADD8[];
+extern const u8 BattleScript_82DADF1[];
+extern const u8 BattleScript_MistProtected[];
+extern const u8 BattleScript_RageIsBuilding[];
+extern const u8 BattleScript_MoveUsedIsDisabled[];
+extern const u8 BattleScript_SelectingDisabledMove[];
+extern const u8 BattleScript_DisabledNoMore[];
+extern const u8 BattleScript_82DAE2A[];
+extern const u8 BattleScript_82DAE2D[];
+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[];
+extern const u8 BattleScript_SelectingTormentedMove[];
+extern const u8 BattleScript_82DB08D[];
+extern const u8 BattleScript_82DB098[];
+extern const u8 BattleScript_SelectingNotAllowedMoveTaunt[];
+extern const u8 BattleScript_MoveUsedIsTaunted[];
+extern const u8 BattleScript_82DB0AF[];
+extern const u8 BattleScript_WishComesTrue[];
+extern const u8 BattleScript_82DB0DE[];
+extern const u8 BattleScript_IngrainTurnHeal[];
+extern const u8 BattleScript_82DB109[];
+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_82DB185[];
+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[];
+extern const u8 BattleScript_DefrostedViaFireMove[];
+extern const u8 BattleScript_MoveUsedIsParalyzed[];
+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_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[];
+extern const u8 BattleScript_MoveEffectFreeze[];
+extern const u8 BattleScript_MoveEffectParalysis[];
+extern const u8 BattleScript_MoveEffectUproar[];
+extern const u8 BattleScript_MoveEffectToxic[];
+extern const u8 BattleScript_MoveEffectPayDay[];
+extern const u8 BattleScript_MoveEffectWrap[];
+extern const u8 BattleScript_MoveEffectConfusion[];
+extern const u8 BattleScript_MoveEffectRecoil33[];
+extern const u8 BattleScript_DoRecoil33[];
+extern const u8 BattleScript_Recoil33End[];
+extern const u8 BattleScript_ItemSteal[];
+extern const u8 BattleScript_DrizzleActivates[];
+extern const u8 BattleScript_SpeedBoostActivates[];
+extern const u8 BattleScript_TraceActivates[];
+extern const u8 BattleScript_RainDishActivates[];
+extern const u8 BattleScript_SandstreamActivates[];
+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[];
+extern const u8 BattleScript_DampStopsExplosion[];
+extern const u8 BattleScript_MoveHPDrain_PPLoss[];
+extern const u8 BattleScript_MoveHPDrain[];
+extern const u8 BattleScript_MonMadeMoveUseless_PPLoss[];
+extern const u8 BattleScript_MonMadeMoveUseless[];
+extern const u8 BattleScript_FlashFireBoost_PPLoss[];
+extern const u8 BattleScript_FlashFireBoost[];
+extern const u8 BattleScript_82DB5B9[];
+extern const u8 BattleScript_AbilityNoStatLoss[];
+extern const u8 BattleScript_BRNPrevention[];
+extern const u8 BattleScript_PRLZPrevention[];
+extern const u8 BattleScript_PSNPrevention[];
+extern const u8 BattleScript_ObliviousPreventsAttraction[];
+extern const u8 BattleScript_FlinchPrevention[];
+extern const u8 BattleScript_OwnTempoPrevents[];
+extern const u8 BattleScript_SoundproofProtected[];
+extern const u8 BattleScript_AbilityNoSpecificStatLoss[];
+extern const u8 BattleScript_StickyHoldActivates[];
+extern const u8 BattleScript_ColorChangeActivates[];
+extern const u8 BattleScript_RoughSkinActivates[];
+extern const u8 BattleScript_CuteCharmActivates[];
+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[];
+extern const u8 BattleScript_BerryCurePsnEnd2[];
+extern const u8 BattleScript_BerryCurePsnRet[];
+extern const u8 BattleScript_BerryCureBrnEnd2[];
+extern const u8 BattleScript_BerryCureBrnRet[];
+extern const u8 BattleScript_BerryCureFrzEnd2[];
+extern const u8 BattleScript_BerryCureFrzRet[];
+extern const u8 BattleScript_BerryCureSlpEnd2[];
+extern const u8 BattleScript_BerryCureSlpRet[];
+extern const u8 BattleScript_BerryCureConfusionEnd2[];
+extern const u8 BattleScript_BerryCureConfusionRet[];
+extern const u8 BattleScript_BerryCureChosenStatusEnd2[];
+extern const u8 BattleScript_BerryCureChosenStatusRet[];
+extern const u8 BattleScript_WhiteHerbEnd2[];
+extern const u8 BattleScript_WhiteHerbRet[];
+extern const u8 BattleScript_ItemHealHP_RemoveItem[];
+extern const u8 BattleScript_BerryPPHealEnd2[];
+extern const u8 BattleScript_ItemHealHP_End2[];
+extern const u8 BattleScript_ItemHealHP_Ret[];
+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_82DB9C1[];
+extern const u8 BattleScript_82DB9C8[];
+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[];
+
+#endif // GUARD_BATTLE_SCRIPTS_H
diff --git a/include/battle_setup.h b/include/battle_setup.h
index e4acd8601..0168022cc 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -4,6 +4,9 @@
void BattleSetup_StartScriptedWildBattle(void);
u8 BattleSetup_GetTerrainId(void);
u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data);
+void BattleSetup_StartBattlePikeWildBattle(void);
+void BattleSetup_StartWildBattle(void);
+void BattleSetup_StartRoamerBattle(void);
u8 HasTrainerAlreadyBeenFought(u16);
void trainer_flag_set(u16);
diff --git a/include/berry.h b/include/berry.h
index f51503d41..425a664c9 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -11,6 +11,16 @@ enum
BERRY_FIRMNESS_SUPER_HARD,
};
+enum
+{
+ FLAVOR_SPICY,
+ FLAVOR_DRY,
+ FLAVOR_SWEET,
+ FLAVOR_BITTER,
+ FLAVOR_SOUR,
+ FLAVOR_COUNT
+};
+
#define NUM_BERRIES 44
extern const u8 *const gBerryTreeFieldObjectGraphicsIdTablePointers[NUM_BERRIES];
diff --git a/include/berry_blender.h b/include/berry_blender.h
new file mode 100644
index 000000000..fb62e3fa3
--- /dev/null
+++ b/include/berry_blender.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_BERRY_BLENDER_H
+#define GUARD_BERRY_BLENDER_H
+
+void DoBerryBlending(void);
+u16 GetBlenderArrowPosition(void);
+void ShowBerryBlenderRecordWindow(void);
+
+#endif // GUARD_BERRY_BLENDER_H
diff --git a/include/decompress.h b/include/decompress.h
index 36be803e0..34a678cda 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -28,4 +28,6 @@ void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32
void LoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic);
void LoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic);
+u32 sub_8034974(const u8 *ptr);
+
#endif // GUARD_DECOMPRESS_H
diff --git a/include/flags.h b/include/flags.h
index a891cc13f..31d634c59 100644
--- a/include/flags.h
+++ b/include/flags.h
@@ -1,7 +1,9 @@
#ifndef GUARD_FLAGS_H
#define GUARD_FLAGS_H
-#define FLAG_PENDING_DAYCARE_EGG 0x86
+#define FLAG_340 0x340
+#define FLAG_LEGENDARIES_IN_SOOTOPOLIS 0x53
+#define FLAG_PENDING_DAYCARE_EGG 0x86
#define FLAG_TRAINER_FLAG_START 0x500
diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h
index 6cdfd13e1..659302fd5 100644
--- a/include/gba/m4a_internal.h
+++ b/include/gba/m4a_internal.h
@@ -406,7 +406,7 @@ void m4aSoundVSyncOff(void);
void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo);
void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
-void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch);
+void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch);
void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan);
void ClearModM(struct MusicPlayerTrack *track);
void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth);
diff --git a/include/global.h b/include/global.h
index 070f8c0d3..f3ec9ce33 100644
--- a/include/global.h
+++ b/include/global.h
@@ -167,9 +167,31 @@ struct BerryCrush
u32 unk;
};
+#define PLAYER_NAME_LENGTH 8
+
+struct UnknownSaveBlock2Struct
+{
+ u8 field_0;
+ u8 field_1;
+ u8 field_2[2];
+ u8 field_4[8];
+ u8 field_C[16];
+ u16 field_1C[6];
+ u16 field_28[6];
+ u8 field_34[176];
+ u8 field_E4;
+ u8 field_E5;
+ u8 field_E6;
+ u8 field_E7;
+ u8 field_E8;
+ u8 field_E9;
+ u8 field_EA;
+ u8 field_EB;
+}; // sizeof = 0xEC
+
struct SaveBlock2
{
- /*0x00*/ u8 playerName[8];
+ /*0x00*/ u8 playerName[PLAYER_NAME_LENGTH];
/*0x08*/ u8 playerGender; // MALE, FEMALE
/*0x09*/ u8 specialSaveWarp;
/*0x0A*/ u8 playerTrainerId[4];
@@ -201,7 +223,8 @@ struct SaveBlock2
// All below could be a one giant struct
- /*0x64C*/ u8 field_64C[0x588];
+ /*0x64C*/ u8 field_64C[236];
+ /*0x738*/ struct UnknownSaveBlock2Struct field_738[5]; // No idea here, it's probably wrong, no clue.
/*0xBD4*/ u16 field_BD4;
/*0xBD6*/ u16 field_BD6;
/*0xBD8*/ u8 field_BD8[11];
@@ -215,10 +238,12 @@ struct SaveBlock2
/*0xCA9*/ u8 field_CA9_d : 1; // 0x20
/*0xCA9*/ u8 field_CA9_e : 1; // 0x40
/*0xCA9*/ u8 field_CA9_f : 1; // 0x80
- /*0xCAA*/ u16 field_CAA[0x2e];
+ /*0xCAA*/ u16 field_CAA[4];
+ /*0xCB2*/ u16 battlePyramidWildHeaderId;
+ /*0xCB4*/ u8 field_CB4[82];
/*0xD06*/ u8 field_D06;
/*0xD07*/ u8 field_D07;
- /*0xd08*/ u8 filler_D08[0x112];
+ /*0xD08*/ u8 filler_D08[0x112];
/*0xE1A*/ u16 battlePyramidFloor; // possibly?
/*0xE1C*/ u8 field_E1C[16];
/*0xE2C*/ struct PyramidBag pyramidBag;
diff --git a/include/graphics.h b/include/graphics.h
index c50fdef3f..4c5a0952b 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -91,5 +91,23 @@ extern const u8 gUnknown_08DB9F08[];
extern const u8 gUnknown_08DB9FFC[];
extern const u8 gUnknown_08DBA020[];
extern const u8 gUnknown_08DBA12C[];
+extern const u8 gUnknown_08DD87C0[];
+extern const u8 gUnknown_08DD8EE0[];
+extern const u16 gUnknown_08DD8780[];
+extern const u8 gUnknown_08DD90E0[];
+extern const u8 gUnknown_08DD9718[];
+extern const u16 gUnknown_08DD9080[];
+extern const u8 gUnknown_08DD98B4[];
+extern const u8 gUnknown_08DD9E58[];
+extern const u16 gUnknown_08DD9874[];
+extern const u8 gUnknown_08DDA02C[];
+extern const u8 gUnknown_08DDA63C[];
+extern const u16 gUnknown_08DD9FEC[];
+extern const u8 gUnknown_08DDA840[];
+extern const u8 gUnknown_08DDAE40[];
+extern const u16 gUnknown_08DDA800[];
+extern const u8 gUnknown_08DDB020[];
+extern const u8 gUnknown_08DDB2C4[];
+extern const u16 gUnknown_08DDAFE0[];
#endif //GUARD_GRAPHICS_H
diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h
new file mode 100644
index 000000000..553e7c262
--- /dev/null
+++ b/include/item_menu_icons.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_ITEM_MENU_ICONS
+#define GUARD_ITEM_MENU_ICONS
+
+u8 sub_80D511C(u8 a0, u8 a1, u8 a2, u8 a3);
+
+#endif // GUARD_ITEM_MENU_ICONS
diff --git a/include/items.h b/include/items.h
index 1f6c288c5..1a6df42db 100644
--- a/include/items.h
+++ b/include/items.h
@@ -386,6 +386,10 @@ enum
ITEM_OLD_SEA_MAP, // 0x178
};
+#define FIRST_BERRY_INDEX ITEM_CHERI_BERRY
+#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY
+#define ITEM_TO_BERRY(itemId)(((itemId - FIRST_BERRY_INDEX) + 1))
+
#define NUM_TECHNICAL_MACHINES 50
#define NUM_HIDDEN_MACHINES 8
diff --git a/include/link.h b/include/link.h
index 7a6563144..fe5429497 100644
--- a/include/link.h
+++ b/include/link.h
@@ -2,6 +2,7 @@
#define GUARD_LINK_H
#define MAX_LINK_PLAYERS 4
+#define MAX_RFU_PLAYERS 5
#define CMD_LENGTH 8
#define QUEUE_CAPACITY 50
#define BLOCK_BUFFER_SIZE 0x100
@@ -68,7 +69,7 @@ struct LinkPlayer
/* 0x08 */ u8 name[11];
/* 0x13 */ u8 gender;
/* 0x14 */ u32 linkType;
- /* 0x18 */ u16 lp_field_18;
+ /* 0x18 */ u16 lp_field_18; // battle bank in battles
/* 0x1A */ u16 language;
};
@@ -131,7 +132,7 @@ struct BlockRequest
extern const struct BlockRequest sBlockRequestLookupTable[5];
extern struct Link gLink;
-extern u16 gRecvCmds[CMD_LENGTH][MAX_LINK_PLAYERS];
+extern u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE];
extern u16 gLinkType;
extern u32 gLinkStatus;
@@ -179,6 +180,7 @@ void LinkVSync(void);
void Timer3Intr(void);
void SerialCB(void);
u8 GetLinkPlayerCount(void);
+bool32 InUnionRoom(void);
void sub_800E0E8(void);
bool8 sub_800A520(void);
diff --git a/include/menu.h b/include/menu.h
index e93d688e4..2052a8dad 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -1,6 +1,7 @@
#ifndef GUARD_MENU_H
#define GUARD_MENU_H
+#include "text.h"
#include "window.h"
struct MenuAction
@@ -31,5 +32,7 @@ void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirs
s8 sub_8198C58(void);
void do_scheduled_bg_tilemap_copies_to_vram(void);
void clear_scheduled_bg_copies_to_vram(void);
+void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor *color, s8 speed, const u8 *str);
+void sub_8197B1C(u8 windowId, bool8 copyToVram, u16 a2, u16 a3);
#endif // GUARD_MENU_H
diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h
index 42b8c60b1..c52184972 100644
--- a/include/new_menu_helpers.h
+++ b/include/new_menu_helpers.h
@@ -13,5 +13,6 @@ void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback);
void sub_8197434(u8 a0, u8 a1);
void SetStandardWindowBorderStyle(u8 a0, u8 a1);
void sub_8197930(void);
+u8 GetPlayerTextSpeed(void);
#endif // GUARD_NEW_MENU_HELPERS_H
diff --git a/include/pokeblock.h b/include/pokeblock.h
index 5d52f8e55..a145cbada 100644
--- a/include/pokeblock.h
+++ b/include/pokeblock.h
@@ -23,23 +23,11 @@ enum
};
void ClearPokeblocks(void);
-
-/*
-void sub_810B96C(void);
-u8 sub_810BA50(s16, s16, u8);
-u8 sub_810C9B0(struct Pokeblock *);
-s16 GetPokeblockData(const struct Pokeblock *, u8);
-u8 sub_810C9E8(struct Pokeblock *);
-void sub_810BA7C(u8);
-bool8 PokeblockClearIfExists(u8);
+s8 GetFirstFreePokeblockSlot(void);
+bool32 AddPokeblock(struct Pokeblock *pokeblock);
+u8 GetHighestPokeblocksFlavorLevel(const struct Pokeblock *pokeblock);
+u8 GetPokeblocksFeel(const struct Pokeblock *pokeblock);
+u8 GetPokeblocksFlavor(const struct Pokeblock *pokeblock);
s16 PokeblockGetGain(u8, const struct Pokeblock *);
-u8 sub_810CB68(u8, u8*);
-void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest);
-void CB2_PreparePokeblockFeedScene(void);
-
-#include "main.h"
-
-void sub_8136130(struct Pokeblock *, MainCallback);
-*/
#endif // GUARD_POKEBLOCK_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 1eb052f4e..480c8d9b9 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -642,8 +642,8 @@ u8 CheckPartyPokerus(struct Pokemon *party, u8 selection);
u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection);
void UpdatePartyPokerusTime(u16 days);
void PartySpreadPokerus(struct Pokemon *party);
-s8 GetMonFlavourRelation(struct Pokemon *mon, u8 a2);
-s8 GetFlavourRelationByPersonality(u32 personality, u8 a2);
+s8 GetMonFlavorRelation(struct Pokemon *mon, u8 a2);
+s8 GetFlavorRelationByPersonality(u32 personality, u8 a2);
u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit);
u8 GetDefaultMoveTarget(u8 atkBank);
u16 PlayerGenderToFrontTrainerPicId(u8 playerGender);
diff --git a/include/recorded_battle.h b/include/recorded_battle.h
index ae2ed1a79..adc4c6c85 100644
--- a/include/recorded_battle.h
+++ b/include/recorded_battle.h
@@ -2,23 +2,40 @@
#define GUARD_RECORDED_BATTLE_H
extern u32 gRecordedBattleRngSeed;
+extern u32 gBattlePalaceMoveSelectionRngValue;
+extern u8 gUnknown_0203C7B4;
void sub_8184DA4(u8 arg0);
-void sub_8185F84(void);
void sub_8184E58(void);
-u8 RecordedBattle_ReadBankAction(u8 bank);
void RecordedBattle_SetBankAction(u8 bank, u8 action);
void RecordedBattle_ClearBankAction(u8 bank, u8 bytesToClear);
+u8 RecordedBattle_ReadBankAction(u8 bank);
+u8 sub_81850D0(void);
+u8 sub_81850DC(u8 *arg0);
+void sub_81851A8(u8 *arg0);
+bool32 CanCopyRecordedBattleSaveData(void);
+u32 MoveRecordedBattleToSaveData(void);
+void PlayRecordedBattle(void (*CB2_After)(void));
+u8 sub_8185EA0(void);
+u8 sub_8185EAC(void);
+void RecordedBattle_SaveParties(void);
+u8 GetActiveBankLinkPlayerGender(void);
+void sub_8185F84(void);
void sub_8185F90(u16 arg0);
-bool8 sub_8186450(void);
u8 sub_8185FAC(void);
-u8 sub_8185FB8(void);
-u8 MoveRecordedBattleToSaveData(void);
-void sub_818603C(u8);
-void sub_8185FD0(void);
+u8 GetBattleStyleInRecordedBattle(void);
+u8 GetTextSpeedInRecordedBattle(void);
+void RecordedBattle_CopyBankMoves(void);
+void sub_818603C(u8 arg0);
+u32 GetAiScriptsInRecordedBattle(void);
void sub_8186444(void);
-void sub_8185EB8(void);
-u8 sub_81850DC(u8 *arg0);
-u8 sub_8185F40(void);
+bool8 sub_8186450(void);
+void sub_8186468(u8 *dst);
+u8 sub_818649C(void);
+u8 sub_81864A8(void);
+u8 sub_81864B4(void);
+u8 sub_81864C0(void);
+void sub_81864CC(void);
+u16 *sub_81864E0(void);
#endif // GUARD_RECORDED_BATTLE_H
diff --git a/include/save.h b/include/save.h
index 6c1238cd2..3bd1ff8cf 100644
--- a/include/save.h
+++ b/include/save.h
@@ -56,41 +56,42 @@ enum
HOF_DELETE_SAVE // unused
};
+#define SECTION_ID_RECORDED_BATTLE 31
+
void ClearSaveData(void);
void ResetSaveCounters(void);
-//bool32 ManipulateSectorBits(u8 op, u8 bit);
-//u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *a2);
-u8 HandleWriteSector(u16, const struct SaveSectionLocation *);
-//u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size);
-u8 TryWriteSector(u8, u8 *);
-//u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location);
-//u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location);
-//u8 sub_812550C(u16 a1, const struct SaveSectionLocation *location);
+bool32 SetDamagedSectorBits(u8 op, u8 bit);
+u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *location);
+u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location);
+u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size);
+u8 TryWriteSector(u8 sector, u8 *data);
+u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location);
+u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location);
+u8 sub_81529D4(u16 a1, const struct SaveSectionLocation *location);
u8 sub_8152A34(u16 a1, const struct SaveSectionLocation *location);
-u8 ClearSaveData_2(u16, const struct SaveSectionLocation *location);
-//u8 sub_8125758(u16 a1, const struct SaveSectionLocation *location);
-//u8 sub_81257F0(u16 a1, const struct SaveSectionLocation *location);
-//u8 sub_812587C(u16 a1, const struct SaveSectionLocation *location);
-u8 sub_8152E10(u16, const struct SaveSectionLocation *location);
+u8 ClearSaveData_2(u16 a1, const struct SaveSectionLocation *location);
+u8 sav12_xor_get(u16 a1, const struct SaveSectionLocation *location);
+u8 sub_8152CAC(u16 a1, const struct SaveSectionLocation *location);
+u8 sub_8152D44(u16 a1, const struct SaveSectionLocation *location);
+u8 sub_8152DD0(u16 a1, const struct SaveSectionLocation *location);
+u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location);
u8 GetSaveValidStatus(const struct SaveSectionLocation *location);
-//u8 sub_8125B88(u8 a1, u8 *data, u16 size);
-u8 DoReadFlashWholeSection(u8, struct SaveSection *);
-u16 CalculateChecksum(void *, u16);
+u8 sub_81530DC(u8 a1, u8 *data, u16 size);
+u8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section);
+u16 CalculateChecksum(void *data, u16 size);
+void UpdateSaveAddresses(void);
u8 HandleSavingData(u8 saveType);
-//u8 TrySavingData(u8 saveType);
-//u8 sub_8125D80(void);
-//bool8 sub_8125DA8(void);
-//u8 sub_8125DDC(void);
-//u8 sub_8125E04(void);
-//u8 sub_8125E2C(void);
-//bool8 sub_8125E6C(void);
-//u8 sub_8125EC8(u8 a1);
-//bool8 unref_sub_8125F4C(struct UnkSaveSection *a1);
-//u8 unref_sub_8125FA0(void);
-//u8 unref_sub_8125FF0(u8 *data, u16 size);
-//u8 unref_sub_8126068(u8 sector, u8 *data, u32 size);
-//u8 unref_sub_8126080(u8 sector, u8 *data);
+u8 TrySavingData(u8 saveType);
+u8 sub_8153380(void);
+bool8 sub_81533AC(void);
+u8 sub_81533E0(void);
+u8 sub_8153408(void);
+u8 sub_8153430(void);
+bool8 sub_8153474(void);
+u8 sub_81534D0(u8 a1);
u16 sub_815355C(void);
-u8 sub_81534D0(u8);
+u32 TryCopySpecialSaveSection(u8 sector, u8* dst);
+u32 sub_8153634(u8 sector, u8* src);
+void sub_8153688(u8 taskId);
#endif // GUARD_SAVE_H
diff --git a/include/strings.h b/include/strings.h
index 08e2b4bba..a32ba4c83 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -82,5 +82,6 @@ extern const u8 gText_NoRegistry[];
extern const u8 gText_OkayToDeleteFromRegistry[];
extern const u8 gText_RegisteredDataDeleted[];
extern const u8 gUnknown_085EA79D[];
+extern const u8 gText_Coins[];
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index 594661717..289c7d2b5 100644
--- a/include/text.h
+++ b/include/text.h
@@ -65,6 +65,7 @@
#define CHAR_x 0xEC
#define CHAR_y 0xED
#define CHAR_z 0xEE
+#define CHAR_SPECIAL_F7 0xF7
#define CHAR_SPECIAL_F9 0xF9
#define CHAR_COLON 0xF0
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
@@ -85,6 +86,8 @@
#define NUM_TEXT_PRINTERS 32
+#define TEXT_SPEED_FF 0xFF
+
struct TextPrinterSubStruct
{
u8 font_type:4; // 0x14
diff --git a/include/tv.h b/include/tv.h
index 43f36d69f..75338704f 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -13,5 +13,7 @@ void sub_80EE184(void);
void sub_80EEA70(void);
void sub_80F14F8(TVShow *shows);
size_t sub_80EF370(int value);
+bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
+void SetPokemonAnglerSpecies(u16 species);
#endif //GUARD_TV_H
diff --git a/include/unk_text_util.h b/include/unk_text_util.h
new file mode 100644
index 000000000..72243a90e
--- /dev/null
+++ b/include/unk_text_util.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_UNK_TEXT_UTIL_H
+#define GUARD_UNK_TEXT_UTIL_H
+
+void UnkTextUtil_Reset(void);
+void UnkTextUtil_SetPtrI(u8 idx, const u8 *ptr);
+u8 *UnkTextUtil_StringExpandPlaceholders(u8 *dest, const u8 *src);
+const u8 *UnkTextUtil_GetPtrI(u8 idx);
+
+#endif //GUARD_UNK_TEXT_UTIL_H
diff --git a/include/vars.h b/include/vars.h
index f8057d4b5..763b7379d 100644
--- a/include/vars.h
+++ b/include/vars.h
@@ -30,6 +30,7 @@
#define VAR_RESET_RTC_ENABLE 0x402C
#define VAR_0x4037 0x4037
+#define VAR_ALTERING_CAVE_WILD_SET 0x403E
#define VAR_DAYS 0x4040
#define VAR_DEPT_STORE_FLOOR 0x4043
diff --git a/include/wild_encounter.h b/include/wild_encounter.h
new file mode 100644
index 000000000..55bbaa7dd
--- /dev/null
+++ b/include/wild_encounter.h
@@ -0,0 +1,44 @@
+#ifndef GUARD_WILD_ENCOUNTER_H
+#define GUARD_WILD_ENCOUNTER_H
+
+#define LAND_WILD_COUNT 12
+#define WATER_WILD_COUNT 5
+#define ROCK_WILD_COUNT 5
+#define FISH_WILD_COUNT 10
+
+struct WildPokemon
+{
+ u8 minLevel;
+ u8 maxLevel;
+ u16 species;
+};
+
+struct WildPokemonInfo
+{
+ u8 encounterRate;
+ const struct WildPokemon *wildPokemon;
+};
+
+struct WildPokemonHeader
+{
+ u8 mapGroup;
+ u8 mapNum;
+ const struct WildPokemonInfo *landMonsInfo;
+ const struct WildPokemonInfo *waterMonsInfo;
+ const struct WildPokemonInfo *rockSmashMonsInfo;
+ const struct WildPokemonInfo *fishingMonsInfo;
+};
+
+extern const struct WildPokemonHeader gWildMonHeaders[];
+
+void DisableWildEncounters(bool8 disabled);
+bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavior);
+void ScrSpecial_RockSmashWildEncounter(void);
+bool8 SweetScentWildEncounter(void);
+bool8 DoesCurrentMapHaveFishingMons(void);
+void FishingWildEncounter(u8 rod);
+u16 GetLocalWildMon(bool8 *isWaterMon);
+u16 GetLocalWaterMon(void);
+bool8 UpdateRepelCounter(void);
+
+#endif // GUARD_WILD_ENCOUNTER_H
diff --git a/ld_script.txt b/ld_script.txt
index c6ee53feb..cf7b38ec1 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -83,10 +83,8 @@ SECTIONS {
asm/smokescreen.o(.text);
asm/pokeball.o(.text);
src/load_save.o(.text);
- asm/load_save.o(.text);
asm/trade.o(.text);
src/berry_blender.o(.text);
- asm/berry_blender.o(.text);
src/play_time.o(.text);
src/new_game.o(.text);
asm/rom4.o(.text);
@@ -124,7 +122,7 @@ SECTIONS {
asm/battle_setup.o(.text);
asm/cable_club.o(.text);
asm/trainer_see.o(.text);
- asm/wild_encounter.o(.text);
+ src/wild_encounter.o(.text);
asm/field_effect.o(.text);
asm/unknown_task.o(.text);
asm/option_menu.o(.text);
@@ -186,7 +184,6 @@ SECTIONS {
asm/roulette.o(.text);
asm/pokedex_cry_screen.o(.text);
src/coins.o(.text);
- asm/coins.o(.text);
asm/landmark.o(.text);
asm/fldeff_strength.o(.text);
asm/battle_transition.o(.text);
@@ -232,7 +229,7 @@ SECTIONS {
asm/fldeff_teleport.o(.text);
asm/battle_link_817C95C.o(.text);
asm/pokemon_animation.o(.text);
- asm/recorded_battle.o(.text);
+ src/recorded_battle.o(.text);
src/battle_controller_recorded_opponent.o(.text);
src/battle_controller_recorded_player.o(.text);
src/battle_dome_cards.o(.text);
@@ -244,14 +241,14 @@ SECTIONS {
asm/item_menu.o(.text);
asm/list_menu.o(.text);
asm/menu_indicators.o(.text);
- asm/unk_text_util.o(.text);
+ src/unk_text_util.o(.text);
src/save_location.o(.text);
asm/item_icon.o(.text);
asm/party_menu.o(.text);
asm/battle_tent.o(.text);
src/unk_text_util_2.o(.text);
src/multiboot.o(.text);
- asm/unk_81BAD84.o(.text);
+ src/unk_81BAD84.o(.text);
src/battle_controller_player_partner.o(.text);
asm/fldeff_groundshake.o(.text);
asm/fossil_specials.o(.text);
@@ -472,7 +469,7 @@ SECTIONS {
data/party_menu.o(.rodata);
data/battle_tent.o(.rodata);
src/unk_text_util_2.o(.rodata);
- data/unk_81BAD84.o(.rodata);
+ src/unk_81BAD84.o(.rodata);
src/battle_controller_player_partner.o(.rodata);
data/fossil_special_fldeff_groundshake.o(.rodata);
src/berry_fix_program.o(.rodata);
diff --git a/src/battle_2.c b/src/battle_2.c
index 798fabf4b..eead4d7a9 100644
--- a/src/battle_2.c
+++ b/src/battle_2.c
@@ -6,6 +6,7 @@
#include "gpu_regs.h"
#include "unknown_task.h"
#include "battle_setup.h"
+#include "battle_scripts.h"
#include "pokemon.h"
#include "palette.h"
#include "task.h"
@@ -119,14 +120,14 @@ extern u32 gBattleExecBuffer;
extern u8 gMultiHitCounter;
extern u8 gBattleMoveFlags;
extern s32 gBattleMoveDamage;
-extern const u8* gUnknown_02024230[BATTLE_BANKS_COUNT];
-extern u16 gUnknownMovesUsedByBanks[BATTLE_BANKS_COUNT];
-extern u16 gLastUsedMovesByBanks[BATTLE_BANKS_COUNT];
-extern u16 gUnknown_02024250[BATTLE_BANKS_COUNT];
-extern u16 gUnknown_02024258[BATTLE_BANKS_COUNT];
-extern u16 gUnknown_02024260[BATTLE_BANKS_COUNT];
+extern const u8* gPalaceSelectionBattleScripts[BATTLE_BANKS_COUNT];
+extern u16 gLastPrintedMoves[BATTLE_BANKS_COUNT];
+extern u16 gLastMoves[BATTLE_BANKS_COUNT];
+extern u16 gLastLandedMoves[BATTLE_BANKS_COUNT];
+extern u16 gLastHitByType[BATTLE_BANKS_COUNT];
+extern u16 gLastResultingMoves[BATTLE_BANKS_COUNT];
extern u16 gLockedMoves[BATTLE_BANKS_COUNT];
-extern u8 gUnknown_02024270[BATTLE_BANKS_COUNT];
+extern u8 gLastHitBy[BATTLE_BANKS_COUNT];
extern u8 gUnknown_02024284[BATTLE_BANKS_COUNT];
extern u32 gStatuses3[BATTLE_BANKS_COUNT];
extern u16 gSideAffecting[2];
@@ -140,16 +141,15 @@ extern u16 gChosenMovesByBanks[BATTLE_BANKS_COUNT];
extern u8 gCurrentActionFuncId;
extern u8 gLastUsedAbility;
extern u8 gUnknown_0203CF00[];
-extern const u8* gBattlescriptPtrsForSelection[BATTLE_BANKS_COUNT];
+extern const u8* gSelectionBattleScripts[BATTLE_BANKS_COUNT];
extern const u8* gBattlescriptCurrInstr;
-extern u32 gBattlePalaceMoveSelectionRngValue;
extern u8 gActionsByTurnOrder[BATTLE_BANKS_COUNT];
extern u8 gCurrentTurnActionNumber;
extern u16 gDynamicBasePower;
extern u8 gCritMultiplier;
extern u8 gCurrMovePos;
extern u8 gUnknown_020241E9;
-extern u16 gLastUsedMove;
+extern u16 gChosenMove;
extern const struct BattleMove gBattleMoves[];
extern const u16 gUnknown_08C004E0[]; // battle textbox palette
@@ -179,31 +179,6 @@ extern const u8 gText_Ice[];
extern const u8 gText_Confusion[];
extern const u8 gText_Love[];
-// battlescripts
-extern const u8 gUnknown_082DB8BE[];
-extern const u8 gUnknown_082DB881[];
-extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[];
-extern const u8 gUnknown_082DAB11[];
-extern const u8 gUnknown_082DB9BA[];
-extern const u8 gUnknown_082DAAFE[];
-extern const u8 gUnknown_082DAB0B[];
-extern const u8 BattleScript_FocusPunchSetUp[];
-extern const u8 BattleScript_LinkBattleWonOrLost[];
-extern const u8 BattleScript_FrontierTrainerBattleWon[];
-extern const u8 BattleScript_LocalTrainerBattleWon[];
-extern const u8 BattleScript_PayDayMoneyAndPickUpItems[];
-extern const u8 BattleScript_LocalBattleLost[];
-extern const u8 gUnknown_082DB9C8[];
-extern const u8 gUnknown_082DAA0B[];
-extern const u8 gUnknown_082DB9C1[];
-extern const u8 BattleScript_RanAwayUsingMonAbility[];
-extern const u8 BattleScript_SmokeBallEscape[];
-extern const u8 BattleScript_GotAwaySafely[];
-extern const u8 BattleScript_WildMonFled[];
-extern const u8 BattleScript_MoveUsedLoafingAround[];
-extern const u8 BattleScript_ActionSwitch[];
-extern const u8 BattleScript_PrintFailedToRunString[];
-
// functions
extern void dp12_8087EA4(void);
extern void sub_80356D0(void);
@@ -486,7 +461,7 @@ static void sub_8036A5C(void)
u32 status = 0;
s32 i;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
@@ -1903,7 +1878,7 @@ static void sub_8038B94(u8 taskId)
}
r7 = 0;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&sp4[i], MON_DATA_SPECIES2);
u16 hp = GetMonData(&sp4[i], MON_DATA_HP);
@@ -1927,7 +1902,7 @@ static void sub_8038B94(u8 taskId)
gTasks[taskId].data[3] = r7;
r7 = 0;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&sp8[i], MON_DATA_SPECIES2);
u16 hp = GetMonData(&sp8[i], MON_DATA_HP);
@@ -2766,17 +2741,17 @@ static void BattleStartClearSetData(void)
for (j = 0; j < sizeof(struct DisableStruct); j++)
dataPtr[j] = 0;
- gDisableStructs[i].isFirstTurn= 2;
+ gDisableStructs[i].isFirstTurn = 2;
gUnknown_02024284[i] = 0;
- gLastUsedMovesByBanks[i] = 0;
- gUnknown_02024250[i] = 0;
- gUnknown_02024258[i] = 0;
- gUnknown_02024260[i] = 0;
- gUnknown_02024270[i] = 0xFF;
+ gLastMoves[i] = 0;
+ gLastLandedMoves[i] = 0;
+ gLastHitByType[i] = 0;
+ gLastResultingMoves[i] = 0;
+ gLastHitBy[i] = 0xFF;
gLockedMoves[i] = 0;
- gUnknownMovesUsedByBanks[i] = 0;
+ gLastPrintedMoves[i] = 0;
gBattleResources->flags->flags[i] = 0;
- gUnknown_02024230[i] = 0;
+ gPalaceSelectionBattleScripts[i] = 0;
}
for (i = 0; i < 2; i++)
@@ -2803,7 +2778,7 @@ static void BattleStartClearSetData(void)
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gSaveBlock2Ptr->optionsBattleSceneOff == TRUE)
gHitMarker |= HITMARKER_NO_ANIMATIONS;
}
- else if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) && sub_8185FB8())
+ else if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) && GetBattleStyleInRecordedBattle())
gHitMarker |= HITMARKER_NO_ANIMATIONS;
gBattleScripting.battleStyle = gSaveBlock2Ptr->optionsBattleStyle;
@@ -2933,14 +2908,14 @@ void SwitchInClearSetData(void)
}
gBattleMoveFlags = 0;
- gDisableStructs[gActiveBank].isFirstTurn= 2;
+ gDisableStructs[gActiveBank].isFirstTurn = 2;
gDisableStructs[gActiveBank].truantUnknownBit = disableStructCopy.truantUnknownBit;
- gLastUsedMovesByBanks[gActiveBank] = 0;
- gUnknown_02024250[gActiveBank] = 0;
- gUnknown_02024258[gActiveBank] = 0;
- gUnknown_02024260[gActiveBank] = 0;
- gUnknownMovesUsedByBanks[gActiveBank] = 0;
- gUnknown_02024270[gActiveBank] = 0xFF;
+ gLastMoves[gActiveBank] = 0;
+ gLastLandedMoves[gActiveBank] = 0;
+ gLastHitByType[gActiveBank] = 0;
+ gLastResultingMoves[gActiveBank] = 0;
+ gLastPrintedMoves[gActiveBank] = 0;
+ gLastHitBy[gActiveBank] = 0xFF;
*(gBattleStruct->mirrorMoves + gActiveBank * 2 + 0) = 0;
*(gBattleStruct->mirrorMoves + gActiveBank * 2 + 1) = 0;
@@ -3027,12 +3002,12 @@ void FaintClearSetData(void)
gDisableStructs[gActiveBank].isFirstTurn = 2;
- gLastUsedMovesByBanks[gActiveBank] = 0;
- gUnknown_02024250[gActiveBank] = 0;
- gUnknown_02024258[gActiveBank] = 0;
- gUnknown_02024260[gActiveBank] = 0;
- gUnknownMovesUsedByBanks[gActiveBank] = 0;
- gUnknown_02024270[gActiveBank] = 0xFF;
+ gLastMoves[gActiveBank] = 0;
+ gLastLandedMoves[gActiveBank] = 0;
+ gLastHitByType[gActiveBank] = 0;
+ gLastResultingMoves[gActiveBank] = 0;
+ gLastPrintedMoves[gActiveBank] = 0;
+ gLastHitBy[gActiveBank] = 0xFF;
*(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBank]) + 0) = 0;
*(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBank]) + 1) = 0;
@@ -3214,7 +3189,7 @@ static void BattleIntroDrawPartySummaryScreens(void)
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
|| GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
@@ -3232,7 +3207,7 @@ static void BattleIntroDrawPartySummaryScreens(void)
EmitDrawPartyStatusSummary(0, hpStatus, 0x80);
MarkBufferBankForExecution(gActiveBank);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
|| GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
@@ -3705,7 +3680,7 @@ static void TryDoEventsBeforeFirstTurn(void)
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
{
StopCryAndClearCrySongs();
- BattleScriptExecute(gUnknown_082DB8BE);
+ BattleScriptExecute(BattleScript_82DB8BE);
}
}
@@ -3793,9 +3768,9 @@ void BattleTurnPassed(void)
gRandomTurnNumber = Random();
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
- BattleScriptExecute(gUnknown_082DB881);
+ BattleScriptExecute(BattleScript_82DB881);
else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->field_DA == 0)
- BattleScriptExecute(gUnknown_082DB8BE);
+ BattleScriptExecute(BattleScript_82DB8BE);
}
u8 IsRunningFromBattleImpossible(void)
@@ -3920,7 +3895,7 @@ static void HandleTurnActionSelectionState(void)
switch (gBattleCommunication[gActiveBank])
{
case STATE_TURN_START_RECORD: // recorded battle related on start of every turn
- sub_8185FD0();
+ RecordedBattle_CopyBankMoves();
gBattleCommunication[gActiveBank] = STATE_BEFORE_ACTION_CHOSEN;
break;
case STATE_BEFORE_ACTION_CHOSEN: // choose an action
@@ -4008,7 +3983,7 @@ static void HandleTurnActionSelectionState(void)
| BATTLE_TYPE_x2000000))
{
RecordedBattle_ClearBankAction(gActiveBank, 1);
- gBattlescriptPtrsForSelection[gActiveBank] = BattleScript_ActionSelectionItemsCantBeUsed;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_ActionSelectionItemsCantBeUsed;
gBattleCommunication[gActiveBank] = STATE_SELECTION_SCRIPT;
*(gBattleStruct->selectionScriptFinished + gActiveBank) = FALSE;
*(gBattleStruct->stateIdAfterSelScript + gActiveBank) = STATE_BEFORE_ACTION_CHOSEN;
@@ -4053,7 +4028,7 @@ static void HandleTurnActionSelectionState(void)
case ACTION_SAFARI_ZONE_BALL:
if (IsPlayerPartyAndPokemonStorageFull())
{
- gBattlescriptPtrsForSelection[gActiveBank] = gUnknown_082DAB11;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_PrintFullBox;
gBattleCommunication[gActiveBank] = STATE_SELECTION_SCRIPT;
*(gBattleStruct->selectionScriptFinished + gActiveBank) = FALSE;
*(gBattleStruct->stateIdAfterSelScript + gActiveBank) = STATE_BEFORE_ACTION_CHOSEN;
@@ -4108,7 +4083,7 @@ static void HandleTurnActionSelectionState(void)
&& gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_x4000000)
&& gBattleBufferB[gActiveBank][1] == ACTION_RUN)
{
- gBattlescriptPtrsForSelection[gActiveBank] = gUnknown_082DB9BA;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_AskIfWantsToForfeitMatch;
gBattleCommunication[gActiveBank] = 8;
*(gBattleStruct->selectionScriptFinished + gActiveBank) = FALSE;
*(gBattleStruct->stateIdAfterSelScript + gActiveBank) = STATE_BEFORE_ACTION_CHOSEN;
@@ -4118,13 +4093,13 @@ static void HandleTurnActionSelectionState(void)
&& !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
&& gBattleBufferB[gActiveBank][1] == ACTION_RUN)
{
- BattleScriptExecute(gUnknown_082DAAFE);
+ BattleScriptExecute(BattleScript_PrintCantRunFromTrainer);
gBattleCommunication[gActiveBank] = 1;
}
- else if (IsRunningFromBattleImpossible() != 0
+ else if (IsRunningFromBattleImpossible()
&& gBattleBufferB[gActiveBank][1] == ACTION_RUN)
{
- gBattlescriptPtrsForSelection[gActiveBank] = gUnknown_082DAB0B;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_PrintCantEscapeFromBattle;
gBattleCommunication[gActiveBank] = STATE_SELECTION_SCRIPT;
*(gBattleStruct->selectionScriptFinished + gActiveBank) = FALSE;
*(gBattleStruct->stateIdAfterSelScript + gActiveBank) = STATE_BEFORE_ACTION_CHOSEN;
@@ -4277,12 +4252,12 @@ static void HandleTurnActionSelectionState(void)
else
{
gBankAttacker = gActiveBank;
- gBattlescriptCurrInstr = gBattlescriptPtrsForSelection[gActiveBank];
+ gBattlescriptCurrInstr = gSelectionBattleScripts[gActiveBank];
if (!(gBattleExecBuffer & ((gBitTable[gActiveBank]) | (0xF0000000) | (gBitTable[gActiveBank] << 4) | (gBitTable[gActiveBank] << 8) | (gBitTable[gActiveBank] << 0xC))))
{
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
}
- gBattlescriptPtrsForSelection[gActiveBank] = gBattlescriptCurrInstr;
+ gSelectionBattleScripts[gActiveBank] = gBattlescriptCurrInstr;
}
break;
case STATE_WAIT_SET_BEFORE_ACTION:
@@ -4309,12 +4284,12 @@ static void HandleTurnActionSelectionState(void)
else
{
gBankAttacker = gActiveBank;
- gBattlescriptCurrInstr = gBattlescriptPtrsForSelection[gActiveBank];
+ gBattlescriptCurrInstr = gSelectionBattleScripts[gActiveBank];
if (!(gBattleExecBuffer & ((gBitTable[gActiveBank]) | (0xF0000000) | (gBitTable[gActiveBank] << 4) | (gBitTable[gActiveBank] << 8) | (gBitTable[gActiveBank] << 0xC))))
{
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
}
- gBattlescriptPtrsForSelection[gActiveBank] = gBattlescriptCurrInstr;
+ gSelectionBattleScripts[gActiveBank] = gBattlescriptCurrInstr;
}
break;
}
@@ -4812,13 +4787,13 @@ static void HandleEndTurn_BattleLost(void)
{
if (gBattleOutcome & BATTLE_OUTCOME_BIT_x80)
{
- gBattlescriptCurrInstr = gUnknown_082DB9C8;
+ gBattlescriptCurrInstr = BattleScript_82DB9C8;
gBattleOutcome &= ~(BATTLE_OUTCOME_BIT_x80);
gSaveBlock2Ptr->field_CA9_b = 1;
}
else
{
- gBattlescriptCurrInstr = gUnknown_082DAA0B;
+ gBattlescriptCurrInstr = BattleScript_82DAA0B;
gBattleOutcome &= ~(BATTLE_OUTCOME_BIT_x80);
}
}
@@ -4844,13 +4819,13 @@ static void HandleEndTurn_RanFromBattle(void)
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER && gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
- gBattlescriptCurrInstr = gUnknown_082DB9C1;
+ gBattlescriptCurrInstr = BattleScript_82DB9C1;
gBattleOutcome = BATTLE_FORFEITED;
gSaveBlock2Ptr->field_CA9_b = 1;
}
else if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
{
- gBattlescriptCurrInstr = gUnknown_082DB9C1;
+ gBattlescriptCurrInstr = BattleScript_82DB9C1;
gBattleOutcome = BATTLE_FORFEITED;
}
else
@@ -5073,19 +5048,19 @@ static void HandleAction_UseMove(void)
if (gProtectStructs[gBankAttacker].onlyStruggle)
{
gProtectStructs[gBankAttacker].onlyStruggle = 0;
- gCurrentMove = gLastUsedMove = MOVE_STRUGGLE;
+ gCurrentMove = gChosenMove = MOVE_STRUGGLE;
gHitMarker |= HITMARKER_NO_PPDEDUCT;
*(gBattleStruct->moveTarget + gBankAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0);
}
else if (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE)
{
- gCurrentMove = gLastUsedMove = gLockedMoves[gBankAttacker];
+ gCurrentMove = gChosenMove = gLockedMoves[gBankAttacker];
}
// encore forces you to use the same move
else if (gDisableStructs[gBankAttacker].encoredMove != MOVE_NONE
&& gDisableStructs[gBankAttacker].encoredMove == gBattleMons[gBankAttacker].moves[gDisableStructs[gBankAttacker].encoredMovePos])
{
- gCurrentMove = gLastUsedMove = gDisableStructs[gBankAttacker].encoredMove;
+ gCurrentMove = gChosenMove = gDisableStructs[gBankAttacker].encoredMove;
gCurrMovePos = gUnknown_020241E9 = gDisableStructs[gBankAttacker].encoredMovePos;
*(gBattleStruct->moveTarget + gBankAttacker) = GetMoveTarget(gCurrentMove, 0);
}
@@ -5094,7 +5069,7 @@ static void HandleAction_UseMove(void)
&& gDisableStructs[gBankAttacker].encoredMove != gBattleMons[gBankAttacker].moves[gDisableStructs[gBankAttacker].encoredMovePos])
{
gCurrMovePos = gUnknown_020241E9 = gDisableStructs[gBankAttacker].encoredMovePos;
- gCurrentMove = gLastUsedMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
+ gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
gDisableStructs[gBankAttacker].encoredMove = MOVE_NONE;
gDisableStructs[gBankAttacker].encoredMovePos = 0;
gDisableStructs[gBankAttacker].encoreTimer1 = 0;
@@ -5102,12 +5077,12 @@ static void HandleAction_UseMove(void)
}
else if (gBattleMons[gBankAttacker].moves[gCurrMovePos] != gChosenMovesByBanks[gBankAttacker])
{
- gCurrentMove = gLastUsedMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
+ gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
*(gBattleStruct->moveTarget + gBankAttacker) = GetMoveTarget(gCurrentMove, 0);
}
else
{
- gCurrentMove = gLastUsedMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
+ gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
}
if (gBattleMons[gBankAttacker].hp != 0)
@@ -5147,7 +5122,7 @@ static void HandleAction_UseMove(void)
}
if (var == 4)
{
- if (gBattleMoves[gLastUsedMove].target & MOVE_TARGET_RANDOM)
+ if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM)
{
if (GetBankSide(gBankAttacker) == SIDE_PLAYER)
{
@@ -5192,7 +5167,7 @@ static void HandleAction_UseMove(void)
}
}
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
- && gBattleMoves[gLastUsedMove].target & MOVE_TARGET_RANDOM)
+ && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM)
{
if (GetBankSide(gBankAttacker) == SIDE_PLAYER)
{
@@ -5242,11 +5217,11 @@ static void HandleAction_UseMove(void)
gCurrentActionFuncId = 12;
return;
}
- else if (gUnknown_02024230[gBankAttacker] != NULL)
+ else if (gPalaceSelectionBattleScripts[gBankAttacker] != NULL)
{
gBattleCommunication[MULTISTRING_CHOOSER] = 4;
- gBattlescriptCurrInstr = gUnknown_02024230[gBankAttacker];
- gUnknown_02024230[gBankAttacker] = NULL;
+ gBattlescriptCurrInstr = gPalaceSelectionBattleScripts[gBankAttacker];
+ gPalaceSelectionBattleScripts[gBankAttacker] = NULL;
}
else
{
@@ -5625,8 +5600,8 @@ static void HandleAction_ActionFinished(void)
gBattleMoveFlags = 0;
gBattleScripting.animTurn = 0;
gBattleScripting.animTargetsHit = 0;
- gUnknown_02024250[gBankAttacker] = 0;
- gUnknown_02024258[gBankAttacker] = 0;
+ gLastLandedMoves[gBankAttacker] = 0;
+ gLastHitByType[gBankAttacker] = 0;
gBattleStruct->dynamicMoveType = 0;
gDynamicBasePower = 0;
gBattleScripting.atk49_state = 0;
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 24377eacc..97226f5c9 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -58,7 +58,7 @@ extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
extern u16 gCurrentMove;
extern u8 gBankTarget;
extern u8 gAbsentBankFlags;
-extern u16 gLastUsedMovesByBanks[BATTLE_BANKS_COUNT];
+extern u16 gLastMoves[BATTLE_BANKS_COUNT];
extern u16 gTrainerBattleOpponent_A;
extern u16 gTrainerBattleOpponent_B;
extern u32 gStatuses3[BATTLE_BANKS_COUNT];
@@ -633,12 +633,12 @@ static void RecordLastUsedMoveByTarget(void)
for (i = 0; i < 4; i++)
{
- if (gBattleResources->battleHistory->usedMoves[gBankTarget].moves[i] == gLastUsedMovesByBanks[gBankTarget])
+ if (gBattleResources->battleHistory->usedMoves[gBankTarget].moves[i] == gLastMoves[gBankTarget])
break;
- if (gBattleResources->battleHistory->usedMoves[gBankTarget].moves[i] != gLastUsedMovesByBanks[gBankTarget] // HACK: This redundant condition is a hack to make the asm match.
+ if (gBattleResources->battleHistory->usedMoves[gBankTarget].moves[i] != gLastMoves[gBankTarget] // HACK: This redundant condition is a hack to make the asm match.
&& gBattleResources->battleHistory->usedMoves[gBankTarget].moves[i] == 0)
{
- gBattleResources->battleHistory->usedMoves[gBankTarget].moves[i] = gLastUsedMovesByBanks[gBankTarget];
+ gBattleResources->battleHistory->usedMoves[gBankTarget].moves[i] = gLastMoves[gBankTarget];
break;
}
}
@@ -1252,9 +1252,9 @@ static void BattleAICmd_is_most_powerful_move(void)
static void BattleAICmd_get_last_used_bank_move(void)
{
if (gAIScriptPtr[1] == AI_USER)
- AI_THINKING_STRUCT->funcResult = gLastUsedMovesByBanks[sBank_AI];
+ AI_THINKING_STRUCT->funcResult = gLastMoves[sBank_AI];
else
- AI_THINKING_STRUCT->funcResult = gLastUsedMovesByBanks[gBankTarget];
+ AI_THINKING_STRUCT->funcResult = gLastMoves[gBankTarget];
gAIScriptPtr += 2;
}
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index 75d144c3d..f5b6c7fe4 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -16,8 +16,8 @@ extern u32 gBattleTypeFlags;
extern u32 gStatuses3[BATTLE_BANKS_COUNT];
extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
-extern u16 gUnknown_02024250[BATTLE_BANKS_COUNT];
-extern u8 gUnknown_02024270[BATTLE_BANKS_COUNT];
+extern u16 gLastLandedMoves[BATTLE_BANKS_COUNT];
+extern u8 gLastHitBy[BATTLE_BANKS_COUNT];
extern u16 gDynamicBasePower;
extern u8 gBattleMoveFlags;
extern u8 gCritMultiplier;
@@ -141,11 +141,11 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
if (HasSuperEffectiveMoveAgainstOpponents(TRUE) && Random() % 3 != 0)
return FALSE;
- if (gUnknown_02024250[gActiveBank] == 0)
+ if (gLastLandedMoves[gActiveBank] == 0)
return FALSE;
- if (gUnknown_02024250[gActiveBank] == 0xFFFF)
+ if (gLastLandedMoves[gActiveBank] == 0xFFFF)
return FALSE;
- if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0)
+ if (gBattleMoves[gLastLandedMoves[gActiveBank]].power == 0)
return FALSE;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
@@ -162,11 +162,11 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
bankIn2 = gActiveBank;
}
- if (gBattleMoves[gUnknown_02024250[gActiveBank]].type == TYPE_FIRE)
+ if (gBattleMoves[gLastLandedMoves[gActiveBank]].type == TYPE_FIRE)
absorbingTypeAbility = ABILITY_FLASH_FIRE;
- else if (gBattleMoves[gUnknown_02024250[gActiveBank]].type == TYPE_WATER)
+ else if (gBattleMoves[gLastLandedMoves[gActiveBank]].type == TYPE_WATER)
absorbingTypeAbility = ABILITY_WATER_ABSORB;
- else if (gBattleMoves[gUnknown_02024250[gActiveBank]].type == TYPE_ELECTRIC)
+ else if (gBattleMoves[gLastLandedMoves[gActiveBank]].type == TYPE_ELECTRIC)
absorbingTypeAbility = ABILITY_VOLT_ABSORB;
else
return FALSE;
@@ -238,13 +238,13 @@ static bool8 ShouldSwitchIfNaturalCure(void)
if (gBattleMons[gActiveBank].hp < gBattleMons[gActiveBank].maxHP / 2)
return FALSE;
- if ((gUnknown_02024250[gActiveBank] == 0 || gUnknown_02024250[gActiveBank] == 0xFFFF) && Random() & 1)
+ if ((gLastLandedMoves[gActiveBank] == 0 || gLastLandedMoves[gActiveBank] == 0xFFFF) && Random() & 1)
{
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = 6;
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
return TRUE;
}
- else if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0 && Random() & 1)
+ else if (gBattleMoves[gLastLandedMoves[gActiveBank]].power == 0 && Random() & 1)
{
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBank) = 6;
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
@@ -345,13 +345,13 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
u16 move;
u8 moveFlags;
- if (gUnknown_02024250[gActiveBank] == 0)
+ if (gLastLandedMoves[gActiveBank] == 0)
return FALSE;
- if (gUnknown_02024250[gActiveBank] == 0xFFFF)
+ if (gLastLandedMoves[gActiveBank] == 0xFFFF)
return FALSE;
- if (gUnknown_02024270[gActiveBank] == 0xFF)
+ if (gLastHitBy[gActiveBank] == 0xFF)
return FALSE;
- if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0)
+ if (gBattleMoves[gLastLandedMoves[gActiveBank]].power == 0)
return FALSE;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
@@ -411,10 +411,10 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
else
monAbility = gBaseStats[species].ability1;
- moveFlags = AI_TypeCalc(gUnknown_02024250[gActiveBank], species, monAbility);
+ moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBank], species, monAbility);
if (moveFlags & flags)
{
- bankIn1 = gUnknown_02024270[gActiveBank];
+ bankIn1 = gLastHitBy[gActiveBank];
for (j = 0; j < 4; j++)
{
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 423d34d45..5758aba87 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -82,7 +82,7 @@ static void LinkOpponentHandleBallThrowAnim(void);
static void LinkOpponentHandlePause(void);
static void LinkOpponentHandleMoveAnimation(void);
static void LinkOpponentHandlePrintString(void);
-static void LinkOpponentHandlePrintStringPlayerOnly(void);
+static void LinkOpponentHandlePrintSelectionString(void);
static void LinkOpponentHandleChooseAction(void);
static void LinkOpponentHandleUnknownYesNoBox(void);
static void LinkOpponentHandleChooseMove(void);
@@ -108,7 +108,7 @@ static void LinkOpponentHandleCmd39(void);
static void LinkOpponentHandleCmd40(void);
static void LinkOpponentHandleHitAnimation(void);
static void LinkOpponentHandleCmd42(void);
-static void LinkOpponentHandleEffectivenessSound(void);
+static void LinkOpponentHandlePlaySE(void);
static void LinkOpponentHandlePlayFanfareOrBGM(void);
static void LinkOpponentHandleFaintingCry(void);
static void LinkOpponentHandleIntroSlide(void);
@@ -154,7 +154,7 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
LinkOpponentHandlePause,
LinkOpponentHandleMoveAnimation,
LinkOpponentHandlePrintString,
- LinkOpponentHandlePrintStringPlayerOnly,
+ LinkOpponentHandlePrintSelectionString,
LinkOpponentHandleChooseAction,
LinkOpponentHandleUnknownYesNoBox,
LinkOpponentHandleChooseMove,
@@ -180,7 +180,7 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
LinkOpponentHandleCmd40,
LinkOpponentHandleHitAnimation,
LinkOpponentHandleCmd42,
- LinkOpponentHandleEffectivenessSound,
+ LinkOpponentHandlePlaySE,
LinkOpponentHandlePlayFanfareOrBGM,
LinkOpponentHandleFaintingCry,
LinkOpponentHandleIntroSlide,
@@ -1505,7 +1505,7 @@ static void LinkOpponentHandlePrintString(void)
sub_817C95C(*stringId);
}
-static void LinkOpponentHandlePrintStringPlayerOnly(void)
+static void LinkOpponentHandlePrintSelectionString(void)
{
LinkOpponentBufferExecCompleted();
}
@@ -1681,7 +1681,7 @@ static void LinkOpponentHandleCmd42(void)
LinkOpponentBufferExecCompleted();
}
-static void LinkOpponentHandleEffectivenessSound(void)
+static void LinkOpponentHandlePlaySE(void)
{
s8 pan;
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index e3bee98d9..1af6da1cd 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -78,7 +78,7 @@ static void LinkPartnerHandleBallThrowAnim(void);
static void LinkPartnerHandlePause(void);
static void LinkPartnerHandleMoveAnimation(void);
static void LinkPartnerHandlePrintString(void);
-static void LinkPartnerHandlePrintStringPlayerOnly(void);
+static void LinkPartnerHandlePrintSelectionString(void);
static void LinkPartnerHandleChooseAction(void);
static void LinkPartnerHandleUnknownYesNoBox(void);
static void LinkPartnerHandleChooseMove(void);
@@ -104,7 +104,7 @@ static void LinkPartnerHandleCmd39(void);
static void LinkPartnerHandleCmd40(void);
static void LinkPartnerHandleHitAnimation(void);
static void LinkPartnerHandleCmd42(void);
-static void LinkPartnerHandleEffectivenessSound(void);
+static void LinkPartnerHandlePlaySE(void);
static void LinkPartnerHandlePlayFanfareOrBGM(void);
static void LinkPartnerHandleFaintingCry(void);
static void LinkPartnerHandleIntroSlide(void);
@@ -149,7 +149,7 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
LinkPartnerHandlePause,
LinkPartnerHandleMoveAnimation,
LinkPartnerHandlePrintString,
- LinkPartnerHandlePrintStringPlayerOnly,
+ LinkPartnerHandlePrintSelectionString,
LinkPartnerHandleChooseAction,
LinkPartnerHandleUnknownYesNoBox,
LinkPartnerHandleChooseMove,
@@ -175,7 +175,7 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
LinkPartnerHandleCmd40,
LinkPartnerHandleHitAnimation,
LinkPartnerHandleCmd42,
- LinkPartnerHandleEffectivenessSound,
+ LinkPartnerHandlePlaySE,
LinkPartnerHandlePlayFanfareOrBGM,
LinkPartnerHandleFaintingCry,
LinkPartnerHandleIntroSlide,
@@ -1327,7 +1327,7 @@ static void LinkPartnerHandlePrintString(void)
sub_817C95C(*stringId);
}
-static void LinkPartnerHandlePrintStringPlayerOnly(void)
+static void LinkPartnerHandlePrintSelectionString(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -1503,7 +1503,7 @@ static void LinkPartnerHandleCmd42(void)
LinkPartnerBufferExecCompleted();
}
-static void LinkPartnerHandleEffectivenessSound(void)
+static void LinkPartnerHandlePlaySE(void)
{
s8 pan;
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 0aac4cbe4..d69de8c29 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -83,7 +83,7 @@ static void OpponentHandleBallThrow(void);
static void OpponentHandlePause(void);
static void OpponentHandleMoveAnimation(void);
static void OpponentHandlePrintString(void);
-static void OpponentHandlePrintStringPlayerOnly(void);
+static void OpponentHandlePrintSelectionString(void);
static void OpponentHandleChooseAction(void);
static void OpponentHandleUnknownYesNoBox(void);
static void OpponentHandleChooseMove(void);
@@ -109,7 +109,7 @@ static void OpponentHandleCmd39(void);
static void OpponentHandleCmd40(void);
static void OpponentHandleHitAnimation(void);
static void OpponentHandleCmd42(void);
-static void OpponentHandleEffectivenessSound(void);
+static void OpponentHandlePlaySE(void);
static void OpponentHandlePlayFanfareOrBGM(void);
static void OpponentHandleFaintingCry(void);
static void OpponentHandleIntroSlide(void);
@@ -155,7 +155,7 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
OpponentHandlePause,
OpponentHandleMoveAnimation,
OpponentHandlePrintString,
- OpponentHandlePrintStringPlayerOnly,
+ OpponentHandlePrintSelectionString,
OpponentHandleChooseAction,
OpponentHandleUnknownYesNoBox,
OpponentHandleChooseMove,
@@ -181,7 +181,7 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
OpponentHandleCmd40,
OpponentHandleHitAnimation,
OpponentHandleCmd42,
- OpponentHandleEffectivenessSound,
+ OpponentHandlePlaySE,
OpponentHandlePlayFanfareOrBGM,
OpponentHandleFaintingCry,
OpponentHandleIntroSlide,
@@ -1537,7 +1537,7 @@ static void OpponentHandlePrintString(void)
sub_81A57E4(gActiveBank, *stringId);
}
-static void OpponentHandlePrintStringPlayerOnly(void)
+static void OpponentHandlePrintSelectionString(void)
{
OpponentBufferExecCompleted();
}
@@ -1826,7 +1826,7 @@ static void OpponentHandleCmd42(void)
OpponentBufferExecCompleted();
}
-static void OpponentHandleEffectivenessSound(void)
+static void OpponentHandlePlaySE(void)
{
s8 pan;
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 16c62c53b..7ea2abccf 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -102,7 +102,7 @@ static void PlayerHandleBallThrowAnim(void);
static void PlayerHandlePause(void);
static void PlayerHandleMoveAnimation(void);
static void PlayerHandlePrintString(void);
-static void PlayerHandlePrintStringPlayerOnly(void);
+static void PlayerHandlePrintSelectionString(void);
static void PlayerHandleChooseAction(void);
static void PlayerHandleUnknownYesNoBox(void);
static void PlayerHandleChooseMove(void);
@@ -128,7 +128,7 @@ static void PlayerHandleCmd39(void);
static void PlayerHandleCmd40(void);
static void PlayerHandleHitAnimation(void);
static void PlayerHandleCmd42(void);
-static void PlayerHandleEffectivenessSound(void);
+static void PlayerHandlePlaySE(void);
static void PlayerHandlePlayFanfareOrBGM(void);
static void PlayerHandleFaintingCry(void);
static void PlayerHandleIntroSlide(void);
@@ -189,7 +189,7 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
PlayerHandlePause,
PlayerHandleMoveAnimation,
PlayerHandlePrintString,
- PlayerHandlePrintStringPlayerOnly,
+ PlayerHandlePrintSelectionString,
PlayerHandleChooseAction,
PlayerHandleUnknownYesNoBox,
PlayerHandleChooseMove,
@@ -215,7 +215,7 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
PlayerHandleCmd40,
PlayerHandleHitAnimation,
PlayerHandleCmd42,
- PlayerHandleEffectivenessSound,
+ PlayerHandlePlaySE,
PlayerHandlePlayFanfareOrBGM,
PlayerHandleFaintingCry,
PlayerHandleIntroSlide,
@@ -2576,7 +2576,7 @@ static void PlayerHandlePrintString(void)
sub_81A57E4(gActiveBank, *stringId);
}
-static void PlayerHandlePrintStringPlayerOnly(void)
+static void PlayerHandlePrintSelectionString(void)
{
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
PlayerHandlePrintString();
@@ -2913,7 +2913,7 @@ static void PlayerHandleCmd42(void)
PlayerBufferExecCompleted();
}
-static void PlayerHandleEffectivenessSound(void)
+static void PlayerHandlePlaySE(void)
{
s8 pan;
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index 0cd34442a..4cca5c002 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -78,7 +78,7 @@ static void PlayerPartnerHandleBallThrowAnim(void);
static void PlayerPartnerHandlePause(void);
static void PlayerPartnerHandleMoveAnimation(void);
static void PlayerPartnerHandlePrintString(void);
-static void PlayerPartnerHandlePrintStringPlayerOnly(void);
+static void PlayerPartnerHandlePrintSelectionString(void);
static void PlayerPartnerHandleChooseAction(void);
static void PlayerPartnerHandleUnknownYesNoBox(void);
static void PlayerPartnerHandleChooseMove(void);
@@ -104,7 +104,7 @@ static void PlayerPartnerHandleCmd39(void);
static void PlayerPartnerHandleCmd40(void);
static void PlayerPartnerHandleHitAnimation(void);
static void PlayerPartnerHandleCmd42(void);
-static void PlayerPartnerHandleEffectivenessSound(void);
+static void PlayerPartnerHandlePlaySE(void);
static void PlayerPartnerHandlePlayFanfareOrBGM(void);
static void PlayerPartnerHandleFaintingCry(void);
static void PlayerPartnerHandleIntroSlide(void);
@@ -155,7 +155,7 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
PlayerPartnerHandlePause,
PlayerPartnerHandleMoveAnimation,
PlayerPartnerHandlePrintString,
- PlayerPartnerHandlePrintStringPlayerOnly,
+ PlayerPartnerHandlePrintSelectionString,
PlayerPartnerHandleChooseAction,
PlayerPartnerHandleUnknownYesNoBox,
PlayerPartnerHandleChooseMove,
@@ -181,7 +181,7 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
PlayerPartnerHandleCmd40,
PlayerPartnerHandleHitAnimation,
PlayerPartnerHandleCmd42,
- PlayerPartnerHandleEffectivenessSound,
+ PlayerPartnerHandlePlaySE,
PlayerPartnerHandlePlayFanfareOrBGM,
PlayerPartnerHandleFaintingCry,
PlayerPartnerHandleIntroSlide,
@@ -1519,7 +1519,7 @@ static void PlayerPartnerHandlePrintString(void)
gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter2;
}
-static void PlayerPartnerHandlePrintStringPlayerOnly(void)
+static void PlayerPartnerHandlePrintSelectionString(void)
{
PlayerPartnerBufferExecCompleted();
}
@@ -1756,7 +1756,7 @@ static void PlayerPartnerHandleCmd42(void)
PlayerPartnerBufferExecCompleted();
}
-static void PlayerPartnerHandleEffectivenessSound(void)
+static void PlayerPartnerHandlePlaySE(void)
{
s8 pan;
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 506ab46c7..027230be4 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -81,7 +81,7 @@ static void RecordedOpponentHandleBallThrowAnim(void);
static void RecordedOpponentHandlePause(void);
static void RecordedOpponentHandleMoveAnimation(void);
static void RecordedOpponentHandlePrintString(void);
-static void RecordedOpponentHandlePrintStringPlayerOnly(void);
+static void RecordedOpponentHandlePrintSelectionString(void);
static void RecordedOpponentHandleChooseAction(void);
static void RecordedOpponentHandleUnknownYesNoBox(void);
static void RecordedOpponentHandleChooseMove(void);
@@ -107,7 +107,7 @@ static void RecordedOpponentHandleCmd39(void);
static void RecordedOpponentHandleCmd40(void);
static void RecordedOpponentHandleHitAnimation(void);
static void RecordedOpponentHandleCmd42(void);
-static void RecordedOpponentHandleEffectivenessSound(void);
+static void RecordedOpponentHandlePlaySE(void);
static void RecordedOpponentHandlePlayFanfareOrBGM(void);
static void RecordedOpponentHandleFaintingCry(void);
static void RecordedOpponentHandleIntroSlide(void);
@@ -153,7 +153,7 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void
RecordedOpponentHandlePause,
RecordedOpponentHandleMoveAnimation,
RecordedOpponentHandlePrintString,
- RecordedOpponentHandlePrintStringPlayerOnly,
+ RecordedOpponentHandlePrintSelectionString,
RecordedOpponentHandleChooseAction,
RecordedOpponentHandleUnknownYesNoBox,
RecordedOpponentHandleChooseMove,
@@ -179,7 +179,7 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void
RecordedOpponentHandleCmd40,
RecordedOpponentHandleHitAnimation,
RecordedOpponentHandleCmd42,
- RecordedOpponentHandleEffectivenessSound,
+ RecordedOpponentHandlePlaySE,
RecordedOpponentHandlePlayFanfareOrBGM,
RecordedOpponentHandleFaintingCry,
RecordedOpponentHandleIntroSlide,
@@ -1261,7 +1261,7 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
}
else
{
- trainerPicId = PlayerGenderToFrontTrainerPicId(sub_8185F40());
+ trainerPicId = PlayerGenderToFrontTrainerPicId(GetActiveBankLinkPlayerGender());
}
}
else
@@ -1435,7 +1435,7 @@ static void RecordedOpponentHandlePrintString(void)
gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter;
}
-static void RecordedOpponentHandlePrintStringPlayerOnly(void)
+static void RecordedOpponentHandlePrintSelectionString(void)
{
RecordedOpponentBufferExecCompleted();
}
@@ -1625,7 +1625,7 @@ static void RecordedOpponentHandleCmd42(void)
RecordedOpponentBufferExecCompleted();
}
-static void RecordedOpponentHandleEffectivenessSound(void)
+static void RecordedOpponentHandlePlaySE(void)
{
s8 pan;
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 03a65961b..f5f3ab3c0 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -81,7 +81,7 @@ static void RecordedPlayerHandleBallThrowAnim(void);
static void RecordedPlayerHandlePause(void);
static void RecordedPlayerHandleMoveAnimation(void);
static void RecordedPlayerHandlePrintString(void);
-static void RecordedPlayerHandlePrintStringPlayerOnly(void);
+static void RecordedPlayerHandlePrintSelectionString(void);
static void RecordedPlayerHandleChooseAction(void);
static void RecordedPlayerHandleUnknownYesNoBox(void);
static void RecordedPlayerHandleChooseMove(void);
@@ -107,7 +107,7 @@ static void RecordedPlayerHandleCmd39(void);
static void RecordedPlayerHandleCmd40(void);
static void RecordedPlayerHandleHitAnimation(void);
static void RecordedPlayerHandleCmd42(void);
-static void RecordedPlayerHandleEffectivenessSound(void);
+static void RecordedPlayerHandlePlaySE(void);
static void RecordedPlayerHandlePlayFanfareOrBGM(void);
static void RecordedPlayerHandleFaintingCry(void);
static void RecordedPlayerHandleIntroSlide(void);
@@ -152,7 +152,7 @@ static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void)
RecordedPlayerHandlePause,
RecordedPlayerHandleMoveAnimation,
RecordedPlayerHandlePrintString,
- RecordedPlayerHandlePrintStringPlayerOnly,
+ RecordedPlayerHandlePrintSelectionString,
RecordedPlayerHandleChooseAction,
RecordedPlayerHandleUnknownYesNoBox,
RecordedPlayerHandleChooseMove,
@@ -178,7 +178,7 @@ static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void)
RecordedPlayerHandleCmd40,
RecordedPlayerHandleHitAnimation,
RecordedPlayerHandleCmd42,
- RecordedPlayerHandleEffectivenessSound,
+ RecordedPlayerHandlePlaySE,
RecordedPlayerHandlePlayFanfareOrBGM,
RecordedPlayerHandleFaintingCry,
RecordedPlayerHandleIntroSlide,
@@ -1229,7 +1229,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- trainerPicId = sub_8185F40();
+ trainerPicId = GetActiveBankLinkPlayerGender();
else
trainerPicId = gLinkPlayers[gUnknown_0203C7B4].gender;
}
@@ -1437,7 +1437,7 @@ static void RecordedPlayerHandlePrintString(void)
gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter;
}
-static void RecordedPlayerHandlePrintStringPlayerOnly(void)
+static void RecordedPlayerHandlePrintSelectionString(void)
{
RecordedPlayerBufferExecCompleted();
}
@@ -1644,7 +1644,7 @@ static void RecordedPlayerHandleCmd42(void)
RecordedPlayerBufferExecCompleted();
}
-static void RecordedPlayerHandleEffectivenessSound(void)
+static void RecordedPlayerHandlePlaySE(void)
{
s8 pan;
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
index a4f35bed1..635f5fef1 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle_controller_safari.c
@@ -66,7 +66,7 @@ static void SafariHandleBallThrowAnim(void);
static void SafariHandlePause(void);
static void SafariHandleMoveAnimation(void);
static void SafariHandlePrintString(void);
-static void SafariHandlePrintStringPlayerOnly(void);
+static void SafariHandlePrintSelectionString(void);
static void SafariHandleChooseAction(void);
static void SafariHandleUnknownYesNoBox(void);
static void SafariHandleChooseMove(void);
@@ -92,7 +92,7 @@ static void SafariHandleCmd39(void);
static void SafariHandleCmd40(void);
static void SafariHandleHitAnimation(void);
static void SafariHandleCmd42(void);
-static void SafariHandleEffectivenessSound(void);
+static void SafariHandlePlaySE(void);
static void SafariHandlePlayFanfareOrBGM(void);
static void SafariHandleFaintingCry(void);
static void SafariHandleIntroSlide(void);
@@ -130,7 +130,7 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
SafariHandlePause,
SafariHandleMoveAnimation,
SafariHandlePrintString,
- SafariHandlePrintStringPlayerOnly,
+ SafariHandlePrintSelectionString,
SafariHandleChooseAction,
SafariHandleUnknownYesNoBox,
SafariHandleChooseMove,
@@ -156,7 +156,7 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
SafariHandleCmd40,
SafariHandleHitAnimation,
SafariHandleCmd42,
- SafariHandleEffectivenessSound,
+ SafariHandlePlaySE,
SafariHandlePlayFanfareOrBGM,
SafariHandleFaintingCry,
SafariHandleIntroSlide,
@@ -449,7 +449,7 @@ static void SafariHandlePrintString(void)
gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter;
}
-static void SafariHandlePrintStringPlayerOnly(void)
+static void SafariHandlePrintSelectionString(void)
{
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
SafariHandlePrintString();
@@ -607,7 +607,7 @@ static void SafariHandleCmd42(void)
SafariBufferExecCompleted();
}
-static void SafariHandleEffectivenessSound(void)
+static void SafariHandlePlaySE(void)
{
s8 pan;
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index 4dac1d264..442e32cca 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -86,7 +86,7 @@ static void WallyHandleBallThrowAnim(void);
static void WallyHandlePause(void);
static void WallyHandleMoveAnimation(void);
static void WallyHandlePrintString(void);
-static void WallyHandlePrintStringPlayerOnly(void);
+static void WallyHandlePrintSelectionString(void);
static void WallyHandleChooseAction(void);
static void WallyHandleUnknownYesNoBox(void);
static void WallyHandleChooseMove(void);
@@ -112,7 +112,7 @@ static void WallyHandleCmd39(void);
static void WallyHandleCmd40(void);
static void WallyHandleHitAnimation(void);
static void WallyHandleCmd42(void);
-static void WallyHandleEffectivenessSound(void);
+static void WallyHandlePlaySE(void);
static void WallyHandlePlayFanfareOrBGM(void);
static void WallyHandleFaintingCry(void);
static void WallyHandleIntroSlide(void);
@@ -155,7 +155,7 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
WallyHandlePause,
WallyHandleMoveAnimation,
WallyHandlePrintString,
- WallyHandlePrintStringPlayerOnly,
+ WallyHandlePrintSelectionString,
WallyHandleChooseAction,
WallyHandleUnknownYesNoBox,
WallyHandleChooseMove,
@@ -181,7 +181,7 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
WallyHandleCmd40,
WallyHandleHitAnimation,
WallyHandleCmd42,
- WallyHandleEffectivenessSound,
+ WallyHandlePlaySE,
WallyHandlePlayFanfareOrBGM,
WallyHandleFaintingCry,
WallyHandleIntroSlide,
@@ -1211,7 +1211,7 @@ static void WallyHandlePrintString(void)
gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter;
}
-static void WallyHandlePrintStringPlayerOnly(void)
+static void WallyHandlePrintSelectionString(void)
{
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
WallyHandlePrintString();
@@ -1419,7 +1419,7 @@ static void WallyHandleCmd42(void)
WallyBufferExecCompleted();
}
-static void WallyHandleEffectivenessSound(void)
+static void WallyHandlePlaySE(void)
{
PlaySE(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
WallyBufferExecCompleted();
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 5c874438e..2d373e876 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -38,7 +38,7 @@ extern u8 gEffectBank;
extern u16 gBattleWeather;
extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
extern u16 gCurrentMove;
-extern u16 gLastUsedMove;
+extern u16 gChosenMove;
extern u16 gLastUsedItem;
extern u8 gBattleOutcome;
extern u8 gLastUsedAbility;
@@ -113,7 +113,7 @@ void sub_8032768(void)
sub_8184DA4(2);
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
- sub_8185EB8();
+ RecordedBattle_SaveParties();
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
SetControllersVariablesInLinkBattle();
@@ -1120,7 +1120,7 @@ void EmitPrintString(u8 bufferId, u16 stringID)
stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
- stringInfo->lastMove = gLastUsedMove;
+ stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
stringInfo->lastAbility = gLastUsedAbility;
stringInfo->scrActive = gBattleScripting.bank;
@@ -1140,10 +1140,10 @@ void EmitPrintString(u8 bufferId, u16 stringID)
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
}
-void EmitPrintStringPlayerOnly(u8 bufferId, u16 stringID)
+void EmitPrintSelectionString(u8 bufferId, u16 stringID)
{
s32 i;
- struct StringInfoBattle* stringInfo;
+ struct StringInfoBattle *stringInfo;
gBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY;
gBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
@@ -1152,7 +1152,7 @@ void EmitPrintStringPlayerOnly(u8 bufferId, u16 stringID)
stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
- stringInfo->lastMove = gLastUsedMove;
+ stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
stringInfo->lastAbility = gLastUsedAbility;
stringInfo->scrActive = gBattleScripting.bank;
@@ -1427,7 +1427,7 @@ void EmitCmd42(u8 bufferId)
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
-void EmitEffectivenessSound(u8 bufferId, u16 songId)
+void EmitPlaySE(u8 bufferId, u16 songId)
{
gBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND;
gBattleBuffersTransferData[1] = songId;
diff --git a/src/battle_message.c b/src/battle_message.c
index 4bd6ca5b7..77f7cc722 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -58,8 +58,8 @@ extern const u8* GetTrainer1LoseText(void); // battle_setup
extern const u8* GetTrainer2LoseText(void); // battle_setup
extern void GetFrontierTrainerName(u8 *dst, u16 trainerId);
extern s32 GetStringCenterAlignXOffsetWithLetterSpacing(u8 fontId, const u8 *str, s32 totalWidth, s16 letterSpacing);
-extern u8 sub_8185FC4(void);
-extern u8 sav2_get_text_speed(void);
+extern u8 GetTextSpeedInRecordedBattle(void);
+extern u8 GetPlayerTextSpeed(void);
// this file's functions
static void sub_814F8F8(u8 *textPtr);
@@ -932,58 +932,237 @@ const u16 gSandStormHailDmgStringIds[] =
STRINGID_PKMNBUFFETEDBYSANDSTORM, STRINGID_PKMNPELTEDBYHAIL
};
-// todo once battlescripts are dumped
-const u16 gTooLazyToSplitThemStringIds[] =
+const u16 gSandStormHailEndStringIds[] =
{
- STRINGID_SANDSTORMSUBSIDED, STRINGID_HAILSTOPPED, STRINGID_RAINCONTINUES, STRINGID_DOWNPOURCONTINUES,
- STRINGID_RAINSTOPPED, STRINGID_PKMNPROTECTEDITSELF2, STRINGID_PKMNBRACEDITSELF,
- STRINGID_BUTITFAILED, STRINGID_BUTITFAILED, STRINGID_PKMNRAISEDDEF,
- STRINGID_PKMNRAISEDDEFALITTLE, STRINGID_PKMNRAISEDSPDEF, STRINGID_PKMNRAISEDSPDEFALITTLE,
- STRINGID_PKMNCOVEREDBYVEIL, STRINGID_PKMNSEEDED, STRINGID_PKMNEVADEDATTACK,
+ STRINGID_SANDSTORMSUBSIDED, STRINGID_HAILSTOPPED
+};
+
+const u16 gRainContinuesStringIds[] =
+{
+ STRINGID_RAINCONTINUES, STRINGID_DOWNPOURCONTINUES, STRINGID_RAINSTOPPED
+};
+
+const u16 gProtectLikeUsedStringIds[] =
+{
+ STRINGID_PKMNPROTECTEDITSELF2, STRINGID_PKMNBRACEDITSELF, STRINGID_BUTITFAILED
+};
+
+const u16 gReflectLightScreenSafeguardStringIds[] =
+{
+ STRINGID_BUTITFAILED, STRINGID_PKMNRAISEDDEF, STRINGID_PKMNRAISEDDEFALITTLE,
+ STRINGID_PKMNRAISEDSPDEF, STRINGID_PKMNRAISEDSPDEFALITTLE, STRINGID_PKMNCOVEREDBYVEIL
+};
+
+const u16 gLeechSeedStringIds[] =
+{
+ STRINGID_PKMNSEEDED, STRINGID_PKMNEVADEDATTACK,
STRINGID_ITDOESNTAFFECT, STRINGID_PKMNSAPPEDBYLEECHSEED, STRINGID_ITSUCKEDLIQUIDOOZE,
- STRINGID_PKMNWENTTOSLEEP, STRINGID_PKMNSLEPTHEALTHY, STRINGID_PKMNMAKINGUPROAR,
- STRINGID_PKMNCALMEDDOWN, STRINGID_PKMNSTOCKPILED, STRINGID_PKMNCANTSTOCKPILE,
- STRINGID_PKMNWOKEUP, STRINGID_PKMNWOKEUPINUPROAR, STRINGID_FAILEDTOSWALLOW,
- STRINGID_PKMNHPFULL, STRINGID_PKMNCANTSLEEPINUPROAR2, STRINGID_UPROARKEPTPKMNAWAKE,
- STRINGID_PKMNSTAYEDAWAKEUSING, STRINGID_PKMNSSTATCHANGED, STRINGID_PKMNSSTATCHANGED2,
- STRINGID_STATSWONTINCREASE, STRINGID_EMPTYSTRING3, STRINGID_USINGXTHEYOFZN,
- STRINGID_PKMNUSEDXTOGETPUMPED, STRINGID_PKMNSSTATCHANGED3, STRINGID_PKMNSSTATCHANGED4,
- STRINGID_STATSWONTDECREASE, STRINGID_EMPTYSTRING3, STRINGID_PKMNWHIPPEDWHIRLWIND,
- STRINGID_PKMNTOOKSUNLIGHT, STRINGID_PKMNLOWEREDHEAD, STRINGID_PKMNISGLOWING,
- STRINGID_PKMNFLEWHIGH, STRINGID_PKMNDUGHOLE, STRINGID_PKMNHIDUNDERWATER,
- STRINGID_PKMNSPRANGUP, STRINGID_PKMNSQUEEZEDBYBIND, STRINGID_PKMNWRAPPEDBY,
- STRINGID_PKMNTRAPPEDINVORTEX, STRINGID_PKMNCLAMPED, STRINGID_PKMNTRAPPEDINVORTEX,
- STRINGID_PKMNTRAPPEDBYSANDTOMB, STRINGID_PKMNSHROUDEDINMIST, STRINGID_BUTITFAILED,
- STRINGID_PKMNGETTINGPUMPED, STRINGID_BUTITFAILED, STRINGID_PKMNTRANSFORMEDINTO,
- STRINGID_BUTITFAILED, STRINGID_PKMNMADESUBSTITUTE, STRINGID_TOOWEAKFORSUBSTITUTE,
- STRINGID_PKMNWASPOISONED, STRINGID_PKMNPOISONEDBY, STRINGID_PKMNWASPARALYZED,
- STRINGID_PKMNWASPARALYZEDBY, STRINGID_PKMNFELLASLEEP, STRINGID_PKMNMADESLEEP,
- STRINGID_PKMNWASBURNED, STRINGID_PKMNBURNEDBY, STRINGID_PKMNWASFROZEN,
- STRINGID_PKMNFROZENBY, STRINGID_PKMNWASDEFROSTED2, STRINGID_PKMNWASDEFROSTEDBY,
- STRINGID_ATTACKMISSED, STRINGID_PKMNUNAFFECTED, STRINGID_PKMNFELLINLOVE,
- STRINGID_PKMNSXINFATUATEDY, STRINGID_PKMNENERGYDRAINED, STRINGID_ITSUCKEDLIQUIDOOZE,
- STRINGID_ELECTRICITYWEAKENED, STRINGID_FIREWEAKENED, STRINGID_BELLCHIMED,
- STRINGID_BELLCHIMED, STRINGID_BELLCHIMED, STRINGID_BELLCHIMED,
- STRINGID_SOOTHINGAROMA, STRINGID_PKMNFORESAWATTACK, STRINGID_PKMNCHOSEXASDESTINY,
- STRINGID_PKMNBROKEFREE, STRINGID_ITAPPEAREDCAUGHT, STRINGID_AARGHALMOSTHADIT,
- STRINGID_SHOOTSOCLOSE, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
+};
+
+const u16 gRestUsedStringIds[] =
+{
+ STRINGID_PKMNWENTTOSLEEP, STRINGID_PKMNSLEPTHEALTHY
+};
+
+const u16 gUproarOverTurnStringIds[] =
+{
+ STRINGID_PKMNMAKINGUPROAR, STRINGID_PKMNCALMEDDOWN
+};
+
+const u16 gStockpileUsedStringIds[] =
+{
+ STRINGID_PKMNSTOCKPILED, STRINGID_PKMNCANTSTOCKPILE,
+};
+
+const u16 gWokeUpStringIds[] =
+{
+ STRINGID_PKMNWOKEUP, STRINGID_PKMNWOKEUPINUPROAR
+};
+
+const u16 gSwallowFailStringIds[] =
+{
+ STRINGID_FAILEDTOSWALLOW, STRINGID_PKMNHPFULL
+};
+
+const u16 gUproarAwakeStringIds[] =
+{
+ STRINGID_PKMNCANTSLEEPINUPROAR2, STRINGID_UPROARKEPTPKMNAWAKE, STRINGID_PKMNSTAYEDAWAKEUSING
+};
+
+const u16 gStatUpStringIds[] =
+{
+ STRINGID_PKMNSSTATCHANGED, STRINGID_PKMNSSTATCHANGED2, STRINGID_STATSWONTINCREASE,
+ STRINGID_EMPTYSTRING3, STRINGID_USINGXTHEYOFZN, STRINGID_PKMNUSEDXTOGETPUMPED
+};
+
+const u16 gStatDownStringIds[] =
+{
+ STRINGID_PKMNSSTATCHANGED3, STRINGID_PKMNSSTATCHANGED4, STRINGID_STATSWONTDECREASE, STRINGID_EMPTYSTRING3
+};
+
+const u16 gFirstTurnOfTwoStringIds[] =
+{
+ STRINGID_PKMNWHIPPEDWHIRLWIND, STRINGID_PKMNTOOKSUNLIGHT, STRINGID_PKMNLOWEREDHEAD, STRINGID_PKMNISGLOWING,
+ STRINGID_PKMNFLEWHIGH, STRINGID_PKMNDUGHOLE, STRINGID_PKMNHIDUNDERWATER, STRINGID_PKMNSPRANGUP
+};
+
+const u16 gWrappedStringIds[] =
+{
+ STRINGID_PKMNSQUEEZEDBYBIND, STRINGID_PKMNWRAPPEDBY, STRINGID_PKMNTRAPPEDINVORTEX,
+ STRINGID_PKMNCLAMPED, STRINGID_PKMNTRAPPEDINVORTEX, STRINGID_PKMNTRAPPEDBYSANDTOMB
+};
+
+const u16 gMistUsedStringIds[] =
+{
+ STRINGID_PKMNSHROUDEDINMIST, STRINGID_BUTITFAILED
+};
+
+const u16 gFocusEnergyUsedStringIds[] =
+{
+ STRINGID_PKMNGETTINGPUMPED, STRINGID_BUTITFAILED
+};
+
+const u16 gTransformUsedStringIds[] =
+{
+ STRINGID_PKMNTRANSFORMEDINTO, STRINGID_BUTITFAILED
+};
+
+const u16 gSubsituteUsedStringIds[] =
+{
+ STRINGID_PKMNMADESUBSTITUTE, STRINGID_TOOWEAKFORSUBSTITUTE
+};
+
+const u16 gGotPoisonedStringIds[] =
+{
+ STRINGID_PKMNWASPOISONED, STRINGID_PKMNPOISONEDBY
+};
+
+const u16 gGotParalyzedStringIds[] =
+{
+ STRINGID_PKMNWASPARALYZED, STRINGID_PKMNWASPARALYZEDBY
+};
+
+const u16 gFellAsleepStringIds[] =
+{
+ STRINGID_PKMNFELLASLEEP, STRINGID_PKMNMADESLEEP,
+};
+
+const u16 gGotBurnedStringIds[] =
+{
+ STRINGID_PKMNWASBURNED, STRINGID_PKMNBURNEDBY
+};
+
+const u16 gGotFrozenStringIds[] =
+{
+ STRINGID_PKMNWASFROZEN, STRINGID_PKMNFROZENBY
+};
+
+const u16 gGotDefrostedStringIds[] =
+{
+ STRINGID_PKMNWASDEFROSTED2, STRINGID_PKMNWASDEFROSTEDBY
+};
+
+const u16 gKOFailedStringIds[] =
+{
+ STRINGID_ATTACKMISSED, STRINGID_PKMNUNAFFECTED
+};
+
+const u16 gAttractUsedStringIds[] =
+{
+ STRINGID_PKMNFELLINLOVE, STRINGID_PKMNSXINFATUATEDY
+};
+
+const u16 gLeechSeedDrainStringIds[] =
+{
+ STRINGID_PKMNENERGYDRAINED, STRINGID_ITSUCKEDLIQUIDOOZE
+};
+
+const u16 gSportsUsedStringIds[] =
+{
+ STRINGID_ELECTRICITYWEAKENED, STRINGID_FIREWEAKENED
+};
+
+const u16 gPartyStatusHealStringIds[] =
+{
+ STRINGID_BELLCHIMED, STRINGID_BELLCHIMED, STRINGID_BELLCHIMED, STRINGID_BELLCHIMED,
+ // interesting how there are four instances of the same string
+ STRINGID_SOOTHINGAROMA
+};
+
+const u16 gFutureMoveUsedStringIds[] =
+{
+ STRINGID_PKMNFORESAWATTACK, STRINGID_PKMNCHOSEXASDESTINY
+};
+
+const u16 gBallEscapeStringIds[] =
+{
+ STRINGID_PKMNBROKEFREE, STRINGID_ITAPPEAREDCAUGHT, STRINGID_AARGHALMOSTHADIT, STRINGID_SHOOTSOCLOSE
+};
+
+const u16 gWeatherContinuesStringIds[] =
+{
STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
- STRINGID_SANDSTORMISRAGING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
- STRINGID_ITISRAINING, STRINGID_SUNLIGHTSTRONG, STRINGID_ITISRAINING,
- STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_PKMNLOAFING,
- STRINGID_PKMNWONTOBEY, STRINGID_PKMNTURNEDAWAY, STRINGID_PKMNPRETENDNOTNOTICE,
- STRINGID_PKMNINCAPABLEOFPOWER, STRINGID_CREPTCLOSER, STRINGID_CANTGETCLOSER,
- STRINGID_PKMNCURIOUSABOUTX, STRINGID_PKMNENTHRALLEDBYX, STRINGID_PKMNIGNOREDX,
+ STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_SANDSTORMISRAGING,
+ STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING,
+ STRINGID_SUNLIGHTSTRONG, STRINGID_ITISRAINING, STRINGID_ITISRAINING, STRINGID_ITISRAINING
+};
+
+const u16 gInobedientStringIds[] =
+{
+ STRINGID_PKMNLOAFING, STRINGID_PKMNWONTOBEY, STRINGID_PKMNTURNEDAWAY,
+ STRINGID_PKMNPRETENDNOTNOTICE, STRINGID_PKMNINCAPABLEOFPOWER
+};
+
+const u16 gSafariGetNearStringIds[] =
+{
+ STRINGID_CREPTCLOSER, STRINGID_CANTGETCLOSER
+};
+
+const u16 gSafariPokeblockResultStringIds[] =
+{
+ STRINGID_PKMNCURIOUSABOUTX, STRINGID_PKMNENTHRALLEDBYX, STRINGID_PKMNIGNOREDX
+};
+
+const u16 gTrainerItemCuredStatusStringIds[] =
+{
STRINGID_PKMNSITEMSNAPPEDOUT, STRINGID_PKMNSITEMCUREDPARALYSIS, STRINGID_PKMNSITEMDEFROSTEDIT,
- STRINGID_PKMNSITEMHEALEDBURN, STRINGID_PKMNSITEMCUREDPOISON, STRINGID_PKMNSITEMWOKEIT,
- STRINGID_PKMNSITEMCUREDPROBLEM, STRINGID_PKMNSITEMNORMALIZEDSTATUS, STRINGID_PKMNSXPREVENTSBURNS,
- STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXHADNOEFFECTONY, STRINGID_PKMNPREVENTSPARALYSISWITH,
- STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXHADNOEFFECTONY, STRINGID_PKMNPREVENTSPOISONINGWITH,
- STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXHADNOEFFECTONY, STRINGID_PKMNOBTAINEDX,
- STRINGID_PKMNOBTAINEDX2, STRINGID_PKMNOBTAINEDXYOBTAINEDZ, STRINGID_PKMNRAISEDFIREPOWERWITH,
- STRINGID_PKMNSXMADEYINEFFECTIVE, STRINGID_PKMNTRANSFERREDSOMEONESPC, STRINGID_PKMNTRANSFERREDLANETTESPC,
- STRINGID_PKMNBOXSOMEONESPCFULL, STRINGID_PKMNBOXLANETTESPCFULL,
+ STRINGID_PKMNSITEMHEALEDBURN, STRINGID_PKMNSITEMCUREDPOISON, STRINGID_PKMNSITEMWOKEIT
+};
+
+const u16 gBerryEffectStringIds[] =
+{
+ STRINGID_PKMNSITEMCUREDPROBLEM, STRINGID_PKMNSITEMNORMALIZEDSTATUS
+};
+
+const u16 gBRNPreventionStringIds[] =
+{
+ STRINGID_PKMNSXPREVENTSBURNS, STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXHADNOEFFECTONY
+};
+
+const u16 gPRLZPreventionStringIds[] =
+{
+ STRINGID_PKMNPREVENTSPARALYSISWITH, STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXHADNOEFFECTONY
+};
+
+const u16 gPSNPreventionStringIds[] =
+{
+ STRINGID_PKMNPREVENTSPOISONINGWITH, STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXHADNOEFFECTONY
+};
+
+const u16 gItemSwapStringIds[] =
+{
+ STRINGID_PKMNOBTAINEDX, STRINGID_PKMNOBTAINEDX2, STRINGID_PKMNOBTAINEDXYOBTAINEDZ
+};
+
+const u16 gFlashFireStringIds[] =
+{
+ STRINGID_PKMNRAISEDFIREPOWERWITH, STRINGID_PKMNSXMADEYINEFFECTIVE
+};
+
+const u16 gCaughtMonStringIds[] =
+{
+ STRINGID_PKMNTRANSFERREDSOMEONESPC, STRINGID_PKMNTRANSFERREDLANETTESPC, STRINGID_PKMNBOXSOMEONESPCFULL, STRINGID_PKMNBOXLANETTESPCFULL,
};
const u16 gTrappingMoves[] =
@@ -1102,9 +1281,10 @@ const u8 gText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is
const u8 gText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!");
const u8 gText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!");
-const u16 gUnknown_085CCF0A[] =
+const u16 gStringIds_85CCF0A[] =
{
- 0x016E, 0x016F, 0x0170, 0x0171
+ STRINGID_GLINTAPPEARSINEYE, STRINGID_PKMNGETTINGINTOPOSITION,
+ STRINGID_PKMNBEGANGROWLINGDEEPLY, STRINGID_PKMNEAGERFORMORE
};
const u8 gText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!");
@@ -1736,11 +1916,11 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
else
toCpy = gMoveNames[gStringInfo->currentMove];
break;
- case B_TXT_LAST_MOVE: // last used move name
- if (gStringInfo->lastMove > LAST_MOVE_INDEX)
+ case B_TXT_LAST_MOVE: // originally used move name
+ if (gStringInfo->originallyUsedMove > LAST_MOVE_INDEX)
toCpy = gText_UnknownMoveTypes[gBattleStruct->stringMoveType];
else
- toCpy = gMoveNames[gStringInfo->lastMove];
+ toCpy = gMoveNames[gStringInfo->originallyUsedMove];
break;
case B_TXT_LAST_ITEM: // last used item
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
@@ -2118,7 +2298,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
StringGetEnd10(dst);
srcID += 3;
break;
- case B_BUFF_NEGATIVE_FLAVOUR: // flavour table
+ case B_BUFF_NEGATIVE_FLAVOR: // flavor table
StringAppend(dst, gPokeblockWasTooXStringTable[src[srcID + 1]]);
srcID += 2;
break;
@@ -2264,9 +2444,9 @@ void BattleHandleAddTextPrinter(const u8 *text, u8 arg1)
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
speed = 1;
else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
- speed = sRecordedBattleTextSpeeds[sub_8185FC4()];
+ speed = sRecordedBattleTextSpeeds[GetTextSpeedInRecordedBattle()];
else
- speed = sav2_get_text_speed();
+ speed = GetPlayerTextSpeed();
gTextFlags.flag_0 = 1;
}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 6409ff56e..d9b35c053 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -3,6 +3,7 @@
#include "battle_move_effects.h"
#include "battle_message.h"
#include "battle_ai_script_commands.h"
+#include "battle_scripts.h"
#include "moves.h"
#include "abilities.h"
#include "item.h"
@@ -73,10 +74,10 @@ extern u8 gCurrentActionFuncId;
extern u32 gHitMarker;
extern u8 gBattleMoveFlags;
extern u8 gBattleCommunication[];
-extern u16 gUnknown_02024250[4];
-extern u16 gUnknown_02024258[4];
-extern u16 gUnknown_02024260[4];
-extern u8 gUnknown_02024270[4];
+extern u16 gLastLandedMoves[4];
+extern u16 gLastHitByType[4];
+extern u16 gLastResultingMoves[4];
+extern u8 gLastHitBy[4];
extern u8 gStringBank;
extern u16 gDynamicBasePower;
extern u16 gLastUsedItem;
@@ -98,9 +99,9 @@ extern u8 gCurrentTurnActionNumber;
extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
extern u16 gLockedMoves[BATTLE_BANKS_COUNT];
extern u16 gPartnerTrainerId;
-extern u16 gLastUsedMove;
-extern u16 gUnknownMovesUsedByBanks[BATTLE_BANKS_COUNT];
-extern u16 gLastUsedMovesByBanks[BATTLE_BANKS_COUNT];
+extern u16 gChosenMove;
+extern u16 gLastPrintedMoves[BATTLE_BANKS_COUNT];
+extern u16 gLastMoves[BATTLE_BANKS_COUNT];
extern u16 gTrainerBattleOpponent_A;
extern u16 gTrainerBattleOpponent_B;
extern u8 gUnknown_020241E9;
@@ -146,88 +147,6 @@ extern u8 sub_813B21C(void);
extern u16 get_unknown_box_id(void);
extern void sub_80356D0(void);
-// BattleScripts
-extern const u8 BattleScript_MoveEnd[];
-extern const u8 BattleScript_NoPPForMove[];
-extern const u8 BattleScript_MagicCoatBounce[];
-extern const u8 BattleScript_TookAttack[];
-extern const u8 BattleScript_SnatchedMove[];
-extern const u8 BattleScript_Pausex20[];
-extern const u8 BattleScript_SubstituteFade[];
-extern const u8 BattleScript_HangedOnMsg[];
-extern const u8 BattleScript_OneHitKOMsg[];
-extern const u8 BattleScript_EnduredMsg[];
-extern const u8 BattleScript_PSNPrevention[];
-extern const u8 BattleScript_BRNPrevention[];
-extern const u8 BattleScript_PRLZPrevention[];
-extern const u8 BattleScript_FlinchPrevention[];
-extern const u8 BattleScript_StatUp[];
-extern const u8 BattleScript_StatDown[];
-extern const u8 BattleScript_NoItemSteal[];
-extern const u8 BattleScript_ItemSteal[];
-extern const u8 BattleScript_RapidSpinAway[];
-extern const u8 BattleScript_TargetPRLZHeal[];
-extern const u8 BattleScript_KnockedOff[];
-extern const u8 BattleScript_StickyHoldActivates[];
-extern const u8 BattleScript_AllStatsUp[];
-extern const u8 BattleScript_AtkDefDown[];
-extern const u8 BattleScript_SAtkDown2[];
-extern const u8 BattleScript_LevelUp[];
-extern const u8 BattleScript_WrapFree[];
-extern const u8 BattleScript_LeechSeedFree[];
-extern const u8 BattleScript_SpikesFree[];
-extern const u8 BattleScript_ButItFailed[];
-extern const u8 BattleScript_ObliviousPreventsAttraction[];
-extern const u8 BattleScript_MistProtected[];
-extern const u8 BattleScript_AbilityNoStatLoss[];
-extern const u8 BattleScript_AbilityNoSpecificStatLoss[];
-extern const u8 BattleScript_TrainerBallBlock[];
-extern const u8 BattleScript_WallyBallThrow[];
-extern const u8 BattleScript_SuccessBallThrow[];
-extern const u8 BattleScript_ShakeBallThrow[];
-extern const u8 BattleScript_FaintAttacker[];
-extern const u8 BattleScript_FaintTarget[];
-extern const u8 BattleScript_DestinyBondTakesLife[];
-extern const u8 BattleScript_GrudgeTakesPp[];
-extern const u8 BattleScript_RageIsBuilding[];
-extern const u8 BattleScript_DefrostedViaFireMove[];
-extern const u8 gUnknown_082DB87D[];
-extern const u8 gUnknown_082DAE90[];
-extern const u8 gUnknown_082DAE59[];
-extern const u8 gUnknown_082DAEC7[];
-extern const u8 BattleScript_MoveEffectSleep[];
-extern const u8 BattleScript_MoveEffectPoison[];
-extern const u8 BattleScript_MoveEffectBurn[];
-extern const u8 BattleScript_MoveEffectFreeze[];
-extern const u8 BattleScript_MoveEffectParalysis[];
-extern const u8 BattleScript_MoveEffectToxic[];
-extern const u8 BattleScript_MoveEffectConfusion[];
-extern const u8 BattleScript_MoveEffectUproar[];
-extern const u8 BattleScript_MoveEffectPayDay[];
-extern const u8 BattleScript_MoveEffectWrap[];
-extern const u8 BattleScript_MoveEffectRecoil33[];
-extern const u8 BattleScript_DampStopsExplosion[];
-extern const u8 BattleScript_MistProtected[];
-extern const u8 BattleScript_AbilityNoStatLoss[];
-extern const u8 BattleScript_AbilityNoSpecificStatLoss[];
-extern const u8 BattleScript_ButItFailed[];
-extern const u8 gUnknown_082DADD8[];
-extern const u8 BattleScript_PrintPayDayMoneyString[];
-extern const u8 BattleScript_SturdyPreventsOHKO[];
-extern const u8 BattleScript_ObliviousPreventsAttraction[];
-extern const u8 BattleScript_PauseEffectivenessSoundResultMsgEndMove[];
-extern const u8 BattleScript_CastformChange[];
-extern const u8 BattleScript_TrainerBallBlock[];
-extern const u8 BattleScript_WallyBallThrow[];
-extern const u8 BattleScript_SuccessBallThrow[];
-extern const u8 BattleScript_ShakeBallThrow[];
-extern const u8 BattleScript_PresentDamageTarget[];
-extern const u8 BattleScript_AlreadyAtFullHp[];
-extern const u8 BattleScript_PresentHealTarget[];
-extern const u8 BattleScript_WrapFree[];
-extern const u8 BattleScript_LeechSeedFree[];
-extern const u8 BattleScript_SpikesFree[];
-
// strings
extern const u8 gText_BattleYesNoChoice[];
@@ -247,7 +166,7 @@ extern const u8 gText_BattleYesNoChoice[];
// this file's functions
static bool8 IsTwoTurnsMove(u16 move);
-static void DestinyBondFlagUpdate(void);
+static void TrySetDestinyBondToHappen(void);
static u8 AttacksThisTurn(u8 bank, 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);
@@ -267,41 +186,41 @@ static void atk01_accuracycheck(void);
static void atk02_attackstring(void);
static void atk03_ppreduce(void);
static void atk04_critcalc(void);
-static void atk05_damagecalc1(void);
+static void atk05_damagecalc(void);
static void atk06_typecalc(void);
-static void atk07_dmg_adjustment(void);
-static void atk08_dmg_adjustment2(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_effectiveness_sound(void);
+static void atk0E_effectivenesssound(void);
static void atk0F_resultmessage(void);
static void atk10_printstring(void);
-static void atk11_printstring_playeronly(void);
+static void atk11_printselectionstring(void);
static void atk12_waitmessage(void);
static void atk13_printfromtable(void);
-static void atk14_printfromtable_playeronly(void);
+static void atk14_printselectionstringfromtable(void);
static void atk15_seteffectwithchance(void);
static void atk16_seteffectprimary(void);
static void atk17_seteffectsecondary(void);
-static void atk18_status_effect_clear(void);
-static void atk19_faint_pokemon(void);
-static void atk1A_faint_animation(void);
-static void atk1B_faint_effects_clear(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_jumpifstatus3(void);
+static void atk21_jumpifstatus3condition(void);
static void atk22_jumpiftype(void);
static void atk23_getexp(void);
static void atk24(void);
-static void atk25_move_values_cleanup(void);
-static void atk26_set_multihit(void);
-static void atk27_decrement_multihit(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);
@@ -312,7 +231,7 @@ static void atk2E_setbyte(void);
static void atk2F_addbyte(void);
static void atk30_subbyte(void);
static void atk31_copyarray(void);
-static void atk32_copyarray_withindex(void);
+static void atk32_copyarraywithindex(void);
static void atk33_orbyte(void);
static void atk34_orhalfword(void);
static void atk35_orword(void);
@@ -326,75 +245,75 @@ static void atk3C_return(void);
static void atk3D_end(void);
static void atk3E_end2(void);
static void atk3F_end3(void);
-static void atk40_jump_if_move_affected_by_protect(void);
+static void atk40_jumpifaffectedbyprotect(void);
static void atk41_call(void);
static void atk42_jumpiftype2(void);
static void atk43_jumpifabilitypresent(void);
-static void atk44_end_selection_script(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_return_atk_to_ball(void);
-static void atk4C_get_switched_mon_data(void);
-static void atk4D_switch_data_update(void);
-static void atk4E_switchin_anim(void);
-static void atk4F_jump_if_cannot_switch(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_switch_handle_order(void);
-static void atk52_switch_in_effects(void);
-static void atk53_trainer_slide(void);
-static void atk54_effectiveness_sound(void);
-static void atk55_play_fanfare(void);
-static void atk56_fainting_cry(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_return_to_ball(void);
-static void atk59_learnmove_inbattle(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_8025A70(void);
-static void atk5F_8025B24(void);
-static void atk60_increment_gamestat(void);
-static void atk61_draw_party_status_summary(void);
-static void atk62_08025C6C(void);
+static void atk5E(void);
+static void atk5F(void);
+static void atk60_incrementgamestat(void);
+static void atk61_drawpartystatussummary(void);
+static void atk62(void);
static void atk63_jumptorandomattack(void);
static void atk64_statusanimation(void);
static void atk65_status2animation(void);
static void atk66_chosenstatusanimation(void);
static void atk67_yesnobox(void);
-static void atk68_cancel_everyones_actions(void);
-static void atk69_dmg_adjustment3(void);
+static void atk68_cancelallactions(void);
+static void atk69_adjustsetdamage(void);
static void atk6A_removeitem(void);
static void atk6B_atknameinbuff1(void);
-static void atk6C_draw_lvlupbox(void);
-static void atk6D_reset_sentpokes_value(void);
-static void atk6E_set_atk_to_player0(void);
-static void atk6F_set_visible(void);
-static void atk70_record_last_used_ability(void);
-static void atk71_buffer_move_to_learn(void);
-static void atk72_jump_if_run_attempt_success(void);
-static void atk73_hp_thresholds(void);
-static void atk74_hp_thresholds2(void);
-static void atk75_item_effect_on_opponent(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_set_protect_like(void);
+static void atk77_setprotectlike(void);
static void atk78_faintifabilitynotdamp(void);
static void atk79_setatkhptozero(void);
-static void atk7A_jumpwhiletargetvalid(void);
-static void atk7B_healhalfHP_if_possible(void);
+static void atk7A_jumpifnexttargetvalid(void);
+static void atk7B_tryhealhalfhealth(void);
static void atk7C_trymirrormove(void);
-static void atk7D_set_rain(void);
+static void atk7D_setrain(void);
static void atk7E_setreflect(void);
static void atk7F_setseeded(void);
static void atk80_manipulatedamage(void);
-static void atk81_setrest(void);
+static void atk81_trysetrest(void);
static void atk82_jumpifnotfirstturn(void);
static void atk83_nop(void);
-static void atk84_jump_if_cant_sleep(void);
+static void atk84_jumpifcantmakeasleep(void);
static void atk85_stockpile(void);
static void atk86_stockpiletobasedamage(void);
static void atk87_stockpiletohpheal(void);
@@ -403,22 +322,22 @@ static void atk89_statbuffchange(void);
static void atk8A_normalisebuffs(void);
static void atk8B_setbide(void);
static void atk8C_confuseifrepeatingattackends(void);
-static void atk8D_setmultihit_counter(void);
-static void atk8E_init_multihit_string(void);
+static void atk8D_setmultihitcounter(void);
+static void atk8E_initmultihitstring(void);
static void atk8F_forcerandomswitch(void);
-static void atk90_conversion_type_change(void);
+static void atk90_tryconversiontypechange(void);
static void atk91_givepaydaymoney(void);
static void atk92_setlightscreen(void);
-static void atk93_ko_move(void);
+static void atk93_tryKO(void);
static void atk94_damagetohalftargethp(void);
static void atk95_setsandstorm(void);
static void atk96_weatherdamage(void);
-static void atk97_try_infatuation(void);
-static void atk98_status_icon_update(void);
+static void atk97_tryinfatuating(void);
+static void atk98_updatestatusicon(void);
static void atk99_setmist(void);
-static void atk9A_set_focusenergy(void);
+static void atk9A_setfocusenergy(void);
static void atk9B_transformdataexecution(void);
-static void atk9C_set_substitute(void);
+static void atk9C_setsubstitute(void);
static void atk9D_mimicattackcopy(void);
static void atk9E_metronome(void);
static void atk9F_dmgtolevel(void);
@@ -426,39 +345,39 @@ static void atkA0_psywavedamageeffect(void);
static void atkA1_counterdamagecalculator(void);
static void atkA2_mirrorcoatdamagecalculator(void);
static void atkA3_disablelastusedattack(void);
-static void atkA4_setencore(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_sleeptalk_choose_move(void);
-static void atkAA_set_destinybond(void);
-static void atkAB_DestinyBondFlagUpdate(void);
+static void atkA9_trychoosesleeptalkmove(void);
+static void atkAA_setdestinybond(void);
+static void atkAB_trysetdestinybondtohappen(void);
static void atkAC_remaininghptopower(void);
-static void atkAD_spite_ppreduce(void);
-static void atkAE_heal_party_status(void);
+static void atkAD_tryspiteppreduce(void);
+static void atkAE_healpartystatus(void);
static void atkAF_cursetarget(void);
-static void atkB0_set_spikes(void);
-static void atkB1_set_foresight(void);
-static void atkB2_setperishsong(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_set_safeguard(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_set_defense_curl(void);
+static void atkBF_setdefensecurlbit(void);
static void atkC0_recoverbasedonsunlight(void);
-static void atkC1_hidden_power_calc(void);
-static void atkC2_selectnexttarget(void);
-static void atkC3_setfutureattack(void);
-static void atkC4_beat_up(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);
@@ -471,46 +390,46 @@ static void atkCD_cureifburnedparalysedorpoisoned(void);
static void atkCE_settorment(void);
static void atkCF_jumpifnodamage(void);
static void atkD0_settaunt(void);
-static void atkD1_set_helpinghand(void);
-static void atkD2_swap_items(void);
-static void atkD3_copy_ability(void);
-static void atkD4_wish_effect(void);
-static void atkD5_setroots(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_abilityswap(void);
-static void atkDB_imprisoneffect(void);
-static void atkDC_setgrudge(void);
+static void atkDA_tryswapabilities(void);
+static void atkDB_tryimprision(void);
+static void atkDC_trysetgrudge(void);
static void atkDD_weightdamagecalculation(void);
static void atkDE_asistattackselect(void);
-static void atkDF_setmagiccoat(void);
-static void atkE0_setstealstatchange(void);
-static void atkE1_intimidate_string_loader(void);
-static void atkE2_switchout_abilities(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_castform_change_animation(void);
-static void atkE7_castform_data_change(void);
+static void atkE6_docastformchangeanimation(void);
+static void atkE7_trycastformdatachange(void);
static void atkE8_settypebasedhalvers(void);
static void atkE9_setweatherballtype(void);
-static void atkEA_recycleitem(void);
+static void atkEA_tryrecycleitem(void);
static void atkEB_settypetoterrain(void);
-static void atkEC_pursuit_sth(void);
-static void atkED_802B4B4(void);
+static void atkEC_pursuitrelated(void);
+static void atkEF_snatchsetbanks(void);
static void atkEE_removelightscreenreflect(void);
-static void atkEF_pokeball_catch_calculation(void);
-static void atkF0_give_caught_mon(void);
-static void atkF1_set_caught_mon_dex_flags(void);
-static void atkF2_display_dex_info(void);
-static void atkF3_nickname_caught_poke(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_action_finished(void);
-static void atkF7_turn_finished(void);
-static void atkF8_trainer_slide_back(void);
+static void atkF6_finishaction(void);
+static void atkF7_finishturn(void);
+static void atkF8_trainerslideout(void);
void (* const gBattleScriptingCommandsTable[])(void) =
{
@@ -519,41 +438,41 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atk02_attackstring,
atk03_ppreduce,
atk04_critcalc,
- atk05_damagecalc1,
+ atk05_damagecalc,
atk06_typecalc,
- atk07_dmg_adjustment,
- atk08_dmg_adjustment2,
+ atk07_adjustnormaldamage,
+ atk08_adjustnormaldamage2,
atk09_attackanimation,
atk0A_waitanimation,
atk0B_healthbarupdate,
atk0C_datahpupdate,
atk0D_critmessage,
- atk0E_effectiveness_sound,
+ atk0E_effectivenesssound,
atk0F_resultmessage,
atk10_printstring,
- atk11_printstring_playeronly,
+ atk11_printselectionstring,
atk12_waitmessage,
atk13_printfromtable,
- atk14_printfromtable_playeronly,
+ atk14_printselectionstringfromtable,
atk15_seteffectwithchance,
atk16_seteffectprimary,
atk17_seteffectsecondary,
- atk18_status_effect_clear,
- atk19_faint_pokemon,
- atk1A_faint_animation,
- atk1B_faint_effects_clear,
+ atk18_clearstatusfromeffect,
+ atk19_tryfaintmon,
+ atk1A_dofaintanimation,
+ atk1B_cleareffectsonfaint,
atk1C_jumpifstatus,
atk1D_jumpifstatus2,
atk1E_jumpifability,
atk1F_jumpifsideaffecting,
atk20_jumpifstat,
- atk21_jumpifstatus3,
+ atk21_jumpifstatus3condition,
atk22_jumpiftype,
atk23_getexp,
atk24,
- atk25_move_values_cleanup,
- atk26_set_multihit,
- atk27_decrement_multihit,
+ atk25_movevaluescleanup,
+ atk26_setmultihit,
+ atk27_decrementmultihit,
atk28_goto,
atk29_jumpifbyte,
atk2A_jumpifhalfword,
@@ -564,7 +483,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atk2F_addbyte,
atk30_subbyte,
atk31_copyarray,
- atk32_copyarray_withindex,
+ atk32_copyarraywithindex,
atk33_orbyte,
atk34_orhalfword,
atk35_orword,
@@ -578,75 +497,75 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atk3D_end,
atk3E_end2,
atk3F_end3,
- atk40_jump_if_move_affected_by_protect,
+ atk40_jumpifaffectedbyprotect,
atk41_call,
atk42_jumpiftype2,
atk43_jumpifabilitypresent,
- atk44_end_selection_script,
+ atk44_endselectionscript,
atk45_playanimation,
atk46_playanimation2,
atk47_setgraphicalstatchangevalues,
atk48_playstatchangeanimation,
atk49_moveend,
atk4A_typecalc2,
- atk4B_return_atk_to_ball,
- atk4C_get_switched_mon_data,
- atk4D_switch_data_update,
- atk4E_switchin_anim,
- atk4F_jump_if_cannot_switch,
+ atk4B_returnatktoball,
+ atk4C_getswitchedmondata,
+ atk4D_switchindataupdate,
+ atk4E_switchinanim,
+ atk4F_jumpifcantswitch,
atk50_openpartyscreen,
- atk51_switch_handle_order,
- atk52_switch_in_effects,
- atk53_trainer_slide,
- atk54_effectiveness_sound,
- atk55_play_fanfare,
- atk56_fainting_cry,
+ atk51_switchhandleorder,
+ atk52_switchineffects,
+ atk53_trainerslidein,
+ atk54_playse,
+ atk55_fanfare,
+ atk56_playfaintcry,
atk57,
- atk58_return_to_ball,
- atk59_learnmove_inbattle,
+ atk58_returntoball,
+ atk59_handlelearnnewmove,
atk5A_yesnoboxlearnmove,
atk5B_yesnoboxstoplearningmove,
atk5C_hitanimation,
atk5D_getmoneyreward,
- atk5E_8025A70,
- atk5F_8025B24,
- atk60_increment_gamestat,
- atk61_draw_party_status_summary,
- atk62_08025C6C,
+ atk5E,
+ atk5F,
+ atk60_incrementgamestat,
+ atk61_drawpartystatussummary,
+ atk62,
atk63_jumptorandomattack,
atk64_statusanimation,
atk65_status2animation,
atk66_chosenstatusanimation,
atk67_yesnobox,
- atk68_cancel_everyones_actions,
- atk69_dmg_adjustment3,
+ atk68_cancelallactions,
+ atk69_adjustsetdamage,
atk6A_removeitem,
atk6B_atknameinbuff1,
- atk6C_draw_lvlupbox,
- atk6D_reset_sentpokes_value,
- atk6E_set_atk_to_player0,
- atk6F_set_visible,
- atk70_record_last_used_ability,
- atk71_buffer_move_to_learn,
- atk72_jump_if_run_attempt_success,
- atk73_hp_thresholds,
- atk74_hp_thresholds2,
- atk75_item_effect_on_opponent,
+ atk6C_drawlvlupbox,
+ atk6D_resetsentmonsvalue,
+ atk6E_setatktoplayer0,
+ atk6F_makevisible,
+ atk70_recordlastability,
+ atk71_buffermovetolearn,
+ atk72_jumpifplayerran,
+ atk73_hpthresholds,
+ atk74_hpthresholds2,
+ atk75_useitemonopponent,
atk76_various,
- atk77_set_protect_like,
+ atk77_setprotectlike,
atk78_faintifabilitynotdamp,
atk79_setatkhptozero,
- atk7A_jumpwhiletargetvalid,
- atk7B_healhalfHP_if_possible,
+ atk7A_jumpifnexttargetvalid,
+ atk7B_tryhealhalfhealth,
atk7C_trymirrormove,
- atk7D_set_rain,
+ atk7D_setrain,
atk7E_setreflect,
atk7F_setseeded,
atk80_manipulatedamage,
- atk81_setrest,
+ atk81_trysetrest,
atk82_jumpifnotfirstturn,
atk83_nop,
- atk84_jump_if_cant_sleep,
+ atk84_jumpifcantmakeasleep,
atk85_stockpile,
atk86_stockpiletobasedamage,
atk87_stockpiletohpheal,
@@ -655,22 +574,22 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atk8A_normalisebuffs,
atk8B_setbide,
atk8C_confuseifrepeatingattackends,
- atk8D_setmultihit_counter,
- atk8E_init_multihit_string,
+ atk8D_setmultihitcounter,
+ atk8E_initmultihitstring,
atk8F_forcerandomswitch,
- atk90_conversion_type_change,
+ atk90_tryconversiontypechange,
atk91_givepaydaymoney,
atk92_setlightscreen,
- atk93_ko_move,
+ atk93_tryKO,
atk94_damagetohalftargethp,
atk95_setsandstorm,
atk96_weatherdamage,
- atk97_try_infatuation,
- atk98_status_icon_update,
+ atk97_tryinfatuating,
+ atk98_updatestatusicon,
atk99_setmist,
- atk9A_set_focusenergy,
+ atk9A_setfocusenergy,
atk9B_transformdataexecution,
- atk9C_set_substitute,
+ atk9C_setsubstitute,
atk9D_mimicattackcopy,
atk9E_metronome,
atk9F_dmgtolevel,
@@ -678,39 +597,39 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atkA1_counterdamagecalculator,
atkA2_mirrorcoatdamagecalculator,
atkA3_disablelastusedattack,
- atkA4_setencore,
+ atkA4_trysetencore,
atkA5_painsplitdmgcalc,
atkA6_settypetorandomresistance,
atkA7_setalwayshitflag,
atkA8_copymovepermanently,
- atkA9_sleeptalk_choose_move,
- atkAA_set_destinybond,
- atkAB_DestinyBondFlagUpdate,
+ atkA9_trychoosesleeptalkmove,
+ atkAA_setdestinybond,
+ atkAB_trysetdestinybondtohappen,
atkAC_remaininghptopower,
- atkAD_spite_ppreduce,
- atkAE_heal_party_status,
+ atkAD_tryspiteppreduce,
+ atkAE_healpartystatus,
atkAF_cursetarget,
- atkB0_set_spikes,
- atkB1_set_foresight,
- atkB2_setperishsong,
+ atkB0_trysetspikes,
+ atkB1_setforesight,
+ atkB2_trysetperishsong,
atkB3_rolloutdamagecalculation,
atkB4_jumpifconfusedandstatmaxed,
atkB5_furycuttercalc,
atkB6_happinesstodamagecalculation,
atkB7_presentdamagecalculation,
- atkB8_set_safeguard,
+ atkB8_setsafeguard,
atkB9_magnitudedamagecalculation,
atkBA_jumpifnopursuitswitchdmg,
atkBB_setsunny,
atkBC_maxattackhalvehp,
atkBD_copyfoestats,
atkBE_rapidspinfree,
- atkBF_set_defense_curl,
+ atkBF_setdefensecurlbit,
atkC0_recoverbasedonsunlight,
- atkC1_hidden_power_calc,
- atkC2_selectnexttarget,
- atkC3_setfutureattack,
- atkC4_beat_up,
+ atkC1_hiddenpowercalc,
+ atkC2_selectfirstvalidtarget,
+ atkC3_trysetfutureattack,
+ atkC4_trydobeatup,
atkC5_setsemiinvulnerablebit,
atkC6_clearsemiinvulnerablebit,
atkC7_setminimize,
@@ -723,46 +642,46 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atkCE_settorment,
atkCF_jumpifnodamage,
atkD0_settaunt,
- atkD1_set_helpinghand,
- atkD2_swap_items,
- atkD3_copy_ability,
- atkD4_wish_effect,
- atkD5_setroots,
+ atkD1_trysethelpinghand,
+ atkD2_tryswapitems,
+ atkD3_trycopyability,
+ atkD4_trywish,
+ atkD5_trysetroots,
atkD6_doubledamagedealtifdamaged,
atkD7_setyawn,
atkD8_setdamagetohealthdifference,
atkD9_scaledamagebyhealthratio,
- atkDA_abilityswap,
- atkDB_imprisoneffect,
- atkDC_setgrudge,
+ atkDA_tryswapabilities,
+ atkDB_tryimprision,
+ atkDC_trysetgrudge,
atkDD_weightdamagecalculation,
atkDE_asistattackselect,
- atkDF_setmagiccoat,
- atkE0_setstealstatchange,
- atkE1_intimidate_string_loader,
- atkE2_switchout_abilities,
+ atkDF_trysetmagiccoat,
+ atkE0_trysetsnatch,
+ atkE1_trygetintimidatetarget,
+ atkE2_switchoutabilities,
atkE3_jumpifhasnohp,
atkE4_getsecretpowereffect,
atkE5_pickup,
- atkE6_castform_change_animation,
- atkE7_castform_data_change,
+ atkE6_docastformchangeanimation,
+ atkE7_trycastformdatachange,
atkE8_settypebasedhalvers,
atkE9_setweatherballtype,
- atkEA_recycleitem,
+ atkEA_tryrecycleitem,
atkEB_settypetoterrain,
- atkEC_pursuit_sth,
- atkED_802B4B4,
+ atkEC_pursuitrelated,
+ atkEF_snatchsetbanks,
atkEE_removelightscreenreflect,
- atkEF_pokeball_catch_calculation,
- atkF0_give_caught_mon,
- atkF1_set_caught_mon_dex_flags,
- atkF2_display_dex_info,
- atkF3_nickname_caught_poke,
+ atkEF_handleballthrow,
+ atkF0_givecaughtmon,
+ atkF1_trysetcaughtmondexflags,
+ atkF2_displaydexinfo,
+ atkF3_trygivecaughtmonnick,
atkF4_subattackerhpbydmg,
atkF5_removeattackerstatus1,
- atkF6_action_finished,
- atkF7_turn_finished,
- atkF8_trainer_slide_back
+ atkF6_finishaction,
+ atkF7_finishturn,
+ atkF8_trainerslideout
};
struct StatFractions
@@ -1186,8 +1105,8 @@ static void atk00_attackcanceler(void)
{
CancelMultiTurnMoves(gBankAttacker);
gBattleMoveFlags |= MOVESTATUS_MISSED;
- gUnknown_02024250[gBankTarget] = 0;
- gUnknown_02024258[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
gBattleCommunication[6] = 1;
gBattlescriptCurrInstr++;
}
@@ -1199,23 +1118,23 @@ static void atk00_attackcanceler(void)
static void JumpIfMoveFailed(u8 adder, u16 move)
{
- const void* BS_ptr = gBattlescriptCurrInstr + adder;
+ const u8 *BS_ptr = gBattlescriptCurrInstr + adder;
if (gBattleMoveFlags & MOVESTATUS_NOEFFECT)
{
- gUnknown_02024250[gBankTarget] = 0;
- gUnknown_02024258[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
BS_ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
}
else
{
- DestinyBondFlagUpdate();
+ TrySetDestinyBondToHappen();
if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBankTarget, 0, 0, move))
return;
}
gBattlescriptCurrInstr = BS_ptr;
}
-static void atk40_jump_if_move_affected_by_protect(void)
+static void atk40_jumpifaffectedbyprotect(void)
{
if (TARGET_PROTECT_AFFECTED)
{
@@ -1476,7 +1395,7 @@ static void atk04_critcalc(void)
gBattlescriptCurrInstr++;
}
-static void atk05_damagecalc1(void)
+static void atk05_damagecalc(void)
{
u16 sideStatus = gSideAffecting[GET_BANK_SIDE(gBankTarget)];
gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove,
@@ -1565,8 +1484,8 @@ static void atk06_typecalc(void)
{
gLastUsedAbility = gBattleMons[gBankTarget].ability;
gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
- gUnknown_02024250[gBankTarget] = 0;
- gUnknown_02024258[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
gBattleCommunication[6] = moveType;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -1601,8 +1520,8 @@ static void atk06_typecalc(void)
{
gLastUsedAbility = ABILITY_WONDER_GUARD;
gBattleMoveFlags |= MOVESTATUS_MISSED;
- gUnknown_02024250[gBankTarget] = 0;
- gUnknown_02024258[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
+ gLastHitByType[gBankTarget] = 0;
gBattleCommunication[6] = 3;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -1843,7 +1762,7 @@ static void Unused_ApplyRandomDmgMultiplier(void)
ApplyRandomDmgMultiplier();
}
-static void atk07_dmg_adjustment(void)
+static void atk07_adjustnormaldamage(void)
{
u8 holdEffect, quality;
@@ -1891,7 +1810,7 @@ static void atk07_dmg_adjustment(void)
gBattlescriptCurrInstr++;
}
-static void atk08_dmg_adjustment2(void) // The same as 0x7 except it doesn't check for false swipe move effect.
+static void atk08_adjustnormaldamage2(void) // The same as 0x7 except it doesn't check for false swipe move effect.
{
u8 holdEffect, quality;
@@ -2172,7 +2091,7 @@ static void atk0D_critmessage(void)
}
}
-static void atk0E_effectiveness_sound(void)
+static void atk0E_effectivenesssound(void)
{
if (gBattleExecBuffer)
return;
@@ -2183,11 +2102,11 @@ static void atk0E_effectiveness_sound(void)
switch (gBattleMoveFlags & (u8)(~(MOVESTATUS_MISSED)))
{
case MOVESTATUS_SUPEREFFECTIVE:
- EmitEffectivenessSound(0, SE_KOUKA_H);
+ EmitPlaySE(0, SE_KOUKA_H);
MarkBufferBankForExecution(gActiveBank);
break;
case MOVESTATUS_NOTVERYEFFECTIVE:
- EmitEffectivenessSound(0, SE_KOUKA_L);
+ EmitPlaySE(0, SE_KOUKA_L);
MarkBufferBankForExecution(gActiveBank);
break;
case MOVESTATUS_NOTAFFECTED:
@@ -2200,17 +2119,17 @@ static void atk0E_effectiveness_sound(void)
default:
if (gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE)
{
- EmitEffectivenessSound(0, SE_KOUKA_H);
+ EmitPlaySE(0, SE_KOUKA_H);
MarkBufferBankForExecution(gActiveBank);
}
else if (gBattleMoveFlags & MOVESTATUS_NOTVERYEFFECTIVE)
{
- EmitEffectivenessSound(0, SE_KOUKA_L);
+ EmitPlaySE(0, SE_KOUKA_L);
MarkBufferBankForExecution(gActiveBank);
}
else if (!(gBattleMoveFlags & (MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED)))
{
- EmitEffectivenessSound(0, SE_KOUKA_M);
+ EmitPlaySE(0, SE_KOUKA_M);
MarkBufferBankForExecution(gActiveBank);
}
break;
@@ -2319,11 +2238,11 @@ static void atk10_printstring(void)
}
}
-static void atk11_printstring_playeronly(void)
+static void atk11_printselectionstring(void)
{
gActiveBank = gBankAttacker;
- EmitPrintStringPlayerOnly(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
+ EmitPrintSelectionString(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 3;
@@ -2365,7 +2284,7 @@ static void atk13_printfromtable(void)
}
}
-static void atk14_printfromtable_playeronly(void)
+static void atk14_printselectionstringfromtable(void)
{
if (gBattleExecBuffer == 0)
{
@@ -2373,7 +2292,7 @@ static void atk14_printfromtable_playeronly(void)
ptr += gBattleCommunication[MULTISTRING_CHOOSER];
gActiveBank = gBankAttacker;
- EmitPrintStringPlayerOnly(0, *ptr);
+ EmitPrintSelectionString(0, *ptr);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 5;
@@ -3134,7 +3053,7 @@ static void atk17_seteffectsecondary(void)
SetMoveEffect(FALSE, 0);
}
-static void atk18_status_effect_clear(void)
+static void atk18_clearstatusfromeffect(void)
{
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
@@ -3148,7 +3067,7 @@ static void atk18_status_effect_clear(void)
gBattleScripting.field_16 = 0;
}
-static void atk19_faint_pokemon(void)
+static void atk19_tryfaintmon(void)
{
const u8 *BS_ptr;
@@ -3235,7 +3154,7 @@ static void atk19_faint_pokemon(void)
}
}
-static void atk1A_faint_animation(void)
+static void atk1A_dofaintanimation(void)
{
if (gBattleExecBuffer == 0)
{
@@ -3246,7 +3165,7 @@ static void atk1A_faint_animation(void)
}
}
-static void atk1B_faint_effects_clear(void)
+static void atk1B_cleareffectsonfaint(void)
{
if (gBattleExecBuffer == 0)
{
@@ -3395,10 +3314,10 @@ static void atk20_jumpifstat(void)
gBattlescriptCurrInstr += 9;
}
-static void atk21_jumpifstatus3(void)
+static void atk21_jumpifstatus3condition(void)
{
u32 flags;
- const u8* jumpPtr;
+ const u8 *jumpPtr;
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
@@ -4098,19 +4017,19 @@ static void MoveValuesCleanUp(void)
gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
}
-static void atk25_move_values_cleanup(void)
+static void atk25_movevaluescleanup(void)
{
MoveValuesCleanUp();
gBattlescriptCurrInstr += 1;
}
-static void atk26_set_multihit(void)
+static void atk26_setmultihit(void)
{
gMultiHitCounter = gBattlescriptCurrInstr[1];
gBattlescriptCurrInstr += 2;
}
-static void atk27_decrement_multihit(void)
+static void atk27_decrementmultihit(void)
{
if (--gMultiHitCounter == 0)
gBattlescriptCurrInstr += 5;
@@ -4320,7 +4239,7 @@ static void atk31_copyarray(void)
gBattlescriptCurrInstr += 10;
}
-static void atk32_copyarray_withindex(void)
+static void atk32_copyarraywithindex(void)
{
u8* dest = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
const u8* src = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
@@ -4470,7 +4389,7 @@ static void atk43_jumpifabilitypresent(void)
gBattlescriptCurrInstr += 6;
}
-static void atk44_end_selection_script(void)
+static void atk44_endselectionscript(void)
{
*(gBankAttacker + gBattleStruct->selectionScriptFinished) = TRUE;
}
@@ -4937,14 +4856,14 @@ static void atk49_moveend(void)
u8 holdEffectAtk;
u16 *choicedMoveAtk;
u8 arg1, arg2;
- u16 lastMove;
+ u16 originallyUsedMove;
effect = FALSE;
- if (gLastUsedMove == 0xFFFF)
- lastMove = 0;
+ if (gChosenMove == 0xFFFF)
+ originallyUsedMove = 0;
else
- lastMove = gLastUsedMove;
+ originallyUsedMove = gChosenMove;
arg1 = gBattlescriptCurrInstr[1];
arg2 = gBattlescriptCurrInstr[2];
@@ -5015,14 +4934,14 @@ static void atk49_moveend(void)
break;
case 6: // update choice band move
if (!(gHitMarker & HITMARKER_OBEYS) || holdEffectAtk != HOLD_EFFECT_CHOICE_BAND
- || gLastUsedMove == MOVE_STRUGGLE || (*choicedMoveAtk != 0 && *choicedMoveAtk != 0xFFFF))
+ || gChosenMove == MOVE_STRUGGLE || (*choicedMoveAtk != 0 && *choicedMoveAtk != 0xFFFF))
goto LOOP;
- if (gLastUsedMove == MOVE_BATON_PASS && !(gBattleMoveFlags & MOVESTATUS_FAILED))
+ if (gChosenMove == MOVE_BATON_PASS && !(gBattleMoveFlags & MOVESTATUS_FAILED))
{
gBattleScripting.atk49_state++;
break;
}
- *choicedMoveAtk = gLastUsedMove;
+ *choicedMoveAtk = gChosenMove;
LOOP:
{
for (i = 0; i < 4; i++)
@@ -5117,63 +5036,63 @@ static void atk49_moveend(void)
}
if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED)
{
- gUnknownMovesUsedByBanks[gBankAttacker] = gLastUsedMove;
+ gLastPrintedMoves[gBankAttacker] = gChosenMove;
}
if (!(gAbsentBankFlags & gBitTable[gBankAttacker])
&& !(gBattleStruct->field_91 & gBitTable[gBankAttacker])
- && gBattleMoves[lastMove].effect != EFFECT_BATON_PASS)
+ && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS)
{
if (gHitMarker & HITMARKER_OBEYS)
{
- gLastUsedMovesByBanks[gBankAttacker] = gLastUsedMove;
- gUnknown_02024260[gBankAttacker] = gCurrentMove;
+ gLastMoves[gBankAttacker] = gChosenMove;
+ gLastResultingMoves[gBankAttacker] = gCurrentMove;
}
else
{
- gLastUsedMovesByBanks[gBankAttacker] = 0xFFFF;
- gUnknown_02024260[gBankAttacker] = 0xFFFF;
+ gLastMoves[gBankAttacker] = 0xFFFF;
+ gLastResultingMoves[gBankAttacker] = 0xFFFF;
}
if (!(gHitMarker & HITMARKER_FAINTED(gBankTarget)))
- gUnknown_02024270[gBankTarget] = gBankAttacker;
+ gLastHitBy[gBankTarget] = gBankAttacker;
if (gHitMarker & HITMARKER_OBEYS && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT))
{
- if (gLastUsedMove == 0xFFFF)
+ if (gChosenMove == 0xFFFF)
{
- gUnknown_02024250[gBankTarget] = gLastUsedMove;
+ gLastLandedMoves[gBankTarget] = gChosenMove;
}
else
{
- gUnknown_02024250[gBankTarget] = gCurrentMove;
- GET_MOVE_TYPE(gCurrentMove, gUnknown_02024258[gBankTarget]);
+ gLastLandedMoves[gBankTarget] = gCurrentMove;
+ GET_MOVE_TYPE(gCurrentMove, gLastHitByType[gBankTarget]);
}
}
else
{
- gUnknown_02024250[gBankTarget] = 0xFFFF;
+ gLastLandedMoves[gBankTarget] = 0xFFFF;
}
}
gBattleScripting.atk49_state++;
break;
case 15: // mirror move
if (!(gAbsentBankFlags & gBitTable[gBankAttacker]) && !(gBattleStruct->field_91 & gBitTable[gBankAttacker])
- && gBattleMoves[lastMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gHitMarker & HITMARKER_OBEYS
+ && gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gHitMarker & HITMARKER_OBEYS
&& gBankAttacker != gBankTarget && !(gHitMarker & HITMARKER_FAINTED(gBankTarget))
&& !(gBattleMoveFlags & MOVESTATUS_NOEFFECT))
{
u8 target, attacker;
- *(gBattleStruct->mirrorMoves + gBankTarget * 2 + 0) = gLastUsedMove;
- *(gBattleStruct->mirrorMoves + gBankTarget * 2 + 1) = gLastUsedMove >> 8;
+ *(gBattleStruct->mirrorMoves + gBankTarget * 2 + 0) = gChosenMove;
+ *(gBattleStruct->mirrorMoves + gBankTarget * 2 + 1) = gChosenMove >> 8;
target = gBankTarget;
attacker = gBankAttacker;
- *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->mirrorMoveArrays) + 0) = gLastUsedMove;
+ *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->mirrorMoveArrays) + 0) = gChosenMove;
target = gBankTarget;
attacker = gBankAttacker;
- *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->mirrorMoveArrays) + 1) = gLastUsedMove >> 8;
+ *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->mirrorMoveArrays) + 1) = gChosenMove >> 8;
}
gBattleScripting.atk49_state++;
break;
@@ -5190,7 +5109,7 @@ static void atk49_moveend(void)
gBattleScripting.atk49_state = 0;
MoveValuesCleanUp();
BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
- gBattlescriptCurrInstr = gUnknown_082DB87D;
+ gBattlescriptCurrInstr = BattleScript_82DB87D;
return;
}
else
@@ -5225,7 +5144,7 @@ static void atk4A_typecalc2(void)
{
gLastUsedAbility = gBattleMons[gBankTarget].ability;
gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
- gUnknown_02024250[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
gBattleCommunication[6] = moveType;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -5300,7 +5219,7 @@ static void atk4A_typecalc2(void)
{
gLastUsedAbility = ABILITY_WONDER_GUARD;
gBattleMoveFlags |= MOVESTATUS_MISSED;
- gUnknown_02024250[gBankTarget] = 0;
+ gLastLandedMoves[gBankTarget] = 0;
gBattleCommunication[6] = 3;
RecordAbilityBattle(gBankTarget, gLastUsedAbility);
}
@@ -5310,7 +5229,7 @@ static void atk4A_typecalc2(void)
gBattlescriptCurrInstr++;
}
-static void atk4B_return_atk_to_ball(void)
+static void atk4B_returnatktoball(void)
{
gActiveBank = gBankAttacker;
if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank)))
@@ -5321,7 +5240,7 @@ static void atk4B_return_atk_to_ball(void)
gBattlescriptCurrInstr++;
}
-static void atk4C_get_switched_mon_data(void)
+static void atk4C_getswitchedmondata(void)
{
if (gBattleExecBuffer)
return;
@@ -5336,7 +5255,7 @@ static void atk4C_get_switched_mon_data(void)
gBattlescriptCurrInstr += 2;
}
-static void atk4D_switch_data_update(void)
+static void atk4D_switchindataupdate(void)
{
struct BattlePokemon oldData;
s32 i;
@@ -5389,7 +5308,7 @@ static void atk4D_switch_data_update(void)
gBattlescriptCurrInstr += 2;
}
-static void atk4E_switchin_anim(void)
+static void atk4E_switchinanim(void)
{
if (gBattleExecBuffer)
return;
@@ -5415,7 +5334,7 @@ static void atk4E_switchin_anim(void)
sub_81A56B4();
}
-static void atk4F_jump_if_cannot_switch(void)
+static void atk4F_jumpifcantswitch(void)
{
s32 val = 0;
s32 compareVar = 0;
@@ -5533,10 +5452,10 @@ static void atk4F_jump_if_cannot_switch(void)
{
if (GetBankSide(gActiveBank) == SIDE_OPPONENT)
{
- r7 = GetBankByIdentity(1);
+ r7 = GetBankByIdentity(IDENTITY_OPPONENT_MON1);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- compareVar = GetBankByIdentity(3);
+ compareVar = GetBankByIdentity(IDENTITY_OPPONENT_MON2);
else
compareVar = r7;
@@ -5544,10 +5463,10 @@ static void atk4F_jump_if_cannot_switch(void)
}
else
{
- r7 = GetBankByIdentity(0);
+ r7 = GetBankByIdentity(IDENTITY_PLAYER_MON1);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- compareVar = GetBankByIdentity(2);
+ compareVar = GetBankByIdentity(IDENTITY_PLAYER_MON2);
else
compareVar = r7;
@@ -5869,7 +5788,7 @@ static void atk50_openpartyscreen(void)
}
}
-static void atk51_switch_handle_order(void)
+static void atk51_switchhandleorder(void)
{
s32 i;
if (gBattleExecBuffer)
@@ -5936,7 +5855,7 @@ static void atk51_switch_handle_order(void)
gBattlescriptCurrInstr += 3;
}
-static void atk52_switch_in_effects(void)
+static void atk52_switchineffects(void)
{
s32 i;
@@ -5967,12 +5886,12 @@ static void atk52_switch_in_effects(void)
gBattleScripting.bank = gActiveBank;
BattleScriptPushCursor();
- if (gBattlescriptCurrInstr[1] == 0)
- gBattlescriptCurrInstr = gUnknown_082DAE90;
- else if (gBattlescriptCurrInstr[1] == 1)
- gBattlescriptCurrInstr = gUnknown_082DAE59;
+ if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
+ gBattlescriptCurrInstr = BattleScript_SpikesOnTarget;
+ else if (gBattlescriptCurrInstr[1] == BS_GET_ATTACKER)
+ gBattlescriptCurrInstr = BattleScript_SpikesOnAttacker;
else
- gBattlescriptCurrInstr = gUnknown_082DAEC7;
+ gBattlescriptCurrInstr = BattleScript_SpikesOngBank1;
}
else
{
@@ -6017,7 +5936,7 @@ static void atk52_switch_in_effects(void)
}
}
-static void atk53_trainer_slide(void)
+static void atk53_trainerslidein(void)
{
gActiveBank = GetBankByIdentity(gBattlescriptCurrInstr[1]);
EmitTrainerSlide(0);
@@ -6026,16 +5945,16 @@ static void atk53_trainer_slide(void)
gBattlescriptCurrInstr += 2;
}
-static void atk54_effectiveness_sound(void)
+static void atk54_playse(void)
{
gActiveBank = gBankAttacker;
- EmitEffectivenessSound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
+ EmitPlaySE(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 3;
}
-static void atk55_play_fanfare(void)
+static void atk55_fanfare(void)
{
gActiveBank = gBankAttacker;
EmitPlayFanfareOrBGM(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1), FALSE);
@@ -6044,7 +5963,7 @@ static void atk55_play_fanfare(void)
gBattlescriptCurrInstr += 3;
}
-static void atk56_fainting_cry(void)
+static void atk56_playfaintcry(void)
{
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
EmitFaintingCry(0);
@@ -6055,14 +5974,14 @@ static void atk56_fainting_cry(void)
static void atk57(void)
{
- gActiveBank = GetBankByIdentity(0);
+ gActiveBank = GetBankByIdentity(IDENTITY_PLAYER_MON1);
EmitCmd55(0, gBattleOutcome);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 1;
}
-static void atk58_return_to_ball(void)
+static void atk58_returntoball(void)
{
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
EmitReturnMonToBall(0, 1);
@@ -6071,10 +5990,10 @@ static void atk58_return_to_ball(void)
gBattlescriptCurrInstr += 2;
}
-static void atk59_learnmove_inbattle(void)
+static void atk59_handlelearnnewmove(void)
{
- const u8* jumpPtr1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8* jumpPtr2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
+ const u8 *jumpPtr1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterId], gBattlescriptCurrInstr[9]);
while (ret == 0xFFFE)
@@ -6090,7 +6009,7 @@ static void atk59_learnmove_inbattle(void)
}
else
{
- gActiveBank = GetBankByIdentity(0);
+ gActiveBank = GetBankByIdentity(IDENTITY_PLAYER_MON1);
if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterId
&& !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
@@ -6099,7 +6018,7 @@ static void atk59_learnmove_inbattle(void)
}
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- gActiveBank = GetBankByIdentity(2);
+ gActiveBank = GetBankByIdentity(IDENTITY_PLAYER_MON2);
if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterId
&& !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED))
{
@@ -6367,7 +6286,7 @@ static void atk5D_getmoneyreward(void)
gBattlescriptCurrInstr++;
}
-static void atk5E_8025A70(void)
+static void atk5E(void)
{
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
@@ -6394,7 +6313,7 @@ static void atk5E_8025A70(void)
}
}
-static void atk5F_8025B24(void)
+static void atk5F(void)
{
gActiveBank = gBankAttacker;
gBankAttacker = gBankTarget;
@@ -6408,7 +6327,7 @@ static void atk5F_8025B24(void)
gBattlescriptCurrInstr++;
}
-static void atk60_increment_gamestat(void)
+static void atk60_incrementgamestat(void)
{
if (GetBankSide(gBankAttacker) == SIDE_PLAYER)
IncrementGameStat(gBattlescriptCurrInstr[1]);
@@ -6416,7 +6335,7 @@ static void atk60_increment_gamestat(void)
gBattlescriptCurrInstr += 2;
}
-static void atk61_draw_party_status_summary(void)
+static void atk61_drawpartystatussummary(void)
{
s32 i;
struct Pokemon* party;
@@ -6453,7 +6372,7 @@ static void atk61_draw_party_status_summary(void)
gBattlescriptCurrInstr += 2;
}
-static void atk62_08025C6C(void)
+static void atk62(void)
{
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
EmitCmd49(0);
@@ -6467,7 +6386,7 @@ static void atk63_jumptorandomattack(void)
if (gBattlescriptCurrInstr[1] != 0)
gCurrentMove = gRandomMove;
else
- gLastUsedMove = gCurrentMove = gRandomMove;
+ gChosenMove = gCurrentMove = gRandomMove;
gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
}
@@ -6569,7 +6488,7 @@ static void atk67_yesnobox(void)
}
}
-static void atk68_cancel_everyones_actions(void)
+static void atk68_cancelallactions(void)
{
s32 i;
@@ -6579,7 +6498,7 @@ static void atk68_cancel_everyones_actions(void)
gBattlescriptCurrInstr++;
}
-static void atk69_dmg_adjustment3(void) // The same as 0x7, except there's no random damage multiplier.
+static void atk69_adjustsetdamage(void) // The same as 0x7, except there's no random damage multiplier.
{
u8 holdEffect, quality;
@@ -6648,7 +6567,7 @@ static void atk6B_atknameinbuff1(void)
gBattlescriptCurrInstr++;
}
-static void atk6C_draw_lvlupbox(void)
+static void atk6C_drawlvlupbox(void)
{
if (gBattleScripting.atk6C_state == 0)
{
@@ -6922,19 +6841,19 @@ static bool32 IsMonGettingExpSentOut(void)
return FALSE;
}
-static void atk6D_reset_sentpokes_value(void)
+static void atk6D_resetsentmonsvalue(void)
{
ResetSentPokesToOpponentValue();
gBattlescriptCurrInstr++;
}
-static void atk6E_set_atk_to_player0(void)
+static void atk6E_setatktoplayer0(void)
{
- gBankAttacker = GetBankByIdentity(0);
+ gBankAttacker = GetBankByIdentity(IDENTITY_PLAYER_MON1);
gBattlescriptCurrInstr++;
}
-static void atk6F_set_visible(void)
+static void atk6F_makevisible(void)
{
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
EmitSpriteInvisibility(0, FALSE);
@@ -6943,7 +6862,7 @@ static void atk6F_set_visible(void)
gBattlescriptCurrInstr += 2;
}
-static void atk70_record_last_used_ability(void)
+static void atk70_recordlastability(void)
{
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
RecordAbilityBattle(gActiveBank, gLastUsedAbility);
@@ -6955,13 +6874,13 @@ void BufferMoveToLearnIntoBattleTextBuff2(void)
PREPARE_MOVE_BUFFER(gBattleTextBuff2, gMoveToLearn);
}
-static void atk71_buffer_move_to_learn(void)
+static void atk71_buffermovetolearn(void)
{
BufferMoveToLearnIntoBattleTextBuff2();
gBattlescriptCurrInstr++;
}
-static void atk72_jump_if_run_attempt_success(void)
+static void atk72_jumpifplayerran(void)
{
if (TryRunFromBattle(gBank1))
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
@@ -6969,7 +6888,7 @@ static void atk72_jump_if_run_attempt_success(void)
gBattlescriptCurrInstr += 5;
}
-static void atk73_hp_thresholds(void)
+static void atk73_hpthresholds(void)
{
u8 opposingBank;
s32 result;
@@ -6996,7 +6915,7 @@ static void atk73_hp_thresholds(void)
gBattlescriptCurrInstr += 2;
}
-static void atk74_hp_thresholds2(void)
+static void atk74_hpthresholds2(void)
{
u8 opposingBank;
s32 result;
@@ -7022,7 +6941,7 @@ static void atk74_hp_thresholds2(void)
gBattlescriptCurrInstr += 2;
}
-static void atk75_item_effect_on_opponent(void)
+static void atk75_useitemonopponent(void)
{
gBankInMenu = gBankAttacker;
ExecuteTableBasedItemEffect(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1);
@@ -7044,13 +6963,13 @@ static void atk76_various(void)
break;
case VARIOUS_SET_MAGIC_COAT_TARGET:
gBankAttacker = gBankTarget;
- side = GetBankSide(gBankAttacker) ^ 1;
+ side = GetBankSide(gBankAttacker) ^ BIT_SIDE;
if (gSideTimers[side].followmeTimer != 0 && gBattleMons[gSideTimers[side].followmeTarget].hp != 0)
gBankTarget = gSideTimers[side].followmeTarget;
else
gBankTarget = gActiveBank;
break;
- case VARIOUS_CAN_RUN_FROM_BATTLE:
+ case VARIOUS_IS_RUNNING_IMPOSSIBLE:
gBattleCommunication[0] = IsRunningFromBattleImpossible();
break;
case VARIOUS_GET_MOVE_TARGET:
@@ -7209,10 +7128,10 @@ static void atk76_various(void)
gBattlescriptCurrInstr += 3;
}
-static void atk77_set_protect_like(void) // protect and endure
+static void atk77_setprotectlike(void) // protect and endure
{
bool8 notLastTurn = TRUE;
- u16 lastMove = gUnknown_02024260[gBankAttacker];
+ u16 lastMove = gLastResultingMoves[gBankAttacker];
if (lastMove != MOVE_PROTECT && lastMove != MOVE_DETECT && lastMove != MOVE_ENDURE)
gDisableStructs[gBankAttacker].protectUses = 0;
@@ -7292,9 +7211,9 @@ static void atk79_setatkhptozero(void)
gBattlescriptCurrInstr++;
}
-static void atk7A_jumpwhiletargetvalid(void) // Used by intimidate to loop through all targets.
+static void atk7A_jumpifnexttargetvalid(void)
{
- const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
@@ -7312,10 +7231,12 @@ static void atk7A_jumpwhiletargetvalid(void) // Used by intimidate to loop throu
gBattlescriptCurrInstr = jumpPtr;
}
else
+ {
gBattlescriptCurrInstr += 5;
+ }
}
-static void atk7B_healhalfHP_if_possible(void)
+static void atk7B_tryhealhalfhealth(void)
{
const u8* failPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
@@ -7383,7 +7304,7 @@ static void atk7C_trymirrormove(void)
}
}
-static void atk7D_set_rain(void)
+static void atk7D_setrain(void)
{
if (gBattleWeather & WEATHER_RAIN_ANY)
{
@@ -7464,9 +7385,9 @@ static void atk80_manipulatedamage(void)
gBattlescriptCurrInstr += 2;
}
-static void atk81_setrest(void)
+static void atk81_trysetrest(void)
{
- const u8* failJump = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *failJump = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
gActiveBank = gBankTarget = gBankAttacker;
gBattleMoveDamage = gBattleMons[gBankTarget].maxHP * (-1);
@@ -7530,9 +7451,9 @@ bool8 UproarWakeUpCheck(u8 bank)
return TRUE;
}
-static void atk84_jump_if_cant_sleep(void)
+static void atk84_jumpifcantmakeasleep(void)
{
- const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
if (UproarWakeUpCheck(gBankTarget))
{
@@ -7636,9 +7557,9 @@ static void atk88_negativedamage(void)
gBattlescriptCurrInstr++;
}
-static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8* BS_ptr)
+static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
{
- bool8 certain = 0;
+ bool8 certain = FALSE;
bool8 notProtectAffected = FALSE;
u32 index;
@@ -7746,15 +7667,15 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8* BS_ptr)
if (statValue == -2)
{
gBattleTextBuff2[1] = B_BUFF_STRING;
- gBattleTextBuff2[2] = 0xD3; // harshly
- gBattleTextBuff2[3] = 0xD3 >> 8;
+ gBattleTextBuff2[2] = STRINGID_STATHARSHLY;
+ gBattleTextBuff2[3] = STRINGID_STATHARSHLY >> 8;
index = 4;
}
gBattleTextBuff2[index] = B_BUFF_STRING;
index++;
- gBattleTextBuff2[index] = 0xD4; // fell
+ gBattleTextBuff2[index] = STRINGID_STATFELL;
index++;
- gBattleTextBuff2[index] = 0xD4 >> 8;
+ gBattleTextBuff2[index] = STRINGID_STATFELL >> 8;
index++;
gBattleTextBuff2[index] = B_BUFF_EOS;
@@ -7773,15 +7694,15 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8* BS_ptr)
if (statValue == 2)
{
gBattleTextBuff2[1] = B_BUFF_STRING;
- gBattleTextBuff2[2] = 0xD1; // sharply
- gBattleTextBuff2[3] = 0xD1 >> 8;
+ gBattleTextBuff2[2] = STRINGID_STATSHARPLY;
+ gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8;
index = 4;
}
gBattleTextBuff2[index] = B_BUFF_STRING;
index++;
- gBattleTextBuff2[index] = 0xD2; // rose
+ gBattleTextBuff2[index] = STRINGID_STATROSE;
index++;
- gBattleTextBuff2[index] = 0xD2 >> 8;
+ gBattleTextBuff2[index] = STRINGID_STATROSE >> 8;
index++;
gBattleTextBuff2[index] = B_BUFF_EOS;
@@ -7844,7 +7765,7 @@ static void atk8C_confuseifrepeatingattackends(void)
gBattlescriptCurrInstr++;
}
-static void atk8D_setmultihit_counter(void)
+static void atk8D_setmultihitcounter(void)
{
if (gBattlescriptCurrInstr[1])
{
@@ -7862,7 +7783,7 @@ static void atk8D_setmultihit_counter(void)
gBattlescriptCurrInstr += 2;
}
-static void atk8E_init_multihit_string(void)
+static void atk8E_initmultihitstring(void)
{
PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0)
@@ -7886,7 +7807,7 @@ static bool8 sub_8051064(void)
*(gBattleStruct->field_58 + gBankTarget) = gBattlePartyID[gBankTarget];
}
- gBattlescriptCurrInstr = gUnknown_082DADD8;
+ gBattlescriptCurrInstr = BattleScript_82DADD8;
return TRUE;
}
@@ -8051,7 +7972,7 @@ static void atk8F_forcerandomswitch(void)
}
}
-static void atk90_conversion_type_change(void) // randomly changes user's type to one of its moves' type
+static void atk90_tryconversiontypechange(void) // randomly changes user's type to one of its moves' type
{
u8 validMoves = 0;
u8 moveChecked;
@@ -8155,7 +8076,7 @@ static void atk92_setlightscreen(void)
gBattlescriptCurrInstr++;
}
-static void atk93_ko_move(void)
+static void atk93_tryKO(void)
{
u8 holdEffect, param;
@@ -8319,7 +8240,7 @@ static void atk96_weatherdamage(void)
gBattlescriptCurrInstr++;
}
-static void atk97_try_infatuation(void)
+static void atk97_tryinfatuating(void)
{
struct Pokemon *monAttacker, *monTarget;
u16 speciesAttacker, speciesTarget;
@@ -8364,7 +8285,7 @@ static void atk97_try_infatuation(void)
}
}
-static void atk98_status_icon_update(void)
+static void atk98_updatestatusicon(void)
{
if (gBattleExecBuffer)
return;
@@ -8414,7 +8335,7 @@ static void atk99_setmist(void)
gBattlescriptCurrInstr++;
}
-static void atk9A_set_focusenergy(void)
+static void atk9A_setfocusenergy(void)
{
if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY)
{
@@ -8431,7 +8352,7 @@ static void atk9A_set_focusenergy(void)
static void atk9B_transformdataexecution(void)
{
- gLastUsedMove = 0xFFFF;
+ gChosenMove = 0xFFFF;
gBattlescriptCurrInstr++;
if (gBattleMons[gBankTarget].status2 & STATUS2_TRANSFORMED
|| gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE)
@@ -8473,7 +8394,7 @@ static void atk9B_transformdataexecution(void)
}
}
-static void atk9C_set_substitute(void)
+static void atk9C_setsubstitute(void)
{
u32 hp = gBattleMons[gBankAttacker].maxHP / 4;
if (gBattleMons[gBankAttacker].maxHP / 4 == 0)
@@ -8511,12 +8432,12 @@ static bool8 IsMoveUncopyableByMimic(u16 move)
static void atk9D_mimicattackcopy(void)
{
- gLastUsedMove = 0xFFFF;
+ gChosenMove = 0xFFFF;
- if (IsMoveUncopyableByMimic(gLastUsedMovesByBanks[gBankTarget])
+ if (IsMoveUncopyableByMimic(gLastMoves[gBankTarget])
|| gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED
- || gLastUsedMovesByBanks[gBankTarget] == 0
- || gLastUsedMovesByBanks[gBankTarget] == 0xFFFF)
+ || gLastMoves[gBankTarget] == 0
+ || gLastMoves[gBankTarget] == 0xFFFF)
{
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
}
@@ -8526,20 +8447,20 @@ static void atk9D_mimicattackcopy(void)
for (i = 0; i < 4; i++)
{
- if (gBattleMons[gBankAttacker].moves[i] == gLastUsedMovesByBanks[gBankTarget])
+ if (gBattleMons[gBankAttacker].moves[i] == gLastMoves[gBankTarget])
break;
}
if (i == 4)
{
- gBattleMons[gBankAttacker].moves[gCurrMovePos] = gLastUsedMovesByBanks[gBankTarget];
- if (gBattleMoves[gLastUsedMovesByBanks[gBankTarget]].pp < 5)
- gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gLastUsedMovesByBanks[gBankTarget]].pp;
+ gBattleMons[gBankAttacker].moves[gCurrMovePos] = gLastMoves[gBankTarget];
+ if (gBattleMoves[gLastMoves[gBankTarget]].pp < 5)
+ gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gLastMoves[gBankTarget]].pp;
else
gBattleMons[gBankAttacker].pp[gCurrMovePos] = 5;
- PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastUsedMovesByBanks[gBankTarget])
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBankTarget])
gDisableStructs[gBankAttacker].unk18_b |= gBitTable[gCurrMovePos];
gBattlescriptCurrInstr += 5;
@@ -8654,7 +8575,7 @@ static void atkA3_disablelastusedattack(void)
for (i = 0; i < 4; i++)
{
- if (gBattleMons[gBankTarget].moves[i] == gLastUsedMovesByBanks[gBankTarget])
+ if (gBattleMons[gBankTarget].moves[i] == gLastMoves[gBankTarget])
break;
}
if (gDisableStructs[gBankTarget].disabledMove == 0
@@ -8673,19 +8594,19 @@ static void atkA3_disablelastusedattack(void)
}
}
-static void atkA4_setencore(void)
+static void atkA4_trysetencore(void)
{
s32 i;
for (i = 0; i < 4; i++)
{
- if (gBattleMons[gBankTarget].moves[i] == gLastUsedMovesByBanks[gBankTarget])
+ if (gBattleMons[gBankTarget].moves[i] == gLastMoves[gBankTarget])
break;
}
- if (gLastUsedMovesByBanks[gBankTarget] == MOVE_STRUGGLE
- || gLastUsedMovesByBanks[gBankTarget] == MOVE_ENCORE
- || gLastUsedMovesByBanks[gBankTarget] == MOVE_MIRROR_MOVE)
+ if (gLastMoves[gBankTarget] == MOVE_STRUGGLE
+ || gLastMoves[gBankTarget] == MOVE_ENCORE
+ || gLastMoves[gBankTarget] == MOVE_MIRROR_MOVE)
{
i = 4;
}
@@ -8731,13 +8652,13 @@ static void atkA5_painsplitdmgcalc(void)
static void atkA6_settypetorandomresistance(void) // conversion 2
{
- if (gUnknown_02024250[gBankAttacker] == 0
- || gUnknown_02024250[gBankAttacker] == 0xFFFF)
+ if (gLastLandedMoves[gBankAttacker] == 0
+ || gLastLandedMoves[gBankAttacker] == 0xFFFF)
{
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
}
- else if (IsTwoTurnsMove(gUnknown_02024250[gBankAttacker])
- && gBattleMons[gUnknown_02024270[gBankAttacker]].status2 & STATUS2_MULTIPLETURNS)
+ else if (IsTwoTurnsMove(gLastLandedMoves[gBankAttacker])
+ && gBattleMons[gLastHitBy[gBankAttacker]].status2 & STATUS2_MULTIPLETURNS)
{
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
}
@@ -8751,7 +8672,7 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
i *= 3;
- if (TYPE_EFFECT_ATK_TYPE(i) == gUnknown_02024258[gBankAttacker]
+ if (TYPE_EFFECT_ATK_TYPE(i) == gLastHitByType[gBankAttacker]
&& TYPE_EFFECT_MULTIPLIER(i) <= TYPE_MUL_NOT_EFFECTIVE
&& gBattleMons[gBankAttacker].type1 != TYPE_EFFECT_DEF_TYPE(i)
&& gBattleMons[gBankAttacker].type2 != TYPE_EFFECT_DEF_TYPE(i))
@@ -8774,7 +8695,7 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
case TYPE_FORESIGHT:
break;
default:
- if (TYPE_EFFECT_ATK_TYPE(j) == gUnknown_02024258[gBankAttacker]
+ if (TYPE_EFFECT_ATK_TYPE(j) == gLastHitByType[gBankAttacker]
&& TYPE_EFFECT_MULTIPLIER(j) <= 5
&& gBattleMons[gBankAttacker].type1 != TYPE_EFFECT_DEF_TYPE(i)
&& gBattleMons[gBankAttacker].type2 != TYPE_EFFECT_DEF_TYPE(i))
@@ -8805,13 +8726,13 @@ static void atkA7_setalwayshitflag(void)
static void atkA8_copymovepermanently(void) // sketch
{
- gLastUsedMove = 0xFFFF;
+ gChosenMove = 0xFFFF;
if (!(gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED)
- && gUnknownMovesUsedByBanks[gBankTarget] != MOVE_STRUGGLE
- && gUnknownMovesUsedByBanks[gBankTarget] != 0
- && gUnknownMovesUsedByBanks[gBankTarget] != 0xFFFF
- && gUnknownMovesUsedByBanks[gBankTarget] != MOVE_SKETCH)
+ && gLastPrintedMoves[gBankTarget] != MOVE_STRUGGLE
+ && gLastPrintedMoves[gBankTarget] != 0
+ && gLastPrintedMoves[gBankTarget] != 0xFFFF
+ && gLastPrintedMoves[gBankTarget] != MOVE_SKETCH)
{
s32 i;
@@ -8819,7 +8740,7 @@ static void atkA8_copymovepermanently(void) // sketch
{
if (gBattleMons[gBankAttacker].moves[i] == MOVE_SKETCH)
continue;
- if (gBattleMons[gBankAttacker].moves[i] == gUnknownMovesUsedByBanks[gBankTarget])
+ if (gBattleMons[gBankAttacker].moves[i] == gLastPrintedMoves[gBankTarget])
break;
}
@@ -8831,8 +8752,8 @@ static void atkA8_copymovepermanently(void) // sketch
{
struct MovePpInfo movePpData;
- gBattleMons[gBankAttacker].moves[gCurrMovePos] = gUnknownMovesUsedByBanks[gBankTarget];
- gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gUnknownMovesUsedByBanks[gBankTarget]].pp;
+ gBattleMons[gBankAttacker].moves[gCurrMovePos] = gLastPrintedMoves[gBankTarget];
+ gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gLastPrintedMoves[gBankTarget]].pp;
gActiveBank = gBankAttacker;
for (i = 0; i < 4; i++)
@@ -8845,7 +8766,7 @@ static void atkA8_copymovepermanently(void) // sketch
EmitSetMonData(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct MovePpInfo), &movePpData);
MarkBufferBankForExecution(gActiveBank);
- PREPARE_MOVE_BUFFER(gBattleTextBuff1, gUnknownMovesUsedByBanks[gBankTarget])
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastPrintedMoves[gBankTarget])
gBattlescriptCurrInstr += 5;
}
@@ -8862,7 +8783,7 @@ static bool8 IsTwoTurnsMove(u16 move)
|| gBattleMoves[move].effect == EFFECT_RAZOR_WIND
|| gBattleMoves[move].effect == EFFECT_SKY_ATTACK
|| gBattleMoves[move].effect == EFFECT_SOLARBEAM
- || gBattleMoves[move].effect == EFFECT_FLY
+ || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE
|| gBattleMoves[move].effect == EFFECT_BIDE)
return TRUE;
else
@@ -8889,7 +8810,7 @@ static u8 AttacksThisTurn(u8 bank, u16 move) // Note: returns 1 if it's a chargi
|| gBattleMoves[move].effect == EFFECT_RAZOR_WIND
|| gBattleMoves[move].effect == EFFECT_SKY_ATTACK
|| gBattleMoves[move].effect == EFFECT_SOLARBEAM
- || gBattleMoves[move].effect == EFFECT_FLY
+ || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE
|| gBattleMoves[move].effect == EFFECT_BIDE)
{
if ((gHitMarker & HITMARKER_x8000000))
@@ -8898,7 +8819,7 @@ static u8 AttacksThisTurn(u8 bank, u16 move) // Note: returns 1 if it's a chargi
return 2;
}
-static void atkA9_sleeptalk_choose_move(void)
+static void atkA9_trychoosesleeptalkmove(void)
{
s32 i;
u8 unusableMovesBits = 0;
@@ -8937,13 +8858,13 @@ static void atkA9_sleeptalk_choose_move(void)
}
}
-static void atkAA_set_destinybond(void)
+static void atkAA_setdestinybond(void)
{
gBattleMons[gBankAttacker].status2 |= STATUS2_DESTINY_BOND;
gBattlescriptCurrInstr++;
}
-static void DestinyBondFlagUpdate(void)
+static void TrySetDestinyBondToHappen(void)
{
u8 sideAttacker = GetBankSide(gBankAttacker);
u8 sideTarget = GetBankSide(gBankTarget);
@@ -8955,9 +8876,9 @@ static void DestinyBondFlagUpdate(void)
}
}
-static void atkAB_DestinyBondFlagUpdate(void)
+static void atkAB_trysetdestinybondtohappen(void)
{
- DestinyBondFlagUpdate();
+ TrySetDestinyBondToHappen();
gBattlescriptCurrInstr++;
}
@@ -8976,16 +8897,16 @@ static void atkAC_remaininghptopower(void)
gBattlescriptCurrInstr++;
}
-static void atkAD_spite_ppreduce(void)
+static void atkAD_tryspiteppreduce(void)
{
- if (gLastUsedMovesByBanks[gBankTarget] != 0
- && gLastUsedMovesByBanks[gBankTarget] != 0xFFFF)
+ if (gLastMoves[gBankTarget] != 0
+ && gLastMoves[gBankTarget] != 0xFFFF)
{
s32 i;
for (i = 0; i < 4; i++)
{
- if (gLastUsedMovesByBanks[gBankTarget] == gBattleMons[gBankTarget].moves[i])
+ if (gLastMoves[gBankTarget] == gBattleMons[gBankTarget].moves[i])
break;
}
@@ -8995,7 +8916,7 @@ static void atkAD_spite_ppreduce(void)
if (gBattleMons[gBankTarget].pp[i] < ppToDeduct)
ppToDeduct = gBattleMons[gBankTarget].pp[i];
- PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastUsedMovesByBanks[gBankTarget])
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBankTarget])
ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, 0, 1);
@@ -9027,7 +8948,7 @@ static void atkAD_spite_ppreduce(void)
}
}
-static void atkAE_heal_party_status(void)
+static void atkAE_healpartystatus(void)
{
u32 zero = 0;
u8 toHeal = 0;
@@ -9103,7 +9024,7 @@ static void atkAE_heal_party_status(void)
gBattleMons[gBankAttacker].status1 = 0;
gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE);
- gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2);
+ gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ BIT_MON);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
&& !(gAbsentBankFlags & gBitTable[gActiveBank]))
{
@@ -9140,7 +9061,7 @@ static void atkAF_cursetarget(void)
}
}
-static void atkB0_set_spikes(void)
+static void atkB0_trysetspikes(void)
{
u8 targetSide = GetBankSide(gBankAttacker) ^ BIT_SIDE;
@@ -9157,13 +9078,13 @@ static void atkB0_set_spikes(void)
}
}
-static void atkB1_set_foresight(void)
+static void atkB1_setforesight(void)
{
gBattleMons[gBankTarget].status2 |= STATUS2_FORESIGHT;
gBattlescriptCurrInstr++;
}
-static void atkB2_setperishsong(void)
+static void atkB2_trysetperishsong(void)
{
s32 i;
s32 notAffectedCount = 0;
@@ -9196,7 +9117,7 @@ static void atkB3_rolloutdamagecalculation(void)
if (gBattleMoveFlags & MOVESTATUS_NOEFFECT)
{
CancelMultiTurnMoves(gBankAttacker);
- gBattlescriptCurrInstr = BattleScript_PauseEffectivenessSoundResultMsgEndMove;
+ gBattlescriptCurrInstr = BattleScript_MoveMissedPause;
}
else
{
@@ -9240,7 +9161,7 @@ static void atkB5_furycuttercalc(void)
if (gBattleMoveFlags & MOVESTATUS_NOEFFECT)
{
gDisableStructs[gBankAttacker].furyCutterCounter = 0;
- gBattlescriptCurrInstr = BattleScript_PauseEffectivenessSoundResultMsgEndMove;
+ gBattlescriptCurrInstr = BattleScript_MoveMissedPause;
}
else
{
@@ -9286,7 +9207,7 @@ static void atkB7_presentdamagecalculation(void)
gBattleMoveDamage *= -1;
}
if (rand < 204)
- gBattlescriptCurrInstr = BattleScript_PresentDamageTarget;
+ gBattlescriptCurrInstr = BattleScript_HitFromCritCalc;
else if (gBattleMons[gBankTarget].maxHP == gBattleMons[gBankTarget].hp)
gBattlescriptCurrInstr = BattleScript_AlreadyAtFullHp;
else
@@ -9296,7 +9217,7 @@ static void atkB7_presentdamagecalculation(void)
}
}
-static void atkB8_set_safeguard(void)
+static void atkB8_setsafeguard(void)
{
if (gSideAffecting[GET_BANK_SIDE(gBankAttacker)] & SIDE_STATUS_SAFEGUARD)
{
@@ -9501,7 +9422,7 @@ static void atkBE_rapidspinfree(void)
}
}
-static void atkBF_set_defense_curl(void)
+static void atkBF_setdefensecurlbit(void)
{
gBattleMons[gBankAttacker].status2 |= STATUS2_DEFENSE_CURL;
gBattlescriptCurrInstr++;
@@ -9533,7 +9454,7 @@ static void atkC0_recoverbasedonsunlight(void)
}
#ifdef NONMATCHING
-static void atkC1_hidden_power_calc(void)
+static void atkC1_hiddenpowercalc(void)
{
u32 powerBits = 0;
u32 typeBits = 0;
@@ -9564,7 +9485,7 @@ static void atkC1_hidden_power_calc(void)
#else
__attribute__((naked))
-static void atkC1_hidden_power_calc(void)
+static void atkC1_hiddenpowercalc(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -9707,7 +9628,7 @@ _080544F0:\n\
}
#endif // NONMATCHING
-static void atkC2_selectnexttarget(void)
+static void atkC2_selectfirstvalidtarget(void)
{
for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++)
{
@@ -9719,7 +9640,7 @@ static void atkC2_selectnexttarget(void)
gBattlescriptCurrInstr++;
}
-static void atkC3_setfutureattack(void)
+static void atkC3_trysetfutureattack(void)
{
if (gWishFutureKnock.futureSightCounter[gBankTarget] != 0)
{
@@ -9747,9 +9668,9 @@ static void atkC3_setfutureattack(void)
}
}
-static void atkC4_beat_up(void)
+static void atkC4_trydobeatup(void)
{
- struct Pokemon* party;
+ struct Pokemon *party;
if (GetBankSide(gBankAttacker) == SIDE_PLAYER)
party = gPlayerParty;
@@ -9950,7 +9871,7 @@ static void atkD0_settaunt(void)
}
}
-static void atkD1_set_helpinghand(void)
+static void atkD1_trysethelpinghand(void)
{
gBankTarget = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ BIT_MON);
@@ -9968,7 +9889,7 @@ static void atkD1_set_helpinghand(void)
}
}
-static void atkD2_swap_items(void) // trick
+static void atkD2_tryswapitems(void) // trick
{
// opponent can't swap items with player in regular battles
if (gBattleTypeFlags & BATTLE_TYPE_x4000000
@@ -10055,7 +9976,7 @@ static void atkD2_swap_items(void) // trick
}
}
-static void atkD3_copy_ability(void) // role play
+static void atkD3_trycopyability(void) // role play
{
if (gBattleMons[gBankTarget].ability != 0
&& gBattleMons[gBankTarget].ability != ABILITY_WONDER_GUARD)
@@ -10070,7 +9991,7 @@ static void atkD3_copy_ability(void) // role play
}
}
-static void atkD4_wish_effect(void)
+static void atkD4_trywish(void)
{
switch (gBattlescriptCurrInstr[1])
{
@@ -10103,7 +10024,7 @@ static void atkD4_wish_effect(void)
}
}
-static void atkD5_setroots(void) // ingrain
+static void atkD5_trysetroots(void) // ingrain
{
if (gStatuses3[gBankAttacker] & STATUS3_ROOTED)
{
@@ -10168,7 +10089,7 @@ static void atkD9_scaledamagebyhealthratio(void)
gBattlescriptCurrInstr++;
}
-static void atkDA_abilityswap(void) // skill swap
+static void atkDA_tryswapabilities(void) // skill swap
{
if ((gBattleMons[gBankAttacker].ability == 0
&& gBattleMons[gBankTarget].ability == 0)
@@ -10188,7 +10109,7 @@ static void atkDA_abilityswap(void) // skill swap
}
}
-static void atkDB_imprisoneffect(void)
+static void atkDB_tryimprision(void)
{
if ((gStatuses3[gBankAttacker] & STATUS3_IMPRISONED_OTHERS))
{
@@ -10230,7 +10151,7 @@ static void atkDB_imprisoneffect(void)
}
}
-static void atkDC_setgrudge(void)
+static void atkDC_trysetgrudge(void)
{
if (gStatuses3[gBankAttacker] & STATUS3_GRUDGE)
{
@@ -10313,7 +10234,7 @@ static void atkDE_asistattackselect(void)
}
}
-static void atkDF_setmagiccoat(void)
+static void atkDF_trysetmagiccoat(void)
{
gBankTarget = gBankAttacker;
gSpecialStatuses[gBankAttacker].flag20 = 1;
@@ -10328,7 +10249,7 @@ static void atkDF_setmagiccoat(void)
}
}
-static void atkE0_setstealstatchange(void) // snatch
+static void atkE0_trysetsnatch(void) // snatch
{
gSpecialStatuses[gBankAttacker].flag20 = 1;
if (gCurrentTurnActionNumber == gNoOfAllBanks - 1) // moves last turn
@@ -10342,7 +10263,7 @@ static void atkE0_setstealstatchange(void) // snatch
}
}
-static void atkE1_intimidate_string_loader(void)
+static void atkE1_trygetintimidatetarget(void)
{
u8 side;
@@ -10365,7 +10286,7 @@ static void atkE1_intimidate_string_loader(void)
gBattlescriptCurrInstr += 5;
}
-static void atkE2_switchout_abilities(void)
+static void atkE2_switchoutabilities(void)
{
gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
@@ -10502,7 +10423,7 @@ static void atkE5_pickup(void)
gBattlescriptCurrInstr++;
}
-static void atkE6_castform_change_animation(void)
+static void atkE6_docastformchangeanimation(void)
{
gActiveBank = gBattleScripting.bank;
@@ -10515,7 +10436,7 @@ static void atkE6_castform_change_animation(void)
gBattlescriptCurrInstr++;
}
-static void atkE7_castform_data_change(void)
+static void atkE7_trycastformdatachange(void)
{
u8 form;
@@ -10578,7 +10499,7 @@ static void atkE9_setweatherballtype(void)
gBattlescriptCurrInstr++;
}
-static void atkEA_recycleitem(void)
+static void atkEA_tryrecycleitem(void)
{
u16 *usedHeldItem;
@@ -10619,7 +10540,7 @@ static void atkEB_settypetoterrain(void)
}
}
-static void atkEC_pursuit_sth(void)
+static void atkEC_pursuitrelated(void)
{
gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ BIT_MON);
@@ -10641,7 +10562,7 @@ static void atkEC_pursuit_sth(void)
}
}
-static void atkED_802B4B4(void)
+static void atkEF_snatchsetbanks(void)
{
gEffectBank = gBankAttacker;
@@ -10676,7 +10597,7 @@ static void atkEE_removelightscreenreflect(void) // brick break
gBattlescriptCurrInstr++;
}
-static void atkEF_pokeball_catch_calculation(void)
+static void atkEF_handleballthrow(void)
{
u8 ballMultiplier = 0;
@@ -10827,7 +10748,7 @@ static void atkEF_pokeball_catch_calculation(void)
}
}
-static void atkF0_give_caught_mon(void)
+static void atkF0_givecaughtmon(void)
{
if (GiveMonToPlayer(&gEnemyParty[gBattlePartyID[gBankAttacker ^ BIT_SIDE]]) != MON_GIVEN_TO_PARTY)
{
@@ -10856,7 +10777,7 @@ static void atkF0_give_caught_mon(void)
gBattlescriptCurrInstr++;
}
-static void atkF1_set_caught_mon_dex_flags(void)
+static void atkF1_trysetcaughtmondexflags(void)
{
u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
u32 personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL);
@@ -10872,7 +10793,7 @@ static void atkF1_set_caught_mon_dex_flags(void)
}
}
-static void atkF2_display_dex_info(void)
+static void atkF2_displaydexinfo(void)
{
u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
@@ -10991,7 +10912,7 @@ void BattleDestroyYesNoCursorAt(u8 cursorPosition)
CopyBgTilemapBufferToVram(0);
}
-static void atkF3_nickname_caught_poke(void)
+static void atkF3_trygivecaughtmonnick(void)
{
switch (gBattleCommunication[MULTIUSE_STATE])
{
@@ -11079,18 +11000,18 @@ static void atkF5_removeattackerstatus1(void)
gBattlescriptCurrInstr++;
}
-static void atkF6_action_finished(void)
+static void atkF6_finishaction(void)
{
gCurrentActionFuncId = ACTION_FINISHED;
}
-static void atkF7_turn_finished(void)
+static void atkF7_finishturn(void)
{
gCurrentActionFuncId = ACTION_FINISHED;
gCurrentTurnActionNumber = gNoOfAllBanks;
}
-static void atkF8_trainer_slide_back(void)
+static void atkF8_trainerslideout(void)
{
gActiveBank = GetBankByIdentity(gBattlescriptCurrInstr[1]);
EmitTrainerSlideBack(0);
diff --git a/src/battle_util.c b/src/battle_util.c
index ed3bdef98..5c305a4e4 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -9,19 +9,22 @@
#include "items.h"
#include "util.h"
#include "battle_move_effects.h"
+#include "battle_scripts.h"
#include "rng.h"
#include "text.h"
#include "string_util.h"
#include "battle_message.h"
+#include "battle_string_ids.h"
#include "battle_ai_script_commands.h"
#include "battle_controllers.h"
#include "event_data.h"
#include "calculate_base_damage.h"
#include "link.h"
+#include "berry.h"
extern const u8* gBattlescriptCurrInstr;
-extern const u8* gBattlescriptPtrsForSelection[BATTLE_BANKS_COUNT];
-extern const u8* gUnknown_02024230[BATTLE_BANKS_COUNT];
+extern const u8* gSelectionBattleScripts[BATTLE_BANKS_COUNT];
+extern const u8* gPalaceSelectionBattleScripts[BATTLE_BANKS_COUNT];
extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
extern u8 gActiveBank;
extern u8 gStringBank;
@@ -41,7 +44,7 @@ extern s32 gBattleMoveDamage;
extern struct BattleEnigmaBerry gEnigmaBerries[BATTLE_BANKS_COUNT];
extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
extern u32 gBattleTypeFlags;
-extern u16 gLastUsedMovesByBanks[BATTLE_BANKS_COUNT];
+extern u16 gLastMoves[BATTLE_BANKS_COUNT];
extern u32 gHitMarker;
extern u8 gEffectBank;
extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
@@ -60,119 +63,6 @@ extern u8 gSentPokesToOpponent[2];
extern const struct BattleMove gBattleMoves[];
-// scripts
-extern const u8 gUnknown_082DAE2A[];
-extern const u8 gUnknown_082DAE1F[];
-extern const u8 gUnknown_082DB089[];
-extern const u8 gUnknown_082DB098[];
-extern const u8 gUnknown_082DB0AF[];
-extern const u8 gUnknown_082DB0A0[];
-extern const u8 gUnknown_082DB185[];
-extern const u8 gUnknown_082DB181[];
-extern const u8 gUnknown_082DB812[];
-extern const u8 gUnknown_082DB076[];
-extern const u8 BattleScript_NoMovesLeft[];
-extern const u8 gUnknown_082DACFA[];
-extern const u8 gUnknown_082DAD0B[];
-extern const u8 gUnknown_082DACC9[];
-extern const u8 gUnknown_082DAC47[];
-extern const u8 gUnknown_082DACE0[];
-extern const u8 gUnknown_082DACD2[];
-extern const u8 BattleScript_WishComesTrue[];
-extern const u8 gUnknown_082DACC9[];
-extern const u8 gUnknown_082DAC2C[];
-extern const u8 BattleScript_IngrainTurnHeal[];
-extern const u8 BattleScript_LeechSeedTurnDrain[];
-extern const u8 BattleScript_PoisonTurnDmg[];
-extern const u8 BattleScript_BurnTurnDmg[];
-extern const u8 BattleScript_NightmareTurnDmg[];
-extern const u8 BattleScript_CurseTurnDmg[];
-extern const u8 BattleScript_WrapTurnDmg[];
-extern const u8 BattleScript_WrapEnds[];
-extern const u8 gUnknown_082DB234[];
-extern const u8 gUnknown_082DB2A6[];
-extern const u8 BattleScript_ThrashConfuses[];
-extern const u8 BattleScript_DisabledNoMore[];
-extern const u8 BattleScript_EncoredNoMore[];
-extern const u8 BattleScript_YawnMakesAsleep[];
-extern const u8 gUnknown_082DAFE4[];
-extern const u8 gUnknown_082DB8F3[];
-extern const u8 gUnknown_082DAF05[];
-extern const u8 gUnknown_082DAF20[];
-extern const u8 gUnknown_082DA7C4[];
-extern const u8 gUnknown_082DA7CD[];
-extern const u8 BattleScript_MoveUsedWokeUp[];
-extern const u8 BattleScript_MoveUsedIsAsleep[];
-extern const u8 BattleScript_MoveUsedIsFrozen[];
-extern const u8 BattleScript_MoveUsedUnfroze[];
-extern const u8 BattleScript_MoveUsedLoafingAround[];
-extern const u8 BattleScript_MoveUsedMustRecharge[];
-extern const u8 BattleScript_MoveUsedFlinched[];
-extern const u8 BattleScript_MoveUsedIsDisabled[];
-extern const u8 BattleScript_MoveUsedIsTaunted[];
-extern const u8 BattleScript_MoveUsedIsImprisoned[];
-extern const u8 BattleScript_MoveUsedIsConfused[];
-extern const u8 BattleScript_MoveUsedIsConfusedNoMore[];
-extern const u8 BattleScript_MoveUsedIsParalyzed[];
-extern const u8 BattleScript_MoveUsedIsParalyzedCantAttack[];
-extern const u8 BattleScript_MoveUsedIsInLove[];
-extern const u8 BattleScript_BideStoringEnergy[];
-extern const u8 BattleScript_BideAttack[];
-extern const u8 BattleScript_BideNoEnergyToAttack[];
-extern const u8 gUnknown_082DACE7[];
-extern const u8 BattleScript_DrizzleActivates[];
-extern const u8 BattleScript_SandstreamActivates[];
-extern const u8 BattleScript_DroughtActivates[];
-extern const u8 BattleScript_CastformChange[];
-extern const u8 BattleScript_RainDishActivates[];
-extern const u8 BattleScript_ShedSkinActivates[];
-extern const u8 BattleScript_SpeedBoostActivates[];
-extern const u8 BattleScript_SoundproofProtected[];
-extern const u8 BattleScript_MoveHPDrain[];
-extern const u8 BattleScript_MoveHPDrain_PPLoss[];
-extern const u8 BattleScript_FlashFireBoost[];
-extern const u8 BattleScript_FlashFireBoost_PPLoss[];
-extern const u8 gUnknown_082DB592[];
-extern const u8 gUnknown_082DB591[];
-extern const u8 BattleScript_ColorChangeActivates[];
-extern const u8 BattleScript_RoughSkinActivates[];
-extern const u8 BattleScript_ApplySecondaryEffect[];
-extern const u8 BattleScript_CuteCharmActivates[];
-extern const u8 gUnknown_082DB68C[];
-extern const u8 BattleScript_SynchronizeActivates[];
-extern const u8 gUnknown_082DB4B8[];
-extern const u8 gUnknown_082DB4C1[];
-extern const u8 BattleScript_TraceActivates[];
-
-extern const u8 BattleScript_WhiteHerbEnd2[];
-extern const u8 BattleScript_WhiteHerbRet[];
-extern const u8 BattleScript_ItemHealHP_RemoveItem[];
-extern const u8 BattleScript_BerryPPHealEnd2[];
-extern const u8 BattleScript_ItemHealHP_End2[];
-extern const u8 BattleScript_BerryConfuseHealEnd2[];
-extern const u8 BattleScript_BerryStatRaiseEnd2[];
-extern const u8 BattleScript_BerryFocusEnergyEnd2[];
-extern const u8 BattleScript_BerryCurePrlzEnd2[];
-extern const u8 BattleScript_BerryCurePsnEnd2[];
-extern const u8 BattleScript_BerryCureBrnEnd2[];
-extern const u8 BattleScript_BerryCureFrzEnd2[];
-extern const u8 BattleScript_BerryCureSlpEnd2[];
-extern const u8 BattleScript_BerryCureConfusionEnd2[];
-extern const u8 BattleScript_BerryCureChosenStatusEnd2[];
-extern const u8 BattleScript_BerryCureParRet[];
-extern const u8 BattleScript_BerryCurePsnRet[];
-extern const u8 BattleScript_BerryCureBrnRet[];
-extern const u8 BattleScript_BerryCureFrzRet[];
-extern const u8 BattleScript_BerryCureSlpRet[];
-extern const u8 BattleScript_BerryCureConfusionRet[];
-extern const u8 BattleScript_BerryCureChosenStatusRet[];
-extern const u8 BattleScript_ItemHealHP_Ret[];
-
-extern const u8 gUnknown_082DB695[]; //disobedient while asleep
-extern const u8 gUnknown_082DB6A5[]; //disobedient, uses a random move
-extern const u8 gUnknown_082DB6D9[]; //disobedient, went to sleep
-extern const u8 gUnknown_082DB6F0[]; //disobedient, hits itself
-
extern u8 weather_get_current(void);
// rom const data
@@ -196,13 +86,13 @@ u8 GetBattleBank(u8 caseId)
case BS_GET_EFFECT_BANK:
ret = gEffectBank;
break;
- case 7:
+ case BS_GET_BANK_0:
ret = 0;
break;
case BS_GET_SCRIPTING_BANK:
ret = gBattleScripting.bank;
break;
- case 3:
+ case BS_GET_gBank1:
ret = gBank1;
break;
case 5:
@@ -474,27 +364,27 @@ u8 TrySetCantSelectMoveBattleScript(void)
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
- gUnknown_02024230[gActiveBank] = gUnknown_082DAE2A;
+ gPalaceSelectionBattleScripts[gActiveBank] = BattleScript_82DAE2A;
gProtectStructs[gActiveBank].flag_x10 = 1;
}
else
{
- gBattlescriptPtrsForSelection[gActiveBank] = gUnknown_082DAE1F;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_SelectingDisabledMove;
limitations = 1;
}
}
- if (move == gLastUsedMovesByBanks[gActiveBank] && move != MOVE_STRUGGLE && (gBattleMons[gActiveBank].status2 & STATUS2_TORMENT))
+ if (move == gLastMoves[gActiveBank] && move != MOVE_STRUGGLE && (gBattleMons[gActiveBank].status2 & STATUS2_TORMENT))
{
CancelMultiTurnMoves(gActiveBank);
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
- gUnknown_02024230[gActiveBank] = gUnknown_082DB098;
+ gPalaceSelectionBattleScripts[gActiveBank] = BattleScript_82DB098;
gProtectStructs[gActiveBank].flag_x10 = 1;
}
else
{
- gBattlescriptPtrsForSelection[gActiveBank] = gUnknown_082DB089;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_SelectingTormentedMove;
limitations++;
}
}
@@ -504,12 +394,12 @@ u8 TrySetCantSelectMoveBattleScript(void)
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
- gUnknown_02024230[gActiveBank] = gUnknown_082DB0AF;
+ gPalaceSelectionBattleScripts[gActiveBank] = BattleScript_82DB0AF;
gProtectStructs[gActiveBank].flag_x10 = 1;
}
else
{
- gBattlescriptPtrsForSelection[gActiveBank] = gUnknown_082DB0A0;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_SelectingNotAllowedMoveTaunt;
limitations++;
}
}
@@ -519,12 +409,12 @@ u8 TrySetCantSelectMoveBattleScript(void)
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
- gUnknown_02024230[gActiveBank] = gUnknown_082DB185;
+ gPalaceSelectionBattleScripts[gActiveBank] = BattleScript_82DB185;
gProtectStructs[gActiveBank].flag_x10 = 1;
}
else
{
- gBattlescriptPtrsForSelection[gActiveBank] = gUnknown_082DB181;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_SelectingImprisionedMove;
limitations++;
}
}
@@ -546,7 +436,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
}
else
{
- gBattlescriptPtrsForSelection[gActiveBank] = gUnknown_082DB812;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_SelectingNotAllowedMoveChoiceItem;
limitations++;
}
}
@@ -559,7 +449,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
}
else
{
- gBattlescriptPtrsForSelection[gActiveBank] = gUnknown_082DB076;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_SelectingMoveWithNoPP;
limitations++;
}
}
@@ -570,7 +460,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check)
{
u8 holdEffect;
- u16* choicedMove = &gBattleStruct->choicedMove[bank];
+ u16 *choicedMove = &gBattleStruct->choicedMove[bank];
s32 i;
if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY)
@@ -588,7 +478,7 @@ u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check)
unusableMoves |= gBitTable[i];
if (gBattleMons[bank].moves[i] == gDisableStructs[bank].disabledMove && check & MOVE_LIMITATION_DISABLED)
unusableMoves |= gBitTable[i];
- if (gBattleMons[bank].moves[i] == gLastUsedMovesByBanks[bank] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[bank].status2 & STATUS2_TORMENT)
+ if (gBattleMons[bank].moves[i] == gLastMoves[bank] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[bank].status2 & STATUS2_TORMENT)
unusableMoves |= gBitTable[i];
if (gDisableStructs[bank].tauntTimer1 && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[bank].moves[i]].power == 0)
unusableMoves |= gBitTable[i];
@@ -610,7 +500,7 @@ bool8 AreAllMovesUnusable(void)
if (unusable == 0xF) // all moves are unusable
{
gProtectStructs[gActiveBank].onlyStruggle = 1;
- gBattlescriptPtrsForSelection[gActiveBank] = BattleScript_NoMovesLeft;
+ gSelectionBattleScripts[gActiveBank] = BattleScript_NoMovesLeft;
}
else
{
@@ -694,12 +584,8 @@ u8 UpdateTurnCounters(void)
if (--gSideTimers[sideBank].reflectTimer == 0)
{
gSideAffecting[sideBank] &= ~SIDE_STATUS_REFLECT;
- BattleScriptExecute(gUnknown_082DACFA);
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 2;
- gBattleTextBuff1[2] = MOVE_REFLECT;
- gBattleTextBuff1[3] = MOVE_REFLECT >> 8;
- gBattleTextBuff1[4] = EOS;
+ BattleScriptExecute(BattleScript_SideStatusWoreOff);
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_REFLECT);
effect++;
}
}
@@ -723,13 +609,9 @@ u8 UpdateTurnCounters(void)
if (--gSideTimers[sideBank].lightscreenTimer == 0)
{
gSideAffecting[sideBank] &= ~SIDE_STATUS_LIGHTSCREEN;
- BattleScriptExecute(gUnknown_082DACFA);
+ BattleScriptExecute(BattleScript_SideStatusWoreOff);
gBattleCommunication[MULTISTRING_CHOOSER] = sideBank;
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 2;
- gBattleTextBuff1[2] = MOVE_LIGHT_SCREEN;
- gBattleTextBuff1[3] = MOVE_LIGHT_SCREEN >> 8;
- gBattleTextBuff1[4] = EOS;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_LIGHT_SCREEN);
effect++;
}
}
@@ -752,13 +634,9 @@ u8 UpdateTurnCounters(void)
&& --gSideTimers[sideBank].mistTimer == 0)
{
gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST;
- BattleScriptExecute(gUnknown_082DACFA);
+ BattleScriptExecute(BattleScript_SideStatusWoreOff);
gBattleCommunication[MULTISTRING_CHOOSER] = sideBank;
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 2;
- gBattleTextBuff1[2] = MOVE_MIST;
- gBattleTextBuff1[3] = MOVE_MIST >> 8;
- gBattleTextBuff1[4] = EOS;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_MIST);
effect++;
}
gBattleStruct->turnSideTracker++;
@@ -781,7 +659,7 @@ u8 UpdateTurnCounters(void)
if (--gSideTimers[sideBank].safeguardTimer == 0)
{
gSideAffecting[sideBank] &= ~SIDE_STATUS_SAFEGUARD;
- BattleScriptExecute(gUnknown_082DAD0B);
+ BattleScriptExecute(BattleScript_SafeguardEnds);
effect++;
}
}
@@ -833,10 +711,15 @@ u8 UpdateTurnCounters(void)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
}
else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR)
+ {
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
else
+ {
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
- BattleScriptExecute(gUnknown_082DAC2C);
+ }
+
+ BattleScriptExecute(BattleScript_RainContinuesOrEnds);
effect++;
}
gBattleStruct->turncountersTracker++;
@@ -847,12 +730,14 @@ u8 UpdateTurnCounters(void)
if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
{
gBattleWeather &= ~WEATHER_SANDSTORM_TEMPORARY;
- gBattlescriptCurrInstr = gUnknown_082DACC9;
+ gBattlescriptCurrInstr = BattleScript_SandStormHailEnds;
}
else
- gBattlescriptCurrInstr = gUnknown_082DAC47;
+ {
+ gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
+ }
- gBattleScripting.animArg1 = 0xC;
+ gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
@@ -865,10 +750,12 @@ u8 UpdateTurnCounters(void)
if (!(gBattleWeather & WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
{
gBattleWeather &= ~WEATHER_SUN_TEMPORARY;
- gBattlescriptCurrInstr = gUnknown_082DACE0;
+ gBattlescriptCurrInstr = BattleScript_SunlightFaded;
}
else
- gBattlescriptCurrInstr = gUnknown_082DACD2;
+ {
+ gBattlescriptCurrInstr = BattleScript_SunlightContinues;
+ }
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
@@ -881,12 +768,14 @@ u8 UpdateTurnCounters(void)
if (--gWishFutureKnock.weatherDuration == 0)
{
gBattleWeather &= ~WEATHER_HAIL;
- gBattlescriptCurrInstr = gUnknown_082DACC9;
+ gBattlescriptCurrInstr = BattleScript_SandStormHailEnds;
}
else
- gBattlescriptCurrInstr = gUnknown_082DAC47;
+ {
+ gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
+ }
- gBattleScripting.animArg1 = 0xD;
+ gBattleScripting.animArg1 = B_ANIM_HAIL_CONTINUES;
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
@@ -981,7 +870,7 @@ u8 TurnBasedEffects(void)
gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- if ((gBattleMons[gActiveBank].status1 & 0xF00) != 0xF00) //not 16 turns
+ if ((gBattleMons[gActiveBank].status1 & 0xF00) != 0xF00) // not 16 turns
gBattleMons[gActiveBank].status1 += 0x100;
gBattleMoveDamage *= (gBattleMons[gActiveBank].status1 & 0xF00) >> 8;
BattleScriptExecute(BattleScript_PoisonTurnDmg);
@@ -1040,8 +929,8 @@ u8 TurnBasedEffects(void)
// This is the only way I could get this array access to match.
gBattleScripting.animArg1 = *(gBattleStruct->wrappedMove + gActiveBank * 2 + 0);
gBattleScripting.animArg2 = *(gBattleStruct->wrappedMove + gActiveBank * 2 + 1);
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ gBattleTextBuff1[1] = B_BUFF_MOVE;
gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gActiveBank * 2 + 0);
gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gActiveBank * 2 + 1);
gBattleTextBuff1[4] = EOS;
@@ -1052,8 +941,8 @@ u8 TurnBasedEffects(void)
}
else // broke free
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ gBattleTextBuff1[1] = B_BUFF_MOVE;
gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gActiveBank * 2 + 0);
gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gActiveBank * 2 + 1);
gBattleTextBuff1[4] = EOS;
@@ -1075,7 +964,7 @@ u8 TurnBasedEffects(void)
gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP);
gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE);
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
- BattleScriptExecute(gUnknown_082DB234);
+ BattleScriptExecute(BattleScript_MonWokeUpInUproar);
gActiveBank = gBankAttacker;
EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
MarkBufferBankForExecution(gActiveBank);
@@ -1106,7 +995,7 @@ u8 TurnBasedEffects(void)
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
CancelMultiTurnMoves(gActiveBank);
}
- BattleScriptExecute(gUnknown_082DB2A6);
+ BattleScriptExecute(BattleScript_PrintUproarOverTurns);
effect = 1;
}
}
@@ -1125,7 +1014,7 @@ u8 TurnBasedEffects(void)
gBattleMons[gActiveBank].status2 &= ~(STATUS2_MULTIPLETURNS);
if (!(gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION))
{
- gBattleCommunication[MOVE_EFFECT_BYTE] = 0x47;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER;
SetMoveEffect(1, 0);
if (gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION)
BattleScriptExecute(BattleScript_ThrashConfuses);
@@ -1250,23 +1139,20 @@ bool8 sub_8041364(void)
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 2;
- gBattleTextBuff1[2] = gWishFutureKnock.futureSightMove[gActiveBank];
- gBattleTextBuff1[3] = gWishFutureKnock.futureSightMove[gActiveBank] >> 8;
- gBattleTextBuff1[4] = EOS;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gWishFutureKnock.futureSightMove[gActiveBank]);
+
gBankTarget = gActiveBank;
gBankAttacker = gWishFutureKnock.futureSightAttacker[gActiveBank];
gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBank];
gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF;
- BattleScriptExecute(gUnknown_082DAFE4);
+ BattleScriptExecute(BattleScript_MonTookFutureAttack);
if (gWishFutureKnock.futureSightCounter[gActiveBank] == 0
- && gWishFutureKnock.futureSightCounter[gActiveBank ^ 2] == 0)
+ && gWishFutureKnock.futureSightCounter[gActiveBank ^ BIT_MON] == 0)
{
- gSideAffecting[GetBankIdentity(gBankTarget) & 1] &= ~SIDE_STATUS_FUTUREATTACK;
+ gSideAffecting[GET_BANK_SIDE(gBankTarget)] &= ~(SIDE_STATUS_FUTUREATTACK);
}
- return 1;
+ return TRUE;
}
}
// Why do I have to keep doing this to match?
@@ -1288,25 +1174,20 @@ bool8 sub_8041364(void)
gBattleStruct->field_1A1++;
if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 1;
- gBattleTextBuff1[2] = 1;
- gBattleTextBuff1[3] = 1;
- gBattleTextBuff1[4] = gDisableStructs[gActiveBank].perishSongTimer1;
- gBattleTextBuff1[5] = EOS;
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gActiveBank].perishSongTimer1);
if (gDisableStructs[gActiveBank].perishSongTimer1 == 0)
{
gStatuses3[gActiveBank] &= ~STATUS3_PERISH_SONG;
gBattleMoveDamage = gBattleMons[gActiveBank].hp;
- gBattlescriptCurrInstr = gUnknown_082DAF05;
+ gBattlescriptCurrInstr = BattleScript_PerishSongTakesLife;
}
else
{
gDisableStructs[gActiveBank].perishSongTimer1--;
- gBattlescriptCurrInstr = gUnknown_082DAF20;
+ gBattlescriptCurrInstr = BattleScript_PerishSongCountGoesDown;
}
BattleScriptExecute(gBattlescriptCurrInstr);
- return 1;
+ return TRUE;
}
}
// Hm...
@@ -1326,17 +1207,17 @@ bool8 sub_8041364(void)
for (i = 0; i < 2; i++)
CancelMultiTurnMoves(i);
- gBattlescriptCurrInstr = gUnknown_082DB8F3;
- BattleScriptExecute(gUnknown_082DB8F3);
+ gBattlescriptCurrInstr = BattleScript_82DB8F3;
+ BattleScriptExecute(BattleScript_82DB8F3);
gBattleStruct->field_1A0++;
- return 1;
+ return TRUE;
}
break;
}
gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20);
- return 0;
+ return FALSE;
}
#define sub_8041728_MAX_CASE 7
@@ -1367,7 +1248,7 @@ bool8 sub_8041728(void)
&& !(gBattleStruct->field_DF & gBitTable[gBattlePartyID[gBattleStruct->field_4E]])
&& !(gAbsentBankFlags & gBitTable[gBattleStruct->field_4E]))
{
- BattleScriptExecute(gUnknown_082DA7C4);
+ BattleScriptExecute(BattleScript_82DA7C4);
gBattleStruct->field_4D = 2;
return TRUE;
}
@@ -1392,7 +1273,7 @@ bool8 sub_8041728(void)
if (gBattleMons[gBattleStruct->field_4E].hp == 0
&& !(gAbsentBankFlags & gBitTable[gBattleStruct->field_4E]))
{
- BattleScriptExecute(gUnknown_082DA7CD);
+ BattleScriptExecute(BattleScript_82DA7CD);
gBattleStruct->field_4D = 5;
return TRUE;
}
@@ -1683,7 +1564,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 14: // last case
+ case ATKCANCELLER_MAX_CASE:
break;
}
@@ -1785,14 +1666,14 @@ bool8 sub_80423F4(u8 bank, u8 r1, u8 r2)
{
if (GetBankSide(bank) == SIDE_OPPONENT)
{
- r7 = GetBankByIdentity(1);
- r6 = GetBankByIdentity(3);
+ r7 = GetBankByIdentity(IDENTITY_OPPONENT_MON1);
+ r6 = GetBankByIdentity(IDENTITY_OPPONENT_MON2);
party = gEnemyParty;
}
else
{
- r7 = GetBankByIdentity(0);
- r6 = GetBankByIdentity(2);
+ r7 = GetBankByIdentity(IDENTITY_PLAYER_MON1);
+ r6 = GetBankByIdentity(IDENTITY_PLAYER_MON2);
party = gPlayerParty;
}
if (r1 == 6)
@@ -1910,10 +1791,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
else
move = gCurrentMove;
- if (gBattleStruct->dynamicMoveType)
- moveType = gBattleStruct->dynamicMoveType & 0x3F;
- else
- moveType = gBattleMoves[move].type;
+ GET_MOVE_TYPE(move, moveType);
switch (caseID)
{
@@ -1961,7 +1839,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (effect)
{
gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current();
- BattleScriptPushCursorAndCallback(gUnknown_082DACE7);
+ BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts);
}
break;
case ABILITY_DRIZZLE:
@@ -2167,9 +2045,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gBattleMons[bank].maxHP == gBattleMons[bank].hp)
{
if ((gProtectStructs[gBankAttacker].notFirstStrike))
- gBattlescriptCurrInstr = gUnknown_082DB592;
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless;
else
- gBattlescriptCurrInstr = gUnknown_082DB591;
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless_PPLoss;
}
else
{
@@ -2307,86 +2185,84 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
}
break;
case ABILITYEFFECT_IMMUNITY: // 5
+ for (bank = 0; bank < gNoOfAllBanks; bank++)
{
- for (bank = 0; bank < gNoOfAllBanks; bank++)
+ switch (gBattleMons[bank].ability)
{
- switch (gBattleMons[bank].ability)
+ case ABILITY_IMMUNITY:
+ if (gBattleMons[bank].status1 & (STATUS_POISON | STATUS_TOXIC_POISON | STATUS_TOXIC_COUNTER))
{
- case ABILITY_IMMUNITY:
- if (gBattleMons[bank].status1 & (STATUS_POISON | STATUS_TOXIC_POISON | STATUS_TOXIC_COUNTER))
- {
- StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
- effect = 1;
- }
- break;
- case ABILITY_OWN_TEMPO:
- if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
- {
- StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
- effect = 2;
- }
- break;
- case ABILITY_LIMBER:
- if (gBattleMons[bank].status1 & STATUS_PARALYSIS)
- {
- StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
- effect = 1;
- }
- break;
- case ABILITY_INSOMNIA:
- case ABILITY_VITAL_SPIRIT:
- if (gBattleMons[bank].status1 & STATUS_SLEEP)
- {
- gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
- StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
- effect = 1;
- }
- break;
- case ABILITY_WATER_VEIL:
- if (gBattleMons[bank].status1 & STATUS_BURN)
- {
- StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
- effect = 1;
- }
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OWN_TEMPO:
+ if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ effect = 2;
+ }
+ break;
+ case ABILITY_LIMBER:
+ if (gBattleMons[bank].status1 & STATUS_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_INSOMNIA:
+ case ABILITY_VITAL_SPIRIT:
+ if (gBattleMons[bank].status1 & STATUS_SLEEP)
+ {
+ gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_WATER_VEIL:
+ if (gBattleMons[bank].status1 & STATUS_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_MAGMA_ARMOR:
+ if (gBattleMons[bank].status1 & STATUS_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OBLIVIOUS:
+ if (gBattleMons[bank].status2 & STATUS2_INFATUATION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ effect = 3;
+ }
+ break;
+ }
+ if (effect)
+ {
+ switch (effect)
+ {
+ case 1: // status cleared
+ gBattleMons[bank].status1 = 0;
break;
- case ABILITY_MAGMA_ARMOR:
- if (gBattleMons[bank].status1 & STATUS_FREEZE)
- {
- StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
- effect = 1;
- }
+ case 2: // get rid of confusion
+ gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
break;
- case ABILITY_OBLIVIOUS:
- if (gBattleMons[bank].status2 & STATUS2_INFATUATION)
- {
- StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
- effect = 3;
- }
+ case 3: // get rid of infatuation
+ gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION);
break;
}
- if (effect)
- {
- switch (effect)
- {
- case 1: // status cleared
- gBattleMons[bank].status1 = 0;
- break;
- case 2: // get rid of confusion
- gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
- break;
- case 3: // get rid of infatuation
- gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION);
- break;
- }
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = gUnknown_082DB68C;
- gBattleScripting.bank = bank;
- gActiveBank = bank;
- EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
- MarkBufferBankForExecution(gActiveBank);
- return effect;
- }
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
+ gBattleScripting.bank = bank;
+ gActiveBank = bank;
+ EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ return effect;
}
}
break;
@@ -2445,7 +2321,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
- BattleScriptPushCursorAndCallback(gUnknown_082DB4B8);
+ BattleScriptPushCursorAndCallback(BattleScript_82DB4B8);
gBattleStruct->intimidateBank = i;
effect++;
break;
@@ -2517,7 +2393,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursor();
- gBattlescriptCurrInstr = gUnknown_082DB4C1;
+ gBattlescriptCurrInstr = BattleScript_82DB4C1;
gBattleStruct->intimidateBank = i;
effect++;
break;
@@ -2636,7 +2512,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
return effect;
}
-void BattleScriptExecute(const u8* BS_ptr)
+void BattleScriptExecute(const u8 *BS_ptr)
{
gBattlescriptCurrInstr = BS_ptr;
BATTLE_CALLBACKS_STACK->function[BATTLE_CALLBACKS_STACK->size++] = gBattleMainFunc;
@@ -2644,7 +2520,7 @@ void BattleScriptExecute(const u8* BS_ptr)
gCurrentActionFuncId = 0;
}
-void BattleScriptPushCursorAndCallback(const u8* BS_ptr)
+void BattleScriptPushCursorAndCallback(const u8 *BS_ptr)
{
BattleScriptPushCursor();
gBattlescriptCurrInstr = BS_ptr;
@@ -2662,15 +2538,6 @@ enum
ITEM_STATS_CHANGE, // 5
};
-enum
-{
- FLAVOR_SPICY, // 0
- FLAVOR_DRY, // 1
- FLAVOR_SWEET, // 2
- FLAVOR_BITTER, // 3
- FLAVOR_SOUR, // 4
-};
-
u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
{
int i = 0;
@@ -2727,7 +2594,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleStruct->moneyMultiplier = 2;
break;
case HOLD_EFFECT_RESTORE_STATS:
- for (i = 0; i < 8; i++)
+ for (i = 0; i < BATTLE_STATS_NO; i++)
{
if (gBattleMons[bank].statStages[i] < 6)
{
@@ -2764,19 +2631,19 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_RESTORE_PP:
if (!moveTurn)
{
- struct Pokemon* poke;
+ struct Pokemon *mon;
u8 ppBonuses;
u16 move;
if (GetBankSide(bank) == SIDE_PLAYER)
- poke = &gPlayerParty[gBattlePartyID[bank]];
+ mon = &gPlayerParty[gBattlePartyID[bank]];
else
- poke = &gEnemyParty[gBattlePartyID[bank]];
+ mon = &gEnemyParty[gBattlePartyID[bank]];
for (i = 0; i < 4; i++)
{
- move = GetMonData(poke, MON_DATA_MOVE1 + i);
- changedPP = GetMonData(poke, MON_DATA_PP1 + i);
- ppBonuses = GetMonData(poke, MON_DATA_PP_BONUSES);
+ 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;
}
@@ -2787,11 +2654,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
changedPP = maxPP;
else
changedPP = changedPP + bankQuality;
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 2;
- gBattleTextBuff1[2] = move;
- gBattleTextBuff1[3] = move >> 8;
- gBattleTextBuff1[4] = 0xFF;
+
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, move);
+
BattleScriptExecute(BattleScript_BerryPPHealEnd2);
EmitSetMonData(0, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP);
MarkBufferBankForExecution(gActiveBank);
@@ -2800,7 +2665,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
break;
case HOLD_EFFECT_RESTORE_STATS:
- for (i = 0; i < 8; i++)
+ for (i = 0; i < BATTLE_STATS_NO; i++)
{
if (gBattleMons[bank].statStages[i] < 6)
{
@@ -2834,17 +2699,15 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_CONFUSE_SPICY:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 8;
- gBattleTextBuff1[2] = FLAVOR_SPICY;
- gBattleTextBuff1[3] = EOS;
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SPICY);
+
gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
gBattleMoveDamage *= -1;
- if (GetFlavourRelationByPersonality(gBattleMons[bank].personality, FLAVOR_SPICY) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_SPICY) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2854,17 +2717,15 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_CONFUSE_DRY:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 8;
- gBattleTextBuff1[2] = FLAVOR_DRY;
- gBattleTextBuff1[3] = EOS;
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_DRY);
+
gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
gBattleMoveDamage *= -1;
- if (GetFlavourRelationByPersonality(gBattleMons[bank].personality, FLAVOR_DRY) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_DRY) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2874,17 +2735,15 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_CONFUSE_SWEET:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 8;
- gBattleTextBuff1[2] = FLAVOR_SWEET;
- gBattleTextBuff1[3] = EOS;
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SWEET);
+
gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
gBattleMoveDamage *= -1;
- if (GetFlavourRelationByPersonality(gBattleMons[bank].personality, FLAVOR_SWEET) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_SWEET) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2894,17 +2753,15 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_CONFUSE_BITTER:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 8;
- gBattleTextBuff1[2] = FLAVOR_BITTER;
- gBattleTextBuff1[3] = EOS;
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_BITTER);
+
gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
gBattleMoveDamage *= -1;
- if (GetFlavourRelationByPersonality(gBattleMons[bank].personality, FLAVOR_BITTER) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_BITTER) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2914,17 +2771,15 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_CONFUSE_SOUR:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 8;
- gBattleTextBuff1[2] = FLAVOR_SOUR;
- gBattleTextBuff1[3] = EOS;
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SOUR);
+
gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
gBattleMoveDamage *= -1;
- if (GetFlavourRelationByPersonality(gBattleMons[bank].personality, FLAVOR_SOUR) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_SOUR) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2935,19 +2790,11 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_ATTACK_UP:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_ATK] < 0xC)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 5;
- gBattleTextBuff1[2] = STAT_STAGE_ATK;
- gBattleTextBuff1[3] = EOS;
-
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = 0xD2;
- gBattleTextBuff2[3] = 0xD2 >> 8;
- gBattleTextBuff2[4] = EOS;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_ATK);
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE);
gEffectBank = bank;
- gBattleScripting.statChanger = 0x10 + STAT_STAGE_ATK;
+ SET_STATCHANGER(STAT_STAGE_ATK, 1, FALSE);
gBattleScripting.animArg1 = 0xE + STAT_STAGE_ATK;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
@@ -2957,13 +2804,10 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_DEFENSE_UP:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_DEF] < 0xC)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 5;
- gBattleTextBuff1[2] = STAT_STAGE_DEF;
- gBattleTextBuff1[3] = EOS;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_DEF);
gEffectBank = bank;
- gBattleScripting.statChanger = 0x10 + STAT_STAGE_DEF;
+ SET_STATCHANGER(STAT_STAGE_DEF, 1, FALSE);
gBattleScripting.animArg1 = 0xE + STAT_STAGE_DEF;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
@@ -2973,13 +2817,10 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_SPEED_UP:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 5;
- gBattleTextBuff1[2] = STAT_STAGE_SPEED;
- gBattleTextBuff1[3] = EOS;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_SPEED);
gEffectBank = bank;
- gBattleScripting.statChanger = 0x10 + STAT_STAGE_SPEED;
+ SET_STATCHANGER(STAT_STAGE_SPEED, 1, FALSE);
gBattleScripting.animArg1 = 0xE + STAT_STAGE_SPEED;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
@@ -2989,13 +2830,10 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_SP_ATTACK_UP:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPATK] < 0xC)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 5;
- gBattleTextBuff1[2] = STAT_STAGE_SPATK;
- gBattleTextBuff1[3] = EOS;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_SPATK);
gEffectBank = bank;
- gBattleScripting.statChanger = 0x10 + STAT_STAGE_SPATK;
+ SET_STATCHANGER(STAT_STAGE_SPATK, 1, FALSE);
gBattleScripting.animArg1 = 0xE + STAT_STAGE_SPATK;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
@@ -3005,13 +2843,10 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_SP_DEFENSE_UP:
if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPDEF] < 0xC)
{
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 5;
- gBattleTextBuff1[2] = STAT_STAGE_SPDEF;
- gBattleTextBuff1[3] = EOS;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_SPDEF);
gEffectBank = bank;
- gBattleScripting.statChanger = 0x10 + STAT_STAGE_SPDEF;
+ SET_STATCHANGER(STAT_STAGE_SPDEF, 1, FALSE);
gBattleScripting.animArg1 = 0xE + STAT_STAGE_SPDEF;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
@@ -3041,22 +2876,19 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
i = Random() % 5;
} while (gBattleMons[bank].statStages[STAT_STAGE_ATK + i] == 0xC);
- gBattleTextBuff1[0] = 0xFD;
- gBattleTextBuff1[1] = 5;
- gBattleTextBuff1[2] = i + 1;
- gBattleTextBuff1[3] = EOS;
-
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = 0xD1;
- gBattleTextBuff2[3] = 0xD1 >> 8;
- gBattleTextBuff2[4] = 0;
- gBattleTextBuff2[5] = 0xD2;
- gBattleTextBuff2[6] = 0xD2 >> 8;
+ 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;
gEffectBank = bank;
- gBattleScripting.statChanger = 0x21 + i;
+ SET_STATCHANGER(i + 1, 2, FALSE);
gBattleScripting.animArg1 = 0x21 + i + 6;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
@@ -3309,7 +3141,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
break;
case HOLD_EFFECT_RESTORE_STATS:
- for (i = 0; i < 8; i++)
+ for (i = 0; i < BATTLE_STATS_NO; i++)
{
if (gBattleMons[bank].statStages[i] < 6)
{
@@ -3411,7 +3243,7 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget)
switch (moveTarget)
{
case MOVE_TARGET_SELECTED:
- side = GetBankSide(gBankAttacker) ^ 1;
+ side = GetBankSide(gBankAttacker) ^ BIT_SIDE;
if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
targetBank = gSideTimers[side].followmeTarget;
else
@@ -3425,7 +3257,7 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget)
&& AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBankAttacker, ABILITY_LIGHTNING_ROD, 0, 0)
&& gBattleMons[targetBank].ability != ABILITY_LIGHTNING_ROD)
{
- targetBank ^= 2;
+ targetBank ^= BIT_MON;
RecordAbilityBattle(targetBank, gBattleMons[targetBank].ability);
gSpecialStatuses[targetBank].lightningRodRedirected = 1;
}
@@ -3435,12 +3267,12 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget)
case MOVE_TARGET_BOTH:
case MOVE_TARGET_FOES_AND_ALLY:
case MOVE_TARGET_OPPONENTS_FIELD:
- targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1);
+ targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & BIT_SIDE) ^ BIT_SIDE);
if (gAbsentBankFlags & gBitTable[targetBank])
- targetBank ^= 2;
+ targetBank ^= BIT_MON;
break;
case MOVE_TARGET_RANDOM:
- side = GetBankSide(gBankAttacker) ^ 1;
+ side = GetBankSide(gBankAttacker) ^ BIT_SIDE;
if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
targetBank = gSideTimers[side].followmeTarget;
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM)
@@ -3448,22 +3280,22 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget)
if (GetBankSide(gBankAttacker) == SIDE_PLAYER)
{
if (Random() & 1)
- targetBank = GetBankByIdentity(1);
+ targetBank = GetBankByIdentity(IDENTITY_OPPONENT_MON1);
else
- targetBank = GetBankByIdentity(3);
+ targetBank = GetBankByIdentity(IDENTITY_OPPONENT_MON2);
}
else
{
if (Random() & 1)
- targetBank = GetBankByIdentity(0);
+ targetBank = GetBankByIdentity(IDENTITY_PLAYER_MON1);
else
- targetBank = GetBankByIdentity(2);
+ targetBank = GetBankByIdentity(IDENTITY_PLAYER_MON2);
}
if (gAbsentBankFlags & gBitTable[targetBank])
- targetBank ^= 2;
+ targetBank ^= BIT_MON;
}
else
- targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1);
+ targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & BIT_SIDE) ^ BIT_SIDE);
break;
case MOVE_TARGET_USER:
case MOVE_TARGET_x10:
@@ -3471,11 +3303,7 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget)
break;
}
- #ifndef NONMATCHING
- MEME_ACCESS_U8(BattleStruct, gBattleStruct, gBankAttacker, moveTarget, targetBank);
- #else
- gBattleStruct->moveTarget[gBankAttacker] = targetBank;
- #endif // NONMATCHING
+ *(gBattleStruct->moveTarget + gBankAttacker) = targetBank;
return targetBank;
}
@@ -3536,7 +3364,7 @@ u8 IsPokeDisobedient(void)
gBattleMons[gBankAttacker].status2 &= ~(STATUS2_RAGE);
if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK))
{
- gBattlescriptCurrInstr = gUnknown_082DB695;
+ gBattlescriptCurrInstr = BattleScript_82DB695;
return 1;
}
@@ -3559,7 +3387,7 @@ u8 IsPokeDisobedient(void)
} while (gBitTable[gCurrMovePos] & calc);
gRandomMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
- gBattlescriptCurrInstr = gUnknown_082DB6A5;
+ gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove;
gBankTarget = GetMoveTarget(gRandomMove, 0);
gHitMarker |= HITMARKER_x200000;
return 2;
@@ -3581,7 +3409,7 @@ u8 IsPokeDisobedient(void)
}
if (i == gNoOfAllBanks)
{
- gBattlescriptCurrInstr = gUnknown_082DB6D9;
+ gBattlescriptCurrInstr = BattleScript_IgnoresAndFallsAsleep;
return 1;
}
}
@@ -3590,7 +3418,7 @@ u8 IsPokeDisobedient(void)
{
gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankAttacker], MOVE_POUND, 0, 40, 0, gBankAttacker, gBankAttacker);
gBankTarget = gBankAttacker;
- gBattlescriptCurrInstr = gUnknown_082DB6F0;
+ gBattlescriptCurrInstr = BattleScript_82DB6F0;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
return 2;
}
diff --git a/src/berry.c b/src/berry.c
index 6d1fd17a1..0c1553463 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -18,12 +18,6 @@ extern u16 gSpecialVar_ItemId;
extern const u8 BerryTreeScript[];
-#define BERRY_NAME_LENGTH 6
-
-#define FIRST_BERRY ITEM_CHERI_BERRY
-#define LAST_BERRY ITEM_ENIGMA_BERRY
-
-
static const u8 sBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers.");
static const u8 sBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy.");
static const u8 sBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are");
@@ -1062,28 +1056,28 @@ u8 GetStageByBerryTreeId(u8 id)
u8 ItemIdToBerryType(u16 item)
{
- u16 berry = item - FIRST_BERRY;
+ u16 berry = item - FIRST_BERRY_INDEX;
- if (berry > LAST_BERRY - FIRST_BERRY)
+ if (berry > LAST_BERRY_INDEX - FIRST_BERRY_INDEX)
return 1;
else
- return item - FIRST_BERRY + 1;
+ return ITEM_TO_BERRY(item);
}
u16 BerryTypeToItemId(u16 berry)
{
u16 item = berry - 1;
- if (item > LAST_BERRY - FIRST_BERRY)
- return FIRST_BERRY;
+ if (item > LAST_BERRY_INDEX - FIRST_BERRY_INDEX)
+ return FIRST_BERRY_INDEX;
else
- return berry + FIRST_BERRY - 1;
+ return berry + FIRST_BERRY_INDEX - 1;
}
void GetBerryNameByBerryType(u8 berry, u8 *string)
{
- memcpy(string, GetBerryInfo(berry)->name, BERRY_NAME_LENGTH);
- string[BERRY_NAME_LENGTH] = EOS;
+ memcpy(string, GetBerryInfo(berry)->name, BERRY_NAME_COUNT - 1);
+ string[BERRY_NAME_COUNT - 1] = EOS;
}
void GetBerryCountStringByBerryType(u8 berry, u8* dest, u32 berryCount)
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 8e5a51845..aa333ebaf 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -1,17 +1,138 @@
#include "global.h"
+#include "berry_blender.h"
#include "bg.h"
#include "window.h"
#include "task.h"
#include "sprite.h"
+#include "sound.h"
+#include "songs.h"
+#include "m4a.h"
+#include "bg.h"
+#include "palette.h"
+#include "decompress.h"
+#include "malloc.h"
+#include "gpu_regs.h"
+#include "text.h"
+#include "event_data.h"
+#include "main.h"
+#include "link.h"
+#include "new_menu_helpers.h"
+#include "item_menu_icons.h"
+#include "berry.h"
+#include "item.h"
+#include "items.h"
+#include "string_util.h"
+#include "international_string_util.h"
+#include "rng.h"
+#include "menu.h"
+#include "pokeblock.h"
+#include "trig.h"
+#include "tv.h"
+
+#define BLENDER_SCORE_BEST 0
+#define BLENDER_SCORE_GOOD 1
+#define BLENDER_SCORE_MISS 2
+
+#define BLENDER_MAX_PLAYERS 4
+#define BLENDER_SCORES_NO 3
+
+enum
+{
+ PLAY_AGAIN_OK,
+ DONT_PLAY_AGAIN,
+ CANT_PLAY_NO_BERRIES,
+ CANT_PLAY_NO_PKBLCK_SPACE
+};
-// Static type declarations
+struct BlenderBerry
+{
+ u16 itemId;
+ u8 name[BERRY_NAME_COUNT];
+ u8 flavors[FLAVOR_COUNT];
+ u8 smoothness;
+};
-// Static RAM declarations
-IWRAM_DATA void *berry_blender_c_unused_03000de4;
-IWRAM_DATA s16 gUnknown_03000DE8[8];
-IWRAM_DATA s16 gUnknown_03000DF8[6];
-IWRAM_DATA s16 gUnknown_03000E04;
-IWRAM_DATA s16 gUnknown_03000E06;
+struct TimeAndRPM
+{
+ u32 time;
+ u16 max_RPM;
+};
+
+struct BlenderGameBlock
+{
+ struct TimeAndRPM timeRPM;
+ u16 scores[BLENDER_MAX_PLAYERS][BLENDER_SCORES_NO];
+};
+
+struct TvBlenderStruct
+{
+ u8 name[11];
+ u8 pokeblockFlavor;
+ u8 pokeblockColor;
+ u8 pokeblockSheen;
+};
+
+struct BerryBlenderData
+{
+ u8 mainState;
+ u8 loadGfxState;
+ u8 unused_02[0x42];
+ u16 field_44;
+ u8 scoreIconIds[BLENDER_SCORES_NO];
+ u16 arrowPos;
+ s16 field_4C;
+ u16 max_RPM;
+ u8 syncArrowSpriteIds[BLENDER_MAX_PLAYERS];
+ u8 syncArrowSprite2Ids[BLENDER_MAX_PLAYERS];
+ u8 unused_57[0xB];
+ u8 gameEndState;
+ u16 field_64[BLENDER_MAX_PLAYERS];
+ u16 field_6C;
+ u16 field_6E;
+ u16 playAgainState;
+ u8 field_72;
+ u16 chosenItemId[BLENDER_MAX_PLAYERS];
+ u8 playersNo;
+ u8 unused_7D[0x10];
+ u16 field_8E[BLENDER_MAX_PLAYERS];
+ u16 field_96[BLENDER_MAX_PLAYERS];
+ u8 yesNoAnswer;
+ u8 stringVar[100];
+ u32 gameFrameTime;
+ s32 framesToWait;
+ u32 field_10C;
+ u8 unused_110[4];
+ u8 field_114;
+ u16 field_116;
+ u16 field_118;
+ u16 field_11A;
+ u16 bg_X;
+ u16 bg_Y;
+ u8 field_120[3];
+ u8 field_123;
+ u16 scores[BLENDER_MAX_PLAYERS][BLENDER_SCORES_NO];
+ u8 playerPlaces[BLENDER_MAX_PLAYERS];
+ struct BgAffineSrcData bgAffineSrc;
+ u16 field_154;
+ struct BlenderBerry blendedBerries[BLENDER_MAX_PLAYERS];
+ struct TimeAndRPM smallBlock;
+ u32 field_1A0;
+ u8 field_1A4;
+ struct TvBlenderStruct tvBlender;
+ u8 tilemapBuffers[2][0x800];
+ s16 textState;
+ void *tilesBuffer;
+ struct BlenderGameBlock gameBlock;
+};
+
+extern struct MusicPlayerInfo gMPlay_SE2;
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u16 gSpecialVar_ItemId;
+extern u8 gInGameOpponentsNo;
+extern u8 gUnknown_020322D5;
+extern u8 gResultsWindowId;
+
+extern const u8 * const gPokeblockNames[];
// graphics
extern const u8 gBerryBlenderArrowTiles[];
@@ -21,20 +142,92 @@ extern const u8 gBerryBlenderParticlesTiles[];
extern const u8 gBerryBlenderCountdownNumbersTiles[];
extern const u16 gBerryBlenderMiscPalette[];
extern const u16 gBerryBlenderArrowPalette[];
-
-void sub_8080EA4(u8 taskId);
-void sub_8080FD0(u8 taskId);
-void sub_80810F8(u8 taskId);
-void sub_80833F8(struct Sprite *sprite);
-void sub_8082F68(struct Sprite *sprite);
-void sub_8083010(struct Sprite *sprite);
-void sub_80830C0(struct Sprite *sprite);
-
-// .rodata
-// TODO: make those static once the file is decompiled
-const u16 sBlenderCenterPal[] = INCBIN_U16("graphics/berry_blender/center.gbapal");
-const u8 sBlenderCenterMap[] = INCBIN_U8("graphics/berry_blender/center_map.bin");
-const u16 sBlenderOuterPal[] = INCBIN_U16("graphics/berry_blender/outer.gbapal");
+extern const u8 sBlenderCenterGfx[];
+extern const u8 gUnknown_08D91DB8[];
+extern const u8 gUnknown_08D927EC[];
+
+// text
+extern const u8 gText_SavingDontTurnOff2[];
+extern const u8 gText_Space[];
+extern const u8 gText_BlenderMaxSpeedRecord[];
+extern const u8 gText_234Players[];
+
+extern void sub_81978B0(u16);
+extern void sub_800A418(void);
+extern u8 sub_800A9D8(void);
+extern bool8 sub_800A4D8(u8);
+extern void sub_8197DF8(u8 windowId, bool8 copyToVram);
+extern void sub_809882C(u8, u16, u8);
+extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8);
+extern void sub_81AABF0(void (*callback)(void));
+extern void sub_800B4C0(void);
+extern void sub_8009F8C(void);
+extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
+extern void sub_8153430(void);
+extern bool8 sub_8153474(void);
+extern void sub_80EECEC(void);
+
+// this file's functions
+static void BerryBlender_SetBackgroundsPos(void);
+static void sub_8080EA4(u8 taskId);
+static void sub_8080FD0(u8 taskId);
+static void sub_80810F8(u8 taskId);
+static void sub_8081224(u8 taskId);
+static void sub_8083F3C(u8 taskId);
+static void sub_80833F8(struct Sprite *sprite);
+static void sub_8082F68(struct Sprite *sprite);
+static void sub_8083010(struct Sprite *sprite);
+static void sub_80830C0(struct Sprite *sprite);
+static void sub_8082F9C(struct Sprite *sprite);
+static void Blender_SetPlayerNamesLocal(u8 opponentsNum);
+static void sub_807FAC8(void);
+static void sub_8082D28(void);
+static bool32 Blender_PrintText(s16 *textState, const u8 *string, s32 textSpeed);
+static void sub_807FFA4(void);
+static void sub_8080018(void);
+static void sub_80808D4(void);
+static void Blender_DummiedOutFunc(s16 a0, s16 a1);
+static void sub_8081898(void);
+static void sub_8082CB4(struct BgAffineSrcData *bgAffineSrc);
+static bool8 sub_8083380(void);
+static void sub_808074C(void);
+static void Blender_PrintPlayerNames(void);
+static void sub_8080588(void);
+static void Blender_SetBankBerryData(u8 bank, u16 itemId);
+static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s32 speed, s32 caseId);
+static void sub_8080DF8(void);
+static void sub_8082E84(void);
+static void sub_80832BC(s16* a0, u16 a1);
+static void sub_8083140(u16 a0, u16 a2);
+static void sub_8083230(u16 a0);
+static void sub_808330C(void);
+static void sub_8082AD4(void);
+static void CB2_HandleBlenderEndGame(void);
+static bool8 Blender_PrintBlendingRanking(void);
+static bool8 Blender_PrintBlendingResults(void);
+static void CB2_HandlePlayerPlayAgainChoice(void);
+static void CB2_HandlePlayerLinkPlayAgainChoice(void);
+static void sub_8083170(u16 a0, u16 a1);
+static void Blender_PrintMadePokeblockString(struct Pokeblock *pokeblock, u8 *dst);
+static bool32 TryAddContestLinkTvShow(struct Pokeblock *pokeblock, struct TvBlenderStruct *a1);
+
+// ewram
+EWRAM_DATA static struct BerryBlenderData *sBerryBlenderData = NULL;
+EWRAM_DATA static s32 sUnknown_020322A8[5] = {0};
+EWRAM_DATA static s32 sUnknown_020322BC[5] = {0};
+EWRAM_DATA static u32 sUnknown_020322D0 = 0;
+
+// iwram
+IWRAM_DATA static s16 sUnknown_03000DE8[8];
+IWRAM_DATA static s16 sUnknown_03000DF8[6];
+IWRAM_DATA static s16 sUnknown_03000E04;
+IWRAM_DATA static s16 sUnknown_03000E06;
+
+// rom
+
+static const u16 sBlenderCenterPal[] = INCBIN_U16("graphics/berry_blender/center.gbapal");
+static const u8 sBlenderCenterMap[] = INCBIN_U8("graphics/berry_blender/center_map.bin");
+static const u16 sBlenderOuterPal[] = INCBIN_U16("graphics/berry_blender/outer.gbapal");
// unreferenced pals?
static const u16 sUnknownPal_0[] = INCBIN_U16("graphics/unknown/unknown_339514.gbapal");
@@ -47,9 +240,9 @@ static const u8 sUnusedText_Space[] = _(" ");
static const u8 sUnusedText_Terminating[] = _("Terminating.");
static const u8 sUnusedText_LinkPartnerNotFound[] = _("Link partner(s) not found.\nPlease try again.\p");
-const u8 gText_BerryBlenderStart[] = _("Starting up the BERRY BLENDER.\pPlease select a BERRY from your BAG\nto put in the BERRY BLENDER.\p");
-const u8 gText_NewParagraph[] = _("\p");
-const u8 gText_WasMade[] = _(" was made!");
+static const u8 sText_BerryBlenderStart[] = _("Starting up the BERRY BLENDER.\pPlease select a BERRY from your BAG\nto put in the BERRY BLENDER.\p");
+static const u8 sText_NewParagraph[] = _("\p");
+static const u8 sText_WasMade[] = _(" was made!");
static const u8 sText_Mister[] = _("MISTER");
static const u8 sText_Laddie[] = _("LADDIE");
static const u8 sText_Lassie[] = _("LASSIE");
@@ -57,7 +250,7 @@ static const u8 sText_Master[] = _("MASTER");
static const u8 sText_Dude[] = _("DUDE");
static const u8 sText_Miss[] = _("MISS");
-const u8* const sBlenderOpponentsNames[] =
+static const u8* const sBlenderOpponentsNames[] =
{
sText_Mister,
sText_Laddie,
@@ -67,31 +260,41 @@ const u8* const sBlenderOpponentsNames[] =
sText_Miss
};
+enum
+{
+ BLENDER_MISTER,
+ BLENDER_LADDIE,
+ BLENDER_LASSIE,
+ BLENDER_MASTER,
+ BLENDER_DUDE,
+ BLENDER_MISS
+};
+
static const u8 sText_PressAToStart[] = _("Press the A Button to start.");
static const u8 sText_PleaseWaitAWhile[] = _("Please wait a while.");
-const u8 sText_CommunicationStandby[] = _("Communication standby…");
-const u8 sText_WouldLikeToBlendAnotherBerry[] = _("Would you like to blend another BERRY?");
-const u8 sText_RunOutOfBerriesForBlending[] = _("You’ve run out of BERRIES for\nblending in the BERRY BLENDER.\p");
-const u8 sText_YourPokeblockCaseIsFull[] = _("Your {POKEBLOCK} CASE is full.\p");
-const u8 sText_HasNoBerriesToPut[] = _(" has no BERRIES to put in\nthe BERRY BLENDER.");
-const u8 sText_ApostropheSPokeblockCaseIsFull[] = _("’s {POKEBLOCK} CASE is full.\p");
-const u8 sText_BlendingResults[] = _("RESULTS OF BLENDING");
+static const u8 sText_CommunicationStandby[] = _("Communication standby…");
+static const u8 sText_WouldLikeToBlendAnotherBerry[] = _("Would you like to blend another BERRY?");
+static const u8 sText_RunOutOfBerriesForBlending[] = _("You’ve run out of BERRIES for\nblending in the BERRY BLENDER.\p");
+static const u8 sText_YourPokeblockCaseIsFull[] = _("Your {POKEBLOCK} CASE is full.\p");
+static const u8 sText_HasNoBerriesToPut[] = _(" has no BERRIES to put in\nthe BERRY BLENDER.");
+static const u8 sText_ApostropheSPokeblockCaseIsFull[] = _("’s {POKEBLOCK} CASE is full.\p");
+static const u8 sText_BlendingResults[] = _("RESULTS OF BLENDING");
static const u8 sText_BerryUsed[] = _("BERRY USED");
-const u8 sText_SpaceBerry[] = _(" BERRY");
-const u8 sText_Time[] = _("Time:");
-const u8 sText_Min[] = _(" min. ");
-const u8 sText_Sec[] = _(" sec.");
-const u8 sText_MaximumSpeed[] = _("MAXIMUM SPEED");
-const u8 sText_RPM[] = _(" RPM");
-const u8 sText_Dot[] = _(".");
-const u8 sText_NewLine[] = _("\n");
+static const u8 sText_SpaceBerry[] = _(" BERRY");
+static const u8 sText_Time[] = _("Time:");
+static const u8 sText_Min[] = _(" min. ");
+static const u8 sText_Sec[] = _(" sec.");
+static const u8 sText_MaximumSpeed[] = _("MAXIMUM SPEED");
+static const u8 sText_RPM[] = _(" RPM");
+static const u8 sText_Dot[] = _(".");
+static const u8 sText_NewLine[] = _("\n");
static const u8 sText_Space[] = _(" ");
-const u8 sText_Ranking[] = _("RANKING");
-const u8 sText_TheLevelIs[] = _("The level is ");
-const u8 sText_TheFeelIs[] = _(", and the feel is ");
-const u8 sText_Dot2[] = _(".");
+static const u8 sText_Ranking[] = _("RANKING");
+static const u8 sText_TheLevelIs[] = _("The level is ");
+static const u8 sText_TheFeelIs[] = _(", and the feel is ");
+static const u8 sText_Dot2[] = _(".");
-const struct BgTemplate gUnknown_08339974[3] =
+static const struct BgTemplate sBerryBlenderBgTemplates[3] =
{
{
.bg = 0,
@@ -122,7 +325,7 @@ const struct BgTemplate gUnknown_08339974[3] =
}
};
-const struct WindowTemplate gUnknown_08339980[] =
+static const struct WindowTemplate sBerryBlender_WindowTemplates[] =
{
{0, 1, 6, 7, 2, 0xE, 0x28},
{0, 0x16, 6, 7, 2, 0xE, 0x36},
@@ -133,31 +336,31 @@ const struct WindowTemplate gUnknown_08339980[] =
DUMMY_WIN_TEMPLATE
};
-const struct WindowTemplate gUnknown_083399B8 =
+static const struct WindowTemplate sBlender_YesNoWindowTemplate =
{
0, 0x15, 9, 5, 4, 0xE, 0xCC
};
-const s8 gUnknown_083399C0[][2] =
+static const s8 sUnknown_083399C0[][2] =
{
{-1, -1}, {1, -1}, {-1, 1}, {1, 1}
};
-const u8 sBlenderSyncArrowsPos[][2] =
+static const u8 sBlenderSyncArrowsPos[BLENDER_MAX_PLAYERS][2] =
{
{72, 32}, {168, 32}, {72, 128}, {168, 128}
};
-const u8 gUnknown_083399D0[3][4] =
+static const u8 sUnknown_083399D0[3][4] =
{
{-1, 0, 1, -1}, {-1, 0, 1, 2}, {0, 1, 2, 3}
};
-const u16 gUnknown_083399DC[] = {0, 0xC000, 0x4000, 0x8000};
-const u8 gUnknown_083399E4[] = {1, 1, 0};
-const u8 gUnknown_083399E7[] = {32, 224, 96, 160, 0};
+static const u16 sUnknown_083399DC[] = {0, 0xC000, 0x4000, 0x8000};
+static const u8 sUnknown_083399E4[] = {1, 1, 0};
+static const u8 sUnknown_083399E7[] = {32, 224, 96, 160, 0};
-const TaskFunc gUnknown_083399EC[] =
+static const TaskFunc sUnknown_083399EC[] =
{
sub_8080EA4, sub_8080FD0, sub_80810F8
};
@@ -279,22 +482,22 @@ static const union AnimCmd *const sSpriteAnimTable_82163AC[] =
sSpriteAnim_82163A4
};
-const struct SpriteSheet sSpriteSheet_BlenderArrow =
+static const struct SpriteSheet sSpriteSheet_BlenderArrow =
{
gBerryBlenderArrowTiles, 0x800, 46545
};
-const struct SpritePalette sSpritePal_BlenderMisc =
+static const struct SpritePalette sSpritePal_BlenderMisc =
{
gBerryBlenderMiscPalette, 46546
};
-const struct SpritePalette sSpritePal_BlenderArrow =
+static const struct SpritePalette sSpritePal_BlenderArrow =
{
gBerryBlenderArrowPalette, 12312
};
-const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate =
+static const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate =
{
.tileTag = 46545,
.paletteTag = 12312,
@@ -358,12 +561,12 @@ static const union AnimCmd *const sSpriteAnimTable_8216444[] =
sSpriteAnim_821643C,
};
-const struct SpriteSheet gUnknown_08339B38 =
+static const struct SpriteSheet sUnknown_08339B38 =
{
gBerryBlenderMarubatsuTiles, 0x200, 48888
};
-const struct SpriteTemplate gUnknown_08339B40 =
+static const struct SpriteTemplate sUnknown_08339B40 =
{
.tileTag = 48888,
.paletteTag = 46546,
@@ -445,12 +648,12 @@ static const union AnimCmd *const sSpriteAnimTable_82164E0[] =
sSpriteAnim_82164D8,
};
-const struct SpriteSheet gUnknown_08339BD8 =
+static const struct SpriteSheet sUnknown_08339BD8 =
{
gBerryBlenderParticlesTiles, 0xE0, 23456
};
-const struct SpriteTemplate gUnknown_08339BE0 =
+static const struct SpriteTemplate sUnknown_08339BE0 =
{
.tileTag = 23456,
.paletteTag = 46546,
@@ -503,12 +706,12 @@ static const union AnimCmd *const sSpriteAnimTable_8216534[] =
sSpriteAnim_821652C,
};
-const struct SpriteSheet gUnknown_08339C24 =
+static const struct SpriteSheet sUnknown_08339C24 =
{
gBerryBlenderCountdownNumbersTiles, 0x600, 12345
};
-const struct SpriteTemplate gUnknown_08339C2C =
+static const struct SpriteTemplate sUnknown_08339C2C =
{
.tileTag = 12345,
.paletteTag = 46546,
@@ -547,12 +750,12 @@ static const union AnimCmd *const sSpriteAnimTable_8216570[] =
sSpriteAnim_8216568,
};
-const struct SpriteSheet gUnknown_08339C58 =
+static const struct SpriteSheet sUnknown_08339C58 =
{
gBerryBlenderStartTiles, 0x400, 12346
};
-const struct SpriteTemplate gUnknown_08339C60 =
+static const struct SpriteTemplate sUnknown_08339C60 =
{
.tileTag = 12346,
.paletteTag = 46546,
@@ -563,7 +766,7 @@ const struct SpriteTemplate gUnknown_08339C60 =
.callback = sub_80830C0
};
-const s16 gUnknown_08339C78[][5] =
+static const s16 sUnknown_08339C78[][5] =
{
{-10, 20, 10, 2, 1},
{250, 20, 10, -2, 1},
@@ -571,18 +774,18 @@ const s16 gUnknown_08339C78[][5] =
{250, 140, 10, -2, -1},
};
-const u8 gUnknown_08339CA0[][3] =
+static const u8 sOpponentBerrySets[][3] =
{
{4, 3, 2}, {0, 4, 3}, {1, 0, 4}, {2, 1, 0}, {3, 2, 1}, {0, 2, 3}, {1, 3, 4}, {2, 4, 0}, {3, 0, 1}, {4, 1, 2},
};
-const u8 gUnknown_08339CBE[] = {30, 31, 32, 33, 34};
+static const u8 sSpecialOpponentBerrySets[] = {30, 31, 32, 33, 34};
-const u8 gUnknown_08339CC3[] = {1, 1, 2, 3, 4};
+static const u8 sUnknown_08339CC3[] = {1, 1, 2, 3, 4};
-const u8 gUnknown_08339CC8[] = {0x1C, 0x16, 0x13, 0x1A, 0x19, 0x0E, 0x0D, 0x0B, 0x07, 0x15};
+static const u8 sUnknown_08339CC8[] = {0x1C, 0x16, 0x13, 0x1A, 0x19, 0x0E, 0x0D, 0x0B, 0x07, 0x15};
-static const u8 gUnknown_08339CD2[] =
+static const u8 sUnknown_08339CD2[] =
{
0xfe, 0x02, 0x02, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f, 0x0c, 0x10,
0x00, 0xff, 0xfe, 0x91, 0x72, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f,
@@ -592,6 +795,2835 @@ static const u8 gUnknown_08339CD2[] =
0x05, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x02
};
-const struct WindowTemplate gUnknown_08339D14[] = {0, 6, 4, 0x12, 0xB, 0xF, 8};
+static const struct WindowTemplate sBlenderRecordWindowTemplate = {0, 6, 4, 0x12, 0xB, 0xF, 8};
+
+// code
+
+static void Blender_ControlHitPitch(void)
+{
+ m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, 2 * (sBerryBlenderData->field_4C - 128));
+}
+
+static void VBlankCB0_BerryBlender(void)
+{
+ BerryBlender_SetBackgroundsPos();
+ SetBgAffine(2, sBerryBlenderData->bgAffineSrc.texX, sBerryBlenderData->bgAffineSrc.texY,
+ sBerryBlenderData->bgAffineSrc.scrX, sBerryBlenderData->bgAffineSrc.scrY,
+ sBerryBlenderData->bgAffineSrc.sx, sBerryBlenderData->bgAffineSrc.sy,
+ sBerryBlenderData->bgAffineSrc.alpha);
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static bool8 LoadBerryBlenderGfx(void)
+{
+ switch (sBerryBlenderData->loadGfxState)
+ {
+ case 0:
+ sBerryBlenderData->tilesBuffer = AllocZeroed(sub_8034974(sBlenderCenterGfx) + 100);
+ LZDecompressWram(sBlenderCenterGfx, sBerryBlenderData->tilesBuffer);
+ sBerryBlenderData->loadGfxState++;
+ break;
+ case 1:
+ CopyToBgTilemapBuffer(2, sBlenderCenterMap, 0x400, 0);
+ CopyBgTilemapBufferToVram(2);
+ LoadPalette(sBlenderCenterPal, 0, 0x100);
+ sBerryBlenderData->loadGfxState++;
+ break;
+ case 2:
+ LoadBgTiles(2, sBerryBlenderData->tilesBuffer, sub_8034974(sBlenderCenterGfx), 0);
+ sBerryBlenderData->loadGfxState++;
+ break;
+ case 3:
+ LZDecompressWram(gUnknown_08D91DB8, sBerryBlenderData->tilesBuffer);
+ sBerryBlenderData->loadGfxState++;
+ break;
+ case 4:
+ LoadBgTiles(1, sBerryBlenderData->tilesBuffer, sub_8034974(gUnknown_08D91DB8), 0);
+ sBerryBlenderData->loadGfxState++;
+ break;
+ case 5:
+ LZDecompressWram(gUnknown_08D927EC, sBerryBlenderData->tilesBuffer);
+ sBerryBlenderData->loadGfxState++;
+ break;
+ case 6:
+ CopyToBgTilemapBuffer(1, sBerryBlenderData->tilesBuffer, sub_8034974(gUnknown_08D927EC), 0);
+ CopyBgTilemapBufferToVram(1);
+ sBerryBlenderData->loadGfxState++;
+ break;
+ case 7:
+ LoadPalette(sBlenderOuterPal, 0x80, 0x20);
+ sBerryBlenderData->loadGfxState++;
+ break;
+ case 8:
+ LoadSpriteSheet(&sSpriteSheet_BlenderArrow);
+ LoadSpriteSheet(&sUnknown_08339BD8);
+ LoadSpriteSheet(&sUnknown_08339B38);
+ sBerryBlenderData->loadGfxState++;
+ break;
+ case 9:
+ LoadSpriteSheet(&sUnknown_08339C24);
+ LoadSpriteSheet(&sUnknown_08339C58);
+ LoadSpritePalette(&sSpritePal_BlenderArrow);
+ LoadSpritePalette(&sSpritePal_BlenderMisc);
+ Free(sBerryBlenderData->tilesBuffer);
+ sBerryBlenderData->loadGfxState = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void sub_807F9D0(void)
+{
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x1E, 0x14);
+ CopyBgTilemapBufferToVram(0);
+ ShowBg(0);
+ ShowBg(1);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+}
+
+static void InitBerryBlenderWindows(void)
+{
+ if (InitWindows(sBerryBlender_WindowTemplates))
+ {
+ s32 i;
+
+ DeactivateAllTextPrinters();
+ for (i = 0; i < 5; i++)
+ FillWindowPixelBuffer(i, 0);
+
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x1E, 0x14);
+ sub_81978B0(0xE0);
+ }
+}
+
+void DoBerryBlending(void)
+{
+ if (sBerryBlenderData == NULL)
+ sBerryBlenderData = AllocZeroed(sizeof(*sBerryBlenderData));
+
+ sBerryBlenderData->gameEndState = 0;
+ sBerryBlenderData->mainState = 0;
+ sBerryBlenderData->gameEndState = 0;
+
+ Blender_SetPlayerNamesLocal(gSpecialVar_0x8004);
+ SetMainCallback2(sub_807FAC8);
+}
+
+static void sub_807FAC8(void)
+{
+ s32 i;
+
+ switch (sBerryBlenderData->mainState)
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ SetVBlankCallback(NULL);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(1, sBerryBlenderBgTemplates, ARRAY_COUNT(sBerryBlenderBgTemplates));
+ SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]);
+ SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]);
+ sub_809882C(0, 1, 0xD0);
+ copy_textbox_border_tile_patterns_to_vram(0, 0x14, 0xF0);
+ InitBerryBlenderWindows();
+
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->field_118 = 0;
+ sBerryBlenderData->field_116 = 0;
+ sBerryBlenderData->field_11A = 0x50;
+ sBerryBlenderData->bg_X = 0;
+ sBerryBlenderData->bg_Y = 0;
+ sBerryBlenderData->loadGfxState = 0;
+
+ sub_8082D28();
+ break;
+ case 1:
+ if (LoadBerryBlenderGfx())
+ {
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ sBerryBlenderData->syncArrowSpriteIds[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
+ StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSpriteIds[i]], i + 8);
+ }
+ if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ {
+ sub_800E0E8();
+ sub_800DFB4(0, 0);
+ }
+ SetVBlankCallback(VBlankCB0_BerryBlender);
+ sBerryBlenderData->mainState++;
+ }
+ break;
+ case 2:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ sub_8082D28();
+ sBerryBlenderData->mainState++;
+ break;
+ case 3:
+ sub_807F9D0();
+ if (!gPaletteFade.active)
+ sBerryBlenderData->mainState++;
+ break;
+ case 4:
+ if (Blender_PrintText(&sBerryBlenderData->textState, sText_BerryBlenderStart, GetPlayerTextSpeed()))
+ sBerryBlenderData->mainState++;
+ break;
+ case 5:
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ sBerryBlenderData->mainState++;
+ break;
+ case 6:
+ if (!gPaletteFade.active)
+ {
+ FreeAllWindowBuffers();
+ UnsetBgTilemapBuffer(2);
+ UnsetBgTilemapBuffer(1);
+ SetVBlankCallback(NULL);
+ sub_81AABF0(sub_807FFA4);
+
+ sBerryBlenderData->mainState = 0;
+ }
+ break;
+ }
+
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+}
+
+static void sub_807FD08(struct Sprite* sprite)
+{
+ sprite->data1 += sprite->data6;
+ sprite->data2 -= sprite->data4;
+ sprite->data2 += sprite->data7;
+ sprite->data0 += sprite->data7;
+ sprite->data4--;
+
+ if (sprite->data0 < sprite->data2)
+ {
+ sprite->data3 = sprite->data4 = sprite->data3 - 1;
+
+ if (++sprite->data5 > 3)
+ DestroySprite(sprite);
+ else
+ PlaySE(SE_TB_KARA);
+ }
+ sprite->pos1.x = sprite->data1;
+ sprite->pos1.y = sprite->data2;
+}
+
+static void sub_807FD64(struct Sprite* sprite, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6)
+{
+ sprite->data0 = a3;
+ sprite->data1 = a2;
+ sprite->data2 = a3;
+ sprite->data3 = a4;
+ sprite->data4 = 10;
+ sprite->data5 = 0;
+ sprite->data6 = a5;
+ sprite->data7 = a6;
+ sprite->callback = sub_807FD08;
+}
+
+static void sub_807FD90(u16 a0, u8 a1)
+{
+ u8 spriteId = sub_80D511C(a0 + 123, 0, 80, a1 & 1);
+ sub_807FD64(&gSprites[spriteId], sUnknown_08339C78[a1][0], sUnknown_08339C78[a1][1], sUnknown_08339C78[a1][2], sUnknown_08339C78[a1][3], sUnknown_08339C78[a1][4]);
+}
+
+static void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemId)
+{
+ const struct Berry *berryInfo = GetBerryInfo(ITEM_TO_BERRY(itemId));
+
+ berry->itemId = itemId;
+ StringCopy(berry->name, berryInfo->name);
+ berry->flavors[FLAVOR_SPICY] = berryInfo->spicy;
+ berry->flavors[FLAVOR_DRY] = berryInfo->dry;
+ berry->flavors[FLAVOR_SWEET] = berryInfo->sweet;
+ berry->flavors[FLAVOR_BITTER] = berryInfo->bitter;
+ berry->flavors[FLAVOR_SOUR] = berryInfo->sour;
+ berry->smoothness = berryInfo->smoothness;
+}
+
+static void Blender_SetPlayerNamesLocal(u8 opponentsNum)
+{
+ switch (opponentsNum)
+ {
+ case 0:
+ gInGameOpponentsNo = 0;
+ break;
+ case 1:
+ gInGameOpponentsNo = 1;
+ sBerryBlenderData->playersNo = 2;
+ StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
+
+ if (!FlagGet(FLAG_340))
+ StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[BLENDER_MASTER]);
+ else
+ StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[BLENDER_MISTER]);
+
+ gLinkPlayers[0].language = GAME_LANGUAGE;
+ gLinkPlayers[1].language = GAME_LANGUAGE;
+ break;
+ case 2:
+ gInGameOpponentsNo = 2;
+ sBerryBlenderData->playersNo = 3;
+ StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
+ StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[BLENDER_DUDE]);
+ StringCopy(gLinkPlayers[2].name, sBlenderOpponentsNames[BLENDER_LASSIE]);
+
+ gLinkPlayers[0].language = GAME_LANGUAGE;
+ gLinkPlayers[1].language = GAME_LANGUAGE;
+ gLinkPlayers[2].language = GAME_LANGUAGE;
+ break;
+ case 3:
+ gInGameOpponentsNo = 3;
+ sBerryBlenderData->playersNo = 4;
+ StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
+ StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[BLENDER_MISS]);
+ StringCopy(gLinkPlayers[2].name, sBlenderOpponentsNames[BLENDER_LADDIE]);
+ StringCopy(gLinkPlayers[3].name, sBlenderOpponentsNames[BLENDER_LASSIE]);
+
+ gLinkPlayers[0].language = GAME_LANGUAGE;
+ gLinkPlayers[1].language = GAME_LANGUAGE;
+ gLinkPlayers[2].language = GAME_LANGUAGE;
+ gLinkPlayers[3].language = GAME_LANGUAGE;
+ break;
+ }
+}
+
+static void sub_807FFA4(void)
+{
+ s32 i;
+
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ if (sBerryBlenderData == NULL)
+ sBerryBlenderData = AllocZeroed(sizeof(*sBerryBlenderData));
+
+ sBerryBlenderData->mainState = 0;
+ sBerryBlenderData->field_10C = 0;
+
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ sBerryBlenderData->chosenItemId[i] = ITEM_NONE;
+
+ Blender_SetPlayerNamesLocal(gSpecialVar_0x8004);
+
+ if (gSpecialVar_0x8004 == 0)
+ SetMainCallback2(sub_8080018);
+ else
+ SetMainCallback2(sub_80808D4);
+}
+
+static void sub_8080018(void)
+{
+ s32 i, j;
+
+ switch (sBerryBlenderData->mainState)
+ {
+ case 0:
+ sub_8080588();
+ gLinkType = 0x4422;
+ sBerryBlenderData->field_72 = 0;
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ sBerryBlenderData->field_64[i] = 0;
+ for (j = 0; j < 3; j++)
+ {
+ sBerryBlenderData->scores[i][j] = 0;
+ }
+ }
+ sBerryBlenderData->playAgainState = 0;
+ sBerryBlenderData->max_RPM = 0;
+ sBerryBlenderData->loadGfxState = 0;
+ sBerryBlenderData->mainState++;
+ break;
+ case 1:
+ if (LoadBerryBlenderGfx())
+ {
+ sBerryBlenderData->mainState++;
+ sub_8082D28();
+ }
+ break;
+ case 2:
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ sBerryBlenderData->syncArrowSprite2Ids[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
+ StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSprite2Ids[i]], i + 8);
+ }
+ if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ {
+ sub_800E0E8();
+ sub_800DFB4(0, 0);
+ }
+ sBerryBlenderData->mainState++;
+ break;
+ case 3:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ sBerryBlenderData->mainState++;
+ break;
+ case 4:
+ sub_807F9D0();
+ if (!gPaletteFade.active)
+ {
+ sBerryBlenderData->mainState++;
+ }
+ break;
+ case 5:
+ Blender_PrintText(&sBerryBlenderData->textState, sText_CommunicationStandby, 0);
+ sBerryBlenderData->mainState = 8;
+ sBerryBlenderData->framesToWait = 0;
+ break;
+ case 8:
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->field_114 = 0;
+ Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
+ memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry));
+ sub_800ADF8();
+ sBerryBlenderData->framesToWait = 0;
+ break;
+ case 9:
+ if (sub_800A520())
+ {
+ ResetBlockReceivedFlags();
+ if (GetMultiplayerId() == 0)
+ sub_800A4D8(4);
+ sBerryBlenderData->mainState++;
+ }
+ break;
+ case 10:
+ if (++sBerryBlenderData->framesToWait > 20)
+ {
+ sub_8197DF8(4, TRUE);
+ if (GetBlockReceivedStatus() == sub_800A9D8())
+ {
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ memcpy(&sBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry));
+ sBerryBlenderData->chosenItemId[i] = sBerryBlenderData->blendedBerries[i].itemId;
+ }
+
+ ResetBlockReceivedFlags();
+ sBerryBlenderData->mainState++;
+ }
+ }
+ break;
+ case 11:
+ sBerryBlenderData->playersNo = GetLinkPlayerCount();
+
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ if (sBerryBlenderData->field_114 == sUnknown_083399D0[sBerryBlenderData->playersNo - 2][i])
+ {
+ sub_807FD90(sBerryBlenderData->chosenItemId[sBerryBlenderData->field_114], i);
+ break;
+ }
+ }
+
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->field_114++;
+ break;
+ case 12:
+ if (++sBerryBlenderData->framesToWait > 60)
+ {
+ if (sBerryBlenderData->field_114 >= sBerryBlenderData->playersNo)
+ {
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]] - 22528;
+ }
+ else
+ {
+ sBerryBlenderData->mainState--;
+ }
+ sBerryBlenderData->framesToWait = 0;
+ }
+ break;
+ case 13:
+ if (sub_800A520())
+ {
+ sBerryBlenderData->mainState++;
+ sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ PlaySE(SE_RU_HYUU);
+ ShowBg(2);
+ }
+ break;
+ case 14:
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
+ sBerryBlenderData->arrowPos += 0x200;
+ sBerryBlenderData->field_11A += 4;
+ if (sBerryBlenderData->field_11A > 0xFF)
+ {
+ SetGpuRegBits(REG_OFFSET_BG2CNT, 2);
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->field_11A = 0x100;
+ sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]];
+ sBerryBlenderData->framesToWait = 0;
+ PlaySE(SE_TRACK_DOOR);
+ sub_808074C();
+ Blender_PrintPlayerNames();
+ }
+ sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ break;
+ case 15:
+ if (sub_8083380())
+ {
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->mainState++;
+ }
+ sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ break;
+ case 16:
+ CreateSprite(&sUnknown_08339C2C, 120, -16, 3);
+ sBerryBlenderData->mainState++;
+ break;
+ case 18:
+ sBerryBlenderData->mainState++;
+ break;
+ case 19:
+ sub_800ADF8();
+ sBerryBlenderData->mainState++;
+ break;
+ case 20:
+ if (sub_800A520())
+ {
+ sub_800A418();
+ sBerryBlenderData->mainState++;
+ }
+ break;
+ case 21:
+ sBerryBlenderData->field_4C = 128;
+ sBerryBlenderData->gameFrameTime = 0;
+ SetMainCallback2(sub_8081898);
+ if (GetCurrentMapMusic() != BGM_CYCLING)
+ {
+ sBerryBlenderData->field_154 = GetCurrentMapMusic();
+ }
+ PlayBGM(BGM_CYCLING);
+ break;
+ }
+
+ Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+}
+
+static void sub_8080588(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+
+ SetVBlankCallback(VBlankCB0_BerryBlender);
+
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(1, sBerryBlenderBgTemplates, ARRAY_COUNT(sBerryBlenderBgTemplates));
+
+ SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]);
+ SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]);
+
+ sub_809882C(0, 1, 0xD0);
+ copy_textbox_border_tile_patterns_to_vram(0, 0x14, 0xF0);
+ InitBerryBlenderWindows();
+
+ sBerryBlenderData->field_44 = 0;
+ sBerryBlenderData->field_4C = 0;
+ sBerryBlenderData->arrowPos = 0;
+ sBerryBlenderData->max_RPM = 0;
+ sBerryBlenderData->bg_X = 0;
+ sBerryBlenderData->bg_Y = 0;
+}
+
+static u8 sub_8080624(u16 arrowPos, u8 playerId)
+{
+ u32 var1 = (arrowPos / 0x100) + 0x18;
+ u8 arrID = sBerryBlenderData->field_96[playerId];
+ u32 var2 = sUnknown_083399E7[arrID];
+
+ if (var1 >= var2 && var1 < var2 + 0x30)
+ {
+ if (var1 >= var2 + 20 && var1 < var2 + 28)
+ return 2;
+ else
+ return 1;
+ }
+
+ return 0;
+}
+
+static void Blender_SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum, struct BlenderBerry* playerBerry)
+{
+ u16 opponentSetId = 0;
+ u16 opponentBerryId;
+ u16 var;
+ u16 i;
+
+ if (playerBerryItemId == ITEM_ENIGMA_BERRY)
+ {
+ for (i = 0; i < FLAVOR_COUNT; i++)
+ {
+ if (playerBerry->flavors[opponentSetId] > playerBerry->flavors[i])
+ opponentSetId = i;
+ }
+ opponentSetId += 5;
+ }
+ else
+ {
+ opponentSetId = playerBerryItemId - FIRST_BERRY_INDEX;
+ if (opponentSetId >= 5)
+ opponentSetId = (opponentSetId % 5) + 5;
+ }
+ for (i = 0; i < playersNum - 1; i++)
+ {
+ opponentBerryId = sOpponentBerrySets[opponentSetId][i];
+ var = playerBerryItemId - 163;
+ if (!FlagGet(0x340) && gSpecialVar_0x8004 == 1)
+ {
+ opponentSetId %= 5;
+ opponentBerryId = sSpecialOpponentBerrySets[opponentSetId];
+ if (var <= 4)
+ opponentBerryId -= 5;
+ }
+ Blender_SetBankBerryData(i + 1, opponentBerryId + FIRST_BERRY_INDEX);
+ }
+}
+
+static void sub_808074C(void)
+{
+ s32 i, j;
+
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ sBerryBlenderData->field_96[i] = 0xFF;
+ sBerryBlenderData->field_8E[i] = sUnknown_083399D0[sBerryBlenderData->playersNo - 2][i];
+ }
+ for (j = 0; j < BLENDER_MAX_PLAYERS; j++)
+ {
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ if (sBerryBlenderData->field_8E[i] == j)
+ sBerryBlenderData->field_96[j] = i;
+ }
+ }
+}
+
+static void Blender_PrintPlayerNames(void)
+{
+ s32 i, xPos;
+ u32 multiplayerId = 0;
+ u8 text[20];
+
+ if (gReceivedRemoteLinkPlayers)
+ multiplayerId = GetMultiplayerId();
+
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ if (sBerryBlenderData->field_8E[i] != 0xFF)
+ {
+ sBerryBlenderData->syncArrowSpriteIds[sBerryBlenderData->field_8E[i]] = sBerryBlenderData->syncArrowSprite2Ids[i];
+ StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSpriteIds[sBerryBlenderData->field_8E[i]]], i);
+
+ text[0] = EOS;
+ StringCopy(text, gLinkPlayers[sBerryBlenderData->field_8E[i]].name);
+ xPos = GetStringCenterAlignXOffset(1, text, 0x38);
+
+ if (multiplayerId == sBerryBlenderData->field_8E[i])
+ Blender_AddTextPrinter(i, text, xPos, 1, 0, 2);
+ else
+ Blender_AddTextPrinter(i, text, xPos, 1, 0, 1);
+
+ PutWindowTilemap(i);
+ CopyWindowToVram(i, 3);
+ }
+ }
+}
+
+static void sub_80808D4(void)
+{
+ s32 i, j;
+
+ switch (sBerryBlenderData->mainState)
+ {
+ case 0:
+ sub_800B4C0();
+ sub_8080588();
+ Blender_SetBankBerryData(0, gSpecialVar_ItemId);
+ Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
+ Blender_SetOpponentsBerryData(gSpecialVar_ItemId, sBerryBlenderData->playersNo, &sBerryBlenderData->blendedBerries[0]);
+
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ sBerryBlenderData->field_64[i] = 0;
+ for (j = 0; j < 3; j++)
+ {
+ sBerryBlenderData->scores[i][j] = 0;
+ }
+ }
+
+ sBerryBlenderData->playAgainState = 0;
+ sBerryBlenderData->loadGfxState = 0;
+ gLinkType = 0x4422;
+ sBerryBlenderData->mainState++;
+ break;
+ case 1:
+ if (LoadBerryBlenderGfx())
+ {
+ sBerryBlenderData->mainState++;
+ sub_8082D28();
+ }
+ break;
+ case 2:
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ sBerryBlenderData->syncArrowSprite2Ids[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
+ StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSprite2Ids[i]], i + 8);
+ }
+ sBerryBlenderData->mainState++;
+ break;
+ case 3:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->framesToWait = 0;
+ break;
+ case 4:
+ if (++sBerryBlenderData->framesToWait == 2)
+ sub_807F9D0();
+ if (!gPaletteFade.active)
+ sBerryBlenderData->mainState = 8;
+ break;
+ case 8:
+ sBerryBlenderData->mainState = 11;
+ sBerryBlenderData->field_114 = 0;
+ break;
+ case 11:
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ u32 var = sUnknown_083399D0[sBerryBlenderData->playersNo - 2][i];
+ if (sBerryBlenderData->field_114 == var)
+ {
+ sub_807FD90(sBerryBlenderData->chosenItemId[sBerryBlenderData->field_114], i);
+ break;
+ }
+ }
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->field_114++;
+ break;
+ case 12:
+ if (++sBerryBlenderData->framesToWait > 60)
+ {
+ if (sBerryBlenderData->field_114 >= sBerryBlenderData->playersNo)
+ {
+ sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]] - 22528;
+ sBerryBlenderData->mainState++;
+ }
+ else
+ {
+ sBerryBlenderData->mainState--;
+ }
+ sBerryBlenderData->framesToWait = 0;
+ }
+ break;
+ case 13:
+ sBerryBlenderData->mainState++;
+ sub_808074C();
+ PlaySE(SE_RU_HYUU);
+ sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ ShowBg(2);
+ break;
+ case 14:
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
+ sBerryBlenderData->arrowPos += 0x200;
+ sBerryBlenderData->field_11A += 4;
+ if (sBerryBlenderData->field_11A > 0xFF)
+ {
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->field_11A = 0x100;
+ sBerryBlenderData->arrowPos = sUnknown_083399DC[sUnknown_083399E4[sBerryBlenderData->playersNo - 2]];
+ SetGpuRegBits(REG_OFFSET_BG2CNT, 2);
+ sBerryBlenderData->framesToWait = 0;
+ PlaySE(SE_TRACK_DOOR);
+ Blender_PrintPlayerNames();
+ }
+ sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ break;
+ case 15:
+ if (sub_8083380())
+ {
+ sBerryBlenderData->mainState++;
+ }
+ sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ break;
+ case 16:
+ CreateSprite(&sUnknown_08339C2C, 120, -16, 3);
+ sBerryBlenderData->mainState++;
+ break;
+ case 18:
+ sBerryBlenderData->mainState++;
+ break;
+ case 19:
+ sBerryBlenderData->mainState++;
+ break;
+ case 20:
+ sBerryBlenderData->mainState++;
+ break;
+ case 21:
+ sub_8080DF8();
+ sBerryBlenderData->field_4C = 0x80;
+ sBerryBlenderData->gameFrameTime = 0;
+ sBerryBlenderData->field_123 = 0;
+ sBerryBlenderData->field_72 = 0;
+ SetMainCallback2(sub_8081898);
+
+ if (gSpecialVar_0x8004 == 1)
+ {
+ if (!FlagGet(FLAG_340))
+ sBerryBlenderData->field_120[0] = CreateTask(sub_8081224, 10);
+ else
+ sBerryBlenderData->field_120[0] = CreateTask(sUnknown_083399EC[0], 10);
+ }
+
+ if (gSpecialVar_0x8004 > 1)
+ {
+ for (i = 0; i < gSpecialVar_0x8004; i++)
+ sBerryBlenderData->field_120[i] = CreateTask(sUnknown_083399EC[i], 10 + i);
+ }
+
+ if (GetCurrentMapMusic() != BGM_CYCLING)
+ sBerryBlenderData->field_154 = GetCurrentMapMusic();
+
+ PlayBGM(BGM_CYCLING);
+ PlaySE(SE_MOTER);
+ Blender_ControlHitPitch();
+ break;
+ }
+
+ Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+}
+
+static void sub_8080DF8(void)
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ {
+ gSendCmd[0] = 0;
+ gSendCmd[2] = 0;
+ gRecvCmds[i][0] = 0;
+ gRecvCmds[i][2] = 0;
+ }
+}
+
+static void sub_8080E20(u8 taskId)
+{
+ if(++gTasks[taskId].data[0] > gTasks[taskId].data[1])
+ {
+ gRecvCmds[gTasks[taskId].data[2]][2] = 0x2345;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8080E6C(u8 a0, u8 a1)
+{
+ u8 taskId = CreateTask(sub_8080E20, 80);
+ gTasks[taskId].data[1] = a1;
+ gTasks[taskId].data[2] = a0;
+}
+
+static void sub_8080EA4(u8 taskId)
+{
+ if (sub_8080624(sBerryBlenderData->arrowPos, 1) == 2)
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ if (sBerryBlenderData->field_123 == 0)
+ {
+ u8 rand = Random() / 655;
+ if (sBerryBlenderData->field_4C < 500)
+ {
+ if (rand > 75)
+ gRecvCmds[1][2] = 0x4523;
+ else
+ gRecvCmds[1][2] = 0x5432;
+
+ gRecvCmds[1][2] = 0x5432;
+ }
+ else if (sBerryBlenderData->field_4C < 1500)
+ {
+ if (rand > 80)
+ {
+ gRecvCmds[1][2] = 0x4523;
+ }
+ else
+ {
+ u8 value = rand - 21;
+ if (value < 60)
+ gRecvCmds[1][2] = 0x5432;
+ else if (rand < 10)
+ sub_8080E6C(1, 5);
+ }
+ }
+ else if (rand <= 90)
+ {
+ u8 value = rand - 71;
+ if (value < 20)
+ gRecvCmds[1][2] = 0x5432;
+ else if (rand < 30)
+ sub_8080E6C(1, 5);
+ }
+ else
+ {
+ gRecvCmds[1][2] = 0x4523;
+ }
+ }
+ else
+ {
+ gRecvCmds[1][2] = 0x4523;
+ }
+
+ gTasks[taskId].data[0] = 1;
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 0;
+ }
+}
+
+static void sub_8080FD0(u8 taskId)
+{
+ u32 var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF;
+ u32 var2 = sBerryBlenderData->field_96[2] & 0xFF;
+ if ((var1 >> 8) > sUnknown_083399E7[var2] + 20 && (var1 >> 8) < sUnknown_083399E7[var2] + 40)
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ if (sBerryBlenderData->field_123 == 0)
+ {
+ u8 rand = Random() / 655;
+ if (sBerryBlenderData->field_4C < 500)
+ {
+ if (rand > 66)
+ gRecvCmds[2][2] = 0x4523;
+ else
+ gRecvCmds[2][2] = 0x5432;
+ }
+ else
+ {
+ u8 value;
+ if (rand > 65)
+ gRecvCmds[2][2] = 0x4523;
+ value = rand - 41;
+ if (value < 25)
+ gRecvCmds[2][2] = 0x5432;
+ if (rand < 10)
+ sub_8080E6C(2, 5);
+ }
+
+ gTasks[taskId].data[0] = 1;
+ }
+ else
+ {
+ gRecvCmds[2][2] = 0x4523;
+ gTasks[taskId].data[0] = 1;
+ }
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 0;
+ }
+}
+
+static void sub_80810F8(u8 taskId)
+{
+ u32 var1, var2;
+
+ var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF;
+ var2 = sBerryBlenderData->field_96[3] & 0xFF;
+ if ((var1 >> 8) > sUnknown_083399E7[var2] + 20 && (var1 >> 8) < sUnknown_083399E7[var2] + 40)
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ if (sBerryBlenderData->field_123 == 0)
+ {
+ u8 rand = (Random() / 655);
+ if (sBerryBlenderData->field_4C < 500)
+ {
+ if (rand > 88)
+ gRecvCmds[3][2] = 0x4523;
+ else
+ gRecvCmds[3][2] = 0x5432;
+ }
+ else
+ {
+ if (rand > 60)
+ {
+ gRecvCmds[3][2] = 0x4523;
+ }
+ else
+ {
+ s8 value = rand - 56; // makes me wonder what the original code was
+ u8 value2 = value;
+ if (value2 < 5)
+ gRecvCmds[3][2] = 0x5432;
+ }
+ if (rand < 5)
+ sub_8080E6C(3, 5);
+ }
+ gTasks[taskId].data[0] = 1;
+ }
+ else
+ {
+ gRecvCmds[3][2] = 0x4523;
+ gTasks[taskId].data[0] = 1;
+ }
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 0;
+ }
+}
+
+static void sub_8081224(u8 taskId)
+{
+ if (sub_8080624(sBerryBlenderData->arrowPos, 1) == 2)
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gRecvCmds[1][2] = 0x4523;
+ gTasks[taskId].data[0] = 1;
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 0;
+ }
+}
+
+static void sub_8081288(u16 a0, u8 a1)
+{
+ u8 spriteId;
+
+ spriteId = CreateSprite(&sUnknown_08339B40,
+ sBlenderSyncArrowsPos[a1][0] - (10 * sUnknown_083399C0[a1][0]),
+ sBlenderSyncArrowsPos[a1][1] - (10 * sUnknown_083399C0[a1][1]),
+ 1);
+ if (a0 == 0x4523)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 2);
+ gSprites[spriteId].callback = sub_8082F9C;
+ PlaySE(SE_RU_GASHIN);
+ }
+ else if (a0 == 0x5432)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 0);
+ PlaySE(SE_SEIKAI);
+ }
+ else if (a0 == 0x2345)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 1);
+ PlaySE(SE_HAZURE);
+ }
+ sub_8082E84();
+}
+
+static void sub_8081370(u16 a0)
+{
+ Blender_ControlHitPitch();
+ switch (a0)
+ {
+ case 0x4523:
+ if (sBerryBlenderData->field_4C < 1500)
+ sBerryBlenderData->field_4C += (0x180 / sUnknown_08339CC3[sBerryBlenderData->playersNo]);
+ else
+ {
+ sBerryBlenderData->field_4C += (128 / sUnknown_08339CC3[sBerryBlenderData->playersNo]);
+ sub_80832BC(&sBerryBlenderData->bg_X, (sBerryBlenderData->field_4C / 100) - 10);
+ sub_80832BC(&sBerryBlenderData->bg_Y, (sBerryBlenderData->field_4C / 100) - 10);
+ }
+ break;
+ case 0x5432:
+ if (sBerryBlenderData->field_4C < 1500)
+ sBerryBlenderData->field_4C += (0x100 / sUnknown_08339CC3[sBerryBlenderData->playersNo]);
+ break;
+ case 0x2345:
+ sBerryBlenderData->field_4C -= (0x100 / sUnknown_08339CC3[sBerryBlenderData->playersNo]);
+ if (sBerryBlenderData->field_4C < 0x80)
+ sBerryBlenderData->field_4C = 0x80;
+ break;
+ }
+}
+
+static bool32 sub_80814B0(u16 arg0, u16 arg1, u16 arg2)
+{
+ if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ {
+ if ((arg0 & 0xFF00) == arg2)
+ return TRUE;
+ }
+ else
+ {
+ if (arg0 == arg1)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void sub_80814F4(void)
+{
+ s32 i;
+
+ if (gSpecialVar_0x8004 != 0)
+ {
+ if (gSendCmd[2] != 0)
+ {
+ gRecvCmds[0][2] = gSendCmd[2];
+ gRecvCmds[0][0] = 0x4444;
+ gSendCmd[2] = 0;
+ }
+ for (i = 1; i < 4; i++)
+ {
+ if (gRecvCmds[i][2] != 0)
+ gRecvCmds[i][0] = 0x4444;
+ }
+ }
+ for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ {
+ if (sub_80814B0(gRecvCmds[i][0], 0x4444, 0x4400))
+ {
+ u32 var = sBerryBlenderData->field_96[i];
+ if (gRecvCmds[i][2] == 0x4523)
+ {
+ sub_8081370(0x4523);
+ sBerryBlenderData->field_116 += (sBerryBlenderData->field_4C / 55);
+ if (sBerryBlenderData->field_116 >= 1000)
+ sBerryBlenderData->field_116 = 1000;
+ sub_8081288(0x4523, var);
+ sBerryBlenderData->scores[i][BLENDER_SCORE_BEST]++;
+ }
+ else if (gRecvCmds[i][2] == 0x5432)
+ {
+ sub_8081370(0x5432);
+ sBerryBlenderData->field_116 += (sBerryBlenderData->field_4C / 70);
+ sub_8081288(0x5432, var);
+ sBerryBlenderData->scores[i][BLENDER_SCORE_GOOD]++;
+ }
+ else if (gRecvCmds[i][2] == 0x2345)
+ {
+ sub_8081288(0x2345, var);
+ sub_8081370(0x2345);
+ if (sBerryBlenderData->scores[i][BLENDER_SCORE_MISS] < 999)
+ sBerryBlenderData->scores[i][BLENDER_SCORE_MISS]++;
+ }
+ if (gRecvCmds[i][2] == 0x2345 || gRecvCmds[2][i] == 0x4523 || gRecvCmds[2][i] == 0x5432) // could be a bug, 2 and i are reversed
+ {
+ if (sBerryBlenderData->field_4C > 1500)
+ m4aMPlayTempoControl(&gMPlay_BGM, ((sBerryBlenderData->field_4C - 750) / 20) + 256);
+ else
+ m4aMPlayTempoControl(&gMPlay_BGM, 0x100);
+ }
+ }
+ }
+ if (gSpecialVar_0x8004 != 0)
+ {
+ for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ {
+ gRecvCmds[i][0] = 0;
+ gRecvCmds[i][2] = 0;
+ }
+ }
+}
+
+static void sub_8081744(void)
+{
+ u8 var2;
+ bool8 A_pressed = FALSE;
+ u8 playerId = 0;
+
+ if (gReceivedRemoteLinkPlayers != 0)
+ playerId = GetMultiplayerId();
+
+ var2 = sBerryBlenderData->field_96[playerId];
+
+ if (sBerryBlenderData->gameEndState == 0)
+ {
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A && gMain.newKeys & A_BUTTON)
+ {
+ if ((gMain.heldKeysRaw & (A_BUTTON | L_BUTTON)) != (A_BUTTON | L_BUTTON))
+ A_pressed = TRUE;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ A_pressed = TRUE;
+ }
+
+ if (A_pressed)
+ {
+ u8 var3;
+ StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSpriteIds[sBerryBlenderData->field_8E[var2]]], var2 + 4);
+ var3 = sub_8080624(sBerryBlenderData->arrowPos, playerId);
+
+ if (var3 == 2)
+ gSendCmd[2] = 0x4523;
+ else if (var3 == 1)
+ gSendCmd[2] = 0x5432;
+ else
+ gSendCmd[2] = 0x2345;
+ }
+ }
+ if (++sBerryBlenderData->field_72 > 5)
+ {
+ if (sBerryBlenderData->field_4C > 128)
+ sBerryBlenderData->field_4C--;
+ sBerryBlenderData->field_72 = 0;
+ }
+ if (gUnknown_020322D5 && gMain.newKeys & L_BUTTON)
+ sBerryBlenderData->field_123 ^= 1;
+}
+
+static void sub_8081898(void)
+{
+ sub_8082D28();
+
+ if (sBerryBlenderData->gameFrameTime < (99 * 60 * 60) + (59 * 60)) // game time can't be longer than 99 minutes and 59 seconds, can't print 3 digits
+ sBerryBlenderData->gameFrameTime++;
+
+ sub_8081744();
+ SetLinkDebugValues((u16)(sBerryBlenderData->field_4C), sBerryBlenderData->field_116);
+ sub_80814F4();
+ sub_8083140(sBerryBlenderData->field_116, 1000);
+ sub_8083230(sBerryBlenderData->field_4C);
+ sub_808330C();
+ sub_8082AD4();
+ if (sBerryBlenderData->gameEndState == 0 && sBerryBlenderData->field_118 >= 1000)
+ {
+ sBerryBlenderData->field_116 = 1000;
+ sBerryBlenderData->gameEndState = 1;
+ SetMainCallback2(CB2_HandleBlenderEndGame);
+ }
+
+ Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+}
+
+static void Blender_DummiedOutFunc(s16 a0, s16 a1)
+{
+
+}
+
+static bool8 sub_8081964(struct BlenderBerry* berries, u8 index1, u8 index2)
+{
+ if (berries[index1].itemId != berries[index2].itemId
+ || (StringCompare(berries[index1].name, berries[index2].name) == 0
+ && (berries[index1].flavors[FLAVOR_SPICY] == berries[index2].flavors[FLAVOR_SPICY]
+ && berries[index1].flavors[FLAVOR_DRY] == berries[index2].flavors[FLAVOR_DRY]
+ && berries[index1].flavors[FLAVOR_SWEET] == berries[index2].flavors[FLAVOR_SWEET]
+ && berries[index1].flavors[FLAVOR_BITTER] == berries[index2].flavors[FLAVOR_BITTER]
+ && berries[index1].flavors[FLAVOR_SOUR] == berries[index2].flavors[FLAVOR_SOUR]
+ && berries[index1].smoothness == berries[index2].smoothness)))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static u32 Blender_GetPokeblockColor(struct BlenderBerry* berries, s16* a1, u8 playersNo, u8 a3)
+{
+ s16 vars[6];
+ s32 i;
+ s32 r6;
+ u8 r2;
+
+ for (i = 0; i < 6; i++)
+ vars[i] = a1[i];
+
+ r6 = 0;
+ for (i = 0; i < 5; i++)
+ {
+ if (vars[i] == 0)
+ r6++;
+ }
+ if (r6 == 5 || a3 > 3)
+ return 12;
+ for (i = 0; i < playersNo; i++)
+ {
+ for (r6 = 0; r6 < playersNo; r6++)
+ {
+ if (berries[i].itemId == berries[r6].itemId && i != r6
+ && (berries[i].itemId != ITEM_ENIGMA_BERRY || sub_8081964(berries, i, r6)))
+ return 12;
+ }
+ }
+ r2 = 0;
+ for (r2 = 0, i = 0; i < 5; i++)
+ {
+ if (vars[i] > 0)
+ r2++;
+ }
+ if (r2 > 3)
+ return 13;
+ if (r2 == 3)
+ return 11;
+ for (i = 0; i < 5; i++)
+ {
+ if (vars[i] > 50)
+ return 14;
+ }
+ if (r2 == 1 && vars[0] > 0)
+ return 1;
+ if (r2 == 1 && vars[1] > 0)
+ return 2;
+ if (r2 == 1 && vars[2] > 0)
+ return 3;
+ if (r2 == 1 && vars[3] > 0)
+ return 4;
+ if (r2 == 1 && vars[4] > 0)
+ return 5;
+ if (r2 == 2)
+ {
+ s32 var = 0;
+ for (i = 0; i < 5; i++)
+ {
+ if (vars[i] > 0)
+ sUnknown_03000DF8[var++] = i;
+ }
+ if (vars[sUnknown_03000DF8[0]] >= vars[sUnknown_03000DF8[1]])
+ {
+ if (sUnknown_03000DF8[0] == 0)
+ return (sUnknown_03000DF8[1] << 16) | 6;
+ if (sUnknown_03000DF8[0] == 1)
+ return (sUnknown_03000DF8[1] << 16) | 7;
+ if (sUnknown_03000DF8[0] == 2)
+ return (sUnknown_03000DF8[1] << 16) | 8;
+ if (sUnknown_03000DF8[0] == 3)
+ return (sUnknown_03000DF8[1] << 16) | 9;
+ if (sUnknown_03000DF8[0] == 4)
+ return (sUnknown_03000DF8[1] << 16) | 10;
+ }
+ else
+ {
+ if (sUnknown_03000DF8[1] == 0)
+ return (sUnknown_03000DF8[0] << 16) | 6;
+ if (sUnknown_03000DF8[1] == 1)
+ return (sUnknown_03000DF8[0] << 16) | 7;
+ if (sUnknown_03000DF8[1] == 2)
+ return (sUnknown_03000DF8[0] << 16) | 8;
+ if (sUnknown_03000DF8[1] == 3)
+ return (sUnknown_03000DF8[0] << 16) | 9;
+ if (sUnknown_03000DF8[1] == 4)
+ return (sUnknown_03000DF8[0] << 16) | 10;
+ }
+ }
+ return 0;
+}
+
+static void sub_8081BB0(s16 value)
+{
+ sUnknown_03000E04 = value;
+}
+
+static s16 sub_8081BBC(void)
+{
+ return sUnknown_03000E04;
+}
+
+static void sub_8081BC8(s16 value)
+{
+ sUnknown_03000E06 = value;
+}
+
+static s16 sub_8081BD4(void)
+{
+ return sUnknown_03000E06;
+}
+
+static void Blender_CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *pokeblock, u8 playersNo, u8 *flavors, u16 maxRPM)
+{
+ s32 i, j;
+ s32 multiuseVar, var2;
+ u8 var3;
+
+ for (i = 0; i < 6; i++)
+ sUnknown_03000DE8[i] = 0;
+
+ for (i = 0; i < playersNo; i++)
+ {
+ for (j = 0; j < 6; j++)
+ sUnknown_03000DE8[j] += berries[i].flavors[j];
+ }
+
+ multiuseVar = sUnknown_03000DE8[0];
+ sUnknown_03000DE8[0] -= sUnknown_03000DE8[1];
+ sUnknown_03000DE8[1] -= sUnknown_03000DE8[2];
+ sUnknown_03000DE8[2] -= sUnknown_03000DE8[3];
+ sUnknown_03000DE8[3] -= sUnknown_03000DE8[4];
+ sUnknown_03000DE8[4] -= multiuseVar;
+
+ multiuseVar = 0;
+ for (i = 0; i < 5; i++)
+ {
+ if (sUnknown_03000DE8[i] < 0)
+ {
+ sUnknown_03000DE8[i] = 0;
+ multiuseVar++;
+ }
+ }
+ var3 = multiuseVar;
+ for (i = 0; i < 5; i++)
+ {
+ if (sUnknown_03000DE8[i] > 0)
+ {
+ if (sUnknown_03000DE8[i] < multiuseVar)
+ sUnknown_03000DE8[i] = 0;
+ else
+ sUnknown_03000DE8[i] -= multiuseVar;
+ }
+ }
+ for (i = 0; i < 5; i++)
+ {
+ sUnknown_020322A8[i] = sUnknown_03000DE8[i];
+ }
+
+ multiuseVar = maxRPM / 333 + 100;
+ sUnknown_020322D0 = multiuseVar;
+
+ for (i = 0; i < 5; i++)
+ {
+ s32 r4;
+ s32 r5 = sUnknown_03000DE8[i];
+ r5 = (r5 * multiuseVar) / 10;
+ r4 = r5 % 10;
+ r5 /= 10;
+ if (r4 > 4)
+ r5++;
+ sUnknown_03000DE8[i] = r5;
+ }
+ for (i = 0; i < 5; i++)
+ {
+ sUnknown_020322BC[i] = sUnknown_03000DE8[i];
+ }
+
+ pokeblock->color = Blender_GetPokeblockColor(berries, &sUnknown_03000DE8[0], playersNo, var3);
+ sUnknown_03000DE8[5] = (sUnknown_03000DE8[5] / playersNo) - playersNo;
+
+ if (sUnknown_03000DE8[5] < 0)
+ sUnknown_03000DE8[5] = 0;
+
+ if (pokeblock->color == 12)
+ {
+ multiuseVar = Random() % 10;
+ for (i = 0; i < 5; i++)
+ {
+ if ((sUnknown_08339CC8[multiuseVar] >> i) & 1)
+ sUnknown_03000DE8[i] = 2;
+ else
+ sUnknown_03000DE8[i] = 0;
+ }
+ }
+
+ for (i = 0; i < 6; i++)
+ {
+ if (sUnknown_03000DE8[i] > 255)
+ sUnknown_03000DE8[i] = 255;
+ }
+
+ pokeblock->spicy = sUnknown_03000DE8[0];
+ pokeblock->dry = sUnknown_03000DE8[1];
+ pokeblock->sweet = sUnknown_03000DE8[2];
+ pokeblock->bitter = sUnknown_03000DE8[3];
+ pokeblock->sour = sUnknown_03000DE8[4];
+ pokeblock->feel = sUnknown_03000DE8[5];
+
+ for (i = 0; i < 6; i++)
+ {
+ flavors[i] = sUnknown_03000DE8[i];
+ }
+}
+
+static void BlenderDebug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 playersNo, u8* flavors, u16 a4)
+{
+ Blender_CalculatePokeblock(berries, pokeblock, playersNo, flavors, a4);
+}
+
+static void sub_8081E20(void)
+{
+ u32 frames = (u16)(sBerryBlenderData->gameFrameTime);
+ u16 max_RPM = sBerryBlenderData->max_RPM;
+ s16 var = 0;
+
+ if (frames < 900)
+ var = 5;
+ else if ((u16)(frames - 900) < 600)
+ var = 4;
+ else if ((u16)(frames - 1500) < 600)
+ var = 3;
+ else if ((u16)(frames - 2100) < 900)
+ var = 2;
+ else if ((u16)(frames - 3300) < 300)
+ var = 1;
+
+ sub_8081BC8(var);
+
+ var = 0;
+ if (max_RPM <= 64)
+ {
+ if (max_RPM >= 50 && max_RPM < 100)
+ var = -1;
+ else if (max_RPM >= 100 && max_RPM < 150)
+ var = -2;
+ else if (max_RPM >= 150 && max_RPM < 200)
+ var = -3;
+ else if (max_RPM >= 200 && max_RPM < 250)
+ var = -4;
+ else if (max_RPM >= 250 && max_RPM < 300)
+ var = -5;
+ else if (max_RPM >= 350 && max_RPM < 400)
+ var = -6;
+ else if (max_RPM >= 400 && max_RPM < 450)
+ var = -7;
+ else if (max_RPM >= 500 && max_RPM < 550)
+ var = -8;
+ else if (max_RPM >= 550 && max_RPM < 600)
+ var = -9;
+ else if (max_RPM >= 600)
+ var = -10;
+ }
+
+ sub_8081BB0(var);
+}
+
+static void sub_8081F94(u16 *a0)
+{
+ if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ *a0 = 0x2F00;
+ else
+ *a0 = 0x2FFF;
+}
+
+static void CB2_HandleBlenderEndGame(void)
+{
+ u8 i, j;
+
+ if (sBerryBlenderData->gameEndState < 3)
+ sub_8082D28();
+
+ GetMultiplayerId(); // unused return value
+
+ switch (sBerryBlenderData->gameEndState)
+ {
+ case 1:
+ m4aMPlayTempoControl(&gMPlay_BGM, 256);
+ for (i = 0; i < gSpecialVar_0x8004; i++)
+ {
+ DestroyTask(sBerryBlenderData->field_120[i]);
+ }
+ sBerryBlenderData->gameEndState++;
+ break;
+ case 2:
+ sBerryBlenderData->field_4C -= 32;
+ if (sBerryBlenderData->field_4C <= 0)
+ {
+ sub_8009F8C();
+ sBerryBlenderData->field_4C = 0;
+
+ if (gReceivedRemoteLinkPlayers != 0)
+ sBerryBlenderData->gameEndState++;
+ else
+ sBerryBlenderData->gameEndState = 5;
+
+ sBerryBlenderData->mainState = 0;
+ m4aMPlayStop(&gMPlay_SE2);
+ }
+ Blender_ControlHitPitch();
+ break;
+ case 3:
+ if (GetMultiplayerId() != 0)
+ {
+ sBerryBlenderData->gameEndState++;
+ }
+ else if (sub_800A520())
+ {
+ if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ {
+ sBerryBlenderData->gameBlock.timeRPM.time = sBerryBlenderData->gameFrameTime;
+ sBerryBlenderData->gameBlock.timeRPM.max_RPM = sBerryBlenderData->max_RPM;
+
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ for (j = 0; j < BLENDER_SCORES_NO; j++)
+ sBerryBlenderData->gameBlock.scores[i][j] = sBerryBlenderData->scores[i][j];
+ }
+
+ if (SendBlock(0, &sBerryBlenderData->gameBlock, sizeof(sBerryBlenderData->gameBlock)))
+ sBerryBlenderData->gameEndState++;
+ }
+ else
+ {
+ sBerryBlenderData->smallBlock.time = sBerryBlenderData->gameFrameTime;
+ sBerryBlenderData->smallBlock.max_RPM = sBerryBlenderData->max_RPM;
+ if (SendBlock(0, &sBerryBlenderData->smallBlock, sizeof(sBerryBlenderData->smallBlock) + 32))
+ sBerryBlenderData->gameEndState++;
+ }
+ }
+ break;
+ case 4:
+ if (GetBlockReceivedStatus())
+ {
+ ResetBlockReceivedFlags();
+ sBerryBlenderData->gameEndState++;
+
+ if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ {
+ struct BlenderGameBlock *receivedBlock = (struct BlenderGameBlock*)(&gBlockRecvBuffer);
+
+ sBerryBlenderData->max_RPM = receivedBlock->timeRPM.max_RPM;
+ sBerryBlenderData->gameFrameTime = receivedBlock->timeRPM.time;
+
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ for (j = 0; j < BLENDER_SCORES_NO; j++)
+ sBerryBlenderData->scores[i][j] = receivedBlock->scores[i][j];
+ }
+ }
+ else
+ {
+ struct TimeAndRPM *receivedBlock = (struct TimeAndRPM*)(&gBlockRecvBuffer);
+
+ sBerryBlenderData->max_RPM = receivedBlock->max_RPM;
+ sBerryBlenderData->gameFrameTime = receivedBlock->time;
+ }
+ }
+ break;
+ case 5:
+ if (Blender_PrintBlendingRanking())
+ sBerryBlenderData->gameEndState++;
+ break;
+ case 6:
+ if (Blender_PrintBlendingResults())
+ {
+ if (gInGameOpponentsNo == 0)
+ IncrementGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS);
+ else
+ IncrementGameStat(GAME_STAT_POKEBLOCKS);
+
+ sBerryBlenderData->gameEndState++;
+ }
+ break;
+ case 7:
+ if (Blender_PrintText(&sBerryBlenderData->textState, sText_WouldLikeToBlendAnotherBerry, GetPlayerTextSpeed()))
+ sBerryBlenderData->gameEndState++;
+ break;
+ case 9:
+ sBerryBlenderData->yesNoAnswer = 0;
+ CreateYesNoMenu(&sBlender_YesNoWindowTemplate, 1, 0xD, 0);
+ sBerryBlenderData->gameEndState++;
+ break;
+ case 10:
+ switch (sub_8198C58())
+ {
+ case 1:
+ case -1:
+ sBerryBlenderData->yesNoAnswer = 1;
+ sBerryBlenderData->gameEndState++;
+ for (i = 0; i <BLENDER_MAX_PLAYERS; i++)
+ {
+ if (sBerryBlenderData->field_8E[i] != 0xFF)
+ {
+ PutWindowTilemap(i);
+ CopyWindowToVram(i, 3);
+ }
+ }
+ break;
+ case 0:
+ sBerryBlenderData->yesNoAnswer = 0;
+ sBerryBlenderData->gameEndState++;
+ for (i = 0; i <BLENDER_MAX_PLAYERS; i++)
+ {
+ if (sBerryBlenderData->field_8E[i] != 0xFF)
+ {
+ PutWindowTilemap(i);
+ CopyWindowToVram(i, 3);
+ }
+ }
+ break;
+ }
+ break;
+ case 11:
+ sub_8081F94(&gSendCmd[0]);
+ if (sBerryBlenderData->yesNoAnswer == 0)
+ {
+ if (IsBagPocketNonEmpty(BAG_BERRIES) == FALSE) // no berries
+ {
+ sBerryBlenderData->playAgainState = CANT_PLAY_NO_BERRIES;
+ gSendCmd[1] = 0x9999;
+ }
+ else if (GetFirstFreePokeblockSlot() == -1) // no space for pokeblocks
+ {
+ sBerryBlenderData->playAgainState = CANT_PLAY_NO_PKBLCK_SPACE;
+ gSendCmd[1] = 0xAAAA;
+ }
+ else
+ {
+ sBerryBlenderData->playAgainState = PLAY_AGAIN_OK;
+ gSendCmd[1] = 0x7779;
+ }
+ sBerryBlenderData->gameEndState++;
+ }
+ else
+ {
+ sBerryBlenderData->playAgainState = DONT_PLAY_AGAIN;
+ gSendCmd[1] = 0x8888;
+ sBerryBlenderData->gameEndState++;
+ }
+ break;
+ case 12:
+ if (gInGameOpponentsNo)
+ {
+ SetMainCallback2(CB2_HandlePlayerPlayAgainChoice);
+ sBerryBlenderData->gameEndState = 0;
+ sBerryBlenderData->mainState = 0;
+ }
+ else
+ {
+ sBerryBlenderData->gameEndState++;
+ }
+ break;
+ case 8:
+ sBerryBlenderData->gameEndState++;
+ break;
+ case 13:
+ if (Blender_PrintText(&sBerryBlenderData->textState, sText_CommunicationStandby, GetPlayerTextSpeed()))
+ {
+ SetMainCallback2(CB2_HandlePlayerLinkPlayAgainChoice);
+ sBerryBlenderData->gameEndState = 0;
+ sBerryBlenderData->mainState = 0;
+ }
+ break;
+ }
+
+ sub_808330C();
+ sub_8083230(sBerryBlenderData->field_4C);
+ sub_8082AD4();
+ Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+}
+
+static bool8 LinkPlayAgainHandleSaving(void)
+{
+ switch (sBerryBlenderData->field_1A0)
+ {
+ case 0:
+ sub_800ADF8();
+ sBerryBlenderData->field_1A0 = 1;
+ sBerryBlenderData->framesToWait = 0;
+ break;
+ case 1:
+ if (sub_800A520())
+ {
+ sBerryBlenderData->field_1A0++;
+ gSoftResetDisabled = TRUE;
+ }
+ break;
+ case 2:
+ sub_8153430();
+ sBerryBlenderData->field_1A0++;
+ sBerryBlenderData->framesToWait = 0;
+ break;
+ case 3:
+ if (++sBerryBlenderData->framesToWait == 10)
+ {
+ sub_800ADF8();
+ sBerryBlenderData->field_1A0++;
+ }
+ break;
+ case 4:
+ if (sub_800A520())
+ {
+ if (sub_8153474())
+ {
+ sBerryBlenderData->field_1A0 = 5;
+ }
+ else
+ {
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->field_1A0 = 3;
+ }
+ }
+ break;
+ case 5:
+ sBerryBlenderData->field_1A0++;
+ sBerryBlenderData->framesToWait = 0;
+ break;
+ case 6:
+ if (++sBerryBlenderData->framesToWait > 5)
+ {
+ gSoftResetDisabled = FALSE;
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+static void CB2_HandlePlayerLinkPlayAgainChoice(void)
+{
+ switch (sBerryBlenderData->gameEndState)
+ {
+ case 0:
+ if (sBerryBlenderData->field_64[0] == 0x2222)
+ {
+ sBerryBlenderData->gameEndState = 5;
+ }
+ else if (sBerryBlenderData->field_64[0] == 0x1111)
+ {
+ if (sBerryBlenderData->field_6C == 0x9999)
+ sBerryBlenderData->gameEndState = 2;
+ else if (sBerryBlenderData->field_6C == 0xAAAA)
+ sBerryBlenderData->gameEndState = 1;
+ else
+ sBerryBlenderData->gameEndState = 5;
+ }
+ break;
+ case 1:
+ sBerryBlenderData->gameEndState = 3;
+ StringCopy(gStringVar4, gLinkPlayers[sBerryBlenderData->field_6E].name);
+ StringAppend(gStringVar4, sText_ApostropheSPokeblockCaseIsFull);
+ break;
+ case 2:
+ sBerryBlenderData->gameEndState++;
+ StringCopy(gStringVar4, gLinkPlayers[sBerryBlenderData->field_6E].name);
+ StringAppend(gStringVar4, sText_HasNoBerriesToPut);
+ break;
+ case 3:
+ if (Blender_PrintText(&sBerryBlenderData->textState, gStringVar4, GetPlayerTextSpeed()))
+ {
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->gameEndState++;
+ }
+ break;
+ case 4:
+ if (++sBerryBlenderData->framesToWait > 60)
+ sBerryBlenderData->gameEndState = 5;
+ break;
+ case 5:
+ Blender_PrintText(&sBerryBlenderData->textState, gText_SavingDontTurnOff2, 0);
+ sub_800ADF8();
+ sBerryBlenderData->gameEndState++;
+ break;
+ case 6:
+ if (sub_800A520())
+ {
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->gameEndState++;
+ sBerryBlenderData->field_1A0 = 0;
+ }
+ break;
+ case 7:
+ if (LinkPlayAgainHandleSaving())
+ {
+ PlaySE(SE_SAVE);
+ sBerryBlenderData->gameEndState++;
+ }
+ break;
+ case 8:
+ sBerryBlenderData->gameEndState++;
+ sub_800ADF8();
+ break;
+ case 9:
+ if (sub_800A520())
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ sBerryBlenderData->gameEndState++;
+ }
+ break;
+ case 10:
+ if (!gPaletteFade.active)
+ {
+ if (sBerryBlenderData->field_64[0] == 0x2222)
+ {
+ FreeAllWindowBuffers();
+ UnsetBgTilemapBuffer(2);
+ UnsetBgTilemapBuffer(1);
+ FREE_AND_SET_NULL(sBerryBlenderData);
+ SetMainCallback2(DoBerryBlending);
+ }
+ else
+ {
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->gameEndState++;
+ }
+ }
+ break;
+ case 11:
+ if (++sBerryBlenderData->framesToWait > 30)
+ {
+ sub_800AC34();
+ sBerryBlenderData->gameEndState++;
+ }
+ break;
+ case 12:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ FREE_AND_SET_NULL(sBerryBlenderData);
+ SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ }
+ break;
+ }
+
+ sub_8082AD4();
+ Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+}
+
+static void CB2_HandlePlayerPlayAgainChoice(void)
+{
+ switch (sBerryBlenderData->gameEndState)
+ {
+ case 0:
+ if (sBerryBlenderData->playAgainState == PLAY_AGAIN_OK || sBerryBlenderData->playAgainState == DONT_PLAY_AGAIN)
+ sBerryBlenderData->gameEndState = 9;
+ if (sBerryBlenderData->playAgainState == CANT_PLAY_NO_BERRIES)
+ sBerryBlenderData->gameEndState = 2;
+ if (sBerryBlenderData->playAgainState == CANT_PLAY_NO_PKBLCK_SPACE)
+ sBerryBlenderData->gameEndState = 1;
+ break;
+ case 1:
+ sBerryBlenderData->gameEndState = 3;
+ sBerryBlenderData->textState = 0;
+ StringCopy(gStringVar4, sText_YourPokeblockCaseIsFull);
+ break;
+ case 2:
+ sBerryBlenderData->gameEndState++;
+ sBerryBlenderData->textState = 0;
+ StringCopy(gStringVar4, sText_RunOutOfBerriesForBlending);
+ break;
+ case 3:
+ if (Blender_PrintText(&sBerryBlenderData->textState, gStringVar4, GetPlayerTextSpeed()))
+ sBerryBlenderData->gameEndState = 9;
+ break;
+ case 9:
+ BeginFastPaletteFade(3);
+ sBerryBlenderData->gameEndState++;
+ break;
+ case 10:
+ if (!gPaletteFade.active)
+ {
+ if (sBerryBlenderData->playAgainState == PLAY_AGAIN_OK)
+ SetMainCallback2(DoBerryBlending);
+ else
+ SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+
+ FreeAllWindowBuffers();
+ UnsetBgTilemapBuffer(2);
+ UnsetBgTilemapBuffer(1);
+ FREE_AND_SET_NULL(sBerryBlenderData);
+ }
+ break;
+ }
+
+ sub_8082AD4();
+ Blender_DummiedOutFunc(sBerryBlenderData->bg_X, sBerryBlenderData->bg_Y);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+}
+
+static void sub_8082AD4(void)
+{
+ if (gReceivedRemoteLinkPlayers)
+ {
+ if (sub_80814B0(gRecvCmds[0][0], 0x2FFF, 0x2F00))
+ {
+ if (gRecvCmds[0][1] == 0x1111)
+ {
+ switch (gRecvCmds[0][2])
+ {
+ case 0x8888:
+ sBerryBlenderData->field_6C = 0x8888;
+ sBerryBlenderData->field_6E = gRecvCmds[0][3];
+ break;
+ case 0x9999:
+ sBerryBlenderData->field_6C = 0x9999;
+ sBerryBlenderData->field_6E = gRecvCmds[0][3];
+ break;
+ case 0xAAAA:
+ sBerryBlenderData->field_6C = 0xAAAA;
+ sBerryBlenderData->field_6E = gRecvCmds[0][3];
+ break;
+ }
+
+ sBerryBlenderData->field_64[0] = 0x1111;
+ }
+ else if (gRecvCmds[0][1] == 0x2222)
+ {
+ sBerryBlenderData->field_64[0] = 0x2222;
+ }
+ }
+ if (GetMultiplayerId() == 0 && sBerryBlenderData->field_64[0] != 0x1111 && sBerryBlenderData->field_64[0] != 0x2222)
+ {
+ u8 i;
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ if (sub_80814B0(gRecvCmds[i][0], 0x2FFF, 0x2F00))
+ {
+ switch (gRecvCmds[i][1])
+ {
+ case 0x8888:
+ sBerryBlenderData->field_64[i] = 0x8888;
+ break;
+ case 0x7779:
+ sBerryBlenderData->field_64[i] = 0x7779;
+ break;
+ case 0x9999:
+ sBerryBlenderData->field_64[i] = 0x9999;
+ break;
+ case 0xAAAA:
+ sBerryBlenderData->field_64[i] = 0xAAAA;
+ break;
+ }
+ }
+ }
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ if (sBerryBlenderData->field_64[i] == 0)
+ break;
+ }
+ if (i == GetLinkPlayerCount())
+ {
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ if (sBerryBlenderData->field_64[i] != 0x7779)
+ break;
+ }
+ sub_8081F94(&gSendCmd[0]);
+ if (i == GetLinkPlayerCount())
+ {
+ gSendCmd[1] = 0x2222;
+ }
+ else
+ {
+ gSendCmd[1] = 0x1111;
+ gSendCmd[2] = sBerryBlenderData->field_64[i];
+ gSendCmd[3] = i;
+ }
+ }
+ }
+ }
+}
+
+static void sub_8082CB4(struct BgAffineSrcData *dest)
+{
+ struct BgAffineSrcData affineSrc;
+
+ affineSrc.texX = 0x7800;
+ affineSrc.texY = 0x5000;
+ affineSrc.scrX = 0x78 - sBerryBlenderData->bg_X;
+ affineSrc.scrY = 0x50 - sBerryBlenderData->bg_Y;
+ affineSrc.sx = sBerryBlenderData->field_11A;
+ affineSrc.sy = sBerryBlenderData->field_11A;
+ affineSrc.alpha = sBerryBlenderData->arrowPos;
+
+ *dest = affineSrc;
+}
+
+u16 GetBlenderArrowPosition(void)
+{
+ return sBerryBlenderData->arrowPos;
+}
+
+static void sub_8082D28(void)
+{
+ u8 playerId = 0;
+
+ if (gReceivedRemoteLinkPlayers != 0)
+ playerId = GetMultiplayerId();
+
+ if (gLinkVSyncDisabled && gReceivedRemoteLinkPlayers != 0)
+ {
+ if (playerId == 0)
+ {
+ sBerryBlenderData->arrowPos += sBerryBlenderData->field_4C;
+ gSendCmd[5] = sBerryBlenderData->field_116;
+ gSendCmd[6] = sBerryBlenderData->arrowPos;
+ sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ }
+ else
+ {
+ if ((gRecvCmds[0][0] & 0xFF00) == 0x4400)
+ {
+ sBerryBlenderData->field_116 = gRecvCmds[0][5];
+ sBerryBlenderData->arrowPos = gRecvCmds[0][6];
+ sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ }
+ }
+ }
+ else
+ {
+ sBerryBlenderData->arrowPos += sBerryBlenderData->field_4C;
+ sub_8082CB4(&sBerryBlenderData->bgAffineSrc);
+ }
+}
+
+static void BerryBlender_SetBackgroundsPos(void)
+{
+ SetGpuReg(REG_OFFSET_BG1HOFS, sBerryBlenderData->bg_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, sBerryBlenderData->bg_Y);
+
+ SetGpuReg(REG_OFFSET_BG0HOFS, sBerryBlenderData->bg_X);
+ SetGpuReg(REG_OFFSET_BG0VOFS, sBerryBlenderData->bg_Y);
+}
+
+static void sub_8082E3C(struct Sprite* sprite)
+{
+ sprite->data2 += sprite->data0;
+ sprite->data3 += sprite->data1;
+ sprite->pos2.x = sprite->data2 / 8;
+ sprite->pos2.y = sprite->data3 / 8;
+
+ if (sprite->animEnded)
+ DestroySprite(sprite);
+}
+
+static void sub_8082E84(void)
+{
+ s32 limit = (Random() % 2) + 1;
+ s32 i;
+
+ for (i = 0; i < limit; i++)
+ {
+ u16 rand;
+ s32 x, y;
+ u8 spriteId;
+
+ rand = sBerryBlenderData->arrowPos + (Random() % 20);
+
+ x = gSineTable[(rand & 0xFF) + 64] / 4;
+ y = gSineTable[(rand & 0xFF)] / 4;
+
+ spriteId = CreateSprite(&sUnknown_08339BE0, x + 120, y + 80, 1);
+ gSprites[spriteId].data0 = 16 - (Random() % 32);
+ gSprites[spriteId].data1 = 16 - (Random() % 32);
+
+ gSprites[spriteId].callback = sub_8082E3C;
+ }
+}
+
+static void sub_8082F68(struct Sprite* sprite)
+{
+ sprite->data0++;
+ sprite->pos2.y = -(sprite->data0 / 3);
+
+ if (sprite->animEnded)
+ DestroySprite(sprite);
+}
+
+static void sub_8082F9C(struct Sprite* sprite)
+{
+ sprite->data0++;
+ sprite->pos2.y = -(sprite->data0 * 2);
+
+ if (sprite->pos2.y < -12)
+ sprite->pos2.y = -12;
+ if (sprite->animEnded)
+ DestroySprite(sprite);
+}
+
+static void Blender_SetBankBerryData(u8 bank, u16 itemId)
+{
+ sBerryBlenderData->chosenItemId[bank] = itemId;
+ Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[bank], itemId);
+}
+
+static void sub_8083010(struct Sprite* sprite)
+{
+ switch (sprite->data0)
+ {
+ case 0:
+ sprite->data1 += 8;
+ if (sprite->data1 > 88)
+ {
+ sprite->data1 = 88;
+ sprite->data0++;
+ PlaySE(SE_KON);
+ }
+ break;
+ case 1:
+ sprite->data2 += 1;
+ if (sprite->data2 > 20)
+ {
+ sprite->data0++;
+ sprite->data2 = 0;
+ }
+ break;
+ case 2:
+ sprite->data1 += 4;
+ if (sprite->data1 > 176)
+ {
+ if (++sprite->data3 == 3)
+ {
+ DestroySprite(sprite);
+ CreateSprite(&sUnknown_08339C60, 120, -20, 2);
+ }
+ else
+ {
+ sprite->data0 = 0;
+ sprite->data1 = -16;
+ StartSpriteAnim(sprite, sprite->data3);
+ }
+ }
+ break;
+ }
+
+ sprite->pos2.y = sprite->data1;
+}
+
+static void sub_80830C0(struct Sprite* sprite)
+{
+ switch (sprite->data0)
+ {
+ case 0:
+ sprite->data1 += 8;
+ if (sprite->data1 > 92)
+ {
+ sprite->data1 = 92;
+ sprite->data0++;
+ PlaySE(SE_PIN);
+ }
+ break;
+ case 1:
+ sprite->data2 += 1;
+ if (sprite->data2 > 20)
+ sprite->data0++;
+ break;
+ case 2:
+ sprite->data1 += 4;
+ if (sprite->data1 > 176)
+ {
+ sBerryBlenderData->mainState++;
+ DestroySprite(sprite);
+ }
+ break;
+ }
+
+ sprite->pos2.y = sprite->data1;
+}
+
+static void sub_8083140(u16 a0, u16 a1)
+{
+ if (sBerryBlenderData->field_118 < a0)
+ {
+ sBerryBlenderData->field_118 += 2;
+ sub_8083170(sBerryBlenderData->field_118, a1);
+ }
+}
+
+static void sub_8083170(u16 a0, u16 a1)
+{
+ s32 var1, var2, var3, var4;
+ u16 *vram;
+
+ vram = (u16*)(VRAM + 0x6000);
+ var1 = (a0 * 64) / a1;
+ var2 = var1 / 8;
+ for (var4 = 0; var4 < var2; var4++)
+ {
+ vram[11 + var4] = 0x80E9;
+ vram[43 + var4] = 0x80F9;
+ }
+ var3 = var1 % 8;
+ if (var3 != 0)
+ {
+ vram[11 + var4] = var3 + 0x80E1;
+ vram[43 + var4] = var3 + 0x80F1;
+ var4++;
+ }
+ for (; var4 < 8; var4++)
+ {
+ vram[11 + var4] = 0x80E1;
+ vram[43 + var4] = 0x80F1;
+ }
+}
+
+static u32 sub_8083210(u16 a0)
+{
+ return 0x57E40 * a0 / 0x10000;
+}
+
+static void sub_8083230(u16 a0)
+{
+ u8 i;
+ u8 palAdders[5];
+
+ u32 var = sub_8083210(a0);
+ if (sBerryBlenderData->max_RPM < var)
+ sBerryBlenderData->max_RPM = var;
+ for (i = 0; i < 5; i++)
+ {
+ palAdders[i] = var % 10;
+ var /= 10;
+ }
+ *((u16*)(VRAM + 0x6458)) = palAdders[4] + 0x8072;
+ *((u16*)(VRAM + 0x645A)) = palAdders[3] + 0x8072;
+ *((u16*)(VRAM + 0x645C)) = palAdders[2] + 0x8072;
+ *((u16*)(VRAM + 0x6460)) = palAdders[1] + 0x8072;
+ *((u16*)(VRAM + 0x6462)) = palAdders[0] + 0x8072;
+}
+
+static void sub_80832BC(s16* a0, u16 a1)
+{
+ if (*a0 == 0)
+ *a0 = (Random() % a1) - (a1 / 2);
+}
+
+static void sub_80832E8(s16* a0)
+{
+ if (*a0 < 0)
+ (*a0)++;
+ if (*a0 > 0)
+ (*a0)--;
+}
+
+static void sub_808330C(void)
+{
+ sub_80832E8(&sBerryBlenderData->bg_X);
+ sub_80832E8(&sBerryBlenderData->bg_Y);
+}
+
+static void sub_8083334(s16* a0, u16 a1)
+{
+ s32 var;
+
+ if (a1 < 10)
+ var = 16;
+ else
+ var = 8;
+
+ if (*a0 == 0)
+ {
+ *a0 = (Random() % var) - (var / 2);
+ }
+ else
+ {
+ if (*a0 < 0)
+ (*a0)++;
+ if (*a0 > 0)
+ (*a0)--;
+ }
+}
+
+static bool8 sub_8083380(void)
+{
+ if (sBerryBlenderData->framesToWait == 0)
+ {
+ sBerryBlenderData->bg_X = 0;
+ sBerryBlenderData->bg_Y = 0;
+ }
+
+ sBerryBlenderData->framesToWait++;
+ sub_8083334(&sBerryBlenderData->bg_X, sBerryBlenderData->framesToWait);
+ sub_8083334(&sBerryBlenderData->bg_Y, sBerryBlenderData->framesToWait);
+
+ if (sBerryBlenderData->framesToWait == 20)
+ {
+ sBerryBlenderData->bg_X = 0;
+ sBerryBlenderData->bg_Y = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void sub_80833F8(struct Sprite* sprite)
+{
+ sprite->pos2.x = -(sBerryBlenderData->bg_X);
+ sprite->pos2.y = -(sBerryBlenderData->bg_Y);
+}
+
+static void TryUpdateBerryBlenderRecord(void)
+{
+ if (gSaveBlock1Ptr->berryBlenderRecords[sBerryBlenderData->playersNo - 2] < sBerryBlenderData->max_RPM)
+ gSaveBlock1Ptr->berryBlenderRecords[sBerryBlenderData->playersNo - 2] = sBerryBlenderData->max_RPM;
+}
+
+static bool8 Blender_PrintBlendingResults(void)
+{
+ u16 i;
+ s32 xPos, yPos;
+
+ struct Pokeblock pokeblock;
+ u8 flavors[6];
+ u8 text[40];
+ u16 berryIds[4]; // unused
+
+ switch (sBerryBlenderData->mainState)
+ {
+ case 0:
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->framesToWait = 17;
+ break;
+ case 1:
+ sBerryBlenderData->framesToWait -= 10;
+ if (sBerryBlenderData->framesToWait < 0)
+ {
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->mainState++;
+ }
+ break;
+ case 2:
+ if (++sBerryBlenderData->framesToWait > 20)
+ {
+ for (i = 0; i < BLENDER_SCORES_NO; i++)
+ DestroySprite(&gSprites[sBerryBlenderData->scoreIconIds[i]]);
+
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->mainState++;
+ }
+ break;
+ case 3:
+ {
+ u16 minutes, seconds;
+ u8 *txtPtr;
+
+ xPos = GetStringCenterAlignXOffset(1, sText_BlendingResults, 0xA8);
+ Blender_AddTextPrinter(5, sText_BlendingResults, xPos, 1, TEXT_SPEED_FF, 0);
+
+ if (sBerryBlenderData->playersNo == 4)
+ yPos = 17;
+ else
+ yPos = 21;
+
+ for (i = 0; i < sBerryBlenderData->playersNo; yPos += 16, i++)
+ {
+ u8 place = sBerryBlenderData->playerPlaces[i];
+
+ ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, i + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ StringAppend(sBerryBlenderData->stringVar, sText_Dot);
+ StringAppend(sBerryBlenderData->stringVar, gText_Space);
+ StringAppend(sBerryBlenderData->stringVar, gLinkPlayers[place].name);
+ Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 8, yPos, TEXT_SPEED_FF, 3);
+
+ StringCopy(sBerryBlenderData->stringVar, sBerryBlenderData->blendedBerries[place].name);
+ ConvertInternationalString(sBerryBlenderData->stringVar, gLinkPlayers[place].language);
+ StringAppend(sBerryBlenderData->stringVar, sText_SpaceBerry);
+ Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0x54, yPos, TEXT_SPEED_FF, 3);
+ }
+
+ Blender_AddTextPrinter(5, sText_MaximumSpeed, 0, 0x51, TEXT_SPEED_FF, 3);
+ ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, sBerryBlenderData->max_RPM / 100, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ StringAppend(sBerryBlenderData->stringVar, sText_Dot);
+
+ ConvertIntToDecimalStringN(text, sBerryBlenderData->max_RPM % 100, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringAppend(sBerryBlenderData->stringVar, text);
+ StringAppend(sBerryBlenderData->stringVar, sText_RPM);
+
+ xPos = GetStringRightAlignXOffset(1, sBerryBlenderData->stringVar, 0xA8);
+ Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, xPos, 0x51, TEXT_SPEED_FF, 3);
+ Blender_AddTextPrinter(5, sText_Time, 0, 0x61, TEXT_SPEED_FF, 3);
+
+ seconds = (sBerryBlenderData->gameFrameTime / 60) % 60;
+ minutes = (sBerryBlenderData->gameFrameTime / (60 * 60));
+
+ ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ txtPtr = StringAppend(sBerryBlenderData->stringVar, sText_Min);
+
+ ConvertIntToDecimalStringN(txtPtr, seconds, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringAppend(sBerryBlenderData->stringVar, sText_Sec);
+
+ xPos = GetStringRightAlignXOffset(1, sBerryBlenderData->stringVar, 0xA8);
+ Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, xPos, 0x61, TEXT_SPEED_FF, 3);
+
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->mainState++;
+
+ CopyWindowToVram(5, 2);
+ }
+ break;
+ case 4:
+ if (gMain.newKeys & A_BUTTON)
+ sBerryBlenderData->mainState++;
+ break;
+ case 5:
+ sub_8198070(5, 1);
+
+ for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
+ {
+ if (sBerryBlenderData->chosenItemId[i] != 0)
+ berryIds[i] = sBerryBlenderData->chosenItemId[i] - FIRST_BERRY_INDEX;
+ if (sBerryBlenderData->field_8E[i] != 0xFF)
+ {
+ PutWindowTilemap(i);
+ CopyWindowToVram(i, 3);
+ }
+ }
+
+ sub_8081E20();
+
+ Blender_CalculatePokeblock(sBerryBlenderData->blendedBerries, &pokeblock, sBerryBlenderData->playersNo, flavors, sBerryBlenderData->max_RPM);
+ Blender_PrintMadePokeblockString(&pokeblock, sBerryBlenderData->stringVar);
+ TryAddContestLinkTvShow(&pokeblock, &sBerryBlenderData->tvBlender);
+
+ CreateTask(sub_8083F3C, 6);
+ sub_80EECEC();
+
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ AddPokeblock(&pokeblock);
+
+ sBerryBlenderData->textState = 0;
+ sBerryBlenderData->mainState++;
+ break;
+ case 6:
+ if (Blender_PrintText(&sBerryBlenderData->textState, sBerryBlenderData->stringVar, GetPlayerTextSpeed()))
+ {
+ TryUpdateBerryBlenderRecord();
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+static void Blender_PrintMadePokeblockString(struct Pokeblock *pokeblock, u8 *dst)
+{
+ u8 text[12];
+ u8 flavorLvl, feel;
+
+ dst[0] = EOS;
+ StringCopy(dst, gPokeblockNames[pokeblock->color]);
+ StringAppend(dst, sText_WasMade);
+ StringAppend(dst, sText_NewLine);
+
+ flavorLvl = GetHighestPokeblocksFlavorLevel(pokeblock);
+ feel = GetPokeblocksFeel(pokeblock);
+
+ StringAppend(dst, sText_TheLevelIs);
+ ConvertIntToDecimalStringN(text, flavorLvl, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringAppend(dst, text);
+
+ StringAppend(dst, sText_TheFeelIs);
+ ConvertIntToDecimalStringN(text, feel, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringAppend(dst, text);
+
+ StringAppend(dst, sText_Dot2);
+ StringAppend(dst, sText_NewParagraph);
+}
+
+static void Blender_SortBasedOnPoints(u8 *places, u8 playersNum, u32 *scores)
+{
+ s32 i, j;
+
+ for (i = 0; i < playersNum; i++)
+ {
+ for (j = 0; j < playersNum; j++)
+ {
+ if (scores[places[i]] > scores[places[j]])
+ {
+ u8 temp = places[i];
+ places[i] = places[j];
+ places[j] = temp;
+ }
+ }
+ }
+}
+
+static void Blender_SortScores(void)
+{
+ u8 playerId;
+ u8 i;
+ u8 places[BLENDER_MAX_PLAYERS];
+ u32 points[BLENDER_MAX_PLAYERS];
+
+ for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ places[i] = i;
+ for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ {
+ points[i] = 1000000 * sBerryBlenderData->scores[i][BLENDER_SCORE_BEST];
+ points[i] += 1000 * sBerryBlenderData->scores[i][BLENDER_SCORE_GOOD];
+ points[i] += 1000 - sBerryBlenderData->scores[i][BLENDER_SCORE_MISS];
+ }
+ Blender_SortBasedOnPoints(places, sBerryBlenderData->playersNo, points);
+ for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ sBerryBlenderData->playerPlaces[i] = places[i];
+
+ if (gReceivedRemoteLinkPlayers == 0)
+ playerId = 0;
+ else
+ playerId = GetMultiplayerId();
+
+ for (i = 0; i < sBerryBlenderData->playersNo; i++)
+ {
+ if (sBerryBlenderData->playerPlaces[i] == playerId)
+ sBerryBlenderData->field_1A4 = i;
+ }
+}
+
+static bool8 Blender_PrintBlendingRanking(void)
+{
+ u16 i;
+ s32 xPos, yPos;
+
+ switch (sBerryBlenderData->mainState)
+ {
+ case 0:
+ sBerryBlenderData->mainState++;
+ sBerryBlenderData->framesToWait = 255;
+ break;
+ case 1:
+ sBerryBlenderData->framesToWait -= 10;
+ if (sBerryBlenderData->framesToWait < 0)
+ {
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->mainState++;
+ }
+ break;
+ case 2:
+ if (++sBerryBlenderData->framesToWait > 20)
+ {
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->mainState++;
+ }
+ break;
+ case 3:
+ SetWindowBorderStyle(5, 0, 1, 0xD);
+ xPos = GetStringCenterAlignXOffset(1, sText_Ranking, 0xA8);
+ Blender_AddTextPrinter(5, sText_Ranking, xPos, 1, TEXT_SPEED_FF, 0);
+
+ sBerryBlenderData->scoreIconIds[BLENDER_SCORE_BEST] = CreateSprite(&sUnknown_08339B40, 128, 52, 0);
+ StartSpriteAnim(&gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_BEST]], 3);
+ gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_BEST]].callback = SpriteCallbackDummy;
+
+ sBerryBlenderData->scoreIconIds[BLENDER_SCORE_GOOD] = CreateSprite(&sUnknown_08339B40, 160, 52, 0);
+ gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_GOOD]].callback = SpriteCallbackDummy;
+
+ sBerryBlenderData->scoreIconIds[BLENDER_SCORE_MISS] = CreateSprite(&sUnknown_08339B40, 192, 52, 0);
+ StartSpriteAnim(&gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_MISS]], 1);
+ gSprites[sBerryBlenderData->scoreIconIds[BLENDER_SCORE_MISS]].callback = SpriteCallbackDummy;
+
+ Blender_SortScores();
+
+ for (yPos = 0x29, i = 0; i < sBerryBlenderData->playersNo; yPos += 0x10, i++)
+ {
+ u8 place = sBerryBlenderData->playerPlaces[i];
+
+ ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, i + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ StringAppend(sBerryBlenderData->stringVar, sText_Dot);
+ StringAppend(sBerryBlenderData->stringVar, gText_Space);
+ StringAppend(sBerryBlenderData->stringVar, gLinkPlayers[place].name);
+ Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0, yPos, TEXT_SPEED_FF, 3);
+
+ ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, sBerryBlenderData->scores[place][BLENDER_SCORE_BEST], STR_CONV_MODE_RIGHT_ALIGN, 3);
+ Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0x4E, yPos, TEXT_SPEED_FF, 3);
+
+ ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, sBerryBlenderData->scores[place][BLENDER_SCORE_GOOD], STR_CONV_MODE_RIGHT_ALIGN, 3);
+ Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0x6E, yPos, TEXT_SPEED_FF, 3);
+
+ ConvertIntToDecimalStringN(sBerryBlenderData->stringVar, sBerryBlenderData->scores[place][BLENDER_SCORE_MISS], STR_CONV_MODE_RIGHT_ALIGN, 3);
+ Blender_AddTextPrinter(5, sBerryBlenderData->stringVar, 0x8E, yPos, TEXT_SPEED_FF, 3);
+ }
+
+ PutWindowTilemap(5);
+ CopyWindowToVram(5, 3);
+
+ sBerryBlenderData->framesToWait = 0;
+ sBerryBlenderData->mainState++;
+ break;
+ case 4:
+ if (++sBerryBlenderData->framesToWait > 20)
+ sBerryBlenderData->mainState++;
+ break;
+ case 5:
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sBerryBlenderData->mainState++;
+ }
+ break;
+ case 6:
+ sBerryBlenderData->mainState = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void ShowBerryBlenderRecordWindow(void)
+{
+ s32 i;
+ s32 xPos, yPos;
+ struct WindowTemplate winTemplate;
+ u8 text[32];
+
+ winTemplate = sBlenderRecordWindowTemplate;
+ gResultsWindowId = AddWindow(&winTemplate);
+ sub_81973FC(gResultsWindowId, 0);
+ FillWindowPixelBuffer(gResultsWindowId, 0x11);
+
+ xPos = GetStringCenterAlignXOffset(1, gText_BlenderMaxSpeedRecord, 0x90);
+ PrintTextOnWindow(gResultsWindowId, 1, gText_BlenderMaxSpeedRecord, xPos, 1, 0, NULL);
+ PrintTextOnWindow(gResultsWindowId, 1, gText_234Players, 4, 0x29, 0, NULL);
+
+ for (i = 0, yPos = 0x29; i < BLENDER_SCORES_NO; i++)
+ {
+ u8 *txtPtr;
+ u32 record;
+
+ record = gSaveBlock1Ptr->berryBlenderRecords[i];
+
+ txtPtr = ConvertIntToDecimalStringN(text, record / 100, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ txtPtr = StringAppend(txtPtr, sText_Dot);
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, record % 100, STR_CONV_MODE_LEADING_ZEROS, 2);
+ txtPtr = StringAppend(txtPtr, sText_RPM);
+
+ xPos = GetStringRightAlignXOffset(1, text, 0x8C);
+ PrintTextOnWindow(gResultsWindowId, 1, text, xPos, yPos + (i * 16), 0, NULL);
+ }
+
+ PutWindowTilemap(gResultsWindowId);
+ CopyWindowToVram(gResultsWindowId, 3);
+}
+
+static void sub_8083F3C(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ {
+ PlayFanfare(BGM_FANFA1);
+ gTasks[taskId].data[0]++;
+ }
+ if (IsFanfareTaskInactive())
+ {
+ PlayBGM(sBerryBlenderData->field_154);
+ DestroyTask(taskId);
+ }
+}
+
+static bool32 TryAddContestLinkTvShow(struct Pokeblock *pokeblock, struct TvBlenderStruct *tvBlender)
+{
+ u8 flavorLevel = GetHighestPokeblocksFlavorLevel(pokeblock);
+ u16 sheen = (flavorLevel * 10) / GetPokeblocksFeel(pokeblock);
+
+ tvBlender->pokeblockSheen = sheen;
+ tvBlender->pokeblockColor = pokeblock->color;
+ tvBlender->name[0] = EOS;
+
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ if (sBerryBlenderData->field_1A4 == 0 && sheen > 20)
+ {
+ StringCopy(tvBlender->name, gLinkPlayers[sBerryBlenderData->playerPlaces[sBerryBlenderData->playersNo - 1]].name);
+ tvBlender->pokeblockFlavor = GetPokeblocksFlavor(pokeblock);
+ if (Put3CheersForPokeblocksOnTheAir(tvBlender->name, tvBlender->pokeblockFlavor,
+ tvBlender->pokeblockColor, tvBlender->pokeblockSheen,
+ gLinkPlayers[sBerryBlenderData->playerPlaces[sBerryBlenderData->playersNo - 1]].language))
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+ else if (sBerryBlenderData->field_1A4 == sBerryBlenderData->playersNo - 1 && sheen <= 20)
+ {
+ StringCopy(tvBlender->name, gLinkPlayers[sBerryBlenderData->playerPlaces[0]].name);
+ tvBlender->pokeblockFlavor = GetPokeblocksFlavor(pokeblock);
+ if (Put3CheersForPokeblocksOnTheAir(tvBlender->name, tvBlender->pokeblockFlavor,
+ tvBlender->pokeblockColor, tvBlender->pokeblockSheen,
+ gLinkPlayers[sBerryBlenderData->playerPlaces[0]].language))
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+ }
+
+ return FALSE;
+}
+
+static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s32 speed, s32 caseId)
+{
+ struct TextColor txtColor;
+ u32 letterSpacing = 0;
+
+ switch (caseId)
+ {
+ case 0:
+ case 3:
+ txtColor.fgColor = 1;
+ txtColor.bgColor = 2;
+ txtColor.shadowColor = 3;
+ break;
+ case 1:
+ txtColor.fgColor = 0;
+ txtColor.bgColor = 2;
+ txtColor.shadowColor = 3;
+ break;
+ case 2:
+ txtColor.fgColor = 0;
+ txtColor.bgColor = 4;
+ txtColor.shadowColor = 5;
+ break;
+ }
+
+ if (caseId != 3)
+ {
+ FillWindowPixelBuffer(windowId, txtColor.fgColor | (txtColor.fgColor << 4));
+ }
+
+ AddTextPrinterParametrized2(windowId, 1, x, y, letterSpacing, 1, &txtColor, speed, string);
+}
+
+static bool32 Blender_PrintText(s16 *textState, const u8 *string, s32 textSpeed)
+{
+ switch (*textState)
+ {
+ case 0:
+ sub_8197B1C(4, FALSE, 0x14, 0xF);
+ Blender_AddTextPrinter(4, string, 0, 1, textSpeed, 0);
+ PutWindowTilemap(4);
+ CopyWindowToVram(4, 3);
+ (*textState)++;
+ break;
+ case 1:
+ if (!IsTextPrinterActive(4))
+ {
+ *textState = 0;
+ return TRUE;
+ }
+ break;
+ }
-// .text
+ return FALSE;
+}
diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c
index eca20af9d..bba39c3eb 100644
--- a/src/berry_fix_program.c
+++ b/src/berry_fix_program.c
@@ -1,5 +1,3 @@
-
-// Includes
#include "global.h"
#include "gpu_regs.h"
#include "multiboot.h"
@@ -10,6 +8,7 @@
#include "task.h"
#include "unknown_task.h"
#include "window.h"
+#include "text.h"
#include "menu.h"
#include "m4a.h"
diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c
index 3192e0e11..d5e173ee8 100755
--- a/src/clear_save_data_screen.c
+++ b/src/clear_save_data_screen.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "task.h"
-#include "menu.h"
#include "text.h"
+#include "menu.h"
#include "sound.h"
#include "main.h"
#include "save.h"
diff --git a/src/coins.c b/src/coins.c
index e1694b29c..50c31cac0 100644
--- a/src/coins.c
+++ b/src/coins.c
@@ -2,8 +2,9 @@
#include "coins.h"
#include "text.h"
#include "window.h"
-#include "text_window.h"
+#include "strings.h"
#include "string_util.h"
+#include "new_menu_helpers.h"
#include "menu.h"
#include "international_string_util.h"
@@ -11,10 +12,6 @@
EWRAM_DATA u8 sCoinsWindowId = 0;
-extern void sub_819746C(u8 windowId, bool8 copyToVram);
-
-extern const u8 gText_Coins[];
-
void PrintCoinsString(u32 coinAmount)
{
u32 xAlign;
@@ -53,7 +50,6 @@ void SetCoins(u16 coinAmount)
gSaveBlock1Ptr->coins = coinAmount ^ gSaveBlock2Ptr->encryptionKey;
}
-/* Can't match it lol
bool8 GiveCoins(u16 toAdd)
{
u16 newAmount;
@@ -67,10 +63,22 @@ bool8 GiveCoins(u16 toAdd)
}
else
{
- newAmount = ownedCoins + toAdd;
- if (newAmount > MAX_COINS)
- newAmount = MAX_COINS;
+ ownedCoins += toAdd;
+ if (ownedCoins > MAX_COINS)
+ ownedCoins = MAX_COINS;
+ newAmount = ownedCoins;
}
SetCoins(newAmount);
return TRUE;
-}*/
+}
+
+bool8 TakeCoins(u16 toSub)
+{
+ u16 ownedCoins = GetCoins();
+ if (ownedCoins >= toSub)
+ {
+ SetCoins(ownedCoins - toSub);
+ return TRUE;
+ }
+ return FALSE;
+}
diff --git a/src/decompress.c b/src/decompress.c
index 9210799ec..e2ae6ce83 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -459,10 +459,9 @@ _08034964:\n\
.syntax divided");
}
-u32 sub_8034974(void* ptr)
+u32 sub_8034974(const u8 *ptr)
{
- u8* ptr_ = (u8*)(ptr);
- return (ptr_[3] << 16) | (ptr_[2] << 8) | (ptr_[1]);
+ return (ptr[3] << 16) | (ptr[2] << 8) | (ptr[1]);
}
bool8 LoadCompressedObjectPicUsingHeap(const struct CompressedSpriteSheet* src)
diff --git a/src/decoration.c b/src/decoration.c
index adcdc583b..8093825f4 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "decompress.h"
#include "malloc.h"
+#include "text.h"
#include "string_util.h"
#include "international_string_util.h"
#include "script.h"
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index a3f7c2ab0..d9d77d2e9 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -57,8 +57,6 @@ extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
extern const u8 gText_HatchedFromEgg[];
extern const u8 gText_NickHatchPrompt[];
-extern u8* GetMonNick(struct Pokemon* mon, u8* dst);
-extern u8* GetBoxMonNick(struct BoxPokemon* boxMon, u8* dst);
extern u8 sav1_map_get_name(void);
extern s8 sub_8198C58(void);
extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8);
@@ -75,7 +73,6 @@ extern void play_some_sound(void);
extern void copy_decompressed_tile_data_to_vram_autofree(u8 bg_id, const void* src, u16 size, u16 offset, u8 mode);
extern void CreateYesNoMenu(const struct WindowTemplate*, u16, u8, u8);
extern void DoNamingScreen(u8, const u8*, u16, u8, u32, MainCallback);
-extern void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor* colors, s8 speed, u8 *str);
extern u16 sub_80D22D0(void);
extern u8 CountPartyAliveNonEggMonsExcept(u8);
diff --git a/src/international_string_util.c b/src/international_string_util.c
index 81985d614..89b4a7a69 100644
--- a/src/international_string_util.c
+++ b/src/international_string_util.c
@@ -1,6 +1,6 @@
#include "global.h"
-#include "international_string_util.h"
#include "text.h"
+#include "international_string_util.h"
extern s32 convert_pixel_width_to_tile_width(s32 a0); // script menu
diff --git a/src/item.c b/src/item.c
index 32347623e..5cf9edf6c 100644
--- a/src/item.c
+++ b/src/item.c
@@ -5,7 +5,7 @@
#include "text.h"
#include "event_data.h"
-extern void ApplyNewEncyprtionKeyToHword(u16* hword, u32 newKey);
+extern void ApplyNewEncryptionKeyToHword(u16* hword, u32 newKey);
extern bool8 InBattlePyramid(void);
extern const u8 gText_PokeBalls[];
@@ -45,19 +45,19 @@ void SetBagItemId(u16* slot, u16 newItemId)
*slot = newItemId;
}
-void ApplyNewEncyprtionKeyToBagItems(u32 newKey)
+void ApplyNewEncryptionKeyToBagItems(u32 newKey)
{
u32 pocket, item;
for (pocket = 0; pocket < 5; pocket++)
{
for (item = 0; item < gBagPockets[pocket].capacity; item++)
- ApplyNewEncyprtionKeyToHword(&(gBagPockets[pocket].itemSlots[item].quantity), newKey);
+ ApplyNewEncryptionKeyToHword(&(gBagPockets[pocket].itemSlots[item].quantity), newKey);
}
}
-void ApplyNewEncyprtionKeyToBagItems_(u32 newKey) // really GF?
+void ApplyNewEncryptionKeyToBagItems_(u32 newKey) // really GF?
{
- ApplyNewEncyprtionKeyToBagItems(newKey);
+ ApplyNewEncryptionKeyToBagItems(newKey);
}
// TODO: move those max values to defines
diff --git a/src/load_save.c b/src/load_save.c
index 68d978e3d..1d78bda50 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -1,21 +1,36 @@
-#include "global.h"
+#include "global.h"
#include "gba/flash_internal.h"
#include "load_save.h"
#include "main.h"
#include "pokemon.h"
#include "rng.h"
-#include "malloc.h"
extern void* gUnknown_0203CF5C;
extern bool16 IdentifyFlash(void);
extern void SetBagItemsPointers(void);
extern void SetDecorationInventoriesPointers(void);
+extern void ApplyNewEncryptionKeyToGameStats(u32 key);
+extern void ApplyNewEncryptionKeyToBagItems(u32 newKey);
+extern void ApplyNewEncryptionKeyToBagItems_(u32 key);
+extern void ApplyNewEncryptionKeyToBerryPowder(u32 key);
+extern void sub_8084FAC(int unused);
-void ApplyNewEncyprtionKeyToAllEncryptedData(u32 encryptionKey);
+// this is probably wrong or misleading due to it being used in ResetHeap...
+extern void InitHeap(void *pointer, u32 size);
#define SAVEBLOCK_MOVE_RANGE 128
+struct LoadedSaveData
+{
+ /*0x0000*/ struct ItemSlot items[30];
+ /*0x0078*/ struct ItemSlot keyItems[30];
+ /*0x00F0*/ struct ItemSlot pokeBalls[16];
+ /*0x0130*/ struct ItemSlot TMsHMs[64];
+ /*0x0230*/ struct ItemSlot berries[46];
+ /*0x02E8*/ struct MailStruct mail[16];
+};
+
EWRAM_DATA struct SaveBlock2 gSaveblock2 = {0};
EWRAM_DATA u8 gSaveblock2_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
@@ -25,6 +40,11 @@ EWRAM_DATA u8 gSaveblock1_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
EWRAM_DATA struct PokemonStorage gPokemonStorage = {0};
EWRAM_DATA u8 gSaveblock3_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
+EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0};
+EWRAM_DATA u32 gLastEncryptionKey = {0};
+
+void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey);
+
void CheckForFlashMemory(void)
{
if (!IdentifyFlash())
@@ -60,18 +80,45 @@ void SetSaveBlocksPointers(u16 offset)
SetDecorationInventoriesPointers();
}
+// stuff i used to try and match MoveSaveBlocks_ResetHeap
struct SaveBlocksInOne
{
struct SaveBlock2 sav2;
struct SaveBlock1 sav1;
struct PokemonStorage sav3;
};
+
+extern struct SaveBlocksInOne gHeap;
+
+#define ewram_addr 0x02000000 // oh no...
+#define ewram_addr2 0x02000f2c
+#define ewram_addr3 0x02004cb4
+
+#define eSaveBlockCopy (*(struct SaveBlocksInOne *)(ewram_addr + 0x0))
+#define eSaveBlock2Copy (*(struct SaveBlock2 *)((void*)(ewram_addr + 0x0)))
+#define eSaveBlock1Copy (*(struct SaveBlock1 *)((void*)(ewram_addr + sizeof(struct SaveBlock2))))
+#define eSaveBlock3Copy (*(struct PokemonStorage *)((void*)(ewram_addr + sizeof(struct SaveBlock2) + sizeof(struct SaveBlock1))))
+
+#ifdef NONMATCHING // this is one devil of a motherfucker
/*
+ The reason MoveSaveBlocks_ResetHeap mismatches is due to incorrect memcpys. Various
+ things have been tried, such as: direct struct copys, ewram casts, use of defining
+ the addresses manually, using memcpy anyway, delayed allocation of pointers at
+ the start of function, as seen above and below. Scope declaration has been used to try and
+ reproduce the correct macro thought to be used, but nothing has worked. It is worth
+ noting that at this point that the compiler will delay the allocation of the save block
+ pointers at the beginningto be allocated later: which might matter for matching this.
+ Due to loading shared ewram heap areas directly, it is very likely emerald used ewram
+ defines for this function, but there is no known example of a matching define.
+ In addition, dead code might be present in the form of a runtime variable used
+ to fix the address of the save blocks. This has been tested and is shown to affect
+ the registers as well.
+*/
void MoveSaveBlocks_ResetHeap(void)
{
void *vblankCB, *hblankCB;
u32 encryptionKey;
- struct SaveBlocksInOne* copiedSavs;
+ struct SaveBlock1 **sav1Copy = &gSaveBlock1Ptr; // r10;
// save interrupt functions and turn them off
vblankCB = gMain.vblankCallback;
@@ -80,24 +127,22 @@ void MoveSaveBlocks_ResetHeap(void)
gMain.hblankCallback = NULL;
gUnknown_0203CF5C = NULL;
- copiedSavs = (void*)(gHeap);
-
- // copy saveblocks' content
- copiedSavs->sav2 = *gSaveBlock2Ptr;
- copiedSavs->sav1 = *gSaveBlock1Ptr;
- copiedSavs->sav3 = *gPokemonStoragePtr;
+ // backup the saves.
+ eSaveBlock1Copy = **sav1Copy;
+ eSaveBlock2Copy = *gSaveBlock2Ptr;
+ eSaveBlock3Copy = *gPokemonStoragePtr;
// change saveblocks' pointers
// argument is a sum of the individual trainerId bytes
- SetSaveBlocksPointers(copiedSavs->sav2.playerTrainerId[0] + copiedSavs->sav2.playerTrainerId[1] + copiedSavs->sav2.playerTrainerId[2] + copiedSavs->sav2.playerTrainerId[3]);
+ SetSaveBlocksPointers(eSaveBlock2Copy.playerTrainerId[0] + eSaveBlock2Copy.playerTrainerId[1] + eSaveBlock2Copy.playerTrainerId[2] + eSaveBlock2Copy.playerTrainerId[3]);
// restore saveblock data since the pointers changed
- *gSaveBlock2Ptr = copiedSavs->sav2;
- *gSaveBlock1Ptr = copiedSavs->sav1;
- *gPokemonStoragePtr = copiedSavs->sav3;
+ **sav1Copy = eSaveBlock1Copy;
+ *gSaveBlock2Ptr = eSaveBlock2Copy;
+ *gPokemonStoragePtr = eSaveBlock3Copy;
// heap was destroyed in the copying process, so reset it
- InitHeap(gHeap, sizeof(gHeap));
+ InitHeap((void*)(0x02000000), 0x1C000);
// restore interrupt functions
gMain.hblankCallback = hblankCB;
@@ -105,6 +150,266 @@ void MoveSaveBlocks_ResetHeap(void)
// create a new encryption key
encryptionKey = (Random() << 0x10) + (Random());
- ApplyNewEncyprtionKeyToAllEncryptedData(encryptionKey);
+ ApplyNewEncryptionKeyToAllEncryptedData(encryptionKey);
gSaveBlock2Ptr->encryptionKey = encryptionKey;
-}*/
+}
+#else
+__attribute__((naked))
+void MoveSaveBlocks_ResetHeap(void)
+{
+ asm(".syntax 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 r5, =gMain\n\
+ ldr r0, [r5, 0xC]\n\
+ str r0, [sp]\n\
+ ldr r1, [r5, 0x10]\n\
+ str r1, [sp, 0x4]\n\
+ movs r0, 0\n\
+ str r0, [r5, 0xC]\n\
+ str r0, [r5, 0x10]\n\
+ ldr r1, =gUnknown_0203CF5C\n\
+ str r0, [r1]\n\
+ ldr r4, =0x02000000\n\
+ ldr r0, =gSaveBlock2Ptr\n\
+ ldr r1, [r0]\n\
+ ldr r6, =0x00000f2c\n\
+ adds r0, r4, 0\n\
+ adds r2, r6, 0\n\
+ bl memcpy\n\
+ ldr r1, =gSaveBlock1Ptr\n\
+ mov r10, r1\n\
+ ldr r1, [r1]\n\
+ ldr r7, =0x00003d88\n\
+ ldr r0, =0x02000f2c\n\
+ adds r2, r7, 0\n\
+ bl memcpy\n\
+ ldr r0, =gPokemonStoragePtr\n\
+ mov r8, r0\n\
+ ldr r1, [r0]\n\
+ ldr r0, =0x000083d0\n\
+ mov r9, r0\n\
+ ldr r0, =0x02004cb4\n\
+ mov r2, r9\n\
+ bl memcpy\n\
+ ldrb r1, [r4, 0xA]\n\
+ ldrb r0, [r4, 0xB]\n\
+ adds r1, r0\n\
+ ldrb r0, [r4, 0xC]\n\
+ adds r1, r0\n\
+ ldrb r0, [r4, 0xD]\n\
+ adds r0, r1\n\
+ bl SetSaveBlocksPointers\n\
+ ldr r1, =gSaveBlock2Ptr\n\
+ ldr r0, [r1]\n\
+ adds r1, r4, 0\n\
+ adds r2, r6, 0\n\
+ bl memcpy\n\
+ mov r1, r10\n\
+ ldr r0, [r1]\n\
+ ldr r1, =0x02000f2c\n\
+ adds r2, r7, 0\n\
+ bl memcpy\n\
+ mov r1, r8\n\
+ ldr r0, [r1]\n\
+ ldr r1, =0x02004cb4\n\
+ mov r2, r9\n\
+ bl memcpy\n\
+ movs r1, 0xE0\n\
+ lsls r1, 9\n\
+ adds r0, r4, 0\n\
+ bl InitHeap\n\
+ ldr r0, [sp, 0x4]\n\
+ str r0, [r5, 0x10]\n\
+ ldr r1, [sp]\n\
+ str r1, [r5, 0xC]\n\
+ bl Random\n\
+ adds r4, r0, 0\n\
+ bl Random\n\
+ lsls r4, 16\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ adds r4, r0\n\
+ adds r0, r4, 0\n\
+ bl ApplyNewEncryptionKeyToAllEncryptedData\n\
+ ldr r1, =gSaveBlock2Ptr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0xAC\n\
+ str r4, [r0]\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\
+ .pool\n\
+ .syntax divided\n");
+}
+#endif
+
+u8 sav2_x1_query_bit1(void)
+{
+ return gSaveBlock2Ptr->specialSaveWarp & 1;
+}
+
+void sav2_x9_clear_bit1(void)
+{
+ gSaveBlock2Ptr->specialSaveWarp &= ~1;
+}
+
+void sub_8076D48(void)
+{
+ gSaveBlock2Ptr->specialSaveWarp |= 1;
+}
+
+void sub_8076D5C(void)
+{
+ sub_8084FAC(0);
+ gSaveBlock2Ptr->specialSaveWarp |= 1;
+}
+
+void sav2_gender2_inplace_and_xFE(void)
+{
+ gSaveBlock2Ptr->specialSaveWarp &= ~1;
+}
+
+void copy_player_party_to_sav1(void) // SavePlayerParty
+{
+ int i;
+
+ gSaveBlock1Ptr->playerPartyCount = gPlayerPartyCount;
+
+ for (i = 0; i < 6; i++)
+ gSaveBlock1Ptr->playerParty[i] = gPlayerParty[i];
+}
+
+void copy_player_party_from_sav1(void) // LoadPlayerParty
+{
+ int i;
+
+ gPlayerPartyCount = gSaveBlock1Ptr->playerPartyCount;
+
+ for (i = 0; i < 6; i++)
+ gPlayerParty[i] = gSaveBlock1Ptr->playerParty[i];
+}
+
+void save_serialize_npcs(void) // SaveMapObjects
+{
+ int i;
+
+ for (i = 0; i < 16; i++)
+ gSaveBlock1Ptr->mapObjects[i] = gMapObjects[i];
+}
+
+void save_deserialize_npcs(void) // LoadMapObjects
+{
+ int i;
+
+ for (i = 0; i < 16; i++)
+ gMapObjects[i] = gSaveBlock1Ptr->mapObjects[i];
+}
+
+void SaveSerializedGame(void)
+{
+ copy_player_party_to_sav1();
+ save_serialize_npcs();
+}
+
+void LoadSerializedGame(void)
+{
+ copy_player_party_from_sav1();
+ save_deserialize_npcs();
+}
+
+void copy_bags_and_unk_data_from_save_blocks(void)
+{
+ int i;
+
+ // load player items.
+ for (i = 0; i < 30; i++)
+ gLoadedSaveData.items[i] = gSaveBlock1Ptr->bagPocket_Items[i];
+
+ // load player key items.
+ for (i = 0; i < 30; i++)
+ gLoadedSaveData.keyItems[i] = gSaveBlock1Ptr->bagPocket_KeyItems[i];
+
+ // load player pokeballs.
+ for (i = 0; i < 16; i++)
+ gLoadedSaveData.pokeBalls[i] = gSaveBlock1Ptr->bagPocket_PokeBalls[i];
+
+ // load player TMs and HMs.
+ for (i = 0; i < 64; i++)
+ gLoadedSaveData.TMsHMs[i] = gSaveBlock1Ptr->bagPocket_TMHM[i];
+
+ // load player berries.
+ for (i = 0; i < 46; i++)
+ gLoadedSaveData.berries[i] = gSaveBlock1Ptr->bagPocket_Berries[i];
+
+ // load mail.
+ for (i = 0; i < 16; i++)
+ gLoadedSaveData.mail[i] = gSaveBlock1Ptr->mail[i];
+
+ gLastEncryptionKey = gSaveBlock2Ptr->encryptionKey;
+}
+
+void copy_bags_and_unk_data_to_save_blocks(void)
+{
+ int i;
+ u32 encryptionKeyBackup;
+
+ // save player items.
+ for (i = 0; i < 30; i++)
+ gSaveBlock1Ptr->bagPocket_Items[i] = gLoadedSaveData.items[i];
+
+ // save player key items.
+ for (i = 0; i < 30; i++)
+ gSaveBlock1Ptr->bagPocket_KeyItems[i] = gLoadedSaveData.keyItems[i];
+
+ // save player pokeballs.
+ for (i = 0; i < 16; i++)
+ gSaveBlock1Ptr->bagPocket_PokeBalls[i] = gLoadedSaveData.pokeBalls[i];
+
+ // save player TMs and HMs.
+ for (i = 0; i < 64; i++)
+ gSaveBlock1Ptr->bagPocket_TMHM[i] = gLoadedSaveData.TMsHMs[i];
+
+ // save player berries.
+ for (i = 0; i < 46; i++)
+ gSaveBlock1Ptr->bagPocket_Berries[i] = gLoadedSaveData.berries[i];
+
+ // save mail.
+ for (i = 0; i < 16; i++)
+ gSaveBlock1Ptr->mail[i] = gLoadedSaveData.mail[i];
+
+ encryptionKeyBackup = gSaveBlock2Ptr->encryptionKey;
+ gSaveBlock2Ptr->encryptionKey = gLastEncryptionKey;
+ ApplyNewEncryptionKeyToBagItems(encryptionKeyBackup);
+ gSaveBlock2Ptr->encryptionKey = encryptionKeyBackup; // updated twice?
+}
+
+void ApplyNewEncryptionKeyToHword(u16 *hWord, u32 newKey)
+{
+ *hWord ^= gSaveBlock2Ptr->encryptionKey;
+ *hWord ^= newKey;
+}
+
+void ApplyNewEncryptionKeyToWord(u32 *word, u32 newKey)
+{
+ *word ^= gSaveBlock2Ptr->encryptionKey;
+ *word ^= newKey;
+}
+
+void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey)
+{
+ ApplyNewEncryptionKeyToGameStats(encryptionKey);
+ ApplyNewEncryptionKeyToBagItems_(encryptionKey);
+ ApplyNewEncryptionKeyToBerryPowder(encryptionKey);
+ ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->money, encryptionKey);
+ ApplyNewEncryptionKeyToHword(&gSaveBlock1Ptr->coins, encryptionKey);
+}
diff --git a/src/m4a_4.c b/src/m4a_4.c
index 99195ec00..e645fbef5 100644
--- a/src/m4a_4.c
+++ b/src/m4a_4.c
@@ -45,7 +45,7 @@ void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16
mplayInfo->ident = ID_NUMBER;
}
-void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch)
+void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch)
{
s32 i;
u32 bit;
@@ -66,7 +66,7 @@ void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16
{
if (track->flags & MPT_FLG_EXIST)
{
- track->keyShiftX = (s16)pitch >> 8;
+ track->keyShiftX = pitch >> 8;
track->pitX = pitch;
track->flags |= MPT_FLG_PITCHG;
}
diff --git a/src/mail.c b/src/mail.c
index 1ceb1be1a..dddc06feb 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -1,14 +1,12 @@
-
-// Includes
#include "global.h"
#include "main.h"
#include "overworld.h"
#include "task.h"
#include "unknown_task.h"
#include "palette.h"
+#include "text.h"
#include "menu.h"
#include "menu_helpers.h"
-#include "text.h"
#include "text_window.h"
#include "string_util.h"
#include "international_string_util.h"
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 01dfc954a..1fafee810 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -1297,13 +1297,13 @@ bool8 IsPokeSpriteNotFlipped(u16 species)
return gBaseStats[species].noFlip;
}
-s8 GetMonFlavourRelation(struct Pokemon *mon, u8 a2)
+s8 GetMonFlavorRelation(struct Pokemon *mon, u8 a2)
{
u8 nature = GetNature(mon);
return gPokeblockFlavorCompatibilityTable[nature * 5 + a2];
}
-s8 GetFlavourRelationByPersonality(u32 personality, u8 a2)
+s8 GetFlavorRelationByPersonality(u32 personality, u8 a2)
{
u8 nature = GetNatureFromPersonality(personality);
return gPokeblockFlavorCompatibilityTable[nature * 5 + a2];
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index d09cbc407..e9cd3e215 100755
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -15,6 +15,7 @@
#include "sound.h"
#include "species.h"
#include "sprite.h"
+#include "unk_text_util.h"
#include "string_util.h"
#include "task.h"
#include "text.h"
@@ -166,9 +167,7 @@ extern s32 GetStringCenterAlignXOffset(u8 fontId, u8 *str, s32 totalWidth);
extern s32 GetStringRightAlignXOffset(u8 fontId, u8 *str, s32 totalWidth);
extern bool8 sub_81A6BF4();
extern bool8 sub_81B9E94();
-extern void sub_81AFBF0();
-extern u8 sub_81AFC0C(u8 a, u8 *b);
-extern void sub_81AFC28(u8 *a, u8 *b);
+extern void UnkTextUtil_Reset();
extern void sub_8124610(u8 *a, u8 b);
extern int GetPlayerIDAsU32();
extern u8 GetCurrentPpToMaxPpState(u8 a, u8 b);
@@ -2993,12 +2992,12 @@ void sub_81C307C()
{
struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
u8 *text;
- sub_81AFBF0();
- sub_81AFC0C(0, gUnknown_0861CE74);
- sub_81AFC0C(1, gUnknown_0861CE7B);
+ UnkTextUtil_Reset();
+ UnkTextUtil_SetPtrI(0, gUnknown_0861CE74);
+ UnkTextUtil_SetPtrI(1, gUnknown_0861CE7B);
sub_81C31C0();
if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE || sub_81C3304() == TRUE)
- sub_81AFC28(gStringVar4, gText_XNature);
+ UnkTextUtil_StringExpandPlaceholders(gStringVar4, gText_XNature);
else
{
u8 *alloced1 = Alloc(32);
@@ -3007,7 +3006,7 @@ void sub_81C307C()
if (sum->metLocation <= 0xD4)
{
sub_8124610(alloced2, sum->metLocation);
- sub_81AFC0C(4, alloced2);
+ UnkTextUtil_SetPtrI(4, alloced2);
}
if (sub_81C3220() == 1)
{
@@ -3022,7 +3021,7 @@ void sub_81C307C()
text = (sum->metLocation > 0xD4) ? gText_XNatureObtainedInTrade : gText_XNatureProbablyMetAt;
else
text = gText_XNatureObtainedInTrade;
- sub_81AFC28(gStringVar4, text);
+ UnkTextUtil_StringExpandPlaceholders(gStringVar4, text);
Free(alloced1);
Free(alloced2);
}
@@ -3036,8 +3035,8 @@ void sub_81C3194()
void sub_81C31C0()
{
struct UnkSummaryStruct *sumStruct = gUnknown_0203CF1C;
- sub_81AFC0C(2, gNatureNamePointers[sumStruct->summary.nature]);
- sub_81AFC0C(5, gText_EmptyString5);
+ UnkTextUtil_SetPtrI(2, gNatureNamePointers[sumStruct->summary.nature]);
+ UnkTextUtil_SetPtrI(5, gText_EmptyString5);
}
void sub_81C31F0(u8 *a)
@@ -3046,7 +3045,7 @@ void sub_81C31F0(u8 *a)
if (level == 0)
level = 5;
ConvertIntToDecimalStringN(a, level, 0, 3);
- sub_81AFC0C(3, a);
+ UnkTextUtil_SetPtrI(3, a);
}
u8 sub_81C3220()
@@ -3301,12 +3300,12 @@ void sub_81C3710()
ConvertIntToDecimalStringN(alloced2, gUnknown_0203CF1C->summary.maxHP, 1, 3);
ConvertIntToDecimalStringN(alloced3, gUnknown_0203CF1C->summary.atk, 1, 7);
ConvertIntToDecimalStringN(alloced4, gUnknown_0203CF1C->summary.def, 1, 7);
- sub_81AFBF0();
- sub_81AFC0C(0, alloced1);
- sub_81AFC0C(1, alloced2);
- sub_81AFC0C(2, alloced3);
- sub_81AFC0C(3, alloced4);
- sub_81AFC28(gStringVar4, gUnknown_0861CE82);
+ UnkTextUtil_Reset();
+ UnkTextUtil_SetPtrI(0, alloced1);
+ UnkTextUtil_SetPtrI(1, alloced2);
+ UnkTextUtil_SetPtrI(2, alloced3);
+ UnkTextUtil_SetPtrI(3, alloced4);
+ UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_0861CE82);
Free(alloced1);
Free(alloced2);
Free(alloced3);
@@ -3323,11 +3322,11 @@ void sub_81C3808()
ConvertIntToDecimalStringN(gStringVar1, gUnknown_0203CF1C->summary.spatk, 1, 3);
ConvertIntToDecimalStringN(gStringVar2, gUnknown_0203CF1C->summary.spdef, 1, 3);
ConvertIntToDecimalStringN(gStringVar3, gUnknown_0203CF1C->summary.speed, 1, 3);
- sub_81AFBF0();
- sub_81AFC0C(0, gStringVar1);
- sub_81AFC0C(1, gStringVar2);
- sub_81AFC0C(2, gStringVar3);
- sub_81AFC28(gStringVar4, gUnknown_0861CE8E);
+ UnkTextUtil_Reset();
+ UnkTextUtil_SetPtrI(0, gStringVar1);
+ UnkTextUtil_SetPtrI(1, gStringVar2);
+ UnkTextUtil_SetPtrI(2, gStringVar3);
+ UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_0861CE8E);
}
void sub_81C3890()
@@ -3436,10 +3435,10 @@ void sub_81C3B08(u8 a)
sub_81C25A4(r8, gMoveNames[move], 0, (a<<4) + 1, 0, 1);
ConvertIntToDecimalStringN(gStringVar1, r10->summary.pp[a], 1, 2);
ConvertIntToDecimalStringN(gStringVar2, r6, 1, 2);
- sub_81AFBF0();
- sub_81AFC0C(0, gStringVar1);
- sub_81AFC0C(1, gStringVar2);
- sub_81AFC28(gStringVar4, gUnknown_0861CE97);
+ UnkTextUtil_Reset();
+ UnkTextUtil_SetPtrI(0, gStringVar1);
+ UnkTextUtil_SetPtrI(1, gStringVar2);
+ UnkTextUtil_StringExpandPlaceholders(gStringVar4, gUnknown_0861CE97);
text = gStringVar4;
r5 = GetCurrentPpToMaxPpState(r10->summary.pp[a], r6) + 9;
offset = GetStringRightAlignXOffset(1, text, 0x2C);
@@ -3531,17 +3530,17 @@ void sub_81C3B08(u8 a)
movs r2, 0x1\n\
movs r3, 0x2\n\
bl ConvertIntToDecimalStringN\n\
- bl sub_81AFBF0\n\
+ bl UnkTextUtil_Reset\n\
movs r0, 0\n\
mov r1, r8\n\
- bl sub_81AFC0C\n\
+ bl UnkTextUtil_SetPtrI\n\
movs r0, 0x1\n\
adds r1, r4, 0\n\
- bl sub_81AFC0C\n\
+ bl UnkTextUtil_SetPtrI\n\
ldr r4, =gStringVar4\n\
ldr r1, =gUnknown_0861CE97\n\
adds r0, r4, 0\n\
- bl sub_81AFC28\n\
+ bl UnkTextUtil_StringExpandPlaceholders\n\
adds r7, r4, 0\n\
ldrb r0, [r5]\n\
adds r1, r6, 0\n\
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
new file mode 100644
index 000000000..e843ff7cb
--- /dev/null
+++ b/src/recorded_battle.c
@@ -0,0 +1,1676 @@
+#include "global.h"
+#include "battle.h"
+#include "recorded_battle.h"
+#include "main.h"
+#include "pokemon.h"
+#include "rng.h"
+#include "event_data.h"
+#include "link.h"
+#include "string_util.h"
+#include "palette.h"
+#include "save.h"
+#include "malloc.h"
+#include "util.h"
+#include "task.h"
+#include "text.h"
+
+#define BANK_RECORD_SIZE 664
+#define ILLEGAL_BATTLE_TYPES ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \
+ | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \
+ | BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \
+ | BATTLE_TYPE_RECORDED | BATTLE_TYPE_x4000000 | BATTLE_TYPE_SECRET_BASE \
+ | BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYORGE | BATTLE_TYPE_RAYQUAZA))
+
+extern u32 gBattleTypeFlags;
+extern u16 gTrainerBattleOpponent_A;
+extern u16 gTrainerBattleOpponent_B;
+extern u16 gPartnerTrainerId;
+extern u8 gActiveBank;
+extern u8 gNoOfAllBanks;
+extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
+extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
+extern u16 gChosenMovesByBanks[BATTLE_BANKS_COUNT];
+extern u8 gUnknown_03001278;
+extern u8 gUnknown_03001279;
+
+struct PlayerInfo
+{
+ u32 trainerId;
+ u8 name[PLAYER_NAME_LENGTH];
+ u8 gender;
+ u16 bank;
+ u16 language;
+};
+
+struct MovePp
+{
+ u16 moves[4];
+ u8 pp[4];
+};
+
+struct RecordedBattleSave
+{
+ struct Pokemon playerParty[PARTY_SIZE];
+ struct Pokemon opponentParty[PARTY_SIZE];
+ u8 playersName[BATTLE_BANKS_COUNT][PLAYER_NAME_LENGTH];
+ u8 playersGender[BATTLE_BANKS_COUNT];
+ u32 playersTrainerId[BATTLE_BANKS_COUNT];
+ u8 playersLanguage[BATTLE_BANKS_COUNT];
+ u32 rngSeed;
+ u32 battleFlags;
+ u8 playersBank[BATTLE_BANKS_COUNT];
+ u16 opponentA;
+ u16 opponentB;
+ u16 partnerId;
+ u16 field_4FA;
+ u8 field_4FC;
+ u8 field_4FD;
+ u8 field_4FE;
+ u8 battleStyle : 1;
+ u8 textSpeed : 3;
+ u32 AI_scripts;
+ u8 field_504[8];
+ u8 field_50C;
+ u8 field_50D;
+ u16 field_50E[6];
+ u8 field_51A;
+ u8 field_51B;
+ u8 battleRecord[BATTLE_BANKS_COUNT][BANK_RECORD_SIZE];
+ u32 checksum;
+};
+
+EWRAM_DATA u32 gRecordedBattleRngSeed = 0;
+EWRAM_DATA u32 gBattlePalaceMoveSelectionRngValue = 0;
+EWRAM_DATA static u8 sBattleRecords[BATTLE_BANKS_COUNT][BANK_RECORD_SIZE] = {0};
+EWRAM_DATA static u16 sRecordedBytesNo[BATTLE_BANKS_COUNT] = {0};
+EWRAM_DATA static u16 sUnknown_0203C79C[4] = {0};
+EWRAM_DATA static u16 sUnknown_0203C7A4[4] = {0};
+EWRAM_DATA static u8 sUnknown_0203C7AC = 0;
+EWRAM_DATA static u8 sUnknown_0203C7AD = 0;
+EWRAM_DATA static u8 sUnknown_0203C7AE = 0;
+EWRAM_DATA static u8 sUnknown_0203C7AF = 0;
+EWRAM_DATA static MainCallback sCallback2_AfterRecordedBattle = NULL;
+EWRAM_DATA u8 gUnknown_0203C7B4 = 0;
+EWRAM_DATA static u8 sUnknown_0203C7B5 = 0;
+EWRAM_DATA static u8 sRecordedBattle_BattleStyle = 0;
+EWRAM_DATA static u8 sRecordedBattle_TextSpeed = 0;
+EWRAM_DATA static u32 sRecordedBattle_BattleFlags = 0;
+EWRAM_DATA static u32 sRecordedBattle_AI_Scripts = 0;
+EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0};
+EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0};
+EWRAM_DATA static u16 sRecordedBattle_PlayerMonMoves[2][4] = {0};
+EWRAM_DATA static struct PlayerInfo sRecordedBattle_Players[BATTLE_BANKS_COUNT] = {0};
+EWRAM_DATA static u8 sUnknown_0203CCD0 = 0;
+EWRAM_DATA static u8 sUnknown_0203CCD1[8] = {0};
+EWRAM_DATA static u8 sUnknown_0203CCD9 = 0;
+EWRAM_DATA static u8 sUnknown_0203CCDA = 0;
+EWRAM_DATA static u16 sUnknown_0203CCDC[6] = {0};
+EWRAM_DATA static u8 sUnknown_0203CCE8 = 0;
+
+extern u32 sub_81A513C(void);
+extern void PlayMapChosenOrBattleBGM(bool8);
+
+// this file's functions
+static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2);
+static bool32 AllocTryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst);
+static void RecordedBattle_RestoreSavedParties(void);
+static void CB2_RecordedBattle(void);
+
+void sub_8184DA4(u8 arg0)
+{
+ s32 i, j;
+
+ sUnknown_0203C7AC = arg0;
+ sUnknown_0203CCD0 = 0;
+
+ for (i = 0; i < BATTLE_BANKS_COUNT; i++)
+ {
+ sRecordedBytesNo[i] = 0;
+ sUnknown_0203C79C[i] = 0;
+ sUnknown_0203C7A4[i] = 0;
+
+ if (arg0 == 1)
+ {
+ for (j = 0; j < BANK_RECORD_SIZE; j++)
+ {
+ sBattleRecords[i][j] |= 0xFF;
+ }
+ sRecordedBattle_BattleFlags = gBattleTypeFlags;
+ sRecordedBattle_AI_Scripts = gBattleResources->ai->aiFlags;
+ }
+ }
+}
+
+void sub_8184E58(void)
+{
+ s32 i, j;
+
+ if (sUnknown_0203C7AC == 1)
+ {
+ gRecordedBattleRngSeed = gRngValue;
+ sUnknown_0203C7AE = VarGet(VAR_FRONTIER_FACILITY);
+ sUnknown_0203C7AF = sub_81A513C();
+ }
+ else if (sUnknown_0203C7AC == 2)
+ {
+ gRngValue = gRecordedBattleRngSeed;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 linkPlayersCount;
+ u8 text[30];
+
+ gUnknown_0203C7B4 = GetMultiplayerId();
+ linkPlayersCount = GetLinkPlayerCount();
+
+ for (i = 0; i < BATTLE_BANKS_COUNT; i++)
+ {
+ sRecordedBattle_Players[i].trainerId = gLinkPlayers[i].trainerId;
+ sRecordedBattle_Players[i].gender = gLinkPlayers[i].gender;
+ sRecordedBattle_Players[i].bank = gLinkPlayers[i].lp_field_18;
+ sRecordedBattle_Players[i].language = gLinkPlayers[i].language;
+
+ if (i < linkPlayersCount)
+ {
+ StringCopy(text, gLinkPlayers[i].name);
+ StripExtCtrlCodes(text);
+ StringCopy(sRecordedBattle_Players[i].name, text);
+ }
+ else
+ {
+ for (j = 0; j < PLAYER_NAME_LENGTH; j++)
+ sRecordedBattle_Players[i].name[j] = gLinkPlayers[i].name[j];
+ }
+ }
+ }
+ else
+ {
+ sRecordedBattle_Players[0].trainerId = (gSaveBlock2Ptr->playerTrainerId[0])
+ | (gSaveBlock2Ptr->playerTrainerId[1] << 8)
+ | (gSaveBlock2Ptr->playerTrainerId[2] << 16)
+ | (gSaveBlock2Ptr->playerTrainerId[3] << 24);
+
+ sRecordedBattle_Players[0].gender = gSaveBlock2Ptr->playerGender;
+ sRecordedBattle_Players[0].bank = 0;
+ sRecordedBattle_Players[0].language = gGameLanguage;
+
+ for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ sRecordedBattle_Players[0].name[i] = gSaveBlock2Ptr->playerName[i];
+ }
+}
+
+void RecordedBattle_SetBankAction(u8 bank, u8 action)
+{
+ if (sRecordedBytesNo[bank] < BANK_RECORD_SIZE && sUnknown_0203C7AC != 2)
+ {
+ sBattleRecords[bank][sRecordedBytesNo[bank]++] = action;
+ }
+}
+
+void RecordedBattle_ClearBankAction(u8 bank, u8 bytesToClear)
+{
+ s32 i;
+
+ for (i = 0; i < bytesToClear; i++)
+ {
+ sRecordedBytesNo[bank]--;
+ sBattleRecords[bank][sRecordedBytesNo[bank]] |= 0xFF;
+ if (sRecordedBytesNo[bank] == 0)
+ break;
+ }
+}
+
+u8 RecordedBattle_ReadBankAction(u8 bank)
+{
+ // trying to read past array or invalid action byte, battle is over
+ if (sRecordedBytesNo[bank] >= BANK_RECORD_SIZE || sBattleRecords[bank][sRecordedBytesNo[bank]] == 0xFF)
+ {
+ gSpecialVar_Result = gBattleOutcome = BATTLE_PLAYER_TELEPORTED; // hah
+ ResetPaletteFadeControl();
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ SetMainCallback2(CB2_QuitRecordedBattle);
+ return -1;
+ }
+ else
+ {
+ return sBattleRecords[bank][sRecordedBytesNo[bank]++];
+ }
+}
+
+u8 sub_81850D0(void)
+{
+ return sUnknown_0203C7AC;
+}
+
+u8 sub_81850DC(u8 *arg0)
+{
+ u8 i, j;
+ u8 ret = 0;
+
+ for (i = 0; i < BATTLE_BANKS_COUNT; i++)
+ {
+ if (sRecordedBytesNo[i] != sUnknown_0203C79C[i])
+ {
+ arg0[ret++] = i;
+ arg0[ret++] = sRecordedBytesNo[i] - sUnknown_0203C79C[i];
+
+ for (j = 0; j < sRecordedBytesNo[i] - sUnknown_0203C79C[i]; j++)
+ {
+ arg0[ret++] = sBattleRecords[i][sUnknown_0203C79C[i] + j];
+ }
+
+ sUnknown_0203C79C[i] = sRecordedBytesNo[i];
+ }
+ }
+
+ return ret;
+}
+
+void sub_81851A8(u8 *arg0)
+{
+ s32 i;
+ u8 var1 = 2;
+ u8 var2;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ return;
+
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ if ((gLinkPlayers[i].version & 0xFF) != VERSION_EMERALD)
+ return;
+ }
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_WILD))
+ {
+ for (var2 = *arg0; var2 != 0;)
+ {
+ u8 unkVar = sub_8185278(arg0, &var1, &var2);
+ u8 unkVar2 = sub_8185278(arg0, &var1, &var2);
+
+ for (i = 0; i < unkVar2; i++)
+ {
+ sBattleRecords[unkVar][sUnknown_0203C7A4[unkVar]++] = sub_8185278(arg0, &var1, &var2);
+ }
+ }
+ }
+}
+
+static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2)
+{
+ (*arg2)--;
+ return arg0[(*arg1)++];
+}
+
+bool32 CanCopyRecordedBattleSaveData(void)
+{
+ struct RecordedBattleSave *dst = AllocZeroed(sizeof(struct RecordedBattleSave));
+ bool32 ret = AllocTryCopyRecordedBattleSaveData(dst);
+ Free(dst);
+ return ret;
+}
+
+static bool32 IsRecordedBattleSaveValid(struct RecordedBattleSave *save)
+{
+ if (save->battleFlags == 0)
+ return FALSE;
+ if (save->battleFlags & ILLEGAL_BATTLE_TYPES)
+ return FALSE;
+ if (CalcByteArraySum((void*)(save), sizeof(*save) - 4) != save->checksum)
+ return FALSE;
+
+ return TRUE;
+}
+
+static bool32 sub_81852F0(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSection)
+{
+ memset(saveSection, 0, sizeof(struct SaveSection));
+ memcpy(saveSection, battleSave, sizeof(*battleSave));
+
+ saveSection->checksum = CalcByteArraySum((void*)(saveSection), sizeof(*saveSection) - 4);
+
+ if (sub_8153634(31, (void*)(saveSection)) != 1)
+ return FALSE;
+
+ return TRUE;
+}
+
+#ifdef NONMATCHING
+u32 MoveRecordedBattleToSaveData(void)
+{
+ s32 i, j;
+ u8 var = 0;
+ struct RecordedBattleSave *battleSave = AllocZeroed(sizeof(struct RecordedBattleSave));
+ struct SaveSection *savSection = AllocZeroed(sizeof(struct SaveSection));
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ battleSave->playerParty[i] = sSavedPlayerParty[i];
+ battleSave->opponentParty[i] = sSavedOpponentParty[i];
+ }
+
+ for (i = 0; i < BATTLE_BANKS_COUNT; i++)
+ {
+ for (j = 0; j < PLAYER_NAME_LENGTH; j++)
+ {
+ battleSave->playersName[i][j] = sRecordedBattle_Players[i].name[j];
+ }
+ battleSave->playersGender[i] = sRecordedBattle_Players[i].gender;
+ battleSave->playersLanguage[i] = sRecordedBattle_Players[i].language;
+ battleSave->playersBank[i] = sRecordedBattle_Players[i].bank;
+ battleSave->playersTrainerId[i] = sRecordedBattle_Players[i].trainerId;
+ }
+
+ battleSave->rngSeed = gRecordedBattleRngSeed;
+
+ if (sRecordedBattle_BattleFlags & BATTLE_TYPE_LINK)
+ {
+ battleSave->battleFlags = (sRecordedBattle_BattleFlags & ~(BATTLE_TYPE_LINK | BATTLE_TYPE_20));
+ battleSave->battleFlags |= BATTLE_TYPE_x2000000;
+
+ if (sRecordedBattle_BattleFlags & BATTLE_TYPE_WILD)
+ {
+ battleSave->battleFlags |= BATTLE_TYPE_x80000000;
+ }
+ else if (sRecordedBattle_BattleFlags & BATTLE_TYPE_MULTI)
+ {
+ switch (sRecordedBattle_Players[0].bank)
+ {
+ case 0:
+ case 2:
+ if (!(sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1))
+ battleSave->battleFlags |= BATTLE_TYPE_x80000000;
+ break;
+ case 1:
+ case 3:
+ if ((sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1))
+ battleSave->battleFlags |= BATTLE_TYPE_x80000000;
+ break;
+ }
+ }
+ }
+ else
+ {
+ battleSave->battleFlags = sRecordedBattle_BattleFlags;
+ }
+
+ battleSave->opponentA = gTrainerBattleOpponent_A;
+ battleSave->opponentB = gTrainerBattleOpponent_B;
+ battleSave->partnerId = gPartnerTrainerId;
+ battleSave->field_4FA = gUnknown_0203C7B4;
+ battleSave->field_4FC = gSaveBlock2Ptr->field_CA9_b;
+ battleSave->field_4FD = sUnknown_0203C7AE;
+ battleSave->field_4FE = sUnknown_0203C7AF;
+ battleSave->battleStyle = gSaveBlock2Ptr->optionsBattleStyle;
+ battleSave->textSpeed = gSaveBlock2Ptr->optionsTextSpeed;
+ battleSave->AI_scripts = sRecordedBattle_AI_Scripts;
+
+ /* Can't match it without proper knowledge of the Saveblock 2.
+ if (gTrainerBattleOpponent_A >= 300 && gTrainerBattleOpponent_A <= 399)
+ {
+ for (i = 0; i < 8; i++)
+ {
+ battleSave->field_504[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_4[i];
+ }
+ battleSave->field_50C = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_1;
+
+ if (sUnknown_0203CCE8 == 1)
+ {
+ for (i = 0; i < 6; i++)
+ {
+ battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_28[i];
+ }
+ }
+ else
+ {
+ for (i = 0; i < 6; i++)
+ {
+ battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_1C[i];
+ }
+ }
+ battleSave->field_51A = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_E4;
+ }
+ else if (gTrainerBattleOpponent_B >= 300 && gTrainerBattleOpponent_B <= 399)
+ {
+ for (i = 0; i < 8; i++)
+ {
+ battleSave->field_504[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_4[i];
+ }
+ battleSave->field_50C = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_1;
+
+ if (sUnknown_0203CCE8 == 1)
+ {
+ for (i = 0; i < 6; i++)
+ {
+ battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_28[i];
+ }
+ }
+ else
+ {
+ for (i = 0; i < 6; i++)
+ {
+ battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_1C[i];
+ }
+ }
+ battleSave->field_51A = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_E4;
+ }
+ else if (gPartnerTrainerId >= 300 && gPartnerTrainerId <= 399)
+ {
+ for (i = 0; i < 8; i++)
+ {
+ battleSave->field_504[i] = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_4[i];
+ }
+ battleSave->field_50C = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_1;
+
+ if (sUnknown_0203CCE8 == 1)
+ {
+ for (i = 0; i < 6; i++)
+ {
+ battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_28[i];
+ }
+ }
+ else
+ {
+ for (i = 0; i < 6; i++)
+ {
+ battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_1C[i];
+ }
+ }
+ battleSave->field_51A = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_E4;
+ }
+
+ */
+}
+
+#else
+__attribute__((naked))
+u32 MoveRecordedBattleToSaveData(void)
+{
+ asm(".syntax 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, 0xC\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x4]\n\
+ movs r0, 0xF8\n\
+ lsls r0, 4\n\
+ bl AllocZeroed\n\
+ adds r7, r0, 0\n\
+ movs r0, 0x80\n\
+ lsls r0, 5\n\
+ bl AllocZeroed\n\
+ str r0, [sp]\n\
+ movs r6, 0\n\
+_0818535E:\n\
+ movs r0, 0x64\n\
+ adds r4, r6, 0\n\
+ muls r4, r0\n\
+ adds r5, r7, r4\n\
+ ldr r1, =sSavedPlayerParty\n\
+ adds r1, r4, r1\n\
+ adds r0, r5, 0\n\
+ movs r2, 0x64\n\
+ bl memcpy\n\
+ movs r1, 0x96\n\
+ lsls r1, 2\n\
+ adds r5, r1\n\
+ ldr r0, =sSavedOpponentParty\n\
+ adds r4, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, r4, 0\n\
+ movs r2, 0x64\n\
+ bl memcpy\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _0818535E\n\
+ movs r6, 0\n\
+ ldr r2, =gSaveBlock2Ptr\n\
+ mov r9, r2\n\
+ movs r3, 0x9A\n\
+ lsls r3, 3\n\
+ adds r3, r7, r3\n\
+ str r3, [sp, 0x8]\n\
+ ldr r5, =sRecordedBattle_Players\n\
+ mov r8, r6\n\
+ mov r12, r6\n\
+ movs r4, 0x96\n\
+ lsls r4, 3\n\
+ adds r4, r7\n\
+ mov r10, r4\n\
+ ldr r0, =0x000004e4\n\
+ adds r4, r7, r0\n\
+_081853AC:\n\
+ lsls r1, r6, 3\n\
+ ldr r0, =sRecordedBattle_Players\n\
+ adds r0, 0x4\n\
+ mov r3, r8\n\
+ adds r2, r3, r0\n\
+ add r1, r10\n\
+ movs r3, 0x7\n\
+_081853BA:\n\
+ ldrb r0, [r2]\n\
+ strb r0, [r1]\n\
+ adds r2, 0x1\n\
+ adds r1, 0x1\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bge _081853BA\n\
+ ldr r0, [sp, 0x8]\n\
+ adds r1, r0, r6\n\
+ ldrb r0, [r5, 0xC]\n\
+ strb r0, [r1]\n\
+ ldrh r0, [r5, 0x10]\n\
+ strb r0, [r4]\n\
+ ldrh r0, [r5, 0xE]\n\
+ strb r0, [r4, 0xC]\n\
+ ldr r1, =0x000004d4\n\
+ adds r0, r7, r1\n\
+ add r0, r12\n\
+ ldr r1, [r5]\n\
+ str r1, [r0]\n\
+ adds r5, 0x14\n\
+ movs r2, 0x14\n\
+ add r8, r2\n\
+ movs r3, 0x4\n\
+ add r12, r3\n\
+ adds r4, 0x1\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x3\n\
+ ble _081853AC\n\
+ movs r4, 0x9D\n\
+ lsls r4, 3\n\
+ adds r1, r7, r4\n\
+ ldr r5, =gRecordedBattleRngSeed\n\
+ ldr r0, [r5]\n\
+ str r0, [r1]\n\
+ ldr r0, =sRecordedBattle_BattleFlags\n\
+ ldr r2, [r0]\n\
+ movs r0, 0x2\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _081854DC\n\
+ ldr r1, =0x000004ec\n\
+ adds r3, r7, r1\n\
+ movs r1, 0x23\n\
+ negs r1, r1\n\
+ ands r1, r2\n\
+ movs r0, 0x80\n\
+ lsls r0, 18\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+ movs r0, 0x4\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _08185454\n\
+ movs r0, 0x80\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+ b _081854E2\n\
+ .pool\n\
+_08185454:\n\
+ movs r0, 0x40\n\
+ ands r2, r0\n\
+ cmp r2, 0\n\
+ beq _081854E2\n\
+ ldr r2, =sRecordedBattle_Players\n\
+ ldrh r0, [r2, 0xE]\n\
+ cmp r0, 0x1\n\
+ beq _081854A8\n\
+ cmp r0, 0x1\n\
+ bgt _08185474\n\
+ cmp r0, 0\n\
+ beq _0818547E\n\
+ b _081854E2\n\
+ .pool\n\
+_08185474:\n\
+ cmp r0, 0x2\n\
+ beq _0818547E\n\
+ cmp r0, 0x3\n\
+ beq _081854A8\n\
+ b _081854E2\n\
+_0818547E:\n\
+ ldr r3, =gUnknown_0203C7B4\n\
+ ldrb r1, [r3]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ ldr r4, =sRecordedBattle_Players\n\
+ adds r0, r4\n\
+ ldrh r1, [r0, 0xE]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _081854E2\n\
+ ldr r5, =0x000004ec\n\
+ adds r0, r7, r5\n\
+ b _081854C4\n\
+ .pool\n\
+_081854A8:\n\
+ ldr r0, =gUnknown_0203C7B4\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ ldr r1, =sRecordedBattle_Players\n\
+ adds r0, r1\n\
+ ldrh r1, [r0, 0xE]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _081854E2\n\
+ ldr r2, =0x000004ec\n\
+ adds r0, r7, r2\n\
+_081854C4:\n\
+ ldr r1, [r0]\n\
+ movs r2, 0x80\n\
+ lsls r2, 24\n\
+ orrs r1, r2\n\
+ str r1, [r0]\n\
+ b _081854E2\n\
+ .pool\n\
+_081854DC:\n\
+ ldr r3, =0x000004ec\n\
+ adds r0, r7, r3\n\
+ str r2, [r0]\n\
+_081854E2:\n\
+ ldr r4, =gTrainerBattleOpponent_A\n\
+ ldrh r1, [r4]\n\
+ ldr r5, =0x000004f4\n\
+ adds r0, r7, r5\n\
+ strh r1, [r0]\n\
+ ldr r0, =gTrainerBattleOpponent_B\n\
+ ldrh r1, [r0]\n\
+ ldr r2, =0x000004f6\n\
+ adds r0, r7, r2\n\
+ strh r1, [r0]\n\
+ ldr r3, =gPartnerTrainerId\n\
+ ldrh r1, [r3]\n\
+ movs r4, 0x9F\n\
+ lsls r4, 3\n\
+ adds r0, r7, r4\n\
+ strh r1, [r0]\n\
+ ldr r5, =gUnknown_0203C7B4\n\
+ ldrb r1, [r5]\n\
+ adds r2, 0x4\n\
+ adds r0, r7, r2\n\
+ strh r1, [r0]\n\
+ mov r3, r9\n\
+ ldr r0, [r3]\n\
+ ldr r4, =0x00000ca9\n\
+ adds r0, r4\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 30\n\
+ lsrs r0, 30\n\
+ ldr r5, =0x000004fc\n\
+ adds r1, r7, r5\n\
+ strb r0, [r1]\n\
+ ldr r0, =sUnknown_0203C7AE\n\
+ ldrb r1, [r0]\n\
+ adds r2, 0x3\n\
+ adds r0, r7, r2\n\
+ strb r1, [r0]\n\
+ ldr r3, =sUnknown_0203C7AF\n\
+ ldrb r1, [r3]\n\
+ ldr r4, =0x000004fe\n\
+ adds r0, r7, r4\n\
+ strb r1, [r0]\n\
+ mov r5, r9\n\
+ ldr r0, [r5]\n\
+ ldrb r1, [r0, 0x15]\n\
+ lsls r1, 29\n\
+ ldr r0, =0x000004ff\n\
+ adds r3, r7, r0\n\
+ lsrs r1, 31\n\
+ ldrb r2, [r3]\n\
+ movs r0, 0x2\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ ldr r1, [r5]\n\
+ ldrb r1, [r1, 0x14]\n\
+ lsls r1, 29\n\
+ lsrs r1, 28\n\
+ movs r2, 0xF\n\
+ negs r2, r2\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ movs r2, 0xA0\n\
+ lsls r2, 3\n\
+ adds r1, r7, r2\n\
+ ldr r3, =sRecordedBattle_AI_Scripts\n\
+ ldr r0, [r3]\n\
+ str r0, [r1]\n\
+ ldr r4, =0xfffffed4\n\
+ adds r1, r4, 0\n\
+ ldr r5, =gTrainerBattleOpponent_A\n\
+ ldrh r5, [r5]\n\
+ adds r0, r1, r5\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x63\n\
+ bls _08185580\n\
+ b _081856C4\n\
+_08185580:\n\
+ movs r6, 0\n\
+ ldr r0, =0x00000504\n\
+ adds r3, r7, r0\n\
+ mov r10, r9\n\
+ ldr r1, =gTrainerBattleOpponent_A\n\
+ mov r12, r1\n\
+ adds r2, r4, 0\n\
+ mov r8, r2\n\
+ ldr r4, =0x0000073c\n\
+_08185592:\n\
+ adds r2, r3, r6\n\
+ mov r5, r10\n\
+ ldr r1, [r5]\n\
+ mov r5, r12\n\
+ ldrh r0, [r5]\n\
+ add r0, r8\n\
+ movs r5, 0xEC\n\
+ muls r0, r5\n\
+ adds r0, r6, r0\n\
+ adds r1, r4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ strb r0, [r2]\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x7\n\
+ ble _08185592\n\
+ mov r0, r9\n\
+ ldr r2, [r0]\n\
+ ldr r1, =gTrainerBattleOpponent_A\n\
+ ldrh r0, [r1]\n\
+ ldr r3, =0xfffffed4\n\
+ adds r0, r3\n\
+ movs r1, 0xEC\n\
+ muls r0, r1\n\
+ adds r2, r0\n\
+ ldr r4, =0x00000739\n\
+ adds r2, r4\n\
+ ldrb r1, [r2]\n\
+ ldr r5, =0x0000050c\n\
+ adds r0, r7, r5\n\
+ strb r1, [r0]\n\
+ ldr r1, =sUnknown_0203CCE8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x1\n\
+ bne _08185664\n\
+ movs r6, 0\n\
+ ldr r2, =0x0000050e\n\
+ adds r4, r7, r2\n\
+ mov r10, r9\n\
+ ldr r5, =gTrainerBattleOpponent_A\n\
+ mov r8, r5\n\
+ adds r5, r3, 0\n\
+_081855E6:\n\
+ lsls r3, r6, 1\n\
+ mov r0, r10\n\
+ ldr r2, [r0]\n\
+ mov r1, r8\n\
+ ldrh r0, [r1]\n\
+ adds r0, r5\n\
+ movs r1, 0xEC\n\
+ muls r0, r1\n\
+ adds r3, r0\n\
+ movs r0, 0xEC\n\
+ lsls r0, 3\n\
+ adds r2, r0\n\
+ adds r2, r3\n\
+ ldrh r0, [r2]\n\
+ strh r0, [r4]\n\
+ adds r4, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _081855E6\n\
+ b _08185696\n\
+ .pool\n\
+_08185664:\n\
+ movs r6, 0\n\
+ ldr r1, =0x0000050e\n\
+ adds r4, r7, r1\n\
+ mov r10, r9\n\
+ ldr r2, =gTrainerBattleOpponent_A\n\
+ mov r8, r2\n\
+ adds r5, r3, 0\n\
+_08185672:\n\
+ lsls r3, r6, 1\n\
+ mov r0, r10\n\
+ ldr r2, [r0]\n\
+ mov r1, r8\n\
+ ldrh r0, [r1]\n\
+ adds r0, r5\n\
+ movs r1, 0xEC\n\
+ muls r0, r1\n\
+ adds r3, r0\n\
+ ldr r0, =0x00000754\n\
+ adds r2, r0\n\
+ adds r2, r3\n\
+ ldrh r0, [r2]\n\
+ strh r0, [r4]\n\
+ adds r4, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08185672\n\
+_08185696:\n\
+ mov r1, r9\n\
+ ldr r2, [r1]\n\
+ ldr r3, =gTrainerBattleOpponent_A\n\
+ ldrh r0, [r3]\n\
+ ldr r4, =0xfffffed4\n\
+ adds r0, r4\n\
+ movs r1, 0xEC\n\
+ muls r0, r1\n\
+ adds r2, r0\n\
+ ldr r5, =0x0000081c\n\
+ adds r2, r5\n\
+ ldrb r1, [r2]\n\
+ b _08185856\n\
+ .pool\n\
+_081856C4:\n\
+ ldr r3, =gTrainerBattleOpponent_B\n\
+ ldrh r3, [r3]\n\
+ adds r0, r1, r3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x63\n\
+ bls _081856D4\n\
+ b _081857E4\n\
+_081856D4:\n\
+ movs r6, 0\n\
+ ldr r4, =0x00000504\n\
+ adds r3, r7, r4\n\
+ mov r10, r9\n\
+ ldr r5, =gTrainerBattleOpponent_B\n\
+ mov r12, r5\n\
+ ldr r0, =0xfffffed4\n\
+ mov r8, r0\n\
+ ldr r4, =0x0000073c\n\
+_081856E6:\n\
+ adds r2, r3, r6\n\
+ mov r5, r10\n\
+ ldr r1, [r5]\n\
+ mov r5, r12\n\
+ ldrh r0, [r5]\n\
+ add r0, r8\n\
+ movs r5, 0xEC\n\
+ muls r0, r5\n\
+ adds r0, r6, r0\n\
+ adds r1, r4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ strb r0, [r2]\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x7\n\
+ ble _081856E6\n\
+ mov r0, r9\n\
+ ldr r2, [r0]\n\
+ ldr r1, =gTrainerBattleOpponent_B\n\
+ ldrh r0, [r1]\n\
+ ldr r3, =0xfffffed4\n\
+ adds r0, r3\n\
+ movs r1, 0xEC\n\
+ muls r0, r1\n\
+ adds r2, r0\n\
+ ldr r4, =0x00000739\n\
+ adds r2, r4\n\
+ ldrb r1, [r2]\n\
+ ldr r5, =0x0000050c\n\
+ adds r0, r7, r5\n\
+ strb r1, [r0]\n\
+ ldr r1, =sUnknown_0203CCE8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x1\n\
+ bne _08185784\n\
+ movs r6, 0\n\
+ ldr r2, =0x0000050e\n\
+ adds r4, r7, r2\n\
+ mov r10, r9\n\
+ ldr r5, =gTrainerBattleOpponent_B\n\
+ mov r8, r5\n\
+ adds r5, r3, 0\n\
+_0818573A:\n\
+ lsls r3, r6, 1\n\
+ mov r0, r10\n\
+ ldr r2, [r0]\n\
+ mov r1, r8\n\
+ ldrh r0, [r1]\n\
+ adds r0, r5\n\
+ movs r1, 0xEC\n\
+ muls r0, r1\n\
+ adds r3, r0\n\
+ movs r0, 0xEC\n\
+ lsls r0, 3\n\
+ adds r2, r0\n\
+ adds r2, r3\n\
+ ldrh r0, [r2]\n\
+ strh r0, [r4]\n\
+ adds r4, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _0818573A\n\
+ b _081857B6\n\
+ .pool\n\
+_08185784:\n\
+ movs r6, 0\n\
+ ldr r1, =0x0000050e\n\
+ adds r4, r7, r1\n\
+ mov r10, r9\n\
+ ldr r2, =gTrainerBattleOpponent_B\n\
+ mov r8, r2\n\
+ adds r5, r3, 0\n\
+_08185792:\n\
+ lsls r3, r6, 1\n\
+ mov r0, r10\n\
+ ldr r2, [r0]\n\
+ mov r1, r8\n\
+ ldrh r0, [r1]\n\
+ adds r0, r5\n\
+ movs r1, 0xEC\n\
+ muls r0, r1\n\
+ adds r3, r0\n\
+ ldr r0, =0x00000754\n\
+ adds r2, r0\n\
+ adds r2, r3\n\
+ ldrh r0, [r2]\n\
+ strh r0, [r4]\n\
+ adds r4, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08185792\n\
+_081857B6:\n\
+ mov r1, r9\n\
+ ldr r2, [r1]\n\
+ ldr r3, =gTrainerBattleOpponent_B\n\
+ ldrh r0, [r3]\n\
+ ldr r4, =0xfffffed4\n\
+ adds r0, r4\n\
+ movs r1, 0xEC\n\
+ muls r0, r1\n\
+ adds r2, r0\n\
+ ldr r5, =0x0000081c\n\
+ adds r2, r5\n\
+ ldrb r1, [r2]\n\
+ b _08185856\n\
+ .pool\n\
+_081857E4:\n\
+ ldr r3, =gPartnerTrainerId\n\
+ ldrh r3, [r3]\n\
+ adds r0, r1, r3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x63\n\
+ bhi _0818585C\n\
+ movs r6, 0\n\
+ ldr r4, =0x00000504\n\
+ adds r3, r7, r4\n\
+ mov r10, r9\n\
+ ldr r5, =gPartnerTrainerId\n\
+ mov r12, r5\n\
+ ldr r0, =0xfffffed4\n\
+ mov r8, r0\n\
+ ldr r4, =0x0000073c\n\
+_08185804:\n\
+ adds r2, r3, r6\n\
+ mov r5, r10\n\
+ ldr r1, [r5]\n\
+ mov r5, r12\n\
+ ldrh r0, [r5]\n\
+ add r0, r8\n\
+ movs r5, 0xEC\n\
+ muls r0, r5\n\
+ adds r0, r6, r0\n\
+ adds r1, r4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ strb r0, [r2]\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x7\n\
+ ble _08185804\n\
+ mov r0, r9\n\
+ ldr r1, [r0]\n\
+ ldr r2, =gPartnerTrainerId\n\
+ ldrh r0, [r2]\n\
+ ldr r3, =0xfffffed4\n\
+ adds r0, r3\n\
+ movs r2, 0xEC\n\
+ muls r0, r2\n\
+ adds r1, r0\n\
+ ldr r4, =0x00000739\n\
+ adds r1, r4\n\
+ ldrb r1, [r1]\n\
+ ldr r5, =0x0000050c\n\
+ adds r0, r7, r5\n\
+ strb r1, [r0]\n\
+ mov r0, r9\n\
+ ldr r1, [r0]\n\
+ ldr r4, =gPartnerTrainerId\n\
+ ldrh r0, [r4]\n\
+ adds r0, r3\n\
+ muls r0, r2\n\
+ adds r1, r0\n\
+ ldr r5, =0x0000081c\n\
+ adds r1, r5\n\
+ ldrb r1, [r1]\n\
+_08185856:\n\
+ ldr r2, =0x0000051a\n\
+ adds r0, r7, r2\n\
+ strb r1, [r0]\n\
+_0818585C:\n\
+ ldr r3, =gTrainerBattleOpponent_A\n\
+ ldrh r0, [r3]\n\
+ ldr r1, =0x0000018f\n\
+ cmp r0, r1\n\
+ bls _08185900\n\
+ mov r4, r9\n\
+ ldr r2, [r4]\n\
+ adds r1, r0, 0\n\
+ ldr r3, =0xfffffe70\n\
+ adds r1, r3\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r2, r0\n\
+ adds r2, 0xDC\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 27\n\
+ lsrs r0, 27\n\
+ ldr r5, =0x0000050d\n\
+ adds r1, r7, r5\n\
+ strb r0, [r1]\n\
+ movs r6, 0\n\
+ ldr r0, =0x0000050e\n\
+ adds r4, r7, r0\n\
+ mov r10, r9\n\
+ ldr r1, =gTrainerBattleOpponent_A\n\
+ mov r8, r1\n\
+ adds r5, r3, 0\n\
+_08185894:\n\
+ lsls r3, r6, 1\n\
+ mov r0, r10\n\
+ ldr r2, [r0]\n\
+ mov r0, r8\n\
+ ldrh r1, [r0]\n\
+ adds r1, r5\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r3, r0\n\
+ movs r1, 0x82\n\
+ lsls r1, 1\n\
+ adds r2, r1\n\
+ adds r2, r3\n\
+ ldrh r0, [r2]\n\
+ strh r0, [r4]\n\
+ adds r4, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08185894\n\
+ mov r3, r9\n\
+ ldr r2, [r3]\n\
+ ldr r4, =gTrainerBattleOpponent_A\n\
+ ldrh r1, [r4]\n\
+ ldr r5, =0xfffffe70\n\
+ adds r1, r5\n\
+ b _081859AC\n\
+ .pool\n\
+_08185900:\n\
+ ldr r3, =gTrainerBattleOpponent_B\n\
+ ldrh r0, [r3]\n\
+ cmp r0, r1\n\
+ bls _0818597C\n\
+ mov r4, r9\n\
+ ldr r2, [r4]\n\
+ adds r1, r0, 0\n\
+ ldr r3, =0xfffffe70\n\
+ adds r1, r3\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r2, r0\n\
+ adds r2, 0xDC\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 27\n\
+ lsrs r0, 27\n\
+ ldr r5, =0x0000050d\n\
+ adds r1, r7, r5\n\
+ strb r0, [r1]\n\
+ movs r6, 0\n\
+ ldr r0, =0x0000050e\n\
+ adds r4, r7, r0\n\
+ mov r10, r9\n\
+ ldr r1, =gTrainerBattleOpponent_B\n\
+ mov r8, r1\n\
+ adds r5, r3, 0\n\
+_08185936:\n\
+ lsls r3, r6, 1\n\
+ mov r0, r10\n\
+ ldr r2, [r0]\n\
+ mov r0, r8\n\
+ ldrh r1, [r0]\n\
+ adds r1, r5\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r3, r0\n\
+ movs r1, 0x82\n\
+ lsls r1, 1\n\
+ adds r2, r1\n\
+ adds r2, r3\n\
+ ldrh r0, [r2]\n\
+ strh r0, [r4]\n\
+ adds r4, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08185936\n\
+ mov r3, r9\n\
+ ldr r2, [r3]\n\
+ ldr r4, =gTrainerBattleOpponent_B\n\
+ ldrh r1, [r4]\n\
+ ldr r5, =0xfffffe70\n\
+ adds r1, r5\n\
+ b _081859AC\n\
+ .pool\n\
+_0818597C:\n\
+ ldr r3, =gPartnerTrainerId\n\
+ ldrh r0, [r3]\n\
+ cmp r0, r1\n\
+ bls _081859C0\n\
+ mov r4, r9\n\
+ ldr r2, [r4]\n\
+ adds r1, r0, 0\n\
+ ldr r3, =0xfffffe70\n\
+ adds r1, r3\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r2, r0\n\
+ adds r2, 0xDC\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 27\n\
+ lsrs r0, 27\n\
+ ldr r5, =0x0000050d\n\
+ adds r1, r7, r5\n\
+ strb r0, [r1]\n\
+ ldr r2, [r4]\n\
+ ldr r0, =gPartnerTrainerId\n\
+ ldrh r1, [r0]\n\
+ adds r1, r3\n\
+_081859AC:\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r2, r0\n\
+ ldr r1, =0x0000011b\n\
+ adds r0, r2, r1\n\
+ ldrb r1, [r0]\n\
+ ldr r2, =0x0000051b\n\
+ adds r0, r7, r2\n\
+ strb r1, [r0]\n\
+_081859C0:\n\
+ movs r6, 0\n\
+ ldr r3, =0x00000297\n\
+ mov r10, r3\n\
+ ldr r4, =sBattleRecords\n\
+ mov r9, r4\n\
+ movs r5, 0xA6\n\
+ lsls r5, 2\n\
+ mov r8, r5\n\
+ ldr r0, =0x0000051c\n\
+ adds r5, r7, r0\n\
+_081859D4:\n\
+ adds r4, r6, 0x1\n\
+ mov r0, r8\n\
+ muls r0, r6\n\
+ mov r1, r9\n\
+ adds r2, r0, r1\n\
+ adds r1, r0, r5\n\
+ mov r3, r10\n\
+ adds r3, 0x1\n\
+_081859E4:\n\
+ ldrb r0, [r2]\n\
+ strb r0, [r1]\n\
+ adds r2, 0x1\n\
+ adds r1, 0x1\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bne _081859E4\n\
+ adds r6, r4, 0\n\
+ cmp r6, 0x3\n\
+ ble _081859D4\n\
+_081859F8:\n\
+ adds r0, r7, 0\n\
+ ldr r1, [sp]\n\
+ bl sub_81852F0\n\
+ adds r4, r0, 0\n\
+ cmp r4, 0x1\n\
+ beq _08185A14\n\
+ ldr r0, [sp, 0x4]\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x4]\n\
+ cmp r0, 0x2\n\
+ bls _081859F8\n\
+_08185A14:\n\
+ adds r0, r7, 0\n\
+ bl Free\n\
+ ldr r0, [sp]\n\
+ bl Free\n\
+ adds r0, r4, 0\n\
+ add sp, 0xC\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .pool\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSection *saveBuffer)
+{
+ if (TryCopySpecialSaveSection(SECTION_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != 1)
+ return FALSE;
+
+ memcpy(dst, saveBuffer, sizeof(struct RecordedBattleSave));
+
+ if (!IsRecordedBattleSaveValid(dst))
+ return FALSE;
+
+ return TRUE;
+}
+
+static bool32 AllocTryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst)
+{
+ struct SaveSection *savBuffer = AllocZeroed(sizeof(struct SaveSection));
+ bool32 ret = TryCopyRecordedBattleSaveData(dst, savBuffer);
+ Free(savBuffer);
+
+ return ret;
+}
+
+static void CB2_RecordedBattleEnd(void)
+{
+ gSaveBlock2Ptr->frontierChosenLvl = sUnknown_0203C7AD;
+ gBattleOutcome = 0;
+ gBattleTypeFlags = 0;
+ gTrainerBattleOpponent_A = 0;
+ gTrainerBattleOpponent_B = 0;
+ gPartnerTrainerId = 0;
+
+ RecordedBattle_RestoreSavedParties();
+ SetMainCallback2(sCallback2_AfterRecordedBattle);
+}
+
+#define tFramesToWait data[0]
+
+static void Task_StartAfterCountdown(u8 taskId)
+{
+ if (--gTasks[taskId].tFramesToWait == 0)
+ {
+ gMain.savedCallback = CB2_RecordedBattleEnd;
+ SetMainCallback2(CB2_InitBattle);
+ DestroyTask(taskId);
+ }
+}
+
+static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
+{
+ bool8 var;
+ s32 i, j;
+
+ ZeroPlayerPartyMons();
+ ZeroEnemyPartyMons();
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ gPlayerParty[i] = src->playerParty[i];
+ gEnemyParty[i] = src->opponentParty[i];
+ }
+
+ for (i = 0; i < BATTLE_BANKS_COUNT; i++)
+ {
+ for (var = FALSE, j = 0; j < PLAYER_NAME_LENGTH; j++)
+ {
+ gLinkPlayers[i].name[j] = src->playersName[i][j];
+ if (src->playersName[i][j] == EOS)
+ var = TRUE;
+ }
+ gLinkPlayers[i].gender = src->playersGender[i];
+ gLinkPlayers[i].language = src->playersLanguage[i];
+ gLinkPlayers[i].lp_field_18 = src->playersBank[i];
+ gLinkPlayers[i].trainerId = src->playersTrainerId[i];
+
+ if (var)
+ ConvertInternationalString(gLinkPlayers[i].name, gLinkPlayers[i].language);
+ }
+
+ gRecordedBattleRngSeed = src->rngSeed;
+ gBattleTypeFlags = src->battleFlags | BATTLE_TYPE_RECORDED;
+ gTrainerBattleOpponent_A = src->opponentA;
+ gTrainerBattleOpponent_B = src->opponentB;
+ gPartnerTrainerId = src->partnerId;
+ gUnknown_0203C7B4 = src->field_4FA;
+ sUnknown_0203C7AD = gSaveBlock2Ptr->frontierChosenLvl;
+ sUnknown_0203C7AE = src->field_4FD;
+ sUnknown_0203C7AF = src->field_4FE;
+ sRecordedBattle_BattleStyle = src->battleStyle;
+ sRecordedBattle_TextSpeed = src->textSpeed;
+ sRecordedBattle_AI_Scripts = src->AI_scripts;
+
+ for (i = 0; i < 8; i++)
+ {
+ sUnknown_0203CCD1[i] = src->field_504[i];
+ }
+
+ sUnknown_0203CCD9 = src->field_50C;
+ sUnknown_0203CCDA = src->field_50D;
+ gUnknown_03001278 = src->field_51A;
+ gUnknown_03001279 = src->field_51B;
+
+ for (i = 0; i < 6; i++)
+ {
+ sUnknown_0203CCDC[i] = src->field_50E[i];
+ }
+
+ gSaveBlock2Ptr->frontierChosenLvl = src->field_4FC;
+
+ for (i = 0; i < BATTLE_BANKS_COUNT; i++)
+ {
+ for (j = 0; j < BANK_RECORD_SIZE; j++)
+ {
+ sBattleRecords[i][j] = src->battleRecord[i][j];
+ }
+ }
+}
+
+void PlayRecordedBattle(void (*CB2_After)(void))
+{
+ struct RecordedBattleSave *battleSave = AllocZeroed(sizeof(struct RecordedBattleSave));
+ if (AllocTryCopyRecordedBattleSaveData(battleSave) == TRUE)
+ {
+ u8 taskId;
+
+ RecordedBattle_SaveParties();
+ SetRecordedBattleVarsFromSave(battleSave);
+
+ taskId = CreateTask(Task_StartAfterCountdown, 1);
+ gTasks[taskId].tFramesToWait = 128;
+
+ sCallback2_AfterRecordedBattle = CB2_After;
+ PlayMapChosenOrBattleBGM(FALSE);
+ SetMainCallback2(CB2_RecordedBattle);
+ }
+ Free(battleSave);
+}
+
+#undef tFramesToWait
+
+static void CB2_RecordedBattle(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTasks();
+}
+
+u8 sub_8185EA0(void)
+{
+ return sUnknown_0203C7AE;
+}
+
+u8 sub_8185EAC(void)
+{
+ return sUnknown_0203C7AF;
+}
+
+void RecordedBattle_SaveParties(void)
+{
+ s32 i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ sSavedPlayerParty[i] = gPlayerParty[i];
+ sSavedOpponentParty[i] = gEnemyParty[i];
+ }
+}
+
+static void RecordedBattle_RestoreSavedParties(void)
+{
+ s32 i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ gPlayerParty[i] = sSavedPlayerParty[i];
+ gEnemyParty[i] = sSavedOpponentParty[i];
+ }
+}
+
+u8 GetActiveBankLinkPlayerGender(void)
+{
+ s32 i;
+
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ if (gLinkPlayers[i].lp_field_18 == gActiveBank)
+ break;
+ }
+
+ if (i != MAX_LINK_PLAYERS)
+ return gLinkPlayers[i].gender;
+
+ return 0;
+}
+
+void sub_8185F84(void)
+{
+ sUnknown_0203C7B5 = 0;
+}
+
+void sub_8185F90(u16 arg0)
+{
+ sUnknown_0203C7B5 |= (arg0 & 0x8000) >> 0xF;
+}
+
+u8 sub_8185FAC(void)
+{
+ return sUnknown_0203C7B5;
+}
+
+u8 GetBattleStyleInRecordedBattle(void)
+{
+ return sRecordedBattle_BattleStyle;
+}
+
+u8 GetTextSpeedInRecordedBattle(void)
+{
+ return sRecordedBattle_TextSpeed;
+}
+
+void RecordedBattle_CopyBankMoves(void)
+{
+ s32 i;
+
+ if (GetBankSide(gActiveBank) == SIDE_OPPONENT)
+ return;
+ if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ return;
+ if (sUnknown_0203C7AC == 2)
+ return;
+
+ for (i = 0; i < 4; i++)
+ {
+ sRecordedBattle_PlayerMonMoves[gActiveBank / 2][i] = gBattleMons[gActiveBank].moves[i];
+ }
+}
+
+#define ACTION_MOVE_CHANGE 6
+
+void sub_818603C(u8 arg0)
+{
+ s32 bank, j, k;
+
+ if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ return;
+
+ for (bank = 0; bank < gNoOfAllBanks; bank++)
+ {
+ if (GetBankSide(bank) != SIDE_OPPONENT) // player's side only
+ {
+ if (arg0 == 1)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (gBattleMons[bank].moves[j] != sRecordedBattle_PlayerMonMoves[bank / 2][j])
+ break;
+ }
+ if (j != 4) // player's mon's move has been changed
+ {
+ RecordedBattle_SetBankAction(bank, ACTION_MOVE_CHANGE);
+ for (j = 0; j < 4; j++)
+ {
+ for (k = 0; k < 4; k++)
+ {
+ if (gBattleMons[bank].moves[j] == sRecordedBattle_PlayerMonMoves[bank / 2][k])
+ {
+ RecordedBattle_SetBankAction(bank, k);
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if (sBattleRecords[bank][sRecordedBytesNo[bank]] == ACTION_MOVE_CHANGE)
+ {
+ u8 ppBonuses[4];
+ u8 array1[4];
+ u8 array2[4];
+ struct MovePp movePp;
+ u8 array3[8];
+ u8 var;
+
+ RecordedBattle_ReadBankAction(bank);
+ for (j = 0; j < 4; j++)
+ {
+ ppBonuses[j] = ((gBattleMons[bank].ppBonuses & ((3 << (j << 1)))) >> (j << 1));
+ }
+ for (j = 0; j < 4; j++)
+ {
+ array1[j] = RecordedBattle_ReadBankAction(bank);
+ movePp.moves[j] = gBattleMons[bank].moves[array1[j]];
+ movePp.pp[j] = gBattleMons[bank].pp[array1[j]];
+ array3[j] = ppBonuses[array1[j]];
+ array2[j] = (gDisableStructs[bank].unk18_b & gBitTable[j]) >> j;
+ }
+ for (j = 0; j < 4; j++)
+ {
+ gBattleMons[bank].moves[j] = movePp.moves[j];
+ gBattleMons[bank].pp[j] = movePp.pp[j];
+ }
+ gBattleMons[bank].ppBonuses = 0;
+ gDisableStructs[bank].unk18_b = 0;
+ for (j = 0; j < 4; j++)
+ {
+ gBattleMons[bank].ppBonuses |= (array3[j]) << (j << 1);
+ gDisableStructs[bank].unk18_b |= (array2[j]) << (j);
+ }
+
+ if (!(gBattleMons[bank].status2 & STATUS2_TRANSFORMED))
+ {
+ for (j = 0; j < 4; j++)
+ {
+ ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1));
+ }
+ for (j = 0; j < 4; j++)
+ {
+ movePp.moves[j] = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_MOVE1 + array1[j], NULL);
+ movePp.pp[j] = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_PP1 + array1[j], NULL);
+ array3[j] = ppBonuses[array1[j]];
+ }
+ for (j = 0; j < 4; j++)
+ {
+ SetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_MOVE1 + j, &movePp.moves[j]);
+ SetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_PP1 + j, &movePp.pp[j]);
+ }
+ var = 0;
+ for (j = 0; j < 4; j++)
+ {
+ var |= (array3[j]) << (j << 1);
+ }
+ SetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_PP_BONUSES, &var);
+ }
+
+ gChosenMovesByBanks[bank] = gBattleMons[bank].moves[*(gBattleStruct->chosenMovePositions + bank)];
+ }
+ }
+ }
+ }
+}
+
+u32 GetAiScriptsInRecordedBattle(void)
+{
+ return sRecordedBattle_AI_Scripts;
+}
+
+void sub_8186444(void)
+{
+ sUnknown_0203CCD0 = 1;
+}
+
+bool8 sub_8186450(void)
+{
+ return (sUnknown_0203CCD0 == 0);
+}
+
+void sub_8186468(u8 *dst)
+{
+ s32 i;
+
+ for (i = 0; i < 8; i++)
+ dst[i] = sUnknown_0203CCD1[i];
+
+ dst[7] = EOS;
+ ConvertInternationalString(dst, gUnknown_03001278);
+}
+
+u8 sub_818649C(void)
+{
+ return sUnknown_0203CCD9;
+}
+
+u8 sub_81864A8(void)
+{
+ return sUnknown_0203CCDA;
+}
+
+u8 sub_81864B4(void)
+{
+ return gUnknown_03001278;
+}
+
+u8 sub_81864C0(void)
+{
+ return gUnknown_03001279;
+}
+
+void sub_81864CC(void)
+{
+ sUnknown_0203CCE8 = gBattleOutcome;
+}
+
+u16 *sub_81864E0(void)
+{
+ return sUnknown_0203CCDC;
+}
diff --git a/src/region_map.c b/src/region_map.c
index da96475c0..8c8f64df9 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -1,7 +1,6 @@
-
-// Includes
#include "global.h"
#include "main.h"
+#include "text.h"
#include "menu.h"
#include "malloc.h"
#include "gpu_regs.h"
@@ -17,7 +16,6 @@
#include "string_util.h"
#include "international_string_util.h"
#include "strings.h"
-#include "text.h"
#include "text_window.h"
#include "songs.h"
#include "m4a.h"
diff --git a/src/save.c b/src/save.c
index 2c1b26ca9..528c67145 100644
--- a/src/save.c
+++ b/src/save.c
@@ -797,7 +797,7 @@ u16 sub_815355C(void)
return 0;
}
-u32 sub_81535DC(u8 sector, u8* dst)
+u32 TryCopySpecialSaveSection(u8 sector, u8* dst)
{
s32 i;
s32 size;
@@ -826,6 +826,7 @@ u32 sub_8153634(u8 sector, u8* src)
if (sector != 30 && sector != 31)
return 0xFF;
+
savDataBuffer = &gSaveDataBuffer;
*(u32*)(savDataBuffer) = 0xB39D;
diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c
index 3f49b89e6..ef01f0293 100755
--- a/src/save_failed_screen.c
+++ b/src/save_failed_screen.c
@@ -13,8 +13,6 @@
#define MSG_WIN_TOP 12
#define CLOCK_WIN_TOP (MSG_WIN_TOP - 4)
-extern void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor *color, s8 speed, u8 *str);
-
extern void (*gGameContinueCallback)(void);
extern u32 gDamagedSaveSectors;
diff --git a/src/text.c b/src/text.c
index 8108a6867..a13ed162d 100644
--- a/src/text.c
+++ b/src/text.c
@@ -13,7 +13,7 @@ extern void CopyWindowToVram(u8 windowId, u8 mode);
extern u16 Font6Func(struct TextPrinter *textPrinter);
extern u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese);
extern void PlaySE(u16 songNum);
-extern u8* sub_81AFC74(u8 a1);
+extern u8* UnkTextUtil_GetPtrI(u8 a1);
EWRAM_DATA struct TextPrinter gTempTextPrinter = {0};
EWRAM_DATA struct TextPrinter gTextPrinters[NUM_TEXT_PRINTERS] = {0};
@@ -190,7 +190,7 @@ bool16 AddTextPrinter(struct TextSubPrinter *textSubPrinter, u8 speed, void (*ca
gTempTextPrinter.japanese = 0;
GenerateFontHalfRowLookupTable(textSubPrinter->fontColor_h, textSubPrinter->bgColor, textSubPrinter->shadowColor);
- if (speed != 0xFF && speed != 0x0)
+ if (speed != TEXT_SPEED_FF && speed != 0x0)
{
--gTempTextPrinter.text_speed;
gTextPrinters[textSubPrinter->windowId] = gTempTextPrinter;
@@ -204,7 +204,7 @@ bool16 AddTextPrinter(struct TextSubPrinter *textSubPrinter, u8 speed, void (*ca
break;
}
- if (speed != 0xFF)
+ if (speed != TEXT_SPEED_FF)
CopyWindowToVram(gTempTextPrinter.subPrinter.windowId, 2);
gTextPrinters[textSubPrinter->windowId].sub_union.sub.active = 0;
}
@@ -2932,7 +2932,7 @@ u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
}
case 0xF7:
if (bufferPointer == NULL)
- bufferPointer = sub_81AFC74(*++str);
+ bufferPointer = UnkTextUtil_GetPtrI(*++str);
while (*bufferPointer != 0xFF)
{
glyphWidth = func(*bufferPointer++, isJapanese);
diff --git a/src/tv.c b/src/tv.c
index c1d648652..1d978b093 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -1883,7 +1883,7 @@ void PutFishingAdviceShowOnTheAir(void)
}
}
-void sub_80EDA3C(u16 species)
+void SetPokemonAnglerSpecies(u16 species)
{
sPokemonAnglerSpecies = species;
}
diff --git a/src/unk_81BAD84.c b/src/unk_81BAD84.c
new file mode 100644
index 000000000..9ba98dd87
--- /dev/null
+++ b/src/unk_81BAD84.c
@@ -0,0 +1,47 @@
+#include "global.h"
+#include "graphics.h"
+
+const struct {
+ const u8 *gfx;
+ const u8 *tileMap;
+ const u16 *pltt;
+} gUnknown_08617128[] = {
+ {
+ gUnknown_08DD87C0,
+ gUnknown_08DD8EE0,
+ gUnknown_08DD8780
+ }, {
+ gUnknown_08DD90E0,
+ gUnknown_08DD9718,
+ gUnknown_08DD9080
+ }, {
+ gUnknown_08DD98B4,
+ gUnknown_08DD9E58,
+ gUnknown_08DD9874
+ }, {
+ gUnknown_08DDA02C,
+ gUnknown_08DDA63C,
+ gUnknown_08DD9FEC
+ }, {
+ gUnknown_08DDA840,
+ gUnknown_08DDAE40,
+ gUnknown_08DDA800
+ }, {
+ gUnknown_08DDB020,
+ gUnknown_08DDB2C4,
+ gUnknown_08DDAFE0
+ }
+};
+
+void sub_81BAD84(u32 idx)
+{
+ REG_DISPCNT = 0x0000;
+ REG_BG0HOFS = 0x0000;
+ REG_BG0VOFS = 0x0000;
+ REG_BLDCNT = 0x0000;
+ LZ77UnCompVram(gUnknown_08617128[idx].gfx, (void *)BG_CHAR_ADDR(0));
+ LZ77UnCompVram(gUnknown_08617128[idx].tileMap, (void *)BG_SCREEN_ADDR(31));
+ CpuCopy16(gUnknown_08617128[idx].pltt, (void *)PLTT, 0x200);
+ REG_BG0CNT = 0x1f00;
+ REG_DISPCNT = DISPCNT_BG0_ON;
+}
diff --git a/src/unk_text_util.c b/src/unk_text_util.c
new file mode 100644
index 000000000..2773522b2
--- /dev/null
+++ b/src/unk_text_util.c
@@ -0,0 +1,56 @@
+#include "global.h"
+#include "text.h"
+#include "unk_text_util.h"
+#include "string_util.h"
+
+static EWRAM_DATA const u8 *sStringPointers[8] = {};
+
+void UnkTextUtil_Reset(void)
+{
+ const u8 **ptr;
+ u8 *fillval;
+ const u8 **ptr2;
+
+ ptr = sStringPointers;
+ fillval = NULL;
+ ptr2 = ptr + (ARRAY_COUNT(sStringPointers) - 1);
+ do
+ {
+ *ptr2-- = fillval;
+ } while ((int)ptr2 >= (int)ptr);
+}
+
+void UnkTextUtil_SetPtrI(u8 idx, const u8 *ptr)
+{
+ if (idx < ARRAY_COUNT(sStringPointers))
+ {
+ sStringPointers[idx] = ptr;
+ }
+}
+
+u8 *UnkTextUtil_StringExpandPlaceholders(u8 *dest, const u8 *src)
+{
+ while (*src != EOS)
+ {
+ if (*src != CHAR_SPECIAL_F7)
+ {
+ *dest++ = *src++;
+ }
+ else
+ {
+ src++;
+ if (sStringPointers[*src] != NULL)
+ {
+ dest = StringCopy(dest, sStringPointers[*src]);
+ }
+ src++;
+ }
+ }
+ *dest = EOS;
+ return dest;
+}
+
+const u8 *UnkTextUtil_GetPtrI(u8 idx)
+{
+ return sStringPointers[idx];
+}
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
new file mode 100644
index 000000000..ce1e02e5e
--- /dev/null
+++ b/src/wild_encounter.c
@@ -0,0 +1,933 @@
+#include "global.h"
+#include "wild_encounter.h"
+#include "pokemon.h"
+#include "species.h"
+#include "metatile_behavior.h"
+#include "fieldmap.h"
+#include "rng.h"
+#include "map_constants.h"
+#include "field_player_avatar.h"
+#include "abilities.h"
+#include "event_data.h"
+#include "safari_zone.h"
+#include "pokeblock.h"
+#include "battle_setup.h"
+#include "roamer.h"
+#include "game_stat.h"
+#include "tv.h"
+#include "link.h"
+#include "script.h"
+#include "items.h"
+
+extern const u8 EventScript_RepelWoreOff[];
+
+#define NUM_FEEBAS_SPOTS 6
+
+extern const u16 gRoute119WaterTileData[];
+extern const struct WildPokemonHeader gBattlePikeWildMonHeaders[];
+extern const struct WildPokemonHeader gBattlePyramidWildMonHeaders[];
+extern const struct WildPokemon gWildFeebasRoute119Data;
+
+extern u8 GetBattlePikeWildMonHeaderId(void);
+extern bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate);
+extern void GenerateBattlePyramidWildMon(void);
+extern bool8 InBattlePike(void);
+extern bool8 InBattlePyramid(void);
+
+// this file's functions
+static u16 FeebasRandom(void);
+static void FeebasSeedRng(u16 seed);
+static bool8 IsWildLevelAllowedByRepel(u8 level);
+static void ApplyFluteEncounterRateMod(u32 *encRate);
+static void ApplyCleanseTagEncounterRateMod(u32 *encRate);
+static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex);
+static bool8 IsAbilityAllowingEncounter(u8 level);
+
+EWRAM_DATA u8 sWildEncountersDisabled = 0;
+EWRAM_DATA u32 sFeebasRngValue = 0;
+
+void DisableWildEncounters(bool8 disabled)
+{
+ sWildEncountersDisabled = disabled;
+}
+
+static u16 GetRoute119WaterTileNum(s16 x, s16 y, u8 section)
+{
+ u16 xCur;
+ u16 yCur;
+ u16 yMin = gRoute119WaterTileData[section * 3 + 0];
+ u16 yMax = gRoute119WaterTileData[section * 3 + 1];
+ u16 tileNum = gRoute119WaterTileData[section * 3 + 2];
+
+ for (yCur = yMin; yCur <= yMax; yCur++)
+ {
+ for (xCur = 0; xCur < gMapHeader.mapData->width; xCur++)
+ {
+ u8 tileBehaviorId = MapGridGetMetatileBehaviorAt(xCur + 7, yCur + 7);
+ if (MetatileBehavior_IsSurfableAndNotWaterfall(tileBehaviorId) == TRUE)
+ {
+ tileNum++;
+ if (x == xCur && y == yCur)
+ return tileNum;
+ }
+ }
+ }
+ return tileNum + 1;
+}
+
+static bool8 CheckFeebas(void)
+{
+ u8 i;
+ u16 feebasSpots[NUM_FEEBAS_SPOTS];
+ s16 x;
+ s16 y;
+ u8 route119Section = 0;
+ u16 waterTileNum;
+
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP_ROUTE119
+ && gSaveBlock1Ptr->location.mapNum == MAP_ID_ROUTE119)
+ {
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ x -= 7;
+ y -= 7;
+
+#ifdef NONMATCHING
+ if (y >= gRoute119WaterTileData[3 * 1 + 0] && y <= gRoute119WaterTileData[3 * 1 + 1])
+ route119Section = 1;
+ if (y >= gRoute119WaterTileData[3 * 2 + 0] && y <= gRoute119WaterTileData[3 * 2 + 1])
+ route119Section = 2;
+#else
+ {
+ register const u16 *arr asm("r0");
+ if (y >= (arr = gRoute119WaterTileData)[3 * 1 + 0] && y <= arr[3 * 1 + 1])
+ route119Section = 1;
+ if (y >= arr[3 * 2 + 0] && y <= arr[3 * 2 + 1])
+ route119Section = 2;
+ }
+#endif
+
+ if (Random() % 100 > 49) // 50% chance of encountering Feebas
+ return FALSE;
+
+ FeebasSeedRng(gSaveBlock1Ptr->easyChatPairs[0].unk2);
+ for (i = 0; i != NUM_FEEBAS_SPOTS;)
+ {
+ feebasSpots[i] = FeebasRandom() % 447;
+ if (feebasSpots[i] == 0)
+ feebasSpots[i] = 447;
+ if (feebasSpots[i] < 1 || feebasSpots[i] >= 4)
+ i++;
+ }
+ waterTileNum = GetRoute119WaterTileNum(x, y, route119Section);
+ for (i = 0; i < NUM_FEEBAS_SPOTS; i++)
+ {
+ if (waterTileNum == feebasSpots[i])
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+// The number 1103515245 comes from the example implementation of rand and srand
+// in the ISO C standard.
+
+static u16 FeebasRandom(void)
+{
+ sFeebasRngValue = (1103515245 * sFeebasRngValue) + 12345;
+ return sFeebasRngValue >> 16;
+}
+
+static void FeebasSeedRng(u16 seed)
+{
+ sFeebasRngValue = seed;
+}
+
+static u8 ChooseWildMonIndex_Land(void)
+{
+ u8 rand = Random() % 100;
+
+ if (rand < 20) // 20% chance
+ return 0;
+ else if (rand >= 20 && rand < 40) // 20% chance
+ return 1;
+ else if (rand >= 40 && rand < 50) // 10% chance
+ return 2;
+ else if (rand >= 50 && rand < 60) // 10% chance
+ return 3;
+ else if (rand >= 60 && rand < 70) // 10% chance
+ return 4;
+ else if (rand >= 70 && rand < 80) // 10% chance
+ return 5;
+ else if (rand >= 80 && rand < 85) // 5% chance
+ return 6;
+ else if (rand >= 85 && rand < 90) // 5% chance
+ return 7;
+ else if (rand >= 90 && rand < 94) // 4% chance
+ return 8;
+ else if (rand >= 94 && rand < 98) // 4% chance
+ return 9;
+ else if (rand == 98) // 1% chance
+ return 10;
+ else // 1% chance
+ return 11;
+}
+
+static u8 ChooseWildMonIndex_WaterRock(void)
+{
+ u8 rand = Random() % 100;
+
+ if (rand < 60) // 60% chance
+ return 0;
+ else if (rand >= 60 && rand < 90) // 30% chance
+ return 1;
+ else if (rand >= 90 && rand < 95) // 5% chance
+ return 2;
+ else if (rand >= 95 && rand < 99) // 4% chance
+ return 3;
+ else // 1% chance
+ return 4;
+}
+
+enum
+{
+ OLD_ROD,
+ GOOD_ROD,
+ SUPER_ROD
+};
+
+static u8 ChooseWildMonIndex_Fishing(u8 rod)
+{
+ u8 wildMonIndex = 0;
+ u8 rand = Random() % 100;
+
+ switch (rod)
+ {
+ case OLD_ROD:
+ if (rand < 70) // 70% chance
+ wildMonIndex = 0;
+ else // 30% chance
+ wildMonIndex = 1;
+ break;
+ case GOOD_ROD:
+ if (rand < 60) // 60% chance
+ wildMonIndex = 2;
+ if (rand >= 60 && rand < 80) // 20% chance
+ wildMonIndex = 3;
+ if (rand >= 80 && rand < 100) // 20% chance
+ wildMonIndex = 4;
+ break;
+ case SUPER_ROD:
+ if (rand < 40) // 40% chance
+ wildMonIndex = 5;
+ if (rand >= 40 && rand < 80) // 40% chance
+ wildMonIndex = 6;
+ if (rand >= 80 && rand < 95) // 15% chance
+ wildMonIndex = 7;
+ if (rand >= 95 && rand < 99) // 4% chance
+ wildMonIndex = 8;
+ if (rand == 99) // 1% chance
+ wildMonIndex = 9;
+ break;
+ }
+ return wildMonIndex;
+}
+
+static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon)
+{
+ u8 min;
+ u8 max;
+ u8 range;
+ u8 rand;
+
+ // Make sure minimum level is less than maximum level
+ if (wildPokemon->maxLevel >= wildPokemon->minLevel)
+ {
+ min = wildPokemon->minLevel;
+ max = wildPokemon->maxLevel;
+ }
+ else
+ {
+ min = wildPokemon->maxLevel;
+ max = wildPokemon->minLevel;
+ }
+ range = max - min + 1;
+ rand = Random() % range;
+
+ // check ability for max level mon
+ if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3))
+ {
+ u8 ability = GetMonAbility(&gPlayerParty[0]);
+ if (ability == ABILITY_HUSTLE || ability == ABILITY_VITAL_SPIRIT || ability == ABILITY_PRESSURE)
+ {
+ if (Random() % 2 == 0)
+ return max;
+
+ if (rand != 0)
+ rand--;
+ }
+ }
+
+ return min + rand;
+}
+
+static u16 GetCurrentMapWildMonHeaderId(void)
+{
+ u16 i;
+
+ for (i = 0; ; i++)
+ {
+ const struct WildPokemonHeader *wildHeader = &gWildMonHeaders[i];
+ if (wildHeader->mapGroup == 0xFF)
+ break;
+
+ if (gWildMonHeaders[i].mapGroup == gSaveBlock1Ptr->location.mapGroup &&
+ gWildMonHeaders[i].mapNum == gSaveBlock1Ptr->location.mapNum)
+ {
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP_ALTERING_CAVE &&
+ gSaveBlock1Ptr->location.mapNum == MAP_ID_ALTERING_CAVE)
+ {
+ u16 alteringCaveId = VarGet(VAR_ALTERING_CAVE_WILD_SET);
+ if (alteringCaveId > 8)
+ alteringCaveId = 0;
+
+ i += alteringCaveId;
+ }
+
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+static u8 PickWildMonNature(void)
+{
+ u8 i;
+ u8 j;
+ struct Pokeblock *safariPokeblock;
+ u8 natures[25];
+
+ if (GetSafariZoneFlag() == TRUE && Random() % 100 < 80)
+ {
+ safariPokeblock = SafariZoneGetActivePokeblock();
+ if (safariPokeblock != NULL)
+ {
+ for (i = 0; i < 25; i++)
+ natures[i] = i;
+ for (i = 0; i < 24; i++)
+ {
+ for (j = i + 1; j < 25; j++)
+ {
+ if (Random() & 1)
+ {
+ u8 temp = natures[i];
+
+ natures[i] = natures[j];
+ natures[j] = temp;
+ }
+ }
+ }
+ for (i = 0; i < 25; i++)
+ {
+ if (PokeblockGetGain(natures[i], safariPokeblock) > 0)
+ return natures[i];
+ }
+ }
+ }
+ // check synchronize for a pokemon with the same ability
+ if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)
+ && GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE
+ && Random() % 2 == 0)
+ {
+ return GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY) % 25;
+ }
+
+ // random nature
+ return Random() % 25;
+}
+
+static void CreateWildMon(u16 species, u8 level)
+{
+ bool32 checkCuteCharm;
+
+ ZeroEnemyPartyMons();
+ checkCuteCharm = TRUE;
+
+ switch (gBaseStats[species].genderRatio)
+ {
+ case MON_MALE:
+ case MON_FEMALE:
+ case MON_GENDERLESS:
+ checkCuteCharm = FALSE;
+ break;
+ }
+
+ if (checkCuteCharm
+ && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)
+ && GetMonAbility(&gPlayerParty[0]) == ABILITY_CUTE_CHARM
+ && Random() % 3 != 0)
+ {
+ u16 leadingMonSpecies = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES);
+ u32 leadingMonPersonality = GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY);
+ u8 gender = GetGenderFromSpeciesAndPersonality(leadingMonSpecies, leadingMonPersonality);
+
+ // misses mon is genderless check, although no genderless mon can have cute charm as ability
+ if (gender == MON_FEMALE)
+ gender = MON_MALE;
+ else
+ gender = MON_FEMALE;
+
+ CreateMonWithGenderNatureLetter(&gEnemyParty[0], species, level, 32, gender, PickWildMonNature(), 0);
+ return;
+ }
+
+ CreateMonWithNature(&gEnemyParty[0], species, level, 32, PickWildMonNature());
+}
+
+enum
+{
+ WILD_AREA_LAND,
+ WILD_AREA_WATER,
+ WILD_AREA_ROCKS,
+ WILD_AREA_FISHING,
+};
+
+#define WILD_CHECK_REPEL 0x1
+#define WILD_CHECK_KEEN_EYE 0x2
+
+static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 area, u8 flags)
+{
+ u8 wildMonIndex = 0;
+ u8 level;
+
+ switch (area)
+ {
+ case WILD_AREA_LAND:
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex))
+ break;
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex))
+ break;
+
+ wildMonIndex = ChooseWildMonIndex_Land();
+ break;
+ case WILD_AREA_WATER:
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex))
+ break;
+
+ wildMonIndex = ChooseWildMonIndex_WaterRock();
+ break;
+ case WILD_AREA_ROCKS:
+ wildMonIndex = ChooseWildMonIndex_WaterRock();
+ break;
+ }
+
+ level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]);
+ if (flags & WILD_CHECK_REPEL && !IsWildLevelAllowedByRepel(level))
+ return FALSE;
+ if (gMapHeader.mapDataId != 0x166 && flags & WILD_CHECK_KEEN_EYE && !IsAbilityAllowingEncounter(level))
+ return FALSE;
+
+ CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level);
+ return TRUE;
+}
+
+static u16 GenerateFishingWildMon(const struct WildPokemonInfo *wildMonInfo, u8 rod)
+{
+ u8 wildMonIndex = ChooseWildMonIndex_Fishing(rod);
+ u8 level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]);
+
+ CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level);
+ return wildMonInfo->wildPokemon[wildMonIndex].species;
+}
+
+static bool8 SetUpMassOutbreakEncounter(u8 flags)
+{
+ u16 i;
+
+ if (flags & WILD_CHECK_REPEL && !IsWildLevelAllowedByRepel(gSaveBlock1Ptr->outbreakPokemonLevel))
+ return FALSE;
+
+ CreateWildMon(gSaveBlock1Ptr->outbreakPokemonSpecies, gSaveBlock1Ptr->outbreakPokemonLevel);
+ for (i = 0; i < 4; i++)
+ SetMonMoveSlot(&gEnemyParty[0], gSaveBlock1Ptr->outbreakPokemonMoves[i], i);
+
+ return TRUE;
+}
+
+static bool8 DoMassOutbreakEncounterTest(void)
+{
+ if (gSaveBlock1Ptr->outbreakPokemonSpecies != 0
+ && gSaveBlock1Ptr->location.mapNum == gSaveBlock1Ptr->outbreakLocationMapNum
+ && gSaveBlock1Ptr->location.mapGroup == gSaveBlock1Ptr->outbreakLocationMapGroup)
+ {
+ if (Random() % 100 < gSaveBlock1Ptr->outbreakPokemonProbability)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool8 DoWildEncounterRateDiceRoll(u16 encounterRate)
+{
+ if (Random() % 2880 < encounterRate)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility)
+{
+ encounterRate *= 16;
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ encounterRate = encounterRate * 80 / 100;
+ ApplyFluteEncounterRateMod(&encounterRate);
+ ApplyCleanseTagEncounterRateMod(&encounterRate);
+ if (!ignoreAbility && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3))
+ {
+ u32 ability = GetMonAbility(&gPlayerParty[0]);
+
+ if (ability == ABILITY_STENCH && gMapHeader.mapDataId == 0x169)
+ encounterRate = encounterRate * 3 / 4;
+ else if (ability == ABILITY_STENCH)
+ encounterRate /= 2;
+ else if (ability == ABILITY_ILLUMINATE)
+ encounterRate *= 2;
+ else if (ability == ABILITY_WHITE_SMOKE)
+ encounterRate /= 2;
+ else if (ability == ABILITY_ARENA_TRAP)
+ encounterRate *= 2;
+ else if (ability == ABILITY_SAND_VEIL && gSaveBlock1Ptr->weather == 8)
+ encounterRate /= 2;
+ }
+ if (encounterRate > 2880)
+ encounterRate = 2880;
+ return DoWildEncounterRateDiceRoll(encounterRate);
+}
+
+static bool8 DoGlobalWildEncounterDiceRoll(void)
+{
+ if (Random() % 100 >= 60)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static bool8 AreLegendariesInSootopolisPreventingEncounters(void)
+{
+ if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP_SOOTOPOLIS_CITY
+ || gSaveBlock1Ptr->location.mapNum != MAP_ID_SOOTOPOLIS_CITY)
+ {
+ return FALSE;
+ }
+
+ return FlagGet(FLAG_LEGENDARIES_IN_SOOTOPOLIS);
+}
+
+bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavior)
+{
+ u16 headerId;
+ struct Roamer *roamer;
+
+ if (sWildEncountersDisabled == TRUE)
+ return FALSE;
+
+ headerId = GetCurrentMapWildMonHeaderId();
+ if (headerId == 0xFFFF) // invalid
+ {
+ if (gMapHeader.mapDataId == 0x166)
+ {
+ headerId = GetBattlePikeWildMonHeaderId();
+ if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
+ return FALSE;
+ else if (DoWildEncounterRateTest(gBattlePikeWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE)
+ return FALSE;
+ else if (TryGenerateWildMon(gBattlePikeWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_KEEN_EYE) != TRUE)
+ return FALSE;
+ else if (!TryGenerateBattlePikeWildMon(TRUE))
+ return FALSE;
+
+ BattleSetup_StartBattlePikeWildBattle();
+ return TRUE;
+ }
+ if (gMapHeader.mapDataId == 0x169)
+ {
+ headerId = gSaveBlock2Ptr->battlePyramidWildHeaderId;
+ if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
+ return FALSE;
+ else if (DoWildEncounterRateTest(gBattlePyramidWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE)
+ return FALSE;
+ else if (TryGenerateWildMon(gBattlePyramidWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_KEEN_EYE) != TRUE)
+ return FALSE;
+
+ GenerateBattlePyramidWildMon();
+ BattleSetup_StartWildBattle();
+ return TRUE;
+ }
+ }
+ else
+ {
+ if (MetatileBehavior_IsLandWildEncounter(currMetaTileBehavior) == TRUE)
+ {
+ if (gWildMonHeaders[headerId].landMonsInfo == NULL)
+ return FALSE;
+ else if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
+ return FALSE;
+ else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE)
+ return FALSE;
+
+ if (TryStartRoamerEncounter() == TRUE)
+ {
+ roamer = &gSaveBlock1Ptr->roamer;
+ if (!IsWildLevelAllowedByRepel(roamer->level))
+ return FALSE;
+
+ BattleSetup_StartRoamerBattle();
+ return TRUE;
+ }
+ else
+ {
+ if (DoMassOutbreakEncounterTest() == TRUE && SetUpMassOutbreakEncounter(WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE)
+ {
+ BattleSetup_StartWildBattle();
+ return TRUE;
+ }
+
+ // try a regular wild land encounter
+ if (TryGenerateWildMon(gWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE)
+ {
+ BattleSetup_StartWildBattle();
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+ }
+ else if (MetatileBehavior_IsWaterWildEncounter(currMetaTileBehavior) == TRUE
+ || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(currMetaTileBehavior) == TRUE))
+ {
+ if (AreLegendariesInSootopolisPreventingEncounters() == TRUE)
+ return FALSE;
+ else if (gWildMonHeaders[headerId].waterMonsInfo == NULL)
+ return FALSE;
+ else if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
+ return FALSE;
+ else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE)
+ return FALSE;
+
+ if (TryStartRoamerEncounter() == TRUE)
+ {
+ roamer = &gSaveBlock1Ptr->roamer;
+ if (!IsWildLevelAllowedByRepel(roamer->level))
+ return FALSE;
+
+ BattleSetup_StartRoamerBattle();
+ return TRUE;
+ }
+ else // try a regular surfing encounter
+ {
+ if (TryGenerateWildMon(gWildMonHeaders[headerId].waterMonsInfo, WILD_AREA_WATER, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE)
+ {
+ BattleSetup_StartWildBattle();
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+void RockSmashWildEncounter(void)
+{
+ u16 headerId = GetCurrentMapWildMonHeaderId();
+
+ if (headerId != 0xFFFF)
+ {
+ const struct WildPokemonInfo *wildPokemonInfo = gWildMonHeaders[headerId].rockSmashMonsInfo;
+
+ if (wildPokemonInfo == NULL)
+ {
+ gSpecialVar_Result = FALSE;
+ }
+ else if (DoWildEncounterRateTest(wildPokemonInfo->encounterRate, 1) == TRUE
+ && TryGenerateWildMon(wildPokemonInfo, 2, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE)
+ {
+ BattleSetup_StartWildBattle();
+ gSpecialVar_Result = TRUE;
+ }
+ else
+ {
+ gSpecialVar_Result = FALSE;
+ }
+ }
+ else
+ {
+ gSpecialVar_Result = FALSE;
+ }
+}
+
+bool8 SweetScentWildEncounter(void)
+{
+ s16 x, y;
+ u16 headerId;
+
+ PlayerGetDestCoords(&x, &y);
+ headerId = GetCurrentMapWildMonHeaderId();
+ if (headerId == 0xFFFF) // invalid
+ {
+ if (gMapHeader.mapDataId == 0x166)
+ {
+ headerId = GetBattlePikeWildMonHeaderId();
+ if (TryGenerateWildMon(gBattlePikeWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE)
+ return FALSE;
+
+ TryGenerateBattlePikeWildMon(FALSE);
+ BattleSetup_StartBattlePikeWildBattle();
+ return TRUE;
+ }
+ if (gMapHeader.mapDataId == 0x169)
+ {
+ headerId = gSaveBlock2Ptr->battlePyramidWildHeaderId;
+ if (TryGenerateWildMon(gBattlePyramidWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE)
+ return FALSE;
+
+ GenerateBattlePyramidWildMon();
+ BattleSetup_StartWildBattle();
+ return TRUE;
+ }
+ }
+ else
+ {
+ if (MetatileBehavior_IsLandWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == TRUE)
+ {
+ if (gWildMonHeaders[headerId].landMonsInfo == NULL)
+ return FALSE;
+
+ if (TryStartRoamerEncounter() == TRUE)
+ {
+ BattleSetup_StartRoamerBattle();
+ return TRUE;
+ }
+
+ if (DoMassOutbreakEncounterTest() == TRUE)
+ SetUpMassOutbreakEncounter(0);
+ else
+ TryGenerateWildMon(gWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0);
+
+ BattleSetup_StartWildBattle();
+ return TRUE;
+ }
+ else if (MetatileBehavior_IsWaterWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == TRUE)
+ {
+ if (AreLegendariesInSootopolisPreventingEncounters() == TRUE)
+ return FALSE;
+ if (gWildMonHeaders[headerId].waterMonsInfo == NULL)
+ return FALSE;
+
+ if (TryStartRoamerEncounter() == TRUE)
+ {
+ BattleSetup_StartRoamerBattle();
+ return TRUE;
+ }
+
+ TryGenerateWildMon(gWildMonHeaders[headerId].waterMonsInfo, WILD_AREA_WATER, 0);
+ BattleSetup_StartWildBattle();
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool8 DoesCurrentMapHaveFishingMons(void)
+{
+ u16 headerId = GetCurrentMapWildMonHeaderId();
+
+ if (headerId != 0xFFFF && gWildMonHeaders[headerId].fishingMonsInfo != NULL)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void FishingWildEncounter(u8 rod)
+{
+ u16 species;
+
+ if (CheckFeebas() == TRUE)
+ {
+ u8 level = ChooseWildMonLevel(&gWildFeebasRoute119Data);
+
+ species = gWildFeebasRoute119Data.species;
+ CreateWildMon(species, level);
+ }
+ else
+ {
+ species = GenerateFishingWildMon(gWildMonHeaders[GetCurrentMapWildMonHeaderId()].fishingMonsInfo, rod);
+ }
+ IncrementGameStat(GAME_STAT_FISHING_CAPTURES);
+ SetPokemonAnglerSpecies(species);
+ BattleSetup_StartWildBattle();
+}
+
+u16 GetLocalWildMon(bool8 *isWaterMon)
+{
+ u16 headerId;
+ const struct WildPokemonInfo *landMonsInfo;
+ const struct WildPokemonInfo *waterMonsInfo;
+
+ *isWaterMon = FALSE;
+ headerId = GetCurrentMapWildMonHeaderId();
+ if (headerId == 0xFFFF)
+ return SPECIES_NONE;
+ landMonsInfo = gWildMonHeaders[headerId].landMonsInfo;
+ waterMonsInfo = gWildMonHeaders[headerId].waterMonsInfo;
+ // Neither
+ if (landMonsInfo == NULL && waterMonsInfo == NULL)
+ return SPECIES_NONE;
+ // Land Pokemon
+ else if (landMonsInfo != NULL && waterMonsInfo == NULL)
+ return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species;
+ // Water Pokemon
+ else if (landMonsInfo == NULL && waterMonsInfo != NULL)
+ {
+ *isWaterMon = TRUE;
+ return waterMonsInfo->wildPokemon[ChooseWildMonIndex_WaterRock()].species;
+ }
+ // Either land or water Pokemon
+ if ((Random() % 100) < 80)
+ {
+ return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species;
+ }
+ else
+ {
+ *isWaterMon = TRUE;
+ return waterMonsInfo->wildPokemon[ChooseWildMonIndex_WaterRock()].species;
+ }
+}
+
+u16 GetLocalWaterMon(void)
+{
+ u16 headerId = GetCurrentMapWildMonHeaderId();
+
+ if (headerId != 0xFFFF)
+ {
+ const struct WildPokemonInfo *waterMonsInfo = gWildMonHeaders[headerId].waterMonsInfo;
+
+ if (waterMonsInfo)
+ return waterMonsInfo->wildPokemon[ChooseWildMonIndex_WaterRock()].species;
+ }
+ return SPECIES_NONE;
+}
+
+bool8 UpdateRepelCounter(void)
+{
+ u16 steps;
+
+ if (InBattlePike() || InBattlePyramid())
+ return FALSE;
+ if (InUnionRoom() == TRUE)
+ return FALSE;
+
+ steps = VarGet(VAR_REPEL_STEP_COUNT);
+
+ if (steps != 0)
+ {
+ steps--;
+ VarSet(VAR_REPEL_STEP_COUNT, steps);
+ if (steps == 0)
+ {
+ ScriptContext1_SetupScript(EventScript_RepelWoreOff);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static bool8 IsWildLevelAllowedByRepel(u8 wildLevel)
+{
+ u8 i;
+
+ if (!VarGet(VAR_REPEL_STEP_COUNT))
+ return TRUE;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_HP) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ {
+ u8 ourLevel = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
+
+ if (wildLevel < ourLevel)
+ return FALSE;
+ else
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static bool8 IsAbilityAllowingEncounter(u8 level)
+{
+ u8 ability;
+
+ if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3))
+ return TRUE;
+
+ ability = GetMonAbility(&gPlayerParty[0]);
+ if (ability == ABILITY_KEEN_EYE || ability == ABILITY_INTIMIDATE)
+ {
+ u8 playerMonLevel = GetMonData(&gPlayerParty[0], MON_DATA_LEVEL);
+ if (playerMonLevel > 5 && level <= playerMonLevel - 5 && !(Random() % 2))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 TryGetRandomWildMonIndexByType(const struct WildPokemon *wildMon, u8 type, u8 numMon, u8 *monIndex)
+{
+ u8 validIndexes[numMon]; // variable length array, an interesting feature
+ u8 i, validMonCount;
+
+ for (i = 0; i < numMon; i++)
+ validIndexes[i] = 0;
+
+ for (validMonCount = 0, i = 0; i < numMon; i++)
+ {
+ if (gBaseStats[wildMon[i].species].type1 == type || gBaseStats[wildMon[i].species].type2 == type)
+ validIndexes[validMonCount++] = i;
+ }
+
+ if (validMonCount == 0 || validMonCount == numMon)
+ return FALSE;
+
+ *monIndex = validIndexes[Random() % validMonCount];
+ return TRUE;
+}
+
+static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex)
+{
+ if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3))
+ return FALSE;
+ else if (GetMonAbility(&gPlayerParty[0]) != ability)
+ return FALSE;
+ else if (Random() % 2 != 0)
+ return FALSE;
+
+ return TryGetRandomWildMonIndexByType(wildMon, type, LAND_WILD_COUNT, monIndex);
+}
+
+static void ApplyFluteEncounterRateMod(u32 *encRate)
+{
+ if (FlagGet(FLAG_SYS_ENC_UP_ITEM) == TRUE)
+ *encRate += *encRate / 2;
+ else if (FlagGet(FLAG_SYS_ENC_DOWN_ITEM) == TRUE)
+ *encRate = *encRate / 2;
+}
+
+static void ApplyCleanseTagEncounterRateMod(u32 *encRate)
+{
+ if (GetMonData(&gPlayerParty[0], MON_DATA_HELD_ITEM) == ITEM_CLEANSE_TAG)
+ *encRate = *encRate * 2 / 3;
+}
diff --git a/sym_common.txt b/sym_common.txt
index 1a199dbb3..93b8431f4 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -75,7 +75,7 @@ gUnknown_0300307C: @ 300307C
gUnknown_03003084: @ 3003084
.space 0xC
-gUnknown_03003090: @ 3003090
+gRecvCmds: @ 3003090
.space 0x2
gUnknown_03003092: @ 3003092
@@ -111,7 +111,7 @@ gLinkVSyncDisabled: @ 30030FC
gUnknown_03003100: @ 3003100
.space 0x10
-gUnknown_03003110: @ 3003110
+gSendCmd: @ 3003110
.space 0x10
gUnknown_03003120: @ 3003120
@@ -248,7 +248,7 @@ gSaveBlock2Ptr: @ 3005D90
gPokemonStoragePtr: @ 3005D94
.space 0x4
-gUnknown_03005D98: @ 3005D98
+gInGameOpponentsNo: @ 3005D98
.space 0x4
gUnknown_03005D9C: @ 3005D9C
diff --git a/sym_ewram.txt b/sym_ewram.txt
index f037d9ace..ee47f8e37 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -34,13 +34,13 @@ gUnknown_020223C0: @ 20223C0
gBlockRecvBuffer: @ 20223C4
.space 0x500
-gUnknown_020228C4: @ 20228C4 gBlockSendBuffer
+gBlockSendBuffer: @ 20228C4 gBlockSendBuffer
.space 0x100
gUnknown_020229C4: @ 20229C4
.space 0x2
-gUnknown_020229C6: @ 20229C6
+gLinkType: @ 20229C6
.space 0x2
gUnknown_020229C8: @ 20229C8
@@ -312,7 +312,7 @@ gUnknown_020241E9: @ 20241E9
gCurrentMove: @ 20241EA
.space 0x2
-gLastUsedMove: @ 20241EC
+gChosenMove: @ 20241EC
.space 0x2
gRandomMove: @ 20241EE
@@ -363,31 +363,31 @@ gBattlescriptCurrInstr: @ 2024214
gActionForBanks: @ 202421C
.space 0x4
-gBattlescriptPtrsForSelection: @ 2024220
+gSelectionBattleScripts: @ 2024220
.space 0x10
-gUnknown_02024230: @ 2024230
+gPalaceSelectionBattleScripts: @ 2024230
.space 0x10
-gUnknownMovesUsedByBanks: @ 2024240
+gLastPrintedMoves: @ 2024240
.space 0x8
-gLastUsedMovesByBanks: @ 2024248
+gLastMoves: @ 2024248
.space 0x8
-gUnknown_02024250: @ 2024250
+gLastLandedMoves: @ 2024250
.space 0x8
-gUnknown_02024258: @ 2024258
+gLastHitByType: @ 2024258
.space 0x8
-gUnknown_02024260: @ 2024260
+gLastResultingMoves: @ 2024260
.space 0x8
gLockedMoves: @ 2024268
.space 0x8
-gUnknown_02024270: @ 2024270
+gLastHitBy: @ 2024270
.space 0x4
gChosenMovesByBanks: @ 2024274
@@ -547,12 +547,6 @@ gUnknown_020249B4: @ 20249B4
.include "src/daycare.o"
.include "src/load_save.o"
-gUnknown_02031C58: @ 2031C58
- .space 0x528
-
-gUnknown_02032180: @ 2032180
- .space 0x4
-
gUnknown_02032184: @ 2032184
.space 0x4
@@ -570,18 +564,8 @@ gUnknown_0203229C: @ 203229C
gUnknown_020322A0: @ 20322A0
.space 0x4
-
-gUnknown_020322A4: @ 20322A4
- .space 0x4
-
-gUnknown_020322A8: @ 20322A8
- .space 0x14
-
-gUnknown_020322BC: @ 20322BC
- .space 0x14
-
-gUnknown_020322D0: @ 20322D0
- .space 0x4
+
+ .include "src/berry_blender.o"
gDifferentSaveFile: @ 20322D4
.space 0x1
@@ -773,11 +757,7 @@ gUnknown_02038BF9: @ 2038BF9
gUnknown_02038BFC: @ 2038BFC
.space 0x4
-gUnknown_02038C00: @ 2038C00
- .space 0x4
-
-gUnknown_02038C04: @ 2038C04
- .space 0x4
+ .include "src/wild_encounter.o"
gFieldEffectArguments: @ 2038C08
.space 0x20
@@ -1242,7 +1222,7 @@ gUnknown_0203AB6F: @ 203AB6F
gUnknown_0203AB70: @ 203AB70
.space 0x4
-gUnknown_0203AB74: @ 203AB74
+gResultsWindowId: @ 203AB74
.space 0x4
gUnknown_0203AB78: @ 203AB78
@@ -1428,90 +1408,7 @@ gUnknown_0203BD26: @ 203BD26
gUnknown_0203BD28: @ 203BD28
.space 0x4
-gRecordedBattleRngSeed: @ 203BD2C
- .space 0x4
-
-gBattlePalaceMoveSelectionRngValue: @ 203BD30
- .space 0x4
-
-gUnknown_0203BD34: @ 203BD34
- .space 0xA60
-
-gUnknown_0203C794: @ 203C794
- .space 0x8
-
-gUnknown_0203C79C: @ 203C79C
- .space 0x8
-
-gUnknown_0203C7A4: @ 203C7A4
- .space 0x8
-
-gUnknown_0203C7AC: @ 203C7AC
- .space 0x1
-
-gUnknown_0203C7AD: @ 203C7AD
- .space 0x1
-
-gUnknown_0203C7AE: @ 203C7AE
- .space 0x1
-
-gUnknown_0203C7AF: @ 203C7AF
- .space 0x1
-
-gUnknown_0203C7B0: @ 203C7B0
- .space 0x4
-
-gUnknown_0203C7B4: @ 203C7B4
- .space 0x1
-
-gUnknown_0203C7B5: @ 203C7B5
- .space 0x1
-
-gUnknown_0203C7B6: @ 203C7B6
- .space 0x1
-
-gUnknown_0203C7B7: @ 203C7B7
- .space 0x1
-
-gUnknown_0203C7B8: @ 203C7B8
- .space 0x4
-
-gUnknown_0203C7BC: @ 203C7BC
- .space 0x4
-
-gUnknown_0203C7C0: @ 203C7C0
- .space 0x258
-
-gUnknown_0203CA18: @ 203CA18
- .space 0x258
-
-gUnknown_0203CC70: @ 203CC70
- .space 0x10
-
-gUnknown_0203CC80: @ 203CC80
- .space 0x4
-
-gUnknown_0203CC84: @ 203CC84
- .space 0x4C
-
-gUnknown_0203CCD0: @ 203CCD0
- .space 0x1
-
-gUnknown_0203CCD1: @ 203CCD1
- .space 0x8
-
-gUnknown_0203CCD9: @ 203CCD9
- .space 0x1
-
-gUnknown_0203CCDA: @ 203CCDA
- .space 0x2
-
-gUnknown_0203CCDC: @ 203CCDC
- .space 0xC
-
-gUnknown_0203CCE8: @ 203CCE8
- .space 0x4
-
+ .include "src/recorded_battle.o"
.include "src/battle_dome_cards.o"
.include "src/lilycove_lady.o"
@@ -1632,8 +1529,7 @@ gUnknown_0203CE84: @ 203CE84
gUnknown_0203CE8C: @ 203CE8C
.space 0x10
-gUnknown_0203CE9C: @ 203CE9C
- .space 0x20
+ .include "src/unk_text_util.o"
gUnknown_0203CEBC: @ 203CEBC
.space 0x4