summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2019-11-24 08:44:21 -0500
committerGitHub <noreply@github.com>2019-11-24 08:44:21 -0500
commitbb8c712f75e6ed5ec66b2ee94c6da1157693c284 (patch)
treedc8d135873f6a7cc8ca1fad8bb5d1a7a84e4b0f7
parent2177f1f40b4dda2091ac3be3522c1bc4f6690e88 (diff)
parent2b2dfa7e49a0d28983a4e516ca44aee8cb7c66bb (diff)
Merge pull request #160 from jiangzhengwenjz/party_menu
party_menu
-rw-r--r--asm/field_control_avatar.s2
-rw-r--r--asm/field_effect.s10
-rw-r--r--asm/field_map_obj.s4
-rw-r--r--asm/field_weather.s6
-rw-r--r--asm/fldeff_cut.s6
-rw-r--r--asm/fldeff_flash.s6
-rw-r--r--asm/item_menu.s48
-rw-r--r--asm/link_rfu.s8
-rw-r--r--asm/link_rfu_3.s14
-rw-r--r--asm/naming_screen.s28
-rw-r--r--asm/overworld.s32
-rw-r--r--asm/party_menu.s19390
-rw-r--r--asm/pokedex_screen.s4
-rw-r--r--asm/pokemon_jump_2.s8
-rw-r--r--asm/pokemon_special_anim.s8
-rw-r--r--asm/pokemon_storage_system.s6
-rw-r--r--asm/pokemon_summary_screen.s78
-rw-r--r--asm/region_map.s28
-rw-r--r--asm/script_pokemon_util_80A0058.s4
-rw-r--r--asm/script_pokemon_util_80BF8FC.s2
-rw-r--r--asm/shop.s8
-rw-r--r--common_syms/party_menu.txt1
-rw-r--r--data/event_scripts.s6
-rw-r--r--data/graphics.s16
-rw-r--r--data/party_menu.s672
-rw-r--r--data/specials.inc4
-rw-r--r--data/strings.s252
-rw-r--r--graphics/interface/hold_icons.pal19
-rw-r--r--graphics/interface/hold_icons.pngbin0 -> 120 bytes
-rw-r--r--graphics/interface/party_menu_cancel_button.bin2
-rw-r--r--graphics/interface/party_menu_confirm_button.bin1
-rw-r--r--include/battle.h2
-rw-r--r--include/battle_tower.h2
-rw-r--r--include/constants/easy_chat.h22
-rw-r--r--include/constants/global.h2
-rw-r--r--include/constants/party_menu.h118
-rw-r--r--include/constants/trade.h118
-rw-r--r--include/easy_chat.h1
-rw-r--r--include/field_player_avatar.h2
-rw-r--r--include/field_screen_effect.h1
-rw-r--r--include/field_weather.h2
-rw-r--r--include/fldeff.h8
-rw-r--r--include/global.h22
-rw-r--r--include/graphics.h10
-rw-r--r--include/item.h3
-rw-r--r--include/item_menu.h4
-rw-r--r--include/item_use.h1
-rw-r--r--include/link_rfu.h4
-rw-r--r--include/list_menu.h12
-rw-r--r--include/menu_helpers.h7
-rw-r--r--include/new_menu_helpers.h4
-rw-r--r--include/overworld.h4
-rw-r--r--include/party_menu.h149
-rw-r--r--include/player_pc.h5
-rw-r--r--include/pokemon.h4
-rw-r--r--include/pokemon_icon.h2
-rw-r--r--include/pokemon_jump.h1
-rw-r--r--include/pokemon_special_anim.h6
-rw-r--r--include/pokemon_summary_screen.h2
-rw-r--r--include/quest_log.h3
-rw-r--r--include/region_map.h3
-rw-r--r--include/strings.h144
-rw-r--r--include/trade.h6
-rw-r--r--include/union_room.h7
-rw-r--r--ld_script.txt4
-rw-r--r--src/battle_controller_oak_old_man.c10
-rw-r--r--src/battle_controller_player.c10
-rw-r--r--src/battle_controller_pokedude.c10
-rw-r--r--src/battle_controllers.c6
-rw-r--r--src/battle_gfx_sfx_util.c6
-rw-r--r--src/battle_main.c52
-rw-r--r--src/battle_script_commands.c14
-rw-r--r--src/berry_pouch.c6
-rw-r--r--src/data/party_menu.h1316
-rw-r--r--src/data/pokemon/tutor_learnsets.h2813
-rw-r--r--src/daycare.c2
-rw-r--r--src/field_fadetransition.c2
-rw-r--r--src/field_poison.c4
-rw-r--r--src/field_specials.c4
-rw-r--r--src/fieldmap.c2
-rw-r--r--src/fldeff_softboiled.c60
-rw-r--r--src/fldeff_sweetscent.c2
-rw-r--r--src/item.c2
-rw-r--r--src/item_pc.c8
-rw-r--r--src/item_use.c163
-rw-r--r--src/list_menu.c126
-rw-r--r--src/mailbox_pc.c4
-rw-r--r--src/map_preview_screen.c2
-rw-r--r--src/menu.c8
-rw-r--r--src/menu_helpers.c4
-rw-r--r--src/new_menu_helpers.c4
-rw-r--r--src/option_menu.c2
-rw-r--r--src/party_menu.c6381
-rw-r--r--src/player_pc.c32
-rw-r--r--src/pokemon.c10
-rw-r--r--src/pokemon_icon.c2
-rw-r--r--src/quest_log.c36
-rw-r--r--src/roamer.c2
-rw-r--r--src/save_menu_util.c2
-rw-r--r--src/start_menu.c6
-rw-r--r--src/tm_case.c12
-rw-r--r--src/trade.c36
-rw-r--r--src/wild_pokemon_area.c2
-rw-r--r--sym_common.txt6
-rw-r--r--sym_ewram.txt56
105 files changed, 11710 insertions, 20873 deletions
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s
index dd84f75c1..c0efe9975 100644
--- a/asm/field_control_avatar.s
+++ b/asm/field_control_avatar.s
@@ -2572,7 +2572,7 @@ _0806DC78:
bl sub_805550C
ldrb r0, [r4, 0x7]
ldrb r1, [r4, 0x6]
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldr r1, [r0, 0x4]
ldrb r0, [r4, 0x5]
ldr r1, [r1, 0x8]
diff --git a/asm/field_effect.s b/asm/field_effect.s
index a8542fcc3..41c33c6fc 100644
--- a/asm/field_effect.s
+++ b/asm/field_effect.s
@@ -2014,7 +2014,7 @@ task00_8084310: @ 8084310
ldrsh r6, [r4, r0]
cmp r6, 0
bne _08084350
- bl field_weather_is_fade_finished
+ bl IsWeatherNotFadingIn
lsls r0, 24
cmp r0, 0
beq _08084376
@@ -2287,7 +2287,7 @@ _08084560: .4byte gSprites
sub_8084564: @ 8084564
push {r4,lr}
adds r4, r0, 0
- bl field_weather_is_fade_finished
+ bl IsWeatherNotFadingIn
lsls r0, 24
cmp r0, 0
beq _08084578
@@ -4002,7 +4002,7 @@ sub_8085274: @ 8085274
adds r4, r0, 0
adds r5, r1, 0
adds r6, r2, 0
- bl field_weather_is_fade_finished
+ bl IsWeatherNotFadingIn
lsls r0, 24
cmp r0, 0
beq _080852B4
@@ -5025,7 +5025,7 @@ _08085A50: .4byte gTasks
sub_8085A54: @ 8085A54
push {r4,lr}
adds r4, r0, 0
- bl field_weather_is_fade_finished
+ bl IsWeatherNotFadingIn
lsls r0, 24
cmp r0, 0
beq _08085A78
@@ -5492,7 +5492,7 @@ _08085E08: .4byte gTasks
sub_8085E0C: @ 8085E0C
push {r4-r6,lr}
adds r6, r0, 0
- bl field_weather_is_fade_finished
+ bl IsWeatherNotFadingIn
lsls r0, 24
cmp r0, 0
beq _08085E82
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 8787ff647..8c782d3dd 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -376,7 +376,7 @@ sub_805E080: @ 805E080
str r0, [sp, 0x8]
adds r0, r6, 0
adds r1, r7, 0
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldr r1, [r0, 0x4]
lsls r0, r4, 1
adds r0, r4
@@ -4294,7 +4294,7 @@ _0805FD90: .4byte gMapHeader
_0805FD94:
adds r0, r2, 0
adds r1, r3, 0
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldr r0, [r0, 0x4]
ldr r1, [r0, 0x4]
_0805FDA0:
diff --git a/asm/field_weather.s b/asm/field_weather.s
index b65548171..ece13573f 100644
--- a/asm/field_weather.s
+++ b/asm/field_weather.s
@@ -1889,8 +1889,8 @@ _0807AA68: .4byte 0x000006ca
_0807AA6C: .4byte 0x000006cb
thumb_func_end FieldWeather_StartFadingOutCreditsMap
- thumb_func_start field_weather_is_fade_finished
-field_weather_is_fade_finished: @ 807AA70
+ thumb_func_start IsWeatherNotFadingIn
+IsWeatherNotFadingIn: @ 807AA70
ldr r0, _0807AA84 @ =gUnknown_2037F34
ldr r1, _0807AA88 @ =0x000006c6
adds r0, r1
@@ -1904,7 +1904,7 @@ field_weather_is_fade_finished: @ 807AA70
.align 2, 0
_0807AA84: .4byte gUnknown_2037F34
_0807AA88: .4byte 0x000006c6
- thumb_func_end field_weather_is_fade_finished
+ thumb_func_end IsWeatherNotFadingIn
thumb_func_start sub_807AA8C
sub_807AA8C: @ 807AA8C
diff --git a/asm/fldeff_cut.s b/asm/fldeff_cut.s
index ec892e0bb..d56ccd500 100644
--- a/asm/fldeff_cut.s
+++ b/asm/fldeff_cut.s
@@ -24,8 +24,8 @@ sub_8097874: @ 8097874
bx r1
thumb_func_end sub_8097874
- thumb_func_start sub_8097898
-sub_8097898: @ 8097898
+ thumb_func_start SetUpFieldMove_Cut
+SetUpFieldMove_Cut: @ 8097898
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -138,7 +138,7 @@ _08097970:
.align 2, 0
_0809797C: .4byte gPlayerFacingPosition
_08097980: .4byte 0x0000ffff
- thumb_func_end sub_8097898
+ thumb_func_end SetUpFieldMove_Cut
thumb_func_start sub_8097984
sub_8097984: @ 8097984
diff --git a/asm/fldeff_flash.s b/asm/fldeff_flash.s
index 51e55de63..23f86d6b7 100644
--- a/asm/fldeff_flash.s
+++ b/asm/fldeff_flash.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_80C9B2C
-sub_80C9B2C: @ 80C9B2C
+ thumb_func_start SetUpFieldMove_Flash
+SetUpFieldMove_Flash: @ 80C9B2C
push {lr}
ldr r0, _080C9B54 @ =gMapHeader
ldrb r0, [r0, 0x15]
@@ -37,7 +37,7 @@ _080C9B6C:
_080C9B6E:
pop {r1}
bx r1
- thumb_func_end sub_80C9B2C
+ thumb_func_end SetUpFieldMove_Flash
thumb_func_start sub_80C9B74
sub_80C9B74: @ 80C9B74
diff --git a/asm/item_menu.s b/asm/item_menu.s
index a8487864a..3f662656e 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_8107DB4
-sub_8107DB4: @ 8107DB4
+ thumb_func_start GoToBagMenu
+GoToBagMenu: @ 8107DB4
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -136,19 +136,19 @@ _08107EA8: .4byte gSpecialVar_ItemId
_08107EAC: .4byte sub_8107F10
_08107EB0: .4byte gUnknown_203AD10
_08107EB4: .4byte gUnknown_203ACFC
- thumb_func_end sub_8107DB4
+ thumb_func_end GoToBagMenu
thumb_func_start CB2_BagMenuFromStartMenu
CB2_BagMenuFromStartMenu: @ 8107EB8
push {lr}
- ldr r2, _08107EC8 @ =CB2_ReturnToStartMenu
+ ldr r2, _08107EC8 @ =CB2_ReturnToFieldWithOpenMenu
movs r0, 0
movs r1, 0x3
- bl sub_8107DB4
+ bl GoToBagMenu
pop {r0}
bx r0
.align 2, 0
-_08107EC8: .4byte CB2_ReturnToStartMenu
+_08107EC8: .4byte CB2_ReturnToFieldWithOpenMenu
thumb_func_end CB2_BagMenuFromStartMenu
thumb_func_start sub_8107ECC
@@ -157,7 +157,7 @@ sub_8107ECC: @ 8107ECC
ldr r2, _08107EDC @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x5
movs r1, 0x3
- bl sub_8107DB4
+ bl GoToBagMenu
pop {r0}
bx r0
.align 2, 0
@@ -1934,15 +1934,15 @@ _08108CE8: .4byte 0x0000fff0
_08108CEC: .4byte gUnknown_203ACFC
thumb_func_end sub_8108CB4
- thumb_func_start sub_8108CF0
-sub_8108CF0: @ 8108CF0
+ thumb_func_start CB2_SetUpReshowBattleScreenAfterMenu
+CB2_SetUpReshowBattleScreenAfterMenu: @ 8108CF0
ldr r1, _08108CF8 @ =gUnknown_203ACFC
movs r0, 0
strb r0, [r1, 0x5]
bx lr
.align 2, 0
_08108CF8: .4byte gUnknown_203ACFC
- thumb_func_end sub_8108CF0
+ thumb_func_end CB2_SetUpReshowBattleScreenAfterMenu
thumb_func_start sub_8108CFC
sub_8108CFC: @ 8108CFC
@@ -2514,7 +2514,7 @@ sub_8109140: @ 8109140
movs r1, 0
movs r2, 0xE
movs r3, 0x1E
- bl SetBgRectPal
+ bl SetBgTilemapPalette
movs r0, 0x1
bl ScheduleBgCopyTilemapToVram
add sp, 0x8
@@ -4399,7 +4399,7 @@ _0810A120:
_0810A13E:
ldr r0, _0810A154 @ =gUnknown_203AD10
ldr r1, [r0]
- ldr r0, _0810A158 @ =sub_8126EDC
+ ldr r0, _0810A158 @ =CB2_ChooseMonToGiveItem
str r0, [r1]
mov r0, r8
subs r0, 0x8
@@ -4409,7 +4409,7 @@ _0810A13E:
b _0810A166
.align 2, 0
_0810A154: .4byte gUnknown_203AD10
-_0810A158: .4byte sub_8126EDC
+_0810A158: .4byte CB2_ChooseMonToGiveItem
_0810A15C: .4byte ItemMenu_StartFadeToExitCallback
_0810A160:
adds r0, r7, 0
@@ -4786,7 +4786,7 @@ _0810A458: .4byte sub_810A45C
thumb_func_start sub_810A45C
sub_810A45C: @ 810A45C
push {lr}
- bl sub_8123730
+ bl CB2_SelectBagItemToGive
pop {r0}
bx r0
thumb_func_end sub_810A45C
@@ -4918,7 +4918,7 @@ sub_810A554: @ 810A554
ldr r2, _0810A564 @ =sub_808CE60
movs r0, 0x4
movs r1, 0x3
- bl sub_8107DB4
+ bl GoToBagMenu
pop {r0}
bx r0
.align 2, 0
@@ -5063,7 +5063,7 @@ sub_810A67C: @ 810A67C
ldr r2, _0810A68C @ =CB2_ReturnToField
movs r0, 0x2
movs r1, 0x3
- bl sub_8107DB4
+ bl GoToBagMenu
pop {r0}
bx r0
.align 2, 0
@@ -6127,7 +6127,7 @@ sub_810AF74: @ 810AF74
ldr r2, _0810AF98 @ =SetCB2ToReshowScreenAfterMenu2
movs r0, 0x6
movs r1, 0
- bl sub_8107DB4
+ bl GoToBagMenu
pop {r0}
bx r0
.align 2, 0
@@ -6358,7 +6358,7 @@ _0810B16C:
movs r0, 0x8
_0810B170:
movs r1, 0
- bl sub_8107DB4
+ bl GoToBagMenu
pop {r4}
pop {r0}
bx r0
@@ -6856,10 +6856,10 @@ _0810B564:
movs r2, 0
bl DestroyListMenuTask
bl sub_810AECC
- ldr r1, _0810B5B0 @ =gUnknown_3005E98
- ldr r0, _0810B5B4 @ =ItemUseCB_Medicine
+ ldr r1, _0810B5B0 @ =gItemUseCB
+ ldr r0, _0810B5B4 @ =ItemUseCB_MedicineStep
str r0, [r1]
- ldr r0, _0810B5B8 @ =sub_81279A4
+ ldr r0, _0810B5B8 @ =ChooseMonForInBattleItem
bl ItemMenu_SetExitCallback
mov r0, r9
subs r0, 0x8
@@ -6868,9 +6868,9 @@ _0810B564:
str r1, [r0]
b _0810B5C6
.align 2, 0
-_0810B5B0: .4byte gUnknown_3005E98
-_0810B5B4: .4byte ItemUseCB_Medicine
-_0810B5B8: .4byte sub_81279A4
+_0810B5B0: .4byte gItemUseCB
+_0810B5B4: .4byte ItemUseCB_MedicineStep
+_0810B5B8: .4byte ChooseMonForInBattleItem
_0810B5BC: .4byte sub_810B070
_0810B5C0:
ldrh r0, [r5, 0x10]
diff --git a/asm/link_rfu.s b/asm/link_rfu.s
index 0ccbda9eb..df112d1ad 100644
--- a/asm/link_rfu.s
+++ b/asm/link_rfu.s
@@ -3172,8 +3172,8 @@ _080FEBA6:
bx r0
thumb_func_end sub_80FEB3C
- thumb_func_start sub_80FEBAC
-sub_80FEBAC: @ 80FEBAC
+ thumb_func_start DoEasyChatScreen
+DoEasyChatScreen: @ 80FEBAC
push {r4-r6,lr}
mov r6, r8
push {r6}
@@ -3214,7 +3214,7 @@ sub_80FEBAC: @ 80FEBAC
_080FEC00: .4byte sub_80FEC54
_080FEC04: .4byte gTasks
_080FEC08: .4byte sub_80FEC0C
- thumb_func_end sub_80FEBAC
+ thumb_func_end DoEasyChatScreen
thumb_func_start sub_80FEC0C
sub_80FEC0C: @ 80FEC0C
@@ -3588,7 +3588,7 @@ _080FEF08:
ldr r0, _080FEF24 @ =gSpecialVar_0x8004
ldrb r0, [r0]
ldr r2, _080FEF28 @ =sub_80568C4
- bl sub_80FEBAC
+ bl DoEasyChatScreen
_080FEF12:
pop {r0}
bx r0
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s
index 24125485e..1e076a55e 100644
--- a/asm/link_rfu_3.s
+++ b/asm/link_rfu_3.s
@@ -3650,7 +3650,7 @@ _08117784:
ldr r0, _0811779C @ =sub_811C1C8
str r0, [r1, 0x8]
movs r0, 0x2
- bl sub_81274A8
+ bl InitChooseHalfPartyForBattle
b _081178E0
.align 2, 0
_08117798: .4byte gMain
@@ -5602,12 +5602,12 @@ _0811887C:
_081188C4: .4byte gUnknown_203B06C
_081188C8: .4byte gSpecialVar_Result
_081188CC:
- bl sub_811FB18
+ bl GetPartyMenuType
lsls r0, 24
lsrs r0, 24
cmp r0, 0x8
beq _081188E4
- bl sub_811FB18
+ bl GetPartyMenuType
lsls r0, 24
lsrs r0, 24
cmp r0, 0x9
@@ -7335,7 +7335,7 @@ _081197CA:
adds r0, r1
ldr r0, [r0]
str r0, [r2]
- ldr r2, _0811982C @ =gUnknown_203B06A
+ ldr r2, _0811982C @ =gUnionRoomRequestedMonType
ldr r1, [r6]
movs r3, 0x2
ldrsh r0, [r7, r3]
@@ -7344,7 +7344,7 @@ _081197CA:
ldrb r0, [r1, 0x9]
lsrs r0, 2
strb r0, [r2]
- ldr r2, _08119830 @ =gUnknown_203B068
+ ldr r2, _08119830 @ =gUnionRoomOfferedSpecies
ldr r1, [r6]
movs r3, 0x2
ldrsh r0, [r7, r3]
@@ -7369,8 +7369,8 @@ _081197CA:
_08119820: .4byte gUnknown_8458D1C
_08119824: .4byte gUnknown_203B06C
_08119828: .4byte gUnknown_203B064
-_0811982C: .4byte gUnknown_203B06A
-_08119830: .4byte gUnknown_203B068
+_0811982C: .4byte gUnionRoomRequestedMonType
+_08119830: .4byte gUnionRoomOfferedSpecies
_08119834: .4byte gFieldCallback
_08119838: .4byte sub_807DCE4
_0811983C: .4byte CB2_ReturnToField
diff --git a/asm/naming_screen.s b/asm/naming_screen.s
index 817d215a0..49ab9164f 100644
--- a/asm/naming_screen.s
+++ b/asm/naming_screen.s
@@ -3623,7 +3623,7 @@ sub_809F5C4: @ 809F5C4
push {r4,r5,lr}
sub sp, 0x10
movs r4, 0
- ldr r1, _0809F61C @ =gUnknown_841621F
+ ldr r1, _0809F61C @ =gText_MaleSymbol
add r0, sp, 0xC
bl StringCopy
ldr r5, _0809F620 @ =gUnknown_203998C
@@ -3635,7 +3635,7 @@ sub_809F5C4: @ 809F5C4
beq _0809F614
cmp r0, 0xFE
bne _0809F5EE
- ldr r1, _0809F628 @ =gUnknown_8416221
+ ldr r1, _0809F628 @ =gText_FemaleSymbol
add r0, sp, 0xC
bl StringCopy
movs r4, 0x1
@@ -3664,10 +3664,10 @@ _0809F614:
pop {r0}
bx r0
.align 2, 0
-_0809F61C: .4byte gUnknown_841621F
+_0809F61C: .4byte gText_MaleSymbol
_0809F620: .4byte gUnknown_203998C
_0809F624: .4byte 0x00001e36
-_0809F628: .4byte gUnknown_8416221
+_0809F628: .4byte gText_FemaleSymbol
_0809F62C: .4byte 0x00001e13
_0809F630: .4byte gUnknown_83E2428
thumb_func_end sub_809F5C4
@@ -4490,7 +4490,7 @@ sub_809FC90: @ 809FC90
ldrb r2, [r1, 0x8]
movs r0, 0
str r0, [sp]
- ldr r0, _0809FCB4 @ =CB2_ReturnToStartMenu
+ ldr r0, _0809FCB4 @ =CB2_ReturnToFieldWithOpenMenu
str r0, [sp, 0x4]
movs r0, 0
movs r3, 0
@@ -4500,7 +4500,7 @@ sub_809FC90: @ 809FC90
bx r0
.align 2, 0
_0809FCB0: .4byte gSaveBlock2Ptr
-_0809FCB4: .4byte CB2_ReturnToStartMenu
+_0809FCB4: .4byte CB2_ReturnToFieldWithOpenMenu
thumb_func_end sub_809FC90
thumb_func_start sub_809FCB8
@@ -4512,7 +4512,7 @@ sub_809FCB8: @ 809FCB8
ldrb r2, [r1, 0x8]
movs r0, 0
str r0, [sp]
- ldr r0, _0809FCDC @ =CB2_ReturnToStartMenu
+ ldr r0, _0809FCDC @ =CB2_ReturnToFieldWithOpenMenu
str r0, [sp, 0x4]
movs r0, 0x1
movs r3, 0
@@ -4522,7 +4522,7 @@ sub_809FCB8: @ 809FCB8
bx r0
.align 2, 0
_0809FCD8: .4byte gSaveBlock2Ptr
-_0809FCDC: .4byte CB2_ReturnToStartMenu
+_0809FCDC: .4byte CB2_ReturnToFieldWithOpenMenu
thumb_func_end sub_809FCB8
thumb_func_start sub_809FCE0
@@ -4534,7 +4534,7 @@ sub_809FCE0: @ 809FCE0
ldrb r2, [r1, 0x8]
movs r0, 0
str r0, [sp]
- ldr r0, _0809FD04 @ =CB2_ReturnToStartMenu
+ ldr r0, _0809FD04 @ =CB2_ReturnToFieldWithOpenMenu
str r0, [sp, 0x4]
movs r0, 0x2
movs r3, 0
@@ -4544,7 +4544,7 @@ sub_809FCE0: @ 809FCE0
bx r0
.align 2, 0
_0809FD00: .4byte gSaveBlock2Ptr
-_0809FD04: .4byte CB2_ReturnToStartMenu
+_0809FD04: .4byte CB2_ReturnToFieldWithOpenMenu
thumb_func_end sub_809FCE0
thumb_func_start sub_809FD08
@@ -4556,7 +4556,7 @@ sub_809FD08: @ 809FD08
ldrb r2, [r1, 0x8]
movs r0, 0
str r0, [sp]
- ldr r0, _0809FD2C @ =CB2_ReturnToStartMenu
+ ldr r0, _0809FD2C @ =CB2_ReturnToFieldWithOpenMenu
str r0, [sp, 0x4]
movs r0, 0x3
movs r3, 0
@@ -4566,7 +4566,7 @@ sub_809FD08: @ 809FD08
bx r0
.align 2, 0
_0809FD28: .4byte gSaveBlock2Ptr
-_0809FD2C: .4byte CB2_ReturnToStartMenu
+_0809FD2C: .4byte CB2_ReturnToFieldWithOpenMenu
thumb_func_end sub_809FD08
thumb_func_start sub_809FD30
@@ -4578,7 +4578,7 @@ sub_809FD30: @ 809FD30
ldrb r2, [r1, 0x8]
movs r0, 0
str r0, [sp]
- ldr r0, _0809FD54 @ =CB2_ReturnToStartMenu
+ ldr r0, _0809FD54 @ =CB2_ReturnToFieldWithOpenMenu
str r0, [sp, 0x4]
movs r0, 0x4
movs r3, 0
@@ -4588,7 +4588,7 @@ sub_809FD30: @ 809FD30
bx r0
.align 2, 0
_0809FD50: .4byte gSaveBlock2Ptr
-_0809FD54: .4byte CB2_ReturnToStartMenu
+_0809FD54: .4byte CB2_ReturnToFieldWithOpenMenu
thumb_func_end sub_809FD30
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/overworld.s b/asm/overworld.s
index 28bcd8ecb..370aa054d 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -473,7 +473,7 @@ _08054F8A:
str r2, [sp, 0x4]
adds r0, r2, 0
adds r1, r5, 0
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
mov r6, r10
ldr r1, [r6]
mov r2, r8
@@ -821,8 +821,8 @@ _08055232:
bx r1
thumb_func_end warp_data_is_not_neg_1
- thumb_func_start get_mapheader_by_bank_and_number
-get_mapheader_by_bank_and_number: @ 8055238
+ thumb_func_start Overworld_GetMapHeaderByGroupAndId
+Overworld_GetMapHeaderByGroupAndId: @ 8055238
lsls r0, 16
lsls r1, 16
ldr r2, _0805524C @ =gMapGroups
@@ -835,7 +835,7 @@ get_mapheader_by_bank_and_number: @ 8055238
bx lr
.align 2, 0
_0805524C: .4byte gMapGroups
- thumb_func_end get_mapheader_by_bank_and_number
+ thumb_func_end Overworld_GetMapHeaderByGroupAndId
thumb_func_start warp1_get_mapheader
warp1_get_mapheader: @ 8055250
@@ -850,7 +850,7 @@ warp1_get_mapheader: @ 8055250
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
pop {r1}
bx r1
.align 2, 0
@@ -872,7 +872,7 @@ set_current_map_header_from_sav1_save_old_name: @ 8055274
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r1, r4, 0
ldm r0!, {r2,r3,r6}
stm r1!, {r2,r3,r6}
@@ -908,7 +908,7 @@ set_current_map_header_from_sav1: @ 80552BC
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r1, r4, 0
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
@@ -2336,7 +2336,7 @@ sub_8055D6C: @ 8055D6C
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrh r0, [r0, 0x10]
pop {r1}
bx r1
@@ -2863,7 +2863,7 @@ get_map_light_level_by_bank_and_number: @ 8056158
lsls r1, 24
asrs r1, 8
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x17]
pop {r1}
bx r1
@@ -2925,7 +2925,7 @@ sub_80561B4: @ 80561B4
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
pop {r1}
bx r1
@@ -3014,7 +3014,7 @@ sav1_saved_warp2_map_get_name: @ 8056238
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
pop {r1}
bx r1
@@ -3036,7 +3036,7 @@ GetCurrentRegionMapSectionId: @ 8056260
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
pop {r1}
bx r1
@@ -3058,7 +3058,7 @@ sav1_map_get_battletype: @ 8056288
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x1B]
pop {r1}
bx r1
@@ -3754,8 +3754,8 @@ _080568A0: .4byte gFieldCallback
_080568A4: .4byte sub_807DDD0
thumb_func_end c2_8056854
- thumb_func_start CB2_ReturnToStartMenu
-CB2_ReturnToStartMenu: @ 80568A8
+ thumb_func_start CB2_ReturnToFieldWithOpenMenu
+CB2_ReturnToFieldWithOpenMenu: @ 80568A8
push {lr}
bl sub_80569BC
ldr r1, _080568BC @ =gFieldCallback2
@@ -3767,7 +3767,7 @@ CB2_ReturnToStartMenu: @ 80568A8
.align 2, 0
_080568BC: .4byte gFieldCallback2
_080568C0: .4byte FieldCB2_ReturnToStartMenuInit
- thumb_func_end CB2_ReturnToStartMenu
+ thumb_func_end CB2_ReturnToFieldWithOpenMenu
thumb_func_start sub_80568C4
sub_80568C4: @ 80568C4
diff --git a/asm/party_menu.s b/asm/party_menu.s
deleted file mode 100644
index 3cb62c712..000000000
--- a/asm/party_menu.s
+++ /dev/null
@@ -1,19390 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start PartyMenuInit
-PartyMenuInit: @ 811EA44
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r4, [sp, 0x24]
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp]
- lsls r4, 24
- lsrs r7, r4, 24
- bl reset_brm
- ldr r6, _0811EA8C @ =gUnknown_203B09C
- movs r0, 0x8E
- lsls r0, 2
- bl Alloc
- adds r5, r0, 0
- str r5, [r6]
- cmp r5, 0
- bne _0811EA90
- ldr r0, [sp, 0x2C]
- bl SetMainCallback2
- b _0811EB80
- .align 2, 0
-_0811EA8C: .4byte gUnknown_203B09C
-_0811EA90:
- ldr r3, _0811EAE0 @ =gUnknown_203B0A0
- movs r1, 0xF
- mov r0, r9
- ands r1, r0
- ldrb r2, [r3, 0x8]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x8]
- ldr r1, [sp, 0x2C]
- str r1, [r3]
- movs r4, 0
- mov r0, r8
- strb r0, [r3, 0xB]
- lsls r2, r7, 2
- ldrh r1, [r5, 0xA]
- movs r0, 0x3
- ands r0, r1
- orrs r0, r2
- strh r0, [r5, 0xA]
- ldr r0, [sp, 0x28]
- str r0, [r5]
- str r4, [r5, 0x4]
- ldrb r1, [r5, 0x8]
- movs r0, 0xF
- negs r0, r0
- ands r0, r1
- strb r0, [r5, 0x8]
- adds r7, r3, 0
- mov r1, r9
- cmp r1, 0x4
- bne _0811EAE4
- ldr r0, [r6]
- ldrb r1, [r0, 0x8]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x8]
- b _0811EAF0
- .align 2, 0
-_0811EAE0: .4byte gUnknown_203B0A0
-_0811EAE4:
- ldr r2, [r6]
- ldrb r1, [r2, 0x8]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x8]
-_0811EAF0:
- mov r5, r10
- cmp r5, 0xFF
- beq _0811EB08
- movs r0, 0x3
- ands r0, r5
- lsls r0, 4
- ldrb r2, [r7, 0x8]
- movs r1, 0x31
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x8]
-_0811EB08:
- movs r2, 0
- ldr r5, _0811EB90 @ =gUnknown_203B09C
- movs r4, 0x86
- lsls r4, 2
- movs r3, 0
-_0811EB12:
- ldr r0, [r5]
- lsls r1, r2, 1
- adds r0, r4
- adds r0, r1
- strh r3, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0xF
- bls _0811EB12
- movs r2, 0
- ldr r4, _0811EB90 @ =gUnknown_203B09C
- movs r3, 0xFF
-_0811EB2C:
- ldr r0, [r4]
- adds r0, 0xC
- adds r0, r2
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x2
- bls _0811EB2C
- ldr r0, [sp]
- cmp r0, 0
- beq _0811EB68
- adds r1, r7, 0
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _0811EB66
- adds r1, r0, 0
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0811EB94 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- bne _0811EB6A
-_0811EB66:
- movs r0, 0
-_0811EB68:
- strb r0, [r7, 0x9]
-_0811EB6A:
- ldr r2, _0811EB98 @ =gTextFlags
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl CalculatePlayerPartyCount
- ldr r0, _0811EB9C @ =sub_811EBD0
- bl SetMainCallback2
-_0811EB80:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811EB90: .4byte gUnknown_203B09C
-_0811EB94: .4byte gPlayerParty
-_0811EB98: .4byte gTextFlags
-_0811EB9C: .4byte sub_811EBD0
- thumb_func_end PartyMenuInit
-
- thumb_func_start sub_811EBA0
-sub_811EBA0: @ 811EBA0
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl DoScheduledBgTilemapCopiesToVram
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_811EBA0
-
- thumb_func_start sub_811EBBC
-sub_811EBBC: @ 811EBBC
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_811EBBC
-
- thumb_func_start sub_811EBD0
-sub_811EBD0: @ 811EBD0
- push {lr}
-_0811EBD2:
- bl sub_80BF748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811EBF6
- bl sub_811EBFC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811EBF6
- bl MenuHelpers_LinkSomething
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0811EBD2
-_0811EBF6:
- pop {r0}
- bx r0
- thumb_func_end sub_811EBD0
-
- thumb_func_start sub_811EBFC
-sub_811EBFC: @ 811EBFC
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0811EC1C @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x16
- bls _0811EC10
- b _0811EE14
-_0811EC10:
- lsls r0, 2
- ldr r1, _0811EC20 @ =_0811EC24
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811EC1C: .4byte gMain
-_0811EC20: .4byte _0811EC24
- .align 2, 0
-_0811EC24:
- .4byte _0811EC80
- .4byte _0811EC8E
- .4byte _0811EC94
- .4byte _0811ECA8
- .4byte _0811ECAE
- .4byte _0811ECB4
- .4byte _0811ECC6
- .4byte _0811ECCC
- .4byte _0811ECF4
- .4byte _0811ED02
- .4byte _0811ED14
- .4byte _0811ED38
- .4byte _0811ED3E
- .4byte _0811ED44
- .4byte _0811ED4A
- .4byte _0811ED50
- .4byte _0811ED70
- .4byte _0811ED90
- .4byte _0811ED96
- .4byte _0811EDAC
- .4byte _0811EDB4
- .4byte _0811EDD0
- .4byte _0811EDDE
-_0811EC80:
- bl SetVBlankHBlankCallbacksToNull
- bl ClearVramOamPltt
- bl ClearScheduledBgCopiesToVram
- b _0811EDFC
-_0811EC8E:
- bl ScanlineEffect_Stop
- b _0811EDFC
-_0811EC94:
- bl ResetPaletteFade
- ldr r2, _0811ECA4 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- b _0811EDFA
- .align 2, 0
-_0811ECA4: .4byte gPaletteFade
-_0811ECA8:
- bl ResetSpriteData
- b _0811EDFC
-_0811ECAE:
- bl FreeAllSpritePalettes
- b _0811EDFC
-_0811ECB4:
- bl MenuHelpers_LinkSomething
- lsls r0, 24
- cmp r0, 0
- beq _0811ECC0
- b _0811EDFC
-_0811ECC0:
- bl ResetTasks
- b _0811EDFC
-_0811ECC6:
- bl sub_81208E4
- b _0811EDFC
-_0811ECCC:
- bl sub_811EECC
- lsls r0, 24
- cmp r0, 0
- bne _0811ECDE
- bl sub_811EE38
- movs r0, 0x1
- b _0811EE2E
-_0811ECDE:
- ldr r0, _0811ECF0 @ =gUnknown_203B09C
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- b _0811EDFC
- .align 2, 0
-_0811ECF0: .4byte gUnknown_203B09C
-_0811ECF4:
- bl sub_811EF44
- lsls r0, 24
- cmp r0, 0
- bne _0811ED00
- b _0811EE2C
-_0811ED00:
- b _0811EDFC
-_0811ED02:
- ldr r0, _0811ED10 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x8]
- lsls r0, 26
- lsrs r0, 30
- bl sub_8121060
- b _0811EDFC
- .align 2, 0
-_0811ED10: .4byte gUnknown_203B0A0
-_0811ED14:
- ldr r0, _0811ED30 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x8]
- lsls r0, 26
- lsrs r0, 30
- bl sub_811F0BC
- ldr r0, _0811ED34 @ =gUnknown_203B09C
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- b _0811EDFC
- .align 2, 0
-_0811ED30: .4byte gUnknown_203B0A0
-_0811ED34: .4byte gUnknown_203B09C
-_0811ED38:
- bl LoadHeldItemIcons
- b _0811EDFC
-_0811ED3E:
- bl sub_8122860
- b _0811EDFC
-_0811ED44:
- bl sub_8122980
- b _0811EDFC
-_0811ED4A:
- bl LoadMonIconPalettes
- b _0811EDFC
-_0811ED50:
- bl party_menu_add_per_mon_objects
- lsls r0, 24
- cmp r0, 0
- beq _0811EE2C
- ldr r0, _0811ED6C @ =gUnknown_203B09C
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- b _0811EDFC
- .align 2, 0
-_0811ED6C: .4byte gUnknown_203B09C
-_0811ED70:
- bl sub_811F5EC
- lsls r0, 24
- cmp r0, 0
- beq _0811EE2C
- ldr r0, _0811ED8C @ =gUnknown_203B09C
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- b _0811EDFC
- .align 2, 0
-_0811ED8C: .4byte gUnknown_203B09C
-_0811ED90:
- bl sub_811F774
- b _0811EDFC
-_0811ED96:
- ldr r0, _0811EDA8 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- lsrs r0, 31
- bl sub_81210F8
- b _0811EDFC
- .align 2, 0
-_0811EDA8: .4byte gUnknown_203B09C
-_0811EDAC:
- movs r0, 0x5
- bl HelpSystem_SetSomeVariable2
- b _0811EDFC
-_0811EDB4:
- ldr r4, _0811EDCC @ =gUnknown_203B09C
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0
- bl CreateTask
- ldr r0, [r4]
- ldrh r0, [r0, 0xA]
- lsrs r0, 2
- bl sub_8121D0C
- b _0811EDFC
- .align 2, 0
-_0811EDCC: .4byte gUnknown_203B09C
-_0811EDD0:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- b _0811EDFC
-_0811EDDE:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, _0811EE0C @ =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
-_0811EDFA:
- strb r0, [r2, 0x8]
-_0811EDFC:
- ldr r1, _0811EE10 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0811EE2C
- .align 2, 0
-_0811EE0C: .4byte gPaletteFade
-_0811EE10: .4byte gMain
-_0811EE14:
- ldr r0, _0811EE24 @ =sub_811EBBC
- bl SetVBlankCallback
- ldr r0, _0811EE28 @ =sub_811EBA0
- bl SetMainCallback2
- movs r0, 0x1
- b _0811EE2E
- .align 2, 0
-_0811EE24: .4byte sub_811EBBC
-_0811EE28: .4byte sub_811EBA0
-_0811EE2C:
- movs r0, 0
-_0811EE2E:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811EBFC
-
- thumb_func_start sub_811EE38
-sub_811EE38: @ 811EE38
- push {lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _0811EE68 @ =sub_811EE74
- movs r1, 0
- bl CreateTask
- ldr r0, _0811EE6C @ =sub_811EBBC
- bl SetVBlankCallback
- ldr r0, _0811EE70 @ =sub_811EBA0
- bl SetMainCallback2
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0811EE68: .4byte sub_811EE74
-_0811EE6C: .4byte sub_811EBBC
-_0811EE70: .4byte sub_811EBA0
- thumb_func_end sub_811EE38
-
- thumb_func_start sub_811EE74
-sub_811EE74: @ 811EE74
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0811EEA0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811EE98
- ldr r0, _0811EEA4 @ =gUnknown_203B0A0
- ldr r0, [r0]
- bl SetMainCallback2
- bl sub_811F070
- adds r0, r4, 0
- bl DestroyTask
-_0811EE98:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811EEA0: .4byte gPaletteFade
-_0811EEA4: .4byte gUnknown_203B0A0
- thumb_func_end sub_811EE74
-
- thumb_func_start reset_brm
-reset_brm: @ 811EEA8
- ldr r0, _0811EEBC @ =gUnknown_203B09C
- movs r1, 0
- str r1, [r0]
- ldr r0, _0811EEC0 @ =gUnknown_203B0BC
- str r1, [r0]
- ldr r0, _0811EEC4 @ =gUnknown_203B0B4
- str r1, [r0]
- ldr r0, _0811EEC8 @ =gUnknown_203B0B8
- str r1, [r0]
- bx lr
- .align 2, 0
-_0811EEBC: .4byte gUnknown_203B09C
-_0811EEC0: .4byte gUnknown_203B0BC
-_0811EEC4: .4byte gUnknown_203B0B4
-_0811EEC8: .4byte gUnknown_203B0B8
- thumb_func_end reset_brm
-
- thumb_func_start sub_811EECC
-sub_811EECC: @ 811EECC
- push {r4,r5,lr}
- bl ResetAllBgsCoordinatesAndBgCntRegs
- ldr r5, _0811EF34 @ =gUnknown_203B0BC
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- bl Alloc
- str r0, [r5]
- cmp r0, 0
- beq _0811EF3C
- movs r1, 0
- adds r2, r4, 0
- bl memset
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _0811EF38 @ =gUnknown_8459EB8
- movs r0, 0
- movs r2, 0x3
- bl InitBgsFromTemplates
- ldr r1, [r5]
- movs r0, 0x1
- bl SetBgTilemapBuffer
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x1
- b _0811EF3E
- .align 2, 0
-_0811EF34: .4byte gUnknown_203B0BC
-_0811EF38: .4byte gUnknown_8459EB8
-_0811EF3C:
- movs r0, 0
-_0811EF3E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_811EECC
-
- thumb_func_start sub_811EF44
-sub_811EF44: @ 811EF44
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0811EF64 @ =gUnknown_203B09C
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x7
- bhi _0811F02C
- lsls r0, 2
- ldr r1, _0811EF68 @ =_0811EF6C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811EF64: .4byte gUnknown_203B09C
-_0811EF68: .4byte _0811EF6C
- .align 2, 0
-_0811EF6C:
- .4byte _0811EF8C
- .4byte _0811EFB4
- .4byte _0811EFD4
- .4byte _0811F000
- .4byte _0811F004
- .4byte _0811F008
- .4byte _0811F00C
- .4byte _0811F010
-_0811EF8C:
- ldr r4, _0811EFAC @ =gUnknown_203B0B8
- ldr r0, _0811EFB0 @ =gFile_graphics_interface_party_menu_misc_sheet
- mov r1, sp
- bl MallocAndDecompress
- adds r1, r0, 0
- str r1, [r4]
- ldr r2, [sp]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r3, 0
- bl LoadBgTiles
- b _0811F016
- .align 2, 0
-_0811EFAC: .4byte gUnknown_203B0B8
-_0811EFB0: .4byte gFile_graphics_interface_party_menu_misc_sheet
-_0811EFB4:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0811F030
- ldr r0, _0811EFCC @ =gFile_graphics_interface_party_menu_misc_tilemap
- ldr r1, _0811EFD0 @ =gUnknown_203B0BC
- ldr r1, [r1]
- bl LZDecompressWram
- b _0811F016
- .align 2, 0
-_0811EFCC: .4byte gFile_graphics_interface_party_menu_misc_tilemap
-_0811EFD0: .4byte gUnknown_203B0BC
-_0811EFD4:
- ldr r0, _0811EFF4 @ =gUnknown_8E829C8
- movs r2, 0xB0
- lsls r2, 1
- movs r1, 0
- bl LoadCompressedPalette
- ldr r0, _0811EFF8 @ =gPlttBufferUnfaded
- ldr r4, _0811EFFC @ =gUnknown_203B09C
- ldr r1, [r4]
- adds r1, 0x18
- movs r2, 0xB0
- bl CpuSet
- ldr r1, [r4]
- b _0811F01A
- .align 2, 0
-_0811EFF4: .4byte gUnknown_8E829C8
-_0811EFF8: .4byte gPlttBufferUnfaded
-_0811EFFC: .4byte gUnknown_203B09C
-_0811F000:
- movs r0, 0x4
- b _0811F012
-_0811F004:
- movs r0, 0x5
- b _0811F012
-_0811F008:
- movs r0, 0x6
- b _0811F012
-_0811F00C:
- movs r0, 0x7
- b _0811F012
-_0811F010:
- movs r0, 0x8
-_0811F012:
- bl sub_811F03C
-_0811F016:
- ldr r0, _0811F028 @ =gUnknown_203B09C
- ldr r1, [r0]
-_0811F01A:
- movs r0, 0x86
- lsls r0, 2
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0811F030
- .align 2, 0
-_0811F028: .4byte gUnknown_203B09C
-_0811F02C:
- movs r0, 0x1
- b _0811F032
-_0811F030:
- movs r0, 0
-_0811F032:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811EF44
-
- thumb_func_start sub_811F03C
-sub_811F03C: @ 811F03C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 28
- ldr r5, _0811F068 @ =gPlttBufferUnfaded + 0x60
- lsrs r4, 23
- adds r1, r5, 0
- subs r1, 0x60
- adds r1, r4, r1
- adds r0, r5, 0
- movs r2, 0x10
- bl CpuSet
- ldr r0, _0811F06C @ =gPlttBufferFaded
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x10
- bl CpuSet
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F068: .4byte gPlttBufferUnfaded + 0x60
-_0811F06C: .4byte gPlttBufferFaded
- thumb_func_end sub_811F03C
-
- thumb_func_start sub_811F070
-sub_811F070: @ 811F070
- push {lr}
- ldr r0, _0811F0AC @ =gUnknown_203B09C
- ldr r0, [r0]
- cmp r0, 0
- beq _0811F07E
- bl Free
-_0811F07E:
- ldr r0, _0811F0B0 @ =gUnknown_203B0BC
- ldr r0, [r0]
- cmp r0, 0
- beq _0811F08A
- bl Free
-_0811F08A:
- ldr r0, _0811F0B4 @ =gUnknown_203B0B8
- ldr r0, [r0]
- cmp r0, 0
- beq _0811F096
- bl Free
-_0811F096:
- ldr r0, _0811F0B8 @ =gUnknown_203B0B4
- ldr r0, [r0]
- cmp r0, 0
- beq _0811F0A2
- bl Free
-_0811F0A2:
- bl FreeAllWindowBuffers
- pop {r0}
- bx r0
- .align 2, 0
-_0811F0AC: .4byte gUnknown_203B09C
-_0811F0B0: .4byte gUnknown_203B0BC
-_0811F0B4: .4byte gUnknown_203B0B8
-_0811F0B8: .4byte gUnknown_203B0B4
- thumb_func_end sub_811F070
-
- thumb_func_start sub_811F0BC
-sub_811F0BC: @ 811F0BC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _0811F108 @ =gUnknown_203B0B4
- movs r0, 0x60
- bl Alloc
- str r0, [r4]
- movs r2, 0
- ldr r7, _0811F10C @ =gUnknown_8459EE4
- lsls r0, r5, 1
- adds r0, r5
- lsls r3, r0, 4
- mov r12, r4
- ldr r6, _0811F110 @ =gUnknown_8459F04
-_0811F0DA:
- ldr r0, [r4]
- lsls r1, r2, 4
- adds r1, r0
- str r7, [r1]
- lsls r0, r2, 3
- adds r0, r6
- adds r0, r3, r0
- str r0, [r1, 0x4]
- strb r2, [r1, 0x8]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x5
- bls _0811F0DA
- mov r1, r12
- ldr r0, [r1]
- ldr r1, _0811F114 @ =gUnknown_8459EC4
- str r1, [r0]
- cmp r5, 0x3
- bne _0811F118
- str r1, [r0, 0x30]
- b _0811F11E
- .align 2, 0
-_0811F108: .4byte gUnknown_203B0B4
-_0811F10C: .4byte gUnknown_8459EE4
-_0811F110: .4byte gUnknown_8459F04
-_0811F114: .4byte gUnknown_8459EC4
-_0811F118:
- cmp r5, 0
- beq _0811F11E
- str r1, [r0, 0x10]
-_0811F11E:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_811F0BC
-
- thumb_func_start sub_811F124
-sub_811F124: @ 811F124
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0811F16C @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0811F174
- cmp r4, 0x2
- bls _0811F174
- adds r0, r4, 0
- bl sub_811F528
- ldr r5, _0811F170 @ =gUnknown_203B0B4
- lsls r4, 4
- ldr r0, [r5]
- adds r0, r4
- movs r1, 0x8
- bl sub_812142C
- ldr r0, [r5]
- adds r0, r4, r0
- ldrb r0, [r0, 0x8]
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r0, [r5]
- adds r4, r0
- ldrb r0, [r4, 0x8]
- bl PutWindowTilemap
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- b _0811F22A
- .align 2, 0
-_0811F16C: .4byte gUnknown_203B0A0
-_0811F170: .4byte gUnknown_203B0B4
-_0811F174:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _0811F1A4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- bne _0811F1AC
- ldr r5, _0811F1A8 @ =gUnknown_203B0B4
- ldr r0, [r5]
- lsls r4, 4
- adds r0, r4, r0
- ldrb r0, [r0, 0x8]
- bl sub_8121404
- ldr r0, [r5]
- adds r0, r4, r0
- ldrb r0, [r0, 0x8]
- movs r1, 0x2
- bl CopyWindowToVram
- b _0811F218
- .align 2, 0
-_0811F1A4: .4byte gPlayerParty
-_0811F1A8: .4byte gUnknown_203B0B4
-_0811F1AC:
- ldr r0, _0811F1C0 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x8]
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0x4
- bne _0811F1C4
- adds r0, r4, 0
- bl sub_811F388
- b _0811F1E2
- .align 2, 0
-_0811F1C0: .4byte gUnknown_203B0A0
-_0811F1C4:
- cmp r1, 0xB
- bne _0811F1D0
- adds r0, r4, 0
- bl sub_811F404
- b _0811F1E2
-_0811F1D0:
- adds r0, r4, 0
- bl sub_811F430
- lsls r0, 24
- cmp r0, 0
- bne _0811F1E2
- adds r0, r4, 0
- bl sub_811F234
-_0811F1E2:
- ldr r2, _0811F1F8 @ =gUnknown_203B0A0
- ldrb r1, [r2, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0811F1FC
- adds r0, r4, 0
- movs r1, 0
- bl sub_811F818
- b _0811F216
- .align 2, 0
-_0811F1F8: .4byte gUnknown_203B0A0
-_0811F1FC:
- movs r0, 0x9
- ldrsb r0, [r2, r0]
- cmp r0, r4
- bne _0811F20E
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_811F818
- b _0811F216
-_0811F20E:
- adds r0, r4, 0
- movs r1, 0
- bl sub_811F818
-_0811F216:
- lsls r4, 4
-_0811F218:
- ldr r0, _0811F230 @ =gUnknown_203B0B4
- ldr r0, [r0]
- adds r0, r4, r0
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
-_0811F22A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F230: .4byte gUnknown_203B0B4
- thumb_func_end sub_811F124
-
- thumb_func_start sub_811F234
-sub_811F234: @ 811F234
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _0811F284 @ =gPlayerParty
- adds r7, r1, r0
- adds r0, r7, 0
- movs r1, 0x2D
- bl GetMonData
- adds r2, r0, 0
- cmp r2, 0
- beq _0811F28C
- ldr r6, _0811F288 @ =gUnknown_203B0B4
- ldr r0, [r6]
- lsls r5, r4, 4
- adds r0, r5, r0
- ldr r2, [r0]
- ldrb r0, [r0, 0x8]
- movs r1, 0
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- ldr r4, [r2]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl _call_via_r4
- ldr r1, [r6]
- adds r1, r5
- adds r0, r7, 0
- movs r2, 0
- bl sub_8121738
- b _0811F2EE
- .align 2, 0
-_0811F284: .4byte gPlayerParty
-_0811F288: .4byte gUnknown_203B0B4
-_0811F28C:
- ldr r5, _0811F2F8 @ =gUnknown_203B0B4
- ldr r0, [r5]
- lsls r4, 4
- adds r0, r4, r0
- ldr r1, [r0]
- ldrb r0, [r0, 0x8]
- str r2, [sp]
- str r2, [sp, 0x4]
- ldr r6, [r1]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl _call_via_r6
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl sub_8121738
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl sub_8121790
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl sub_8121854
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl sub_812199C
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl sub_8121A3C
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- bl sub_8121AF0
-_0811F2EE:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F2F8: .4byte gUnknown_203B0B4
- thumb_func_end sub_811F234
-
- thumb_func_start sub_811F2FC
-sub_811F2FC: @ 811F2FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- movs r1, 0x64
- adds r2, r0, 0
- muls r2, r1
- ldr r1, _0811F380 @ =gPlayerParty
- adds r6, r2, r1
- ldr r7, _0811F384 @ =gUnknown_203B0B4
- ldr r1, [r7]
- lsls r5, r0, 4
- adds r1, r5, r1
- ldr r2, [r1]
- ldrb r0, [r1, 0x8]
- movs r1, 0
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- ldr r4, [r2]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl _call_via_r4
- ldr r1, [r7]
- adds r1, r5
- adds r0, r6, 0
- movs r2, 0
- bl sub_8121738
- adds r0, r6, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0811F368
- ldr r1, [r7]
- adds r1, r5
- adds r0, r6, 0
- movs r2, 0
- bl sub_8121790
- ldr r1, [r7]
- adds r1, r5
- adds r0, r6, 0
- movs r2, 0
- bl sub_8121854
-_0811F368:
- ldr r1, [r7]
- adds r1, r5
- mov r0, r8
- movs r2, 0
- bl sub_8121C70
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F380: .4byte gPlayerParty
-_0811F384: .4byte gUnknown_203B0B4
- thumb_func_end sub_811F2FC
-
- thumb_func_start sub_811F388
-sub_811F388: @ 811F388
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x64
- muls r0, r4
- ldr r1, _0811F3AC @ =gPlayerParty
- adds r0, r1
- ldr r5, _0811F3B0 @ =gSelectedOrderFromParty
- bl sub_8127550
- lsls r0, 24
- cmp r0, 0
- bne _0811F3C2
- adds r0, r4, 0
- movs r1, 0x6
- bl sub_811F2FC
- b _0811F3F8
- .align 2, 0
-_0811F3AC: .4byte gPlayerParty
-_0811F3B0: .4byte gSelectedOrderFromParty
-_0811F3B4:
- adds r1, 0x2
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_811F2FC
- b _0811F3F8
-_0811F3C2:
- ldr r0, _0811F400 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xC0
- ands r0, r1
- movs r3, 0x3
- cmp r0, 0x80
- bne _0811F3D2
- movs r3, 0x2
-_0811F3D2:
- movs r1, 0
- cmp r1, r3
- bcs _0811F3F0
-_0811F3D8:
- adds r2, r5, r1
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811F3E6
- subs r0, 0x1
- cmp r0, r4
- beq _0811F3B4
-_0811F3E6:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r3
- bcc _0811F3D8
-_0811F3F0:
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_811F2FC
-_0811F3F8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F400: .4byte gUnknown_203B0A0
- thumb_func_end sub_811F388
-
- thumb_func_start sub_811F404
-sub_811F404: @ 811F404
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_81209D4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0811F422
- adds r0, r4, 0
- movs r1, 0x5
- bl sub_811F2FC
- b _0811F42A
-_0811F422:
- adds r0, r4, 0
- movs r1, 0x6
- bl sub_811F2FC
-_0811F42A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_811F404
-
- thumb_func_start sub_811F430
-sub_811F430: @ 811F430
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0811F468 @ =gPlayerParty
- adds r6, r1, r0
- ldr r0, _0811F46C @ =gSpecialVar_ItemId
- ldrh r4, [r0]
- ldr r0, _0811F470 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0xC
- bne _0811F47C
- ldr r0, _0811F474 @ =gSpecialVar_Result
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0811F478 @ =gSpecialVar_0x8005
- ldrh r0, [r0]
- cmp r0, 0xE
- bhi _0811F492
- lsls r2, r0, 24
- lsrs r2, 24
- adds r0, r5, 0
- movs r1, 0
- bl sub_811F4D0
- b _0811F4C6
- .align 2, 0
-_0811F468: .4byte gPlayerParty
-_0811F46C: .4byte gSpecialVar_ItemId
-_0811F470: .4byte gUnknown_203B0A0
-_0811F474: .4byte gSpecialVar_Result
-_0811F478: .4byte gSpecialVar_0x8005
-_0811F47C:
- cmp r0, 0x3
- bne _0811F492
- adds r0, r4, 0
- bl GetItemCompatibilityRule
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811F496
- cmp r0, 0x2
- beq _0811F4A2
-_0811F492:
- movs r0, 0
- b _0811F4C8
-_0811F496:
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0
- bl sub_811F4D0
- b _0811F4C6
-_0811F4A2:
- adds r0, r6, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0811F4BE
- adds r0, r6, 0
- movs r1, 0x3
- adds r2, r4, 0
- bl GetEvolutionTargetSpecies
- lsls r0, 16
- cmp r0, 0
- bne _0811F492
-_0811F4BE:
- adds r0, r5, 0
- movs r1, 0
- bl sub_811F2FC
-_0811F4C6:
- movs r0, 0x1
-_0811F4C8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_811F430
-
- thumb_func_start sub_811F4D0
-sub_811F4D0: @ 811F4D0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x64
- muls r0, r4
- ldr r3, _0811F4FC @ =gPlayerParty
- adds r0, r3
- bl sub_8120B20
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _0811F50E
- cmp r0, 0x2
- bgt _0811F500
- cmp r0, 0x1
- beq _0811F504
- b _0811F518
- .align 2, 0
-_0811F4FC: .4byte gPlayerParty
-_0811F500:
- cmp r0, 0x3
- bne _0811F518
-_0811F504:
- adds r0, r4, 0
- movs r1, 0x8
- bl sub_811F2FC
- b _0811F520
-_0811F50E:
- adds r0, r4, 0
- movs r1, 0x9
- bl sub_811F2FC
- b _0811F520
-_0811F518:
- adds r0, r4, 0
- movs r1, 0x7
- bl sub_811F2FC
-_0811F520:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_811F4D0
-
- thumb_func_start sub_811F528
-sub_811F528: @ 811F528
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0811F558 @ =gUnknown_203B0B4
- lsls r2, r0, 4
- ldr r1, [r1]
- adds r5, r1, r2
- subs r0, 0x3
- lsls r0, 24
- ldr r1, _0811F55C @ =gUnknown_2022B58
- mov r8, r1
- lsrs r7, r0, 19
- adds r6, r7, r1
- ldrh r0, [r6]
- cmp r0, 0
- bne _0811F560
- ldrb r0, [r5, 0x8]
- bl sub_8121404
- b _0811F5DC
- .align 2, 0
-_0811F558: .4byte gUnknown_203B0B4
-_0811F55C: .4byte gUnknown_2022B58
-_0811F560:
- ldr r2, [r5]
- ldrb r0, [r5, 0x8]
- movs r1, 0
- str r1, [sp]
- str r1, [sp, 0x4]
- ldr r4, [r2]
- movs r2, 0
- movs r3, 0
- bl _call_via_r4
- ldr r4, _0811F5E8 @ =gStringVar1
- mov r0, r8
- adds r0, 0x4
- adds r7, r0
- adds r0, r4, 0
- adds r1, r7, 0
- bl StringCopy
- adds r0, r4, 0
- bl StringGetEnd10
- adds r0, r4, 0
- bl StringLength
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x5
- bhi _0811F5A0
- adds r0, r4, 0
- movs r1, 0x1
- bl ConvertInternationalString
-_0811F5A0:
- ldrb r0, [r5, 0x8]
- ldr r3, [r5]
- adds r3, 0x4
- adds r1, r4, 0
- movs r2, 0
- bl sub_8121704
- ldrb r0, [r6, 0xF]
- adds r1, r5, 0
- bl sub_8121808
- ldrb r0, [r6, 0x1C]
- ldrh r1, [r6]
- adds r2, r7, 0
- adds r3, r5, 0
- bl sub_81218BC
- ldrh r0, [r6, 0x10]
- adds r1, r5, 0
- bl sub_8121A04
- ldrh r0, [r6, 0x12]
- adds r1, r5, 0
- bl sub_8121AA4
- ldrh r0, [r6, 0x10]
- ldrh r1, [r6, 0x12]
- adds r2, r5, 0
- bl sub_8121B2C
-_0811F5DC:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F5E8: .4byte gStringVar1
- thumb_func_end sub_811F528
-
- thumb_func_start sub_811F5EC
-sub_811F5EC: @ 811F5EC
- push {r4,r5,lr}
- ldr r5, _0811F614 @ =gUnknown_203B09C
- ldr r0, [r5]
- movs r4, 0x86
- lsls r4, 2
- adds r0, r4
- ldrb r0, [r0]
- bl sub_811F124
- ldr r1, [r5]
- adds r1, r4
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6
- beq _0811F618
- movs r0, 0
- b _0811F61A
- .align 2, 0
-_0811F614: .4byte gUnknown_203B09C
-_0811F618:
- movs r0, 0x1
-_0811F61A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_811F5EC
-
- thumb_func_start sub_811F620
-sub_811F620: @ 811F620
- lsls r0, 16
- ldr r1, _0811F630 @ =gUnknown_203B0B8
- lsrs r0, 11
- ldr r1, [r1]
- adds r1, r0
- adds r0, r1, 0
- bx lr
- .align 2, 0
-_0811F630: .4byte gUnknown_203B0B8
- thumb_func_end sub_811F620
-
- thumb_func_start party_menu_add_per_mon_objects_internal
-party_menu_add_per_mon_objects_internal: @ 811F634
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0811F6A8 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0811F6E4
- cmp r7, 0x2
- bls _0811F6E4
- subs r0, r7, 0x3
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _0811F6AC @ =gUnknown_2022B58
- mov r9, r0
- mov r2, r10
- lsls r2, 5
- mov r8, r2
- mov r6, r8
- add r6, r9
- ldrh r0, [r6]
- cmp r0, 0
- beq _0811F728
- mov r1, r9
- adds r1, 0x18
- add r1, r8
- ldr r1, [r1]
- ldr r4, _0811F6B0 @ =gUnknown_203B0B4
- lsls r5, r7, 4
- ldr r2, [r4]
- adds r2, r5
- movs r3, 0
- str r3, [sp]
- bl party_menu_link_mon_icon_anim
- ldrh r0, [r6]
- ldrh r1, [r6, 0x2]
- ldr r2, [r4]
- adds r2, r5
- bl party_menu_link_mon_held_item_object
- ldrh r0, [r6]
- ldr r1, [r4]
- adds r1, r5
- bl party_menu_link_mon_pokeball_object
- ldrh r0, [r6, 0x10]
- cmp r0, 0
- bne _0811F6B4
- movs r3, 0x7
- b _0811F6C4
- .align 2, 0
-_0811F6A8: .4byte gUnknown_203B0A0
-_0811F6AC: .4byte gUnknown_2022B58
-_0811F6B0: .4byte gUnknown_203B0B4
-_0811F6B4:
- mov r0, r9
- adds r0, 0x14
- add r0, r8
- ldr r0, [r0]
- bl pokemon_ailments_get_primary
- lsls r0, 24
- lsrs r3, r0, 24
-_0811F6C4:
- ldr r1, _0811F6DC @ =gUnknown_2022B58
- mov r2, r10
- lsls r0, r2, 5
- adds r0, r1
- ldrh r0, [r0]
- ldr r1, _0811F6E0 @ =gUnknown_203B0B4
- ldr r2, [r1]
- adds r2, r5
- adds r1, r3, 0
- bl party_menu_link_mon_status_condition_object
- b _0811F728
- .align 2, 0
-_0811F6DC: .4byte gUnknown_2022B58
-_0811F6E0: .4byte gUnknown_203B0B4
-_0811F6E4:
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _0811F738 @ =gPlayerParty
- adds r6, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0811F728
- ldr r4, _0811F73C @ =gUnknown_203B0B4
- lsls r5, r7, 4
- ldr r1, [r4]
- adds r1, r5
- adds r0, r6, 0
- adds r2, r7, 0
- bl party_menu_icon_anim
- ldr r1, [r4]
- adds r1, r5
- adds r0, r6, 0
- bl party_menu_held_item_object
- ldr r1, [r4]
- adds r1, r5
- adds r0, r6, 0
- bl party_menu_pokeball_object
- ldr r1, [r4]
- adds r1, r5
- adds r0, r6, 0
- bl party_menu_status_condition_object
-_0811F728:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F738: .4byte gPlayerParty
-_0811F73C: .4byte gUnknown_203B0B4
- thumb_func_end party_menu_add_per_mon_objects_internal
-
- thumb_func_start party_menu_add_per_mon_objects
-party_menu_add_per_mon_objects: @ 811F740
- push {r4,r5,lr}
- ldr r5, _0811F768 @ =gUnknown_203B09C
- ldr r0, [r5]
- movs r4, 0x86
- lsls r4, 2
- adds r0, r4
- ldrb r0, [r0]
- bl party_menu_add_per_mon_objects_internal
- ldr r1, [r5]
- adds r1, r4
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6
- beq _0811F76C
- movs r0, 0
- b _0811F76E
- .align 2, 0
-_0811F768: .4byte gUnknown_203B09C
-_0811F76C:
- movs r0, 0x1
-_0811F76E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end party_menu_add_per_mon_objects
-
- thumb_func_start sub_811F774
-sub_811F774: @ 811F774
- push {r4,lr}
- sub sp, 0xC
- ldr r0, _0811F79C @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0811F7A0
- movs r0, 0x7
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r1, 0xE
- movs r2, 0x17
- movs r3, 0x11
- bl FillBgTilemapBufferRect
- b _0811F808
- .align 2, 0
-_0811F79C: .4byte gUnknown_203B0A0
-_0811F7A0:
- ldr r4, _0811F7D8 @ =gUnknown_203B09C
- ldr r0, [r4]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0811F7E0
- movs r0, 0xBF
- movs r1, 0x88
- bl sub_8122794
- ldr r3, [r4]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x7F
- ands r0, r1
- lsls r0, 4
- ldrh r2, [r3, 0x8]
- ldr r1, _0811F7DC @ =0xfffff80f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x8]
- bl sub_811F9DC
- movs r0, 0xBF
- movs r1, 0x98
- bl sub_8122794
- b _0811F7E8
- .align 2, 0
-_0811F7D8: .4byte gUnknown_203B09C
-_0811F7DC: .4byte 0xfffff80f
-_0811F7E0:
- movs r0, 0xC6
- movs r1, 0x94
- bl sub_8122754
-_0811F7E8:
- ldr r3, [r4]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x7F
- ands r0, r1
- lsls r0, 11
- ldr r1, [r3, 0x8]
- ldr r2, _0811F810 @ =0xfffc07ff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x8]
- ldr r0, _0811F814 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x9]
- movs r1, 0x1
- bl sub_811F818
-_0811F808:
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F810: .4byte 0xfffc07ff
-_0811F814: .4byte gUnknown_203B0A0
- thumb_func_end sub_811F774
-
- thumb_func_start sub_811F818
-sub_811F818: @ 811F818
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- cmp r7, 0x6
- beq _0811F884
- cmp r7, 0x7
- beq _0811F8C0
- movs r0, 0x64
- muls r0, r7
- ldr r1, _0811F87C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0811F934
- ldr r6, _0811F880 @ =gUnknown_203B0B4
- lsls r5, r7, 4
- ldr r4, [r6]
- adds r4, r5
- adds r0, r7, 0
- mov r1, r8
- bl sub_811F944
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_812142C
- ldr r0, [r6]
- adds r0, r5, r0
- ldrb r0, [r0, 0x9]
- mov r1, r8
- bl sub_812238C
- ldr r0, [r6]
- adds r5, r0
- ldrb r0, [r5, 0xB]
- mov r1, r8
- bl sub_81227B8
- b _0811F934
- .align 2, 0
-_0811F87C: .4byte gPlayerParty
-_0811F880: .4byte gUnknown_203B0B4
-_0811F884:
- mov r0, r8
- cmp r0, 0
- bne _0811F89E
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r1, 0x17
- movs r2, 0x10
- movs r3, 0x7
- bl SetBgRectPal
- b _0811F8B0
-_0811F89E:
- movs r0, 0x2
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0x17
- movs r2, 0x10
- movs r3, 0x7
- bl SetBgRectPal
-_0811F8B0:
- ldr r0, _0811F8BC @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrh r0, [r0, 0x8]
- lsls r0, 21
- b _0811F926
- .align 2, 0
-_0811F8BC: .4byte gUnknown_203B09C
-_0811F8C0:
- ldr r0, _0811F8E0 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- bne _0811F8F2
- mov r0, r8
- cmp r0, 0
- bne _0811F8E4
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r1, 0x17
- movs r2, 0x11
- b _0811F904
- .align 2, 0
-_0811F8E0: .4byte gUnknown_203B09C
-_0811F8E4:
- movs r0, 0x2
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0x17
- movs r2, 0x11
- b _0811F904
-_0811F8F2:
- mov r0, r8
- cmp r0, 0
- bne _0811F90C
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r1, 0x17
- movs r2, 0x12
-_0811F904:
- movs r3, 0x7
- bl SetBgRectPal
- b _0811F91E
-_0811F90C:
- movs r0, 0x2
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0x17
- movs r2, 0x12
- movs r3, 0x7
- bl SetBgRectPal
-_0811F91E:
- ldr r0, _0811F940 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldr r0, [r0, 0x8]
- lsls r0, 14
-_0811F926:
- lsrs r0, 25
- mov r1, r8
- bl sub_81227B8
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
-_0811F934:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F940: .4byte gUnknown_203B09C
- thumb_func_end sub_811F818
-
- thumb_func_start sub_811F944
-sub_811F944: @ 811F944
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- movs r4, 0
- cmp r1, 0x1
- bne _0811F956
- movs r4, 0x1
-_0811F956:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0811F9D4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _0811F96C
- movs r0, 0x2
- orrs r4, r0
-_0811F96C:
- ldr r2, _0811F9D8 @ =gUnknown_203B0A0
- ldrb r1, [r2, 0x8]
- movs r0, 0x30
- ands r0, r1
- cmp r0, 0x20
- bne _0811F98C
- cmp r5, 0x1
- beq _0811F984
- cmp r5, 0x4
- beq _0811F984
- cmp r5, 0x5
- bne _0811F98C
-_0811F984:
- movs r0, 0x8
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0811F98C:
- ldrb r1, [r2, 0xB]
- cmp r1, 0x9
- bne _0811F99A
- movs r0, 0x10
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0811F99A:
- cmp r1, 0x8
- bne _0811F9B6
- movs r0, 0x9
- ldrsb r0, [r2, r0]
- cmp r5, r0
- beq _0811F9AE
- movs r0, 0xA
- ldrsb r0, [r2, r0]
- cmp r5, r0
- bne _0811F9B6
-_0811F9AE:
- movs r0, 0x4
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0811F9B6:
- ldrb r0, [r2, 0xB]
- cmp r0, 0xA
- bne _0811F9CC
- movs r0, 0x9
- ldrsb r0, [r2, r0]
- cmp r5, r0
- bne _0811F9CC
- movs r0, 0x20
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0811F9CC:
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811F9D4: .4byte gPlayerParty
-_0811F9D8: .4byte gUnknown_203B0A0
- thumb_func_end sub_811F944
-
- thumb_func_start sub_811F9DC
-sub_811F9DC: @ 811F9DC
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r1, _0811FA18 @ =gUnknown_8459FC4
- movs r6, 0x7
- str r6, [sp]
- movs r5, 0x2
- str r5, [sp, 0x4]
- movs r4, 0x11
- str r4, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x17
- movs r3, 0x10
- bl CopyToBgTilemapBufferRect_ChangePalette
- ldr r1, _0811FA1C @ =gUnknown_8459FE0
- str r6, [sp]
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x17
- movs r3, 0x12
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FA18: .4byte gUnknown_8459FC4
-_0811FA1C: .4byte gUnknown_8459FE0
- thumb_func_end sub_811F9DC
-
- thumb_func_start IsMultiBattle
-IsMultiBattle: @ 811FA20
- push {lr}
- ldr r0, _0811FA34 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x4B
- ands r0, r1
- cmp r0, 0x4B
- beq _0811FA38
- movs r0, 0
- b _0811FA3A
- .align 2, 0
-_0811FA34: .4byte gBattleTypeFlags
-_0811FA38:
- movs r0, 0x1
-_0811FA3A:
- pop {r1}
- bx r1
- thumb_func_end IsMultiBattle
-
- thumb_func_start sub_811FA40
-sub_811FA40: @ 811FA40
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- movs r0, 0x64
- bl Alloc
- adds r5, r0, 0
- adds r1, r4, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r6, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r5, 0
- bl Free
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_811FA40
-
- thumb_func_start sub_811FA78
-sub_811FA78: @ 811FA78
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0811FAAC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0811FAB0 @ =sub_811FAB4
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FAAC: .4byte gTasks
-_0811FAB0: .4byte sub_811FAB4
- thumb_func_end sub_811FA78
-
- thumb_func_start sub_811FAB4
-sub_811FAB4: @ 811FAB4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0811FAE8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811FB04
- ldr r4, _0811FAEC @ =gUnknown_203B0A0
- ldrb r1, [r4, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _0811FAD6
- bl sub_81280C4
-_0811FAD6:
- ldr r0, _0811FAF0 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- cmp r0, 0
- beq _0811FAF4
- bl SetMainCallback2
- b _0811FAFA
- .align 2, 0
-_0811FAE8: .4byte gPaletteFade
-_0811FAEC: .4byte gUnknown_203B0A0
-_0811FAF0: .4byte gUnknown_203B09C
-_0811FAF4:
- ldr r0, [r4]
- bl SetMainCallback2
-_0811FAFA:
- bl sub_811F070
- adds r0, r5, 0
- bl DestroyTask
-_0811FB04:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_811FAB4
-
- thumb_func_start GetCursorSelectionMonId
-GetCursorSelectionMonId: @ 811FB0C
- ldr r0, _0811FB14 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x9]
- bx lr
- .align 2, 0
-_0811FB14: .4byte gUnknown_203B0A0
- thumb_func_end GetCursorSelectionMonId
-
- thumb_func_start sub_811FB18
-sub_811FB18: @ 811FB18
- ldr r0, _0811FB24 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x8]
- lsls r0, 28
- lsrs r0, 28
- bx lr
- .align 2, 0
-_0811FB24: .4byte gUnknown_203B0A0
- thumb_func_end sub_811FB18
-
- thumb_func_start sub_811FB28
-sub_811FB28: @ 811FB28
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- ldr r0, _0811FB64 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811FB98
- bl sub_80BF748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811FB98
- bl sub_811FBA4
- adds r4, r0, 0
- bl sub_811FEFC
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- beq _0811FB78
- cmp r0, 0x2
- bgt _0811FB68
- cmp r0, 0x1
- beq _0811FB6E
- b _0811FB98
- .align 2, 0
-_0811FB64: .4byte gPaletteFade
-_0811FB68:
- cmp r0, 0x8
- beq _0811FB82
- b _0811FB98
-_0811FB6E:
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_811FBC4
- b _0811FB98
-_0811FB78:
- adds r0, r6, 0
- adds r1, r4, 0
- bl sub_811FD88
- b _0811FB98
-_0811FB82:
- ldr r0, _0811FBA0 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0811FB98
- movs r0, 0x5
- bl PlaySE
- bl sub_8124258
-_0811FB98:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FBA0: .4byte gUnknown_203B09C
- thumb_func_end sub_811FB28
-
- thumb_func_start sub_811FBA4
-sub_811FBA4: @ 811FBA4
- push {lr}
- ldr r0, _0811FBB8 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0xB]
- cmp r1, 0x8
- beq _0811FBB2
- cmp r1, 0xA
- bne _0811FBBC
-_0811FBB2:
- adds r0, 0xA
- b _0811FBBE
- .align 2, 0
-_0811FBB8: .4byte gUnknown_203B0A0
-_0811FBBC:
- adds r0, 0x9
-_0811FBBE:
- pop {r1}
- bx r1
- thumb_func_end sub_811FBA4
-
- thumb_func_start sub_811FBC4
-sub_811FBC4: @ 811FBC4
- push {r4-r6,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0x6
- bne _0811FBE4
- ldr r0, _0811FBE0 @ =gUnknown_203B0A0
- ldr r1, [r0, 0x4]
- adds r0, r6, 0
- bl _call_via_r1
- b _0811FD56
- .align 2, 0
-_0811FBE0: .4byte gUnknown_203B0A0
-_0811FBE4:
- ldr r0, _0811FBFC @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- subs r0, 0x3
- cmp r0, 0xA
- bls _0811FBF0
- b _0811FD4A
-_0811FBF0:
- lsls r0, 2
- ldr r1, _0811FC00 @ =_0811FC04
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811FBFC: .4byte gUnknown_203B0A0
-_0811FC00: .4byte _0811FC04
- .align 2, 0
-_0811FC04:
- .4byte _0811FC46
- .4byte _0811FD4A
- .4byte _0811FCC0
- .4byte _0811FCC0
- .4byte _0811FCA6
- .4byte _0811FCDA
- .4byte _0811FD4A
- .4byte _0811FC30
- .4byte _0811FCE8
- .4byte _0811FC8C
- .4byte _0811FD34
-_0811FC30:
- adds r0, r5, 0
- bl sub_811FD5C
- lsls r0, 24
- cmp r0, 0
- bne _0811FC3E
- b _0811FD56
-_0811FC3E:
- adds r0, r6, 0
- bl sub_80E5724
- b _0811FD56
-_0811FC46:
- adds r0, r5, 0
- bl sub_811FD5C
- lsls r0, 24
- cmp r0, 0
- bne _0811FC54
- b _0811FD56
-_0811FC54:
- ldr r0, _0811FC78 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _0811FC68
- ldr r0, _0811FC7C @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _0811FC80 @ =sub_8128184
- str r0, [r1, 0x4]
-_0811FC68:
- ldr r0, _0811FC84 @ =gUnknown_3005E98
- ldr r1, _0811FC88 @ =sub_81255BC
- ldr r2, [r0]
- adds r0, r6, 0
- bl _call_via_r2
- b _0811FD56
- .align 2, 0
-_0811FC78: .4byte gUnknown_203B0A0
-_0811FC7C: .4byte gUnknown_203B09C
-_0811FC80: .4byte sub_8128184
-_0811FC84: .4byte gUnknown_3005E98
-_0811FC88: .4byte sub_81255BC
-_0811FC8C:
- adds r0, r5, 0
- bl sub_811FD5C
- lsls r0, 24
- cmp r0, 0
- beq _0811FD56
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl sub_8126DC8
- b _0811FD56
-_0811FCA6:
- adds r0, r5, 0
- bl sub_811FD5C
- lsls r0, 24
- cmp r0, 0
- beq _0811FD56
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl sub_8127404
- b _0811FD56
-_0811FCC0:
- adds r0, r5, 0
- bl sub_811FD5C
- lsls r0, 24
- cmp r0, 0
- beq _0811FD56
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl sub_8126F40
- b _0811FD56
-_0811FCDA:
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl sub_8122E5C
- b _0811FD56
-_0811FCE8:
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0811FD24 @ =gSpecialVar_0x8004
- movs r0, 0
- ldrsb r0, [r5, r0]
- strh r0, [r1]
- ldr r0, _0811FD28 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x7
- bne _0811FD1A
- ldr r4, _0811FD2C @ =gSpecialVar_0x8005
- movs r1, 0
- ldrsb r1, [r5, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0811FD30 @ =gPlayerParty
- adds r0, r1
- bl GetNumberOfRelearnableMoves
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
-_0811FD1A:
- adds r0, r6, 0
- bl sub_811FA78
- b _0811FD56
- .align 2, 0
-_0811FD24: .4byte gSpecialVar_0x8004
-_0811FD28: .4byte gUnknown_203B0A0
-_0811FD2C: .4byte gSpecialVar_0x8005
-_0811FD30: .4byte gPlayerParty
-_0811FD34:
- adds r0, r5, 0
- bl sub_811FD5C
- lsls r0, 24
- cmp r0, 0
- beq _0811FD56
- ldrb r1, [r5]
- adds r0, r6, 0
- bl sub_81209F4
- b _0811FD56
-_0811FD4A:
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl sub_8122C30
-_0811FD56:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_811FBC4
-
- thumb_func_start sub_811FD5C
-sub_811FD5C: @ 811FD5C
- push {lr}
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0811FD78 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _0811FD7C
- movs r0, 0x1
- b _0811FD84
- .align 2, 0
-_0811FD78: .4byte gPlayerParty
-_0811FD7C:
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0
-_0811FD84:
- pop {r1}
- bx r1
- thumb_func_end sub_811FD5C
-
- thumb_func_start sub_811FD88
-sub_811FD88: @ 811FD88
- push {r4,r5,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0811FDA4 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0x8
- beq _0811FDBA
- cmp r0, 0x8
- bgt _0811FDA8
- cmp r0, 0x1
- beq _0811FDB2
- b _0811FDD6
- .align 2, 0
-_0811FDA4: .4byte gUnknown_203B0A0
-_0811FDA8:
- cmp r0, 0xA
- beq _0811FDBA
- cmp r0, 0xD
- beq _0811FDC8
- b _0811FDD6
-_0811FDB2:
- movs r0, 0x1A
- bl PlaySE
- b _0811FE14
-_0811FDBA:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_81235E8
- b _0811FE14
-_0811FDC8:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_8120A58
- b _0811FE14
-_0811FDD6:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0811FDF0 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x4
- bne _0811FDF4
- adds r0, r4, 0
- bl sub_811FE24
- b _0811FE14
- .align 2, 0
-_0811FDF0: .4byte gUnknown_203B0A0
-_0811FDF4:
- bl MenuHelpers_LinkSomething
- lsls r0, 24
- cmp r0, 0
- bne _0811FE04
- ldr r1, _0811FE1C @ =gSpecialVar_0x8004
- movs r0, 0x7
- strh r0, [r1]
-_0811FE04:
- ldr r0, _0811FE20 @ =gUnknown_203B0C0
- movs r1, 0
- strb r1, [r0]
- movs r0, 0x7
- strb r0, [r5]
- adds r0, r4, 0
- bl sub_811FA78
-_0811FE14:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FE1C: .4byte gSpecialVar_0x8004
-_0811FE20: .4byte gUnknown_203B0C0
- thumb_func_end sub_811FD88
-
- thumb_func_start sub_811FE24
-sub_811FE24: @ 811FE24
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0811FE5C @ =gUnknown_203B09C
- ldr r0, [r0]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r5, _0811FE60 @ =gStringVar4
- ldr r1, _0811FE64 @ =gUnknown_84176CF
- adds r0, r5, 0
- bl StringExpandPlaceholders
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_81202F8
- ldr r1, _0811FE68 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0811FE6C @ =sub_811FE70
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FE5C: .4byte gUnknown_203B09C
-_0811FE60: .4byte gStringVar4
-_0811FE64: .4byte gUnknown_84176CF
-_0811FE68: .4byte gTasks
-_0811FE6C: .4byte sub_811FE70
- thumb_func_end sub_811FE24
-
- thumb_func_start sub_811FE70
-sub_811FE70: @ 811FE70
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811FE94
- bl sub_812200C
- ldr r0, _0811FE9C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0811FEA0 @ =sub_811FEA4
- str r0, [r1]
-_0811FE94:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FE9C: .4byte gTasks
-_0811FEA0: .4byte sub_811FEA4
- thumb_func_end sub_811FE70
-
- thumb_func_start sub_811FEA4
-sub_811FEA4: @ 811FEA4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0811FECA
- cmp r1, 0
- bgt _0811FEC4
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0811FEE8
- b _0811FEF4
-_0811FEC4:
- cmp r1, 0x1
- beq _0811FEEE
- b _0811FEF4
-_0811FECA:
- ldr r0, _0811FEE0 @ =gUnknown_203B0C0
- strb r1, [r0]
- ldr r1, _0811FEE4 @ =gUnknown_203B0A0
- movs r0, 0x7
- strb r0, [r1, 0x9]
- bl sub_81274FC
- adds r0, r4, 0
- bl sub_811FA78
- b _0811FEF4
- .align 2, 0
-_0811FEE0: .4byte gUnknown_203B0C0
-_0811FEE4: .4byte gUnknown_203B0A0
-_0811FEE8:
- movs r0, 0x5
- bl PlaySE
-_0811FEEE:
- adds r0, r4, 0
- bl sub_81203B8
-_0811FEF4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_811FEA4
-
- thumb_func_start sub_811FEFC
-sub_811FEFC: @ 811FEFC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0811FF14 @ =gMain
- ldrh r1, [r0, 0x30]
- adds r3, r0, 0
- cmp r1, 0x20
- beq _0811FF2A
- cmp r1, 0x20
- bgt _0811FF18
- cmp r1, 0x10
- beq _0811FF2E
- b _0811FF32
- .align 2, 0
-_0811FF14: .4byte gMain
-_0811FF18:
- cmp r1, 0x40
- beq _0811FF22
- cmp r1, 0x80
- beq _0811FF26
- b _0811FF32
-_0811FF22:
- movs r1, 0xFF
- b _0811FF4E
-_0811FF26:
- movs r1, 0x1
- b _0811FF4E
-_0811FF2A:
- movs r1, 0xFE
- b _0811FF4E
-_0811FF2E:
- movs r1, 0x2
- b _0811FF4E
-_0811FF32:
- bl sub_80BF66C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811FF46
- cmp r0, 0x2
- beq _0811FF4A
- movs r1, 0
- b _0811FF4C
-_0811FF46:
- movs r1, 0xFF
- b _0811FF4C
-_0811FF4A:
- movs r1, 0x1
-_0811FF4C:
- ldr r3, _0811FF5C @ =gMain
-_0811FF4E:
- ldrh r2, [r3, 0x2E]
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _0811FF60
- movs r0, 0x8
- b _0811FF8C
- .align 2, 0
-_0811FF5C: .4byte gMain
-_0811FF60:
- lsls r0, r1, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0811FF72
- adds r0, r4, 0
- bl sub_811FF94
- movs r0, 0
- b _0811FF8C
-_0811FF72:
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _0811FF86
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x7
- bne _0811FF86
- movs r0, 0x2
- b _0811FF8C
-_0811FF86:
- ldrh r1, [r3, 0x2E]
- movs r0, 0x3
- ands r0, r1
-_0811FF8C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811FEFC
-
- thumb_func_start sub_811FF94
-sub_811FF94: @ 811FF94
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldrb r4, [r5]
- ldr r0, _0811FFB8 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x8]
- lsls r0, 26
- lsrs r0, 30
- cmp r0, 0
- bne _0811FFBC
- lsls r1, 24
- asrs r1, 24
- adds r0, r5, 0
- bl sub_811FFF0
- b _0811FFC6
- .align 2, 0
-_0811FFB8: .4byte gUnknown_203B0A0
-_0811FFBC:
- lsls r1, 24
- asrs r1, 24
- adds r0, r5, 0
- bl sub_81200F8
-_0811FFC6:
- movs r1, 0
- ldrsb r1, [r5, r1]
- lsls r4, 24
- asrs r0, r4, 24
- cmp r1, r0
- beq _0811FFE8
- movs r0, 0x5
- bl PlaySE
- lsrs r0, r4, 24
- movs r1, 0
- bl sub_811F818
- ldrb r0, [r5]
- movs r1, 0x1
- bl sub_811F818
-_0811FFE8:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_811FF94
-
- thumb_func_start sub_811FFF0
-sub_811FFF0: @ 811FFF0
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08120016
- cmp r1, r0
- bgt _0812000C
- subs r0, 0x1
- cmp r1, r0
- beq _081200C0
- b _081200EE
-_0812000C:
- cmp r1, 0x1
- beq _0812005C
- cmp r1, 0x2
- beq _08120094
- b _081200EE
-_08120016:
- ldrb r0, [r4]
- movs r1, 0
- ldrsb r1, [r4, r1]
- cmp r1, 0
- bne _08120024
- movs r0, 0x7
- b _081200EC
-_08120024:
- cmp r1, 0x6
- bne _08120034
- ldr r0, _08120030 @ =gPlayerPartyCount
- ldrb r0, [r0]
- subs r0, 0x1
- b _081200EC
- .align 2, 0
-_08120030: .4byte gPlayerPartyCount
-_08120034:
- cmp r1, 0x7
- bne _08120058
- ldr r0, _08120048 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0812004C
- movs r0, 0x6
- b _081200EC
- .align 2, 0
-_08120048: .4byte gUnknown_203B09C
-_0812004C:
- ldr r0, _08120054 @ =gPlayerPartyCount
- ldrb r0, [r0]
- subs r0, 0x1
- b _081200EC
- .align 2, 0
-_08120054: .4byte gPlayerPartyCount
-_08120058:
- subs r0, 0x1
- b _081200EC
-_0812005C:
- ldrb r2, [r4]
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x7
- beq _081200EA
- movs r1, 0
- ldrsb r1, [r4, r1]
- ldr r0, _08120084 @ =gPlayerPartyCount
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _08120090
- ldr r0, _08120088 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0812008C
- movs r0, 0x6
- b _081200EC
- .align 2, 0
-_08120084: .4byte gPlayerPartyCount
-_08120088: .4byte gUnknown_203B09C
-_0812008C:
- movs r0, 0x7
- b _081200EC
-_08120090:
- adds r0, r2, 0x1
- b _081200EC
-_08120094:
- ldr r0, _081200B8 @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _081200EE
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bne _081200EE
- ldr r0, _081200BC @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _081200EC
- movs r0, 0x1
- b _081200EC
- .align 2, 0
-_081200B8: .4byte gPlayerPartyCount
-_081200BC: .4byte gUnknown_203B09C
-_081200C0:
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- beq _081200EE
- cmp r0, 0x6
- beq _081200EE
- cmp r0, 0x7
- beq _081200EE
- ldr r0, _081200F4 @ =gUnknown_203B09C
- ldr r3, [r0]
- movs r1, 0
- ldrsb r1, [r4, r1]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r3, 0x8]
- movs r0, 0xF
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x8]
-_081200EA:
- movs r0, 0
-_081200EC:
- strb r0, [r4]
-_081200EE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081200F4: .4byte gUnknown_203B09C
- thumb_func_end sub_811FFF0
-
- thumb_func_start sub_81200F8
-sub_81200F8: @ 81200F8
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r2, r1, 24
- asrs r5, r1, 24
- movs r6, 0x1
- negs r6, r6
- cmp r5, r6
- beq _08120124
- cmp r5, r6
- bgt _0812011A
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- bne _08120118
- b _08120238
-_08120118:
- b _08120290
-_0812011A:
- cmp r5, 0x1
- beq _08120180
- cmp r5, 0x2
- beq _081201C0
- b _08120290
-_08120124:
- ldrb r1, [r4]
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bne _08120132
- movs r0, 0x7
- b _0812028E
-_08120132:
- cmp r0, 0x6
- bne _08120144
- ldr r0, _08120140 @ =gPlayerPartyCount
- ldrb r0, [r0]
- subs r0, 0x1
- b _0812028E
- .align 2, 0
-_08120140: .4byte gPlayerPartyCount
-_08120144:
- cmp r0, 0x7
- bne _08120160
- ldr r0, _08120158 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0812015C
- movs r0, 0x6
- b _0812028E
- .align 2, 0
-_08120158: .4byte gUnknown_203B09C
-_0812015C:
- subs r0, r1, 0x1
- strb r0, [r4]
-_08120160:
- movs r0, 0
- ldrsb r0, [r4, r0]
- lsls r1, r2, 24
- asrs r1, 24
- bl sub_812029C
- lsls r0, 24
- lsrs r2, r0, 24
- asrs r0, 24
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _0812017C
- b _08120290
-_0812017C:
- strb r2, [r4]
- b _08120290
-_08120180:
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x6
- bne _0812018C
- movs r0, 0x7
- b _0812028E
-_0812018C:
- cmp r0, 0x7
- bne _08120194
- movs r0, 0
- b _0812028E
-_08120194:
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x1
- bl sub_812029C
- lsls r0, 24
- lsrs r2, r0, 24
- asrs r0, 24
- cmp r0, r6
- bne _0812017C
- ldr r0, _081201B8 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _081201BC
- movs r0, 0x6
- b _0812028E
- .align 2, 0
-_081201B8: .4byte gUnknown_203B09C
-_081201BC:
- movs r0, 0x7
- b _0812028E
-_081201C0:
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bne _081201F8
- ldr r0, _081201E8 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 28
- lsrs r6, r0, 29
- cmp r6, 0x3
- bne _081201F0
- ldr r0, _081201EC @ =gPlayerParty + 300 @ &gPlayerParty[3]
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08120290
- strb r6, [r4]
- b _08120290
- .align 2, 0
-_081201E8: .4byte gUnknown_203B09C
-_081201EC: .4byte gPlayerParty + 300 @ &gPlayerParty[3]
-_081201F0:
- ldr r0, _081201F4 @ =gPlayerParty + 200 @ &gPlayerParty[2]
- b _0812020C
- .align 2, 0
-_081201F4: .4byte gPlayerParty + 200 @ &gPlayerParty[2]
-_081201F8:
- cmp r0, 0x1
- bne _08120290
- ldr r0, _0812021C @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 28
- lsrs r5, r0, 29
- cmp r5, 0x5
- bne _08120224
- ldr r0, _08120220 @ =gPlayerParty + 500 @ &gPlayerParty[5]
-_0812020C:
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08120290
- strb r5, [r4]
- b _08120290
- .align 2, 0
-_0812021C: .4byte gUnknown_203B09C
-_08120220: .4byte gPlayerParty + 500 @ &gPlayerParty[5]
-_08120224:
- ldr r0, _08120234 @ =gPlayerParty + 400 @ &gPlayerParty[4]
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08120290
- movs r0, 0x4
- b _0812028E
- .align 2, 0
-_08120234: .4byte gPlayerParty + 400 @ &gPlayerParty[4]
-_08120238:
- ldrb r1, [r4]
- subs r0, r1, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08120268
- ldr r0, _08120264 @ =gUnknown_203B09C
- ldr r3, [r0]
- movs r1, 0
- ldrsb r1, [r4, r1]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r3, 0x8]
- movs r0, 0xF
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x8]
- movs r0, 0
- b _0812028E
- .align 2, 0
-_08120264: .4byte gUnknown_203B09C
-_08120268:
- subs r0, r1, 0x4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08120290
- ldr r0, _08120298 @ =gUnknown_203B09C
- ldr r3, [r0]
- movs r1, 0
- ldrsb r1, [r4, r1]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r3, 0x8]
- movs r0, 0xF
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x8]
- movs r0, 0x1
-_0812028E:
- strb r0, [r4]
-_08120290:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08120298: .4byte gUnknown_203B09C
- thumb_func_end sub_81200F8
-
- thumb_func_start sub_812029C
-sub_812029C: @ 812029C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- asrs r6, r1, 24
-_081202A6:
- lsls r0, r5, 24
- asrs r0, 24
- adds r0, r6
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, r5, 24
- lsrs r0, r1, 24
- cmp r0, 0x5
- bhi _081202D4
- asrs r4, r1, 24
- movs r0, 0x64
- muls r0, r4
- ldr r1, _081202D0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _081202A6
- adds r0, r4, 0
- b _081202D8
- .align 2, 0
-_081202D0: .4byte gPlayerParty
-_081202D4:
- movs r0, 0x1
- negs r0, r0
-_081202D8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_812029C
-
- thumb_func_start GetMonNickname
-GetMonNickname: @ 81202E0
- push {r4,lr}
- adds r4, r1, 0
- movs r1, 0x2
- adds r2, r4, 0
- bl GetMonData
- adds r0, r4, 0
- bl StringGetEnd10
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetMonNickname
-
- thumb_func_start sub_81202F8
-sub_81202F8: @ 81202F8
- push {r4,lr}
- lsls r4, r1, 24
- lsrs r4, 24
- bl sub_8121FC0
- ldr r0, _08120320 @ =sub_8120328
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08120324 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08120320: .4byte sub_8120328
-_08120324: .4byte gTasks
- thumb_func_end sub_81202F8
-
- thumb_func_start sub_8120328
-sub_8120328: @ 8120328
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- movs r0, 0x6
- bl RunTextPrinters_CheckActive
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _08120364
- ldr r0, _0812036C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _0812035E
- movs r0, 0x6
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x6
- bl ClearWindowTilemap
-_0812035E:
- adds r0, r5, 0
- bl DestroyTask
-_08120364:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812036C: .4byte gTasks
- thumb_func_end sub_8120328
-
- thumb_func_start sub_8120370
-sub_8120370: @ 8120370
- push {lr}
- ldr r0, _08120380 @ =sub_8120328
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08120380: .4byte sub_8120328
- thumb_func_end sub_8120370
-
- thumb_func_start sub_8120384
-sub_8120384: @ 8120384
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_80BF748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081203AA
- movs r0, 0
- bl sub_8121D0C
- ldr r0, _081203B0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _081203B4 @ =sub_811FB28
- str r0, [r1]
-_081203AA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081203B0: .4byte gTasks
-_081203B4: .4byte sub_811FB28
- thumb_func_end sub_8120384
-
- thumb_func_start sub_81203B8
-sub_81203B8: @ 81203B8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08120410
- movs r0, 0x6
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x6
- bl ClearWindowTilemap
- bl MenuHelpers_LinkSomething
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081203FC
- ldr r0, _081203F4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _081203F8 @ =sub_8120384
- b _0812040E
- .align 2, 0
-_081203F4: .4byte gTasks
-_081203F8: .4byte sub_8120384
-_081203FC:
- movs r0, 0
- bl sub_8121D0C
- ldr r0, _08120418 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812041C @ =sub_811FB28
-_0812040E:
- str r0, [r1]
-_08120410:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120418: .4byte gTasks
-_0812041C: .4byte sub_811FB28
- thumb_func_end sub_81203B8
-
- thumb_func_start sub_8120420
-sub_8120420: @ 8120420
- push {r4-r6,lr}
- adds r5, r0, 0
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 24
- lsrs r6, r2, 24
- lsls r3, 24
- cmp r3, 0
- bne _0812043C
- ldr r3, _08120438 @ =0x0000ffff
- movs r0, 0x5
- b _08120448
- .align 2, 0
-_08120438: .4byte 0x0000ffff
-_0812043C:
- ldr r0, _08120454 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0x6
- bne _0812045C
- ldr r3, _08120458 @ =0x0000ffff
- movs r0, 0x7
-_08120448:
- adds r1, r5, 0
- adds r2, r4, 0
- bl ItemUse_SetQuestLogEvent
- b _08120468
- .align 2, 0
-_08120454: .4byte gUnknown_203B0A0
-_08120458: .4byte 0x0000ffff
-_0812045C:
- ldr r3, _08120498 @ =0x0000ffff
- movs r0, 0x6
- adds r1, r5, 0
- adds r2, r4, 0
- bl ItemUse_SetQuestLogEvent
-_08120468:
- ldr r1, _0812049C @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNickname
- ldr r1, _081204A0 @ =gStringVar2
- adds r0, r4, 0
- bl CopyItemName
- ldr r4, _081204A4 @ =gStringVar4
- ldr r1, _081204A8 @ =gUnknown_8416C2A
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08120498: .4byte 0x0000ffff
-_0812049C: .4byte gStringVar1
-_081204A0: .4byte gStringVar2
-_081204A4: .4byte gStringVar4
-_081204A8: .4byte gUnknown_8416C2A
- thumb_func_end sub_8120420
-
- thumb_func_start sub_81204AC
-sub_81204AC: @ 81204AC
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- ldr r3, _081204F8 @ =0x0000ffff
- movs r0, 0x8
- adds r1, r6, 0
- adds r2, r4, 0
- bl ItemUse_SetQuestLogEvent
- ldr r1, _081204FC @ =gStringVar1
- adds r0, r6, 0
- bl GetMonNickname
- ldr r1, _08120500 @ =gStringVar2
- adds r0, r4, 0
- bl CopyItemName
- ldr r4, _08120504 @ =gStringVar4
- ldr r1, _08120508 @ =gUnknown_8416CAC
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081204F8: .4byte 0x0000ffff
-_081204FC: .4byte gStringVar1
-_08120500: .4byte gStringVar2
-_08120504: .4byte gStringVar4
-_08120508: .4byte gUnknown_8416CAC
- thumb_func_end sub_81204AC
-
- thumb_func_start sub_812050C
-sub_812050C: @ 812050C
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- ldr r1, _08120548 @ =gStringVar1
- bl GetMonNickname
- ldr r1, _0812054C @ =gStringVar2
- adds r0, r4, 0
- bl CopyItemName
- ldr r4, _08120550 @ =gStringVar4
- ldr r1, _08120554 @ =gUnknown_8416C49
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120548: .4byte gStringVar1
-_0812054C: .4byte gStringVar2
-_08120550: .4byte gStringVar4
-_08120554: .4byte gUnknown_8416C49
- thumb_func_end sub_812050C
-
- thumb_func_start sub_8120558
-sub_8120558: @ 8120558
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _081205B0 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081205B4 @ =gPlayerParty
- adds r0, r1
- adds r1, r5, 0
- adds r2, r4, 0
- bl sub_8124B60
- ldr r1, _081205B8 @ =gStringVar1
- adds r0, r4, 0
- bl CopyItemName
- ldr r1, _081205BC @ =gStringVar2
- adds r0, r5, 0
- bl CopyItemName
- ldr r4, _081205C0 @ =gStringVar4
- ldr r1, _081205C4 @ =gUnknown_8416CEA
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081205B0: .4byte gUnknown_203B0A0
-_081205B4: .4byte gPlayerParty
-_081205B8: .4byte gStringVar1
-_081205BC: .4byte gStringVar2
-_081205C0: .4byte gStringVar4
-_081205C4: .4byte gUnknown_8416CEA
- thumb_func_end sub_8120558
-
- thumb_func_start sub_81205C8
-sub_81205C8: @ 81205C8
- push {r4-r7,lr}
- sub sp, 0x4
- adds r6, r0, 0
- lsls r5, r1, 16
- lsrs r4, r5, 16
- adds r7, r4, 0
- adds r0, r4, 0
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081205F2
- adds r0, r6, 0
- adds r1, r4, 0
- bl GiveMailToMon
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _08120606
-_081205F2:
- mov r0, sp
- strb r7, [r0]
- mov r1, sp
- lsrs r0, r5, 24
- strb r0, [r1, 0x1]
- adds r0, r6, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
-_08120606:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81205C8
-
- thumb_func_start sub_8120610
-sub_8120610: @ 8120610
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r1, sp
- strh r0, [r1]
- cmp r0, 0
- bne _0812062C
- movs r0, 0
- b _0812064E
-_0812062C:
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- cmp r0, 0
- beq _0812064C
- movs r1, 0
- mov r0, sp
- strh r1, [r0]
- adds r0, r4, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- movs r0, 0x2
- b _0812064E
-_0812064C:
- movs r0, 0x1
-_0812064E:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8120610
-
- thumb_func_start sub_8120658
-sub_8120658: @ 8120658
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl ItemId_GetPocket
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- beq _08120678
- cmp r0, 0x5
- beq _0812067E
- ldr r1, _08120674 @ =gStartMenuText_Bag
- b _08120686
- .align 2, 0
-_08120674: .4byte gStartMenuText_Bag
-_08120678:
- movs r0, 0xB6
- lsls r0, 1
- b _08120680
-_0812067E:
- ldr r0, _08120698 @ =0x0000016d
-_08120680:
- bl ItemId_GetName
- adds r1, r0, 0
-_08120686:
- ldr r0, _0812069C @ =gStringVar1
- bl StringCopy
- ldr r0, _081206A0 @ =gStringVar4
- ldr r1, _081206A4 @ =gUnknown_8416D78
- bl StringExpandPlaceholders
- pop {r0}
- bx r0
- .align 2, 0
-_08120698: .4byte 0x0000016d
-_0812069C: .4byte gStringVar1
-_081206A0: .4byte gStringVar4
-_081206A4: .4byte gUnknown_8416D78
- thumb_func_end sub_8120658
-
- thumb_func_start sub_81206A8
-sub_81206A8: @ 81206A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- ldr r1, _08120750 @ =gTasks+0x8
- adds r7, r0, r1
- ldrh r0, [r7, 0x4]
- ldrh r1, [r7]
- adds r0, r1
- strh r0, [r7]
- ldrh r0, [r7, 0x6]
- subs r0, 0x1
- strh r0, [r7, 0x6]
- movs r2, 0x8
- ldrsh r0, [r7, r2]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _08120754 @ =gPlayerParty
- adds r0, r4
- movs r1, 0x39
- adds r2, r7, 0
- bl SetMonData
- movs r3, 0x8
- ldrsh r2, [r7, r3]
- adds r0, r2, 0
- muls r0, r5
- adds r0, r4
- ldr r6, _08120758 @ =gUnknown_203B0B4
- lsls r2, 4
- ldr r1, [r6]
- adds r1, r2
- movs r2, 0x1
- bl sub_812199C
- movs r0, 0x8
- ldrsh r2, [r7, r0]
- adds r0, r2, 0
- muls r0, r5
- adds r0, r4
- lsls r2, 4
- ldr r1, [r6]
- adds r1, r2
- bl sub_8121AF0
- movs r1, 0x6
- ldrsh r0, [r7, r1]
- cmp r0, 0
- beq _08120724
- movs r2, 0
- ldrsh r1, [r7, r2]
- cmp r1, 0
- beq _08120724
- movs r3, 0x2
- ldrsh r0, [r7, r3]
- cmp r1, r0
- bne _08120746
-_08120724:
- movs r0, 0
- ldrsh r1, [r7, r0]
- movs r2, 0xA
- ldrsh r0, [r7, r2]
- cmp r1, r0
- ble _08120740
- ldr r0, _0812075C @ =gStringVar2
- movs r3, 0xA
- ldrsh r2, [r7, r3]
- subs r1, r2
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
-_08120740:
- mov r0, r8
- bl SwitchTaskToFollowupFunc
-_08120746:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08120750: .4byte gTasks+0x8
-_08120754: .4byte gPlayerParty
-_08120758: .4byte gUnknown_203B0B4
-_0812075C: .4byte gStringVar2
- thumb_func_end sub_81206A8
-
- thumb_func_start sub_8120760
-sub_8120760: @ 8120760
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r8, r0
- mov r9, r1
- adds r5, r2, 0
- mov r10, r3
- ldr r7, [sp, 0x20]
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r5, 24
- lsrs r5, 24
- mov r0, r10
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- movs r0, 0x64
- mov r6, r9
- muls r6, r0
- ldr r0, _081207E4 @ =gPlayerParty
- adds r6, r0
- mov r0, r8
- lsls r4, r0, 2
- add r4, r8
- lsls r4, 3
- ldr r0, _081207E8 @ =gTasks+0x8
- adds r4, r0
- adds r0, r6, 0
- movs r1, 0x39
- bl GetMonData
- strh r0, [r4]
- adds r0, r6, 0
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r4, 0x2]
- lsls r5, 24
- asrs r5, 24
- strh r5, [r4, 0x4]
- mov r0, r10
- strh r0, [r4, 0x6]
- mov r0, r9
- strh r0, [r4, 0x8]
- ldrh r0, [r4]
- strh r0, [r4, 0xA]
- ldr r1, _081207EC @ =sub_81206A8
- mov r0, r8
- adds r2, r7, 0
- bl SetTaskFuncWithFollowupFunc
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081207E4: .4byte gPlayerParty
-_081207E8: .4byte gTasks+0x8
-_081207EC: .4byte sub_81206A8
- thumb_func_end sub_8120760
-
- thumb_func_start sub_81207F0
-sub_81207F0: @ 81207F0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _08120814 @ =gTasks+0x8
- adds r3, r0, r1
- cmp r5, 0x5
- bhi _08120852
- lsls r0, r5, 2
- ldr r1, _08120818 @ =_0812081C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08120814: .4byte gTasks+0x8
-_08120818: .4byte _0812081C
- .align 2, 0
-_0812081C:
- .4byte _08120834
- .4byte _0812083A
- .4byte _0812083E
- .4byte _08120842
- .4byte _08120846
- .4byte _0812084A
-_08120834:
- strh r2, [r3]
- strh r2, [r3, 0xA]
- b _08120852
-_0812083A:
- strh r2, [r3, 0x2]
- b _08120852
-_0812083E:
- strh r2, [r3, 0x4]
- b _08120852
-_08120842:
- strh r2, [r3, 0x6]
- b _08120852
-_08120846:
- strh r2, [r3, 0x8]
- b _08120852
-_0812084A:
- ldr r1, _08120858 @ =sub_81206A8
- adds r0, r4, 0
- bl SetTaskFuncWithFollowupFunc
-_08120852:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120858: .4byte sub_81206A8
- thumb_func_end sub_81207F0
-
- thumb_func_start pokemon_ailments_get_primary
-pokemon_ailments_get_primary: @ 812085C
- push {lr}
- adds r1, r0, 0
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- beq _0812086C
- movs r0, 0x1
- b _0812089E
-_0812086C:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08120878
- movs r0, 0x2
- b _0812089E
-_08120878:
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08120884
- movs r0, 0x3
- b _0812089E
-_08120884:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08120890
- movs r0, 0x4
- b _0812089E
-_08120890:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0812089C
- movs r0, 0
- b _0812089E
-_0812089C:
- movs r0, 0x5
-_0812089E:
- pop {r1}
- bx r1
- thumb_func_end pokemon_ailments_get_primary
-
- thumb_func_start sub_81208A4
-sub_81208A4: @ 81208A4
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _081208B6
- movs r0, 0x7
- b _081208DE
-_081208B6:
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- bl pokemon_ailments_get_primary
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _081208DE
- adds r0, r4, 0
- movs r1, 0
- bl CheckPartyPokerus
- lsls r0, 24
- cmp r0, 0
- bne _081208DC
- movs r0, 0
- b _081208DE
-_081208DC:
- movs r0, 0x6
-_081208DE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81208A4
-
- thumb_func_start sub_81208E4
-sub_81208E4: @ 81208E4
- push {r4,r5,lr}
- ldr r2, _08120934 @ =gUnknown_203B0A0
- ldrb r1, [r2, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0xB
- bne _0812096E
- adds r5, r2, 0
- adds r5, 0xE
- movs r0, 0
- strh r0, [r2, 0xE]
- ldr r0, _08120938 @ =gSpecialVar_0x8005
- ldrh r0, [r0]
- cmp r0, 0
- bne _08120944
- movs r4, 0
- ldr r0, _0812093C @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r4, r0
- bcs _0812096E
-_0812090C:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _08120940 @ =gPlayerParty
- adds r0, r1
- bl sub_812097C
- lsls r0, 16
- lsrs r0, 16
- lsls r0, r4
- ldrh r1, [r5]
- adds r0, r1
- strh r0, [r5]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0812093C @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r4, r0
- bcc _0812090C
- b _0812096E
- .align 2, 0
-_08120934: .4byte gUnknown_203B0A0
-_08120938: .4byte gSpecialVar_0x8005
-_0812093C: .4byte gPlayerPartyCount
-_08120940: .4byte gPlayerParty
-_08120944:
- movs r4, 0
- b _08120966
-_08120948:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _08120974 @ =gPlayerParty
- adds r0, r1
- bl sub_81209AC
- lsls r0, 16
- lsrs r0, 16
- lsls r0, r4
- ldrh r1, [r5]
- adds r0, r1
- strh r0, [r5]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_08120966:
- ldr r0, _08120978 @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r4, r0
- bcc _08120948
-_0812096E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120974: .4byte gPlayerParty
-_08120978: .4byte gPlayerPartyCount
- thumb_func_end sub_81208E4
-
- thumb_func_start sub_812097C
-sub_812097C: @ 812097C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _081209A2
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl sub_8149A00
- cmp r0, 0
- beq _081209A2
- movs r0, 0x1
- b _081209A4
-_081209A2:
- movs r0, 0
-_081209A4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812097C
-
- thumb_func_start sub_81209AC
-sub_81209AC: @ 81209AC
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _081209CA
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0x55
- bne _081209CA
- movs r0, 0x1
- b _081209CC
-_081209CA:
- movs r0, 0
-_081209CC:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81209AC
-
- thumb_func_start sub_81209D4
-sub_81209D4: @ 81209D4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _081209F0 @ =gUnknown_203B0A0
- movs r2, 0xE
- ldrsh r1, [r1, r2]
- asrs r1, r0
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- bne _081209EC
- movs r0, 0
-_081209EC:
- pop {r1}
- bx r1
- .align 2, 0
-_081209F0: .4byte gUnknown_203B0A0
- thumb_func_end sub_81209D4
-
- thumb_func_start sub_81209F4
-sub_81209F4: @ 81209F4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- adds r0, r5, 0
- bl sub_81209D4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08120A24
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08120A20 @ =gSpecialVar_0x8004
- strh r5, [r0]
- adds r0, r4, 0
- bl sub_811FA78
- b _08120A46
- .align 2, 0
-_08120A20: .4byte gSpecialVar_0x8004
-_08120A24:
- movs r0, 0x1A
- bl PlaySE
- ldr r0, _08120A4C @ =gUnknown_8417696
- movs r1, 0
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08120A50 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120A54 @ =sub_81203B8
- str r1, [r0]
-_08120A46:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120A4C: .4byte gUnknown_8417696
-_08120A50: .4byte gTasks
-_08120A54: .4byte sub_81203B8
- thumb_func_end sub_81209F4
-
- thumb_func_start sub_8120A58
-sub_8120A58: @ 8120A58
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08120A84 @ =gUnknown_84176B8
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08120A88 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120A8C @ =sub_8120A90
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120A84: .4byte gUnknown_84176B8
-_08120A88: .4byte gTasks
-_08120A8C: .4byte sub_8120A90
- thumb_func_end sub_8120A58
-
- thumb_func_start sub_8120A90
-sub_8120A90: @ 8120A90
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08120AB4
- bl sub_812200C
- ldr r0, _08120ABC @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120AC0 @ =sub_8120AC4
- str r0, [r1]
-_08120AB4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120ABC: .4byte gTasks
-_08120AC0: .4byte sub_8120AC4
- thumb_func_end sub_8120A90
-
- thumb_func_start sub_8120AC4
-sub_8120AC4: @ 8120AC4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08120AEA
- cmp r1, 0
- bgt _08120AE4
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08120AFC
- b _08120B10
-_08120AE4:
- cmp r1, 0x1
- beq _08120B02
- b _08120B10
-_08120AEA:
- ldr r1, _08120AF8 @ =gSpecialVar_0x8004
- movs r0, 0x7
- strh r0, [r1]
- adds r0, r4, 0
- bl sub_811FA78
- b _08120B10
- .align 2, 0
-_08120AF8: .4byte gSpecialVar_0x8004
-_08120AFC:
- movs r0, 0x5
- bl PlaySE
-_08120B02:
- ldr r0, _08120B18 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120B1C @ =sub_81203B8
- str r0, [r1]
-_08120B10:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120B18: .4byte gTasks
-_08120B1C: .4byte sub_81203B8
- thumb_func_end sub_8120AC4
-
- thumb_func_start sub_8120B20
-sub_8120B20: @ 8120B20
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- lsls r1, 16
- lsrs r4, r1, 16
- adds r7, r4, 0
- lsls r2, 24
- lsrs r6, r2, 24
- mov r8, r6
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _08120B42
- movs r0, 0x3
- b _08120B9E
-_08120B42:
- movs r0, 0x90
- lsls r0, 1
- cmp r4, r0
- bls _08120B64
- adds r1, r4, 0
- subs r1, 0x21
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl CanMonLearnTMHM
- cmp r0, 0
- beq _08120B7C
- adds r0, r7, 0
- bl ItemIdToBattleMoveId
- b _08120B86
-_08120B64:
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl IsMonCompatibleWithMoveTutorMove
- lsls r0, 24
- cmp r0, 0
- bne _08120B80
-_08120B7C:
- movs r0, 0x1
- b _08120B9E
-_08120B80:
- mov r0, r8
- bl GetMoveTutorMove
-_08120B86:
- lsls r0, 16
- lsrs r1, r0, 16
- adds r0, r5, 0
- bl MonKnowsMove
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08120B9C
- movs r0, 0
- b _08120B9E
-_08120B9C:
- movs r0, 0x2
-_08120B9E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8120B20
-
- thumb_func_start GetMoveTutorMove
-GetMoveTutorMove: @ 8120BA8
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x10
- beq _08120BC8
- cmp r1, 0x10
- bgt _08120BBC
- cmp r1, 0xF
- beq _08120BC2
- b _08120BD6
-_08120BBC:
- cmp r1, 0x11
- beq _08120BD0
- b _08120BD6
-_08120BC2:
- movs r0, 0xA9
- lsls r0, 1 @ MOVE_FRENZY_PLANT
- b _08120BDE
-_08120BC8:
- ldr r0, _08120BCC @ =0x00000133 @ MOVE_BLAST_BURN
- b _08120BDE
- .align 2, 0
-_08120BCC: .4byte 0x00000133
-_08120BD0:
- movs r0, 0x9A
- lsls r0, 1 @ MOVE_HYDRO_CANNON
- b _08120BDE
-_08120BD6:
- ldr r0, _08120BE4 @ =gMoveTutorMoves
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
-_08120BDE:
- pop {r1}
- bx r1
- .align 2, 0
-_08120BE4: .4byte gMoveTutorMoves
- thumb_func_end GetMoveTutorMove
-
- thumb_func_start IsMonCompatibleWithMoveTutorMove
-IsMonCompatibleWithMoveTutorMove: @ 8120BE8
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 24
- lsrs r2, r1, 24
- cmp r2, 0x10
- beq _08120C0C
- cmp r2, 0x10
- bgt _08120C00
- cmp r2, 0xF
- beq _08120C06
- b _08120C18
-_08120C00:
- cmp r2, 0x11
- beq _08120C12
- b _08120C18
-_08120C06:
- cmp r0, 3 @ SPECIES_VENUSAUR
- beq _08120C34
- b _08120C2A
-_08120C0C:
- cmp r0, 6 @ SPECIES_CHARIZARD
- beq _08120C34
- b _08120C2A
-_08120C12:
- cmp r0, 9 @ SPECIES_BLASTOISE
- beq _08120C34
- b _08120C2A
-_08120C18:
- ldr r1, _08120C30 @ =gMoveTutorMoveCompatibilityTable
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- asrs r0, r2
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08120C34
-_08120C2A:
- movs r0, 0
- b _08120C36
- .align 2, 0
-_08120C30: .4byte gMoveTutorMoveCompatibilityTable
-_08120C34:
- movs r0, 0x1
-_08120C36:
- pop {r1}
- bx r1
- thumb_func_end IsMonCompatibleWithMoveTutorMove
-
- thumb_func_start sub_8120C3C
-sub_8120C3C: @ 8120C3C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08120C60 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120C5C
- ldr r0, _08120C64 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120C68 @ =sub_8120C6C
- str r0, [r1]
-_08120C5C:
- pop {r0}
- bx r0
- .align 2, 0
-_08120C60: .4byte gPaletteFade
-_08120C64: .4byte gTasks
-_08120C68: .4byte sub_8120C6C
- thumb_func_end sub_8120C3C
-
- thumb_func_start sub_8120C6C
-sub_8120C6C: @ 8120C6C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08120C9C @ =0xffff1fff
- movs r1, 0
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x6
- bl BeginNormalPaletteFade
- ldr r1, _08120CA0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120CA4 @ =sub_8120CA8
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120C9C: .4byte 0xffff1fff
-_08120CA0: .4byte gTasks
-_08120CA4: .4byte sub_8120CA8
- thumb_func_end sub_8120C6C
-
- thumb_func_start sub_8120CA8
-sub_8120CA8: @ 8120CA8
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08120CCC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120CC8
- ldr r0, _08120CD0 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120CD4 @ =sub_8120CD8
- str r0, [r1]
-_08120CC8:
- pop {r0}
- bx r0
- .align 2, 0
-_08120CCC: .4byte gPaletteFade
-_08120CD0: .4byte gTasks
-_08120CD4: .4byte sub_8120CD8
- thumb_func_end sub_8120CA8
-
- thumb_func_start sub_8120CD8
-sub_8120CD8: @ 8120CD8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_81220D4
- ldr r2, _08120D00 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x8]
- ldr r0, _08120D04 @ =sub_8120D08
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120D00: .4byte gTasks
-_08120D04: .4byte sub_8120D08
- thumb_func_end sub_8120CD8
-
- thumb_func_start sub_8120D08
-sub_8120D08: @ 8120D08
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r4, r1, 3
- ldr r5, _08120D38 @ =gTasks+0x8
- adds r0, r4, r5
- ldrb r0, [r0]
- bl RunTextPrinters_CheckActive
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _08120D30
- adds r0, r5, 0
- subs r0, 0x8
- adds r0, r4, r0
- ldr r1, _08120D3C @ =sub_8120D40
- str r1, [r0]
-_08120D30:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120D38: .4byte gTasks+0x8
-_08120D3C: .4byte sub_8120D40
- thumb_func_end sub_8120D08
-
- thumb_func_start sub_8120D40
-sub_8120D40: @ 8120D40
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08120D70 @ =0xffff0008
- movs r1, 0
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0x6
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, _08120D74 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120D78 @ =sub_8120D7C
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120D70: .4byte 0xffff0008
-_08120D74: .4byte gTasks
-_08120D78: .4byte sub_8120D7C
- thumb_func_end sub_8120D40
-
- thumb_func_start sub_8120D7C
-sub_8120D7C: @ 8120D7C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08120DA0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120D9C
- ldr r0, _08120DA4 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120DA8 @ =sub_8120DAC
- str r0, [r1]
-_08120D9C:
- pop {r0}
- bx r0
- .align 2, 0
-_08120DA0: .4byte gPaletteFade
-_08120DA4: .4byte gTasks
-_08120DA8: .4byte sub_8120DAC
- thumb_func_end sub_8120D7C
-
- thumb_func_start sub_8120DAC
-sub_8120DAC: @ 8120DAC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r5, _08120DD4 @ =gTasks+0x8
- adds r0, r4, r5
- ldrb r0, [r0]
- ldr r1, _08120DD8 @ =gUnknown_8417494
- bl sub_8122084
- subs r5, 0x8
- adds r4, r5
- ldr r0, _08120DDC @ =sub_8120DE0
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120DD4: .4byte gTasks+0x8
-_08120DD8: .4byte gUnknown_8417494
-_08120DDC: .4byte sub_8120DE0
- thumb_func_end sub_8120DAC
-
- thumb_func_start sub_8120DE0
-sub_8120DE0: @ 8120DE0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r5, r1, 3
- ldr r6, _08120E14 @ =gTasks+0x8
- adds r4, r5, r6
- ldrb r0, [r4]
- bl RunTextPrinters_CheckActive
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _08120E0E
- ldrb r0, [r4]
- bl sub_8122110
- adds r0, r6, 0
- subs r0, 0x8
- adds r0, r5, r0
- ldr r1, _08120E18 @ =sub_8120E1C
- str r1, [r0]
-_08120E0E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08120E14: .4byte gTasks+0x8
-_08120E18: .4byte sub_8120E1C
- thumb_func_end sub_8120DE0
-
- thumb_func_start sub_8120E1C
-sub_8120E1C: @ 8120E1C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08120E4C @ =0x0000fff7
- movs r1, 0
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0x6
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, _08120E50 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120E54 @ =sub_8120E58
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120E4C: .4byte 0x0000fff7
-_08120E50: .4byte gTasks
-_08120E54: .4byte sub_8120E58
- thumb_func_end sub_8120E1C
-
- thumb_func_start sub_8120E58
-sub_8120E58: @ 8120E58
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08120E90 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120EAC
- movs r0, 0
- movs r1, 0x4F
- movs r2, 0xD0
- bl TextWindow_SetUserSelectedFrame
- movs r0, 0
- movs r1, 0x58
- movs r2, 0xF0
- bl TextWindow_SetStdFrame0_WithPal
- ldr r0, _08120E94 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0x3
- bne _08120E98
- movs r0, 0x5
- bl sub_8121D0C
- b _08120E9E
- .align 2, 0
-_08120E90: .4byte gPaletteFade
-_08120E94: .4byte gUnknown_203B0A0
-_08120E98:
- movs r0, 0
- bl sub_8121D0C
-_08120E9E:
- ldr r0, _08120EB4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120EB8 @ =sub_811FB28
- str r0, [r1]
-_08120EAC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120EB4: .4byte gTasks
-_08120EB8: .4byte sub_811FB28
- thumb_func_end sub_8120E58
-
- thumb_func_start sub_8120EBC
-sub_8120EBC: @ 8120EBC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08120ED8 @ =gTasks+0x8
- adds r3, r1, r0
- movs r2, 0
- strh r2, [r3]
- subs r0, 0x8
- adds r1, r0
- ldr r0, _08120EDC @ =sub_8120EE0
- str r0, [r1]
- bx lr
- .align 2, 0
-_08120ED8: .4byte gTasks+0x8
-_08120EDC: .4byte sub_8120EE0
- thumb_func_end sub_8120EBC
-
- thumb_func_start sub_8120EE0
-sub_8120EE0: @ 8120EE0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08120F1C @ =gTasks+0x8
- adds r6, r0, r1
- ldr r0, _08120F20 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120F68
- adds r0, r5, 0
- bl sub_8120F78
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08120F68
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0xA0
- beq _08120F38
- cmp r0, 0xA0
- bgt _08120F24
- cmp r0, 0x50
- beq _08120F2A
- b _08120F62
- .align 2, 0
-_08120F1C: .4byte gTasks+0x8
-_08120F20: .4byte gPaletteFade
-_08120F24:
- cmp r0, 0xF0
- beq _08120F44
- b _08120F62
-_08120F2A:
- ldr r0, _08120F34 @ =gUnknown_203B0A9
- movs r1, 0x2
- bl sub_811FF94
- b _08120F62
- .align 2, 0
-_08120F34: .4byte gUnknown_203B0A9
-_08120F38:
- movs r0, 0x5
- bl PlaySE
- bl sub_8122BD4
- b _08120F62
-_08120F44:
- ldr r4, _08120F70 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xE
- bl sub_8121CE4
- ldr r1, _08120F74 @ =gUnknown_845A618
- ldr r0, [r4]
- ldrb r0, [r0, 0xF]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- adds r0, r5, 0
- bl _call_via_r1
-_08120F62:
- ldrh r0, [r6]
- adds r0, 0x1
- strh r0, [r6]
-_08120F68:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08120F70: .4byte gUnknown_203B09C
-_08120F74: .4byte gUnknown_845A618
- thumb_func_end sub_8120EE0
-
- thumb_func_start sub_8120F78
-sub_8120F78: @ 8120F78
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08120F90 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08120F94
- movs r0, 0
- b _08120FA4
- .align 2, 0
-_08120F90: .4byte gMain
-_08120F94:
- ldr r0, _08120FA8 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _08120FAC @ =sub_8120FB0
- str r0, [r1, 0x4]
- adds r0, r2, 0
- bl sub_811FA78
- movs r0, 0x1
-_08120FA4:
- pop {r1}
- bx r1
- .align 2, 0
-_08120FA8: .4byte gUnknown_203B09C
-_08120FAC: .4byte sub_8120FB0
- thumb_func_end sub_8120F78
-
- thumb_func_start sub_8120FB0
-sub_8120FB0: @ 8120FB0
- push {lr}
- bl FreeRestoreBattleData
- bl LoadPlayerParty
- bl SetTeachyTvControllerModeToResume
- ldr r0, _08120FC8 @ =CB2_ReturnToTeachyTV
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08120FC8: .4byte CB2_ReturnToTeachyTV
- thumb_func_end sub_8120FB0
-
- thumb_func_start sub_8120FCC
-sub_8120FCC: @ 8120FCC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08120FE8 @ =gTasks+0x8
- adds r3, r1, r0
- movs r2, 0
- strh r2, [r3]
- subs r0, 0x8
- adds r1, r0
- ldr r0, _08120FEC @ =sub_8120FF0
- str r0, [r1]
- bx lr
- .align 2, 0
-_08120FE8: .4byte gTasks+0x8
-_08120FEC: .4byte sub_8120FF0
- thumb_func_end sub_8120FCC
-
- thumb_func_start sub_8120FF0
-sub_8120FF0: @ 8120FF0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r5, r2, 0
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _0812102C @ =gTasks+0x8
- adds r4, r0, r1
- ldr r0, _08121030 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08121048
- adds r0, r2, 0
- bl sub_8120F78
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08121048
- ldrh r1, [r4]
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0x50
- beq _08121034
- adds r0, r1, 0x1
- strh r0, [r4]
- b _08121048
- .align 2, 0
-_0812102C: .4byte gTasks+0x8
-_08121030: .4byte gPaletteFade
-_08121034:
- ldr r0, _08121050 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _08121054 @ =sub_8128184
- str r0, [r1, 0x4]
- ldr r0, _08121058 @ =gUnknown_3005E98
- ldr r1, _0812105C @ =sub_81255BC
- ldr r2, [r0]
- adds r0, r5, 0
- bl _call_via_r2
-_08121048:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121050: .4byte gUnknown_203B09C
-_08121054: .4byte sub_8128184
-_08121058: .4byte gUnknown_3005E98
-_0812105C: .4byte sub_81255BC
- thumb_func_end sub_8120FF0
-
- thumb_func_start sub_8121060
-sub_8121060: @ 8121060
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0x1
- beq _08121088
- cmp r0, 0x1
- bgt _08121076
- cmp r0, 0
- beq _0812107C
- b _081210A0
-_08121076:
- cmp r1, 0x2
- beq _08121094
- b _081210A0
-_0812107C:
- ldr r0, _08121084 @ =gUnknown_845A010
- bl InitWindows
- b _081210A6
- .align 2, 0
-_08121084: .4byte gUnknown_845A010
-_08121088:
- ldr r0, _08121090 @ =gUnknown_845A050
- bl InitWindows
- b _081210A6
- .align 2, 0
-_08121090: .4byte gUnknown_845A050
-_08121094:
- ldr r0, _0812109C @ =gUnknown_845A090
- bl InitWindows
- b _081210A6
- .align 2, 0
-_0812109C: .4byte gUnknown_845A090
-_081210A0:
- ldr r0, _081210F4 @ =gUnknown_845A0D0
- bl InitWindows
-_081210A6:
- bl DeactivateAllTextPrinters
- movs r4, 0
-_081210AC:
- adds r0, r4, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _081210AC
- movs r0, 0
- movs r1, 0x4F
- movs r2, 0xD0
- bl TextWindow_SetUserSelectedFrame
- movs r0, 0
- movs r1, 0x58
- movs r2, 0xF0
- bl TextWindow_SetStdFrame0_WithPal
- movs r0, 0x2
- bl stdpal_get
- movs r1, 0xC0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0
- bl stdpal_get
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081210F4: .4byte gUnknown_845A0D0
- thumb_func_end sub_8121060
-
- thumb_func_start sub_81210F8
-sub_81210F8: @ 81210F8
- push {r4-r6,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08121174 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0812110E
- b _08121238
-_0812110E:
- cmp r2, 0x1
- bne _08121188
- ldr r0, _08121178 @ =gUnknown_845A118
- bl AddWindow
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r5, _0812117C @ =gUnknown_84169D5
- movs r0, 0
- adds r1, r5, 0
- movs r2, 0
- bl GetStringWidth
- movs r2, 0x30
- subs r2, r0
- lsrs r2, 1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- ldr r0, _08121180 @ =gUnknown_8459FFC
- str r0, [sp, 0x8]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0xC]
- str r5, [sp, 0x10]
- adds r0, r4, 0
- movs r1, 0
- movs r3, 0x1
- bl AddTextPrinterParameterized4
- adds r0, r4, 0
- bl PutWindowTilemap
- adds r0, r4, 0
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r0, _08121184 @ =gUnknown_845A110
- bl AddWindow
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- b _08121194
- .align 2, 0
-_08121174: .4byte gUnknown_203B0A0
-_08121178: .4byte gUnknown_845A118
-_0812117C: .4byte gUnknown_84169D5
-_08121180: .4byte gUnknown_8459FFC
-_08121184: .4byte gUnknown_845A110
-_08121188:
- ldr r0, _081211E0 @ =gUnknown_845A108
- bl AddWindow
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0x3
-_08121194:
- adds r0, r6, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r0, _081211E4 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0xA
- beq _081211F0
- ldr r4, _081211E8 @ =gFameCheckerText_Cancel
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetStringWidth
- movs r1, 0x30
- subs r1, r0
- lsrs r0, r1, 31
- adds r1, r0
- asrs r1, 1
- adds r1, r5, r1
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _081211EC @ =gUnknown_8459FFC
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0
- adds r2, r5, 0
- movs r3, 0x1
- bl AddTextPrinterParameterized3
- b _08121224
- .align 2, 0
-_081211E0: .4byte gUnknown_845A108
-_081211E4: .4byte gUnknown_203B0A0
-_081211E8: .4byte gFameCheckerText_Cancel
-_081211EC: .4byte gUnknown_8459FFC
-_081211F0:
- ldr r4, _08121240 @ =gOtherText_Exit
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetStringWidth
- movs r1, 0x30
- subs r1, r0
- lsrs r0, r1, 31
- adds r1, r0
- asrs r1, 1
- adds r1, r5, r1
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _08121244 @ =gUnknown_8459FFC
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0
- adds r2, r5, 0
- movs r3, 0x1
- bl AddTextPrinterParameterized3
-_08121224:
- adds r0, r6, 0
- bl PutWindowTilemap
- adds r0, r6, 0
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
-_08121238:
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121240: .4byte gOtherText_Exit
-_08121244: .4byte gUnknown_8459FFC
- thumb_func_end sub_81210F8
-
- thumb_func_start sub_8121248
-sub_8121248: @ 8121248
- lsls r0, 24
- ldr r1, _08121258 @ =gUnknown_203B09C
- lsrs r0, 23
- adds r0, 0x18
- ldr r1, [r1]
- adds r1, r0
- adds r0, r1, 0
- bx lr
- .align 2, 0
-_08121258: .4byte gUnknown_203B09C
- thumb_func_end sub_8121248
-
- thumb_func_start sub_812125C
-sub_812125C: @ 812125C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- str r1, [sp, 0xC]
- ldr r1, [sp, 0x4C]
- ldr r4, [sp, 0x50]
- ldr r5, [sp, 0x54]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x10]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x14]
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp, 0x18]
- lsls r4, 24
- lsrs r6, r4, 24
- lsls r5, 24
- lsrs r5, 24
- mov r10, r5
- mov r0, r10
- muls r0, r6
- lsls r0, 5
- bl AllocZeroed
- mov r9, r0
- cmp r0, 0
- beq _0812132A
- movs r5, 0
- ldr r0, [sp, 0x14]
- lsls r0, 19
- str r0, [sp, 0x1C]
- ldr r1, [sp, 0x18]
- lsls r1, 19
- str r1, [sp, 0x20]
- lsls r2, r6, 19
- str r2, [sp, 0x24]
- mov r0, r10
- lsls r0, 19
- str r0, [sp, 0x28]
- cmp r5, r10
- bcs _08121308
-_081212BE:
- movs r4, 0
- adds r1, r5, 0x1
- mov r8, r1
- cmp r4, r6
- bcs _081212FE
- ldr r2, [sp, 0x18]
- adds r0, r2, r5
- ldr r2, [sp, 0x10]
- adds r1, r0, 0
- muls r1, r2
- adds r7, r1, 0
-_081212D4:
- ldr r1, [sp, 0x14]
- adds r0, r1, r4
- adds r0, r7
- ldr r2, [sp, 0xC]
- adds r0, r2, r0
- ldrb r0, [r0]
- bl sub_811F620
- adds r1, r5, 0
- muls r1, r6
- adds r1, r4
- lsls r1, 5
- add r1, r9
- movs r2, 0x10
- bl CpuSet
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r6
- bcc _081212D4
-_081212FE:
- mov r1, r8
- lsls r0, r1, 24
- lsrs r5, r0, 24
- cmp r5, r10
- bcc _081212BE
-_08121308:
- ldr r0, [sp, 0x1C]
- lsrs r2, r0, 16
- ldr r1, [sp, 0x20]
- lsrs r3, r1, 16
- ldr r1, [sp, 0x24]
- lsrs r0, r1, 16
- str r0, [sp]
- ldr r1, [sp, 0x28]
- lsrs r0, r1, 16
- str r0, [sp, 0x4]
- ldr r0, [sp, 0x8]
- mov r1, r9
- bl BlitBitmapToWindow
- mov r0, r9
- bl Free
-_0812132A:
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_812125C
-
- thumb_func_start sub_812133C
-sub_812133C: @ 812133C
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r4, [sp, 0x1C]
- ldr r5, [sp, 0x20]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- cmp r3, 0
- bne _08121368
- cmp r4, 0
- bne _08121368
- movs r3, 0xA
- movs r4, 0x7
-_08121368:
- cmp r5, 0
- bne _08121384
- ldr r1, _08121380 @ =gUnknown_845A180
- str r2, [sp]
- str r3, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r2, 0xA
- adds r3, r6, 0
- bl sub_812125C
- b _08121394
- .align 2, 0
-_08121380: .4byte gUnknown_845A180
-_08121384:
- ldr r1, _0812139C @ =gUnknown_845A1C6
- str r2, [sp]
- str r3, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r2, 0xA
- adds r3, r6, 0
- bl sub_812125C
-_08121394:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812139C: .4byte gUnknown_845A1C6
- thumb_func_end sub_812133C
-
- thumb_func_start sub_81213A0
-sub_81213A0: @ 81213A0
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r4, [sp, 0x1C]
- ldr r5, [sp, 0x20]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- cmp r3, 0
- bne _081213CC
- cmp r4, 0
- bne _081213CC
- movs r3, 0x12
- movs r4, 0x3
-_081213CC:
- cmp r5, 0
- bne _081213E8
- ldr r1, _081213E4 @ =gUnknown_845A20C
- str r2, [sp]
- str r3, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r2, 0x12
- adds r3, r6, 0
- bl sub_812125C
- b _081213F8
- .align 2, 0
-_081213E4: .4byte gUnknown_845A20C
-_081213E8:
- ldr r1, _08121400 @ =gUnknown_845A242
- str r2, [sp]
- str r3, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r2, 0x12
- adds r3, r6, 0
- bl sub_812125C
-_081213F8:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121400: .4byte gUnknown_845A242
- thumb_func_end sub_81213A0
-
- thumb_func_start sub_8121404
-sub_8121404: @ 8121404
- push {lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08121428 @ =gUnknown_845A278
- movs r2, 0
- str r2, [sp]
- movs r2, 0x12
- str r2, [sp, 0x4]
- movs r2, 0x3
- str r2, [sp, 0x8]
- movs r2, 0x12
- movs r3, 0
- bl sub_812125C
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08121428: .4byte gUnknown_845A278
- thumb_func_end sub_8121404
-
- thumb_func_start sub_812142C
-sub_812142C: @ 812142C
- push {r4-r7,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- adds r5, r4, 0
- ldrb r0, [r0, 0x8]
- movs r1, 0x5
- bl GetWindowAttribute
- lsls r0, 28
- lsrs r6, r0, 24
- adds r7, r6, 0
- movs r0, 0x20
- ands r0, r4
- cmp r0, 0
- beq _081214A0
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0812145C
- ldr r5, _08121458 @ =gUnknown_845A2D4
- b _0812160A
- .align 2, 0
-_08121458: .4byte gUnknown_845A2D4
-_0812145C:
- ldr r5, _08121494 @ =gUnknown_845A2D4
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _08121498 @ =gUnknown_845A2B2
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl sub_8121248
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _0812149C @ =gUnknown_845A2E3
- b _0812163E
- .align 2, 0
-_08121494: .4byte gUnknown_845A2D4
-_08121498: .4byte gUnknown_845A2B2
-_0812149C: .4byte gUnknown_845A2E3
-_081214A0:
- movs r0, 0x10
- ands r0, r4
- cmp r0, 0
- beq _081214EC
- ldr r5, _081214E0 @ =gUnknown_845A2D4
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _081214E4 @ =gUnknown_845A2B2
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl sub_8121248
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _081214E8 @ =gUnknown_845A2E3
- b _0812163E
- .align 2, 0
-_081214E0: .4byte gUnknown_845A2D4
-_081214E4: .4byte gUnknown_845A2B2
-_081214E8: .4byte gUnknown_845A2E3
-_081214EC:
- movs r0, 0x4
- ands r0, r4
- cmp r0, 0
- beq _08121548
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _08121504
- ldr r5, _08121500 @ =gUnknown_845A2D4
- b _0812160A
- .align 2, 0
-_08121500: .4byte gUnknown_845A2D4
-_08121504:
- ldr r5, _0812153C @ =gUnknown_845A2D4
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _08121540 @ =gUnknown_845A2B2
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl sub_8121248
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _08121544 @ =gUnknown_845A2E3
- b _0812163E
- .align 2, 0
-_0812153C: .4byte gUnknown_845A2D4
-_08121540: .4byte gUnknown_845A2B2
-_08121544: .4byte gUnknown_845A2E3
-_08121548:
- movs r0, 0x2
- ands r0, r4
- cmp r0, 0
- beq _081215A4
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _08121560
- ldr r5, _0812155C @ =gUnknown_845A2D1
- b _0812160A
- .align 2, 0
-_0812155C: .4byte gUnknown_845A2D1
-_08121560:
- ldr r5, _08121598 @ =gUnknown_845A2C8
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _0812159C @ =gUnknown_845A2B2
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl sub_8121248
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _081215A0 @ =gUnknown_845A2DD
- b _0812163E
- .align 2, 0
-_08121598: .4byte gUnknown_845A2C8
-_0812159C: .4byte gUnknown_845A2B2
-_081215A0: .4byte gUnknown_845A2DD
-_081215A4:
- movs r0, 0x8
- ands r0, r4
- cmp r0, 0
- beq _08121600
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _081215BC
- ldr r5, _081215B8 @ =gUnknown_845A2CE
- b _0812160A
- .align 2, 0
-_081215B8: .4byte gUnknown_845A2CE
-_081215BC:
- ldr r5, _081215F4 @ =gUnknown_845A2C5
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _081215F8 @ =gUnknown_845A2B2
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl sub_8121248
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _081215FC @ =gUnknown_845A2DA
- b _0812163E
- .align 2, 0
-_081215F4: .4byte gUnknown_845A2C5
-_081215F8: .4byte gUnknown_845A2B2
-_081215FC: .4byte gUnknown_845A2DA
-_08121600:
- movs r0, 0x1
- ands r5, r0
- cmp r5, 0
- beq _08121684
- ldr r5, _08121674 @ =gUnknown_845A2CB
-_0812160A:
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _08121678 @ =gUnknown_845A2B2
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl sub_8121248
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _0812167C @ =gUnknown_845A2E0
-_0812163E:
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _08121680 @ =gUnknown_845A2B5
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl sub_8121248
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- b _081216EC
- .align 2, 0
-_08121674: .4byte gUnknown_845A2CB
-_08121678: .4byte gUnknown_845A2B2
-_0812167C: .4byte gUnknown_845A2E0
-_08121680: .4byte gUnknown_845A2B5
-_08121684:
- ldr r5, _081216F4 @ =gUnknown_845A2C2
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _081216F8 @ =gUnknown_845A2B2
- ldrb r1, [r4]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl sub_8121248
- ldrb r1, [r4, 0x2]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _081216FC @ =gUnknown_845A2D7
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _08121700 @ =gUnknown_845A2B5
- ldrb r1, [r4]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl sub_8121248
- ldrb r1, [r4, 0x2]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
-_081216EC:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081216F4: .4byte gUnknown_845A2C2
-_081216F8: .4byte gUnknown_845A2B2
-_081216FC: .4byte gUnknown_845A2D7
-_08121700: .4byte gUnknown_845A2B5
- thumb_func_end sub_812142C
-
- thumb_func_start sub_8121704
-sub_8121704: @ 8121704
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 24
- lsrs r2, 24
- ldrb r5, [r3]
- ldrb r3, [r3, 0x1]
- lsls r4, r2, 1
- adds r4, r2
- ldr r2, _08121734 @ =gUnknown_8459FFC
- adds r4, r2
- str r4, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0
- adds r2, r5, 0
- bl AddTextPrinterParameterized3
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121734: .4byte gUnknown_8459FFC
- thumb_func_end sub_8121704
-
- thumb_func_start sub_8121738
-sub_8121738: @ 8121738
- push {r4-r7,lr}
- sub sp, 0x14
- adds r7, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08121788
- cmp r4, 0x1
- bne _08121772
- ldr r5, [r6]
- ldrb r0, [r6, 0x8]
- ldrb r1, [r5, 0x4]
- lsrs r1, 3
- ldrb r2, [r5, 0x5]
- lsrs r2, 3
- ldrb r3, [r5, 0x6]
- lsrs r3, 3
- ldrb r4, [r5, 0x7]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_08121772:
- adds r0, r7, 0
- add r1, sp, 0x8
- bl GetMonNickname
- ldrb r0, [r6, 0x8]
- ldr r3, [r6]
- adds r3, 0x4
- add r1, sp, 0x8
- movs r2, 0
- bl sub_8121704
-_08121788:
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8121738
-
- thumb_func_start sub_8121790
-sub_8121790: @ 8121790
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r6, r0, 0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- mov r8, r4
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _081217FC
- adds r0, r6, 0
- bl sub_81208A4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _081217BE
- cmp r0, 0x6
- bne _081217FC
-_081217BE:
- cmp r4, 0
- beq _081217E4
- ldr r5, [r7]
- ldrb r0, [r7, 0x8]
- ldrb r1, [r5, 0x8]
- lsrs r1, 3
- ldrb r2, [r5, 0x9]
- lsrs r2, 3
- adds r2, 0x1
- ldrb r3, [r5, 0xA]
- lsrs r3, 3
- ldrb r4, [r5, 0xB]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_081217E4:
- mov r0, r8
- cmp r0, 0x2
- beq _081217FC
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- adds r1, r7, 0
- bl sub_8121808
-_081217FC:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8121790
-
- thumb_func_start sub_8121808
-sub_8121808: @ 8121808
- push {r4-r6,lr}
- adds r2, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r5, _08121848 @ =gStringVar2
- adds r0, r5, 0
- adds r1, r2, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r4, _0812184C @ =gStringVar1
- ldr r1, _08121850 @ =gText_Lv
- adds r0, r4, 0
- bl StringCopy
- adds r0, r4, 0
- adds r1, r5, 0
- bl StringAppend
- ldrb r0, [r6, 0x8]
- ldr r3, [r6]
- adds r3, 0x8
- adds r1, r4, 0
- movs r2, 0
- bl sub_8121704
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121848: .4byte gStringVar2
-_0812184C: .4byte gStringVar1
-_08121850: .4byte gText_Lv
- thumb_func_end sub_8121808
-
- thumb_func_start sub_8121854
-sub_8121854: @ 8121854
- push {r4-r7,lr}
- sub sp, 0x14
- adds r6, r0, 0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0x1
- bne _08121886
- ldr r5, [r7]
- ldrb r0, [r7, 0x8]
- ldrb r1, [r5, 0xC]
- lsrs r1, 3
- ldrb r2, [r5, 0xD]
- lsrs r2, 3
- adds r2, 0x1
- ldrb r3, [r5, 0xE]
- lsrs r3, 3
- ldrb r4, [r5, 0xF]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_08121886:
- adds r0, r6, 0
- add r1, sp, 0x8
- bl GetMonNickname
- adds r0, r6, 0
- bl GetMonGender
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- add r2, sp, 0x8
- adds r3, r7, 0
- bl sub_81218BC
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8121854
-
- thumb_func_start sub_81218BC
-sub_81218BC: @ 81218BC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r2
- adds r7, r3, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 16
- lsrs r4, r1, 16
- adds r5, r4, 0
- ldrb r0, [r7, 0x8]
- movs r1, 0x5
- bl GetWindowAttribute
- lsls r0, 28
- lsrs r6, r0, 24
- cmp r4, 0
- beq _08121982
- cmp r4, 0x20
- beq _081218EC
- cmp r4, 0x1D
- bne _08121900
-_081218EC:
- movs r0, 0xB
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0812190C @ =gSpeciesNames
- adds r1, r0
- mov r0, r9
- bl StringCompare
- cmp r0, 0
- beq _08121982
-_08121900:
- mov r0, r8
- cmp r0, 0
- beq _08121910
- cmp r0, 0xFE
- beq _08121950
- b _08121982
- .align 2, 0
-_0812190C: .4byte gSpeciesNames
-_08121910:
- ldr r5, _08121944 @ =gUnknown_845A2B8
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _08121948 @ =gUnknown_845A2AE
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r7, 0x8]
- ldr r1, _0812194C @ =gUnknown_841621F
- ldr r3, [r7]
- adds r3, 0xC
- movs r2, 0x2
- bl sub_8121704
- b _08121982
- .align 2, 0
-_08121944: .4byte gUnknown_845A2B8
-_08121948: .4byte gUnknown_845A2AE
-_0812194C: .4byte gUnknown_841621F
-_08121950:
- ldr r5, _08121990 @ =gUnknown_845A2BA
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _08121994 @ =gUnknown_845A2AE
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r7, 0x8]
- ldr r1, _08121998 @ =gUnknown_8416221
- ldr r3, [r7]
- adds r3, 0xC
- movs r2, 0x2
- bl sub_8121704
-_08121982:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08121990: .4byte gUnknown_845A2BA
-_08121994: .4byte gUnknown_845A2AE
-_08121998: .4byte gUnknown_8416221
- thumb_func_end sub_81218BC
-
- thumb_func_start sub_812199C
-sub_812199C: @ 812199C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r7, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- mov r8, r4
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _081219F6
- cmp r4, 0
- beq _081219DE
- ldr r5, [r6]
- ldrb r0, [r6, 0x8]
- ldrb r1, [r5, 0x10]
- lsrs r1, 3
- ldrb r2, [r5, 0x11]
- lsrs r2, 3
- adds r2, 0x1
- ldrb r3, [r5, 0x12]
- lsrs r3, 3
- ldrb r4, [r5, 0x13]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_081219DE:
- mov r0, r8
- cmp r0, 0x2
- beq _081219F6
- adds r0, r7, 0
- movs r1, 0x39
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl sub_8121A04
-_081219F6:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_812199C
-
- thumb_func_start sub_8121A04
-sub_8121A04: @ 8121A04
- push {r4,r5,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- lsls r2, 16
- lsrs r2, 16
- ldr r5, _08121A38 @ =gStringVar1
- adds r0, r5, 0
- adds r1, r2, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- movs r1, 0xBA
- strb r1, [r0]
- movs r1, 0xFF
- strb r1, [r0, 0x1]
- ldrb r0, [r4, 0x8]
- ldr r3, [r4]
- adds r3, 0x10
- adds r1, r5, 0
- movs r2, 0
- bl sub_8121704
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121A38: .4byte gStringVar1
- thumb_func_end sub_8121A04
-
- thumb_func_start sub_8121A3C
-sub_8121A3C: @ 8121A3C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r7, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- mov r8, r4
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08121A98
- cmp r4, 0
- beq _08121A80
- ldr r5, [r6]
- ldrb r0, [r6, 0x8]
- ldrb r1, [r5, 0x14]
- lsrs r1, 3
- adds r1, 0x1
- ldrb r2, [r5, 0x15]
- lsrs r2, 3
- adds r2, 0x1
- ldrb r3, [r5, 0x16]
- lsrs r3, 3
- ldrb r4, [r5, 0x17]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_08121A80:
- mov r0, r8
- cmp r0, 0x2
- beq _08121A98
- adds r0, r7, 0
- movs r1, 0x3A
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl sub_8121AA4
-_08121A98:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8121A3C
-
- thumb_func_start sub_8121AA4
-sub_8121AA4: @ 8121AA4
- push {r4-r6,lr}
- adds r2, r0, 0
- adds r6, r1, 0
- lsls r2, 16
- lsrs r2, 16
- ldr r5, _08121AE4 @ =gStringVar2
- adds r0, r5, 0
- adds r1, r2, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r4, _08121AE8 @ =gStringVar1
- ldr r1, _08121AEC @ =gUnknown_841620C
- adds r0, r4, 0
- bl StringCopy
- adds r0, r4, 0
- adds r1, r5, 0
- bl StringAppend
- ldrb r0, [r6, 0x8]
- ldr r3, [r6]
- adds r3, 0x14
- adds r1, r4, 0
- movs r2, 0
- bl sub_8121704
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121AE4: .4byte gStringVar2
-_08121AE8: .4byte gStringVar1
-_08121AEC: .4byte gUnknown_841620C
- thumb_func_end sub_8121AA4
-
- thumb_func_start sub_8121AF0
-sub_8121AF0: @ 8121AF0
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08121B24
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- adds r2, r6, 0
- bl sub_8121B2C
-_08121B24:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8121AF0
-
- thumb_func_start sub_8121B2C
-sub_8121B2C: @ 8121B2C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- adds r6, r2, 0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- ldrb r0, [r6, 0x8]
- movs r1, 0x5
- bl GetWindowAttribute
- lsls r0, 28
- lsrs r7, r0, 24
- mov r1, r8
- lsls r0, r1, 16
- asrs r0, 16
- mov r2, r9
- lsls r1, r2, 16
- asrs r1, 16
- bl GetHPBarLevel
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _08121B78
- cmp r0, 0x2
- blt _08121BA8
- cmp r0, 0x4
- bgt _08121BA8
- ldr r5, _08121B74 @ =gUnknown_845A2BC
- b _08121B7A
- .align 2, 0
-_08121B74: .4byte gUnknown_845A2BC
-_08121B78:
- ldr r5, _08121BA0 @ =gUnknown_845A2BE
-_08121B7A:
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _08121BA4 @ =gUnknown_845A2B0
- ldrb r1, [r4]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- b _08121BCC
- .align 2, 0
-_08121BA0: .4byte gUnknown_845A2BE
-_08121BA4: .4byte gUnknown_845A2B0
-_08121BA8:
- ldr r5, _08121C68 @ =gUnknown_845A2C0
- ldrb r0, [r5]
- bl sub_8121248
- ldr r4, _08121C6C @ =gUnknown_845A2B0
- ldrb r1, [r4]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl sub_8121248
- ldrb r1, [r4, 0x1]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
-_08121BCC:
- mov r1, r8
- lsls r0, r1, 16
- asrs r0, 16
- mov r2, r9
- lsls r1, r2, 16
- asrs r1, 16
- ldr r2, [r6]
- ldrb r2, [r2, 0x1A]
- bl GetScaledHPFraction
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r0, [r6, 0x8]
- ldr r4, _08121C6C @ =gUnknown_845A2B0
- ldrb r1, [r4, 0x1]
- ldr r3, [r6]
- ldrb r2, [r3, 0x18]
- ldrb r3, [r3, 0x19]
- str r5, [sp]
- movs r7, 0x1
- str r7, [sp, 0x4]
- bl FillWindowPixelRect
- ldrb r0, [r6, 0x8]
- ldrb r1, [r4]
- ldr r3, [r6]
- ldrb r2, [r3, 0x18]
- ldrb r3, [r3, 0x19]
- adds r3, 0x1
- str r5, [sp]
- movs r4, 0x2
- str r4, [sp, 0x4]
- bl FillWindowPixelRect
- ldr r1, [r6]
- ldrb r0, [r1, 0x1A]
- cmp r5, r0
- beq _08121C50
- ldrb r0, [r6, 0x8]
- ldrb r2, [r1, 0x18]
- adds r2, r5
- ldrb r3, [r1, 0x19]
- ldrb r1, [r1, 0x1A]
- subs r1, r5
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- str r7, [sp, 0x4]
- movs r1, 0xD
- bl FillWindowPixelRect
- ldrb r0, [r6, 0x8]
- ldr r1, [r6]
- ldrb r2, [r1, 0x18]
- adds r2, r5
- ldrb r3, [r1, 0x19]
- adds r3, 0x1
- ldrb r1, [r1, 0x1A]
- subs r1, r5
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- str r4, [sp, 0x4]
- movs r1, 0x2
- bl FillWindowPixelRect
-_08121C50:
- ldrb r0, [r6, 0x8]
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08121C68: .4byte gUnknown_845A2C0
-_08121C6C: .4byte gUnknown_845A2B0
- thumb_func_end sub_8121B2C
-
- thumb_func_start sub_8121C70
-sub_8121C70: @ 8121C70
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- adds r6, r1, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r2, 24
- lsrs r2, 24
- adds r7, r2, 0
- cmp r7, 0
- beq _08121CAA
- ldr r5, [r6]
- ldrb r0, [r6, 0x8]
- ldrb r1, [r5, 0x1C]
- lsrs r1, 3
- ldrb r2, [r5, 0x1D]
- lsrs r2, 3
- ldrb r3, [r5, 0x1E]
- lsrs r3, 3
- ldrb r4, [r5, 0x1F]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0x1
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_08121CAA:
- cmp r7, 0x2
- beq _08121CD0
- ldrb r0, [r6, 0x8]
- ldr r1, [r6]
- ldrb r2, [r1, 0x1C]
- ldrb r3, [r1, 0x1D]
- ldr r1, _08121CDC @ =gUnknown_8459FFC
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- ldr r4, _08121CE0 @ =gUnknown_845A354
- mov r5, r8
- lsls r1, r5, 2
- adds r1, r4
- ldr r1, [r1]
- str r1, [sp, 0x8]
- movs r1, 0x1
- bl AddTextPrinterParameterized3
-_08121CD0:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08121CDC: .4byte gUnknown_8459FFC
-_08121CE0: .4byte gUnknown_845A354
- thumb_func_end sub_8121C70
-
- thumb_func_start sub_8121CE4
-sub_8121CE4: @ 8121CE4
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _08121D04
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- ldrb r0, [r4]
- bl RemoveWindow
- movs r0, 0xFF
- strb r0, [r4]
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
-_08121D04:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8121CE4
-
- thumb_func_start sub_8121D0C
-sub_8121D0C: @ 8121D0C
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r0, _08121D3C @ =gUnknown_203B09C
- ldr r4, [r0]
- adds r5, r4, 0
- adds r5, 0xD
- ldrb r0, [r4, 0xD]
- cmp r0, 0xFF
- beq _08121D26
- adds r0, r5, 0
- bl sub_8121CE4
-_08121D26:
- cmp r6, 0x7F
- beq _08121DE8
- adds r0, r6, 0
- subs r0, 0x16
- cmp r0, 0x4
- bhi _08121D80
- lsls r0, 2
- ldr r1, _08121D40 @ =_08121D44
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08121D3C: .4byte gUnknown_203B09C
-_08121D40: .4byte _08121D44
- .align 2, 0
-_08121D44:
- .4byte _08121D58
- .4byte _08121D70
- .4byte _08121D70
- .4byte _08121D60
- .4byte _08121D68
-_08121D58:
- ldr r0, _08121D5C @ =gUnknown_845A128
- b _08121D72
- .align 2, 0
-_08121D5C: .4byte gUnknown_845A128
-_08121D60:
- ldr r0, _08121D64 @ =gUnknown_845A130
- b _08121D72
- .align 2, 0
-_08121D64: .4byte gUnknown_845A130
-_08121D68:
- ldr r0, _08121D6C @ =gUnknown_845A138
- b _08121D72
- .align 2, 0
-_08121D6C: .4byte gUnknown_845A138
-_08121D70:
- ldr r0, _08121D7C @ =gUnknown_845A140
-_08121D72:
- bl AddWindow
- strb r0, [r5]
- b _08121D88
- .align 2, 0
-_08121D7C: .4byte gUnknown_845A140
-_08121D80:
- ldr r0, _08121D9C @ =gUnknown_845A120
- bl AddWindow
- strb r0, [r4, 0xD]
-_08121D88:
- cmp r6, 0
- bne _08121DB0
- ldr r0, _08121DA0 @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _08121DA4
- movs r6, 0x2
- b _08121DB0
- .align 2, 0
-_08121D9C: .4byte gUnknown_845A120
-_08121DA0: .4byte gUnknown_203B09C
-_08121DA4:
- bl sub_8121DF8
- lsls r0, 24
- cmp r0, 0
- bne _08121DB0
- movs r6, 0x1
-_08121DB0:
- ldrb r0, [r5]
- movs r1, 0
- movs r2, 0x58
- movs r3, 0xF
- bl DrawStdFrameWithCustomTileAndPalette
- ldr r4, _08121DF0 @ =gStringVar4
- ldr r1, _08121DF4 @ =gUnknown_845A2E8
- lsls r0, r6, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldrb r0, [r5]
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x2
- adds r2, r4, 0
- movs r3, 0
- bl AddTextPrinterParameterized
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
-_08121DE8:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121DF0: .4byte gStringVar4
-_08121DF4: .4byte gUnknown_845A2E8
- thumb_func_end sub_8121D0C
-
- thumb_func_start sub_8121DF8
-sub_8121DF8: @ 8121DF8
- push {r4-r7,lr}
- ldr r7, _08121E0C @ =gPlayerParty
- movs r6, 0
- ldr r0, _08121E10 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0x1
- bne _08121E14
-_08121E06:
- movs r0, 0x1
- b _08121E56
- .align 2, 0
-_08121E0C: .4byte gPlayerParty
-_08121E10: .4byte gUnknown_203B0A0
-_08121E14:
- movs r5, 0
-_08121E16:
- movs r0, 0x64
- muls r0, r5
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08121E46
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _08121E40
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _08121E46
-_08121E40:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08121E46:
- cmp r6, 0x1
- bhi _08121E06
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08121E16
- movs r0, 0
-_08121E56:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8121DF8
-
- thumb_func_start sub_8121E5C
-sub_8121E5C: @ 8121E5C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x24
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- beq _08121EBC
- cmp r4, 0x1
- bgt _08121E78
- cmp r4, 0
- beq _08121E7E
- b _08121ECC
-_08121E78:
- cmp r4, 0x2
- beq _08121EC4
- b _08121ECC
-_08121E7E:
- ldr r0, _08121EB4 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldrb r0, [r1, 0x17]
- lsls r0, 1
- movs r3, 0x13
- subs r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0xA
- str r0, [sp]
- ldrb r0, [r1, 0x17]
- lsls r0, 25
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r0, 0xE
- str r0, [sp, 0x8]
- ldr r0, _08121EB8 @ =0x000002bf
- str r0, [sp, 0xC]
- add r0, sp, 0x14
- movs r1, 0x2
- movs r2, 0x13
- bl SetWindowTemplateFields
- ldr r0, [sp, 0x14]
- ldr r1, [sp, 0x18]
- b _08121ED2
- .align 2, 0
-_08121EB4: .4byte gUnknown_203B09C
-_08121EB8: .4byte 0x000002bf
-_08121EBC:
- ldr r0, _08121EC0 @ =gUnknown_845A148
- b _08121ECE
- .align 2, 0
-_08121EC0: .4byte gUnknown_845A148
-_08121EC4:
- ldr r0, _08121EC8 @ =gUnknown_845A150
- b _08121ECE
- .align 2, 0
-_08121EC8: .4byte gUnknown_845A150
-_08121ECC:
- ldr r0, _08121EF8 @ =gUnknown_845A158
-_08121ECE:
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
-_08121ED2:
- str r0, [sp, 0x1C]
- str r1, [sp, 0x20]
- add r0, sp, 0x1C
- bl AddWindow
- ldr r6, _08121EFC @ =gUnknown_203B09C
- ldr r1, [r6]
- strb r0, [r1, 0xC]
- ldr r0, [r6]
- ldrb r0, [r0, 0xC]
- movs r1, 0
- movs r2, 0x4F
- movs r3, 0xD
- bl DrawStdFrameWithCustomTileAndPalette
- cmp r4, 0x3
- bne _08121F00
- ldr r0, [r6]
- b _08121FA2
- .align 2, 0
-_08121EF8: .4byte gUnknown_845A158
-_08121EFC: .4byte gUnknown_203B09C
-_08121F00:
- movs r0, 0x2
- movs r1, 0
- bl GetMenuCursorDimensionByFont
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r0, 0x2
- movs r1, 0x2
- bl GetFontAttribute
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r5, 0
- ldr r0, [r6]
- ldrb r0, [r0, 0x17]
- cmp r5, r0
- bcs _08121F7A
- adds r7, r6, 0
- movs r6, 0
-_08121F2A:
- ldr r1, [r7]
- adds r0, r1, 0
- adds r0, 0xF
- adds r4, r0, r5
- ldrb r0, [r4]
- movs r2, 0x3
- cmp r0, 0x11
- bls _08121F3C
- movs r2, 0x4
-_08121F3C:
- ldrb r0, [r1, 0xC]
- lsls r3, r5, 4
- adds r3, 0x2
- lsls r3, 24
- lsrs r3, 24
- mov r1, r8
- str r1, [sp]
- str r6, [sp, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- ldr r2, _08121FB4 @ =gUnknown_8459FFC
- adds r1, r2
- str r1, [sp, 0x8]
- str r6, [sp, 0xC]
- ldr r2, _08121FB8 @ =gUnknown_845A618
- ldrb r1, [r4]
- lsls r1, 3
- adds r1, r2
- ldr r1, [r1]
- str r1, [sp, 0x10]
- movs r1, 0x2
- mov r2, r9
- bl AddTextPrinterParameterized4
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, [r7]
- ldrb r0, [r0, 0x17]
- cmp r5, r0
- bcc _08121F2A
-_08121F7A:
- ldr r4, _08121FBC @ =gUnknown_203B09C
- ldr r2, [r4]
- ldrb r0, [r2, 0xC]
- movs r1, 0x10
- str r1, [sp]
- ldrb r1, [r2, 0x17]
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- str r1, [sp, 0xC]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl Menu_InitCursorInternal
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r0, [r4]
-_08121FA2:
- ldrb r0, [r0, 0xC]
- add sp, 0x24
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08121FB4: .4byte gUnknown_8459FFC
-_08121FB8: .4byte gUnknown_845A618
-_08121FBC: .4byte gUnknown_203B09C
- thumb_func_end sub_8121E5C
-
- thumb_func_start sub_8121FC0
-sub_8121FC0: @ 8121FC0
- push {r4,lr}
- sub sp, 0x10
- adds r4, r0, 0
- movs r0, 0x6
- movs r1, 0
- movs r2, 0x4F
- movs r3, 0xD
- bl DrawStdFrameWithCustomTileAndPalette
- ldr r2, _08122008 @ =gTextFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- bl GetTextSpeedSetting
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0x6
- movs r1, 0x2
- adds r2, r4, 0
- bl AddTextPrinterParameterized2
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122008: .4byte gTextFlags
- thumb_func_end sub_8121FC0
-
- thumb_func_start sub_812200C
-sub_812200C: @ 812200C
- push {lr}
- sub sp, 0xC
- ldr r0, _08122030 @ =gUnknown_845A160
- movs r1, 0x4F
- str r1, [sp]
- movs r1, 0xD
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl CreateYesNoMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08122030: .4byte gUnknown_845A160
- thumb_func_end sub_812200C
-
- thumb_func_start sub_8122034
-sub_8122034: @ 8122034
- push {r4,lr}
- ldr r0, _0812205C @ =gUnknown_845A168
- bl AddWindow
- ldr r4, _08122060 @ =gUnknown_203B09C
- ldr r1, [r4]
- strb r0, [r1, 0xC]
- ldr r0, [r4]
- ldrb r0, [r0, 0xC]
- movs r1, 0
- movs r2, 0x4F
- movs r3, 0xD
- bl DrawStdFrameWithCustomTileAndPalette
- ldr r0, [r4]
- ldrb r0, [r0, 0xC]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0812205C: .4byte gUnknown_845A168
-_08122060: .4byte gUnknown_203B09C
- thumb_func_end sub_8122034
-
- thumb_func_start sub_8122064
-sub_8122064: @ 8122064
- push {r4,lr}
- ldr r4, _08122080 @ =gUnknown_203B09C
- ldr r0, [r4]
- ldrb r0, [r0, 0xC]
- bl ClearWindowTilemap
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122080: .4byte gUnknown_203B09C
- thumb_func_end sub_8122064
-
- thumb_func_start sub_8122084
-sub_8122084: @ 8122084
- push {r4,r5,lr}
- sub sp, 0x10
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _081220CC @ =gStringVar4
- adds r0, r5, 0
- bl StringExpandPlaceholders
- ldr r2, _081220D0 @ =gTextFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- bl GetTextSpeedSetting
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- adds r0, r4, 0
- movs r1, 0x4
- adds r2, r5, 0
- bl AddTextPrinterParameterized2
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081220CC: .4byte gStringVar4
-_081220D0: .4byte gTextFlags
- thumb_func_end sub_8122084
-
- thumb_func_start sub_81220D4
-sub_81220D4: @ 81220D4
- push {r4,lr}
- ldr r0, _08122108 @ =gUnknown_845A170
- bl AddWindow
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x4F
- movs r2, 0xE0
- bl TextWindow_LoadResourcesStdFrame0
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x4F
- movs r3, 0xE
- bl DrawDialogFrameWithCustomTileAndPalette
- ldr r1, _0812210C @ =gUnknown_8417457
- adds r0, r4, 0
- bl sub_8122084
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08122108: .4byte gUnknown_845A170
-_0812210C: .4byte gUnknown_8417457
- thumb_func_end sub_81220D4
-
- thumb_func_start sub_8122110
-sub_8122110: @ 8122110
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl ClearWindowTilemap
- adds r0, r4, 0
- movs r1, 0
- bl ClearDialogWindowAndFrameToTransparent
- adds r0, r4, 0
- bl RemoveWindow
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8122110
-
- thumb_func_start sub_8122138
-sub_8122138: @ 8122138
- push {r4,r5,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r0, _08122168 @ =gUnknown_203B09C
- ldr r4, [r0]
- cmp r5, 0x11
- bhi _0812216C
- ldrb r0, [r4, 0xE]
- cmp r0, 0xFF
- beq _081221C0
- bl ClearWindowTilemap
- ldrb r0, [r4, 0xE]
- bl RemoveWindow
- movs r0, 0xFF
- strb r0, [r4, 0xE]
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- b _081221C0
- .align 2, 0
-_08122168: .4byte gUnknown_203B09C
-_0812216C:
- ldrb r0, [r4, 0xE]
- cmp r0, 0xFF
- bne _0812217A
- ldr r0, _081221C8 @ =gUnknown_845A178
- bl AddWindow
- strb r0, [r4, 0xE]
-_0812217A:
- ldrb r0, [r4, 0xE]
- bl sub_8112F18
- movs r0, 0x2
- movs r1, 0x2
- bl GetFontAttribute
- lsls r0, 24
- lsrs r0, 24
- ldrb r2, [r4, 0xE]
- str r0, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- ldr r0, _081221CC @ =gUnknown_845A00B
- str r0, [sp, 0x8]
- str r1, [sp, 0xC]
- ldr r1, _081221D0 @ =gUnknown_845A37C
- adds r0, r5, 0
- subs r0, 0x12
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [sp, 0x10]
- adds r0, r2, 0
- movs r1, 0x2
- movs r2, 0x3
- movs r3, 0x6
- bl AddTextPrinterParameterized4
- ldrb r0, [r4, 0xE]
- bl PutWindowTilemap
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
-_081221C0:
- add sp, 0x14
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081221C8: .4byte gUnknown_845A178
-_081221CC: .4byte gUnknown_845A00B
-_081221D0: .4byte gUnknown_845A37C
- thumb_func_end sub_8122138
-
- thumb_func_start party_menu_icon_anim
-party_menu_icon_anim: @ 81221D4
- push {r4-r7,lr}
- sub sp, 0x4
- adds r5, r0, 0
- adds r7, r1, 0
- adds r4, r2, 0
- movs r6, 0x1
- bl IsMultiBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0812220A
- ldr r0, _08122240 @ =gMain
- ldr r1, _08122244 @ =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0812220A
- ldr r0, _08122248 @ =gUnknown_845A59C
- adds r0, r4, r0
- ldrb r1, [r0]
- eors r1, r6
- negs r0, r1
- orrs r0, r1
- lsrs r6, r0, 31
-_0812220A:
- adds r0, r5, 0
- movs r1, 0x41
- 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
- str r6, [sp]
- adds r0, r4, 0
- adds r2, r7, 0
- movs r3, 0x1
- bl party_menu_link_mon_icon_anim
- ldrb r0, [r7, 0x9]
- adds r1, r5, 0
- bl sub_8122358
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122240: .4byte gMain
-_08122244: .4byte 0x00000439
-_08122248: .4byte gUnknown_845A59C
- thumb_func_end party_menu_icon_anim
-
- thumb_func_start party_menu_link_mon_icon_anim
-party_menu_link_mon_icon_anim: @ 812224C
- push {r4-r7,lr}
- sub sp, 0xC
- adds r6, r1, 0
- adds r4, r2, 0
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r3, 24
- lsrs r7, r3, 24
- cmp r5, 0
- beq _0812229A
- ldr r1, _081222A4 @ =SpriteCB_MonIcon
- ldr r0, [r4, 0x4]
- ldrb r2, [r0]
- ldrb r3, [r0, 0x1]
- movs r0, 0x4
- str r0, [sp]
- str r6, [sp, 0x4]
- ldr r0, [sp, 0x20]
- str r0, [sp, 0x8]
- adds r0, r5, 0
- bl CreateMonIcon
- strb r0, [r4, 0x9]
- ldr r2, _081222A8 @ =gSprites
- ldrb r0, [r4, 0x9]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0x3
- adds r2, r7, 0
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x5]
-_0812229A:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081222A4: .4byte SpriteCB_MonIcon
-_081222A8: .4byte gSprites
- thumb_func_end party_menu_link_mon_icon_anim
-
- thumb_func_start sub_81222AC
-sub_81222AC: @ 81222AC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- adds r0, r1, 0
- adds r1, r2, 0
- bl GetHPBarLevel
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _0812230C
- cmp r0, 0x2
- bgt _081222D4
- cmp r0, 0x1
- beq _08122324
- b _0812233C
-_081222D4:
- cmp r0, 0x3
- beq _081222F4
- cmp r0, 0x4
- bne _0812233C
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _081222F0 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl MonIcon_SetAnim
- b _0812234C
- .align 2, 0
-_081222F0: .4byte gSprites
-_081222F4:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08122308 @ =gSprites
- adds r0, r1
- movs r1, 0x1
- bl MonIcon_SetAnim
- b _0812234C
- .align 2, 0
-_08122308: .4byte gSprites
-_0812230C:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08122320 @ =gSprites
- adds r0, r1
- movs r1, 0x2
- bl MonIcon_SetAnim
- b _0812234C
- .align 2, 0
-_08122320: .4byte gSprites
-_08122324:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08122338 @ =gSprites
- adds r0, r1
- movs r1, 0x3
- bl MonIcon_SetAnim
- b _0812234C
- .align 2, 0
-_08122338: .4byte gSprites
-_0812233C:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08122354 @ =gSprites
- adds r0, r1
- movs r1, 0x4
- bl MonIcon_SetAnim
-_0812234C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122354: .4byte gSprites
- thumb_func_end sub_81222AC
-
- thumb_func_start sub_8122358
-sub_8122358: @ 8122358
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r6, 0
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_81222AC
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8122358
-
- thumb_func_start sub_812238C
-sub_812238C: @ 812238C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- ldr r5, _081223BC @ =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r6, r0, 2
- adds r2, r6, r5
- movs r7, 0
- movs r3, 0
- strh r3, [r2, 0x2E]
- mov r12, r5
- cmp r1, 0
- bne _081223E4
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- cmp r0, 0x10
- bne _081223C4
- strh r3, [r2, 0x24]
- ldr r0, _081223C0 @ =0x0000fffc
- strh r0, [r2, 0x26]
- b _081223CA
- .align 2, 0
-_081223BC: .4byte gSprites
-_081223C0: .4byte 0x0000fffc
-_081223C4:
- ldr r0, _081223DC @ =0x0000fffc
- strh r0, [r2, 0x24]
- strh r3, [r2, 0x26]
-_081223CA:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- mov r1, r12
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _081223E0 @ =sub_8122428
- b _081223F0
- .align 2, 0
-_081223DC: .4byte 0x0000fffc
-_081223E0: .4byte sub_8122428
-_081223E4:
- strh r3, [r2, 0x24]
- strh r3, [r2, 0x26]
- adds r0, r5, 0
- adds r0, 0x1C
- adds r0, r6, r0
- ldr r1, _081223F8 @ =sub_81223FC
-_081223F0:
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081223F8: .4byte sub_81223FC
- thumb_func_end sub_812238C
-
- thumb_func_start sub_81223FC
-sub_81223FC: @ 81223FC
- push {r4,lr}
- adds r4, r0, 0
- bl UpdateMonIconFrame
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08122422
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08122420
- ldr r0, _0812241C @ =0x0000fffd
- strh r0, [r4, 0x26]
- b _08122422
- .align 2, 0
-_0812241C: .4byte 0x0000fffd
-_08122420:
- strh r1, [r4, 0x26]
-_08122422:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81223FC
-
- thumb_func_start sub_8122428
-sub_8122428: @ 8122428
- push {lr}
- bl UpdateMonIconFrame
- pop {r0}
- bx r0
- thumb_func_end sub_8122428
-
- thumb_func_start party_menu_held_item_object
-party_menu_held_item_object: @ 8122434
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0812245C
- ldr r0, _08122464 @ =gUnknown_845A43C
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x3]
- movs r3, 0
- bl CreateSprite
- strb r0, [r4, 0xA]
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_81224B4
-_0812245C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08122464: .4byte gUnknown_845A43C
- thumb_func_end party_menu_held_item_object
-
- thumb_func_start party_menu_link_mon_held_item_object
-party_menu_link_mon_held_item_object: @ 8122468
- push {r4,r5,lr}
- adds r4, r2, 0
- lsls r0, 16
- lsls r1, 16
- lsrs r5, r1, 16
- cmp r0, 0
- beq _081224A4
- ldr r0, _081224AC @ =gUnknown_845A43C
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x3]
- movs r3, 0
- bl CreateSprite
- strb r0, [r4, 0xA]
- ldr r2, _081224B0 @ =gSprites
- ldrb r0, [r4, 0xA]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x5]
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_81224D0
-_081224A4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081224AC: .4byte gUnknown_845A43C
-_081224B0: .4byte gSprites
- thumb_func_end party_menu_link_mon_held_item_object
-
- thumb_func_start sub_81224B4
-sub_81224B4: @ 81224B4
- push {r4,lr}
- adds r4, r1, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- bl sub_81224D0
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81224B4
-
- thumb_func_start sub_81224D0
-sub_81224D0: @ 81224D0
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _081224F8
- ldr r2, _081224F4 @ =gSprites
- ldrb r1, [r4, 0xA]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- b _08122544
- .align 2, 0
-_081224F4: .4byte gSprites
-_081224F8:
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0812251C
- ldrb r1, [r4, 0xA]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08122518 @ =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAnim
- b _0812252E
- .align 2, 0
-_08122518: .4byte gSprites
-_0812251C:
- ldrb r1, [r4, 0xA]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812254C @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
-_0812252E:
- ldr r2, _0812254C @ =gSprites
- ldrb r1, [r4, 0xA]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
-_08122544:
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812254C: .4byte gSprites
- thumb_func_end sub_81224D0
-
- thumb_func_start LoadHeldItemIcons
-LoadHeldItemIcons: @ 8122550
- push {lr}
- ldr r0, _08122564 @ =gUnknown_845A42C
- bl LoadSpriteSheet
- ldr r0, _08122568 @ =gUnknown_845A434
- bl LoadSpritePalette
- pop {r0}
- bx r0
- .align 2, 0
-_08122564: .4byte gUnknown_845A42C
-_08122568: .4byte gUnknown_845A434
- thumb_func_end LoadHeldItemIcons
-
- thumb_func_start sub_812256C
-sub_812256C: @ 812256C
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0
- beq _08122580
- cmp r2, 0x1
- beq _081225C8
- b _08122604
-_08122580:
- movs r5, 0
- ldrb r0, [r6]
- cmp r5, r0
- bcs _08122604
-_08122588:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _081225C4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _081225B4
- adds r0, r7, r5
- ldrb r4, [r0]
- adds r0, r1, 0
- bl ItemIsMail
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8122610
-_081225B4:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldrb r0, [r6]
- cmp r5, r0
- bcc _08122588
- b _08122604
- .align 2, 0
-_081225C4: .4byte gPlayerParty
-_081225C8:
- movs r5, 0
- b _081225FE
-_081225CC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0812260C @ =gEnemyParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _081225F8
- adds r0, r5, r7
- ldrb r4, [r0, 0x6]
- adds r0, r1, 0
- bl ItemIsMail
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8122610
-_081225F8:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
-_081225FE:
- ldrb r0, [r6, 0x1]
- cmp r5, r0
- bcc _081225CC
-_08122604:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812260C: .4byte gEnemyParty
- thumb_func_end sub_812256C
-
- thumb_func_start sub_8122610
-sub_8122610: @ 8122610
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- adds r6, r0, 0
- mov r9, r1
- lsls r6, 24
- lsrs r6, 24
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, _08122688 @ =gSprites
- mov r8, r0
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- add r0, r8
- adds r0, 0x43
- ldrb r3, [r0]
- ldr r0, _0812268C @ =gUnknown_845A43C
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- movs r1, 0xFA
- movs r2, 0xAA
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- mov r0, r8
- adds r5, r4, r0
- movs r0, 0x4
- strh r0, [r5, 0x24]
- movs r0, 0xA
- strh r0, [r5, 0x26]
- movs r0, 0x1C
- add r8, r0
- add r4, r8
- ldr r0, _08122690 @ =sub_8122694
- str r0, [r4]
- strh r6, [r5, 0x3C]
- adds r0, r5, 0
- mov r1, r9
- bl StartSpriteAnim
- ldr r1, [r4]
- adds r0, r5, 0
- bl _call_via_r1
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08122688: .4byte gSprites
-_0812268C: .4byte gUnknown_845A43C
-_08122690: .4byte sub_8122694
- thumb_func_end sub_8122610
-
- thumb_func_start sub_8122694
-sub_8122694: @ 8122694
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x3C]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _081226C4 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r2
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _081226C8
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _081226E6
- .align 2, 0
-_081226C4: .4byte gSprites
-_081226C8:
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldrh r0, [r2, 0x24]
- ldrh r1, [r2, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r2, 0x26]
- ldrh r2, [r2, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
-_081226E6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8122694
-
- thumb_func_start party_menu_pokeball_object
-party_menu_pokeball_object: @ 81226EC
- push {r4,lr}
- adds r4, r1, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0812270A
- ldr r0, _08122710 @ =gUnknown_845A484
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x6]
- ldrb r2, [r2, 0x7]
- movs r3, 0x8
- bl CreateSprite
- strb r0, [r4, 0xB]
-_0812270A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122710: .4byte gUnknown_845A484
- thumb_func_end party_menu_pokeball_object
-
- thumb_func_start party_menu_link_mon_pokeball_object
-party_menu_link_mon_pokeball_object: @ 8122714
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 16
- cmp r0, 0
- beq _08122744
- ldr r0, _0812274C @ =gUnknown_845A484
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x6]
- ldrb r2, [r2, 0x7]
- movs r3, 0x8
- bl CreateSprite
- strb r0, [r4, 0xB]
- ldr r2, _08122750 @ =gSprites
- ldrb r0, [r4, 0xB]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x5]
-_08122744:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812274C: .4byte gUnknown_845A484
-_08122750: .4byte gSprites
- thumb_func_end party_menu_link_mon_pokeball_object
-
- thumb_func_start sub_8122754
-sub_8122754: @ 8122754
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- lsls r3, 24
- lsrs r3, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _0812278C @ =gUnknown_845A484
- adds r1, r3, 0
- movs r3, 0x8
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08122790 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r3, [r1, 0x5]
- movs r2, 0xD
- negs r2, r2
- ands r2, r3
- movs r3, 0x8
- orrs r2, r3
- strb r2, [r1, 0x5]
- pop {r1}
- bx r1
- .align 2, 0
-_0812278C: .4byte gUnknown_845A484
-_08122790: .4byte gSprites
- thumb_func_end sub_8122754
-
- thumb_func_start sub_8122794
-sub_8122794: @ 8122794
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- lsls r3, 24
- lsrs r3, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _081227B4 @ =gUnknown_845A4F4
- adds r1, r3, 0
- movs r3, 0x8
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_081227B4: .4byte gUnknown_845A4F4
- thumb_func_end sub_8122794
-
- thumb_func_start sub_81227B8
-sub_81227B8: @ 81227B8
- push {lr}
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- ldr r2, _081227D8 @ =gSprites
- adds r0, r2
- bl StartSpriteAnim
- pop {r0}
- bx r0
- .align 2, 0
-_081227D8: .4byte gSprites
- thumb_func_end sub_81227B8
-
- thumb_func_start sub_81227DC
-sub_81227DC: @ 81227DC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- cmp r6, 0
- bne _08122820
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0812281C @ =gSprites
- mov r8, r0
- add r4, r8
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- lsls r5, r7, 4
- adds r5, r7
- lsls r5, 2
- add r5, r8
- adds r0, r5, 0
- movs r1, 0x4
- bl StartSpriteAnim
- strh r6, [r4, 0x26]
- strh r6, [r5, 0x26]
- b _0812284C
- .align 2, 0
-_0812281C: .4byte gSprites
-_08122820:
- lsls r5, r0, 4
- adds r5, r0
- lsls r5, 2
- ldr r0, _08122858 @ =gSprites
- mov r8, r0
- add r5, r8
- adds r0, r5, 0
- movs r1, 0x3
- bl StartSpriteAnim
- lsls r4, r7, 4
- adds r4, r7
- lsls r4, 2
- add r4, r8
- adds r0, r4, 0
- movs r1, 0x5
- bl StartSpriteAnim
- ldr r0, _0812285C @ =0x0000fffc
- strh r0, [r5, 0x26]
- movs r0, 0x4
- strh r0, [r4, 0x26]
-_0812284C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122858: .4byte gSprites
-_0812285C: .4byte 0x0000fffc
- thumb_func_end sub_81227DC
-
- thumb_func_start sub_8122860
-sub_8122860: @ 8122860
- push {lr}
- ldr r0, _08122878 @ =gUnknown_845A474
- bl LoadCompressedSpriteSheet
- ldr r0, _0812287C @ =gUnknown_845A4EC
- bl LoadCompressedSpriteSheet
- ldr r0, _08122880 @ =gUnknown_845A47C
- bl LoadCompressedSpritePalette
- pop {r0}
- bx r0
- .align 2, 0
-_08122878: .4byte gUnknown_845A474
-_0812287C: .4byte gUnknown_845A4EC
-_08122880: .4byte gUnknown_845A47C
- thumb_func_end sub_8122860
-
- thumb_func_start party_menu_status_condition_object
-party_menu_status_condition_object: @ 8122884
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _081228AC
- ldr r0, _081228B4 @ =gUnknown_845A584
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x4]
- ldrb r2, [r2, 0x5]
- movs r3, 0
- bl CreateSprite
- strb r0, [r4, 0xC]
- adds r0, r5, 0
- adds r1, r4, 0
- bl party_menu_get_status_condition_and_update_object
-_081228AC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081228B4: .4byte gUnknown_845A584
- thumb_func_end party_menu_status_condition_object
-
- thumb_func_start party_menu_link_mon_status_condition_object
-party_menu_link_mon_status_condition_object: @ 81228B8
- push {r4,r5,lr}
- adds r4, r2, 0
- lsls r0, 16
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r0, 0
- beq _081228F4
- ldr r0, _081228FC @ =gUnknown_845A584
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x4]
- ldrb r2, [r2, 0x5]
- movs r3, 0
- bl CreateSprite
- strb r0, [r4, 0xC]
- adds r0, r5, 0
- adds r1, r4, 0
- bl party_menu_update_status_condition_object
- ldr r2, _08122900 @ =gSprites
- ldrb r0, [r4, 0xC]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x5]
-_081228F4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081228FC: .4byte gUnknown_845A584
-_08122900: .4byte gSprites
- thumb_func_end party_menu_link_mon_status_condition_object
-
- thumb_func_start party_menu_get_status_condition_and_update_object
-party_menu_get_status_condition_and_update_object: @ 8122904
- push {r4,lr}
- adds r4, r1, 0
- bl sub_81208A4
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl party_menu_update_status_condition_object
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end party_menu_get_status_condition_and_update_object
-
- thumb_func_start party_menu_update_status_condition_object
-party_menu_update_status_condition_object: @ 812291C
- push {r4,r5,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0812292C
- cmp r2, 0x6
- bne _08122948
-_0812292C:
- ldr r2, _08122944 @ =gSprites
- ldrb r1, [r5, 0xC]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- b _08122972
- .align 2, 0
-_08122944: .4byte gSprites
-_08122948:
- ldrb r1, [r5, 0xC]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0812297C @ =gSprites
- adds r0, r4
- subs r1, r2, 0x1
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAnim
- ldrb r1, [r5, 0xC]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
-_08122972:
- strb r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812297C: .4byte gSprites
- thumb_func_end party_menu_update_status_condition_object
-
- thumb_func_start sub_8122980
-sub_8122980: @ 8122980
- push {lr}
- ldr r0, _08122994 @ =gUnknown_845A574
- bl LoadCompressedSpriteSheet
- ldr r0, _08122998 @ =gUnknown_845A57C
- bl LoadCompressedSpritePalette
- pop {r0}
- bx r0
- .align 2, 0
-_08122994: .4byte gUnknown_845A574
-_08122998: .4byte gUnknown_845A57C
- thumb_func_end sub_8122980
-
- thumb_func_start sub_812299C
-sub_812299C: @ 812299C
- push {r4,lr}
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0
- bne _081229B0
- bl sub_81229FC
- b _081229E8
-_081229B0:
- ldr r4, _081229F0 @ =gUnknown_203B09C
- ldr r1, [r4]
- ldr r0, _081229F4 @ =gUnknown_845A760
- adds r0, r2, r0
- ldrb r0, [r0]
- strb r0, [r1, 0x17]
- movs r3, 0
- ldr r0, [r4]
- ldrb r0, [r0, 0x17]
- cmp r3, r0
- bcs _081229E8
- ldr r1, _081229F8 @ =gUnknown_845A72C
- lsls r0, r2, 2
- adds r2, r0, r1
-_081229CC:
- ldr r1, [r4]
- adds r1, 0xF
- adds r1, r3
- ldr r0, [r2]
- adds r0, r3
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, [r4]
- ldrb r0, [r0, 0x17]
- cmp r3, r0
- bcc _081229CC
-_081229E8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081229F0: .4byte gUnknown_203B09C
-_081229F4: .4byte gUnknown_845A760
-_081229F8: .4byte gUnknown_845A72C
- thumb_func_end sub_812299C
-
- thumb_func_start sub_81229FC
-sub_81229FC: @ 81229FC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- ldr r2, _08122A78 @ =gUnknown_203B09C
- ldr r1, [r2]
- movs r0, 0
- strb r0, [r1, 0x17]
- ldr r1, [r2]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0
- bl AppendToList
- movs r7, 0
- ldr r0, _08122A7C @ =gUnknown_845A76E
- ldrh r0, [r0]
- str r0, [sp]
- mov r0, r9
- adds r0, 0x64
- str r0, [sp, 0x4]
-_08122A34:
- movs r4, 0
- adds r1, r7, 0x1
- mov r8, r1
- ldr r0, [sp]
- cmp r0, 0xC
- beq _08122A90
- movs r0, 0x64
- mov r6, r10
- muls r6, r0
- ldr r5, _08122A7C @ =gUnknown_845A76E
-_08122A48:
- mov r1, r9
- adds r0, r1, r6
- adds r1, r7, 0
- adds r1, 0xD
- bl GetMonData
- lsls r1, r4, 1
- adds r1, r5
- ldrh r1, [r1]
- cmp r0, r1
- bne _08122A80
- ldr r0, _08122A78 @ =gUnknown_203B09C
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- adds r2, r4, 0
- adds r2, 0x12
- lsls r2, 24
- lsrs r2, 24
- bl AppendToList
- b _08122A90
- .align 2, 0
-_08122A78: .4byte gUnknown_203B09C
-_08122A7C: .4byte gUnknown_845A76E
-_08122A80:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, 0xC
- bne _08122A48
-_08122A90:
- mov r1, r8
- lsls r0, r1, 24
- lsrs r7, r0, 24
- cmp r7, 0x3
- bls _08122A34
- ldr r0, [sp, 0x4]
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08122AB6
- ldr r0, _08122AE8 @ =gUnknown_203B09C
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0x1
- bl AppendToList
-_08122AB6:
- movs r0, 0x64
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _08122AEC
- ldr r0, _08122AE8 @ =gUnknown_203B09C
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0x6
- bl AppendToList
- b _08122AFC
- .align 2, 0
-_08122AE8: .4byte gUnknown_203B09C
-_08122AEC:
- ldr r0, _08122B1C @ =gUnknown_203B09C
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0x3
- bl AppendToList
-_08122AFC:
- ldr r0, _08122B1C @ =gUnknown_203B09C
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0x2
- bl AppendToList
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122B1C: .4byte gUnknown_203B09C
- thumb_func_end sub_81229FC
-
- thumb_func_start sub_8122B20
-sub_8122B20: @ 8122B20
- push {lr}
- adds r2, r0, 0
- ldr r1, _08122B3C @ =gUnknown_203B0A0
- ldrb r0, [r1, 0x8]
- lsls r0, 28
- lsrs r0, 28
- adds r3, r1, 0
- cmp r0, 0xA
- bhi _08122BCA
- lsls r0, 2
- ldr r1, _08122B40 @ =_08122B44
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08122B3C: .4byte gUnknown_203B0A0
-_08122B40: .4byte _08122B44
- .align 2, 0
-_08122B44:
- .4byte _08122B70
- .4byte _08122B80
- .4byte _08122BCA
- .4byte _08122BCA
- .4byte _08122B8C
- .4byte _08122BCA
- .4byte _08122BAC
- .4byte _08122BCA
- .4byte _08122BBE
- .4byte _08122BC2
- .4byte _08122BC6
-_08122B70:
- adds r0, r2, 0
- movs r1, 0x2D
- bl GetMonData
- negs r1, r0
- orrs r1, r0
- lsrs r1, 31
- b _08122BCC
-_08122B80:
- adds r0, r2, 0
- bl sub_8127A84
- lsls r0, 24
- lsrs r1, r0, 24
- b _08122BCC
-_08122B8C:
- movs r0, 0x9
- ldrsb r0, [r3, r0]
- bl sub_8127510
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08122BA4
- cmp r0, 0x1
- beq _08122BA8
- movs r1, 0x7
- b _08122BCC
-_08122BA4:
- movs r1, 0x4
- b _08122BCC
-_08122BA8:
- movs r1, 0x5
- b _08122BCC
-_08122BAC:
- adds r0, r2, 0
- movs r1, 0x2D
- bl GetMonData
- movs r1, 0x6
- cmp r0, 0
- beq _08122BCC
- movs r1, 0x7
- b _08122BCC
-_08122BBE:
- movs r1, 0xA
- b _08122BCC
-_08122BC2:
- movs r1, 0xB
- b _08122BCC
-_08122BC6:
- movs r1, 0xC
- b _08122BCC
-_08122BCA:
- movs r1, 0
-_08122BCC:
- adds r0, r1, 0
- pop {r1}
- bx r1
- thumb_func_end sub_8122B20
-
- thumb_func_start sub_8122BD4
-sub_8122BD4: @ 8122BD4
- push {r4-r6,lr}
- ldr r5, _08122C20 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r5, r1]
- movs r0, 0x64
- adds r4, r1, 0
- muls r4, r0
- ldr r6, _08122C24 @ =gPlayerParty
- adds r4, r6
- ldr r1, _08122C28 @ =gStringVar1
- adds r0, r4, 0
- bl GetMonNickname
- ldr r0, _08122C2C @ =gUnknown_203B09C
- ldr r0, [r0]
- adds r0, 0xD
- bl sub_8121CE4
- ldrb r5, [r5, 0x9]
- adds r0, r4, 0
- bl sub_8122B20
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_812299C
- movs r0, 0
- bl sub_8121E5C
- movs r0, 0x16
- bl sub_8121D0C
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08122C20: .4byte gUnknown_203B0A0
-_08122C24: .4byte gPlayerParty
-_08122C28: .4byte gStringVar1
-_08122C2C: .4byte gUnknown_203B09C
- thumb_func_end sub_8122BD4
-
- thumb_func_start sub_8122C30
-sub_8122C30: @ 8122C30
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8122BD4
- ldr r1, _08122C54 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0xFF
- strh r1, [r0, 0x8]
- ldr r1, _08122C58 @ =sub_8122C5C
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122C54: .4byte gTasks
-_08122C58: .4byte sub_8122C5C
- thumb_func_end sub_8122C30
-
- thumb_func_start sub_8122C5C
-sub_8122C5C: @ 8122C5C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08122C94 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08122D3E
- bl sub_80BF748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08122D3E
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _08122C98 @ =gTasks+0x8
- adds r7, r0, r1
- ldr r0, _08122C9C @ =gUnknown_203B09C
- ldr r0, [r0]
- ldrb r0, [r0, 0x17]
- cmp r0, 0x3
- bhi _08122CA0
- bl Menu_ProcessInputNoWrapAround_other
- b _08122CA4
- .align 2, 0
-_08122C94: .4byte gPaletteFade
-_08122C98: .4byte gTasks+0x8
-_08122C9C: .4byte gUnknown_203B09C
-_08122CA0:
- bl Menu_ProcessInput_other
-_08122CA4:
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0
- ldrsh r4, [r7, r0]
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- beq _08122CCE
- ldr r0, _08122D14 @ =gUnknown_203B09C
- ldr r4, [r0]
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r0, 24
- adds r4, 0xF
- adds r4, r0
- ldrb r0, [r4]
- bl sub_8122138
-_08122CCE:
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r7]
- lsls r0, r5, 24
- asrs r5, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- beq _08122D3E
- adds r0, 0x1
- cmp r5, r0
- bne _08122D1C
- movs r0, 0x5
- bl PlaySE
- ldr r4, _08122D14 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xE
- bl sub_8121CE4
- ldr r2, _08122D18 @ =gUnknown_845A618
- ldr r0, [r4]
- ldrb r1, [r0, 0x17]
- adds r0, r1
- ldrb r0, [r0, 0xE]
- lsls r0, 3
- adds r2, 0x4
- adds r0, r2
- ldr r1, [r0]
- adds r0, r6, 0
- bl _call_via_r1
- b _08122D3E
- .align 2, 0
-_08122D14: .4byte gUnknown_203B09C
-_08122D18: .4byte gUnknown_845A618
-_08122D1C:
- ldr r4, _08122D44 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xE
- bl sub_8121CE4
- ldr r1, _08122D48 @ =gUnknown_845A618
- ldr r0, [r4]
- adds r0, 0xF
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- adds r0, r6, 0
- bl _call_via_r1
-_08122D3E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122D44: .4byte gUnknown_203B09C
-_08122D48: .4byte gUnknown_845A618
- thumb_func_end sub_8122C5C
-
- thumb_func_start sub_8122D4C
-sub_8122D4C: @ 8122D4C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08122D70 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _08122D74 @ =sub_8122D78
- str r0, [r1, 0x4]
- adds r0, r4, 0
- bl sub_811FA78
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122D70: .4byte gUnknown_203B09C
-_08122D74: .4byte sub_8122D78
- thumb_func_end sub_8122D4C
-
- thumb_func_start sub_8122D78
-sub_8122D78: @ 8122D78
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _08122DAC @ =gUnknown_203B0A0
- ldrb r1, [r4, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _08122D8C
- bl pokemon_change_order
-_08122D8C:
- ldr r0, _08122DB0 @ =gPlayerParty
- ldrb r1, [r4, 0x9]
- ldr r2, _08122DB4 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _08122DB8 @ =sub_8122DBC
- movs r4, 0
- str r4, [sp]
- bl ShowPokemonSummaryScreen
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122DAC: .4byte gUnknown_203B0A0
-_08122DB0: .4byte gPlayerParty
-_08122DB4: .4byte gPlayerPartyCount
-_08122DB8: .4byte sub_8122DBC
- thumb_func_end sub_8122D78
-
- thumb_func_start sub_8122DBC
-sub_8122DBC: @ 8122DBC
- push {lr}
- sub sp, 0xC
- ldr r2, _08122DF4 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- bl sub_8138B20
- ldr r3, _08122DF8 @ =gUnknown_203B0A0
- strb r0, [r3, 0x9]
- ldrb r0, [r3, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r3, 0xB]
- movs r1, 0x16
- str r1, [sp]
- ldr r1, _08122DFC @ =sub_8122C30
- str r1, [sp, 0x4]
- ldr r1, [r3]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08122DF4: .4byte gPaletteFade
-_08122DF8: .4byte gUnknown_203B0A0
-_08122DFC: .4byte sub_8122C30
- thumb_func_end sub_8122DBC
-
- thumb_func_start brm_switch
-brm_switch: @ 8122E00
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- movs r0, 0x5
- bl PlaySE
- ldr r5, _08122E4C @ =gUnknown_203B0A0
- movs r0, 0x8
- strb r0, [r5, 0xB]
- ldr r4, _08122E50 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- movs r0, 0x3
- bl sub_8121D0C
- ldrb r0, [r5, 0x9]
- movs r1, 0x1
- bl sub_811F818
- ldrb r0, [r5, 0x9]
- strb r0, [r5, 0xA]
- ldr r1, _08122E54 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08122E58 @ =sub_811FB28
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08122E4C: .4byte gUnknown_203B0A0
-_08122E50: .4byte gUnknown_203B09C
-_08122E54: .4byte gTasks
-_08122E58: .4byte sub_811FB28
- thumb_func_end brm_switch
-
- thumb_func_start sub_8122E5C
-sub_8122E5C: @ 8122E5C
- push {r4-r7,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- ldr r1, _08122E84 @ =gTasks+0x8
- adds r6, r0, r1
- ldr r4, _08122E88 @ =gUnknown_203B0A0
- movs r1, 0xA
- ldrsb r1, [r4, r1]
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- cmp r1, r0
- bne _08122E8C
- adds r0, r7, 0
- bl sub_81235E8
- b _08122FE2
- .align 2, 0
-_08122E84: .4byte gTasks+0x8
-_08122E88: .4byte gUnknown_203B0A0
-_08122E8C:
- bl sub_812358C
- add r2, sp, 0x8
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- ldr r1, _08122EE8 @ =gUnknown_203B0B4
- ldr r1, [r1]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- movs r4, 0
- strb r0, [r2]
- adds r0, r2, 0
- ldrb r0, [r0]
- movs r1, 0x1
- bl GetWindowAttribute
- strh r0, [r6]
- add r0, sp, 0x8
- ldrb r0, [r0]
- movs r1, 0x2
- bl GetWindowAttribute
- strh r0, [r6, 0x2]
- add r0, sp, 0x8
- ldrb r0, [r0]
- movs r1, 0x3
- bl GetWindowAttribute
- strh r0, [r6, 0x4]
- add r0, sp, 0x8
- ldrb r0, [r0]
- movs r1, 0x4
- bl GetWindowAttribute
- strh r0, [r6, 0x6]
- strh r4, [r6, 0x10]
- movs r1, 0x4
- ldrsh r0, [r6, r1]
- cmp r0, 0xA
- bne _08122EEC
- movs r2, 0x1
- negs r2, r2
- adds r0, r2, 0
- b _08122EEE
- .align 2, 0
-_08122EE8: .4byte gUnknown_203B0B4
-_08122EEC:
- movs r0, 0x1
-_08122EEE:
- strh r0, [r6, 0x14]
- add r2, sp, 0x8
- ldr r0, _08122F4C @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xA]
- lsls r0, 24
- asrs r0, 24
- ldr r1, _08122F50 @ =gUnknown_203B0B4
- ldr r1, [r1]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- movs r4, 0
- strb r0, [r2, 0x1]
- adds r0, r2, 0
- ldrb r0, [r0, 0x1]
- movs r1, 0x1
- bl GetWindowAttribute
- strh r0, [r6, 0x8]
- add r0, sp, 0x8
- ldrb r0, [r0, 0x1]
- movs r1, 0x2
- bl GetWindowAttribute
- strh r0, [r6, 0xA]
- add r0, sp, 0x8
- ldrb r0, [r0, 0x1]
- movs r1, 0x3
- bl GetWindowAttribute
- strh r0, [r6, 0xC]
- add r0, sp, 0x8
- ldrb r0, [r0, 0x1]
- movs r1, 0x4
- bl GetWindowAttribute
- strh r0, [r6, 0xE]
- strh r4, [r6, 0x12]
- movs r1, 0xC
- ldrsh r0, [r6, r1]
- cmp r0, 0xA
- bne _08122F54
- movs r2, 0x1
- negs r2, r2
- adds r0, r2, 0
- b _08122F56
- .align 2, 0
-_08122F4C: .4byte gUnknown_203B0A0
-_08122F50: .4byte gUnknown_203B0B4
-_08122F54:
- movs r0, 0x1
-_08122F56:
- strh r0, [r6, 0x16]
- ldr r4, _08122FEC @ =gUnknown_203B0C8
- movs r0, 0x4
- ldrsh r1, [r6, r0]
- movs r2, 0x6
- ldrsh r0, [r6, r2]
- lsls r0, 1
- muls r0, r1
- bl Alloc
- str r0, [r4]
- ldr r5, _08122FF0 @ =gUnknown_203B0CC
- movs r0, 0xC
- ldrsh r1, [r6, r0]
- movs r2, 0xE
- ldrsh r0, [r6, r2]
- lsls r0, 1
- muls r0, r1
- bl Alloc
- str r0, [r5]
- ldr r1, [r4]
- ldrb r2, [r6]
- ldrb r3, [r6, 0x2]
- ldrb r0, [r6, 0x4]
- str r0, [sp]
- ldrb r0, [r6, 0x6]
- str r0, [sp, 0x4]
- movs r0, 0
- bl CopyRectIntoAltRect
- ldr r1, [r5]
- ldrb r2, [r6, 0x8]
- ldrb r3, [r6, 0xA]
- ldrb r0, [r6, 0xC]
- str r0, [sp]
- ldrb r0, [r6, 0xE]
- str r0, [sp, 0x4]
- movs r0, 0
- bl CopyRectIntoAltRect
- add r0, sp, 0x8
- ldrb r0, [r0]
- bl ClearWindowTilemap
- add r0, sp, 0x8
- ldrb r0, [r0, 0x1]
- bl ClearWindowTilemap
- ldr r4, _08122FF4 @ =gUnknown_203B0A0
- movs r0, 0x9
- strb r0, [r4, 0xB]
- ldrb r0, [r4, 0x9]
- movs r1, 0x1
- bl sub_811F818
- ldrb r0, [r4, 0xA]
- movs r1, 0x1
- bl sub_811F818
- adds r0, r7, 0
- bl sub_81231E8
- ldr r1, _08122FF8 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _08122FFC @ =sub_8123270
- str r1, [r0]
-_08122FE2:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122FEC: .4byte gUnknown_203B0C8
-_08122FF0: .4byte gUnknown_203B0CC
-_08122FF4: .4byte gUnknown_203B0A0
-_08122FF8: .4byte gTasks
-_08122FFC: .4byte sub_8123270
- thumb_func_end sub_8122E5C
-
- thumb_func_start sub_8123000
-sub_8123000: @ 8123000
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r2, 0
- mov r12, r3
- ldr r7, [sp, 0x18]
- lsls r0, 16
- lsrs r3, r0, 16
- adds r5, r3, 0
- lsls r1, 16
- lsrs r2, r1, 16
- mov r8, r2
- lsls r0, r3, 16
- asrs r1, r0, 16
- lsls r0, r2, 16
- asrs r0, 16
- adds r4, r1, r0
- cmp r4, 0
- blt _0812302A
- cmp r1, 0x1F
- ble _0812302E
-_0812302A:
- movs r0, 0
- b _0812305C
-_0812302E:
- cmp r1, 0
- bge _08123042
- negs r0, r1
- strb r0, [r6]
- movs r0, 0
- mov r1, r12
- strb r0, [r1]
- adds r0, r2, r3
- strb r0, [r7]
- b _0812305A
-_08123042:
- movs r0, 0
- strb r0, [r6]
- mov r0, r12
- strb r5, [r0]
- cmp r4, 0x1F
- ble _08123056
- movs r0, 0x20
- subs r0, r5
- strb r0, [r7]
- b _0812305A
-_08123056:
- mov r1, r8
- strb r1, [r7]
-_0812305A:
- movs r0, 0x1
-_0812305C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8123000
-
- thumb_func_start sub_8123068
-sub_8123068: @ 8123068
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- str r0, [sp, 0x28]
- ldr r0, [sp, 0x54]
- ldr r4, [sp, 0x58]
- lsls r2, 16
- lsrs r2, 16
- mov r9, r2
- lsls r3, 16
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsls r4, 16
- lsrs r4, 16
- str r4, [sp, 0x30]
- lsls r1, 16
- asrs r7, r1, 16
- lsrs r0, r3, 16
- str r0, [sp, 0x2C]
- asrs r3, 16
- mov r8, r3
- mov r5, sp
- adds r5, 0x25
- mov r6, sp
- adds r6, 0x26
- str r6, [sp]
- adds r0, r7, 0
- mov r1, r8
- add r2, sp, 0x24
- adds r3, r5, 0
- bl sub_8123000
- lsls r0, 24
- cmp r0, 0
- beq _08123122
- ldrb r2, [r5]
- mov r1, r9
- lsls r0, r1, 24
- lsrs r0, 24
- mov r9, r0
- ldrb r0, [r6]
- str r0, [sp]
- mov r1, r10
- lsls r0, r1, 24
- lsrs r4, r0, 24
- str r4, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- mov r3, r9
- bl FillBgTilemapBufferRect_Palette0
- ldr r1, [sp, 0x30]
- lsls r0, r1, 16
- asrs r0, 16
- adds r0, r7, r0
- lsls r0, 16
- asrs r0, 16
- str r6, [sp]
- mov r1, r8
- add r2, sp, 0x24
- adds r3, r5, 0
- bl sub_8123000
- lsls r0, 24
- cmp r0, 0
- beq _08123122
- add r0, sp, 0x24
- ldrb r2, [r0]
- ldr r1, [sp, 0x2C]
- lsls r0, r1, 24
- lsrs r0, 24
- str r0, [sp]
- str r4, [sp, 0x4]
- ldrb r0, [r5]
- str r0, [sp, 0x8]
- mov r0, r9
- str r0, [sp, 0xC]
- ldrb r0, [r6]
- str r0, [sp, 0x10]
- str r4, [sp, 0x14]
- movs r0, 0x11
- str r0, [sp, 0x18]
- movs r0, 0
- str r0, [sp, 0x1C]
- str r0, [sp, 0x20]
- ldr r1, [sp, 0x28]
- movs r3, 0
- bl CopyRectToBgTilemapBufferRect
-_08123122:
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8123068
-
- thumb_func_start sub_8123134
-sub_8123134: @ 8123134
- push {r4,lr}
- ldr r4, _08123184 @ =gSprites
- ldrb r2, [r0, 0xB]
- lsls r3, r2, 4
- adds r3, r2
- lsls r3, 2
- adds r3, r4
- lsls r1, 16
- asrs r1, 13
- ldrh r2, [r3, 0x24]
- adds r2, r1
- strh r2, [r3, 0x24]
- ldrb r3, [r0, 0xA]
- lsls r2, r3, 4
- adds r2, r3
- lsls r2, 2
- adds r2, r4
- ldrh r3, [r2, 0x24]
- adds r3, r1
- strh r3, [r2, 0x24]
- ldrb r3, [r0, 0x9]
- lsls r2, r3, 4
- adds r2, r3
- lsls r2, 2
- adds r2, r4
- ldrh r3, [r2, 0x24]
- adds r3, r1
- strh r3, [r2, 0x24]
- ldrb r2, [r0, 0xC]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r4
- ldrh r2, [r0, 0x24]
- adds r2, r1
- strh r2, [r0, 0x24]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123184: .4byte gSprites
- thumb_func_end sub_8123134
-
- thumb_func_start sub_8123188
-sub_8123188: @ 8123188
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _081231DC @ =gTasks+0x8
- adds r4, r1, r0
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _081231B6
- ldr r2, _081231E0 @ =gUnknown_203B0B4
- ldr r0, _081231E4 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- lsls r1, 4
- ldr r0, [r2]
- adds r0, r1
- movs r2, 0x14
- ldrsh r1, [r4, r2]
- bl sub_8123134
-_081231B6:
- movs r1, 0x16
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _081231D4
- ldr r2, _081231E0 @ =gUnknown_203B0B4
- ldr r0, _081231E4 @ =gUnknown_203B0A0
- movs r1, 0xA
- ldrsb r1, [r0, r1]
- lsls r1, 4
- ldr r0, [r2]
- adds r0, r1
- movs r2, 0x16
- ldrsh r1, [r4, r2]
- bl sub_8123134
-_081231D4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081231DC: .4byte gTasks+0x8
-_081231E0: .4byte gUnknown_203B0B4
-_081231E4: .4byte gUnknown_203B0A0
- thumb_func_end sub_8123188
-
- thumb_func_start sub_81231E8
-sub_81231E8: @ 81231E8
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08123264 @ =gTasks+0x8
- adds r5, r1, r0
- movs r1, 0x14
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08123228
- ldr r0, _08123268 @ =gUnknown_203B0C8
- ldr r0, [r0]
- ldrh r1, [r5, 0x10]
- ldrh r2, [r5]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- movs r3, 0x2
- ldrsh r2, [r5, r3]
- movs r4, 0x4
- ldrsh r3, [r5, r4]
- movs r6, 0x6
- ldrsh r4, [r5, r6]
- str r4, [sp]
- movs r6, 0x14
- ldrsh r4, [r5, r6]
- str r4, [sp, 0x4]
- bl sub_8123068
-_08123228:
- movs r1, 0x16
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08123256
- ldr r0, _0812326C @ =gUnknown_203B0CC
- ldr r0, [r0]
- ldrh r1, [r5, 0x12]
- ldrh r2, [r5, 0x8]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- movs r3, 0xA
- ldrsh r2, [r5, r3]
- movs r4, 0xC
- ldrsh r3, [r5, r4]
- movs r6, 0xE
- ldrsh r4, [r5, r6]
- str r4, [sp]
- movs r6, 0x16
- ldrsh r4, [r5, r6]
- str r4, [sp, 0x4]
- bl sub_8123068
-_08123256:
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08123264: .4byte gTasks+0x8
-_08123268: .4byte gUnknown_203B0C8
-_0812326C: .4byte gUnknown_203B0CC
- thumb_func_end sub_81231E8
-
- thumb_func_start sub_8123270
-sub_8123270: @ 8123270
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r7, r0, 3
- ldr r0, _08123370 @ =gTasks+0x8
- mov r8, r0
- adds r6, r7, r0
- adds r0, r4, 0
- bl sub_81231E8
- adds r0, r4, 0
- bl sub_8123188
- ldrh r1, [r6, 0x14]
- ldrh r2, [r6, 0x10]
- adds r1, r2
- strh r1, [r6, 0x10]
- ldrh r0, [r6, 0x16]
- ldrh r3, [r6, 0x12]
- adds r0, r3
- strh r0, [r6, 0x12]
- add r2, sp, 0x8
- ldrh r0, [r6]
- adds r0, r1
- strh r0, [r2]
- adds r1, r2, 0
- ldrh r0, [r6, 0x12]
- ldrh r3, [r6, 0x8]
- adds r2, r0, r3
- strh r2, [r1, 0x2]
- adds r0, r1, 0
- ldrh r0, [r0]
- cmp r0, 0x21
- bls _08123362
- lsls r0, r2, 16
- lsrs r0, 16
- cmp r0, 0x21
- bls _08123362
- movs r1, 0x14
- ldrsh r0, [r6, r1]
- negs r0, r0
- strh r0, [r6, 0x14]
- movs r2, 0x16
- ldrsh r0, [r6, r2]
- negs r0, r0
- strh r0, [r6, 0x16]
- bl swap_pokemon_and_oams
- ldr r4, _08123374 @ =gUnknown_203B0A0
- ldrb r0, [r4, 0x9]
- bl sub_811F234
- ldrb r0, [r4, 0xA]
- bl sub_811F234
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- ldr r5, _08123378 @ =gUnknown_203B0B4
- ldr r1, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- movs r0, 0xA
- ldrsb r0, [r4, r0]
- ldr r1, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- ldr r0, _0812337C @ =gUnknown_203B0C8
- ldr r1, [r0]
- ldrb r2, [r6]
- ldrb r3, [r6, 0x2]
- ldrb r0, [r6, 0x4]
- str r0, [sp]
- ldrb r0, [r6, 0x6]
- str r0, [sp, 0x4]
- movs r0, 0
- bl CopyRectIntoAltRect
- ldr r0, _08123380 @ =gUnknown_203B0CC
- ldr r1, [r0]
- ldrb r2, [r6, 0x8]
- ldrb r3, [r6, 0xA]
- ldrb r0, [r6, 0xC]
- str r0, [sp]
- ldrb r0, [r6, 0xE]
- str r0, [sp, 0x4]
- movs r0, 0
- bl CopyRectIntoAltRect
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- ldr r1, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl ClearWindowTilemap
- movs r0, 0xA
- ldrsb r0, [r4, r0]
- ldr r1, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl ClearWindowTilemap
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, _08123384 @ =sub_8123388
- str r1, [r0]
-_08123362:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08123370: .4byte gTasks+0x8
-_08123374: .4byte gUnknown_203B0A0
-_08123378: .4byte gUnknown_203B0B4
-_0812337C: .4byte gUnknown_203B0C8
-_08123380: .4byte gUnknown_203B0CC
-_08123384: .4byte sub_8123388
- thumb_func_end sub_8123270
-
- thumb_func_start sub_8123388
-sub_8123388: @ 8123388
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _081233E8 @ =gTasks+0x8
- adds r4, r0, r1
- adds r0, r6, 0
- bl sub_81231E8
- adds r0, r6, 0
- bl sub_8123188
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _081233F4
- movs r2, 0x16
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _081233F4
- ldr r5, _081233EC @ =gUnknown_203B0A0
- movs r0, 0x9
- ldrsb r0, [r5, r0]
- ldr r4, _081233F0 @ =gUnknown_203B0B4
- ldr r1, [r4]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- movs r0, 0xA
- ldrsb r0, [r5, r0]
- ldr r1, [r4]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- adds r0, r6, 0
- bl sub_81235E8
- b _08123418
- .align 2, 0
-_081233E8: .4byte gTasks+0x8
-_081233EC: .4byte gUnknown_203B0A0
-_081233F0: .4byte gUnknown_203B0B4
-_081233F4:
- ldrh r1, [r4, 0x14]
- ldrh r0, [r4, 0x10]
- adds r1, r0
- strh r1, [r4, 0x10]
- ldrh r0, [r4, 0x16]
- ldrh r2, [r4, 0x12]
- adds r0, r2
- strh r0, [r4, 0x12]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0
- bne _0812340E
- strh r1, [r4, 0x14]
-_0812340E:
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08123418
- strh r0, [r4, 0x16]
-_08123418:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8123388
-
- thumb_func_start oamt_swap_pos
-oamt_swap_pos: @ 8123420
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- ldrb r3, [r0]
- ldrb r2, [r1]
- strb r2, [r0]
- strb r3, [r1]
- ldr r5, _081234E8 @ =gSprites
- ldrb r2, [r0]
- lsls r3, r2, 4
- adds r3, r2
- lsls r3, 2
- adds r3, r5
- ldrh r6, [r3, 0x20]
- ldrh r2, [r3, 0x22]
- mov r8, r2
- ldrh r2, [r3, 0x24]
- mov r9, r2
- ldrh r2, [r3, 0x26]
- mov r10, r2
- ldrb r4, [r1]
- lsls r2, r4, 4
- adds r2, r4
- lsls r2, 2
- adds r2, r5
- ldrh r2, [r2, 0x20]
- strh r2, [r3, 0x20]
- ldrb r2, [r0]
- lsls r3, r2, 4
- adds r3, r2
- lsls r3, 2
- adds r3, r5
- ldrb r4, [r1]
- lsls r2, r4, 4
- adds r2, r4
- lsls r2, 2
- adds r2, r5
- ldrh r2, [r2, 0x22]
- strh r2, [r3, 0x22]
- ldrb r2, [r0]
- lsls r3, r2, 4
- adds r3, r2
- lsls r3, 2
- adds r3, r5
- ldrb r4, [r1]
- lsls r2, r4, 4
- adds r2, r4
- lsls r2, 2
- adds r2, r5
- ldrh r2, [r2, 0x24]
- strh r2, [r3, 0x24]
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- ldrb r3, [r1]
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- adds r0, r5
- ldrh r0, [r0, 0x26]
- strh r0, [r2, 0x26]
- ldrb r2, [r1]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x20]
- ldrb r2, [r1]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- mov r2, r8
- strh r2, [r0, 0x22]
- ldrb r2, [r1]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- mov r2, r9
- strh r2, [r0, 0x24]
- ldrb r1, [r1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r10
- strh r1, [r0, 0x26]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081234E8: .4byte gSprites
- thumb_func_end oamt_swap_pos
-
- thumb_func_start swap_pokemon_and_oams
-swap_pokemon_and_oams: @ 81234EC
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r1, _08123580 @ =gUnknown_203B0B4
- ldr r2, _08123584 @ =gUnknown_203B0A0
- movs r3, 0x9
- ldrsb r3, [r2, r3]
- lsls r0, r3, 4
- ldr r1, [r1]
- adds r0, r1, r0
- str r0, [sp]
- ldrb r2, [r2, 0xA]
- lsls r2, 24
- asrs r2, 24
- lsls r0, r2, 4
- adds r0, r1, r0
- str r0, [sp, 0x4]
- movs r1, 0x64
- adds r4, r3, 0
- muls r4, r1
- ldr r0, _08123588 @ =gPlayerParty
- adds r4, r0
- adds r5, r2, 0
- muls r5, r1
- adds r5, r0
- movs r0, 0x64
- bl Alloc
- adds r6, r0, 0
- adds r1, r4, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r5, 0
- adds r1, r6, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r6, 0
- bl Free
- ldr r0, [sp]
- adds r0, 0xB
- ldr r1, [sp, 0x4]
- adds r1, 0xB
- bl oamt_swap_pos
- ldr r0, [sp]
- adds r0, 0xA
- ldr r1, [sp, 0x4]
- adds r1, 0xA
- bl oamt_swap_pos
- ldr r0, [sp]
- adds r0, 0x9
- ldr r1, [sp, 0x4]
- adds r1, 0x9
- bl oamt_swap_pos
- ldr r0, [sp]
- adds r0, 0xC
- ldr r1, [sp, 0x4]
- adds r1, 0xC
- bl oamt_swap_pos
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08123580: .4byte gUnknown_203B0B4
-_08123584: .4byte gUnknown_203B0A0
-_08123588: .4byte gPlayerParty
- thumb_func_end swap_pokemon_and_oams
-
- thumb_func_start sub_812358C
-sub_812358C: @ 812358C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- movs r0, 0x4
- bl Alloc
- adds r4, r0, 0
- ldr r0, _081235E0 @ =gUnknown_203B0A0
- mov r8, r0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- movs r6, 0x64
- muls r0, r6
- ldr r5, _081235E4 @ =gPlayerParty
- adds r0, r5
- movs r1, 0x41
- bl GetMonData
- strh r0, [r4]
- mov r1, r8
- movs r0, 0xA
- ldrsb r0, [r1, r0]
- muls r0, r6
- adds r0, r5
- movs r1, 0x41
- bl GetMonData
- strh r0, [r4, 0x2]
- movs r0, 0x3
- adds r1, r4, 0
- bl sub_8113550
- adds r0, r4, 0
- bl Free
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081235E0: .4byte gUnknown_203B0A0
-_081235E4: .4byte gPlayerParty
- thumb_func_end sub_812358C
-
- thumb_func_start sub_81235E8
-sub_81235E8: @ 81235E8
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _08123630 @ =gUnknown_203B09C
- ldr r0, [r0]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r4, _08123634 @ =gUnknown_203B0A0
- movs r0, 0
- strb r0, [r4, 0xB]
- ldrb r0, [r4, 0x9]
- movs r1, 0
- bl sub_811F818
- ldrb r0, [r4, 0xA]
- strb r0, [r4, 0x9]
- ldrb r0, [r4, 0xA]
- movs r1, 0x1
- bl sub_811F818
- movs r0, 0
- bl sub_8121D0C
- ldr r1, _08123638 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _0812363C @ =sub_811FB28
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08123630: .4byte gUnknown_203B09C
-_08123634: .4byte gUnknown_203B0A0
-_08123638: .4byte gTasks
-_0812363C: .4byte sub_811FB28
- thumb_func_end sub_81235E8
-
- thumb_func_start brm_cancel_1
-brm_cancel_1: @ 8123640
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0x5
- bl PlaySE
- ldr r4, _08123674 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r0, _08123678 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x6
- bne _0812367C
- movs r0, 0xF
- bl sub_8121D0C
- b _08123682
- .align 2, 0
-_08123674: .4byte gUnknown_203B09C
-_08123678: .4byte gUnknown_203B0A0
-_0812367C:
- movs r0, 0
- bl sub_8121D0C
-_08123682:
- ldr r0, _08123698 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812369C @ =sub_811FB28
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08123698: .4byte gTasks
-_0812369C: .4byte sub_811FB28
- thumb_func_end brm_cancel_1
-
- thumb_func_start sub_81236A0
-sub_81236A0: @ 81236A0
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x5
- bl PlaySE
- ldr r4, _081236F0 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r0, _081236F4 @ =gPlayerParty
- ldr r1, _081236F8 @ =gUnknown_203B0A0
- ldrb r1, [r1, 0x9]
- movs r2, 0x8
- bl sub_812299C
- movs r0, 0x1
- bl sub_8121E5C
- movs r0, 0x19
- bl sub_8121D0C
- ldr r1, _081236FC @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0xFF
- strh r1, [r0, 0x8]
- ldr r1, _08123700 @ =sub_8122C5C
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081236F0: .4byte gUnknown_203B09C
-_081236F4: .4byte gPlayerParty
-_081236F8: .4byte gUnknown_203B0A0
-_081236FC: .4byte gTasks
-_08123700: .4byte sub_8122C5C
- thumb_func_end sub_81236A0
-
- thumb_func_start sub_8123704
-sub_8123704: @ 8123704
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08123728 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _0812372C @ =sub_8123730
- str r0, [r1, 0x4]
- adds r0, r4, 0
- bl sub_811FA78
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123728: .4byte gUnknown_203B09C
-_0812372C: .4byte sub_8123730
- thumb_func_end sub_8123704
-
- thumb_func_start sub_8123730
-sub_8123730: @ 8123730
- push {lr}
- ldr r2, _08123740 @ =c2_8123744
- movs r0, 0x1
- movs r1, 0x3
- bl sub_8107DB4
- pop {r0}
- bx r0
- .align 2, 0
-_08123740: .4byte c2_8123744
- thumb_func_end sub_8123730
-
- thumb_func_start c2_8123744
-c2_8123744: @ 8123744
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- ldr r6, _0812376C @ =gSpecialVar_ItemId
- ldrh r0, [r6]
- cmp r0, 0
- bne _08123778
- ldr r3, _08123770 @ =gUnknown_203B0A0
- ldrb r0, [r3, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r3, 0xB]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _08123774 @ =sub_8122C30
- str r1, [sp, 0x4]
- ldr r1, [r3]
- b _081237AE
- .align 2, 0
-_0812376C: .4byte gSpecialVar_ItemId
-_08123770: .4byte gUnknown_203B0A0
-_08123774: .4byte sub_8122C30
-_08123778:
- ldr r4, _081237BC @ =gUnknown_203B0D8
- ldr r5, _081237C0 @ =gUnknown_203B0A0
- movs r0, 0x9
- ldrsb r0, [r5, r0]
- movs r1, 0x64
- mov r8, r1
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- ldr r7, _081237C4 @ =gPlayerParty
- adds r0, r7
- movs r1, 0xC
- bl GetMonData
- strh r0, [r4]
- lsls r0, 16
- cmp r0, 0
- beq _081237CC
- ldrb r0, [r5, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r5, 0xB]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _081237C8 @ =sub_81238A4
- str r1, [sp, 0x4]
- ldr r1, [r5]
-_081237AE:
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl PartyMenuInit
- b _08123814
- .align 2, 0
-_081237BC: .4byte gUnknown_203B0D8
-_081237C0: .4byte gUnknown_203B0A0
-_081237C4: .4byte gPlayerParty
-_081237C8: .4byte sub_81238A4
-_081237CC:
- ldrh r0, [r6]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _081237F8
- ldrh r0, [r6]
- movs r1, 0x1
- bl RemoveBagItem
- movs r0, 0x9
- ldrsb r0, [r5, r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- ldrh r1, [r6]
- bl sub_81205C8
- bl sub_8123A80
- b _08123814
-_081237F8:
- ldrb r0, [r5, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r5, 0xB]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _08123820 @ =sub_8123824
- str r1, [sp, 0x4]
- ldr r1, [r5]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl PartyMenuInit
-_08123814:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08123820: .4byte sub_8123824
- thumb_func_end c2_8123744
-
- thumb_func_start sub_8123824
-sub_8123824: @ 8123824
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0812388C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08123880
- ldr r0, _08123890 @ =gSpecialVar_ItemId
- ldrh r4, [r0]
- ldr r0, _08123894 @ =gUnknown_203B0A0
- mov r8, r0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- movs r6, 0x64
- muls r0, r6
- ldr r5, _08123898 @ =gPlayerParty
- adds r0, r5
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl sub_8120420
- mov r1, r8
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- muls r0, r6
- adds r0, r5
- adds r1, r4, 0
- bl sub_81205C8
- adds r0, r4, 0
- movs r1, 0x1
- bl RemoveBagItem
- ldr r1, _0812389C @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _081238A0 @ =sub_8123BF0
- str r1, [r0]
-_08123880:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812388C: .4byte gPaletteFade
-_08123890: .4byte gSpecialVar_ItemId
-_08123894: .4byte gUnknown_203B0A0
-_08123898: .4byte gPlayerParty
-_0812389C: .4byte gTasks
-_081238A0: .4byte sub_8123BF0
- thumb_func_end sub_8123824
-
- thumb_func_start sub_81238A4
-sub_81238A4: @ 81238A4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _081238E4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081238DC
- ldr r0, _081238E8 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081238EC @ =gPlayerParty
- adds r0, r1
- ldr r1, _081238F0 @ =gUnknown_203B0D8
- ldrh r1, [r1]
- movs r2, 0x1
- bl sub_812050C
- ldr r1, _081238F4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _081238F8 @ =sub_81238FC
- str r1, [r0]
-_081238DC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081238E4: .4byte gPaletteFade
-_081238E8: .4byte gUnknown_203B0A0
-_081238EC: .4byte gPlayerParty
-_081238F0: .4byte gUnknown_203B0D8
-_081238F4: .4byte gTasks
-_081238F8: .4byte sub_81238FC
- thumb_func_end sub_81238A4
-
- thumb_func_start sub_81238FC
-sub_81238FC: @ 81238FC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08123920
- bl sub_812200C
- ldr r0, _08123928 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812392C @ =sub_8123930
- str r0, [r1]
-_08123920:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123928: .4byte gTasks
-_0812392C: .4byte sub_8123930
- thumb_func_end sub_81238FC
-
- thumb_func_start sub_8123930
-sub_8123930: @ 8123930
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08123956
- cmp r1, 0
- bgt _08123950
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08123A2C
- b _08123A40
-_08123950:
- cmp r1, 0x1
- beq _08123A32
- b _08123A40
-_08123956:
- ldr r5, _08123998 @ =gSpecialVar_ItemId
- ldrh r0, [r5]
- movs r1, 0x1
- bl RemoveBagItem
- ldr r6, _0812399C @ =gUnknown_203B0D8
- ldrh r0, [r6]
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- cmp r0, 0
- bne _081239AC
- ldrh r0, [r5]
- movs r1, 0x1
- bl AddBagItem
- ldrh r0, [r6]
- bl sub_8120658
- ldr r0, _081239A0 @ =gStringVar4
- movs r1, 0
- bl sub_81202F8
- ldr r1, _081239A4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _081239A8 @ =sub_81203B8
- str r1, [r0]
- b _08123A40
- .align 2, 0
-_08123998: .4byte gSpecialVar_ItemId
-_0812399C: .4byte gUnknown_203B0D8
-_081239A0: .4byte gStringVar4
-_081239A4: .4byte gTasks
-_081239A8: .4byte sub_81203B8
-_081239AC:
- ldrh r0, [r5]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _081239EC
- ldr r0, _081239DC @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081239E0 @ =gPlayerParty
- adds r0, r1
- ldrh r1, [r5]
- bl sub_81205C8
- ldr r1, _081239E4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _081239E8 @ =sub_8123A50
- str r1, [r0]
- b _08123A40
- .align 2, 0
-_081239DC: .4byte gUnknown_203B0A0
-_081239E0: .4byte gPlayerParty
-_081239E4: .4byte gTasks
-_081239E8: .4byte sub_8123A50
-_081239EC:
- ldr r0, _08123A1C @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08123A20 @ =gPlayerParty
- adds r0, r1
- ldrh r1, [r5]
- bl sub_81205C8
- ldrh r0, [r5]
- ldrh r1, [r6]
- movs r2, 0x1
- bl sub_8120558
- ldr r1, _08123A24 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08123A28 @ =sub_8123BF0
- str r1, [r0]
- b _08123A40
- .align 2, 0
-_08123A1C: .4byte gUnknown_203B0A0
-_08123A20: .4byte gPlayerParty
-_08123A24: .4byte gTasks
-_08123A28: .4byte sub_8123BF0
-_08123A2C:
- movs r0, 0x5
- bl PlaySE
-_08123A32:
- ldr r0, _08123A48 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08123A4C @ =sub_81203B8
- str r0, [r1]
-_08123A40:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08123A48: .4byte gTasks
-_08123A4C: .4byte sub_81203B8
- thumb_func_end sub_8123930
-
- thumb_func_start sub_8123A50
-sub_8123A50: @ 8123A50
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08123A70
- ldr r0, _08123A78 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _08123A7C @ =sub_8123A80
- str r0, [r1, 0x4]
- adds r0, r4, 0
- bl sub_811FA78
-_08123A70:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123A78: .4byte gUnknown_203B09C
-_08123A7C: .4byte sub_8123A80
- thumb_func_end sub_8123A50
-
- thumb_func_start sub_8123A80
-sub_8123A80: @ 8123A80
- push {lr}
- ldr r0, _08123AB8 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08123ABC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x40
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08123AC0 @ =gSaveBlock1Ptr
- lsls r2, r0, 3
- adds r2, r0
- lsls r2, 2
- ldr r0, _08123AC4 @ =0x00002cd0
- adds r2, r0
- ldr r1, [r1]
- adds r1, r2
- ldr r2, _08123AC8 @ =sub_8123ACC
- movs r0, 0x4
- bl sub_80FEBAC
- pop {r0}
- bx r0
- .align 2, 0
-_08123AB8: .4byte gUnknown_203B0A0
-_08123ABC: .4byte gPlayerParty
-_08123AC0: .4byte gSaveBlock1Ptr
-_08123AC4: .4byte 0x00002cd0
-_08123AC8: .4byte sub_8123ACC
- thumb_func_end sub_8123A80
-
- thumb_func_start sub_8123ACC
-sub_8123ACC: @ 8123ACC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- ldr r6, _08123B38 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r6, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08123B3C @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _08123B40 @ =gSpecialVar_Result
- ldrh r7, [r0]
- cmp r7, 0
- bne _08123B4C
- adds r0, r5, 0
- bl TakeMailFromMon
- ldr r4, _08123B44 @ =gUnknown_203B0D8
- adds r0, r5, 0
- movs r1, 0xC
- adds r2, r4, 0
- bl SetMonData
- ldrh r0, [r4]
- movs r1, 0x1
- bl RemoveBagItem
- mov r0, r8
- movs r1, 0x1
- bl AddBagItem
- ldrb r0, [r6, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r6, 0xB]
- str r7, [sp]
- ldr r1, _08123B48 @ =sub_8122C30
- str r1, [sp, 0x4]
- ldr r1, [r6]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl PartyMenuInit
- b _08123B68
- .align 2, 0
-_08123B38: .4byte gUnknown_203B0A0
-_08123B3C: .4byte gPlayerParty
-_08123B40: .4byte gSpecialVar_Result
-_08123B44: .4byte gUnknown_203B0D8
-_08123B48: .4byte sub_8122C30
-_08123B4C:
- ldrb r0, [r6, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r6, 0xB]
- movs r1, 0
- str r1, [sp]
- ldr r1, _08123B74 @ =sub_8123B78
- str r1, [sp, 0x4]
- ldr r1, [r6]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl PartyMenuInit
-_08123B68:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08123B74: .4byte sub_8123B78
- thumb_func_end sub_8123ACC
-
- thumb_func_start sub_8123B78
-sub_8123B78: @ 8123B78
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08123BB0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08123BDE
- ldr r1, _08123BB4 @ =gUnknown_203B0D8
- ldrh r0, [r1]
- cmp r0, 0
- bne _08123BC4
- ldr r0, _08123BB8 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08123BBC @ =gPlayerParty
- adds r0, r1
- ldr r1, _08123BC0 @ =gSpecialVar_ItemId
- ldrh r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8120420
- b _08123BD0
- .align 2, 0
-_08123BB0: .4byte gPaletteFade
-_08123BB4: .4byte gUnknown_203B0D8
-_08123BB8: .4byte gUnknown_203B0A0
-_08123BBC: .4byte gPlayerParty
-_08123BC0: .4byte gSpecialVar_ItemId
-_08123BC4:
- ldr r0, _08123BE4 @ =gSpecialVar_ItemId
- ldrh r0, [r0]
- ldrh r1, [r1]
- movs r2, 0
- bl sub_8120558
-_08123BD0:
- ldr r0, _08123BE8 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08123BEC @ =sub_8123BF0
- str r0, [r1]
-_08123BDE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123BE4: .4byte gSpecialVar_ItemId
-_08123BE8: .4byte gTasks
-_08123BEC: .4byte sub_8123BF0
- thumb_func_end sub_8123B78
-
- thumb_func_start sub_8123BF0
-sub_8123BF0: @ 8123BF0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _08123C2C @ =gUnknown_203B0A0
- ldrb r4, [r0, 0x9]
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08123C24
- lsls r2, r4, 24
- asrs r2, 24
- movs r0, 0x64
- muls r0, r2
- ldr r1, _08123C30 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08123C34 @ =gUnknown_203B0B4
- lsls r2, 4
- ldr r1, [r1]
- adds r1, r2
- bl sub_81224B4
- adds r0, r5, 0
- bl sub_81203B8
-_08123C24:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08123C2C: .4byte gUnknown_203B0A0
-_08123C30: .4byte gPlayerParty
-_08123C34: .4byte gUnknown_203B0B4
- thumb_func_end sub_8123BF0
-
- thumb_func_start sub_8123C38
-sub_8123C38: @ 8123C38
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08123C90 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08123C94 @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r6, r0, 16
- movs r0, 0x5
- bl PlaySE
- ldr r4, _08123C98 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- adds r0, r5, 0
- bl sub_8120610
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08123C9C
- cmp r0, 0x1
- beq _08123CC0
- adds r0, r5, 0
- adds r1, r6, 0
- movs r2, 0x1
- bl sub_81204AC
- b _08123CCE
- .align 2, 0
-_08123C90: .4byte gUnknown_203B0A0
-_08123C94: .4byte gPlayerParty
-_08123C98: .4byte gUnknown_203B09C
-_08123C9C:
- ldr r1, _08123CB4 @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNickname
- ldr r4, _08123CB8 @ =gStringVar4
- ldr r1, _08123CBC @ =gUnknown_8416C8F
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- b _08123CC8
- .align 2, 0
-_08123CB4: .4byte gStringVar1
-_08123CB8: .4byte gStringVar4
-_08123CBC: .4byte gUnknown_8416C8F
-_08123CC0:
- adds r0, r6, 0
- bl sub_8120658
- ldr r0, _08123CE8 @ =gStringVar4
-_08123CC8:
- movs r1, 0x1
- bl sub_81202F8
-_08123CCE:
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r0, _08123CEC @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r0
- ldr r0, _08123CF0 @ =sub_8123BF0
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08123CE8: .4byte gStringVar4
-_08123CEC: .4byte gTasks
-_08123CF0: .4byte sub_8123BF0
- thumb_func_end sub_8123C38
-
- thumb_func_start sub_8123CF4
-sub_8123CF4: @ 8123CF4
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x5
- bl PlaySE
- ldr r4, _08123D44 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r0, _08123D48 @ =gPlayerParty
- ldr r1, _08123D4C @ =gUnknown_203B0A0
- ldrb r1, [r1, 0x9]
- movs r2, 0x9
- bl sub_812299C
- movs r0, 0x2
- bl sub_8121E5C
- movs r0, 0x1A
- bl sub_8121D0C
- ldr r1, _08123D50 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0xFF
- strh r1, [r0, 0x8]
- ldr r1, _08123D54 @ =sub_8122C5C
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08123D44: .4byte gUnknown_203B09C
-_08123D48: .4byte gPlayerParty
-_08123D4C: .4byte gUnknown_203B0A0
-_08123D50: .4byte gTasks
-_08123D54: .4byte sub_8122C5C
- thumb_func_end sub_8123CF4
-
- thumb_func_start sub_8123D58
-sub_8123D58: @ 8123D58
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08123D7C @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _08123D80 @ =sub_8123D84
- str r0, [r1, 0x4]
- adds r0, r4, 0
- bl sub_811FA78
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123D7C: .4byte gUnknown_203B09C
-_08123D80: .4byte sub_8123D84
- thumb_func_end sub_8123D58
-
- thumb_func_start sub_8123D84
-sub_8123D84: @ 8123D84
- push {lr}
- ldr r0, _08123DB8 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08123DBC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x40
- bl GetMonData
- ldr r2, _08123DC0 @ =gSaveBlock1Ptr
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _08123DC4 @ =0x00002cd0
- adds r1, r0
- ldr r0, [r2]
- adds r0, r1
- ldr r1, _08123DC8 @ =sub_8123DCC
- movs r2, 0x1
- bl ReadMail
- pop {r0}
- bx r0
- .align 2, 0
-_08123DB8: .4byte gUnknown_203B0A0
-_08123DBC: .4byte gPlayerParty
-_08123DC0: .4byte gSaveBlock1Ptr
-_08123DC4: .4byte 0x00002cd0
-_08123DC8: .4byte sub_8123DCC
- thumb_func_end sub_8123D84
-
- thumb_func_start sub_8123DCC
-sub_8123DCC: @ 8123DCC
- push {lr}
- sub sp, 0xC
- ldr r2, _08123E00 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldr r3, _08123E04 @ =gUnknown_203B0A0
- ldrb r0, [r3, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r3, 0xB]
- movs r1, 0x16
- str r1, [sp]
- ldr r1, _08123E08 @ =sub_8122C30
- str r1, [sp, 0x4]
- ldr r1, [r3]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08123E00: .4byte gPaletteFade
-_08123E04: .4byte gUnknown_203B0A0
-_08123E08: .4byte sub_8122C30
- thumb_func_end sub_8123DCC
-
- thumb_func_start brm_take_2
-brm_take_2: @ 8123E0C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- ldr r5, _08123E48 @ =gUnknown_203B09C
- ldr r0, [r5]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r0, [r5]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, _08123E4C @ =gUnknown_8416B64
- movs r1, 0x1
- bl sub_81202F8
- ldr r1, _08123E50 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08123E54 @ =sub_8123E58
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08123E48: .4byte gUnknown_203B09C
-_08123E4C: .4byte gUnknown_8416B64
-_08123E50: .4byte gTasks
-_08123E54: .4byte sub_8123E58
- thumb_func_end brm_take_2
-
- thumb_func_start sub_8123E58
-sub_8123E58: @ 8123E58
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08123E7C
- bl sub_812200C
- ldr r0, _08123E84 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08123E88 @ =sub_8123E8C
- str r0, [r1]
-_08123E7C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123E84: .4byte gTasks
-_08123E88: .4byte sub_8123E8C
- thumb_func_end sub_8123E58
-
- thumb_func_start sub_8123E8C
-sub_8123E8C: @ 8123E8C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08123EB2
- cmp r1, 0
- bgt _08123EAC
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08123F1C
- b _08123F38
-_08123EAC:
- cmp r1, 0x1
- beq _08123F22
- b _08123F38
-_08123EB2:
- ldr r0, _08123EE4 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08123EE8 @ =gPlayerParty
- adds r0, r1
- bl TakeMailFromMon2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _08123EF8
- ldr r0, _08123EEC @ =gUnknown_8416B86
- movs r1, 0
- bl sub_81202F8
- ldr r1, _08123EF0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08123EF4 @ =sub_8123BF0
- b _08123F36
- .align 2, 0
-_08123EE4: .4byte gUnknown_203B0A0
-_08123EE8: .4byte gPlayerParty
-_08123EEC: .4byte gUnknown_8416B86
-_08123EF0: .4byte gTasks
-_08123EF4: .4byte sub_8123BF0
-_08123EF8:
- ldr r0, _08123F10 @ =gUnknown_8416BA6
- movs r1, 0
- bl sub_81202F8
- ldr r1, _08123F14 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08123F18 @ =sub_81203B8
- b _08123F36
- .align 2, 0
-_08123F10: .4byte gUnknown_8416BA6
-_08123F14: .4byte gTasks
-_08123F18: .4byte sub_81203B8
-_08123F1C:
- movs r0, 0x5
- bl PlaySE
-_08123F22:
- ldr r0, _08123F40 @ =gUnknown_8416BC3
- movs r1, 0x1
- bl sub_81202F8
- ldr r1, _08123F44 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08123F48 @ =sub_8123F4C
-_08123F36:
- str r1, [r0]
-_08123F38:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123F40: .4byte gUnknown_8416BC3
-_08123F44: .4byte gTasks
-_08123F48: .4byte sub_8123F4C
- thumb_func_end sub_8123E8C
-
- thumb_func_start sub_8123F4C
-sub_8123F4C: @ 8123F4C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08123F70
- bl sub_812200C
- ldr r0, _08123F78 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08123F7C @ =sub_8123F80
- str r0, [r1]
-_08123F70:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123F78: .4byte gTasks
-_08123F7C: .4byte sub_8123F80
- thumb_func_end sub_8123F4C
-
- thumb_func_start sub_8123F80
-sub_8123F80: @ 8123F80
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r5, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08123FAA
- cmp r1, 0
- bgt _08123FA4
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0812403C
- b _08124050
-_08123FA4:
- cmp r1, 0x1
- beq _08124042
- b _08124050
-_08123FAA:
- ldr r0, _08123FFC @ =gUnknown_203B0A0
- mov r8, r0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- movs r7, 0x64
- muls r0, r7
- ldr r6, _08124000 @ =gPlayerParty
- adds r0, r6
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08124010
- mov r1, r8
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- muls r0, r7
- adds r0, r6
- bl TakeMailFromMon
- ldr r0, _08124004 @ =gUnknown_8416CC7
- movs r1, 0
- bl sub_81202F8
- ldr r1, _08124008 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _0812400C @ =sub_8123BF0
- str r1, [r0]
- b _08124050
- .align 2, 0
-_08123FFC: .4byte gUnknown_203B0A0
-_08124000: .4byte gPlayerParty
-_08124004: .4byte gUnknown_8416CC7
-_08124008: .4byte gTasks
-_0812400C: .4byte sub_8123BF0
-_08124010:
- adds r0, r4, 0
- bl sub_8120658
- ldr r0, _08124030 @ =gStringVar4
- movs r1, 0
- bl sub_81202F8
- ldr r1, _08124034 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _08124038 @ =sub_81203B8
- str r1, [r0]
- b _08124050
- .align 2, 0
-_08124030: .4byte gStringVar4
-_08124034: .4byte gTasks
-_08124038: .4byte sub_81203B8
-_0812403C:
- movs r0, 0x5
- bl PlaySE
-_08124042:
- ldr r0, _0812405C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _08124060 @ =sub_81203B8
- str r0, [r1]
-_08124050:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812405C: .4byte gTasks
-_08124060: .4byte sub_81203B8
- thumb_func_end sub_8123F80
-
- thumb_func_start sub_8124064
-sub_8124064: @ 8124064
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _081240E0 @ =gUnknown_203B0A0
- mov r8, r0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- adds r5, r1, 0
- muls r5, r0
- ldr r0, _081240E4 @ =gPlayerParty
- mov r9, r0
- add r5, r9
- movs r0, 0x5
- bl PlaySE
- ldr r4, _081240E8 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- mov r0, r8
- ldrb r4, [r0, 0x9]
- adds r0, r5, 0
- bl sub_8122B20
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- mov r0, r9
- adds r1, r4, 0
- bl sub_812299C
- movs r0, 0
- bl sub_8121E5C
- movs r0, 0x16
- bl sub_8121D0C
- ldr r1, _081240EC @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0xFF
- strh r1, [r0, 0x8]
- ldr r1, _081240F0 @ =sub_8122C5C
- str r1, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081240E0: .4byte gUnknown_203B0A0
-_081240E4: .4byte gPlayerParty
-_081240E8: .4byte gUnknown_203B09C
-_081240EC: .4byte gTasks
-_081240F0: .4byte sub_8122C5C
- thumb_func_end sub_8124064
-
- thumb_func_start sub_81240F4
-sub_81240F4: @ 81240F4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x5
- bl PlaySE
- ldr r5, _08124120 @ =gUnknown_203B09C
- ldr r0, [r5]
- adds r0, 0xC
- bl sub_8121CE4
- bl sub_8127AC0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08124124
- adds r0, r4, 0
- bl sub_811FA78
- b _08124142
- .align 2, 0
-_08124120: .4byte gUnknown_203B09C
-_08124124:
- ldr r0, [r5]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r0, _08124148 @ =gStringVar4
- movs r1, 0x1
- bl sub_81202F8
- ldr r1, _0812414C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08124150 @ =sub_81203B8
- str r1, [r0]
-_08124142:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08124148: .4byte gStringVar4
-_0812414C: .4byte gTasks
-_08124150: .4byte sub_81203B8
- thumb_func_end sub_81240F4
-
- thumb_func_start sub_8124154
-sub_8124154: @ 8124154
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0812417C @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0x80
- bne _08124184
- movs r0, 0x2
- mov r8, r0
- ldr r1, _08124180 @ =gUnknown_8416B3E
- str r1, [sp]
- b _0812418C
- .align 2, 0
-_0812417C: .4byte gUnknown_203B0A0
-_08124180: .4byte gUnknown_8416B3E
-_08124184:
- movs r2, 0x3
- mov r8, r2
- ldr r0, _081241FC @ =gUnknown_8416B16
- str r0, [sp]
-_0812418C:
- ldr r4, _08124200 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- movs r5, 0
- lsls r1, r7, 2
- mov r9, r1
- cmp r5, r8
- bcs _08124222
- ldr r6, _08124204 @ =gUnknown_203B0A0
- ldr r1, _08124208 @ =gTasks
- mov r2, r9
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- mov r10, r0
-_081241B6:
- ldr r0, _0812420C @ =gSelectedOrderFromParty
- adds r4, r5, r0
- ldrb r0, [r4]
- cmp r0, 0
- bne _08124218
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r6, 0x9]
- adds r0, 0x1
- strb r0, [r4]
- adds r0, r5, 0x2
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08124210 @ =gUnknown_203B0B4
- movs r2, 0x9
- ldrsb r2, [r6, r2]
- lsls r2, 4
- ldr r1, [r1]
- adds r1, r2
- movs r2, 0x1
- bl sub_8121C70
- mov r0, r8
- subs r0, 0x1
- cmp r5, r0
- bne _081241F0
- bl sub_8124258
-_081241F0:
- movs r0, 0
- bl sub_8121D0C
- ldr r0, _08124214 @ =sub_811FB28
- mov r1, r10
- b _0812423C
- .align 2, 0
-_081241FC: .4byte gUnknown_8416B16
-_08124200: .4byte gUnknown_203B09C
-_08124204: .4byte gUnknown_203B0A0
-_08124208: .4byte gTasks
-_0812420C: .4byte gSelectedOrderFromParty
-_08124210: .4byte gUnknown_203B0B4
-_08124214: .4byte sub_811FB28
-_08124218:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, r8
- bcc _081241B6
-_08124222:
- movs r0, 0x1A
- bl PlaySE
- ldr r0, [sp]
- movs r1, 0x1
- bl sub_81202F8
- ldr r0, _08124250 @ =gTasks
- mov r2, r9
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldr r0, _08124254 @ =sub_81203B8
-_0812423C:
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08124250: .4byte gTasks
-_08124254: .4byte sub_81203B8
- thumb_func_end sub_8124154
-
- thumb_func_start sub_8124258
-sub_8124258: @ 8124258
- push {r4,lr}
- ldr r4, _08124274 @ =gUnknown_203B0A0
- ldrb r0, [r4, 0x9]
- movs r1, 0
- bl sub_811F818
- movs r0, 0x6
- strb r0, [r4, 0x9]
- movs r1, 0x1
- bl sub_811F818
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08124274: .4byte gUnknown_203B0A0
- thumb_func_end sub_8124258
-
- thumb_func_start sub_8124278
-sub_8124278: @ 8124278
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x5
- bl PlaySE
- ldr r4, _081242BC @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- movs r4, 0
- ldr r3, _081242C0 @ =gSelectedOrderFromParty
- ldr r6, _081242C4 @ =gUnknown_203B0A0
- adds r5, r6, 0
-_0812429E:
- adds r2, r4, r3
- ldrb r1, [r2]
- movs r0, 0x9
- ldrsb r0, [r5, r0]
- adds r0, 0x1
- cmp r1, r0
- bne _081242DC
- movs r1, 0
- strb r1, [r2]
- cmp r4, 0
- beq _081242C8
- cmp r4, 0x1
- beq _081242D4
- b _081242E6
- .align 2, 0
-_081242BC: .4byte gUnknown_203B09C
-_081242C0: .4byte gSelectedOrderFromParty
-_081242C4: .4byte gUnknown_203B0A0
-_081242C8:
- ldrb r0, [r3, 0x1]
- strb r0, [r3]
- ldrb r0, [r3, 0x2]
- strb r0, [r3, 0x1]
- strb r4, [r3, 0x2]
- b _081242E6
-_081242D4:
- ldrb r0, [r3, 0x2]
- strb r0, [r3, 0x1]
- strb r1, [r3, 0x2]
- b _081242E6
-_081242DC:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2
- bls _0812429E
-_081242E6:
- ldr r5, _08124344 @ =gUnknown_203B0B4
- movs r0, 0x9
- ldrsb r0, [r6, r0]
- lsls r0, 4
- ldr r1, [r5]
- adds r1, r0
- movs r0, 0x1
- movs r2, 0x1
- bl sub_8121C70
- ldr r4, _08124348 @ =gSelectedOrderFromParty
- ldrb r0, [r4]
- cmp r0, 0
- beq _08124312
- lsls r0, 4
- subs r0, 0x10
- ldr r1, [r5]
- adds r1, r0
- movs r0, 0x2
- movs r2, 0x1
- bl sub_8121C70
-_08124312:
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _08124328
- lsls r0, 4
- subs r0, 0x10
- ldr r1, [r5]
- adds r1, r0
- movs r0, 0x3
- movs r2, 0x1
- bl sub_8121C70
-_08124328:
- movs r0, 0
- bl sub_8121D0C
- ldr r0, _0812434C @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r0
- ldr r0, _08124350 @ =sub_811FB28
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08124344: .4byte gUnknown_203B0B4
-_08124348: .4byte gSelectedOrderFromParty
-_0812434C: .4byte gTasks
-_08124350: .4byte sub_811FB28
- thumb_func_end sub_8124278
-
- thumb_func_start sub_8124354
-sub_8124354: @ 8124354
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0812437C @ =gSpecialVar_0x8004
- ldr r0, _08124380 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r1]
- adds r0, r4, 0
- bl sub_811FA78
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812437C: .4byte gSpecialVar_0x8004
-_08124380: .4byte gUnknown_203B0A0
- thumb_func_end sub_8124354
-
- thumb_func_start sub_8124384
-sub_8124384: @ 8124384
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08124410 @ =gUnknown_203B0A0
- mov r9, r0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x64
- mov r8, r1
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- ldr r4, _08124414 @ =gPlayerParty
- adds r0, r4
- movs r1, 0x41
- bl GetMonData
- adds r6, r0, 0
- lsls r6, 16
- lsrs r6, 16
- mov r1, r9
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r4
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- mov r1, r9
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r4
- movs r1, 0x50
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_80F9800
- ldr r0, [r0]
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl Trade_CanTradeSelectedMon
- cmp r0, 0x1
- beq _08124418
- cmp r0, 0x2
- beq _0812442C
- movs r0, 0x5
- bl PlaySE
- adds r0, r7, 0
- bl sub_811FA78
- b _0812446C
- .align 2, 0
-_08124410: .4byte gUnknown_203B0A0
-_08124414: .4byte gPlayerParty
-_08124418:
- ldr r0, _08124424 @ =gStringVar4
- ldr r1, _08124428 @ =gUnknown_84170BC
- bl StringExpandPlaceholders
- b _08124434
- .align 2, 0
-_08124424: .4byte gStringVar4
-_08124428: .4byte gUnknown_84170BC
-_0812442C:
- ldr r0, _08124478 @ =gStringVar4
- ldr r1, _0812447C @ =gUnknown_84170E0
- bl StringExpandPlaceholders
-_08124434:
- movs r0, 0x1A
- bl PlaySE
- ldr r4, _08124480 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r4, _08124478 @ =gStringVar4
- ldr r1, _08124484 @ =gUnknown_84169D9
- adds r0, r4, 0
- bl StringAppend
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81202F8
- ldr r1, _08124488 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _0812448C @ =sub_81203B8
- str r1, [r0]
-_0812446C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08124478: .4byte gStringVar4
-_0812447C: .4byte gUnknown_84170E0
-_08124480: .4byte gUnknown_203B09C
-_08124484: .4byte gUnknown_84169D9
-_08124488: .4byte gTasks
-_0812448C: .4byte sub_81203B8
- thumb_func_end sub_8124384
-
- thumb_func_start brm_trade_1
-brm_trade_1: @ 8124490
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08124558 @ =gUnknown_203B0A0
- mov r8, r0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- movs r6, 0x64
- muls r0, r6
- ldr r4, _0812455C @ =gPlayerParty
- adds r0, r4
- movs r1, 0x41
- bl GetMonData
- mov r9, r0
- mov r1, r9
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- mov r1, r8
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- muls r0, r6
- adds r0, r4
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- mov r1, r8
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- muls r0, r6
- adds r0, r4
- movs r1, 0x50
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_80F9800
- ldr r0, [r0]
- ldr r1, _08124560 @ =gUnknown_203B064
- ldr r1, [r1]
- ldr r2, _08124564 @ =gUnknown_203B068
- ldrh r3, [r2]
- ldr r2, _08124568 @ =gUnknown_203B06A
- ldrb r2, [r2]
- str r2, [sp]
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- mov r2, r9
- bl sub_804FBEC
- cmp r0, 0
- beq _08124584
- ldr r5, _0812456C @ =gStringVar4
- ldr r1, _08124570 @ =gUnknown_845A7E8
- subs r0, 0x1
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r5, 0
- bl StringExpandPlaceholders
- movs r0, 0x1A
- bl PlaySE
- ldr r4, _08124574 @ =gUnknown_203B09C
- ldr r0, [r4]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r4]
- adds r0, 0xD
- bl sub_8121CE4
- ldr r1, _08124578 @ =gUnknown_84169D9
- adds r0, r5, 0
- bl StringAppend
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_81202F8
- ldr r1, _0812457C @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _08124580 @ =sub_81203B8
- str r1, [r0]
- b _08124590
- .align 2, 0
-_08124558: .4byte gUnknown_203B0A0
-_0812455C: .4byte gPlayerParty
-_08124560: .4byte gUnknown_203B064
-_08124564: .4byte gUnknown_203B068
-_08124568: .4byte gUnknown_203B06A
-_0812456C: .4byte gStringVar4
-_08124570: .4byte gUnknown_845A7E8
-_08124574: .4byte gUnknown_203B09C
-_08124578: .4byte gUnknown_84169D9
-_0812457C: .4byte gTasks
-_08124580: .4byte sub_81203B8
-_08124584:
- movs r0, 0x5
- bl PlaySE
- adds r0, r7, 0
- bl sub_811FA78
-_08124590:
- add sp, 0xC
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end brm_trade_1
-
- thumb_func_start nullsub_93
-nullsub_93: @ 81245A0
- bx lr
- thumb_func_end nullsub_93
-
- thumb_func_start sub_81245A4
-sub_81245A4: @ 81245A4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- bl Menu_GetCursorPos
- ldr r5, _08124610 @ =gUnknown_203B09C
- ldr r1, [r5]
- lsls r0, 24
- lsrs r0, 24
- adds r1, 0xF
- adds r1, r0
- ldrb r0, [r1]
- subs r0, 0x12
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x5
- bl PlaySE
- ldr r1, _08124614 @ =gUnknown_845A788
- lsls r0, r4, 3
- adds r7, r0, r1
- ldr r0, [r7]
- cmp r0, 0
- bne _081245D6
- b _081247B4
-_081245D6:
- ldr r0, [r5]
- adds r0, 0xC
- bl sub_8121CE4
- ldr r0, [r5]
- adds r0, 0xD
- bl sub_8121CE4
- bl MenuHelpers_LinkSomething
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081245FA
- bl InUnionRoom
- cmp r0, 0x1
- bne _0812461C
-_081245FA:
- adds r0, r4, 0
- subs r0, 0x9
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08124618
- movs r0, 0xD
- bl sub_8121D0C
- b _081247A6
- .align 2, 0
-_08124610: .4byte gUnknown_203B09C
-_08124614: .4byte gUnknown_845A788
-_08124618:
- ldrb r0, [r7, 0x4]
- b _081247A2
-_0812461C:
- cmp r4, 0x6
- bhi _08124658
- movs r1, 0x82
- lsls r1, 4
- adds r0, r4, r1
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08124658
- ldr r0, _0812464C @ =gUnknown_8416AE2
- movs r1, 0x1
- bl sub_81202F8
- ldr r1, _08124650 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08124654 @ =sub_81203B8
- str r1, [r0]
- b _081247B4
- .align 2, 0
-_0812464C: .4byte gUnknown_8416AE2
-_08124650: .4byte gTasks
-_08124654: .4byte sub_81203B8
-_08124658:
- ldr r1, _08124680 @ =gUnknown_845A788
- lsls r0, r4, 3
- adds r5, r0, r1
- ldr r0, [r5]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0812466E
- b _0812478C
-_0812466E:
- subs r0, r4, 0x2
- cmp r0, 0x8
- bhi _0812475C
- lsls r0, 2
- ldr r1, _08124684 @ =_08124688
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08124680: .4byte gUnknown_845A788
-_08124684: .4byte _08124688
- .align 2, 0
-_08124688:
- .4byte _0812474C
- .4byte _0812475C
- .4byte _0812475C
- .4byte _0812475C
- .4byte _0812475C
- .4byte _081246B4
- .4byte _081246F0
- .4byte _081246AC
- .4byte _081246AC
-_081246AC:
- adds r0, r6, 0
- bl sub_80E56DC
- b _081247B4
-_081246B4:
- ldr r0, _081246E0 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x1C
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x1D]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- adds r1, r0, 0
- ldr r0, _081246E4 @ =gStringVar1
- ldrb r1, [r1, 0x14]
- bl sub_80C4DF8
- ldr r0, _081246E8 @ =gStringVar4
- ldr r1, _081246EC @ =gUnknown_8417640
- b _08124720
- .align 2, 0
-_081246E0: .4byte gSaveBlock1Ptr
-_081246E4: .4byte gStringVar1
-_081246E8: .4byte gStringVar4
-_081246EC: .4byte gUnknown_8417640
-_081246F0:
- ldr r0, _08124738 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0x24
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 16
- lsrs r0, 16
- adds r1, 0x25
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- adds r1, r0, 0
- ldr r0, _0812473C @ =gStringVar1
- ldrb r1, [r1, 0x14]
- bl sub_80C4DF8
- ldr r0, _08124740 @ =gStringVar4
- ldr r1, _08124744 @ =gUnknown_8417615
-_08124720:
- bl StringExpandPlaceholders
- adds r0, r6, 0
- bl sub_81247C4
- ldr r0, _08124748 @ =gUnknown_203B09C
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- strh r4, [r0]
- b _081247B4
- .align 2, 0
-_08124738: .4byte gSaveBlock1Ptr
-_0812473C: .4byte gStringVar1
-_08124740: .4byte gStringVar4
-_08124744: .4byte gUnknown_8417615
-_08124748: .4byte gUnknown_203B09C
-_0812474C:
- ldr r1, _08124754 @ =gUnknown_203B0A0
- ldr r0, _08124758 @ =sub_80C4EF8
- str r0, [r1]
- b _08124778
- .align 2, 0
-_08124754: .4byte gUnknown_203B0A0
-_08124758: .4byte sub_80C4EF8
-_0812475C:
- ldr r1, _08124780 @ =gUnknown_203B0A0
- ldr r0, _08124784 @ =CB2_ReturnToField
- str r0, [r1]
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _08124788 @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- bl sub_8124BB0
-_08124778:
- adds r0, r6, 0
- bl sub_811FA78
- b _081247B4
- .align 2, 0
-_08124780: .4byte gUnknown_203B0A0
-_08124784: .4byte CB2_ReturnToField
-_08124788: .4byte gPlayerParty
-_0812478C:
- cmp r4, 0
- beq _0812479A
- cmp r4, 0x4
- bne _081247A0
- bl sub_8124A0C
- b _081247A6
-_0812479A:
- bl sub_8124954
- b _081247A6
-_081247A0:
- ldrb r0, [r5, 0x4]
-_081247A2:
- bl sub_8121D0C
-_081247A6:
- ldr r0, _081247BC @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _081247C0 @ =task_brm_cancel_1_on_keypad_a_or_b
- str r0, [r1]
-_081247B4:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081247BC: .4byte gTasks
-_081247C0: .4byte task_brm_cancel_1_on_keypad_a_or_b
- thumb_func_end sub_81245A4
-
- thumb_func_start sub_81247C4
-sub_81247C4: @ 81247C4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _081247E8 @ =gStringVar4
- movs r1, 0x1
- bl sub_81202F8
- ldr r1, _081247EC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _081247F0 @ =sub_81247F4
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081247E8: .4byte gStringVar4
-_081247EC: .4byte gTasks
-_081247F0: .4byte sub_81247F4
- thumb_func_end sub_81247C4
-
- thumb_func_start sub_81247F4
-sub_81247F4: @ 81247F4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08124818
- bl sub_812200C
- ldr r0, _08124820 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08124824 @ =sub_8124828
- str r0, [r1]
-_08124818:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08124820: .4byte gTasks
-_08124824: .4byte sub_8124828
- thumb_func_end sub_81247F4
-
- thumb_func_start sub_8124828
-sub_8124828: @ 8124828
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0812484E
- cmp r1, 0
- bgt _08124848
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0812488C
- b _081248A2
-_08124848:
- cmp r1, 0x1
- beq _08124892
- b _081248A2
-_0812484E:
- ldr r1, _0812487C @ =gUnknown_203B0A0
- ldr r0, _08124880 @ =CB2_ReturnToField
- str r0, [r1]
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _08124884 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08124888 @ =gUnknown_203B09C
- ldr r1, [r1]
- movs r2, 0x86
- lsls r2, 2
- adds r1, r2
- ldrb r1, [r1]
- bl sub_8124BB0
- adds r0, r4, 0
- bl sub_811FA78
- b _081248A2
- .align 2, 0
-_0812487C: .4byte gUnknown_203B0A0
-_08124880: .4byte CB2_ReturnToField
-_08124884: .4byte gPlayerParty
-_08124888: .4byte gUnknown_203B09C
-_0812488C:
- movs r0, 0x5
- bl PlaySE
-_08124892:
- ldr r0, _081248A8 @ =gFieldCallback2
- movs r1, 0
- str r1, [r0]
- ldr r0, _081248AC @ =gPostMenuFieldCallback
- str r1, [r0]
- adds r0, r4, 0
- bl sub_81203B8
-_081248A2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081248A8: .4byte gFieldCallback2
-_081248AC: .4byte gPostMenuFieldCallback
- thumb_func_end sub_8124828
-
- thumb_func_start FieldCallback_PrepareFadeInFromMenu
-FieldCallback_PrepareFadeInFromMenu: @ 81248B0
- push {lr}
- bl sub_807DC00
- ldr r0, _081248C4 @ =task_launch_hm_phase_2
- movs r1, 0x8
- bl CreateTask
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_081248C4: .4byte task_launch_hm_phase_2
- thumb_func_end FieldCallback_PrepareFadeInFromMenu
-
- thumb_func_start task_launch_hm_phase_2
-task_launch_hm_phase_2: @ 81248C8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl field_weather_is_fade_finished
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081248F4
- bl brm_get_selected_species
- ldr r1, _081248FC @ =gFieldEffectArguments
- lsls r0, 16
- lsrs r0, 16
- str r0, [r1]
- ldr r0, _08124900 @ =gPostMenuFieldCallback
- ldr r0, [r0]
- bl _call_via_r0
- adds r0, r4, 0
- bl DestroyTask
-_081248F4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081248FC: .4byte gFieldEffectArguments
-_08124900: .4byte gPostMenuFieldCallback
- thumb_func_end task_launch_hm_phase_2
-
- thumb_func_start brm_get_selected_species
-brm_get_selected_species: @ 8124904
- push {lr}
- ldr r0, _08124924 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08124928 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08124924: .4byte gUnknown_203B0A0
-_08124928: .4byte gPlayerParty
- thumb_func_end brm_get_selected_species
-
- thumb_func_start task_brm_cancel_1_on_keypad_a_or_b
-task_brm_cancel_1_on_keypad_a_or_b: @ 812492C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08124950 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08124946
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0812494C
-_08124946:
- adds r0, r2, 0
- bl brm_cancel_1
-_0812494C:
- pop {r0}
- bx r0
- .align 2, 0
-_08124950: .4byte gMain
- thumb_func_end task_brm_cancel_1_on_keypad_a_or_b
-
- thumb_func_start sub_8124954
-sub_8124954: @ 8124954
- push {lr}
- ldr r0, _0812496C @ =0x00000806
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08124970
- movs r0, 0xC
- bl sub_8121D0C
- b _08124976
- .align 2, 0
-_0812496C: .4byte 0x00000806
-_08124970:
- movs r0, 0xD
- bl sub_8121D0C
-_08124976:
- pop {r0}
- bx r0
- thumb_func_end sub_8124954
-
- thumb_func_start hm_surf_run_dp02scr
-hm_surf_run_dp02scr: @ 812497C
- push {lr}
- bl GetCursorSelectionMonId
- ldr r1, _08124994 @ =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- movs r0, 0x9
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08124994: .4byte gFieldEffectArguments
- thumb_func_end hm_surf_run_dp02scr
-
- thumb_func_start sub_8124998
-sub_8124998: @ 8124998
- push {r4,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSemiDeepWater
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08124A00
- bl PartyHasMonWithSurf
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08124A00
- bl IsPlayerFacingSurfableFishableWater
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08124A00
- ldr r1, _081249F0 @ =gFieldCallback2
- ldr r0, _081249F4 @ =FieldCallback_PrepareFadeInFromMenu
- str r0, [r1]
- ldr r1, _081249F8 @ =gPostMenuFieldCallback
- ldr r0, _081249FC @ =hm_surf_run_dp02scr
- str r0, [r1]
- movs r0, 0x1
- b _08124A02
- .align 2, 0
-_081249F0: .4byte gFieldCallback2
-_081249F4: .4byte FieldCallback_PrepareFadeInFromMenu
-_081249F8: .4byte gPostMenuFieldCallback
-_081249FC: .4byte hm_surf_run_dp02scr
-_08124A00:
- movs r0, 0
-_08124A02:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8124998
-
- thumb_func_start sub_8124A0C
-sub_8124A0C: @ 8124A0C
- push {r4,lr}
- sub sp, 0x4
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08124A24
- movs r0, 0x9
- bl sub_8121D0C
- b _08124A82
-_08124A24:
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSemiDeepWater
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08124A56
- movs r0, 0xA
- bl sub_8121D0C
- b _08124A82
-_08124A56:
- ldr r0, _08124A78 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- cmp r0, 0x3
- bne _08124A7C
- ldrb r0, [r1, 0x5]
- subs r0, 0x23
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08124A7C
- movs r0, 0xB
- bl sub_8121D0C
- b _08124A82
- .align 2, 0
-_08124A78: .4byte gSaveBlock1Ptr
-_08124A7C:
- movs r0, 0x8
- bl sub_8121D0C
-_08124A82:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8124A0C
-
- thumb_func_start sub_8124A8C
-sub_8124A8C: @ 8124A8C
- push {lr}
- ldr r0, _08124AA4 @ =gMapHeader
- ldrb r0, [r0, 0x17]
- bl Overworld_MapTypeAllowsTeleportAndFly
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08124AA8
- movs r0, 0
- b _08124AAA
- .align 2, 0
-_08124AA4: .4byte gMapHeader
-_08124AA8:
- movs r0, 0x1
-_08124AAA:
- pop {r1}
- bx r1
- thumb_func_end sub_8124A8C
-
- thumb_func_start sub_8124AB0
-sub_8124AB0: @ 8124AB0
- push {lr}
- sub sp, 0xC
- movs r0, 0
- str r0, [sp]
- ldr r0, _08124AD4 @ =sub_811FB28
- str r0, [sp, 0x4]
- ldr r0, _08124AD8 @ =CB2_ReturnToStartMenu
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0x1
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08124AD4: .4byte sub_811FB28
-_08124AD8: .4byte CB2_ReturnToStartMenu
- thumb_func_end sub_8124AB0
-
- thumb_func_start hm2_waterfall
-hm2_waterfall: @ 8124ADC
- push {lr}
- bl GetCursorSelectionMonId
- ldr r1, _08124AF4 @ =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- movs r0, 0x2B
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08124AF4: .4byte gFieldEffectArguments
- thumb_func_end hm2_waterfall
-
- thumb_func_start hm_prepare_waterfall
-hm_prepare_waterfall: @ 8124AF8
- push {r4,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsWaterfall
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08124B54
- bl IsPlayerSurfingNorth
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08124B54
- ldr r1, _08124B44 @ =gFieldCallback2
- ldr r0, _08124B48 @ =FieldCallback_PrepareFadeInFromMenu
- str r0, [r1]
- ldr r1, _08124B4C @ =gPostMenuFieldCallback
- ldr r0, _08124B50 @ =hm2_waterfall
- str r0, [r1]
- movs r0, 0x1
- b _08124B56
- .align 2, 0
-_08124B44: .4byte gFieldCallback2
-_08124B48: .4byte FieldCallback_PrepareFadeInFromMenu
-_08124B4C: .4byte gPostMenuFieldCallback
-_08124B50: .4byte hm2_waterfall
-_08124B54:
- movs r0, 0
-_08124B56:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end hm_prepare_waterfall
-
- thumb_func_start sub_8124B60
-sub_8124B60: @ 8124B60
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- movs r0, 0x8
- bl Alloc
- adds r7, r0, 0
- adds r0, r6, 0
- movs r1, 0x41
- bl GetMonData
- strh r0, [r7, 0x4]
- strh r4, [r7]
- strh r5, [r7, 0x2]
- ldr r0, _08124B98 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0x6
- bne _08124B9C
- movs r0, 0xA
- adds r1, r7, 0
- bl sub_8113550
- b _08124BA4
- .align 2, 0
-_08124B98: .4byte gUnknown_203B0A0
-_08124B9C:
- movs r0, 0x9
- adds r1, r7, 0
- bl sub_8113550
-_08124BA4:
- adds r0, r7, 0
- bl Free
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8124B60
-
- thumb_func_start sub_8124BB0
-sub_8124BB0: @ 8124BB0
- push {r4-r6,lr}
- adds r5, r0, 0
- lsls r4, r1, 24
- lsrs r4, 24
- movs r0, 0x4
- bl Alloc
- adds r6, r0, 0
- adds r0, r5, 0
- movs r1, 0x41
- bl GetMonData
- strh r0, [r6]
- strb r4, [r6, 0x2]
- ldrb r0, [r6, 0x2]
- cmp r0, 0x7
- beq _08124BDA
- cmp r0, 0x8
- beq _08124BFC
- movs r0, 0xFF
- b _08124C00
-_08124BDA:
- ldr r0, _08124BF8 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x1C
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x1D]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- b _08124BFE
- .align 2, 0
-_08124BF8: .4byte gSaveBlock1Ptr
-_08124BFC:
- ldr r0, _08124C18 @ =gMapHeader
-_08124BFE:
- ldrb r0, [r0, 0x14]
-_08124C00:
- strb r0, [r6, 0x3]
- movs r0, 0x24
- adds r1, r6, 0
- bl sub_8113550
- adds r0, r6, 0
- bl Free
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08124C18: .4byte gMapHeader
- thumb_func_end sub_8124BB0
-
- thumb_func_start sub_8124C1C
-sub_8124C1C: @ 8124C1C
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r0, 0x8
- bl Alloc
- adds r4, r0, 0
- ldrb r0, [r5]
- strb r0, [r4]
- ldrb r0, [r5, 0x1]
- strb r0, [r4, 0x1]
- movs r0, 0
- ldrsb r0, [r4, r0]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ldrsb r1, [r4, r1]
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- adds r5, r0, 0
- adds r0, r4, 0
- bl Free
- movs r0, 0x4
- bl Alloc
- adds r4, r0, 0
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _08124C88 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x41
- bl GetMonData
- strh r0, [r4]
- movs r0, 0x2
- strb r0, [r4, 0x2]
- ldrb r0, [r5, 0x14]
- strb r0, [r4, 0x3]
- movs r0, 0x24
- adds r1, r4, 0
- bl sub_8113550
- adds r0, r4, 0
- bl Free
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08124C88: .4byte gPlayerParty
- thumb_func_end sub_8124C1C
-
- thumb_func_start sub_8124C8C
-sub_8124C8C: @ 8124C8C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- ldr r6, _08124CB4 @ =sub_8124D90
- ldr r0, _08124CB8 @ =gMain
- ldr r1, _08124CBC @ =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08124CCC
- movs r0, 0x1
- mov r8, r0
- bl sub_81278B4
- lsls r0, 24
- lsrs r7, r0, 24
- b _08124CD2
- .align 2, 0
-_08124CB4: .4byte sub_8124D90
-_08124CB8: .4byte gMain
-_08124CBC: .4byte 0x00000439
-_08124CC0:
- ldr r0, _08124CC8 @ =gUnknown_203B0A0
- strb r5, [r0, 0x9]
- b _08124D16
- .align 2, 0
-_08124CC8: .4byte gUnknown_203B0A0
-_08124CCC:
- movs r1, 0
- mov r8, r1
- movs r7, 0
-_08124CD2:
- ldr r4, _08124D30 @ =gSpecialVar_ItemId
- ldrh r0, [r4]
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xA
- bne _08124D44
- ldr r1, _08124D34 @ =gUnknown_203B0A0
- movs r0, 0
- strb r0, [r1, 0x9]
- movs r5, 0
-_08124CEA:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08124D38 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08124D0C
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08124CC0
-_08124D0C:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08124CEA
-_08124D16:
- ldr r0, _08124D30 @ =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl GetPocketByItemId
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bne _08124D28
- ldr r6, _08124D3C @ =sub_8124DB0
-_08124D28:
- ldr r1, _08124D40 @ =sub_8124FC8
- movs r0, 0x7F
- b _08124D6A
- .align 2, 0
-_08124D30: .4byte gSpecialVar_ItemId
-_08124D34: .4byte gUnknown_203B0A0
-_08124D38: .4byte gPlayerParty
-_08124D3C: .4byte sub_8124DB0
-_08124D40: .4byte sub_8124FC8
-_08124D44:
- ldrh r0, [r4]
- bl GetPocketByItemId
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- beq _08124D5A
- cmp r0, 0x5
- beq _08124D64
- movs r0, 0x5
- b _08124D68
-_08124D5A:
- movs r0, 0x4
- ldr r6, _08124D60 @ =sub_8124DA0
- b _08124D68
- .align 2, 0
-_08124D60: .4byte sub_8124DA0
-_08124D64:
- movs r0, 0x5
- ldr r6, _08124D88 @ =sub_8124DB0
-_08124D68:
- ldr r1, _08124D8C @ =sub_811FB28
-_08124D6A:
- str r0, [sp]
- str r1, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- adds r1, r7, 0
- movs r2, 0x3
- movs r3, 0x1
- bl PartyMenuInit
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08124D88: .4byte sub_8124DB0
-_08124D8C: .4byte sub_811FB28
- thumb_func_end sub_8124C8C
-
- thumb_func_start sub_8124D90
-sub_8124D90: @ 8124D90
- push {lr}
- movs r0, 0xB
- movs r1, 0x3
- movs r2, 0
- bl sub_8107DB4
- pop {r0}
- bx r0
- thumb_func_end sub_8124D90
-
- thumb_func_start sub_8124DA0
-sub_8124DA0: @ 8124DA0
- push {lr}
- movs r0, 0x5
- movs r1, 0
- movs r2, 0xFF
- bl InitTMCase
- pop {r0}
- bx r0
- thumb_func_end sub_8124DA0
-
- thumb_func_start sub_8124DB0
-sub_8124DB0: @ 8124DB0
- push {lr}
- movs r0, 0x6
- movs r1, 0
- movs r2, 0xFF
- bl InitBerryPouch
- pop {r0}
- bx r0
- thumb_func_end sub_8124DB0
-
- thumb_func_start sub_8124DC0
-sub_8124DC0: @ 8124DC0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08124DD8 @ =gUnknown_203B09C
- ldr r2, [r1]
- ldr r1, _08124DDC @ =sub_8124DE0
- str r1, [r2, 0x4]
- bl sub_811FA78
- pop {r0}
- bx r0
- .align 2, 0
-_08124DD8: .4byte gUnknown_203B09C
-_08124DDC: .4byte sub_8124DE0
- thumb_func_end sub_8124DC0
-
- thumb_func_start sub_8124DE0
-sub_8124DE0: @ 8124DE0
- push {r4,lr}
- ldr r4, _08124E0C @ =gSpecialVar_ItemId
- ldrh r0, [r4]
- bl GetItemCompatibilityRule
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08124E2C
- bl sub_8126C24
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08124E18
- ldr r0, _08124E10 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x9]
- ldrh r1, [r4]
- ldr r2, _08124E14 @ =sub_8126BD4
- bl sub_811C540
- b _08124E38
- .align 2, 0
-_08124E0C: .4byte gSpecialVar_ItemId
-_08124E10: .4byte gUnknown_203B0A0
-_08124E14: .4byte sub_8126BD4
-_08124E18:
- ldr r2, _08124E28 @ =gUnknown_203B0A0
- ldrb r0, [r2, 0x9]
- ldrh r1, [r4]
- ldr r2, [r2]
- bl sub_811C5AC
- b _08124E38
- .align 2, 0
-_08124E28: .4byte gUnknown_203B0A0
-_08124E2C:
- ldr r0, _08124E40 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x9]
- ldrh r1, [r4]
- ldr r2, _08124E44 @ =sub_8124E48
- bl sub_811C540
-_08124E38:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08124E40: .4byte gUnknown_203B0A0
-_08124E44: .4byte sub_8124E48
- thumb_func_end sub_8124DE0
-
- thumb_func_start sub_8124E48
-sub_8124E48: @ 8124E48
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- ldr r7, _08124EBC @ =gSpecialVar_ItemId
- ldrh r0, [r7]
- bl ItemId_GetPocket
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _08124EC8
- bl sub_811D178
- cmp r0, 0x1
- bne _08124EC8
- ldr r0, _08124EC0 @ =gUnknown_203B0A0
- mov r8, r0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- movs r6, 0x64
- adds r4, r0, 0
- muls r4, r6
- ldr r5, _08124EC4 @ =gPlayerParty
- adds r4, r5
- ldrh r0, [r7]
- bl ItemIdToBattleMoveId
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl GiveMoveToMon
- mov r1, r8
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- muls r0, r6
- adds r0, r5
- movs r1, 0x4
- bl AdjustFriendship
- ldrh r1, [r7]
- movs r0, 0xA9
- lsls r0, 1
- cmp r1, r0
- bhi _08124EB0
- adds r0, r1, 0
- movs r1, 0x1
- bl RemoveBagItem
-_08124EB0:
- mov r1, r8
- ldr r0, [r1]
- bl SetMainCallback2
- b _08124EE6
- .align 2, 0
-_08124EBC: .4byte gSpecialVar_ItemId
-_08124EC0: .4byte gUnknown_203B0A0
-_08124EC4: .4byte gPlayerParty
-_08124EC8:
- ldr r2, _08124EF4 @ =gUnknown_203B0A0
- ldrb r0, [r2, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r3, [r2, 0x9]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _08124EF8 @ =sub_8124FC8
- str r1, [sp, 0x4]
- ldr r1, [r2]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r2, 0
- bl PartyMenuInit
-_08124EE6:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08124EF4: .4byte gUnknown_203B0A0
-_08124EF8: .4byte sub_8124FC8
- thumb_func_end sub_8124E48
-
- thumb_func_start sub_8124EFC
-sub_8124EFC: @ 8124EFC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- bl sub_811D178
- cmp r0, 0x1
- bne _08124F94
- ldr r0, _08124F88 @ =gUnknown_203B0A0
- mov r8, r0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- adds r5, r1, 0
- muls r5, r0
- ldr r0, _08124F8C @ =gPlayerParty
- adds r5, r0
- bl GetMoveSlotToReplace
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r5, 0
- bl GetMonData
- adds r6, r0, 0
- lsls r6, 16
- lsrs r6, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl RemoveMonPPBonus
- ldr r7, _08124F90 @ =gSpecialVar_ItemId
- ldrh r0, [r7]
- bl ItemIdToBattleMoveId
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r5, 0
- adds r2, r4, 0
- bl SetMonMoveSlot
- adds r0, r5, 0
- movs r1, 0x4
- bl AdjustFriendship
- ldrh r2, [r7]
- movs r0, 0x4
- adds r1, r5, 0
- adds r3, r6, 0
- bl ItemUse_SetQuestLogEvent
- ldrh r1, [r7]
- movs r0, 0xA9
- lsls r0, 1
- cmp r1, r0
- bhi _08124F7C
- adds r0, r1, 0
- movs r1, 0x1
- bl RemoveBagItem
-_08124F7C:
- mov r1, r8
- ldr r0, [r1]
- bl SetMainCallback2
- b _08124FB2
- .align 2, 0
-_08124F88: .4byte gUnknown_203B0A0
-_08124F8C: .4byte gPlayerParty
-_08124F90: .4byte gSpecialVar_ItemId
-_08124F94:
- ldr r4, _08124FC0 @ =gUnknown_203B0A0
- ldrb r0, [r4, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r4, 0xB]
- ldrb r3, [r4, 0x9]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _08124FC4 @ =sub_8124FC8
- str r1, [sp, 0x4]
- ldr r1, [r4]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- bl PartyMenuInit
-_08124FB2:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08124FC0: .4byte gUnknown_203B0A0
-_08124FC4: .4byte sub_8124FC8
- thumb_func_end sub_8124EFC
-
- thumb_func_start sub_8124FC8
-sub_8124FC8: @ 8124FC8
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _08125000 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08124FFA
- ldr r0, _08125004 @ =gUnknown_203B0A0
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _08124FEE
- ldr r0, _08125008 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _0812500C @ =sub_8128184
- str r0, [r1, 0x4]
-_08124FEE:
- ldr r0, _08125010 @ =gUnknown_3005E98
- ldr r1, _08125014 @ =sub_81255BC
- ldr r2, [r0]
- adds r0, r3, 0
- bl _call_via_r2
-_08124FFA:
- pop {r0}
- bx r0
- .align 2, 0
-_08125000: .4byte gPaletteFade
-_08125004: .4byte gUnknown_203B0A0
-_08125008: .4byte gUnknown_203B09C
-_0812500C: .4byte sub_8128184
-_08125010: .4byte gUnknown_3005E98
-_08125014: .4byte sub_81255BC
- thumb_func_end sub_8124FC8
-
- thumb_func_start IsHPRecoveryItem
-IsHPRecoveryItem: @ 8125018
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _08125034
- ldr r0, _0812502C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08125030 @ =0x00003108
- adds r0, r1
- b _0812503E
- .align 2, 0
-_0812502C: .4byte gSaveBlock1Ptr
-_08125030: .4byte 0x00003108
-_08125034:
- ldr r1, _0812504C @ =gItemEffectTable
- subs r0, 0xD
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
-_0812503E:
- ldrb r1, [r0, 0x4]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _08125050
- movs r0, 0
- b _08125052
- .align 2, 0
-_0812504C: .4byte gItemEffectTable
-_08125050:
- movs r0, 0x1
-_08125052:
- pop {r1}
- bx r1
- thumb_func_end IsHPRecoveryItem
-
- thumb_func_start GetMedicineItemEffectMessage
-GetMedicineItemEffectMessage: @ 8125058
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x3
- cmp r0, 0x12
- bls _0812506E
- b _08125204
-_0812506E:
- lsls r0, 2
- ldr r1, _08125078 @ =_0812507C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08125078: .4byte _0812507C
- .align 2, 0
-_0812507C:
- .4byte _081250C8
- .4byte _081250DC
- .4byte _081250F0
- .4byte _08125104
- .4byte _08125118
- .4byte _0812512C
- .4byte _08125140
- .4byte _08125204
- .4byte _08125154
- .4byte _08125178
- .4byte _08125168
- .4byte _081251A8
- .4byte _081251B8
- .4byte _08125198
- .4byte _08125188
- .4byte _08125204
- .4byte _081251DC
- .4byte _081251DC
- .4byte _081251F0
-_081250C8:
- ldr r0, _081250D4 @ =gStringVar4
- ldr r1, _081250D8 @ =gUnknown_8416F4E
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_081250D4: .4byte gStringVar4
-_081250D8: .4byte gUnknown_8416F4E
-_081250DC:
- ldr r0, _081250E8 @ =gStringVar4
- ldr r1, _081250EC @ =gUnknown_8416F8C
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_081250E8: .4byte gStringVar4
-_081250EC: .4byte gUnknown_8416F8C
-_081250F0:
- ldr r0, _081250FC @ =gStringVar4
- ldr r1, _08125100 @ =gUnknown_8416F9A
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_081250FC: .4byte gStringVar4
-_08125100: .4byte gUnknown_8416F9A
-_08125104:
- ldr r0, _08125110 @ =gStringVar4
- ldr r1, _08125114 @ =gUnknown_8416FB2
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_08125110: .4byte gStringVar4
-_08125114: .4byte gUnknown_8416FB2
-_08125118:
- ldr r0, _08125124 @ =gStringVar4
- ldr r1, _08125128 @ =gUnknown_8416F6F
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_08125124: .4byte gStringVar4
-_08125128: .4byte gUnknown_8416F6F
-_0812512C:
- ldr r0, _08125138 @ =gStringVar4
- ldr r1, _0812513C @ =gUnknown_8417052
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_08125138: .4byte gStringVar4
-_0812513C: .4byte gUnknown_8417052
-_08125140:
- ldr r0, _0812514C @ =gStringVar4
- ldr r1, _08125150 @ =gUnknown_8417075
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_0812514C: .4byte gStringVar4
-_08125150: .4byte gUnknown_8417075
-_08125154:
- ldr r0, _08125160 @ =gStringVar4
- ldr r1, _08125164 @ =gUnknown_8416FED
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_08125160: .4byte gStringVar4
-_08125164: .4byte gUnknown_8416FED
-_08125168:
- ldr r0, _08125170 @ =gStringVar2
- ldr r1, _08125174 @ =gUnknown_84169C2
- b _081251BC
- .align 2, 0
-_08125170: .4byte gStringVar2
-_08125174: .4byte gUnknown_84169C2
-_08125178:
- ldr r0, _08125180 @ =gStringVar2
- ldr r1, _08125184 @ =gUnknown_8417674
- b _081251BC
- .align 2, 0
-_08125180: .4byte gStringVar2
-_08125184: .4byte gUnknown_8417674
-_08125188:
- ldr r0, _08125190 @ =gStringVar2
- ldr r1, _08125194 @ =gUnknown_841767B
- b _081251BC
- .align 2, 0
-_08125190: .4byte gStringVar2
-_08125194: .4byte gUnknown_841767B
-_08125198:
- ldr r0, _081251A0 @ =gStringVar2
- ldr r1, _081251A4 @ =gUnknown_841768D
- b _081251BC
- .align 2, 0
-_081251A0: .4byte gStringVar2
-_081251A4: .4byte gUnknown_841768D
-_081251A8:
- ldr r0, _081251B0 @ =gStringVar2
- ldr r1, _081251B4 @ =gUnknown_84169C5
- b _081251BC
- .align 2, 0
-_081251B0: .4byte gStringVar2
-_081251B4: .4byte gUnknown_84169C5
-_081251B8:
- ldr r0, _081251CC @ =gStringVar2
- ldr r1, _081251D0 @ =gUnknown_84169CD
-_081251BC:
- bl StringCopy
- ldr r0, _081251D4 @ =gStringVar4
- ldr r1, _081251D8 @ =gUnknown_8417032
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_081251CC: .4byte gStringVar2
-_081251D0: .4byte gUnknown_84169CD
-_081251D4: .4byte gStringVar4
-_081251D8: .4byte gUnknown_8417032
-_081251DC:
- ldr r0, _081251E8 @ =gStringVar4
- ldr r1, _081251EC @ =gUnknown_8417002
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_081251E8: .4byte gStringVar4
-_081251EC: .4byte gUnknown_8417002
-_081251F0:
- ldr r0, _081251FC @ =gStringVar4
- ldr r1, _08125200 @ =gUnknown_8416FC7
- bl StringExpandPlaceholders
- b _0812520C
- .align 2, 0
-_081251FC: .4byte gStringVar4
-_08125200: .4byte gUnknown_8416FC7
-_08125204:
- ldr r0, _08125210 @ =gStringVar4
- ldr r1, _08125214 @ =gUnknown_84169DC
- bl StringExpandPlaceholders
-_0812520C:
- pop {r0}
- bx r0
- .align 2, 0
-_08125210: .4byte gStringVar4
-_08125214: .4byte gUnknown_84169DC
- thumb_func_end GetMedicineItemEffectMessage
-
- thumb_func_start UsingHPEVItemOnShedinja
-UsingHPEVItemOnShedinja: @ 8125218
- push {r4,lr}
- adds r4, r0, 0
- lsls r0, r1, 16
- lsrs r0, 16
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xD
- bne _08125244
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- ldr r1, _08125240 @ =0x0000012f
- cmp r0, r1
- bne _08125244
- movs r0, 0
- b _08125246
- .align 2, 0
-_08125240: .4byte 0x0000012f
-_08125244:
- movs r0, 0x1
-_08125246:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end UsingHPEVItemOnShedinja
-
- thumb_func_start IsBlueYellowRedFlute
-IsBlueYellowRedFlute: @ 812524C
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x27
- beq _0812525E
- cmp r0, 0x29
- beq _0812525E
- cmp r0, 0x28
- bne _08125262
-_0812525E:
- movs r0, 0x1
- b _08125264
-_08125262:
- movs r0, 0
-_08125264:
- pop {r1}
- bx r1
- thumb_func_end IsBlueYellowRedFlute
-
- thumb_func_start ExecuteTableBasedItemEffect__
-ExecuteTableBasedItemEffect__: @ 8125268
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r0, _08125294 @ =gMain
- ldr r1, _08125298 @ =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _081252A0
- movs r0, 0x64
- muls r0, r3
- ldr r1, _0812529C @ =gPlayerParty
- adds r0, r1
- adds r1, r5, 0
- adds r2, r3, 0
- b _081252BA
- .align 2, 0
-_08125294: .4byte gMain
-_08125298: .4byte 0x00000439
-_0812529C: .4byte gPlayerParty
-_081252A0:
- movs r0, 0x64
- adds r4, r3, 0
- muls r4, r0
- ldr r0, _081252CC @ =gPlayerParty
- adds r4, r0
- adds r0, r3, 0
- bl sub_8127F7C
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
-_081252BA:
- adds r3, r6, 0
- bl ExecuteTableBasedItemEffect
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_081252CC: .4byte gPlayerParty
- thumb_func_end ExecuteTableBasedItemEffect__
-
- thumb_func_start sub_81252D0
-sub_81252D0: @ 81252D0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r1
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08125300 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08125304 @ =gPlayerParty
- adds r5, r1, r0
- ldr r0, _08125308 @ =gSpecialVar_ItemId
- ldrh r6, [r0]
- adds r0, r5, 0
- adds r1, r6, 0
- bl UsingHPEVItemOnShedinja
- lsls r0, 24
- cmp r0, 0
- bne _0812530C
- movs r4, 0x1
- b _08125342
- .align 2, 0
-_08125300: .4byte gUnknown_203B0A0
-_08125304: .4byte gPlayerParty
-_08125308: .4byte gSpecialVar_ItemId
-_0812530C:
- adds r0, r6, 0
- bl IsHPRecoveryItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08125330
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
-_08125330:
- ldr r0, _08125370 @ =gUnknown_203B0A0
- ldrb r2, [r0, 0x9]
- adds r0, r5, 0
- adds r1, r6, 0
- movs r3, 0
- bl PokemonUseItemEffects2
- lsls r0, 24
- lsrs r4, r0, 24
-_08125342:
- movs r0, 0x5
- bl PlaySE
- cmp r4, 0
- beq _08125380
- ldr r1, _08125374 @ =gUnknown_203B0C0
- movs r0, 0
- strb r0, [r1]
- ldr r0, _08125378 @ =gUnknown_84169DC
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _0812537C @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- mov r1, r8
- str r1, [r0]
- b _08125398
- .align 2, 0
-_08125370: .4byte gUnknown_203B0A0
-_08125374: .4byte gUnknown_203B0C0
-_08125378: .4byte gUnknown_84169DC
-_0812537C: .4byte gTasks
-_08125380:
- ldr r3, _081253A4 @ =0x0000ffff
- movs r0, 0x4
- adds r1, r5, 0
- adds r2, r6, 0
- bl ItemUse_SetQuestLogEvent
- adds r0, r7, 0
- bl sub_8124DC0
- ldr r1, _081253A8 @ =gUnknown_3005E98
- ldr r0, _081253AC @ =ItemUseCB_Medicine
- str r0, [r1]
-_08125398:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081253A4: .4byte 0x0000ffff
-_081253A8: .4byte gUnknown_3005E98
-_081253AC: .4byte ItemUseCB_Medicine
- thumb_func_end sub_81252D0
-
- thumb_func_start ItemUseCB_Medicine
-ItemUseCB_Medicine: @ 81253B0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- str r1, [sp, 0x4]
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r0, 0
- mov r10, r0
- ldr r0, _08125438 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0812543C @ =gPlayerParty
- adds r5, r1, r0
- ldr r0, _08125440 @ =gSpecialVar_ItemId
- ldrh r6, [r0]
- adds r0, r5, 0
- adds r1, r6, 0
- bl UsingHPEVItemOnShedinja
- lsls r0, 24
- cmp r0, 0
- beq _08125428
- adds r0, r6, 0
- bl IsHPRecoveryItem
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- cmp r0, 0x1
- bne _08125416
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- cmp r10, r0
- bne _08125416
- movs r1, 0
- mov r8, r1
-_08125416:
- ldr r4, _08125438 @ =gUnknown_203B0A0
- ldrb r0, [r4, 0x9]
- adds r1, r6, 0
- movs r2, 0
- bl ExecuteTableBasedItemEffect__
- lsls r0, 24
- cmp r0, 0
- beq _0812544C
-_08125428:
- ldr r1, _08125444 @ =gUnknown_203B0C0
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08125448 @ =gUnknown_84169DC
- b _0812551C
- .align 2, 0
-_08125438: .4byte gUnknown_203B0A0
-_0812543C: .4byte gPlayerParty
-_08125440: .4byte gSpecialVar_ItemId
-_08125444: .4byte gUnknown_203B0C0
-_08125448: .4byte gUnknown_84169DC
-_0812544C:
- ldr r1, _08125474 @ =gUnknown_203B0C0
- movs r0, 0x1
- strb r0, [r1]
- adds r0, r6, 0
- bl IsBlueYellowRedFlute
- lsls r0, 24
- cmp r0, 0
- bne _08125478
- movs r0, 0x1
- bl PlaySE
- ldrb r0, [r4, 0xB]
- cmp r0, 0xE
- beq _0812547E
- adds r0, r6, 0
- movs r1, 0x1
- bl RemoveBagItem
- b _0812547E
- .align 2, 0
-_08125474: .4byte gUnknown_203B0C0
-_08125478:
- movs r0, 0x6E
- bl PlaySE
-_0812547E:
- ldr r4, _081254FC @ =gUnknown_203B0B4
- ldr r7, _08125500 @ =gUnknown_203B0A0
- movs r0, 0x9
- ldrsb r0, [r7, r0]
- lsls r0, 4
- ldr r1, [r4]
- adds r1, r0
- adds r0, r5, 0
- bl party_menu_get_status_condition_and_update_object
- ldr r2, _08125504 @ =gSprites
- movs r0, 0x9
- ldrsb r0, [r7, r0]
- ldr r1, [r4]
- lsls r0, 4
- adds r3, r0, r1
- ldrb r1, [r3, 0xC]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _081254BC
- adds r0, r5, 0
- adds r1, r3, 0
- movs r2, 0x1
- bl sub_8121790
-_081254BC:
- mov r2, r8
- cmp r2, 0x1
- bne _0812550C
- mov r0, r10
- cmp r0, 0
- bne _081254D0
- ldrb r0, [r7, 0x9]
- movs r1, 0x1
- bl sub_811F818
-_081254D0:
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- mov r1, r10
- subs r3, r1
- lsls r3, 16
- asrs r3, 16
- ldrb r1, [r7, 0x9]
- ldr r0, _08125508 @ =sub_8125554
- str r0, [sp]
- mov r0, r9
- movs r2, 0x1
- bl sub_8120760
- mov r0, r9
- movs r1, 0
- mov r2, r10
- bl sub_81207F0
- b _08125538
- .align 2, 0
-_081254FC: .4byte gUnknown_203B0B4
-_08125500: .4byte gUnknown_203B0A0
-_08125504: .4byte gSprites
-_08125508: .4byte sub_8125554
-_0812550C:
- ldr r1, _08125548 @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNickname
- adds r0, r6, 0
- bl GetMedicineItemEffectMessage
- ldr r0, _0812554C @ =gStringVar4
-_0812551C:
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08125550 @ =gTasks
- mov r2, r9
- lsls r0, r2, 2
- add r0, r9
- lsls r0, 3
- adds r0, r1
- ldr r1, [sp, 0x4]
- str r1, [r0]
-_08125538:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08125548: .4byte gStringVar1
-_0812554C: .4byte gStringVar4
-_08125550: .4byte gTasks
- thumb_func_end ItemUseCB_Medicine
-
- thumb_func_start sub_8125554
-sub_8125554: @ 8125554
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _081255A0 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081255A4 @ =gPlayerParty
- adds r0, r1
- ldr r1, _081255A8 @ =gStringVar1
- bl GetMonNickname
- ldr r4, _081255AC @ =gStringVar4
- ldr r1, _081255B0 @ =gUnknown_8416F27
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- bl HandleBattleLowHpMusicChange
- ldr r1, _081255B4 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _081255B8 @ =sub_81255BC
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081255A0: .4byte gUnknown_203B0A0
-_081255A4: .4byte gPlayerParty
-_081255A8: .4byte gStringVar1
-_081255AC: .4byte gStringVar4
-_081255B0: .4byte gUnknown_8416F27
-_081255B4: .4byte gTasks
-_081255B8: .4byte sub_81255BC
- thumb_func_end sub_8125554
-
- thumb_func_start sub_81255BC
-sub_81255BC: @ 81255BC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081255E2
- ldr r0, _081255E8 @ =gUnknown_203B0C0
- ldrb r1, [r0]
- cmp r1, 0
- bne _081255DC
- ldr r0, _081255EC @ =gUnknown_203B09C
- ldr r0, [r0]
- str r1, [r0, 0x4]
-_081255DC:
- adds r0, r4, 0
- bl sub_811FA78
-_081255E2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081255E8: .4byte gUnknown_203B0C0
-_081255EC: .4byte gUnknown_203B09C
- thumb_func_end sub_81255BC
-
- thumb_func_start sub_81255F0
-sub_81255F0: @ 81255F0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- mov r10, r0
- movs r1, 0x2
- mov r8, r1
- movs r0, 0x3
- bl sub_8121E5C
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r6, 0
- movs r0, 0x64
- adds r2, r4, 0
- muls r2, r0
- str r2, [sp, 0xC]
-_08125620:
- ldr r0, _081256B8 @ =gPlayerParty
- adds r1, r6, 0
- adds r1, 0xD
- ldr r2, [sp, 0xC]
- adds r0, r2, r0
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- mov r0, r8
- movs r1, 0
- bl GetFontAttribute
- adds r4, r0, 0
- mov r0, r8
- movs r1, 0x2
- bl GetFontAttribute
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0xD
- adds r2, r5, 0
- muls r2, r0
- ldr r0, _081256BC @ =gMoveNames
- adds r2, r0
- lsls r0, r6, 4
- adds r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r7, 0
- str r7, [sp, 0x8]
- mov r0, r9
- mov r1, r8
- adds r3, r4, 0
- bl AddTextPrinterParameterized
- cmp r5, 0
- beq _08125680
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
-_08125680:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _08125620
- movs r0, 0x10
- str r0, [sp]
- mov r0, r10
- str r0, [sp, 0x4]
- str r7, [sp, 0x8]
- mov r0, r9
- mov r1, r8
- movs r2, 0
- movs r3, 0x2
- bl Menu_InitCursor
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081256B8: .4byte gPlayerParty
-_081256BC: .4byte gMoveNames
- thumb_func_end sub_81255F0
-
- thumb_func_start sub_81256C0
-sub_81256C0: @ 81256C0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl Menu_ProcessInput
- lsls r0, 24
- asrs r1, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r1, r0
- beq _081256F2
- adds r0, 0x1
- cmp r1, r0
- bne _081256EC
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_81257D4
- b _081256F2
-_081256EC:
- adds r0, r5, 0
- bl sub_8125790
-_081256F2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81256C0
-
- thumb_func_start ItemUseCB_PpRestore
-ItemUseCB_PpRestore: @ 81256F8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08125710 @ =gSpecialVar_ItemId
- ldrh r0, [r0]
- cmp r0, 0xAF
- bne _0812571C
- ldr r0, _08125714 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08125718 @ =0x00003108
- adds r0, r1
- b _08125726
- .align 2, 0
-_08125710: .4byte gSpecialVar_ItemId
-_08125714: .4byte gSaveBlock1Ptr
-_08125718: .4byte 0x00003108
-_0812571C:
- ldr r1, _0812574C @ =gItemEffectTable
- subs r0, 0xD
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
-_08125726:
- ldrb r1, [r0, 0x4]
- movs r0, 0x10
- ands r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _0812575C
- ldr r0, _08125750 @ =gUnknown_203B0A0
- strh r1, [r0, 0xE]
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _08125754
- adds r0, r4, 0
- bl sub_8125958
- b _0812577E
- .align 2, 0
-_0812574C: .4byte gItemEffectTable
-_08125750: .4byte gUnknown_203B0A0
-_08125754:
- adds r0, r4, 0
- bl sub_812580C
- b _0812577E
-_0812575C:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x17
- bl sub_8121D0C
- ldr r0, _08125784 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x9]
- bl sub_81255F0
- ldr r1, _08125788 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0812578C @ =sub_81256C0
- str r1, [r0]
-_0812577E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08125784: .4byte gUnknown_203B0A0
-_08125788: .4byte gTasks
-_0812578C: .4byte sub_81256C0
- thumb_func_end ItemUseCB_PpRestore
-
- thumb_func_start sub_8125790
-sub_8125790: @ 8125790
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _081257C0 @ =gUnknown_203B09C
- ldr r0, [r0]
- adds r0, 0xC
- bl sub_8121CE4
- bl Menu_GetCursorPos
- ldr r1, _081257C4 @ =gUnknown_203B0A0
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0xE]
- ldrb r1, [r1, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _081257C8
- adds r0, r4, 0
- bl sub_8125958
- b _081257CE
- .align 2, 0
-_081257C0: .4byte gUnknown_203B09C
-_081257C4: .4byte gUnknown_203B0A0
-_081257C8:
- adds r0, r4, 0
- bl sub_812580C
-_081257CE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8125790
-
- thumb_func_start sub_81257D4
-sub_81257D4: @ 81257D4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08125800 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _08125804 @ =sub_811FB28
- str r0, [r1]
- ldr r0, _08125808 @ =gUnknown_203B09C
- ldr r0, [r0]
- movs r1, 0
- str r1, [r0, 0x4]
- adds r0, 0xC
- bl sub_8121CE4
- movs r0, 0x5
- bl sub_8121D0C
- pop {r0}
- bx r0
- .align 2, 0
-_08125800: .4byte gTasks
-_08125804: .4byte sub_811FB28
-_08125808: .4byte gUnknown_203B09C
- thumb_func_end sub_81257D4
-
- thumb_func_start sub_812580C
-sub_812580C: @ 812580C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r3, _08125860 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r3, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08125864 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08125868 @ =gSpecialVar_ItemId
- ldrh r1, [r1]
- ldrb r2, [r3, 0x9]
- ldrb r3, [r3, 0xE]
- bl PokemonUseItemEffects2
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- cmp r4, 0
- beq _0812587C
- ldr r1, _0812586C @ =gUnknown_203B0C0
- movs r0, 0
- strb r0, [r1]
- ldr r0, _08125870 @ =gUnknown_84169DC
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08125874 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _08125878 @ =sub_81255BC
- str r1, [r0]
- b _08125888
- .align 2, 0
-_08125860: .4byte gUnknown_203B0A0
-_08125864: .4byte gPlayerParty
-_08125868: .4byte gSpecialVar_ItemId
-_0812586C: .4byte gUnknown_203B0C0
-_08125870: .4byte gUnknown_84169DC
-_08125874: .4byte gTasks
-_08125878: .4byte sub_81255BC
-_0812587C:
- adds r0, r5, 0
- bl sub_8124DC0
- ldr r1, _08125890 @ =gUnknown_3005E98
- ldr r0, _08125894 @ =sub_8125898
- str r0, [r1]
-_08125888:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08125890: .4byte gUnknown_3005E98
-_08125894: .4byte sub_8125898
- thumb_func_end sub_812580C
-
- thumb_func_start sub_8125898
-sub_8125898: @ 8125898
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r5, _08125930 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r5, r1]
- movs r0, 0x64
- adds r4, r1, 0
- muls r4, r0
- ldr r0, _08125934 @ =gPlayerParty
- adds r4, r0
- ldrb r0, [r5, 0x9]
- ldr r6, _08125938 @ =gSpecialVar_ItemId
- ldrh r1, [r6]
- ldrb r2, [r5, 0xE]
- bl ExecuteTableBasedItemEffect__
- ldr r1, _0812593C @ =gUnknown_203B0C0
- movs r0, 0x1
- strb r0, [r1]
- ldrh r2, [r6]
- ldr r3, _08125940 @ =0x0000ffff
- movs r0, 0x4
- adds r1, r4, 0
- bl ItemUse_SetQuestLogEvent
- movs r0, 0x1
- bl PlaySE
- ldrh r0, [r6]
- movs r1, 0x1
- bl RemoveBagItem
- movs r2, 0xE
- ldrsh r1, [r5, r2]
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _08125944 @ =gStringVar1
- movs r1, 0xD
- muls r1, r0
- ldr r0, _08125948 @ =gMoveNames
- adds r1, r0
- adds r0, r2, 0
- bl StringCopy
- ldrh r0, [r6]
- bl GetMedicineItemEffectMessage
- ldr r0, _0812594C @ =gStringVar4
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08125950 @ =gTasks
- mov r2, r8
- lsls r0, r2, 2
- add r0, r8
- lsls r0, 3
- adds r0, r1
- ldr r1, _08125954 @ =sub_81255BC
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08125930: .4byte gUnknown_203B0A0
-_08125934: .4byte gPlayerParty
-_08125938: .4byte gSpecialVar_ItemId
-_0812593C: .4byte gUnknown_203B0C0
-_08125940: .4byte 0x0000ffff
-_08125944: .4byte gStringVar1
-_08125948: .4byte gMoveNames
-_0812594C: .4byte gStringVar4
-_08125950: .4byte gTasks
-_08125954: .4byte sub_81255BC
- thumb_func_end sub_8125898
-
- thumb_func_start sub_8125958
-sub_8125958: @ 8125958
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r4, 0
- ldr r7, _08125990 @ =gUnknown_203B0AE
- ldr r0, _08125994 @ =gSpecialVar_ItemId
- ldrh r5, [r0]
- movs r0, 0xE
- negs r0, r0
- adds r0, r7
- mov r8, r0
- ldrb r0, [r0, 0x9]
- ldrb r2, [r7]
- adds r1, r5, 0
- bl ExecuteTableBasedItemEffect__
- lsls r0, 24
- cmp r0, 0
- beq _081259A0
- ldr r0, _08125998 @ =gUnknown_203B0C0
- strb r4, [r0]
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0812599C @ =gUnknown_84169DC
- b _081259F6
- .align 2, 0
-_08125990: .4byte gUnknown_203B0AE
-_08125994: .4byte gSpecialVar_ItemId
-_08125998: .4byte gUnknown_203B0C0
-_0812599C: .4byte gUnknown_84169DC
-_081259A0:
- ldr r1, _08125A1C @ =gUnknown_203B0C0
- movs r0, 0x1
- strb r0, [r1]
- mov r0, r8
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- adds r4, r1, 0
- muls r4, r0
- ldr r0, _08125A20 @ =gPlayerParty
- adds r4, r0
- ldr r3, _08125A24 @ =0x0000ffff
- movs r0, 0x4
- adds r1, r4, 0
- adds r2, r5, 0
- bl ItemUse_SetQuestLogEvent
- movs r0, 0x1
- bl PlaySE
- adds r0, r5, 0
- movs r1, 0x1
- bl RemoveBagItem
- movs r0, 0
- ldrsh r1, [r7, r0]
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _08125A28 @ =gStringVar1
- movs r1, 0xD
- muls r1, r4
- ldr r2, _08125A2C @ =gMoveNames
- adds r1, r2
- bl StringCopy
- adds r0, r5, 0
- bl GetMedicineItemEffectMessage
- ldr r0, _08125A30 @ =gStringVar4
-_081259F6:
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08125A34 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08125A38 @ =sub_81255BC
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08125A1C: .4byte gUnknown_203B0C0
-_08125A20: .4byte gPlayerParty
-_08125A24: .4byte 0x0000ffff
-_08125A28: .4byte gStringVar1
-_08125A2C: .4byte gMoveNames
-_08125A30: .4byte gStringVar4
-_08125A34: .4byte gTasks
-_08125A38: .4byte sub_81255BC
- thumb_func_end sub_8125958
-
- thumb_func_start dp05_pp_up
-dp05_pp_up: @ 8125A3C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x18
- bl sub_8121D0C
- ldr r0, _08125A6C @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x9]
- bl sub_81255F0
- ldr r1, _08125A70 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08125A74 @ =sub_81256C0
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08125A6C: .4byte gUnknown_203B0A0
-_08125A70: .4byte gTasks
-_08125A74: .4byte sub_81256C0
- thumb_func_end dp05_pp_up
-
- thumb_func_start ItemIdToBattleMoveId
-ItemIdToBattleMoveId: @ 8125A78
- lsls r0, 16
- ldr r1, _08125A88 @ =0xfedf0000
- adds r0, r1
- ldr r1, _08125A8C @ =gUnknown_845A80C
- lsrs r0, 15
- adds r0, r1
- ldrh r0, [r0]
- bx lr
- .align 2, 0
-_08125A88: .4byte 0xfedf0000
-_08125A8C: .4byte gUnknown_845A80C
- thumb_func_end ItemIdToBattleMoveId
-
- thumb_func_start sub_8125A90
-sub_8125A90: @ 8125A90
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0
- ldr r3, _08125AAC @ =gUnknown_845A80C
-_08125A9A:
- adds r0, r1, 0
- adds r0, 0x32
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- cmp r0, r2
- bne _08125AB0
- movs r0, 0x1
- b _08125ABC
- .align 2, 0
-_08125AAC: .4byte gUnknown_845A80C
-_08125AB0:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x6
- bls _08125A9A
- movs r0, 0
-_08125ABC:
- pop {r1}
- bx r1
- thumb_func_end sub_8125A90
-
- thumb_func_start MonKnowsMove
-MonKnowsMove: @ 8125AC0
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- movs r4, 0
-_08125ACA:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- bl GetMonData
- cmp r0, r5
- bne _08125ADC
- movs r0, 0x1
- b _08125AE8
-_08125ADC:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _08125ACA
- movs r0, 0
-_08125AE8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end MonKnowsMove
-
- thumb_func_start sub_8125AF0
-sub_8125AF0: @ 8125AF0
- push {r4,lr}
- adds r1, r0, 0
- ldr r4, _08125B10 @ =gStringVar4
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08125B10: .4byte gStringVar4
- thumb_func_end sub_8125AF0
-
- thumb_func_start sub_8125B14
-sub_8125B14: @ 8125B14
- push {r4,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8125AF0
- ldr r1, _08125B38 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08125B3C @ =sub_81255BC
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08125B38: .4byte gTasks
-_08125B3C: .4byte sub_81255BC
- thumb_func_end sub_8125B14
-
- thumb_func_start sub_8125B40
-sub_8125B40: @ 8125B40
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0x5
- bl PlaySE
- ldr r7, _08125BD0 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r7, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08125BD4 @ =gPlayerParty
- adds r4, r1, r0
- movs r0, 0xE
- adds r0, r7
- mov r8, r0
- ldr r0, _08125BD8 @ =gSpecialVar_ItemId
- ldrh r5, [r0]
- ldr r1, _08125BDC @ =gStringVar1
- adds r0, r4, 0
- bl GetMonNickname
- adds r0, r5, 0
- bl ItemIdToBattleMoveId
- strh r0, [r7, 0xE]
- ldr r0, _08125BE0 @ =gStringVar2
- movs r1, 0xE
- ldrsh r2, [r7, r1]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _08125BE4 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- movs r0, 0
- mov r1, r8
- strh r0, [r1, 0x2]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- bl sub_8120B20
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08125BF4
- cmp r0, 0x2
- beq _08125BFC
- ldrh r1, [r7, 0xE]
- adds r0, r4, 0
- bl GiveMoveToMon
- lsls r0, 16
- lsrs r0, 16
- ldr r3, _08125BE8 @ =0x0000ffff
- cmp r0, r3
- beq _08125C0C
- movs r0, 0x4
- adds r1, r4, 0
- adds r2, r5, 0
- bl ItemUse_SetQuestLogEvent
- adds r0, r6, 0
- bl sub_8124DC0
- ldr r1, _08125BEC @ =gUnknown_3005E98
- ldr r0, _08125BF0 @ =sub_8125C38
- str r0, [r1]
- b _08125C20
- .align 2, 0
-_08125BD0: .4byte gUnknown_203B0A0
-_08125BD4: .4byte gPlayerParty
-_08125BD8: .4byte gSpecialVar_ItemId
-_08125BDC: .4byte gStringVar1
-_08125BE0: .4byte gStringVar2
-_08125BE4: .4byte gMoveNames
-_08125BE8: .4byte 0x0000ffff
-_08125BEC: .4byte gUnknown_3005E98
-_08125BF0: .4byte sub_8125C38
-_08125BF4:
- ldr r1, _08125BF8 @ =gUnknown_8416DC2
- b _08125BFE
- .align 2, 0
-_08125BF8: .4byte gUnknown_8416DC2
-_08125BFC:
- ldr r1, _08125C08 @ =gUnknown_8416F10
-_08125BFE:
- adds r0, r6, 0
- bl sub_8125B14
- b _08125C20
- .align 2, 0
-_08125C08: .4byte gUnknown_8416F10
-_08125C0C:
- ldr r0, _08125C2C @ =gUnknown_8416DF7
- bl sub_8125AF0
- ldr r1, _08125C30 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08125C34 @ =sub_8125D88
- str r1, [r0]
-_08125C20:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08125C2C: .4byte gUnknown_8416DF7
-_08125C30: .4byte gTasks
-_08125C34: .4byte sub_8125D88
- thumb_func_end sub_8125B40
-
- thumb_func_start sub_8125C38
-sub_8125C38: @ 8125C38
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8125C48
- pop {r0}
- bx r0
- thumb_func_end sub_8125C38
-
- thumb_func_start sub_8125C48
-sub_8125C48: @ 8125C48
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r2, _08125CCC @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r2, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08125CD0 @ =gPlayerParty
- adds r5, r1, r0
- adds r6, r2, 0
- adds r6, 0xE
- ldr r0, _08125CD4 @ =gSpecialVar_ItemId
- ldrh r4, [r0]
- movs r1, 0x2
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _08125C84
- adds r0, r5, 0
- movs r1, 0x4
- bl AdjustFriendship
- movs r0, 0xA9
- lsls r0, 1
- cmp r4, r0
- bhi _08125C84
- adds r0, r4, 0
- movs r1, 0x1
- bl RemoveBagItem
-_08125C84:
- ldr r1, _08125CD8 @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNickname
- ldr r0, _08125CDC @ =gStringVar2
- movs r1, 0
- ldrsh r2, [r6, r1]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _08125CE0 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _08125CE4 @ =gStringVar4
- ldr r1, _08125CE8 @ =gUnknown_8416DB3
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08125CEC @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _08125CF0 @ =sub_8125CF4
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08125CCC: .4byte gUnknown_203B0A0
-_08125CD0: .4byte gPlayerParty
-_08125CD4: .4byte gSpecialVar_ItemId
-_08125CD8: .4byte gStringVar1
-_08125CDC: .4byte gStringVar2
-_08125CE0: .4byte gMoveNames
-_08125CE4: .4byte gStringVar4
-_08125CE8: .4byte gUnknown_8416DB3
-_08125CEC: .4byte gTasks
-_08125CF0: .4byte sub_8125CF4
- thumb_func_end sub_8125C48
-
- thumb_func_start sub_8125CF4
-sub_8125CF4: @ 8125CF4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08125D1A
- ldr r0, _08125D20 @ =0x00000101
- bl PlayFanfare
- ldr r1, _08125D24 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08125D28 @ =sub_8125D2C
- str r1, [r0]
-_08125D1A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08125D20: .4byte 0x00000101
-_08125D24: .4byte gTasks
-_08125D28: .4byte sub_8125D2C
- thumb_func_end sub_8125CF4
-
- thumb_func_start sub_8125D2C
-sub_8125D2C: @ 8125D2C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _08125D7E
- ldr r0, _08125D68 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _08125D54
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08125D7E
-_08125D54:
- ldr r0, _08125D6C @ =gUnknown_203B0A0
- movs r1, 0x10
- ldrsh r0, [r0, r1]
- cmp r0, 0x1
- bne _08125D70
- adds r0, r4, 0
- bl sub_81266A0
- b _08125D7E
- .align 2, 0
-_08125D68: .4byte gMain
-_08125D6C: .4byte gUnknown_203B0A0
-_08125D70:
- cmp r0, 0x2
- bne _08125D78
- ldr r0, _08125D84 @ =gSpecialVar_Result
- strh r2, [r0]
-_08125D78:
- adds r0, r5, 0
- bl sub_811FA78
-_08125D7E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08125D84: .4byte gSpecialVar_Result
- thumb_func_end sub_8125D2C
-
- thumb_func_start sub_8125D88
-sub_8125D88: @ 8125D88
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08125DAC
- bl sub_812200C
- ldr r0, _08125DB4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08125DB8 @ =sub_8125DBC
- str r0, [r1]
-_08125DAC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08125DB4: .4byte gTasks
-_08125DB8: .4byte sub_8125DBC
- thumb_func_end sub_8125D88
-
- thumb_func_start sub_8125DBC
-sub_8125DBC: @ 8125DBC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08125DE2
- cmp r1, 0
- bgt _08125DDC
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08125E08
- b _08125E14
-_08125DDC:
- cmp r1, 0x1
- beq _08125E0E
- b _08125E14
-_08125DE2:
- ldr r0, _08125DFC @ =gUnknown_8416EA4
- movs r1, 0x1
- bl sub_81202F8
- ldr r1, _08125E00 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08125E04 @ =sub_8125E1C
- str r1, [r0]
- b _08125E14
- .align 2, 0
-_08125DFC: .4byte gUnknown_8416EA4
-_08125E00: .4byte gTasks
-_08125E04: .4byte sub_8125E1C
-_08125E08:
- movs r0, 0x5
- bl PlaySE
-_08125E0E:
- adds r0, r4, 0
- bl sub_81260D8
-_08125E14:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8125DBC
-
- thumb_func_start sub_8125E1C
-sub_8125E1C: @ 8125E1C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08125E3C
- ldr r0, _08125E44 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _08125E48 @ =sub_8125E4C
- str r0, [r1, 0x4]
- adds r0, r4, 0
- bl sub_811FA78
-_08125E3C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08125E44: .4byte gUnknown_203B09C
-_08125E48: .4byte sub_8125E4C
- thumb_func_end sub_8125E1C
-
- thumb_func_start sub_8125E4C
-sub_8125E4C: @ 8125E4C
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _08125E74 @ =gPlayerParty
- ldr r4, _08125E78 @ =gUnknown_203B0A0
- ldrb r1, [r4, 0x9]
- ldr r2, _08125E7C @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _08125E80 @ =sub_8125E84
- ldrh r4, [r4, 0xE]
- str r4, [sp]
- bl ShowSelectMovePokemonSummaryScreen
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08125E74: .4byte gPlayerParty
-_08125E78: .4byte gUnknown_203B0A0
-_08125E7C: .4byte gPlayerPartyCount
-_08125E80: .4byte sub_8125E84
- thumb_func_end sub_8125E4C
-
- thumb_func_start sub_8125E84
-sub_8125E84: @ 8125E84
- push {r4,r5,lr}
- sub sp, 0xC
- bl GetMoveSlotToReplace
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r4, _08125ED0 @ =gUnknown_203B0A0
- movs r0, 0x10
- ldrsh r5, [r4, r0]
- cmp r5, 0
- bne _08125EE8
- cmp r2, 0x4
- beq _08125EE8
- movs r1, 0x9
- ldrsb r1, [r4, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08125ED4 @ =gPlayerParty
- adds r0, r1
- adds r1, r2, 0
- adds r1, 0xD
- bl GetMonData
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- ldrb r0, [r4, 0x9]
- ldr r1, _08125ED8 @ =gSpecialVar_ItemId
- ldrh r1, [r1]
- ldr r3, _08125EDC @ =sub_8124EFC
- bl sub_811C568
- ldr r1, _08125EE0 @ =gUnknown_3005E98
- ldr r0, _08125EE4 @ =sub_8125F4C
- str r0, [r1]
- strb r5, [r4, 0xB]
- b _08125F02
- .align 2, 0
-_08125ED0: .4byte gUnknown_203B0A0
-_08125ED4: .4byte gPlayerParty
-_08125ED8: .4byte gSpecialVar_ItemId
-_08125EDC: .4byte sub_8124EFC
-_08125EE0: .4byte gUnknown_3005E98
-_08125EE4: .4byte sub_8125F4C
-_08125EE8:
- movs r0, 0x7F
- str r0, [sp]
- ldr r0, _08125F0C @ =sub_8125F14
- str r0, [sp, 0x4]
- ldr r0, _08125F10 @ =gUnknown_203B0A0
- ldr r0, [r0]
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0x1
- bl PartyMenuInit
-_08125F02:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08125F0C: .4byte sub_8125F14
-_08125F10: .4byte gUnknown_203B0A0
- thumb_func_end sub_8125E84
-
- thumb_func_start sub_8125F14
-sub_8125F14: @ 8125F14
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, _08125F3C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08125F46
- bl GetMoveSlotToReplace
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- beq _08125F40
- adds r0, r4, 0
- bl sub_8125FFC
- b _08125F46
- .align 2, 0
-_08125F3C: .4byte gPaletteFade
-_08125F40:
- adds r0, r5, 0
- bl sub_81260D8
-_08125F46:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8125F14
-
- thumb_func_start sub_8125F4C
-sub_8125F4C: @ 8125F4C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8125F5C
- pop {r0}
- bx r0
- thumb_func_end sub_8125F4C
-
- thumb_func_start sub_8125F5C
-sub_8125F5C: @ 8125F5C
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _08125FE4 @ =gUnknown_203B0A0
- mov r9, r0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- adds r6, r1, 0
- muls r6, r0
- ldr r0, _08125FE8 @ =gPlayerParty
- adds r6, r0
- bl GetMoveSlotToReplace
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r1, r5, 0
- adds r1, 0xD
- adds r0, r6, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _08125FEC @ =gSpecialVar_ItemId
- ldrh r2, [r0]
- movs r0, 0x4
- adds r1, r6, 0
- adds r3, r4, 0
- bl ItemUse_SetQuestLogEvent
- ldr r1, _08125FF0 @ =gStringVar1
- adds r0, r6, 0
- bl GetMonNickname
- ldr r0, _08125FF4 @ =gStringVar2
- movs r1, 0xD
- muls r1, r4
- ldr r2, _08125FF8 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- adds r0, r6, 0
- adds r1, r5, 0
- bl RemoveMonPPBonus
- mov r0, r9
- ldrh r1, [r0, 0xE]
- adds r0, r6, 0
- adds r2, r5, 0
- bl SetMonMoveSlot
- mov r0, r8
- bl sub_8125C48
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08125FE4: .4byte gUnknown_203B0A0
-_08125FE8: .4byte gPlayerParty
-_08125FEC: .4byte gSpecialVar_ItemId
-_08125FF0: .4byte gStringVar1
-_08125FF4: .4byte gStringVar2
-_08125FF8: .4byte gMoveNames
- thumb_func_end sub_8125F5C
-
- thumb_func_start sub_8125FFC
-sub_8125FFC: @ 8125FFC
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _0812605C @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- adds r5, r1, 0
- muls r5, r0
- ldr r0, _08126060 @ =gPlayerParty
- adds r5, r0
- bl GetMoveSlotToReplace
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r1, 0xD
- adds r0, r5, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r1, _08126064 @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNickname
- ldr r0, _08126068 @ =gStringVar2
- movs r1, 0xD
- muls r1, r4
- ldr r2, _0812606C @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r0, _08126070 @ =gUnknown_8416EC6
- bl sub_8125AF0
- ldr r1, _08126074 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126078 @ =sub_812607C
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812605C: .4byte gUnknown_203B0A0
-_08126060: .4byte gPlayerParty
-_08126064: .4byte gStringVar1
-_08126068: .4byte gStringVar2
-_0812606C: .4byte gMoveNames
-_08126070: .4byte gUnknown_8416EC6
-_08126074: .4byte gTasks
-_08126078: .4byte sub_812607C
- thumb_func_end sub_8125FFC
-
- thumb_func_start sub_812607C
-sub_812607C: @ 812607C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081260C8
- ldr r5, _081260D0 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r5, r1]
- movs r0, 0x64
- adds r4, r1, 0
- muls r4, r0
- ldr r0, _081260D4 @ =gPlayerParty
- adds r4, r0
- bl GetMoveSlotToReplace
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl RemoveMonPPBonus
- ldrh r5, [r5, 0xE]
- bl GetMoveSlotToReplace
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl SetMonMoveSlot
- adds r0, r6, 0
- bl sub_8125C48
-_081260C8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081260D0: .4byte gUnknown_203B0A0
-_081260D4: .4byte gPlayerParty
- thumb_func_end sub_812607C
-
- thumb_func_start sub_81260D8
-sub_81260D8: @ 81260D8
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _08126120 @ =gStringVar2
- ldr r1, _08126124 @ =gUnknown_203B0A0
- movs r3, 0xE
- ldrsh r2, [r1, r3]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _08126128 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _0812612C @ =gStringVar4
- ldr r1, _08126130 @ =gUnknown_8416E6B
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08126134 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126138 @ =sub_812613C
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08126120: .4byte gStringVar2
-_08126124: .4byte gUnknown_203B0A0
-_08126128: .4byte gMoveNames
-_0812612C: .4byte gStringVar4
-_08126130: .4byte gUnknown_8416E6B
-_08126134: .4byte gTasks
-_08126138: .4byte sub_812613C
- thumb_func_end sub_81260D8
-
- thumb_func_start sub_812613C
-sub_812613C: @ 812613C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08126160
- bl sub_812200C
- ldr r0, _08126168 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812616C @ =sub_8126170
- str r0, [r1]
-_08126160:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08126168: .4byte gTasks
-_0812616C: .4byte sub_8126170
- thumb_func_end sub_812613C
-
- thumb_func_start sub_8126170
-sub_8126170: @ 8126170
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r7, _081261A0 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r7, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _081261A4 @ =gPlayerParty
- adds r4, r1, r0
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r5, r0, 24
- cmp r5, 0
- beq _081261AE
- cmp r5, 0
- bgt _081261A8
- movs r0, 0x1
- negs r0, r0
- cmp r5, r0
- beq _08126234
- b _0812626A
- .align 2, 0
-_081261A0: .4byte gUnknown_203B0A0
-_081261A4: .4byte gPlayerParty
-_081261A8:
- cmp r5, 0x1
- beq _0812623A
- b _0812626A
-_081261AE:
- ldr r1, _081261F4 @ =gStringVar1
- adds r0, r4, 0
- bl GetMonNickname
- ldr r0, _081261F8 @ =gStringVar2
- movs r1, 0xE
- ldrsh r2, [r7, r1]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _081261FC @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _08126200 @ =gStringVar4
- ldr r1, _08126204 @ =gUnknown_8416E84
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81202F8
- movs r3, 0x10
- ldrsh r0, [r7, r3]
- cmp r0, 0x1
- bne _08126210
- ldr r0, _08126208 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812620C @ =sub_812628C
- str r0, [r1]
- b _0812626A
- .align 2, 0
-_081261F4: .4byte gStringVar1
-_081261F8: .4byte gStringVar2
-_081261FC: .4byte gMoveNames
-_08126200: .4byte gStringVar4
-_08126204: .4byte gUnknown_8416E84
-_08126208: .4byte gTasks
-_0812620C: .4byte sub_812628C
-_08126210:
- cmp r0, 0x2
- bne _08126218
- ldr r0, _08126228 @ =gSpecialVar_Result
- strh r5, [r0]
-_08126218:
- ldr r0, _0812622C @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _08126230 @ =sub_81255BC
- str r0, [r1]
- b _0812626A
- .align 2, 0
-_08126228: .4byte gSpecialVar_Result
-_0812622C: .4byte gTasks
-_08126230: .4byte sub_81255BC
-_08126234:
- movs r0, 0x5
- bl PlaySE
-_0812623A:
- ldr r1, _08126270 @ =gStringVar1
- adds r0, r4, 0
- bl GetMonNickname
- ldr r0, _08126274 @ =gStringVar2
- ldr r1, _08126278 @ =gUnknown_203B0A0
- movs r3, 0xE
- ldrsh r2, [r1, r3]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _0812627C @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r0, _08126280 @ =gUnknown_8416DF7
- bl sub_8125AF0
- ldr r1, _08126284 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126288 @ =sub_8125D88
- str r1, [r0]
-_0812626A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126270: .4byte gStringVar1
-_08126274: .4byte gStringVar2
-_08126278: .4byte gUnknown_203B0A0
-_0812627C: .4byte gMoveNames
-_08126280: .4byte gUnknown_8416DF7
-_08126284: .4byte gTasks
-_08126288: .4byte sub_8125D88
- thumb_func_end sub_8126170
-
- thumb_func_start sub_812628C
-sub_812628C: @ 812628C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081262A4
- adds r0, r4, 0
- bl sub_81266A0
-_081262A4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_812628C
-
- thumb_func_start dp05_rare_candy
-dp05_rare_candy: @ 81262AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r1
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r7, _081262E8 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r7, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _081262EC @ =gPlayerParty
- adds r4, r1, r0
- ldr r0, _081262F0 @ =gSpecialVar_ItemId
- ldrh r5, [r0]
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x64
- beq _081262F4
- ldrb r2, [r7, 0x9]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r3, 0
- bl PokemonUseItemEffects2
- lsls r0, 24
- lsrs r4, r0, 24
- b _081262F6
- .align 2, 0
-_081262E8: .4byte gUnknown_203B0A0
-_081262EC: .4byte gPlayerParty
-_081262F0: .4byte gSpecialVar_ItemId
-_081262F4:
- movs r4, 0x1
-_081262F6:
- movs r0, 0x5
- bl PlaySE
- cmp r4, 0
- beq _08126330
- ldr r1, _08126324 @ =gUnknown_203B0C0
- movs r0, 0
- strb r0, [r1]
- ldr r0, _08126328 @ =gUnknown_84169DC
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _0812632C @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- mov r1, r8
- str r1, [r0]
- b _0812633C
- .align 2, 0
-_08126324: .4byte gUnknown_203B0C0
-_08126328: .4byte gUnknown_84169DC
-_0812632C: .4byte gTasks
-_08126330:
- adds r0, r6, 0
- bl sub_8124DC0
- ldr r1, _08126348 @ =gUnknown_3005E98
- ldr r0, _0812634C @ =sub_8126350
- str r0, [r1]
-_0812633C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126348: .4byte gUnknown_3005E98
-_0812634C: .4byte sub_8126350
- thumb_func_end dp05_rare_candy
-
- thumb_func_start sub_8126350
-sub_8126350: @ 8126350
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r6, _08126410 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r6, r1]
- movs r0, 0x64
- adds r4, r1, 0
- muls r4, r0
- ldr r0, _08126414 @ =gPlayerParty
- adds r4, r0
- ldr r0, _08126418 @ =gUnknown_203B09C
- ldr r7, [r0]
- movs r2, 0x86
- lsls r2, 2
- adds r1, r7, r2
- adds r0, r4, 0
- bl GetMonLevelUpWindowStats
- ldrb r0, [r6, 0x9]
- ldr r5, _0812641C @ =gSpecialVar_ItemId
- ldrh r1, [r5]
- movs r2, 0
- bl ExecuteTableBasedItemEffect__
- movs r0, 0x89
- lsls r0, 2
- adds r1, r7, r0
- adds r0, r4, 0
- bl GetMonLevelUpWindowStats
- ldr r1, _08126420 @ =gUnknown_203B0C0
- movs r0, 0x1
- strb r0, [r1]
- ldrh r2, [r5]
- ldr r3, _08126424 @ =0x0000ffff
- movs r0, 0x4
- adds r1, r4, 0
- bl ItemUse_SetQuestLogEvent
- movs r0, 0
- bl PlayFanfareByFanfareNum
- ldrb r0, [r6, 0x9]
- adds r1, r4, 0
- bl sub_8126440
- ldrh r0, [r5]
- movs r1, 0x1
- bl RemoveBagItem
- ldr r1, _08126428 @ =gStringVar1
- adds r0, r4, 0
- bl GetMonNickname
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _0812642C @ =gStringVar2
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r4, _08126430 @ =gStringVar4
- ldr r1, _08126434 @ =gUnknown_8417017
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08126438 @ =gTasks
- mov r2, r8
- lsls r0, r2, 2
- add r0, r8
- lsls r0, 3
- adds r0, r1
- ldr r1, _0812643C @ =sub_81264C8
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126410: .4byte gUnknown_203B0A0
-_08126414: .4byte gPlayerParty
-_08126418: .4byte gUnknown_203B09C
-_0812641C: .4byte gSpecialVar_ItemId
-_08126420: .4byte gUnknown_203B0C0
-_08126424: .4byte 0x0000ffff
-_08126428: .4byte gStringVar1
-_0812642C: .4byte gStringVar2
-_08126430: .4byte gStringVar4
-_08126434: .4byte gUnknown_8417017
-_08126438: .4byte gTasks
-_0812643C: .4byte sub_81264C8
- thumb_func_end sub_8126350
-
- thumb_func_start sub_8126440
-sub_8126440: @ 8126440
- push {r4-r7,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r0, 24
- adds r7, r0, 0
- ldr r6, _081264C0 @ =gUnknown_203B0B4
- lsls r4, r7, 4
- ldr r1, [r6]
- adds r1, r4
- adds r0, r5, 0
- bl party_menu_get_status_condition_and_update_object
- ldr r2, _081264C4 @ =gSprites
- ldr r0, [r6]
- adds r3, r4, r0
- ldrb r1, [r3, 0xC]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _0812647C
- adds r0, r5, 0
- adds r1, r3, 0
- movs r2, 0x1
- bl sub_8121790
-_0812647C:
- ldr r1, [r6]
- adds r1, r4
- adds r0, r5, 0
- movs r2, 0x1
- bl sub_812199C
- ldr r1, [r6]
- adds r1, r4
- adds r0, r5, 0
- movs r2, 0x1
- bl sub_8121A3C
- ldr r1, [r6]
- adds r1, r4
- adds r0, r5, 0
- bl sub_8121AF0
- ldr r0, [r6]
- adds r0, r4, r0
- ldrb r0, [r0, 0x9]
- adds r1, r5, 0
- bl sub_8122358
- adds r0, r7, 0
- movs r1, 0x1
- bl sub_811F818
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081264C0: .4byte gUnknown_203B0B4
-_081264C4: .4byte gSprites
- thumb_func_end sub_8126440
-
- thumb_func_start sub_81264C8
-sub_81264C8: @ 81264C8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0
- bl WaitFanfare
- lsls r0, 24
- cmp r0, 0
- beq _08126514
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08126514
- ldr r0, _0812651C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _081264FA
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08126514
-_081264FA:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_8126570
- ldr r0, _08126520 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08126524 @ =sub_8126528
- str r0, [r1]
-_08126514:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812651C: .4byte gMain
-_08126520: .4byte gTasks
-_08126524: .4byte sub_8126528
- thumb_func_end sub_81264C8
-
- thumb_func_start sub_8126528
-sub_8126528: @ 8126528
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08126564 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08126542
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0812655C
-_08126542:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_81265BC
- ldr r0, _08126568 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812656C @ =sub_81265F8
- str r0, [r1]
-_0812655C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08126564: .4byte gMain
-_08126568: .4byte gTasks
-_0812656C: .4byte sub_81265F8
- thumb_func_end sub_8126528
-
- thumb_func_start sub_8126570
-sub_8126570: @ 8126570
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r0, _081265B8 @ =gUnknown_203B09C
- ldr r5, [r0]
- movs r0, 0x86
- lsls r0, 2
- adds r4, r5, r0
- bl sub_8122034
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x18]
- ldrh r0, [r4, 0x18]
- movs r1, 0x89
- lsls r1, 2
- adds r2, r5, r1
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0x3
- str r1, [sp, 0x4]
- adds r1, r4, 0
- movs r3, 0x1
- bl DrawLevelUpWindowPg1
- ldrb r0, [r4, 0x18]
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081265B8: .4byte gUnknown_203B09C
- thumb_func_end sub_8126570
-
- thumb_func_start sub_81265BC
-sub_81265BC: @ 81265BC
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _081265F4 @ =gUnknown_203B09C
- ldr r1, [r0]
- movs r0, 0x86
- lsls r0, 2
- adds r4, r1, r0
- ldrh r0, [r4, 0x18]
- movs r2, 0x89
- lsls r2, 2
- adds r1, r2
- movs r2, 0x3
- str r2, [sp]
- movs r2, 0x1
- movs r3, 0x2
- bl DrawLevelUpWindowPg2
- ldrb r0, [r4, 0x18]
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081265F4: .4byte gUnknown_203B09C
- thumb_func_end sub_81265BC
-
- thumb_func_start sub_81265F8
-sub_81265F8: @ 81265F8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0
- bl WaitFanfare
- lsls r0, 24
- cmp r0, 0
- beq _0812669A
- ldr r0, _08126650 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r6, 0x1
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _08126620
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0812669A
-_08126620:
- bl sub_8122064
- ldr r4, _08126654 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r4, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08126658 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x1
- bl MonTryLearningNewMove
- lsls r0, 16
- lsrs r1, r0, 16
- strh r6, [r4, 0x10]
- ldr r0, _0812665C @ =0x0000fffe
- cmp r1, r0
- beq _0812667C
- cmp r1, r0
- bgt _08126660
- cmp r1, 0
- beq _0812666C
- b _08126694
- .align 2, 0
-_08126650: .4byte gMain
-_08126654: .4byte gUnknown_203B0A0
-_08126658: .4byte gPlayerParty
-_0812665C: .4byte 0x0000fffe
-_08126660:
- ldr r0, _08126668 @ =0x0000ffff
- cmp r1, r0
- beq _08126674
- b _08126694
- .align 2, 0
-_08126668: .4byte 0x0000ffff
-_0812666C:
- adds r0, r5, 0
- bl sub_8126704
- b _0812669A
-_08126674:
- adds r0, r5, 0
- bl sub_8126770
- b _0812669A
-_0812667C:
- ldr r0, _0812668C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _08126690 @ =sub_81266A0
- str r0, [r1]
- b _0812669A
- .align 2, 0
-_0812668C: .4byte gTasks
-_08126690: .4byte sub_81266A0
-_08126694:
- adds r0, r5, 0
- bl sub_8126804
-_0812669A:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81265F8
-
- thumb_func_start sub_81266A0
-sub_81266A0: @ 81266A0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _081266D0 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081266D4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0
- bl MonTryLearningNewMove
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, _081266D8 @ =0x0000fffe
- cmp r1, r0
- beq _081266FE
- cmp r1, r0
- bgt _081266DC
- cmp r1, 0
- beq _081266E8
- b _081266F8
- .align 2, 0
-_081266D0: .4byte gUnknown_203B0A0
-_081266D4: .4byte gPlayerParty
-_081266D8: .4byte 0x0000fffe
-_081266DC:
- ldr r0, _081266E4 @ =0x0000ffff
- cmp r1, r0
- beq _081266F0
- b _081266F8
- .align 2, 0
-_081266E4: .4byte 0x0000ffff
-_081266E8:
- adds r0, r4, 0
- bl sub_8126704
- b _081266FE
-_081266F0:
- adds r0, r4, 0
- bl sub_8126770
- b _081266FE
-_081266F8:
- adds r0, r4, 0
- bl sub_8126804
-_081266FE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81266A0
-
- thumb_func_start sub_8126704
-sub_8126704: @ 8126704
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _08126748 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r6, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0812674C @ =gPlayerParty
- adds r7, r1, r0
- adds r0, r7, 0
- movs r1, 0
- movs r2, 0
- bl GetEvolutionTargetSpecies
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _08126754
- bl sub_811F070
- ldr r0, _08126750 @ =gCB2_AfterEvolution
- ldr r1, [r6]
- str r1, [r0]
- ldrb r3, [r6, 0x9]
- adds r0, r7, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl BeginEvolutionScene
- adds r0, r5, 0
- bl DestroyTask
- b _08126762
- .align 2, 0
-_08126748: .4byte gUnknown_203B0A0
-_0812674C: .4byte gPlayerParty
-_08126750: .4byte gCB2_AfterEvolution
-_08126754:
- ldr r0, _08126768 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812676C @ =sub_81255BC
- str r0, [r1]
-_08126762:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126768: .4byte gTasks
-_0812676C: .4byte sub_81255BC
- thumb_func_end sub_8126704
-
- thumb_func_start sub_8126770
-sub_8126770: @ 8126770
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _081267DC @ =gUnknown_203B0A0
- mov r8, r0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081267E0 @ =gPlayerParty
- adds r0, r1
- ldr r1, _081267E4 @ =gStringVar1
- bl GetMonNickname
- ldr r0, _081267E8 @ =gStringVar2
- ldr r6, _081267EC @ =gMoveToLearn
- ldrh r2, [r6]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _081267F0 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _081267F4 @ =gStringVar4
- ldr r1, _081267F8 @ =gUnknown_8416DF7
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldrh r0, [r6]
- mov r1, r8
- strh r0, [r1, 0xE]
- ldr r1, _081267FC @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126800 @ =sub_8125D88
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081267DC: .4byte gUnknown_203B0A0
-_081267E0: .4byte gPlayerParty
-_081267E4: .4byte gStringVar1
-_081267E8: .4byte gStringVar2
-_081267EC: .4byte gMoveToLearn
-_081267F0: .4byte gMoveNames
-_081267F4: .4byte gStringVar4
-_081267F8: .4byte gUnknown_8416DF7
-_081267FC: .4byte gTasks
-_08126800: .4byte sub_8125D88
- thumb_func_end sub_8126770
-
- thumb_func_start sub_8126804
-sub_8126804: @ 8126804
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r6, r0, 0
- adds r5, r1, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r5, 16
- lsrs r5, 16
- ldr r0, _08126870 @ =gUnknown_203B0A0
- mov r8, r0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08126874 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08126878 @ =gStringVar1
- bl GetMonNickname
- ldr r0, _0812687C @ =gStringVar2
- movs r1, 0xD
- muls r1, r5
- ldr r2, _08126880 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _08126884 @ =gStringVar4
- ldr r1, _08126888 @ =gUnknown_8416DB3
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- mov r0, r8
- strh r5, [r0, 0xE]
- ldr r1, _0812688C @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126890 @ =sub_8125CF4
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08126870: .4byte gUnknown_203B0A0
-_08126874: .4byte gPlayerParty
-_08126878: .4byte gStringVar1
-_0812687C: .4byte gStringVar2
-_08126880: .4byte gMoveNames
-_08126884: .4byte gStringVar4
-_08126888: .4byte gUnknown_8416DB3
-_0812688C: .4byte gTasks
-_08126890: .4byte sub_8125CF4
- thumb_func_end sub_8126804
-
- thumb_func_start sub_8126894
-sub_8126894: @ 8126894
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _081268C8 @ =gUnknown_203B09C
- ldr r2, [r1]
- movs r3, 0x86
- lsls r3, 2
- adds r1, r2, r3
- movs r3, 0
- strh r3, [r1]
- ldr r4, _081268CC @ =0x0000021a
- adds r1, r2, r4
- strh r3, [r1]
- ldr r1, _081268D0 @ =gUnknown_203B0A0
- ldrb r1, [r1, 0x9]
- lsls r1, 24
- asrs r1, 24
- movs r3, 0x87
- lsls r3, 2
- adds r2, r3
- strh r1, [r2]
- bl sub_81268D4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081268C8: .4byte gUnknown_203B09C
-_081268CC: .4byte 0x0000021a
-_081268D0: .4byte gUnknown_203B0A0
- thumb_func_end sub_8126894
-
- thumb_func_start sub_81268D4
-sub_81268D4: @ 81268D4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- mov r9, r4
- ldr r6, _08126930 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r6, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08126934 @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08126920
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldrb r0, [r6, 0x9]
- ldr r1, _08126938 @ =gSpecialVar_ItemId
- ldrh r1, [r1]
- movs r2, 0
- bl ExecuteTableBasedItemEffect__
- lsls r0, 24
- cmp r0, 0
- beq _08126944
-_08126920:
- ldr r0, _0812693C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08126940 @ =sub_8126A18
- str r0, [r1]
- b _081269EE
- .align 2, 0
-_08126930: .4byte gUnknown_203B0A0
-_08126934: .4byte gPlayerParty
-_08126938: .4byte gSpecialVar_ItemId
-_0812693C: .4byte gTasks
-_08126940: .4byte sub_8126A18
-_08126944:
- movs r0, 0x1
- bl PlaySE
- ldr r7, _08126A00 @ =gUnknown_203B09C
- ldr r0, [r7]
- ldr r1, _08126A04 @ =0x0000021a
- mov r10, r1
- add r0, r10
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0
- bne _08126960
- ldr r0, _08126A08 @ =gUnknown_203B0D0
- str r5, [r0]
-_08126960:
- ldr r4, _08126A0C @ =gUnknown_203B0B4
- movs r0, 0x9
- ldrsb r0, [r6, r0]
- lsls r0, 4
- ldr r1, [r4]
- adds r1, r0
- adds r0, r5, 0
- bl party_menu_get_status_condition_and_update_object
- ldr r2, _08126A10 @ =gSprites
- movs r0, 0x9
- ldrsb r0, [r6, r0]
- ldr r1, [r4]
- lsls r0, 4
- adds r3, r0, r1
- ldrb r1, [r3, 0xC]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _0812699C
- adds r0, r5, 0
- adds r1, r3, 0
- movs r2, 0x1
- bl sub_8121790
-_0812699C:
- ldr r0, [r7]
- movs r1, 0x87
- lsls r1, 2
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl sub_811F818
- ldrb r0, [r6, 0x9]
- movs r1, 0x1
- bl sub_811F818
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- mov r2, r8
- subs r3, r2
- lsls r3, 16
- asrs r3, 16
- ldrb r1, [r6, 0x9]
- ldr r0, _08126A14 @ =sub_8126AFC
- str r0, [sp]
- mov r0, r9
- movs r2, 0x1
- bl sub_8120760
- mov r0, r9
- movs r1, 0
- mov r2, r8
- bl sub_81207F0
- ldr r0, [r7]
- movs r2, 0x86
- lsls r2, 2
- adds r1, r0, r2
- movs r2, 0x1
- strh r2, [r1]
- add r0, r10
- strh r2, [r0]
-_081269EE:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126A00: .4byte gUnknown_203B09C
-_08126A04: .4byte 0x0000021a
-_08126A08: .4byte gUnknown_203B0D0
-_08126A0C: .4byte gUnknown_203B0B4
-_08126A10: .4byte gSprites
-_08126A14: .4byte sub_8126AFC
- thumb_func_end sub_81268D4
-
- thumb_func_start sub_8126A18
-sub_8126A18: @ 8126A18
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08126AF6
- ldr r5, _08126A80 @ =gUnknown_203B09C
- ldr r2, [r5]
- movs r0, 0x86
- lsls r0, 2
- adds r1, r2, r0
- movs r3, 0
- ldrsh r0, [r1, r3]
- ldr r3, _08126A84 @ =gUnknown_203B0A0
- cmp r0, 0x1
- bne _08126A4E
- movs r0, 0
- strh r0, [r1]
- movs r1, 0x9
- ldrsb r1, [r3, r1]
- movs r6, 0x87
- lsls r6, 2
- adds r0, r2, r6
- strh r1, [r0]
-_08126A4E:
- adds r1, r3, 0
- ldrb r0, [r1, 0x9]
- adds r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x6
- bne _08126AF0
- ldr r0, [r5]
- ldr r1, _08126A88 @ =0x0000021a
- adds r0, r1
- movs r2, 0
- ldrsh r1, [r0, r2]
- cmp r1, 0
- bne _08126A94
- ldr r0, _08126A8C @ =gUnknown_203B0C0
- strb r1, [r0]
- ldr r0, _08126A90 @ =gUnknown_84169DC
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- b _08126ABE
- .align 2, 0
-_08126A80: .4byte gUnknown_203B09C
-_08126A84: .4byte gUnknown_203B0A0
-_08126A88: .4byte 0x0000021a
-_08126A8C: .4byte gUnknown_203B0C0
-_08126A90: .4byte gUnknown_84169DC
-_08126A94:
- ldr r1, _08126AD4 @ =gUnknown_203B0C0
- movs r0, 0x1
- strb r0, [r1]
- ldrb r1, [r3, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- beq _08126AB4
- ldr r0, _08126AD8 @ =gUnknown_203B0D0
- ldr r1, [r0]
- ldr r0, _08126ADC @ =gSpecialVar_ItemId
- ldrh r2, [r0]
- ldr r3, _08126AE0 @ =0x0000ffff
- movs r0, 0x4
- bl ItemUse_SetQuestLogEvent
-_08126AB4:
- ldr r0, _08126ADC @ =gSpecialVar_ItemId
- ldrh r0, [r0]
- movs r1, 0x1
- bl RemoveBagItem
-_08126ABE:
- ldr r1, _08126AE4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126AE8 @ =sub_81255BC
- str r1, [r0]
- ldr r1, _08126AEC @ =gUnknown_203B0A0
- movs r0, 0
- strb r0, [r1, 0x9]
- b _08126AF6
- .align 2, 0
-_08126AD4: .4byte gUnknown_203B0C0
-_08126AD8: .4byte gUnknown_203B0D0
-_08126ADC: .4byte gSpecialVar_ItemId
-_08126AE0: .4byte 0x0000ffff
-_08126AE4: .4byte gTasks
-_08126AE8: .4byte sub_81255BC
-_08126AEC: .4byte gUnknown_203B0A0
-_08126AF0:
- adds r0, r4, 0
- bl sub_81268D4
-_08126AF6:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8126A18
-
- thumb_func_start sub_8126AFC
-sub_8126AFC: @ 8126AFC
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _08126B44 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08126B48 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08126B4C @ =gStringVar1
- bl GetMonNickname
- ldr r4, _08126B50 @ =gStringVar4
- ldr r1, _08126B54 @ =gUnknown_8416F27
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08126B58 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126B5C @ =sub_8126A18
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08126B44: .4byte gUnknown_203B0A0
-_08126B48: .4byte gPlayerParty
-_08126B4C: .4byte gStringVar1
-_08126B50: .4byte gStringVar4
-_08126B54: .4byte gUnknown_8416F27
-_08126B58: .4byte gTasks
-_08126B5C: .4byte sub_8126A18
- thumb_func_end sub_8126AFC
-
- thumb_func_start sub_8126B60
-sub_8126B60: @ 8126B60
- push {r4,r5,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x5
- bl PlaySE
- ldr r2, _08126BB0 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r2, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08126BB4 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08126BB8 @ =gSpecialVar_ItemId
- ldrh r1, [r1]
- ldrb r2, [r2, 0x9]
- movs r3, 0
- bl PokemonUseItemEffects2
- lsls r0, 24
- cmp r0, 0
- beq _08126BC8
- ldr r1, _08126BBC @ =gUnknown_203B0C0
- movs r0, 0
- strb r0, [r1]
- ldr r0, _08126BC0 @ =gUnknown_84169DC
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08126BC4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- str r5, [r0]
- b _08126BCE
- .align 2, 0
-_08126BB0: .4byte gUnknown_203B0A0
-_08126BB4: .4byte gPlayerParty
-_08126BB8: .4byte gSpecialVar_ItemId
-_08126BBC: .4byte gUnknown_203B0C0
-_08126BC0: .4byte gUnknown_84169DC
-_08126BC4: .4byte gTasks
-_08126BC8:
- adds r0, r4, 0
- bl sub_8124DC0
-_08126BCE:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8126B60
-
- thumb_func_start sub_8126BD4
-sub_8126BD4: @ 8126BD4
- push {r4,r5,lr}
- ldr r1, _08126C10 @ =gCB2_AfterEvolution
- ldr r4, _08126C14 @ =gUnknown_203B0A0
- ldr r0, [r4]
- str r0, [r1]
- ldrb r0, [r4, 0x9]
- ldr r5, _08126C18 @ =gSpecialVar_ItemId
- ldrh r1, [r5]
- movs r2, 0
- bl ExecuteTableBasedItemEffect__
- movs r1, 0x9
- ldrsb r1, [r4, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08126C1C @ =gPlayerParty
- adds r1, r0
- ldrh r2, [r5]
- ldr r3, _08126C20 @ =0x0000ffff
- movs r0, 0x4
- bl ItemUse_SetQuestLogEvent
- ldrh r0, [r5]
- movs r1, 0x1
- bl RemoveBagItem
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08126C10: .4byte gCB2_AfterEvolution
-_08126C14: .4byte gUnknown_203B0A0
-_08126C18: .4byte gSpecialVar_ItemId
-_08126C1C: .4byte gPlayerParty
-_08126C20: .4byte 0x0000ffff
- thumb_func_end sub_8126BD4
-
- thumb_func_start sub_8126C24
-sub_8126C24: @ 8126C24
- push {lr}
- bl IsNationalPokedexEnabled
- cmp r0, 0
- bne _08126C60
- ldr r0, _08126C54 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08126C58 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08126C5C @ =gSpecialVar_ItemId
- ldrh r2, [r1]
- movs r1, 0x2
- bl GetEvolutionTargetSpecies
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x97
- bls _08126C60
- movs r0, 0
- b _08126C62
- .align 2, 0
-_08126C54: .4byte gUnknown_203B0A0
-_08126C58: .4byte gPlayerParty
-_08126C5C: .4byte gSpecialVar_ItemId
-_08126C60:
- movs r0, 0x1
-_08126C62:
- pop {r1}
- bx r1
- thumb_func_end sub_8126C24
-
- thumb_func_start GetItemEffectType
-GetItemEffectType: @ 8126C68
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r1, r0, 16
- adds r2, r1, 0
- subs r2, 0xD
- lsls r0, r2, 16
- lsrs r0, 16
- cmp r0, 0xA5
- bls _08126C7C
- b _08126DBC
-_08126C7C:
- cmp r1, 0xAF
- bne _08126C94
- ldr r0, _08126C8C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08126C90 @ =0x00003108
- adds r4, r0, r1
- b _08126C9C
- .align 2, 0
-_08126C8C: .4byte gSaveBlock1Ptr
-_08126C90: .4byte 0x00003108
-_08126C94:
- ldr r1, _08126CC4 @ =gItemEffectTable
- lsls r0, r2, 2
- adds r0, r1
- ldr r4, [r0]
-_08126C9C:
- ldrb r1, [r4]
- movs r5, 0x3F
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08126CBE
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08126CBE
- ldrb r0, [r4, 0x2]
- cmp r0, 0
- bne _08126CBE
- ldrb r3, [r4, 0x3]
- movs r0, 0x80
- ands r0, r3
- cmp r0, 0
- beq _08126CC8
-_08126CBE:
- movs r0, 0
- b _08126DC2
- .align 2, 0
-_08126CC4: .4byte gItemEffectTable
-_08126CC8:
- movs r2, 0x40
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _08126CD6
- movs r0, 0xA
- b _08126DC2
-_08126CD6:
- adds r0, r2, 0
- ands r0, r3
- cmp r0, 0
- beq _08126CE2
- movs r0, 0x1
- b _08126DC2
-_08126CE2:
- adds r2, r5, 0
- ands r2, r3
- cmp r2, 0
- bne _08126CF0
- lsrs r0, r1, 7
- cmp r0, 0
- beq _08126D32
-_08126CF0:
- cmp r2, 0x20
- bne _08126CF8
- movs r0, 0x4
- b _08126DC2
-_08126CF8:
- cmp r2, 0x10
- bne _08126D00
- movs r0, 0x3
- b _08126DC2
-_08126D00:
- cmp r2, 0x8
- bne _08126D08
- movs r0, 0x5
- b _08126DC2
-_08126D08:
- cmp r2, 0x4
- bne _08126D10
- movs r0, 0x6
- b _08126DC2
-_08126D10:
- cmp r2, 0x2
- bne _08126D18
- movs r0, 0x7
- b _08126DC2
-_08126D18:
- cmp r2, 0x1
- bne _08126D20
- movs r0, 0x8
- b _08126DC2
-_08126D20:
- lsrs r0, r1, 7
- cmp r0, 0
- beq _08126D2E
- cmp r2, 0
- bne _08126D2E
- movs r0, 0x9
- b _08126DC2
-_08126D2E:
- movs r0, 0xB
- b _08126DC2
-_08126D32:
- ldrb r1, [r4, 0x4]
- movs r0, 0x44
- ands r0, r1
- adds r2, r1, 0
- cmp r0, 0
- beq _08126D42
- movs r0, 0x2
- b _08126DC2
-_08126D42:
- movs r5, 0x2
- adds r0, r5, 0
- ands r0, r2
- cmp r0, 0
- beq _08126D50
- movs r0, 0xC
- b _08126DC2
-_08126D50:
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r2
- cmp r0, 0
- beq _08126D5E
- movs r0, 0xD
- b _08126DC2
-_08126D5E:
- ldrb r1, [r4, 0x5]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08126D6C
- movs r0, 0xE
- b _08126DC2
-_08126D6C:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08126D78
- movs r0, 0xF
- b _08126DC2
-_08126D78:
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _08126D84
- movs r0, 0x10
- b _08126DC2
-_08126D84:
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _08126D90
- movs r0, 0x11
- b _08126DC2
-_08126D90:
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _08126D9C
- movs r0, 0x12
- b _08126DC2
-_08126D9C:
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- beq _08126DA8
- movs r0, 0x13
- b _08126DC2
-_08126DA8:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08126DB4
- movs r0, 0x14
- b _08126DC2
-_08126DB4:
- movs r0, 0x18
- ands r0, r2
- cmp r0, 0
- bne _08126DC0
-_08126DBC:
- movs r0, 0x16
- b _08126DC2
-_08126DC0:
- movs r0, 0x15
-_08126DC2:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetItemEffectType
-
- thumb_func_start sub_8126DC8
-sub_8126DC8: @ 8126DC8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08126E4C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08126E98
- ldr r7, _08126E50 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r7, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08126E54 @ =gPlayerParty
- adds r5, r1, r0
- movs r0, 0xE
- adds r0, r7
- mov r8, r0
- ldr r1, _08126E58 @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNickname
- ldr r4, _08126E5C @ =gSpecialVar_0x8005
- ldrb r0, [r4]
- bl GetMoveTutorMove
- strh r0, [r7, 0xE]
- ldr r0, _08126E60 @ =gStringVar2
- movs r1, 0xE
- ldrsh r2, [r7, r1]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _08126E64 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- movs r0, 0x2
- mov r1, r8
- strh r0, [r1, 0x2]
- ldrb r2, [r4]
- adds r0, r5, 0
- movs r1, 0
- bl sub_8120B20
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08126E6C
- cmp r0, 0x2
- beq _08126E74
- ldrh r1, [r7, 0xE]
- adds r0, r5, 0
- bl GiveMoveToMon
- lsls r0, 16
- ldr r1, _08126E68 @ =0xffff0000
- cmp r0, r1
- beq _08126E84
- adds r0, r6, 0
- bl sub_8125C48
- b _08126E98
- .align 2, 0
-_08126E4C: .4byte gPaletteFade
-_08126E50: .4byte gUnknown_203B0A0
-_08126E54: .4byte gPlayerParty
-_08126E58: .4byte gStringVar1
-_08126E5C: .4byte gSpecialVar_0x8005
-_08126E60: .4byte gStringVar2
-_08126E64: .4byte gMoveNames
-_08126E68: .4byte 0xffff0000
-_08126E6C:
- ldr r1, _08126E70 @ =gUnknown_8416DC2
- b _08126E76
- .align 2, 0
-_08126E70: .4byte gUnknown_8416DC2
-_08126E74:
- ldr r1, _08126E80 @ =gUnknown_8416F10
-_08126E76:
- adds r0, r6, 0
- bl sub_8125B14
- b _08126E98
- .align 2, 0
-_08126E80: .4byte gUnknown_8416F10
-_08126E84:
- ldr r0, _08126EA4 @ =gUnknown_8416DF7
- bl sub_8125AF0
- ldr r1, _08126EA8 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126EAC @ =sub_8125D88
- str r1, [r0]
-_08126E98:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126EA4: .4byte gUnknown_8416DF7
-_08126EA8: .4byte gTasks
-_08126EAC: .4byte sub_8125D88
- thumb_func_end sub_8126DC8
-
- thumb_func_start CB2_PartyMenuFromStartMenu
-CB2_PartyMenuFromStartMenu: @ 8126EB0
- push {lr}
- sub sp, 0xC
- movs r0, 0
- str r0, [sp]
- ldr r0, _08126ED4 @ =sub_811FB28
- str r0, [sp, 0x4]
- ldr r0, _08126ED8 @ =CB2_ReturnToStartMenu
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08126ED4: .4byte sub_811FB28
-_08126ED8: .4byte CB2_ReturnToStartMenu
- thumb_func_end CB2_PartyMenuFromStartMenu
-
- thumb_func_start sub_8126EDC
-sub_8126EDC: @ 8126EDC
- push {lr}
- sub sp, 0xC
- ldr r0, _08126EF8 @ =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl GetPocketByItemId
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- beq _08126F00
- cmp r0, 0x5
- beq _08126F08
- ldr r1, _08126EFC @ =sub_8124D90
- b _08126F0A
- .align 2, 0
-_08126EF8: .4byte gSpecialVar_ItemId
-_08126EFC: .4byte sub_8124D90
-_08126F00:
- ldr r1, _08126F04 @ =sub_8124DA0
- b _08126F0A
- .align 2, 0
-_08126F04: .4byte sub_8124DA0
-_08126F08:
- ldr r1, _08126F30 @ =sub_8124DB0
-_08126F0A:
- movs r0, 0x6
- str r0, [sp]
- ldr r0, _08126F34 @ =sub_811FB28
- str r0, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0x5
- movs r3, 0
- bl PartyMenuInit
- ldr r1, _08126F38 @ =gUnknown_203B0A0
- ldr r0, _08126F3C @ =gSpecialVar_ItemId
- ldrh r0, [r0]
- strh r0, [r1, 0xC]
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08126F30: .4byte sub_8124DB0
-_08126F34: .4byte sub_811FB28
-_08126F38: .4byte gUnknown_203B0A0
-_08126F3C: .4byte gSpecialVar_ItemId
- thumb_func_end sub_8126EDC
-
- thumb_func_start sub_8126F40
-sub_8126F40: @ 8126F40
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- ldr r5, _08126F80 @ =gUnknown_203B0D8
- ldr r0, _08126F84 @ =gUnknown_203B0A0
- mov r9, r0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x64
- mov r8, r1
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- ldr r7, _08126F88 @ =gPlayerParty
- adds r0, r7
- movs r1, 0xC
- bl GetMonData
- strh r0, [r5]
- lsls r0, 16
- cmp r0, 0
- bne _08126F8C
- adds r0, r4, 0
- bl sub_8126FD8
- b _08126FC4
- .align 2, 0
-_08126F80: .4byte gUnknown_203B0D8
-_08126F84: .4byte gUnknown_203B0A0
-_08126F88: .4byte gPlayerParty
-_08126F8C:
- ldrh r0, [r5]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _08126FA0
- adds r0, r4, 0
- bl sub_812734C
- b _08126FC4
-_08126FA0:
- mov r1, r9
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- ldrh r1, [r5]
- movs r2, 0x1
- bl sub_812050C
- ldr r1, _08126FD0 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126FD4 @ =sub_8127234
- str r1, [r0]
-_08126FC4:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126FD0: .4byte gTasks
-_08126FD4: .4byte sub_8127234
- thumb_func_end sub_8126F40
-
- thumb_func_start sub_8126FD8
-sub_8126FD8: @ 8126FD8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, _08127004 @ =gUnknown_203B0A0
- ldrh r0, [r5, 0xC]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _08127010
- ldrh r0, [r5, 0xC]
- bl sub_8127384
- ldr r0, _08127008 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _0812700C @ =sub_81270E0
- str r0, [r1, 0x4]
- adds r0, r4, 0
- bl sub_811FA78
- b _08127016
- .align 2, 0
-_08127004: .4byte gUnknown_203B0A0
-_08127008: .4byte gUnknown_203B09C
-_0812700C: .4byte sub_81270E0
-_08127010:
- adds r0, r4, 0
- bl sub_812701C
-_08127016:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8126FD8
-
- thumb_func_start sub_812701C
-sub_812701C: @ 812701C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08127084 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08127078
- ldr r4, _08127088 @ =gUnknown_203B0A0
- ldrh r5, [r4, 0xC]
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- movs r1, 0x64
- mov r8, r1
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- ldr r6, _0812708C @ =gPlayerParty
- adds r0, r6
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0x1
- bl sub_8120420
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- adds r1, r5, 0
- bl sub_81205C8
- adds r0, r5, 0
- bl sub_8127384
- ldr r1, _08127090 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _08127094 @ =sub_8127098
- str r1, [r0]
-_08127078:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08127084: .4byte gPaletteFade
-_08127088: .4byte gUnknown_203B0A0
-_0812708C: .4byte gPlayerParty
-_08127090: .4byte gTasks
-_08127094: .4byte sub_8127098
- thumb_func_end sub_812701C
-
- thumb_func_start sub_8127098
-sub_8127098: @ 8127098
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _081270D4 @ =gUnknown_203B0A0
- ldrb r4, [r0, 0x9]
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081270CC
- lsls r2, r4, 24
- asrs r2, 24
- movs r0, 0x64
- muls r0, r2
- ldr r1, _081270D8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _081270DC @ =gUnknown_203B0B4
- lsls r2, 4
- ldr r1, [r1]
- adds r1, r2
- bl sub_81224B4
- adds r0, r5, 0
- bl sub_811FA78
-_081270CC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081270D4: .4byte gUnknown_203B0A0
-_081270D8: .4byte gPlayerParty
-_081270DC: .4byte gUnknown_203B0B4
- thumb_func_end sub_8127098
-
- thumb_func_start sub_81270E0
-sub_81270E0: @ 81270E0
- push {r4-r6,lr}
- ldr r4, _08127128 @ =gUnknown_203B0A0
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _0812712C @ =gPlayerParty
- adds r0, r5
- ldrh r1, [r4, 0xC]
- bl sub_81205C8
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- muls r0, r6
- adds r0, r5
- movs r1, 0x40
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08127130 @ =gSaveBlock1Ptr
- lsls r2, r0, 3
- adds r2, r0
- lsls r2, 2
- ldr r0, _08127134 @ =0x00002cd0
- adds r2, r0
- ldr r1, [r1]
- adds r1, r2
- ldr r2, _08127138 @ =sub_812713C
- movs r0, 0x4
- bl sub_80FEBAC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08127128: .4byte gUnknown_203B0A0
-_0812712C: .4byte gPlayerParty
-_08127130: .4byte gSaveBlock1Ptr
-_08127134: .4byte 0x00002cd0
-_08127138: .4byte sub_812713C
- thumb_func_end sub_81270E0
-
- thumb_func_start sub_812713C
-sub_812713C: @ 812713C
- push {r4-r7,lr}
- sub sp, 0xC
- ldr r6, _0812718C @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r6, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08127190 @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- ldr r0, _08127194 @ =gSpecialVar_Result
- ldrh r0, [r0]
- cmp r0, 0
- bne _0812719C
- adds r0, r5, 0
- bl TakeMailFromMon
- ldr r4, _08127198 @ =gUnknown_203B0D8
- adds r0, r5, 0
- movs r1, 0xC
- adds r2, r4, 0
- bl SetMonData
- ldrh r0, [r4]
- movs r1, 0x1
- bl RemoveBagItem
- adds r0, r7, 0
- bl sub_81273AC
- ldr r0, [r6]
- bl SetMainCallback2
- b _081271B8
- .align 2, 0
-_0812718C: .4byte gUnknown_203B0A0
-_08127190: .4byte gPlayerParty
-_08127194: .4byte gSpecialVar_Result
-_08127198: .4byte gUnknown_203B0D8
-_0812719C:
- ldrb r0, [r6, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r6, 0xB]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _081271C0 @ =sub_81271C4
- str r1, [sp, 0x4]
- ldr r1, [r6]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl PartyMenuInit
-_081271B8:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081271C0: .4byte sub_81271C4
- thumb_func_end sub_812713C
-
- thumb_func_start sub_81271C4
-sub_81271C4: @ 81271C4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _081271EC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0812721E
- ldr r1, _081271F0 @ =gUnknown_203B0D8
- ldrh r0, [r1]
- cmp r0, 0
- beq _081271F8
- ldr r0, _081271F4 @ =gUnknown_203B0A0
- ldrh r0, [r0, 0xC]
- ldrh r1, [r1]
- movs r2, 0
- bl sub_8120558
- b _08127210
- .align 2, 0
-_081271EC: .4byte gPaletteFade
-_081271F0: .4byte gUnknown_203B0D8
-_081271F4: .4byte gUnknown_203B0A0
-_081271F8:
- ldr r2, _08127224 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r2, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08127228 @ =gPlayerParty
- adds r0, r1
- ldrh r1, [r2, 0xC]
- movs r2, 0
- movs r3, 0x1
- bl sub_8120420
-_08127210:
- ldr r0, _0812722C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08127230 @ =sub_8127098
- str r0, [r1]
-_0812721E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127224: .4byte gUnknown_203B0A0
-_08127228: .4byte gPlayerParty
-_0812722C: .4byte gTasks
-_08127230: .4byte sub_8127098
- thumb_func_end sub_81271C4
-
- thumb_func_start sub_8127234
-sub_8127234: @ 8127234
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8120370
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08127258
- bl sub_812200C
- ldr r0, _08127260 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08127264 @ =sub_8127268
- str r0, [r1]
-_08127258:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127260: .4byte gTasks
-_08127264: .4byte sub_8127268
- thumb_func_end sub_8127234
-
- thumb_func_start sub_8127268
-sub_8127268: @ 8127268
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0812728E
- cmp r1, 0
- bgt _08127288
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08127328
- b _0812733C
-_08127288:
- cmp r1, 0x1
- beq _0812732E
- b _0812733C
-_0812728E:
- ldr r7, _081272C0 @ =gUnknown_203B0A0
- ldrh r4, [r7, 0xC]
- adds r0, r4, 0
- bl sub_8127384
- ldr r6, _081272C4 @ =gUnknown_203B0D8
- ldrh r0, [r6]
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- cmp r0, 0
- bne _081272CC
- adds r0, r4, 0
- bl sub_81273AC
- ldrh r0, [r6]
- bl sub_8120658
- ldr r0, _081272C8 @ =gStringVar4
- movs r1, 0
- bl sub_81202F8
- b _0812730C
- .align 2, 0
-_081272C0: .4byte gUnknown_203B0A0
-_081272C4: .4byte gUnknown_203B0D8
-_081272C8: .4byte gStringVar4
-_081272CC:
- adds r0, r4, 0
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _081272F0
- ldr r0, _081272E8 @ =gUnknown_203B09C
- ldr r1, [r0]
- ldr r0, _081272EC @ =sub_81270E0
- str r0, [r1, 0x4]
- adds r0, r5, 0
- bl sub_811FA78
- b _0812733C
- .align 2, 0
-_081272E8: .4byte gUnknown_203B09C
-_081272EC: .4byte sub_81270E0
-_081272F0:
- movs r1, 0x9
- ldrsb r1, [r7, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0812731C @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- bl sub_81205C8
- ldrh r1, [r6]
- adds r0, r4, 0
- movs r2, 0x1
- bl sub_8120558
-_0812730C:
- ldr r1, _08127320 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _08127324 @ =sub_8127098
- str r1, [r0]
- b _0812733C
- .align 2, 0
-_0812731C: .4byte gPlayerParty
-_08127320: .4byte gTasks
-_08127324: .4byte sub_8127098
-_08127328:
- movs r0, 0x5
- bl PlaySE
-_0812732E:
- ldr r0, _08127344 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _08127348 @ =sub_8127098
- str r0, [r1]
-_0812733C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08127344: .4byte gTasks
-_08127348: .4byte sub_8127098
- thumb_func_end sub_8127268
-
- thumb_func_start sub_812734C
-sub_812734C: @ 812734C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08127378 @ =gUnknown_8416BFB
- movs r1, 0x1
- bl sub_81202F8
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _0812737C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08127380 @ =sub_8127098
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127378: .4byte gUnknown_8416BFB
-_0812737C: .4byte gTasks
-_08127380: .4byte sub_8127098
- thumb_func_end sub_812734C
-
- thumb_func_start sub_8127384
-sub_8127384: @ 8127384
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, _0812739C @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0x6
- bne _081273A0
- adds r0, r1, 0
- movs r1, 0x1
- bl RemoveItemFromPC
- b _081273A8
- .align 2, 0
-_0812739C: .4byte gUnknown_203B0A0
-_081273A0:
- adds r0, r1, 0
- movs r1, 0x1
- bl RemoveBagItem
-_081273A8:
- pop {r0}
- bx r0
- thumb_func_end sub_8127384
-
- thumb_func_start sub_81273AC
-sub_81273AC: @ 81273AC
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, _081273C4 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0x5
- beq _081273C8
- adds r0, r1, 0
- movs r1, 0x1
- bl AddPCItem
- b _081273D0
- .align 2, 0
-_081273C4: .4byte gUnknown_203B0A0
-_081273C8:
- adds r0, r1, 0
- movs r1, 0x1
- bl AddBagItem
-_081273D0:
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_81273AC
-
- thumb_func_start PartyMenuInit_FromPlayerPc
-PartyMenuInit_FromPlayerPc: @ 81273D8
- push {lr}
- sub sp, 0xC
- movs r0, 0x6
- str r0, [sp]
- ldr r0, _081273FC @ =sub_811FB28
- str r0, [sp, 0x4]
- ldr r0, _08127400 @ =CB2_PlayerPC_ReturnFromPartyMenu
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0x7
- movs r3, 0
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081273FC: .4byte sub_811FB28
-_08127400: .4byte CB2_PlayerPC_ReturnFromPartyMenu
- thumb_func_end PartyMenuInit_FromPlayerPc
-
- thumb_func_start sub_8127404
-sub_8127404: @ 8127404
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08127450 @ =gUnknown_203B0A0
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08127454 @ =gPlayerParty
- adds r5, r1, r0
- ldr r1, _08127458 @ =gUnknown_203B0C0
- movs r0, 0
- strb r0, [r1]
- ldr r2, _0812745C @ =gSaveBlock1Ptr
- ldr r0, _08127460 @ =gPlayerPcMenuManager
- ldrh r1, [r0]
- adds r1, 0x6
- ldrh r0, [r0, 0x2]
- adds r1, r0
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08127464 @ =0x00002cd0
- adds r0, r1
- ldr r1, [r2]
- adds r4, r1, r0
- adds r0, r5, 0
- movs r1, 0xC
- bl GetMonData
- cmp r0, 0
- beq _0812746C
- ldr r0, _08127468 @ =gUnknown_8416D17
- movs r1, 0x1
- bl sub_81202F8
- b _08127482
- .align 2, 0
-_08127450: .4byte gUnknown_203B0A0
-_08127454: .4byte gPlayerParty
-_08127458: .4byte gUnknown_203B0C0
-_0812745C: .4byte gSaveBlock1Ptr
-_08127460: .4byte gPlayerPcMenuManager
-_08127464: .4byte 0x00002cd0
-_08127468: .4byte gUnknown_8416D17
-_0812746C:
- adds r0, r5, 0
- adds r1, r4, 0
- bl GiveMailToMon2
- adds r0, r4, 0
- bl ClearMailStruct
- ldr r0, _0812749C @ =gUnknown_8416D4F
- movs r1, 0x1
- bl sub_81202F8
-_08127482:
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r0, _081274A0 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _081274A4 @ =sub_8127098
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812749C: .4byte gUnknown_8416D4F
-_081274A0: .4byte gTasks
-_081274A4: .4byte sub_8127098
- thumb_func_end sub_8127404
-
- thumb_func_start sub_81274A8
-sub_81274A8: @ 81274A8
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_81274FC
- movs r0, 0
- str r0, [sp]
- ldr r0, _081274EC @ =sub_811FB28
- str r0, [sp, 0x4]
- ldr r0, _081274F0 @ =gMain
- ldr r0, [r0, 0x8]
- str r0, [sp, 0x8]
- movs r0, 0x4
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl PartyMenuInit
- ldr r1, _081274F4 @ =gUnknown_203B0A0
- lsls r4, 6
- ldrb r2, [r1, 0x8]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x8]
- ldr r0, _081274F8 @ =sub_812773C
- str r0, [r1, 0x4]
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081274EC: .4byte sub_811FB28
-_081274F0: .4byte gMain
-_081274F4: .4byte gUnknown_203B0A0
-_081274F8: .4byte sub_812773C
- thumb_func_end sub_81274A8
-
- thumb_func_start sub_81274FC
-sub_81274FC: @ 81274FC
- push {lr}
- ldr r0, _0812750C @ =gSelectedOrderFromParty
- movs r1, 0
- movs r2, 0x3
- bl memset
- pop {r0}
- bx r0
- .align 2, 0
-_0812750C: .4byte gSelectedOrderFromParty
- thumb_func_end sub_81274FC
-
- thumb_func_start sub_8127510
-sub_8127510: @ 8127510
- push {r4,lr}
- lsls r0, 24
- asrs r4, r0, 24
- movs r0, 0x64
- muls r0, r4
- ldr r1, _0812752C @ =gPlayerParty
- adds r0, r1
- bl sub_8127550
- lsls r0, 24
- cmp r0, 0
- bne _08127530
- movs r0, 0x2
- b _08127548
- .align 2, 0
-_0812752C: .4byte gPlayerParty
-_08127530:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r0, 24
- bl sub_8127710
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08127546
- movs r0, 0
- b _08127548
-_08127546:
- movs r0, 0x1
-_08127548:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8127510
-
- thumb_func_start sub_8127550
-sub_8127550: @ 8127550
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r5, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0812757A
- ldr r0, _08127580 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x8]
- lsrs r1, r0, 6
- cmp r1, 0
- beq _08127584
- cmp r1, 0x1
- beq _08127592
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x1E
- bls _081275E0
-_0812757A:
- movs r0, 0
- b _081275E2
- .align 2, 0
-_08127580: .4byte gUnknown_203B0A0
-_08127584:
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _081275E0
- b _0812757A
-_08127592:
- ldr r0, _081275E8 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r2, _081275EC @ =0x0000055c
- adds r0, r2
- ldrb r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _081275AE
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x32
- bhi _0812757A
-_081275AE:
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r3, _081275F0 @ =gBattleTowerBannedSpecies
- lsls r1, r5, 1
- adds r0, r1, r3
- ldrh r0, [r0]
- ldr r2, _081275F4 @ =0x0000ffff
- cmp r0, r2
- beq _081275E0
-_081275C8:
- adds r0, r1, r3
- ldrh r0, [r0]
- cmp r0, r4
- beq _0812757A
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r1, r5, 1
- adds r0, r1, r3
- ldrh r0, [r0]
- cmp r0, r2
- bne _081275C8
-_081275E0:
- movs r0, 0x1
-_081275E2:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_081275E8: .4byte gSaveBlock2Ptr
-_081275EC: .4byte 0x0000055c
-_081275F0: .4byte gBattleTowerBannedSpecies
-_081275F4: .4byte 0x0000ffff
- thumb_func_end sub_8127550
-
- thumb_func_start sub_81275F8
-sub_81275F8: @ 81275F8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _08127618 @ =gPlayerParty
- mov r10, r0
- ldr r0, _0812761C @ =gUnknown_203B0A0
- ldrb r0, [r0, 0x8]
- lsrs r0, 6
- cmp r0, 0x1
- beq _08127620
- cmp r0, 0x2
- beq _081276E8
- b _08127700
- .align 2, 0
-_08127618: .4byte gPlayerParty
-_0812761C: .4byte gUnknown_203B0A0
-_08127620:
- ldr r1, _0812762C @ =gSelectedOrderFromParty
- ldrb r0, [r1, 0x2]
- cmp r0, 0
- bne _08127630
- movs r0, 0x11
- b _08127702
- .align 2, 0
-_0812762C: .4byte gSelectedOrderFromParty
-_08127630:
- movs r5, 0
-_08127632:
- ldr r2, _081276DC @ =gSelectedOrderFromParty
- adds r4, r2, r5
- ldrb r0, [r4]
- movs r1, 0x64
- muls r0, r1
- subs r0, 0x64
- add r0, r10
- movs r1, 0xB
- bl GetMonData
- ldr r2, _081276E0 @ =gUnknown_203B09C
- ldr r1, [r2]
- ldr r2, _081276E4 @ =0x00000236
- adds r1, r2
- strh r0, [r1]
- ldrb r0, [r4]
- movs r1, 0x64
- muls r0, r1
- subs r0, 0x64
- add r0, r10
- movs r1, 0xC
- bl GetMonData
- ldr r2, _081276E0 @ =gUnknown_203B09C
- ldr r1, [r2]
- movs r2, 0x8D
- lsls r2, 2
- adds r1, r2
- strh r0, [r1]
- adds r1, r5, 0x1
- lsls r0, r1, 24
- lsrs r5, r0, 24
- mov r9, r1
- cmp r5, 0x2
- bhi _081276D0
- ldr r0, _081276E0 @ =gUnknown_203B09C
- mov r8, r0
- movs r7, 0x64
-_0812767E:
- mov r1, r8
- ldr r0, [r1]
- ldr r2, _081276E4 @ =0x00000236
- adds r0, r2
- movs r1, 0
- ldrsh r4, [r0, r1]
- ldr r2, _081276DC @ =gSelectedOrderFromParty
- adds r6, r2, r5
- ldrb r0, [r6]
- muls r0, r7
- subs r0, 0x64
- add r0, r10
- movs r1, 0xB
- bl GetMonData
- cmp r4, r0
- beq _081276F8
- mov r1, r8
- ldr r0, [r1]
- movs r2, 0x8D
- lsls r2, 2
- adds r1, r0, r2
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _081276C6
- adds r4, r0, 0
- ldrb r0, [r6]
- muls r0, r7
- subs r0, 0x64
- add r0, r10
- movs r1, 0xC
- bl GetMonData
- cmp r4, r0
- beq _081276FC
-_081276C6:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _0812767E
-_081276D0:
- mov r1, r9
- lsls r0, r1, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bls _08127632
- b _08127700
- .align 2, 0
-_081276DC: .4byte gSelectedOrderFromParty
-_081276E0: .4byte gUnknown_203B09C
-_081276E4: .4byte 0x00000236
-_081276E8:
- ldr r2, _081276F4 @ =gSelectedOrderFromParty
- ldrb r0, [r2, 0x1]
- cmp r0, 0
- bne _08127700
- movs r0, 0x12
- b _08127702
- .align 2, 0
-_081276F4: .4byte gSelectedOrderFromParty
-_081276F8:
- movs r0, 0x13
- b _08127702
-_081276FC:
- movs r0, 0x14
- b _08127702
-_08127700:
- movs r0, 0xFF
-_08127702:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_81275F8
-
- thumb_func_start sub_8127710
-sub_8127710: @ 8127710
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- ldr r3, _08127728 @ =gSelectedOrderFromParty
-_0812771A:
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, r2
- bne _0812772C
- movs r0, 0x1
- b _08127738
- .align 2, 0
-_08127728: .4byte gSelectedOrderFromParty
-_0812772C:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x2
- bls _0812771A
- movs r0, 0
-_08127738:
- pop {r1}
- bx r1
- thumb_func_end sub_8127710
-
- thumb_func_start sub_812773C
-sub_812773C: @ 812773C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- bl sub_81275F8
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xFF
- beq _08127768
- movs r0, 0x1A
- bl PlaySE
- adds r0, r4, 0
- bl sub_8121D0C
- ldr r0, _08127764 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- b _08127796
- .align 2, 0
-_08127764: .4byte gTasks
-_08127768:
- ldr r0, _08127780 @ =gSelectedOrderFromParty
- ldrb r0, [r0]
- cmp r0, 0
- beq _08127784
- movs r0, 0x5
- bl PlaySE
- adds r0, r5, 0
- bl sub_811FA78
- b _0812779E
- .align 2, 0
-_08127780: .4byte gSelectedOrderFromParty
-_08127784:
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0xE
- bl sub_8121D0C
- ldr r0, _081277A4 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
-_08127796:
- lsls r1, 3
- adds r1, r0
- ldr r0, _081277A8 @ =sub_81277AC
- str r0, [r1]
-_0812779E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081277A4: .4byte gTasks
-_081277A8: .4byte sub_81277AC
- thumb_func_end sub_812773C
-
- thumb_func_start sub_81277AC
-sub_81277AC: @ 81277AC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _081277E8 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _081277C6
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081277E0
-_081277C6:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0
- bl sub_8121D0C
- ldr r0, _081277EC @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _081277F0 @ =sub_811FB28
- str r0, [r1]
-_081277E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081277E8: .4byte gMain
-_081277EC: .4byte gTasks
-_081277F0: .4byte sub_811FB28
- thumb_func_end sub_81277AC
-
- thumb_func_start sub_81277F4
-sub_81277F4: @ 81277F4
- push {lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0
- str r2, [sp]
- ldr r2, _08127818 @ =sub_811FB28
- str r2, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08127818: .4byte sub_811FB28
- thumb_func_end sub_81277F4
-
- thumb_func_start sub_812781C
-sub_812781C: @ 812781C
- push {lr}
- sub sp, 0xC
- ldr r0, _08127844 @ =gSpecialVar_0x8005
- ldrh r0, [r0]
- cmp r0, 0xE
- bhi _08127850
- movs r0, 0x4
- str r0, [sp]
- ldr r0, _08127848 @ =sub_811FB28
- str r0, [sp, 0x4]
- ldr r0, _0812784C @ =CB2_ReturnToFieldContinueScriptPlayMapMusic
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0xC
- movs r3, 0
- bl PartyMenuInit
- b _08127870
- .align 2, 0
-_08127844: .4byte gSpecialVar_0x8005
-_08127848: .4byte sub_811FB28
-_0812784C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
-_08127850:
- movs r0, 0x7F
- str r0, [sp]
- ldr r0, _08127878 @ =sub_8126DC8
- str r0, [sp, 0x4]
- ldr r0, _0812787C @ =CB2_ReturnToFieldContinueScriptPlayMapMusic
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0xC
- movs r3, 0
- bl PartyMenuInit
- ldr r1, _08127880 @ =gUnknown_203B0A0
- ldr r0, _08127884 @ =gSpecialVar_0x8007
- ldrh r0, [r0]
- strb r0, [r1, 0x9]
-_08127870:
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08127878: .4byte sub_8126DC8
-_0812787C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
-_08127880: .4byte gUnknown_203B0A0
-_08127884: .4byte gSpecialVar_0x8007
- thumb_func_end sub_812781C
-
- thumb_func_start sub_8127888
-sub_8127888: @ 8127888
- push {lr}
- sub sp, 0xC
- movs r0, 0x1
- str r0, [sp]
- ldr r0, _081278AC @ =sub_811FB28
- str r0, [sp, 0x4]
- ldr r0, _081278B0 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic
- str r0, [sp, 0x8]
- movs r0, 0xB
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081278AC: .4byte sub_811FB28
-_081278B0: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
- thumb_func_end sub_8127888
-
- thumb_func_start sub_81278B4
-sub_81278B4: @ 81278B4
- push {lr}
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _081278C4
- movs r0, 0
- b _081278D6
-_081278C4:
- bl IsMultiBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081278D4
- movs r0, 0x1
- b _081278D6
-_081278D4:
- movs r0, 0x2
-_081278D6:
- pop {r1}
- bx r1
- thumb_func_end sub_81278B4
-
- thumb_func_start OpenPartyMenuInBattle
-OpenPartyMenuInBattle: @ 81278DC
- push {r4,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x8
- bl sub_80EB2E0
- lsls r0, 24
- cmp r0, 0
- bne _08127930
- ldr r0, _08127924 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08127930
- bl sub_81278B4
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x7F
- str r0, [sp]
- ldr r0, _08127928 @ =sub_8120C3C
- str r0, [sp, 0x4]
- ldr r0, _0812792C @ =SetCB2ToReshowScreenAfterMenu
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r2, r4, 0
- movs r3, 0
- bl PartyMenuInit
- movs r0, 0x8
- bl sub_80EB2F4
- b _08127950
- .align 2, 0
-_08127924: .4byte gBattleTypeFlags
-_08127928: .4byte sub_8120C3C
-_0812792C: .4byte SetCB2ToReshowScreenAfterMenu
-_08127930:
- bl sub_81278B4
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- str r0, [sp]
- ldr r0, _08127960 @ =sub_811FB28
- str r0, [sp, 0x4]
- ldr r0, _08127964 @ =SetCB2ToReshowScreenAfterMenu
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r2, r4, 0
- movs r3, 0
- bl PartyMenuInit
-_08127950:
- bl nullsub_44
- bl pokemon_change_order
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127960: .4byte sub_811FB28
-_08127964: .4byte SetCB2ToReshowScreenAfterMenu
- thumb_func_end OpenPartyMenuInBattle
-
- thumb_func_start sub_8127968
-sub_8127968: @ 8127968
- push {lr}
- sub sp, 0xC
- bl sub_81278B4
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- str r0, [sp]
- ldr r0, _0812799C @ =sub_8120EBC
- str r0, [sp, 0x4]
- ldr r0, _081279A0 @ =SetCB2ToReshowScreenAfterMenu
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl PartyMenuInit
- bl nullsub_44
- bl pokemon_change_order
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_0812799C: .4byte sub_8120EBC
-_081279A0: .4byte SetCB2ToReshowScreenAfterMenu
- thumb_func_end sub_8127968
-
- thumb_func_start sub_81279A4
-sub_81279A4: @ 81279A4
- push {lr}
- sub sp, 0xC
- bl sub_81278B4
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x5
- str r0, [sp]
- ldr r0, _081279D8 @ =sub_8120FCC
- str r0, [sp, 0x4]
- ldr r0, _081279DC @ =sub_8107ECC
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0xE
- movs r3, 0
- bl PartyMenuInit
- bl nullsub_44
- bl pokemon_change_order
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081279D8: .4byte sub_8120FCC
-_081279DC: .4byte sub_8107ECC
- thumb_func_end sub_81279A4
-
- thumb_func_start sub_81279E0
-sub_81279E0: @ 81279E0
- push {r4,lr}
- sub sp, 0xC
- movs r0, 0x8
- bl sub_80EB2E0
- lsls r0, 24
- cmp r0, 0
- bne _08127A30
- ldr r0, _08127A24 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08127A30
- bl sub_81278B4
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x7F
- str r0, [sp]
- ldr r0, _08127A28 @ =sub_8120C3C
- str r0, [sp, 0x4]
- ldr r0, _08127A2C @ =sub_8107ECC
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x3
- movs r3, 0
- bl PartyMenuInit
- movs r0, 0x8
- bl sub_80EB2F4
- b _08127A62
- .align 2, 0
-_08127A24: .4byte gBattleTypeFlags
-_08127A28: .4byte sub_8120C3C
-_08127A2C: .4byte sub_8107ECC
-_08127A30:
- ldr r0, _08127A74 @ =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl GetPocketByItemId
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08127A78 @ =sub_8107ECC
- cmp r0, 0x5
- bne _08127A44
- ldr r4, _08127A7C @ =sub_8124DB0
-_08127A44:
- bl sub_81278B4
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x5
- str r0, [sp]
- ldr r0, _08127A80 @ =sub_811FB28
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x3
- movs r3, 0
- bl PartyMenuInit
-_08127A62:
- bl nullsub_44
- bl pokemon_change_order
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127A74: .4byte gSpecialVar_ItemId
-_08127A78: .4byte sub_8107ECC
-_08127A7C: .4byte sub_8124DB0
-_08127A80: .4byte sub_811FB28
- thumb_func_end sub_81279E0
-
- thumb_func_start sub_8127A84
-sub_8127A84: @ 8127A84
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08127AA4 @ =gPlayerParty + 100 @ &gPlayerParty[1]
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08127AA0
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _08127AA8
-_08127AA0:
- movs r0, 0x7
- b _08127ABA
- .align 2, 0
-_08127AA4: .4byte gPlayerParty + 100 @ &gPlayerParty[1]
-_08127AA8:
- ldr r0, _08127AB4 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0x1
- beq _08127AB8
- movs r0, 0x2
- b _08127ABA
- .align 2, 0
-_08127AB4: .4byte gUnknown_203B0A0
-_08127AB8:
- movs r0, 0x3
-_08127ABA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8127A84
-
- thumb_func_start sub_8127AC0
-sub_8127AC0: @ 8127AC0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r5, r0, 24
- bl IsMultiBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08127B08
- cmp r5, 0x1
- beq _08127AE6
- cmp r5, 0x4
- beq _08127AE6
- cmp r5, 0x5
- bne _08127B08
-_08127AE6:
- ldr r4, _08127AFC @ =gStringVar1
- bl GetTrainerPartnerName
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- ldr r0, _08127B00 @ =gStringVar4
- ldr r1, _08127B04 @ =gUnknown_8416A98
- b _08127C86
- .align 2, 0
-_08127AFC: .4byte gStringVar1
-_08127B00: .4byte gStringVar4
-_08127B04: .4byte gUnknown_8416A98
-_08127B08:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08127B2C @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _08127B3C
- ldr r1, _08127B30 @ =gStringVar1
- adds r0, r4, 0
- bl GetMonNickname
- ldr r0, _08127B34 @ =gStringVar4
- ldr r1, _08127B38 @ =gUnknown_8416A75
- b _08127C86
- .align 2, 0
-_08127B2C: .4byte gPlayerParty
-_08127B30: .4byte gStringVar1
-_08127B34: .4byte gStringVar4
-_08127B38: .4byte gUnknown_8416A75
-_08127B3C:
- movs r4, 0
- b _08127B68
-_08127B40:
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08127B62
- adds r0, r5, 0
- bl sub_8127F7C
- lsls r0, 24
- ldr r2, _08127B90 @ =gBattlerPartyIndexes
- lsls r1, r4, 1
- adds r1, r2
- lsrs r0, 24
- ldrh r1, [r1]
- cmp r0, r1
- beq _08127C40
-_08127B62:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_08127B68:
- ldr r0, _08127B94 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r4, r0
- bcc _08127B40
- movs r7, 0x64
- adds r0, r5, 0
- muls r0, r7
- ldr r1, _08127B98 @ =gPlayerParty
- mov r8, r1
- adds r6, r0, r1
- adds r0, r6, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _08127BA4
- ldr r0, _08127B9C @ =gStringVar4
- ldr r1, _08127BA0 @ =gUnknown_8416ACB
- b _08127C86
- .align 2, 0
-_08127B90: .4byte gBattlerPartyIndexes
-_08127B94: .4byte gBattlersCount
-_08127B98: .4byte gPlayerParty
-_08127B9C: .4byte gStringVar4
-_08127BA0: .4byte gUnknown_8416ACB
-_08127BA4:
- adds r0, r5, 0
- bl sub_8127F7C
- ldr r1, _08127BC8 @ =gBattleStruct
- ldr r1, [r1]
- adds r1, 0x8B
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bne _08127BD8
- ldr r1, _08127BCC @ =gStringVar1
- adds r0, r6, 0
- bl GetMonNickname
- ldr r0, _08127BD0 @ =gStringVar4
- ldr r1, _08127BD4 @ =gUnknown_8416A55
- b _08127C86
- .align 2, 0
-_08127BC8: .4byte gBattleStruct
-_08127BCC: .4byte gStringVar1
-_08127BD0: .4byte gStringVar4
-_08127BD4: .4byte gUnknown_8416A55
-_08127BD8:
- ldr r0, _08127BE8 @ =gUnknown_203B0A0
- ldrb r0, [r0, 0xB]
- cmp r0, 0x4
- bne _08127BEC
- bl SetMonPreventsSwitchingString
- b _08127C8A
- .align 2, 0
-_08127BE8: .4byte gUnknown_203B0A0
-_08127BEC:
- cmp r0, 0x2
- beq _08127C64
- adds r0, r5, 0
- bl sub_8127F7C
- ldr r1, _08127C30 @ =gUnknown_203B0C1
- strb r0, [r1]
- ldr r1, _08127C34 @ =gUnknown_203B0C0
- movs r0, 0x1
- strb r0, [r1]
- ldr r1, _08127C38 @ =gBattlerPartyIndexes
- ldr r0, _08127C3C @ =gBattlerInMenuId
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrb r0, [r0]
- bl pokemon_order_func
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8127FF4
- adds r0, r4, 0
- muls r0, r7
- add r0, r8
- adds r1, r6, 0
- bl sub_811FA40
- movs r0, 0x1
- b _08127C8C
- .align 2, 0
-_08127C30: .4byte gUnknown_203B0C1
-_08127C34: .4byte gUnknown_203B0C0
-_08127C38: .4byte gBattlerPartyIndexes
-_08127C3C: .4byte gBattlerInMenuId
-_08127C40:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _08127C54 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08127C58 @ =gStringVar1
- bl GetMonNickname
- ldr r0, _08127C5C @ =gStringVar4
- ldr r1, _08127C60 @ =gUnknown_8416A3A
- b _08127C86
- .align 2, 0
-_08127C54: .4byte gPlayerParty
-_08127C58: .4byte gStringVar1
-_08127C5C: .4byte gStringVar4
-_08127C60: .4byte gUnknown_8416A3A
-_08127C64:
- ldr r0, _08127C98 @ =gBattlerInMenuId
- ldrb r0, [r0]
- ldr r1, _08127C9C @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r1
- ldrb r0, [r0]
- bl pokemon_order_func
- lsls r0, 24
- lsrs r0, 24
- muls r0, r7
- add r0, r8
- ldr r1, _08127CA0 @ =gStringVar1
- bl GetMonNickname
- ldr r0, _08127CA4 @ =gStringVar4
- ldr r1, _08127CA8 @ =gUnknown_8416A1E
-_08127C86:
- bl StringExpandPlaceholders
-_08127C8A:
- movs r0, 0
-_08127C8C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08127C98: .4byte gBattlerInMenuId
-_08127C9C: .4byte gBattlerPartyIndexes
-_08127CA0: .4byte gStringVar1
-_08127CA4: .4byte gStringVar4
-_08127CA8: .4byte gUnknown_8416A1E
- thumb_func_end sub_8127AC0
-
- thumb_func_start sub_8127CAC
-sub_8127CAC: @ 8127CAC
- push {r4,lr}
- ldr r4, _08127CC8 @ =gUnknown_203B0DC
- bl sub_80435E0
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8127CCC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127CC8: .4byte gUnknown_203B0DC
- thumb_func_end sub_8127CAC
-
- thumb_func_start sub_8127CCC
-sub_8127CCC: @ 8127CCC
- push {r4-r6,lr}
- sub sp, 0x8
- adds r6, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- bl IsMultiBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08127D02
- cmp r4, 0
- beq _08127CF4
- movs r0, 0x30
- strb r0, [r6]
- movs r0, 0x45
- strb r0, [r6, 0x1]
- movs r0, 0x12
- strb r0, [r6, 0x2]
- b _08127D9C
-_08127CF4:
- movs r0, 0x3
- strb r0, [r6]
- movs r0, 0x12
- strb r0, [r6, 0x1]
- movs r0, 0x45
- strb r0, [r6, 0x2]
- b _08127D9C
-_08127D02:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08127D40
- movs r5, 0x1
- movs r0, 0
- bl GetBattlerAtPosition
- mov r2, sp
- ldr r1, _08127D3C @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r0, [r0]
- strb r0, [r2]
- movs r4, 0
- mov r1, sp
-_08127D26:
- ldrb r0, [r1]
- cmp r4, r0
- beq _08127D34
- mov r2, sp
- adds r0, r2, r5
- strb r4, [r0]
- adds r5, 0x1
-_08127D34:
- adds r4, 0x1
- cmp r4, 0x5
- ble _08127D26
- b _08127D84
- .align 2, 0
-_08127D3C: .4byte gBattlerPartyIndexes
-_08127D40:
- movs r5, 0x2
- movs r0, 0
- bl GetBattlerAtPosition
- mov r1, sp
- ldr r4, _08127DA4 @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r0, [r0]
- strb r0, [r1]
- movs r0, 0x2
- bl GetBattlerAtPosition
- mov r1, sp
- lsls r0, 24
- lsrs r0, 23
- adds r0, r4
- ldrh r0, [r0]
- strb r0, [r1, 0x1]
- movs r4, 0
-_08127D6A:
- ldrb r0, [r1]
- cmp r4, r0
- beq _08127D7E
- ldrb r0, [r1, 0x1]
- cmp r4, r0
- beq _08127D7E
- mov r2, sp
- adds r0, r2, r5
- strb r4, [r0]
- adds r5, 0x1
-_08127D7E:
- adds r4, 0x1
- cmp r4, 0x5
- ble _08127D6A
-_08127D84:
- movs r4, 0
- mov r3, sp
-_08127D88:
- adds r0, r6, r4
- ldrb r1, [r3]
- lsls r1, 4
- ldrb r2, [r3, 0x1]
- orrs r1, r2
- strb r1, [r0]
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x2
- ble _08127D88
-_08127D9C:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08127DA4: .4byte gBattlerPartyIndexes
- thumb_func_end sub_8127CCC
-
- thumb_func_start sub_8127DA8
-sub_8127DA8: @ 8127DA8
- push {lr}
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08127DC8 @ =gBattleStruct
- lsls r3, r2, 1
- adds r3, r2
- adds r3, 0x60
- ldr r0, [r0]
- adds r0, r3
- bl sub_8127DCC
- pop {r0}
- bx r0
- .align 2, 0
-_08127DC8: .4byte gBattleStruct
- thumb_func_end sub_8127DA8
-
- thumb_func_start sub_8127DCC
-sub_8127DCC: @ 8127DCC
- push {r4-r7,lr}
- sub sp, 0x8
- adds r5, r0, 0
- adds r0, r2, 0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08127DF4
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x2
- b _08127E00
-_08127DF4:
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x3
-_08127E00:
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- bl IsMultiBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08127E34
- cmp r7, 0
- beq _08127E26
- movs r0, 0x30
- strb r0, [r5]
- movs r0, 0x45
- strb r0, [r5, 0x1]
- movs r0, 0x12
- strb r0, [r5, 0x2]
- b _08127EB6
-_08127E26:
- movs r0, 0x3
- strb r0, [r5]
- movs r0, 0x12
- strb r0, [r5, 0x1]
- movs r0, 0x45
- strb r0, [r5, 0x2]
- b _08127EB6
-_08127E34:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08127E6C
- movs r3, 0x1
- mov r2, sp
- ldr r1, _08127E68 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r0, [r0]
- strb r0, [r2]
- movs r4, 0
- mov r1, sp
-_08127E50:
- ldrb r0, [r1]
- cmp r4, r0
- beq _08127E5E
- mov r2, sp
- adds r0, r2, r3
- strb r4, [r0]
- adds r3, 0x1
-_08127E5E:
- adds r4, 0x1
- cmp r4, 0x5
- ble _08127E50
- b _08127E9E
- .align 2, 0
-_08127E68: .4byte gBattlerPartyIndexes
-_08127E6C:
- movs r3, 0x2
- mov r1, sp
- ldr r2, _08127EC0 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1]
- lsls r0, r6, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x1]
- movs r4, 0
-_08127E84:
- ldrb r0, [r1]
- cmp r4, r0
- beq _08127E98
- ldrb r0, [r1, 0x1]
- cmp r4, r0
- beq _08127E98
- mov r2, sp
- adds r0, r2, r3
- strb r4, [r0]
- adds r3, 0x1
-_08127E98:
- adds r4, 0x1
- cmp r4, 0x5
- ble _08127E84
-_08127E9E:
- movs r4, 0
- mov r3, sp
-_08127EA2:
- adds r0, r5, r4
- ldrb r1, [r3]
- lsls r1, 4
- ldrb r2, [r3, 0x1]
- orrs r1, r2
- strb r1, [r0]
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x2
- ble _08127EA2
-_08127EB6:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08127EC0: .4byte gBattlerPartyIndexes
- thumb_func_end sub_8127DCC
-
- thumb_func_start sub_8127EC4
-sub_8127EC4: @ 8127EC4
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- movs r7, 0
- bl IsMultiBattle
- lsls r0, 24
- cmp r0, 0
- beq _08127F72
- ldr r0, _08127F28 @ =gBattleStruct
- lsls r1, r4, 1
- adds r1, r4
- adds r1, 0x60
- ldr r0, [r0]
- adds r4, r0, r1
- movs r2, 0
- add r6, sp
- mov r12, r6
- movs r6, 0xF
- mov r3, sp
-_08127EF6:
- adds r1, r4, r2
- ldrb r0, [r1]
- lsrs r0, 4
- strb r0, [r3]
- adds r3, 0x1
- ldrb r1, [r1]
- adds r0, r6, 0
- ands r0, r1
- strb r0, [r3]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x2
- ble _08127EF6
- mov r0, r12
- ldrb r3, [r0]
- movs r2, 0
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, r5
- bne _08127F2C
- mov r0, sp
- ldrb r7, [r0]
- strb r3, [r0]
- b _08127F40
- .align 2, 0
-_08127F28: .4byte gBattleStruct
-_08127F2C:
- adds r2, 0x1
- cmp r2, 0x5
- bgt _08127F40
- mov r0, sp
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, r5
- bne _08127F2C
- adds r7, r0, 0
- strb r3, [r1]
-_08127F40:
- cmp r2, 0x6
- beq _08127F72
- mov r0, r12
- strb r7, [r0]
- mov r0, sp
- ldrb r0, [r0]
- lsls r0, 4
- mov r1, sp
- ldrb r1, [r1, 0x1]
- orrs r0, r1
- strb r0, [r4]
- mov r0, sp
- ldrb r0, [r0, 0x2]
- lsls r0, 4
- mov r1, sp
- ldrb r1, [r1, 0x3]
- orrs r0, r1
- strb r0, [r4, 0x1]
- mov r0, sp
- ldrb r0, [r0, 0x4]
- lsls r0, 4
- mov r1, sp
- ldrb r1, [r1, 0x5]
- orrs r0, r1
- strb r0, [r4, 0x2]
-_08127F72:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8127EC4
-
- thumb_func_start sub_8127F7C
-sub_8127F7C: @ 8127F7C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0x1
- ands r1, r2
- lsrs r2, r0, 25
- cmp r1, 0
- beq _08127F9C
- ldr r0, _08127F98 @ =gUnknown_203B0DC
- adds r0, r2, r0
- ldrb r0, [r0]
- movs r1, 0xF
- ands r1, r0
- b _08127FA4
- .align 2, 0
-_08127F98: .4byte gUnknown_203B0DC
-_08127F9C:
- ldr r0, _08127FAC @ =gUnknown_203B0DC
- adds r0, r2, r0
- ldrb r0, [r0]
- lsrs r1, r0, 4
-_08127FA4:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08127FAC: .4byte gUnknown_203B0DC
- thumb_func_end sub_8127F7C
-
- thumb_func_start sub_8127FB0
-sub_8127FB0: @ 8127FB0
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- movs r1, 0x1
- ands r1, r3
- lsrs r3, r0, 25
- cmp r1, 0
- beq _08127FD8
- ldr r0, _08127FD4 @ =gUnknown_203B0DC
- adds r0, r3, r0
- ldrb r2, [r0]
- movs r1, 0xF0
- ands r1, r2
- orrs r1, r4
- strb r1, [r0]
- b _08127FE8
- .align 2, 0
-_08127FD4: .4byte gUnknown_203B0DC
-_08127FD8:
- ldr r2, _08127FF0 @ =gUnknown_203B0DC
- adds r2, r3, r2
- ldrb r1, [r2]
- movs r0, 0xF
- ands r0, r1
- lsls r1, r4, 4
- orrs r0, r1
- strb r0, [r2]
-_08127FE8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127FF0: .4byte gUnknown_203B0DC
- thumb_func_end sub_8127FB0
-
- thumb_func_start sub_8127FF4
-sub_8127FF4: @ 8127FF4
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- adds r0, r5, 0
- bl sub_8127F7C
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl sub_8127F7C
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_8127FB0
- adds r0, r6, 0
- adds r1, r4, 0
- bl sub_8127FB0
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8127FF4
-
- thumb_func_start pokemon_order_func
-pokemon_order_func: @ 8128030
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r3, 0
- movs r2, 0
- ldr r5, _08128058 @ =gUnknown_203B0DC
-_0812803C:
- adds r0, r3, r5
- ldrb r1, [r0]
- lsrs r0, r1, 4
- cmp r0, r4
- beq _08128054
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- movs r0, 0xF
- ands r0, r1
- cmp r0, r4
- bne _0812805C
-_08128054:
- adds r0, r2, 0
- b _0812806E
- .align 2, 0
-_08128058: .4byte gUnknown_203B0DC
-_0812805C:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x2
- bls _0812803C
- movs r0, 0
-_0812806E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end pokemon_order_func
-
- thumb_func_start pokemon_change_order
-pokemon_change_order: @ 8128074
- push {r4-r6,lr}
- movs r4, 0x96
- lsls r4, 2
- adds r0, r4, 0
- bl Alloc
- adds r5, r0, 0
- ldr r1, _081280C0 @ =gPlayerParty
- adds r2, r4, 0
- bl memcpy
- movs r4, 0
- movs r6, 0x64
-_0812808E:
- adds r0, r4, 0
- bl pokemon_order_func
- lsls r0, 24
- lsrs r0, 24
- muls r0, r6
- ldr r1, _081280C0 @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- muls r1, r6
- adds r1, r5
- movs r2, 0x64
- bl memcpy
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _0812808E
- adds r0, r5, 0
- bl Free
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081280C0: .4byte gPlayerParty
- thumb_func_end pokemon_change_order
-
- thumb_func_start sub_81280C4
-sub_81280C4: @ 81280C4
- push {r4-r6,lr}
- movs r4, 0x96
- lsls r4, 2
- adds r0, r4, 0
- bl Alloc
- adds r5, r0, 0
- ldr r1, _08128110 @ =gPlayerParty
- adds r2, r4, 0
- bl memcpy
- movs r4, 0
- movs r6, 0x64
-_081280DE:
- adds r0, r4, 0
- bl sub_8127F7C
- lsls r0, 24
- lsrs r0, 24
- muls r0, r6
- ldr r1, _08128110 @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- muls r1, r6
- adds r1, r5
- movs r2, 0x64
- bl memcpy
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _081280DE
- adds r0, r5, 0
- bl Free
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08128110: .4byte gPlayerParty
- thumb_func_end sub_81280C4
-
- thumb_func_start sub_8128114
-sub_8128114: @ 8128114
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0x1
- movs r7, 0x64
- ldr r0, _0812816C @ =gPlayerParty
- mov r8, r0
-_08128122:
- adds r0, r6, 0
- bl sub_8127F7C
- lsls r0, 24
- lsrs r0, 24
- muls r0, r7
- mov r1, r8
- adds r5, r0, r1
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08128170
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08128170
- movs r0, 0
- bl sub_8127F7C
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- adds r1, r6, 0
- bl sub_8127FF4
- adds r0, r4, 0
- muls r0, r7
- add r0, r8
- adds r1, r5, 0
- bl sub_811FA40
- b _0812817A
- .align 2, 0
-_0812816C: .4byte gPlayerParty
-_08128170:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x5
- bls _08128122
-_0812817A:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8128114
-
- thumb_func_start sub_8128184
-sub_8128184: @ 8128184
- push {lr}
- bl sub_8108CF0
- ldr r0, _08128194 @ =SetCB2ToReshowScreenAfterMenu
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08128194: .4byte SetCB2ToReshowScreenAfterMenu
- thumb_func_end sub_8128184
-
- thumb_func_start sub_8128198
-sub_8128198: @ 8128198
- push {lr}
- sub sp, 0xC
- movs r0, 0x7F
- str r0, [sp]
- ldr r0, _081281BC @ =sub_81281C4
- str r0, [sp, 0x4]
- ldr r0, _081281C0 @ =gMain
- ldr r0, [r0, 0x8]
- str r0, [sp, 0x8]
- movs r0, 0x5
- movs r1, 0x3
- movs r2, 0
- movs r3, 0
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081281BC: .4byte sub_81281C4
-_081281C0: .4byte gMain
- thumb_func_end sub_8128198
-
- thumb_func_start sub_81281C4
-sub_81281C4: @ 81281C4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _081281F4 @ =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- movs r1, 0x80
- lsls r1, 1
- strh r1, [r4, 0x8]
- bl sub_81282DC
- movs r1, 0x80
- lsls r1, 9
- movs r0, 0x2
- movs r2, 0
- bl ChangeBgX
- ldr r0, _081281F8 @ =sub_81281FC
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081281F4: .4byte gTasks
-_081281F8: .4byte sub_81281FC
- thumb_func_end sub_81281C4
-
- thumb_func_start sub_81281FC
-sub_81281FC: @ 81281FC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r6, r5, 2
- adds r0, r6, r5
- lsls r0, 3
- ldr r1, _08128270 @ =gTasks+0x8
- adds r4, r0, r1
- ldr r0, _08128274 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08128268
- ldrh r0, [r4]
- subs r0, 0x8
- strh r0, [r4]
- adds r0, r5, 0
- bl sub_81282DC
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08128268
- movs r4, 0x3
- ldr r7, _08128278 @ =gUnknown_2022B58
-_08128230:
- subs r0, r4, 0x3
- lsls r0, 5
- adds r0, r7
- ldrh r0, [r0]
- cmp r0, 0
- beq _0812824C
- ldr r0, _0812827C @ =gUnknown_203B0B4
- ldr r1, [r0]
- lsls r0, r4, 4
- adds r0, r1
- ldrb r0, [r0, 0x9]
- movs r1, 0
- bl sub_812238C
-_0812824C:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _08128230
- movs r0, 0x71
- bl PlaySE
- ldr r0, _08128280 @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _08128284 @ =sub_8128288
- str r0, [r1]
-_08128268:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08128270: .4byte gTasks+0x8
-_08128274: .4byte gPaletteFade
-_08128278: .4byte gUnknown_2022B58
-_0812827C: .4byte gUnknown_203B0B4
-_08128280: .4byte gTasks
-_08128284: .4byte sub_8128288
- thumb_func_end sub_81281FC
-
- thumb_func_start sub_8128288
-sub_8128288: @ 8128288
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _081282B4 @ =gTasks+0x8
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- strh r1, [r0]
- lsls r1, 16
- movs r0, 0x80
- lsls r0, 17
- cmp r1, r0
- bne _081282AE
- adds r0, r2, 0
- bl sub_811FA78
-_081282AE:
- pop {r0}
- bx r0
- .align 2, 0
-_081282B4: .4byte gTasks+0x8
- thumb_func_end sub_8128288
-
- thumb_func_start sub_81282B8
-sub_81282B8: @ 81282B8
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 16
- lsrs r3, r1, 16
- cmp r1, 0
- blt _081282D2
- ldr r1, _081282D8 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- strh r3, [r0, 0x24]
-_081282D2:
- pop {r0}
- bx r0
- .align 2, 0
-_081282D8: .4byte gSprites
- thumb_func_end sub_81282B8
-
- thumb_func_start sub_81282DC
-sub_81282DC: @ 81282DC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08128364 @ =gTasks+0x8
- adds r5, r1, r0
- movs r6, 0x3
- ldr r7, _08128368 @ =gUnknown_203B0B4
-_081282F0:
- ldr r0, _0812836C @ =gUnknown_2022B58
- subs r1, r6, 0x3
- lsls r1, 5
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- beq _08128348
- ldr r0, [r7]
- lsls r4, r6, 4
- adds r0, r4, r0
- ldrb r0, [r0, 0x9]
- ldrh r1, [r5]
- subs r1, 0x8
- lsls r1, 16
- asrs r1, 16
- bl sub_81282B8
- ldr r0, [r7]
- adds r0, r4, r0
- ldrb r0, [r0, 0xA]
- ldrh r1, [r5]
- subs r1, 0x8
- lsls r1, 16
- asrs r1, 16
- bl sub_81282B8
- ldr r0, [r7]
- adds r0, r4, r0
- ldrb r0, [r0, 0xB]
- ldrh r1, [r5]
- subs r1, 0x8
- lsls r1, 16
- asrs r1, 16
- bl sub_81282B8
- ldr r0, [r7]
- adds r4, r0
- ldrb r0, [r4, 0xC]
- ldrh r1, [r5]
- subs r1, 0x8
- lsls r1, 16
- asrs r1, 16
- bl sub_81282B8
-_08128348:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x5
- bls _081282F0
- movs r1, 0x80
- lsls r1, 4
- movs r0, 0x2
- movs r2, 0x1
- bl ChangeBgX
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08128364: .4byte gTasks+0x8
-_08128368: .4byte gUnknown_203B0B4
-_0812836C: .4byte gUnknown_2022B58
- thumb_func_end sub_81282DC
-
- thumb_func_start sub_8128370
-sub_8128370: @ 8128370
- push {lr}
- sub sp, 0xC
- ldr r1, _08128398 @ =gFieldCallback2
- ldr r0, _0812839C @ =hm_add_c3_without_phase_2
- str r0, [r1]
- movs r0, 0xF
- str r0, [sp]
- ldr r0, _081283A0 @ =sub_811FB28
- str r0, [sp, 0x4]
- ldr r0, _081283A4 @ =CB2_ReturnToField
- str r0, [sp, 0x8]
- movs r0, 0x6
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08128398: .4byte gFieldCallback2
-_0812839C: .4byte hm_add_c3_without_phase_2
-_081283A0: .4byte sub_811FB28
-_081283A4: .4byte CB2_ReturnToField
- thumb_func_end sub_8128370
-
- thumb_func_start sub_81283A8
-sub_81283A8: @ 81283A8
- push {lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _081283D4 @ =gFieldCallback2
- ldr r1, _081283D8 @ =hm_add_c3_without_phase_2
- str r1, [r2]
- movs r1, 0
- str r1, [sp]
- ldr r1, _081283DC @ =sub_811FB28
- str r1, [sp, 0x4]
- ldr r1, _081283E0 @ =CB2_ReturnToField
- str r1, [sp, 0x8]
- movs r1, 0
- movs r2, 0xB
- movs r3, 0
- bl PartyMenuInit
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081283D4: .4byte gFieldCallback2
-_081283D8: .4byte hm_add_c3_without_phase_2
-_081283DC: .4byte sub_811FB28
-_081283E0: .4byte CB2_ReturnToField
- thumb_func_end sub_81283A8
-
- thumb_func_start hm_add_c3_without_phase_2
-hm_add_c3_without_phase_2: @ 81283E4
- push {lr}
- bl sub_807DC00
- ldr r0, _081283F8 @ =task_hm_without_phase_2
- movs r1, 0xA
- bl CreateTask
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_081283F8: .4byte task_hm_without_phase_2
- thumb_func_end hm_add_c3_without_phase_2
-
- thumb_func_start task_hm_without_phase_2
-task_hm_without_phase_2: @ 81283FC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl field_weather_is_fade_finished
- lsls r0, 24
- cmp r0, 0
- beq _0812841A
- adds r0, r4, 0
- bl DestroyTask
- bl ScriptContext2_Disable
- bl EnableBothScriptContexts
-_0812841A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end task_hm_without_phase_2
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s
index 8320c5809..9c57cff88 100644
--- a/asm/pokedex_screen.s
+++ b/asm/pokedex_screen.s
@@ -428,13 +428,13 @@ sub_8102858: @ 8102858
lsls r1, 7
movs r0, 0
bl SetGpuRegBits
- ldr r0, _08102878 @ =CB2_ReturnToStartMenu
+ ldr r0, _08102878 @ =CB2_ReturnToFieldWithOpenMenu
bl SetMainCallback2
_08102874:
pop {r0}
bx r0
.align 2, 0
-_08102878: .4byte CB2_ReturnToStartMenu
+_08102878: .4byte CB2_ReturnToFieldWithOpenMenu
thumb_func_end sub_8102858
thumb_func_start sub_810287C
diff --git a/asm/pokemon_jump_2.s b/asm/pokemon_jump_2.s
index 44598a330..8ae94ce5e 100644
--- a/asm/pokemon_jump_2.s
+++ b/asm/pokemon_jump_2.s
@@ -4230,8 +4230,8 @@ sub_81499E0: @ 81499E0
_081499FC: .4byte gUnknown_203F3D4
thumb_func_end sub_81499E0
- thumb_func_start sub_8149A00
-sub_8149A00: @ 8149A00
+ thumb_func_start IsSpeciesAllowedInPokemonJump
+IsSpeciesAllowedInPokemonJump: @ 8149A00
push {lr}
lsls r0, 16
lsrs r0, 16
@@ -4242,7 +4242,7 @@ sub_8149A00: @ 8149A00
lsrs r0, 31
pop {r1}
bx r1
- thumb_func_end sub_8149A00
+ thumb_func_end IsSpeciesAllowedInPokemonJump
thumb_func_start sub_8149A18
sub_8149A18: @ 8149A18
@@ -4264,7 +4264,7 @@ _08149A1C:
bl GetMonData
lsls r0, 16
lsrs r0, 16
- bl sub_8149A00
+ bl IsSpeciesAllowedInPokemonJump
cmp r0, 0
beq _08149A54
ldr r1, _08149A50 @ =gSpecialVar_Result
diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s
index 9092a38aa..b499f0999 100644
--- a/asm/pokemon_special_anim.s
+++ b/asm/pokemon_special_anim.s
@@ -558,7 +558,7 @@ _0811C9AA:
adds r0, r4, 0
adds r0, 0x96
ldrh r0, [r0]
- bl GetItemCompatibilityRule
+ bl CheckIfItemIsTMHMOrEvolutionStone
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
@@ -1508,8 +1508,8 @@ sub_811D120: @ 811D120
bx r1
thumb_func_end sub_811D120
- thumb_func_start GetMonLevelUpWindowStats
-GetMonLevelUpWindowStats: @ 811D130
+ thumb_func_start BufferMonStatsToTaskData
+BufferMonStatsToTaskData: @ 811D130
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
@@ -1539,7 +1539,7 @@ GetMonLevelUpWindowStats: @ 811D130
pop {r4,r5}
pop {r0}
bx r0
- thumb_func_end GetMonLevelUpWindowStats
+ thumb_func_end BufferMonStatsToTaskData
thumb_func_start sub_811D178
sub_811D178: @ 811D178
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index 5c95eb22a..460410f47 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -1455,7 +1455,7 @@ _0808C3E0:
.align 2, 0
_0808C444: .4byte gUnknown_83CDA20
_0808C448:
- bl field_weather_is_fade_finished
+ bl IsWeatherNotFadingIn
lsls r0, 24
cmp r0, 0
bne _0808C454
@@ -6591,7 +6591,7 @@ _0808EEE8:
ldr r2, _0808EF08 @ =sub_808CE60
movs r0, 0x4
movs r1, 0
- bl sub_8107DB4
+ bl GoToBagMenu
_0808EEF6:
adds r0, r7, 0
bl DestroyTask
@@ -15947,7 +15947,7 @@ sub_80937B4: @ 80937B4
_080937C4: .4byte gUnknown_2039822
_080937C8:
ldr r4, _080937D8 @ =gUnknown_2039821
- bl sub_8138B20
+ bl GetLastViewedMonIndex
strb r0, [r4]
_080937D0:
pop {r4}
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index d1d6ed06f..b345231f3 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -42,7 +42,7 @@ _0813453C: .4byte gUnknown_203B140
_08134540: .4byte 0x00003308
_08134544: .4byte gUnknown_203B144
_08134548:
- ldr r0, _08134574 @ =gUnknown_203B16C
+ ldr r0, _08134574 @ =gLastViewedMonIndex
strb r6, [r0]
ldr r0, _08134578 @ =gUnknown_203B16D
movs r1, 0
@@ -64,7 +64,7 @@ _08134548:
movs r0, 0x1
b _08134596
.align 2, 0
-_08134574: .4byte gUnknown_203B16C
+_08134574: .4byte gLastViewedMonIndex
_08134578: .4byte gUnknown_203B16D
_0813457C: .4byte gUnknown_203B16E
_08134580: .4byte 0x000032f8
@@ -3448,7 +3448,7 @@ _08136168:
ldr r0, [r6]
ldr r3, _08136208 @ =0x00003084
adds r0, r3
- ldr r1, _0813620C @ =gUnknown_8416221
+ ldr r1, _0813620C @ =gText_FemaleSymbol
bl StringCopy
b _08136238
.align 2, 0
@@ -3459,19 +3459,19 @@ _081361FC: .4byte 0x00003220
_08136200: .4byte 0x00003221
_08136204: .4byte 0x00003034
_08136208: .4byte 0x00003084
-_0813620C: .4byte gUnknown_8416221
+_0813620C: .4byte gText_FemaleSymbol
_08136210:
cmp r7, 0
bne _0813622C
ldr r0, [r6]
ldr r1, _08136224 @ =0x00003084
adds r0, r1
- ldr r1, _08136228 @ =gUnknown_841621F
+ ldr r1, _08136228 @ =gText_MaleSymbol
bl StringCopy
b _08136238
.align 2, 0
_08136224: .4byte 0x00003084
-_08136228: .4byte gUnknown_841621F
+_08136228: .4byte gText_MaleSymbol
_0813622C:
ldr r0, [r6]
ldr r2, _08136308 @ =0x00003084
@@ -3622,7 +3622,7 @@ sub_8136350: @ 8136350
bl ConvertIntToDecimalStringN
ldr r0, [r6]
adds r0, r4
- ldr r1, _08136504 @ =gUnknown_841620C
+ ldr r1, _08136504 @ =gText_Slash
bl StringAppend
ldr r0, [r6]
adds r0, r7
@@ -3794,7 +3794,7 @@ _081363E6:
_081364F8: .4byte gUnknown_203B140
_081364FC: .4byte 0x00003290
_08136500: .4byte 0x00003090
-_08136504: .4byte gUnknown_841620C
+_08136504: .4byte gText_Slash
_08136508: .4byte gUnknown_203B144
_0813650C: .4byte 0x000032f8
_08136510: .4byte sub_804CF14
@@ -5618,7 +5618,7 @@ _081373EA:
str r6, [sp]
mov r7, r9
str r7, [sp, 0x4]
- ldr r1, _081374E0 @ =gUnknown_841620C
+ ldr r1, _081374E0 @ =gText_Slash
str r1, [sp, 0x8]
movs r1, 0x2
movs r2, 0x3A
@@ -5663,7 +5663,7 @@ _081374D0: .4byte gUnknown_8416238
_081374D4: .4byte gUnknown_203B144
_081374D8: .4byte 0x000030b8
_081374DC: .4byte 0x00003258
-_081374E0: .4byte gUnknown_841620C
+_081374E0: .4byte gText_Slash
_081374E4: .4byte 0x000030f0
thumb_func_end sub_81372E4
@@ -6839,8 +6839,8 @@ _08137E82:
adds r0, r1
ldr r0, [r0]
bl SetMainCallback2
- bl sub_8138B20
- ldr r1, _08137EE0 @ =gUnknown_203B16C
+ bl GetLastViewedMonIndex
+ ldr r1, _08137EE0 @ =gLastViewedMonIndex
strb r0, [r1]
ldr r0, [r4]
cmp r0, 0
@@ -6864,7 +6864,7 @@ _08137ECC:
_08137ED4: .4byte gUnknown_203B140
_08137ED8: .4byte 0x00003214
_08137EDC: .4byte 0x000032f8
-_08137EE0: .4byte gUnknown_203B16C
+_08137EE0: .4byte gLastViewedMonIndex
_08137EE4: .4byte gUnknown_203B144
thumb_func_end sub_8137E64
@@ -8397,14 +8397,14 @@ _08138B18: .4byte 0x00003220
_08138B1C: .4byte 0x00003221
thumb_func_end sub_8138A38
- thumb_func_start sub_8138B20
-sub_8138B20: @ 8138B20
- ldr r0, _08138B28 @ =gUnknown_203B16C
+ thumb_func_start GetLastViewedMonIndex
+GetLastViewedMonIndex: @ 8138B20
+ ldr r0, _08138B28 @ =gLastViewedMonIndex
ldrb r0, [r0]
bx lr
.align 2, 0
-_08138B28: .4byte gUnknown_203B16C
- thumb_func_end sub_8138B20
+_08138B28: .4byte gLastViewedMonIndex
+ thumb_func_end GetLastViewedMonIndex
thumb_func_start GetMoveSlotToReplace
GetMoveSlotToReplace: @ 8138B2C
@@ -8443,7 +8443,7 @@ sub_8138B4C: @ 8138B4C
ldrb r0, [r0]
cmp r0, 0x1
bne _08138B84
- ldr r0, _08138B80 @ =gUnknown_203B16C
+ ldr r0, _08138B80 @ =gLastViewedMonIndex
ldrb r0, [r0]
cmp r0, 0x3
bhi _08138B76
@@ -8454,7 +8454,7 @@ _08138B76:
b _08138B86
.align 2, 0
_08138B7C: .4byte gReceivedRemoteLinkPlayers
-_08138B80: .4byte gUnknown_203B16C
+_08138B80: .4byte gLastViewedMonIndex
_08138B84:
movs r0, 0
_08138B86:
@@ -8476,7 +8476,7 @@ sub_8138B8C: @ 8138B8C
adds r2, 0xD8
adds r0, r1, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
movs r1, 0x64
@@ -8493,7 +8493,7 @@ _08138BC4:
ldr r2, _08138BE8 @ =0x000032f4
adds r0, r1, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 2
@@ -9148,7 +9148,7 @@ sub_81390B0: @ 81390B0
ldr r1, _081391DC @ =0x000032f4
adds r0, r1
ldr r6, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
movs r1, 0x64
@@ -9294,7 +9294,7 @@ sub_81391EC: @ 81391EC
ldr r1, _08139318 @ =0x000032f4
adds r0, r1
ldr r6, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 2
@@ -9442,7 +9442,7 @@ sub_8139328: @ 8139328
adds r2, 0xD8
adds r0, r1, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
movs r1, 0x64
@@ -9459,7 +9459,7 @@ _08139360:
ldr r2, _08139384 @ =0x000032f4
adds r0, r1, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 2
@@ -9489,7 +9489,7 @@ sub_8139388: @ 8139388
bl sub_8138BEC
lsls r0, 16
lsrs r0, 16
- bl sub_8125A90
+ bl IsMoveHm
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -10269,7 +10269,7 @@ _081399DC: .4byte sub_804CF14
_081399E0: .4byte 0x00003024
_081399E4: .4byte 0x0000ffff
_081399E8:
- ldr r0, _08139A1C @ =gUnknown_203B16C
+ ldr r0, _08139A1C @ =gLastViewedMonIndex
ldrb r1, [r0]
movs r0, 0x3
bl sub_804455C
@@ -10293,7 +10293,7 @@ _081399E8:
bl CreateMonPicSprite
b _08139A40
.align 2, 0
-_08139A1C: .4byte gUnknown_203B16C
+_08139A1C: .4byte gLastViewedMonIndex
_08139A20: .4byte 0x0000ffff
_08139A24:
movs r0, 0x3C
@@ -10787,7 +10787,7 @@ _08139E20:
.align 2, 0
_08139E28: .4byte SpriteCallbackDummy
_08139E2C:
- ldr r0, _08139E48 @ =gUnknown_203B16C
+ ldr r0, _08139E48 @ =gLastViewedMonIndex
ldrb r1, [r0]
movs r0, 0x3
bl sub_804455C
@@ -10801,7 +10801,7 @@ _08139E2C:
str r4, [sp, 0x4]
b _08139E58
.align 2, 0
-_08139E48: .4byte gUnknown_203B16C
+_08139E48: .4byte gLastViewedMonIndex
_08139E4C: .4byte SpriteCallbackDummy
_08139E50:
ldr r1, _08139E98 @ =SpriteCallbackDummy
@@ -13221,7 +13221,7 @@ _0813B16C:
ldr r2, _0813B190 @ =0x000032f4
adds r0, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -13268,7 +13268,7 @@ _0813B1CC:
negs r1, r1
cmp r0, r1
beq _0813B1F4
- ldr r0, _0813B1FC @ =gUnknown_203B16C
+ ldr r0, _0813B1FC @ =gLastViewedMonIndex
strb r2, [r0]
ldr r0, _0813B200 @ =sub_813B3F0
movs r1, 0
@@ -13284,7 +13284,7 @@ _0813B1F4:
pop {r0}
bx r0
.align 2, 0
-_0813B1FC: .4byte gUnknown_203B16C
+_0813B1FC: .4byte gLastViewedMonIndex
_0813B200: .4byte sub_813B3F0
_0813B204: .4byte gUnknown_203B140
_0813B208: .4byte 0x0000328c
@@ -13311,7 +13311,7 @@ sub_813B20C: @ 813B20C
movs r1, 0x1
negs r1, r1
adds r5, r0, 0
- ldr r6, _0813B264 @ =gUnknown_203B16C
+ ldr r6, _0813B264 @ =gLastViewedMonIndex
cmp r3, r1
bne _0813B23E
ldrb r0, [r6]
@@ -13336,7 +13336,7 @@ _0813B252:
_0813B258: .4byte gUnknown_203B140
_0813B25C: .4byte 0x000032f4
_0813B260: .4byte 0x00003214
-_0813B264: .4byte gUnknown_203B16C
+_0813B264: .4byte gLastViewedMonIndex
_0813B268: .4byte 0x00003210
_0813B26C:
lsls r5, r4, 24
@@ -13346,7 +13346,7 @@ _0813B26E:
asrs r1, r5, 24
adds r0, r1
lsls r0, 24
- ldr r4, _0813B29C @ =gUnknown_203B16C
+ ldr r4, _0813B29C @ =gLastViewedMonIndex
lsrs r6, r0, 24
asrs r0, 24
ldrb r3, [r4]
@@ -13365,7 +13365,7 @@ _0813B294:
negs r0, r0
b _0813B2C0
.align 2, 0
-_0813B29C: .4byte gUnknown_203B16C
+_0813B29C: .4byte gLastViewedMonIndex
_0813B2A0: .4byte gUnknown_203B140
_0813B2A4: .4byte 0x00003210
_0813B2A8:
@@ -13514,7 +13514,7 @@ _0813B39E:
bhi _0813B3B6
ldr r4, _0813B3D4 @ =gUnknown_8463FB8
adds r4, r5, r4
- bl sub_8138B20
+ bl GetLastViewedMonIndex
ldrb r1, [r4]
lsls r0, 24
lsrs r0, 24
diff --git a/asm/region_map.s b/asm/region_map.s
index 5d136385b..662c65fa7 100644
--- a/asm/region_map.s
+++ b/asm/region_map.s
@@ -7395,7 +7395,7 @@ sub_80C3B00: @ 80C3B00
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
pop {r1}
bx r1
@@ -7477,7 +7477,7 @@ _080C3BAC:
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r2, r0, 0
ldr r0, _080C3BEC @ =gUnknown_20399E4
ldr r1, [r0]
@@ -7506,7 +7506,7 @@ _080C3BF0:
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r2, r0, 0
ldr r0, _080C3C28 @ =gUnknown_20399E4
ldr r1, [r0]
@@ -7543,7 +7543,7 @@ _080C3C2C:
ldrsb r1, [r5, r1]
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r2, r0, 0
b _080C3C8E
.align 2, 0
@@ -7564,7 +7564,7 @@ _080C3C68:
ldrsb r1, [r5, r1]
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r2, r0, 0
ldr r1, [r4]
ldrb r0, [r2, 0x14]
@@ -9761,8 +9761,8 @@ _080C4DF2:
bx r1
thumb_func_end GetMapName
- thumb_func_start sub_80C4DF8
-sub_80C4DF8: @ 80C4DF8
+ thumb_func_start GetMapNameGeneric
+GetMapNameGeneric: @ 80C4DF8
push {lr}
lsls r1, 16
lsrs r1, 16
@@ -9770,14 +9770,14 @@ sub_80C4DF8: @ 80C4DF8
bl GetMapName
pop {r1}
bx r1
- thumb_func_end sub_80C4DF8
+ thumb_func_end GetMapNameGeneric
thumb_func_start sub_80C4E08
sub_80C4E08: @ 80C4E08
push {lr}
lsls r1, 16
lsrs r1, 16
- bl sub_80C4DF8
+ bl GetMapNameGeneric
pop {r1}
bx r1
thumb_func_end sub_80C4E08
@@ -9893,15 +9893,15 @@ _080C4EF2:
bx r0
thumb_func_end sub_80C4ED0
- thumb_func_start sub_80C4EF8
-sub_80C4EF8: @ 80C4EF8
+ thumb_func_start MCB2_FlyMap
+MCB2_FlyMap: @ 80C4EF8
push {lr}
bl sub_80C51E8
movs r0, 0x2
bl sub_80BFEDC
pop {r0}
bx r0
- thumb_func_end sub_80C4EF8
+ thumb_func_end MCB2_FlyMap
thumb_func_start sub_80C4F08
sub_80C4F08: @ 80C4F08
@@ -10283,7 +10283,7 @@ _080C5220:
_080C5250: .4byte gUnknown_20399FC
_080C5254: .4byte CB2_ReturnToField
_080C5258:
- ldr r0, _080C5274 @ =sub_8124AB0
+ ldr r0, _080C5274 @ =CB2_ReturnToPartyMenuFromFlyMap
bl SetMainCallback2
_080C525E:
ldr r4, _080C5278 @ =gUnknown_20399FC
@@ -10298,7 +10298,7 @@ _080C526E:
pop {r0}
bx r0
.align 2, 0
-_080C5274: .4byte sub_8124AB0
+_080C5274: .4byte CB2_ReturnToPartyMenuFromFlyMap
_080C5278: .4byte gUnknown_20399FC
thumb_func_end sub_80C5208
diff --git a/asm/script_pokemon_util_80A0058.s b/asm/script_pokemon_util_80A0058.s
index 81b3b7efe..6f451b90a 100644
--- a/asm/script_pokemon_util_80A0058.s
+++ b/asm/script_pokemon_util_80A0058.s
@@ -385,7 +385,7 @@ sub_80A0334: @ 80A0334
ldr r0, _080A034C @ =sub_80A0350
str r0, [r1, 0x8]
movs r0, 0
- bl sub_81274A8
+ bl InitChooseHalfPartyForBattle
pop {r0}
bx r0
.align 2, 0
@@ -427,7 +427,7 @@ ChooseBattleTowerPlayerParty: @ 80A0380
ldr r0, _080A0398 @ =sub_80A039C
str r0, [r1, 0x8]
movs r0, 0x1
- bl sub_81274A8
+ bl InitChooseHalfPartyForBattle
pop {r0}
bx r0
.align 2, 0
diff --git a/asm/script_pokemon_util_80BF8FC.s b/asm/script_pokemon_util_80BF8FC.s
index 15d19e08b..a909758c2 100644
--- a/asm/script_pokemon_util_80BF8FC.s
+++ b/asm/script_pokemon_util_80BF8FC.s
@@ -88,7 +88,7 @@ sub_80BF97C: @ 80BF97C
lsls r0, 3
adds r0, r1
ldrb r0, [r0, 0x8]
- bl sub_81283A8
+ bl ChoosePartyMonByMenuType
adds r0, r4, 0
bl DestroyTask
_080BF9AC:
diff --git a/asm/shop.s b/asm/shop.s
index bc5eccd64..ca92ff4b7 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -291,7 +291,7 @@ sub_809ACD4: @ 809ACD4
ldr r2, _0809ACEC @ =CB2_ReturnToField
movs r0, 0x2
movs r1, 0x3
- bl sub_8107DB4
+ bl GoToBagMenu
ldr r1, _0809ACF0 @ =gFieldCallback
ldr r0, _0809ACF4 @ =sub_809AD74
str r0, [r1]
@@ -386,7 +386,7 @@ sub_809AD8C: @ 809AD8C
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl field_weather_is_fade_finished
+ bl IsWeatherNotFadingIn
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -793,7 +793,7 @@ _0809B118:
movs r1, 0
movs r2, 0xE
movs r3, 0x1E
- bl SetBgRectPal
+ bl SetBgTilemapPalette
b _0809B14E
.align 2, 0
_0809B138: .4byte gUnknown_2039934
@@ -805,7 +805,7 @@ _0809B13C:
movs r1, 0
movs r2, 0xC
movs r3, 0x1E
- bl SetBgRectPal
+ bl SetBgTilemapPalette
_0809B14E:
movs r0, 0x1
bl ScheduleBgCopyTilemapToVram
diff --git a/common_syms/party_menu.txt b/common_syms/party_menu.txt
new file mode 100644
index 000000000..6ed37392c
--- /dev/null
+++ b/common_syms/party_menu.txt
@@ -0,0 +1 @@
+gItemUseCB
diff --git a/data/event_scripts.s b/data/event_scripts.s
index f75442912..c07f400a1 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -9706,7 +9706,7 @@ EventScript_1BC13A:: @ 81BC13A
goto_if eq, EventScript_1BC2A6
msgbox gUnknown_81BD059
setvar VAR_0x8005, 0
- special sub_8127888
+ special ChooseMonForWirelessMinigame
waitstate
compare_var_to_value VAR_0x8004, 6
goto_if ge, EventScript_1BB83F
@@ -9726,7 +9726,7 @@ EventScript_1BC184:: @ 81BC184
goto_if eq, EventScript_1BC2A6
msgbox gUnknown_81BD059
setvar VAR_0x8005, 1
- special sub_8127888
+ special ChooseMonForWirelessMinigame
waitstate
compare_var_to_value VAR_0x8004, 6
goto_if ge, EventScript_1BB83F
@@ -13968,7 +13968,7 @@ EventScript_1C4F26:: @ 81C4F26
end
EventScript_1C4F30:: @ 81C4F30
- special sub_812781C
+ special ChooseMonForMoveTutor
waitstate
lock
faceplayer
diff --git a/data/graphics.s b/data/graphics.s
index 5eacc0cb2..a6b9db097 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -13892,35 +13892,35 @@ gFile_graphics_battle_anims_sprites_188_palette:: @ 8E826E8
.incbin "graphics/battle_anims/sprites/188.gbapal.lz"
.align 2
-gFile_graphics_interface_party_menu_misc_sheet:: @ 8E82700
+gPartyMenuBg_Gfx:: @ 8E82700
.incbin "graphics/interface/party_menu_misc.4bpp.lz"
.align 2
-gUnknown_8E829C8:: @ 8E829C8
+gPartyMenuBg_Pal:: @ 8E829C8
.incbin "baserom.gba", 0xE829C8, 0xE8
.align 2
-gFile_graphics_interface_party_menu_misc_tilemap:: @ 8E82AB0
+gPartyMenuBg_Tilemap:: @ 8E82AB0
.incbin "graphics/interface/party_menu_misc.bin.lz"
.align 2
-gFile_graphics_interface_party_menu_pokeball_sheet:: @ 8E82BE8
+gPartyMenuPokeball_Gfx:: @ 8E82BE8
.incbin "graphics/interface/party_menu_pokeball.4bpp.lz"
.align 2
-gFile_graphics_interface_party_menu_pokeball_small_sheet:: @ 8E82D68
+gPartyMenuPokeballSmall_Gfx:: @ 8E82D68
.incbin "graphics/interface/party_menu_pokeball_small.4bpp.lz"
.align 2
-gFile_graphics_interface_party_menu_pokeball_palette:: @ 8E82E7C
+gPartyMenuPokeball_Pal:: @ 8E82E7C
.incbin "graphics/interface/party_menu_pokeball.gbapal.lz"
.align 2
-gUnknown_8E82EA0:: @ 8E82EA0
+gStatusGfx_Icons:: @ 8E82EA0
.incbin "baserom.gba", 0xE82EA0, 0x204
.align 2
-gFile_graphics_interface_status_icons_palette:: @ 8E830A4
+gStatusPal_Icons:: @ 8E830A4
.incbin "graphics/interface/status_icons.gbapal.lz"
.align 2
diff --git a/data/party_menu.s b/data/party_menu.s
deleted file mode 100644
index 7c484deb3..000000000
--- a/data/party_menu.s
+++ /dev/null
@@ -1,672 +0,0 @@
-#include "constants/region_map.h"
-#include "constants/flags.h"
-#include "constants/moves.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gMoveTutorMoves:: @ 8459B60
- .2byte MOVE_MEGA_PUNCH
- .2byte MOVE_SWORDS_DANCE
- .2byte MOVE_MEGA_KICK
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_DOUBLE_EDGE
- .2byte MOVE_COUNTER
- .2byte MOVE_SEISMIC_TOSS
- .2byte MOVE_MIMIC
- .2byte MOVE_METRONOME
- .2byte MOVE_SOFT_BOILED
- .2byte MOVE_DREAM_EATER
- .2byte MOVE_THUNDER_WAVE
- .2byte MOVE_EXPLOSION
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_SUBSTITUTE
-
-gMoveTutorMoveCompatibilityTable:: @ 8459B7E
- .2byte 0x0000
- .2byte 0x409a
- .2byte 0x409a
- .2byte 0x409a
- .2byte 0x60ff
- .2byte 0x60ff
- .2byte 0x60ff
- .2byte 0x40fd
- .2byte 0x40fd
- .2byte 0x40fd
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x4490
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x4092
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x48b8
- .2byte 0x48b8
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x48fd
- .2byte 0x48fd
- .2byte 0x60fa
- .2byte 0x60fa
- .2byte 0x40b8
- .2byte 0x40b8
- .2byte 0x60fd
- .2byte 0x40b8
- .2byte 0x40b8
- .2byte 0x60fd
- .2byte 0x4ffd
- .2byte 0x4ffd
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4cfd
- .2byte 0x4cfd
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x4092
- .2byte 0x4092
- .2byte 0x409a
- .2byte 0x40ba
- .2byte 0x40ba
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x4498
- .2byte 0x4498
- .2byte 0x40fd
- .2byte 0x40fd
- .2byte 0x61fd
- .2byte 0x61fd
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x41fd
- .2byte 0x41fd
- .2byte 0x4dfd
- .2byte 0x4dfd
- .2byte 0x4dfd
- .2byte 0x61fd
- .2byte 0x61fd
- .2byte 0x61fd
- .2byte 0x4092
- .2byte 0x4092
- .2byte 0x409a
- .2byte 0x4092
- .2byte 0x4092
- .2byte 0x71f9
- .2byte 0x71f9
- .2byte 0x71fd
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4c98
- .2byte 0x4cfd
- .2byte 0x4890
- .2byte 0x4890
- .2byte 0x409a
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x5088
- .2byte 0x5088
- .2byte 0x5090
- .2byte 0x5090
- .2byte 0x5480
- .2byte 0x5480
- .2byte 0x55fd
- .2byte 0x7098
- .2byte 0x4dfd
- .2byte 0x4dfd
- .2byte 0x409a
- .2byte 0x409a
- .2byte 0x5880
- .2byte 0x5880
- .2byte 0x5490
- .2byte 0x5490
- .2byte 0x60ff
- .2byte 0x60ff
- .2byte 0x61fd
- .2byte 0x61fd
- .2byte 0x64ff
- .2byte 0x5080
- .2byte 0x5080
- .2byte 0x60ba
- .2byte 0x60ff
- .2byte 0x4ffd
- .2byte 0x409a
- .2byte 0x60fd
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x4890
- .2byte 0x4c90
- .2byte 0x4dfd
- .2byte 0x40b2
- .2byte 0x45fd
- .2byte 0x48fd
- .2byte 0x40fd
- .2byte 0x60da
- .2byte 0x4098
- .2byte 0x0000
- .2byte 0x4898
- .2byte 0x4498
- .2byte 0x0000
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4898
- .2byte 0x4098
- .2byte 0x4c90
- .2byte 0x6098
- .2byte 0x60d8
- .2byte 0x6098
- .2byte 0x60de
- .2byte 0x6090
- .2byte 0x61fd
- .2byte 0x4090
- .2byte 0x4890
- .2byte 0x4090
- .2byte 0x4898
- .2byte 0x4898
- .2byte 0x4898
- .2byte 0x4dfd
- .2byte 0x7fff
- .2byte 0x40ba
- .2byte 0x40ba
- .2byte 0x40ba
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x60fd
- .2byte 0x60ff
- .2byte 0x60ff
- .2byte 0x60ff
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4490
- .2byte 0x4490
- .2byte 0x4093
- .2byte 0x4093
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4090
- .2byte 0x4890
- .2byte 0x4890
- .2byte 0x48fd
- .2byte 0x4ffd
- .2byte 0x4cfd
- .2byte 0x4ffd
- .2byte 0x4ffd
- .2byte 0x4c90
- .2byte 0x4c90
- .2byte 0x4898
- .2byte 0x48fd
- .2byte 0x48fd
- .2byte 0x4092
- .2byte 0x40dd
- .2byte 0x40dd
- .2byte 0x70fd
- .2byte 0x41fd
- .2byte 0x4092
- .2byte 0x4092
- .2byte 0x4092
- .2byte 0x4dfd
- .2byte 0x4092
- .2byte 0x4092
- .2byte 0x4490
- .2byte 0x4098
- .2byte 0x40fd
- .2byte 0x4498
- .2byte 0x4498
- .2byte 0x4c90
- .2byte 0x4cfd
- .2byte 0x4c90
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x4c98
- .2byte 0x70b8
- .2byte 0x70b8
- .2byte 0x6cb8
- .2byte 0x64b2
- .2byte 0x7098
- .2byte 0x49fd
- .2byte 0x69fd
- .2byte 0x4892
- .2byte 0x40b2
- .2byte 0x6098
- .2byte 0x60fa
- .2byte 0x44b2
- .2byte 0x41ff
- .2byte 0x61ff
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x7098
- .2byte 0x4890
- .2byte 0x48d0
- .2byte 0x40fd
- .2byte 0x4098
- .2byte 0x60b0
- .2byte 0x44b8
- .2byte 0x44b8
- .2byte 0x4098
- .2byte 0x40b8
- .2byte 0x60b8
- .2byte 0x4c90
- .2byte 0x4c98
- .2byte 0x0000
- .2byte 0x60fc
- .2byte 0x60fc
- .2byte 0x45fd
- .2byte 0x48fd
- .2byte 0x40fd
- .2byte 0x69fd
- .2byte 0x4ffd
- .2byte 0x4898
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x68fd
- .2byte 0x4c98
- .2byte 0x4c90
- .2byte 0x4592
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x40ff
- .2byte 0x40ff
- .2byte 0x40ff
- .2byte 0x60ff
- .2byte 0x60ff
- .2byte 0x60ff
- .2byte 0x4098
- .2byte 0x60fd
- .2byte 0x60fd
- .2byte 0x40b8
- .2byte 0x40b8
- .2byte 0x4898
- .2byte 0x4898
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x4090
- .2byte 0x0000
- .2byte 0x4090
- .2byte 0x409a
- .2byte 0x409a
- .2byte 0x41ff
- .2byte 0x509a
- .2byte 0x509e
- .2byte 0x509e
- .2byte 0x4090
- .2byte 0x4092
- .2byte 0x4490
- .2byte 0x40b0
- .2byte 0x40b0
- .2byte 0x409a
- .2byte 0x40ff
- .2byte 0x65fd
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4c98
- .2byte 0x4c98
- .2byte 0x69fd
- .2byte 0x7490
- .2byte 0x7490
- .2byte 0x7898
- .2byte 0x7098
- .2byte 0x45fd
- .2byte 0x4090
- .2byte 0x6090
- .2byte 0x4090
- .2byte 0x40ba
- .2byte 0x40ba
- .2byte 0x4090
- .2byte 0x4098
- .2byte 0x4090
- .2byte 0x4090
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x61fd
- .2byte 0x61fd
- .2byte 0x4898
- .2byte 0x4898
- .2byte 0x6098
- .2byte 0x7098
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x40fb
- .2byte 0x40ff
- .2byte 0x4098
- .2byte 0x5098
- .2byte 0x7498
- .2byte 0x7498
- .2byte 0x4098
- .2byte 0x4498
- .2byte 0x44fd
- .2byte 0x49fd
- .2byte 0x49fd
- .2byte 0x60ff
- .2byte 0x45fd
- .2byte 0x65fd
- .2byte 0x4498
- .2byte 0x4498
- .2byte 0x0000
- .2byte 0x4498
- .2byte 0x65fd
- .2byte 0x409a
- .2byte 0x60fd
- .2byte 0x60fd
- .2byte 0x60fd
- .2byte 0x54b8
- .2byte 0x54b8
- .2byte 0x409a
- .2byte 0x40fd
- .2byte 0x60fd
- .2byte 0x60fd
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x4098
- .2byte 0x6cba
- .2byte 0x4c98
- .2byte 0x4d98
- .2byte 0x4098
- .2byte 0x68ff
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x68fd
- .2byte 0x4898
- .2byte 0x49fd
- .2byte 0x49fd
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x609a
- .2byte 0x60da
- .2byte 0x4c98
- .2byte 0x4c98
- .2byte 0x4c98
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x6098
- .2byte 0x0000
- .2byte 0x7098
- .2byte 0x7098
- .2byte 0x78fd
- .2byte 0x78fd
- .2byte 0x78fd
- .2byte 0x6898
- .2byte 0x68ff
- .2byte 0x6898
- .2byte 0x4c98
- .2byte 0x4c98
- .2byte 0x4d98
- .2byte 0x6cfd
- .2byte 0x4490
-
- .align 2
-gUnknown_8459EB8:: @ 8459EB8
- .incbin "baserom.gba", 0x459EB8, 0xC
-
-gUnknown_8459EC4:: @ 8459EC4
- .incbin "baserom.gba", 0x459EC4, 0x20
-
-gUnknown_8459EE4:: @ 8459EE4
- .incbin "baserom.gba", 0x459EE4, 0x20
-
-gUnknown_8459F04:: @ 8459F04
- .incbin "baserom.gba", 0x459F04, 0xC0
-
-gUnknown_8459FC4:: @ 8459FC4
- .incbin "baserom.gba", 0x459FC4, 0x1C
-
-gUnknown_8459FE0:: @ 8459FE0
- .incbin "baserom.gba", 0x459FE0, 0x1C
-
-gUnknown_8459FFC:: @ 8459FFC
- .incbin "baserom.gba", 0x459FFC, 0xF
-
-gUnknown_845A00B:: @ 845A00B
- .incbin "baserom.gba", 0x45A00B, 0x5
-
-gUnknown_845A010:: @ 845A010
- .incbin "baserom.gba", 0x45A010, 0x40
-
-gUnknown_845A050:: @ 845A050
- .incbin "baserom.gba", 0x45A050, 0x40
-
-gUnknown_845A090:: @ 845A090
- .incbin "baserom.gba", 0x45A090, 0x40
-
-gUnknown_845A0D0:: @ 845A0D0
- .incbin "baserom.gba", 0x45A0D0, 0x38
-
-gUnknown_845A108:: @ 845A108
- .incbin "baserom.gba", 0x45A108, 0x8
-
-gUnknown_845A110:: @ 845A110
- .incbin "baserom.gba", 0x45A110, 0x8
-
-gUnknown_845A118:: @ 845A118
- .incbin "baserom.gba", 0x45A118, 0x8
-
-gUnknown_845A120:: @ 845A120
- .incbin "baserom.gba", 0x45A120, 0x8
-
-gUnknown_845A128:: @ 845A128
- .incbin "baserom.gba", 0x45A128, 0x8
-
-gUnknown_845A130:: @ 845A130
- .incbin "baserom.gba", 0x45A130, 0x8
-
-gUnknown_845A138:: @ 845A138
- .incbin "baserom.gba", 0x45A138, 0x8
-
-gUnknown_845A140:: @ 845A140
- .incbin "baserom.gba", 0x45A140, 0x8
-
-gUnknown_845A148:: @ 845A148
- .incbin "baserom.gba", 0x45A148, 0x8
-
-gUnknown_845A150:: @ 845A150
- .incbin "baserom.gba", 0x45A150, 0x8
-
-gUnknown_845A158:: @ 845A158
- .incbin "baserom.gba", 0x45A158, 0x8
-
-gUnknown_845A160:: @ 845A160
- .incbin "baserom.gba", 0x45A160, 0x8
-
-gUnknown_845A168:: @ 845A168
- .incbin "baserom.gba", 0x45A168, 0x8
-
-gUnknown_845A170:: @ 845A170
- .incbin "baserom.gba", 0x45A170, 0x8
-
-gUnknown_845A178:: @ 845A178
- .incbin "baserom.gba", 0x45A178, 0x8
-
-gUnknown_845A180:: @ 845A180
- .incbin "baserom.gba", 0x45A180, 0x46
-
-gUnknown_845A1C6:: @ 845A1C6
- .incbin "baserom.gba", 0x45A1C6, 0x46
-
-gUnknown_845A20C:: @ 845A20C
- .incbin "baserom.gba", 0x45A20C, 0x36
-
-gUnknown_845A242:: @ 845A242
- .incbin "baserom.gba", 0x45A242, 0x36
-
-gUnknown_845A278:: @ 845A278
- .incbin "baserom.gba", 0x45A278, 0x36
-
-gUnknown_845A2AE:: @ 845A2AE
- .incbin "baserom.gba", 0x45A2AE, 0x2
-
-gUnknown_845A2B0:: @ 845A2B0
- .incbin "baserom.gba", 0x45A2B0, 0x2
-
-gUnknown_845A2B2:: @ 845A2B2
- .incbin "baserom.gba", 0x45A2B2, 0x3
-
-gUnknown_845A2B5:: @ 845A2B5
- .incbin "baserom.gba", 0x45A2B5, 0x3
-
-gUnknown_845A2B8:: @ 845A2B8
- .incbin "baserom.gba", 0x45A2B8, 0x2
-
-gUnknown_845A2BA:: @ 845A2BA
- .incbin "baserom.gba", 0x45A2BA, 0x2
-
-gUnknown_845A2BC:: @ 845A2BC
- .incbin "baserom.gba", 0x45A2BC, 0x2
-
-gUnknown_845A2BE:: @ 845A2BE
- .incbin "baserom.gba", 0x45A2BE, 0x2
-
-gUnknown_845A2C0:: @ 845A2C0
- .incbin "baserom.gba", 0x45A2C0, 0x2
-
-gUnknown_845A2C2:: @ 845A2C2
- .incbin "baserom.gba", 0x45A2C2, 0x3
-
-gUnknown_845A2C5:: @ 845A2C5
- .incbin "baserom.gba", 0x45A2C5, 0x3
-
-gUnknown_845A2C8:: @ 845A2C8
- .incbin "baserom.gba", 0x45A2C8, 0x3
-
-gUnknown_845A2CB:: @ 845A2CB
- .incbin "baserom.gba", 0x45A2CB, 0x3
-
-gUnknown_845A2CE:: @ 845A2CE
- .incbin "baserom.gba", 0x45A2CE, 0x3
-
-gUnknown_845A2D1:: @ 845A2D1
- .incbin "baserom.gba", 0x45A2D1, 0x3
-
-gUnknown_845A2D4:: @ 845A2D4
- .incbin "baserom.gba", 0x45A2D4, 0x3
-
-gUnknown_845A2D7:: @ 845A2D7
- .incbin "baserom.gba", 0x45A2D7, 0x3
-
-gUnknown_845A2DA:: @ 845A2DA
- .incbin "baserom.gba", 0x45A2DA, 0x3
-
-gUnknown_845A2DD:: @ 845A2DD
- .incbin "baserom.gba", 0x45A2DD, 0x3
-
-gUnknown_845A2E0:: @ 845A2E0
- .incbin "baserom.gba", 0x45A2E0, 0x3
-
-gUnknown_845A2E3:: @ 845A2E3
- .incbin "baserom.gba", 0x45A2E3, 0x5
-
-gUnknown_845A2E8:: @ 845A2E8
- .incbin "baserom.gba", 0x45A2E8, 0x6C
-
-gUnknown_845A354:: @ 845A354
- .incbin "baserom.gba", 0x45A354, 0x28
-
-gUnknown_845A37C:: @ 845A37C
- .incbin "baserom.gba", 0x45A37C, 0xB0
-
-gUnknown_845A42C:: @ 845A42C
- .incbin "baserom.gba", 0x45A42C, 0x8
-
-gUnknown_845A434:: @ 845A434
- .incbin "baserom.gba", 0x45A434, 0x8
-
-gUnknown_845A43C:: @ 845A43C
- .incbin "baserom.gba", 0x45A43C, 0x38
-
-gUnknown_845A474:: @ 845A474
- .incbin "baserom.gba", 0x45A474, 0x8
-
-gUnknown_845A47C:: @ 845A47C
- .incbin "baserom.gba", 0x45A47C, 0x8
-
-gUnknown_845A484:: @ 845A484
- .incbin "baserom.gba", 0x45A484, 0x68
-
-gUnknown_845A4EC:: @ 845A4EC
- .incbin "baserom.gba", 0x45A4EC, 0x8
-
-gUnknown_845A4F4:: @ 845A4F4
- .incbin "baserom.gba", 0x45A4F4, 0x80
-
-gUnknown_845A574:: @ 845A574
- .incbin "baserom.gba", 0x45A574, 0x8
-
-gUnknown_845A57C:: @ 845A57C
- .incbin "baserom.gba", 0x45A57C, 0x8
-
-gUnknown_845A584:: @ 845A584
- .incbin "baserom.gba", 0x45A584, 0x18
-
-gUnknown_845A59C:: @ 845A59C
- .incbin "baserom.gba", 0x45A59C, 0x7C
-
-gUnknown_845A618:: @ 845A618
- .incbin "baserom.gba", 0x45A618, 0x114
-
-gUnknown_845A72C:: @ 845A72C
- .incbin "baserom.gba", 0x45A72C, 0x34
-
-gUnknown_845A760:: @ 845A760
- .incbin "baserom.gba", 0x45A760, 0xE
-
-gUnknown_845A76E:: @ 845A76E
- .incbin "baserom.gba", 0x45A76E, 0x1A
-
-gUnknown_845A788:: @ 845A788
- .incbin "baserom.gba", 0x45A788, 0x60
-
-gUnknown_845A7E8:: @ 845A7E8
- .4byte gUnknown_841718C @ Not what other player wants
- .4byte gUnknown_84171CC @ Not an egg
- .4byte gUnknown_84170BC @ Mon can't be traded
- .4byte gUnknown_84170BC @ Mon can't be traded
- .4byte gUnknown_84170FC @ Other trainer's mon can't be traded
- .4byte gUnknown_84170E0 @ Egg can't be traded
- .4byte gUnknown_8417130 @ Other trainer can't accept
- .4byte gUnknown_8417164 @ Can't trade with trainer now
- .4byte gUnknown_8417164 @ Can't trade with trainer now
-
-gUnknown_845A80C:: @ 845A80C
- .incbin "baserom.gba", 0x45A80C, 0x74
diff --git a/data/specials.inc b/data/specials.inc
index 6c1cbfa8e..74ba0c849 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -405,8 +405,8 @@ gSpecials:: @ 815FD60
def_special get_unknown_box_id
def_special Special_OpenMuseumFossilPic
def_special Special_CloseMuseumFossilPic
- def_special sub_812781C
- def_special sub_8127888
+ def_special ChooseMonForMoveTutor
+ def_special ChooseMonForWirelessMinigame
def_special SetBattledTrainerFlag
def_special sub_812B35C
def_special Special_SSAnneDepartureCutscene
diff --git a/data/strings.s b/data/strings.s
index a1892e209..628bbda28 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -433,16 +433,16 @@ gString_Dummy:: @ 84161CD
gUnknown_84161CE::
.string "キャンセル$"
-gUnknown_84161D4::
+gText_Item::
.string "ITEM$"
-gUnknown_84161D9::
+gText_Mail::
.string "MAIL$"
-gUnknown_84161DE::
+gText_Take::
.string "TAKE$"
-gUnknown_84161E3::
+gText_Store::
.string "STORE$"
gUnknown_84161E9::
@@ -463,7 +463,7 @@ gUnknown_8416202:: @ 8416202
gUnknown_8416206::
.string "?????$"
-gUnknown_841620C:: @ 841620C
+gText_Slash:: @ 841620C
.string "/$"
gUnknown_841620E:: @ 841620E
@@ -478,10 +478,10 @@ gText_ThreeHyphens:: @ 8416213
gUnknown_8416217:: @ 8416217
.string "-------$"
-gUnknown_841621F:: @ 841621F
+gText_MaleSymbol:: @ 841621F
.string "♂$"
-gUnknown_8416221:: @ 8416221
+gText_FemaleSymbol:: @ 8416221
.string "♀$"
gText_Lv:: @ 8416223
@@ -804,85 +804,85 @@ gText_TurnedOverItemsWorthYen:: @ 8416959
gText_PokedollarVar1:: @ 841697A
.string "¥{STR_VAR_1}$"
-gUnknown_841697E:: @ 0x841697E
+gText_Shift:: @ 0x841697E
.string "SHIFT$"
-gUnknown_8416984:: @ 0x8416984
+gText_SendOut:: @ 0x8416984
.string "SEND OUT$"
-gUnknown_841698D:: @ 0x841698D
+gText_Switch2:: @ 0x841698D
.string "SWITCH$"
-gUnknown_8416994:: @ 0x8416994
+gText_Summary5:: @ 0x8416994
.string "SUMMARY$"
gUnknown_841699C:: @ 0x841699C
.string "つかえるわざ$"
-gUnknown_84169A3:: @ 0x84169A3
+gText_Enter:: @ 0x84169A3
.string "ENTER$"
-gUnknown_84169A9:: @ 0x84169A9
+gText_NoEntry:: @ 0x84169A9
.string "NO ENTRY$"
-gUnknown_84169B2:: @ 0x84169B2
+gText_Take2:: @ 0x84169B2
.string "TAKE$"
-gUnknown_84169B7:: @ 0x84169B7
+gText_Read2:: @ 0x84169B7
.string "READ$"
-gUnknown_84169BC:: @ 0x84169BC
+gText_Trade4:: @ 0x84169BC
.string "TRADE$"
-gUnknown_84169C2:: @ 84169C2
+gText_HP3:: @ 84169C2
.string "HP$"
-gUnknown_84169C5:: @ 84169C5
+gText_SpAtk3:: @ 84169C5
.string "SP. ATK$"
-gUnknown_84169CD:: @ 84169CD
+gText_SpDef3:: @ 84169CD
.string "SP. DEF$"
-gUnknown_84169D5:: @ 84169D5
+gMenuText_Confirm:: @ 84169D5
.string "OK$"
gUnknown_84169D8:: @ 0x84169D8
.string "$"
-gUnknown_84169D9:: @ 84169D9
+gText_PauseUntilPress:: @ 84169D9
.string "{PAUSE_UNTIL_PRESS}$"
-gUnknown_84169DC:: @ 84169DC
+gText_WontHaveEffect:: @ 84169DC
.string "It won't have any effect.{PAUSE_UNTIL_PRESS}$"
gUnknown_84169F8:: @ 84169F8
.string "This can't be used on\n"
.string "that POKéMON.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416A1E:: @ 8416A1E
+gText_PkmnCantSwitchOut:: @ 8416A1E
.string "{STR_VAR_1} can't be switched\n"
.string "out!{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416A3A:: @ 8416A3A
+gText_PkmnAlreadyInBattle:: @ 8416A3A
.string "{STR_VAR_1} is already\n"
.string "in battle!{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416A55:: @ 8416A55
+gText_PkmnAlreadySelected:: @ 8416A55
.string "{STR_VAR_1} has already been\n"
.string "selected.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416A75:: @ 8416A75
+gText_PkmnHasNoEnergy:: @ 8416A75
.string "{STR_VAR_1} has no energy\n"
.string "left to battle!{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416A98:: @ 8416A98
+gText_CantSwitchWithAlly:: @ 8416A98
.string "You can't switch {STR_VAR_1}'s\n"
.string "POKéMON with one of yours!{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416ACB:: @ 8416ACB
+gText_EggCantBattle:: @ 8416ACB
.string "An EGG can't battle!{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416AE2:: @ 8416AE2
+gText_CantUseUntilNewBadge:: @ 8416AE2
.string "This can't be used until a new\n"
.string "BADGE is obtained.{PAUSE_UNTIL_PRESS}$"
@@ -894,73 +894,73 @@ gUnknown_8416B3E:: @ 8416B3E
.string "No more than two POKéMON\n"
.string "may enter.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416B64:: @ 8416B64
+gText_SendMailToPC:: @ 8416B64
.string "Send the removed MAIL to\n"
.string "your PC?$"
-gUnknown_8416B86:: @ 8416B86
+gText_MailSentToPC:: @ 8416B86
.string "The MAIL was sent to your PC.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416BA6:: @ 8416BA6
+gText_PCMailboxFull:: @ 8416BA6
.string "Your PC's MAILBOX is full.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416BC3:: @ 8416BC3
+gText_MailMessageWillBeLost:: @ 8416BC3
.string "If the MAIL is removed, the\n"
.string "message will be lost. Okay?$"
-gUnknown_8416BFB:: @ 8416BFB
+gText_RemoveMailBeforeItem:: @ 8416BFB
.string "MAIL must be removed before\n"
.string "holding an item.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416C2A:: @ 8416C2A
+gText_PkmnWasGivenItem:: @ 8416C2A
.string "{STR_VAR_1} was given the\n"
.string "{STR_VAR_2} to hold.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416C49:: @ 8416C49
+gText_PkmnAlreadyHoldingItemSwitch:: @ 8416C49
.string "{STR_VAR_1} is already holding\n"
.string "one {STR_VAR_2}.\p"
.string "Would you like to switch the\n"
.string "two items?$"
-gUnknown_8416C8F:: @ 8416C8F
+gText_PkmnNotHolding:: @ 8416C8F
.string "{STR_VAR_1} isn't holding\n"
.string "anything.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416CAC:: @ 8416CAC
+gText_ReceivedItemFromPkmn:: @ 8416CAC
.string "Received the {STR_VAR_2}\n"
.string "from {STR_VAR_1}.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416CC7:: @ 8416CC7
+gText_MailTakenFromPkmn:: @ 8416CC7
.string "MAIL was taken from the\n"
.string "POKéMON.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416CEA:: @ 8416CEA
+gText_SwitchedPkmnItem:: @ 8416CEA
.string "The {STR_VAR_2} was taken and\n"
.string "replaced with the {STR_VAR_1}.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416D17:: @ 8416D17
+gText_PkmnHoldingItemCantHoldMail:: @ 8416D17
.string "This POKéMON is holding an\n"
.string "item. It cannot hold MAIL.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416D4F:: @ 8416D4F
+gText_MailTransferredFromMailbox:: @ 8416D4F
.string "MAIL was transferred from\n"
.string "the MAILBOX.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416D78:: @ 8416D78
+gText_BagFullCouldNotRemoveItem:: @ 8416D78
.string "The {STR_VAR_1} is full. The POKéMON's\n"
.string "item could not be removed.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416DB3:: @ 8416DB3
+gText_PkmnLearnedMove3:: @ 8416DB3
.string "{STR_VAR_1} learned\n"
.string "{STR_VAR_2}!$"
-gUnknown_8416DC2:: @ 8416DC2
+gText_PkmnCantLearnMove:: @ 8416DC2
.string "{STR_VAR_1} and {STR_VAR_2}\n"
.string "are not compatible.\p"
.string "{STR_VAR_2} can't be\n"
.string "learned.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416DF7:: @ 8416DF7
+gText_PkmnNeedsToReplaceMove:: @ 8416DF7
.string "{STR_VAR_1} wants to learn the\n"
.string "move {STR_VAR_2}.\p"
.string "However, {STR_VAR_1} already\n"
@@ -968,74 +968,74 @@ gUnknown_8416DF7:: @ 8416DF7
.string "Should a move be deleted and\n"
.string "replaced with {STR_VAR_2}?$"
-gUnknown_8416E6B:: @ 8416E6B
+gText_StopLearningMove2:: @ 8416E6B
.string "Stop trying to teach\n"
.string "{STR_VAR_2}?$"
-gUnknown_8416E84:: @ 8416E84
+gText_MoveNotLearned:: @ 8416E84
.string "{STR_VAR_1} did not learn the\n"
.string "move {STR_VAR_2}.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416EA4:: @ 8416EA4
+gText_WhichMoveToForget:: @ 8416EA4
.string "Which move should be forgotten?{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416EC6:: @ 8416EC6
+gText_12PoofForgotMove:: @ 8416EC6
.string "1, {PAUSE 0x0F}2, and{PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}{PLAY_SE SE_KON}Poof!\p"
.string "{STR_VAR_1} forgot how to\n"
.string "use {STR_VAR_2}.\p"
.string "And...{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416F10:: @ 8416F10
+gText_PkmnAlreadyKnows:: @ 8416F10
.string "{STR_VAR_1} already knows\n"
.string "{STR_VAR_2}.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416F27:: @ 8416F27
+gText_PkmnHPRestoredByVar2:: @ 8416F27
.string "{STR_VAR_1}'s HP was restored\n"
.string "by {STR_VAR_2} point(s).{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416F4E:: @ 8416F4E
+gText_PkmnCuredOfPoison:: @ 8416F4E
.string "{STR_VAR_1} was cured of its\n"
.string "poisoning.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416F6F:: @ 8416F6F
+gText_PkmnCuredOfParalysis:: @ 8416F6F
.string "{STR_VAR_1} was cured of\n"
.string "paralysis.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416F8C:: @ 8416F8C
+gText_PkmnWokeUp2:: @ 8416F8C
.string "{STR_VAR_1} woke up.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416F9A:: @ 8416F9A
+gText_PkmnBurnHealed:: @ 8416F9A
.string "{STR_VAR_1}'s burn was healed.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416FB2:: @ 8416FB2
+gText_PkmnThawedOut:: @ 8416FB2
.string "{STR_VAR_1} was thawed out.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416FC7:: @ 8416FC7
+gText_PPWasRestored:: @ 8416FC7
.string "PP was restored.{PAUSE_UNTIL_PRESS}$"
gUnknown_8416FDA:: @ 0x8416FDA
.string "{STR_VAR_1}は\n"
.string "げんきを とりもどした!{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416FED:: @ 8416FED
+gText_PkmnBecameHealthy:: @ 8416FED
.string "{STR_VAR_1} became healthy.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8417002:: @ 8417002
+gText_MovesPPIncreased:: @ 8417002
.string "{STR_VAR_1}'s PP increased.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8417017:: @ 8417017
+gText_PkmnElevatedToLvVar2:: @ 8417017
.string "{STR_VAR_1} was elevated to\n"
.string "Lv. {STR_VAR_2}.$"
-gUnknown_8417032:: @ 8417032
+gText_PkmnBaseVar2StatIncreased:: @ 8417032
.string "{STR_VAR_1}'s base {STR_VAR_2}\n"
.string "stat was raised.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8417052:: @ 8417052
+gText_PkmnSnappedOutOfConfusion:: @ 8417052
.string "{STR_VAR_1} snapped out of its\n"
.string "confusion.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8417075:: @ 8417075
+gText_PkmnGotOverInfatuation:: @ 8417075
.string "{STR_VAR_1} got over its\n"
.string "infatuation.{PAUSE_UNTIL_PRESS}$"
@@ -1044,144 +1044,144 @@ gUnknown_8417094:: @ 0x8417094
.string "POKéMON for battle.$"
.align 2
-gUnknown_84170BC:: @ 84170BC
+gText_PkmnCantBeTradedNow:: @ 84170BC
.string "That POKéMON can't be traded\n"
.string "now.$"
.align 2
-gUnknown_84170E0:: @ 84170E0
+gText_EggCantBeTradedNow:: @ 84170E0
.string "An EGG can't be traded now.$"
.align 2
-gUnknown_84170FC:: @ 0x84170FC
+gText_OtherTrainersPkmnCantBeTraded:: @ 0x84170FC
.string "The other TRAINER's POKéMON\n"
.string "can't be traded now.$"
.align 2
-gUnknown_8417130:: @ 0x8417130
+gText_OtherTrainerCantAcceptPkmn:: @ 0x8417130
.string "The other TRAINER can't accept\n"
.string "that POKéMON now.$"
.align 2
-gUnknown_8417164:: @ 0x8417164
+gText_CantTradeWithTrainer:: @ 0x8417164
.string "You can't trade with that\n"
.string "TRAINER now.$"
.align 2
-gUnknown_841718C:: @ 0x841718C
+gText_NotPkmnOtherTrainerWants:: @ 0x841718C
.string "That isn't the type of POKéMON\n"
.string "that the other TRAINER wants.$"
.align 2
-gUnknown_84171CC:: @ 0x84171CC
+gText_ThatIsntAnEgg:: @ 0x84171CC
.string "That isn't an EGG.$"
-gUnknown_84171DF:: @ 0x84171DF
+gText_ChoosePokemon:: @ 0x84171DF
.string "Choose a POKéMON.$"
-gUnknown_84171F1:: @ 0x84171F1
+gText_MoveToWhere:: @ 0x84171F1
.string "Move to where?$"
-gUnknown_8417200:: @ 0x8417200
+gText_TeachWhichPokemon:: @ 0x8417200
.string "Teach which POKéMON?$"
-gUnknown_8417215:: @ 0x8417215
+gText_UseOnWhichPokemon:: @ 0x8417215
.string "Use on which POKéMON?$"
-gUnknown_841722B:: @ 0x841722B
+gText_GiveToWhichPokemon:: @ 0x841722B
.string "Give to which POKéMON?$"
-gUnknown_8417242:: @ 0x8417242
+gText_DoWhatWithPokemon:: @ 0x8417242
.string "Do what with this {PKMN}?$"
-gUnknown_8417258:: @ 0x8417258
+gText_NothingToCut:: @ 0x8417258
.string "There's nothing to CUT.$"
-gUnknown_8417270:: @ 0x8417270
+gText_CantSurfHere:: @ 0x8417270
.string "No SURFING here!$"
-gUnknown_8417281:: @ 0x8417281
+gText_AlreadySurfing:: @ 0x8417281
.string "You're already SURFING.$"
-gUnknown_8417299:: @ 0x8417299
+gText_CantUseHere:: @ 0x8417299
.string "Can't use that here.$"
-gUnknown_84172AE:: @ 0x84172AE
+gText_RestoreWhichMove:: @ 0x84172AE
.string "Restore which move?$"
-gUnknown_84172C2:: @ 0x84172C2
+gText_BoostPp:: @ 0x84172C2
.string "Boost PP of which?$"
-gUnknown_84172D5:: @ 0x84172D5
+gText_DoWhatWithItem:: @ 0x84172D5
.string "Do what with an item?$"
-gUnknown_84172EB:: @ 0x84172EB
+gText_NoPokemonForBattle:: @ 0x84172EB
.string "No battling this way!$"
-gUnknown_8417301:: @ 0x8417301
+gText_ChoosePokemon2:: @ 0x8417301
.string "Choose a POKéMON.$"
-gUnknown_8417313:: @ 0x8417313
+gText_NotEnoughHp:: @ 0x8417313
.string "Not enough HP‥$"
-gUnknown_8417322:: @ 0x8417322
+gText_ThreePkmnAreNeeded:: @ 0x8417322
.string "Three {PKMN} are needed.$"
-gUnknown_8417337:: @ 0x8417337
+gText_PokemonCantBeSame:: @ 0x8417337
.string "{PKMN} can't be the same.$"
-gUnknown_841734D:: @ 0x841734D
+gText_NoIdenticalHoldItems:: @ 0x841734D
.string "No same hold items!$"
-gUnknown_8417361:: @ 0x8417361
+gText_CurrentIsTooFast:: @ 0x8417361
.string "The current is much too fast!$"
-gUnknown_841737F:: @ 0x841737F
+gText_DoWhatWithMail:: @ 0x841737F
.string "Do what with the MAIL?$"
-gUnknown_8417396:: @ 0x8417396
+gText_ChoosePokemonCancel:: @ 0x8417396
.string "Choose POKéMON or CANCEL.$"
-gUnknown_84173B0:: @ 0x84173B0
+gText_ChoosePokemonConfirm:: @ 0x84173B0
.string "Choose POKéMON and confirm.$"
-gUnknown_84173CC:: @ 0x84173CC
+gText_TwoPokemonAreNeeded:: @ 0x84173CC
.string "Two POKéMON are needed.$"
-gUnknown_84173E4:: @ 0x84173E4
+gText_EnjoyCycling:: @ 0x84173E4
.string "Let's enjoy cycling!$"
-gUnknown_84173F9:: @ 0x84173F9
+gText_InUseAlready_PM:: @ 0x84173F9
.string "This is in use already.$"
-gUnknown_8417411:: @ 0x8417411
+gText_NoUse:: @ 0x8417411
.string "No use.$"
-gUnknown_8417419:: @ 0x8417419
+gText_Able:: @ 0x8417419
.string "ABLE$"
-gUnknown_841741E:: @ 0x841741E
+gText_First_PM:: @ 0x841741E
.string "FIRST$"
-gUnknown_8417424:: @ 0x8417424
+gText_Second_PM:: @ 0x8417424
.string "SECOND$"
-gUnknown_841742B:: @ 0x841742B
+gText_Third_PM:: @ 0x841742B
.string "THIRD$"
-gUnknown_8417431:: @ 0x8417431
+gText_Able2:: @ 0x8417431
.string "ABLE$"
-gUnknown_8417436:: @ 0x8417436
+gText_NotAble:: @ 0x8417436
.string "NOT ABLE$"
-gUnknown_841743F:: @ 0x841743F
+gText_Able3:: @ 0x841743F
.string "ABLE!$"
-gUnknown_8417445:: @ 0x8417445
+gText_NotAble2:: @ 0x8417445
.string "NOT ABLE!$"
-gUnknown_841744F:: @ 0x841744F
+gText_Learned:: @ 0x841744F
.string "LEARNED$"
gUnknown_8417457:: @ 8417457
@@ -1197,54 +1197,54 @@ gUnknown_8417494:: @ 8417494
.string "You also choose POKéMON here if\n"
.string "you want to use an item on one.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8417533:: @ 0x8417533
+gText_CutATreeOrGrass:: @ 0x8417533
.string "Cut a tree or grass.$"
-gUnknown_8417548:: @ 0x8417548
+gText_FlyToAKnownTown:: @ 0x8417548
.string "Fly to a known town.$"
-gUnknown_841755D:: @ 0x841755D
+gText_TravelOnWater:: @ 0x841755D
.string "Travel on water.$"
-gUnknown_841756E:: @ 0x841756E
+gText_MoveHeavyBoulders:: @ 0x841756E
.string "Move heavy boulders.$"
-gUnknown_8417583:: @ 0x8417583
+gText_LightUpDarkness:: @ 0x8417583
.string "Light up darkness.$"
-gUnknown_8417596:: @ 0x8417596
+gText_ShatterACrackedRock:: @ 0x8417596
.string "Shatter a cracked rock.$"
-gUnknown_84175AE:: @ 0x84175AE
+gText_ClimbAWaterfall:: @ 0x84175AE
.string "Climb a waterfall.$"
gUnknown_84175C1:: @ 0x84175C1
.string "すいちゅうに もぐる$"
-gUnknown_84175CC:: @ 0x84175CC
+gText_EscapeFromHere:: @ 0x84175CC
.string "Escape from here.$"
-gUnknown_84175DE:: @ 0x84175DE
+gText_LureWildPokemon:: @ 0x84175DE
.string "Lure wild POKéMON.$"
-gUnknown_84175F1:: @ 0x84175F1
+gText_ShareHp:: @ 0x84175F1
.string "Share HP.$"
-gUnknown_84175FB:: @ 0x84175FB
+gText_ReturnToAHealingSpot:: @ 0x84175FB
.string "Return to a healing spot.$"
-gUnknown_8417615:: @ 8417615
+gText_EscapeFromHereAndReturnTo:: @ 8417615
.string "Want to escape from here and return\n"
.string "to {STR_VAR_1}?$"
-gUnknown_8417640:: @ 8417640
+gText_ReturnToHealingSpot:: @ 8417640
.string "Want to return to the healing spot\n"
.string "used last in {STR_VAR_1}?$"
-gUnknown_8417674:: @ 8417674
+gText_Attack3:: @ 8417674
.string "ATTACK$"
-gUnknown_841767B:: @ 841767B
+gText_Defense3:: @ 841767B
.string "DEFENSE$"
gUnknown_8417683:: @ 0x8417683
@@ -1253,16 +1253,16 @@ gUnknown_8417683:: @ 0x8417683
gUnknown_8417688:: @ 0x8417688
.string "とくぼう$"
-gUnknown_841768D:: @ 841768D
+gText_Speed2:: @ 841768D
.string "SPEED$"
gUnknown_8417693:: @ 0x8417693
.string "HP$"
-gUnknown_8417696:: @ 8417696
+gText_PkmnCantParticipate:: @ 8417696
.string "That POKéMON can't participate.{PAUSE_UNTIL_PRESS}$"
-gUnknown_84176B8:: @ 84176B8
+gText_CancelParticipation:: @ 84176B8
.string "Cancel participation?$"
gUnknown_84176CE:: @ 0x84176CE
@@ -3266,7 +3266,7 @@ gText_Badges:: @ 841B6EC
gTextJPDummy_Ko:: @ 841B6F3
.string "$"
-gUnknown_841B6F4:: @ 0x841B6F4
+gText_Register:: @ 0x841B6F4
.string "REGISTER$"
gText_HatchedFromEgg:: @ 841B6FD
diff --git a/graphics/interface/hold_icons.pal b/graphics/interface/hold_icons.pal
new file mode 100644
index 000000000..e31d717c9
--- /dev/null
+++ b/graphics/interface/hold_icons.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+57 205 106
+255 255 255
+213 213 255
+148 148 180
+255 246 156
+222 222 115
+246 82 41
+164 90 82
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+98 98 98
diff --git a/graphics/interface/hold_icons.png b/graphics/interface/hold_icons.png
new file mode 100644
index 000000000..15df00440
--- /dev/null
+++ b/graphics/interface/hold_icons.png
Binary files differ
diff --git a/graphics/interface/party_menu_cancel_button.bin b/graphics/interface/party_menu_cancel_button.bin
new file mode 100644
index 000000000..7f11aaf4e
--- /dev/null
+++ b/graphics/interface/party_menu_cancel_button.bin
@@ -0,0 +1,2 @@
+
+            \ No newline at end of file
diff --git a/graphics/interface/party_menu_confirm_button.bin b/graphics/interface/party_menu_confirm_button.bin
new file mode 100644
index 000000000..8c3c1be3d
--- /dev/null
+++ b/graphics/interface/party_menu_confirm_button.bin
@@ -0,0 +1 @@
+#$ \ No newline at end of file
diff --git a/include/battle.h b/include/battle.h
index fed98dd81..54aef5106 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -711,7 +711,7 @@ extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
extern u8 gBattleTerrain;
-extern struct UnknownPokemonStruct4 gUnknown_2022B58[3];
+extern struct UnknownPokemonStruct4 gMultiPartnerParty[3];
extern u16 *gUnknown_2022BC0;
extern u16 gRandomTurnNumber;
diff --git a/include/battle_tower.h b/include/battle_tower.h
index d7585c401..87f847aa4 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -25,6 +25,8 @@ struct BattleTowerPokemonTemplate
u8 nature;
};
+extern const u16 gBattleTowerBannedSpecies[];
+
u16 sub_8164FCC(u8, u8);
void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *);
void ValidateEReaderTrainer(void);
diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h
index 746f10679..4ef90ed60 100644
--- a/include/constants/easy_chat.h
+++ b/include/constants/easy_chat.h
@@ -1,6 +1,28 @@
#ifndef GUARD_CONSTANTS_EASY_CHAT_H
#define GUARD_CONSTANTS_EASY_CHAT_H
+#define EASY_CHAT_TYPE_PROFILE 0
+#define EASY_CHAT_TYPE_BATTLE_START 1
+#define EASY_CHAT_TYPE_BATTLE_WON 2
+#define EASY_CHAT_TYPE_BATTLE_LOST 3
+#define EASY_CHAT_TYPE_MAIL 4
+#define EASY_CHAT_TYPE_INTERVIEW 5
+#define EASY_CHAT_TYPE_BARD_SONG 6
+#define EASY_CHAT_TYPE_FAN_CLUB 7
+#define EASY_CHAT_TYPE_UNK_8 8
+#define EASY_CHAT_TYPE_TRENDY_PHRASE 9
+#define EASY_CHAT_TYPE_GABBY_AND_TY 10
+#define EASY_CHAT_TYPE_CONTEST_INTERVIEW 11
+#define EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW 12
+#define EASY_CHAT_TYPE_GOOD_SAYING 13
+#define EASY_CHAT_TYPE_FAN_QUESTION 14
+#define EASY_CHAT_TYPE_QUIZ_ANSWER 15
+#define EASY_CHAT_TYPE_QUIZ_QUESTION 16
+#define EASY_CHAT_TYPE_QUIZ_SET_QUESTION 17
+#define EASY_CHAT_TYPE_QUIZ_SET_ANSWER 18
+#define EASY_CHAT_TYPE_APPRENTICE 19
+#define EASY_CHAT_TYPE_QUESTIONNAIRE 20
+
#define EC_GROUP_POKEMON_2 0x0
#define EC_GROUP_TRAINER 0x1
#define EC_GROUP_STATUS 0x2
diff --git a/include/constants/global.h b/include/constants/global.h
index d7508c940..68c4f8246 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -80,4 +80,6 @@ enum
#define NUM_BAG_POCKETS 5
+#define MULTI_PARTY_SIZE PARTY_SIZE / 2
+
#endif //GUARD_CONSTANTS_GLOBAL_H
diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h
new file mode 100644
index 000000000..9b5660f6f
--- /dev/null
+++ b/include/constants/party_menu.h
@@ -0,0 +1,118 @@
+#ifndef GUARD_CONSTANTS_PARTY_MENU_H
+#define GUARD_CONSTANTS_PARTY_MENU_H
+
+#define AILMENT_NONE 0
+#define AILMENT_PSN 1
+#define AILMENT_PRZ 2
+#define AILMENT_SLP 3
+#define AILMENT_FRZ 4
+#define AILMENT_BRN 5
+#define AILMENT_PKRS 6
+#define AILMENT_FNT 7
+
+#define TUTOR_MOVE_MEGA_PUNCH 0
+#define TUTOR_MOVE_SWORDS_DANCE 1
+#define TUTOR_MOVE_MEGA_KICK 2
+#define TUTOR_MOVE_BODY_SLAM 3
+#define TUTOR_MOVE_DOUBLE_EDGE 4
+#define TUTOR_MOVE_COUNTER 5
+#define TUTOR_MOVE_SEISMIC_TOSS 6
+#define TUTOR_MOVE_MIMIC 7
+#define TUTOR_MOVE_METRONOME 8
+#define TUTOR_MOVE_SOFT_BOILED 9
+#define TUTOR_MOVE_DREAM_EATER 10
+#define TUTOR_MOVE_THUNDER_WAVE 11
+#define TUTOR_MOVE_EXPLOSION 12
+#define TUTOR_MOVE_ROCK_SLIDE 13
+#define TUTOR_MOVE_SUBSTITUTE 14
+#define TUTOR_MOVE_COUNT 15 // regular tutor move count
+
+#define TUTOR_MOVE_FRENZY_PLANT 15
+#define TUTOR_MOVE_BLAST_BURN 16
+#define TUTOR_MOVE_HYDRO_CANNON 17
+
+#define PARTY_LAYOUT_SINGLE 0
+#define PARTY_LAYOUT_DOUBLE 1
+#define PARTY_LAYOUT_MULTI 2
+#define PARTY_LAYOUT_MULTI_SHOWCASE 3 // The layout during the screen that appears just before a multi battle
+#define PARTY_LAYOUT_COUNT 4
+#define KEEP_PARTY_LAYOUT 0xFF
+
+#define PARTY_MENU_TYPE_FIELD 0
+#define PARTY_MENU_TYPE_IN_BATTLE 1
+#define PARTY_MENU_TYPE_CONTEST 2
+#define PARTY_MENU_TYPE_CHOOSE_MON 3
+#define PARTY_MENU_TYPE_CHOOSE_HALF 4 // multi battles, eReader battles, and some battle facilities
+#define PARTY_MENU_TYPE_MULTI_SHOWCASE 5
+#define PARTY_MENU_TYPE_DAYCARE 6
+#define PARTY_MENU_TYPE_MOVE_RELEARNER 7
+#define PARTY_MENU_TYPE_UNION_ROOM_REGISTER 8 // trading board
+#define PARTY_MENU_TYPE_UNION_ROOM_TRADE 9 // trading board
+#define PARTY_MENU_TYPE_SPIN_TRADE 10 // Unused beta for Gen IV's Spin Trade
+#define PARTY_MENU_TYPE_MINIGAME 11
+#define PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS 12
+
+#define PARTY_ACTION_CHOOSE_MON 0
+#define PARTY_ACTION_SEND_OUT 1
+#define PARTY_ACTION_CANT_SWITCH 2
+#define PARTY_ACTION_USE_ITEM 3
+#define PARTY_ACTION_ABILITY_PREVENTS 4
+#define PARTY_ACTION_GIVE_ITEM 5
+#define PARTY_ACTION_GIVE_PC_ITEM 6 // TODO: rename this one if necessary. Used for quest log.
+#define PARTY_ACTION_GIVE_MAILBOX_MAIL 7
+#define PARTY_ACTION_SWITCH 8
+#define PARTY_ACTION_SWITCHING 9
+#define PARTY_ACTION_SOFTBOILED 10
+#define PARTY_ACTION_CHOOSE_AND_CLOSE 11
+#define PARTY_ACTION_MOVE_TUTOR 12
+#define PARTY_ACTION_MINIGAME 13
+#define PARTY_ACTION_REUSABLE_ITEM 14
+
+// IDs for DisplayPartyMenuStdMessage, to display the message at the bottom of the party menu
+#define PARTY_MSG_CHOOSE_MON 0
+#define PARTY_MSG_CHOOSE_MON_OR_CANCEL 1
+#define PARTY_MSG_CHOOSE_MON_AND_CONFIRM 2
+#define PARTY_MSG_MOVE_TO_WHERE 3
+#define PARTY_MSG_TEACH_WHICH_MON 4
+#define PARTY_MSG_USE_ON_WHICH_MON 5
+#define PARTY_MSG_GIVE_TO_WHICH_MON 6
+#define PARTY_MSG_NOTHING_TO_CUT 7
+#define PARTY_MSG_CANT_SURF_HERE 8
+#define PARTY_MSG_ALREADY_SURFING 9
+#define PARTY_MSG_CURRENT_TOO_FAST 10
+#define PARTY_MSG_ENJOY_CYCLING 11
+#define PARTY_MSG_ALREADY_IN_USE 12
+#define PARTY_MSG_CANT_USE_HERE 13
+#define PARTY_MSG_NO_MON_FOR_BATTLE 14
+#define PARTY_MSG_CHOOSE_MON_2 15
+#define PARTY_MSG_NOT_ENOUGH_HP 16
+#define PARTY_MSG_THREE_MONS_ARE_NEEDED 17
+#define PARTY_MSG_TWO_MONS_ARE_NEEDED 18
+#define PARTY_MSG_MONS_CANT_BE_SAME 19
+#define PARTY_MSG_NO_SAME_HOLD_ITEMS 20
+#define PARTY_MSG_UNUSED 21
+#define PARTY_MSG_DO_WHAT_WITH_MON 22
+#define PARTY_MSG_RESTORE_WHICH_MOVE 23
+#define PARTY_MSG_BOOST_PP_WHICH_MOVE 24
+#define PARTY_MSG_DO_WHAT_WITH_ITEM 25
+#define PARTY_MSG_DO_WHAT_WITH_MAIL 26
+#define PARTY_MSG_NONE 127
+
+// IDs for DisplayPartyPokemonDescriptionText, to display a message in the party pokemon's box
+#define PARTYBOX_DESC_NO_USE 0
+#define PARTYBOX_DESC_ABLE_3 1
+#define PARTYBOX_DESC_FIRST 2
+#define PARTYBOX_DESC_SECOND 3
+#define PARTYBOX_DESC_THIRD 4
+#define PARTYBOX_DESC_ABLE 5
+#define PARTYBOX_DESC_NOT_ABLE 6
+#define PARTYBOX_DESC_ABLE_2 7
+#define PARTYBOX_DESC_NOT_ABLE_2 8
+#define PARTYBOX_DESC_LEARNED 9
+
+#define SELECTWINDOW_ACTIONS 0
+#define SELECTWINDOW_ITEM 1
+#define SELECTWINDOW_MAIL 2
+#define SELECTWINDOW_MOVES 3
+
+#endif // GUARD_CONSTANTS_PARTY_MENU_H
diff --git a/include/constants/trade.h b/include/constants/trade.h
new file mode 100644
index 000000000..b1371caab
--- /dev/null
+++ b/include/constants/trade.h
@@ -0,0 +1,118 @@
+ #ifndef GUARD_CONSTANTS_TRADE_H
+#define GUARD_CONSTANTS_TRADE_H
+
+// TODO: document trade.c and trade_scene.c with corresponding macros
+// and examine if these are correct
+
+#define TRADE_PLAYER 0
+#define TRADE_PARTNER 1
+
+#define LINK_TRADE_TIMEOUT 300
+
+// In-game Trade IDs
+#define INGAME_TRADE_SEEDOT 0
+#define INGAME_TRADE_PLUSLE 1
+#define INGAME_TRADE_HORSEA 2
+#define INGAME_TRADE_MEOWTH 3
+
+// Flag IDs for sending link data
+#define INITIATE_TRADE 1
+#define CANCEL_TRADE 2
+#define WANTS_TO_TRADE 1
+#define WANTS_TO_CANCEL 2
+#define READY_FINISH_TRADE 1
+#define FINISH_TRADE 2
+
+// Return values for CanTradeSelectedMon and CanSpinTradeMon
+#define CAN_TRADE_MON 0
+#define CANT_TRADE_LAST_MON 1
+#define CANT_TRADE_NATIONAL 2
+#define CANT_TRADE_EGG_YET 3
+#define CANT_TRADE_INVALID_MON 4
+#define CANT_TRADE_EGG_YET2 5
+
+// Return values for CheckValidityOfTradeMons
+#define PLAYER_MON_INVALID 0
+#define BOTH_MONS_VALID 1
+#define PARTNER_MON_INVALID 2
+
+// Return values for GetGameProgressForLinkTrade
+#define TRADE_BOTH_PLAYERS_READY 0
+#define TRADE_PLAYER_NOT_READY 1
+#define TRADE_PARTNER_NOT_READY 2
+
+// Indexes for sTradeActionTexts
+#define TRADE_TEXT_CANCEL 0
+#define TRADE_TEXT_CHOOSE_MON 1
+#define TRADE_TEXT_SUMMARY 2
+#define TRADE_TEXT_TRADE 3
+#define TRADE_TEXT_CANCEL_TRADE 4
+#define TRADE_TEXT_JP_QUIT 5
+
+// Checked to confirm DrawTradeMenuParty has reached final state
+#define DRAW_PARTY_FINISH 5
+
+// Message indexes for sTradeMessages
+#define TRADE_MSG_STANDBY 0
+#define TRADE_MSG_CANCELED 1
+#define TRADE_MSG_ONLY_MON1 2
+#define TRADE_MSG_ONLY_MON2 3
+#define TRADE_MSG_WAITING_FOR_FRIEND 4
+#define TRADE_MSG_FRIEND_WANTS_TO_TRADE 5
+#define TRADE_MSG_MON_CANT_BE_TRADED 6
+#define TRADE_MSG_EGG_CANT_BE_TRADED 7
+#define TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED 8
+
+// IDs for QueueAction
+#define QUEUE_SEND_DATA 0
+#define QUEUE_STANDBY 1
+#define QUEUE_ONLY_MON1 2
+#define QUEUE_ONLY_MON2 3
+#define QUEUE_UNUSED1 4
+#define QUEUE_UNUSED2 5
+#define QUEUE_MON_CANT_BE_TRADED 6
+#define QUEUE_EGG_CANT_BE_TRADED 7
+#define QUEUE_FRIENDS_MON_CANT_BE_TRADED 8
+
+#define QUEUE_DELAY_MSG 3
+#define QUEUE_DELAY_DATA 5
+
+// IDs for CallTradeMenuFunc
+#define TRADEMENUFUNC_MAIN_MENU 0
+#define TRADEMENUFUNC_SELECTED_MON 1
+#define TRADEMENUFUNC_SHOW_MON_SUMMARY 2
+#define TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE 3
+#define TRADEMENUFUNC_CANCEL_TRADE_PROMPT 4
+#define TRADEMENUFUNC_UNUSED_5 5
+#define TRADEMENUFUNC_BOTH_MONS_SELECTED 6
+#define TRADEMENUFUNC_CONFIRM_TRADE_PROMPT 7
+#define TRADEMENUFUNC_REDRAW_MAIN_MENU 8
+#define TRADEMENUFUNC_LINK_TRADE_FADE_OUT 9
+#define TRADEMENUFUNC_LINK_TRADE_WAIT_FADE 10
+#define TRADEMENUFUNC_CANCEL_TRADE_1 11
+#define TRADEMENUFUNC_CANCEL_TRADE_2 12
+#define TRADEMENUFUNC_START_LINK_TRADE 13
+#define TRADEMENUFUNC_DELAY_TRADE_CONFIRM 14
+#define TRADEMENUFUNC_UNUSED_15 15
+#define TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE 16
+#define TRADEMENUFUNC_PARTNER_MON_INVALID 17
+#define TRADEMENUFUNC_STANDBY 100
+
+// Message indexes for sUnionRoomTradeMessages
+#define UR_TRADE_MSG_NONE 0
+#define UR_TRADE_MSG_NOT_MON_PARTNER_WANTS 1
+#define UR_TRADE_MSG_NOT_EGG 2
+#define UR_TRADE_MSG_MON_CANT_BE_TRADED_1 3
+#define UR_TRADE_MSG_MON_CANT_BE_TRADED_2 4
+#define UR_TRADE_MSG_PARTNERS_MON_CANT_BE_TRADED 5
+#define UR_TRADE_MSG_EGG_CANT_BE_TRADED 6
+#define UR_TRADE_MSG_PARTNER_CANT_ACCEPT_MON 7
+#define UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1 8
+#define UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2 9
+
+// Return values for CanRegisterMonForTradingBoard
+#define CAN_REGISTER_MON 0
+#define CANT_REGISTER_MON 1
+#define CANT_REGISTER_EGG 2
+
+#endif //GUARD_CONSTANTS_TRADE_H
diff --git a/include/easy_chat.h b/include/easy_chat.h
index 765758035..9c642bb36 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -45,5 +45,6 @@ u16 GetDisplayedWordByIndex(u16 index);
u16 GetNumDisplayedWords(void);
const u8 *GetEasyChatWordGroupName(u8);
u8 *CopyEasyChatWordPadded(u8 *, u16, u16);
+void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback); // TODO: currently in link_rfu.s. further file split needed?
#endif // GUARD_EASYCHAT_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index 1d431771b..ec1a077be 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -33,5 +33,7 @@ void sub_805DC04(void);
void sub_805DAB0(void);
bool32 sub_805DAD0(void);
bool32 sub_805DC24(void);
+bool8 PartyHasMonWithSurf(void);
+bool8 IsPlayerSurfingNorth(void);
#endif //GUARD_FIELD_PLAYER_AVATAR_H
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index 1b8044592..86fab62e0 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -9,5 +9,6 @@ void sub_80B0244(void);
void sub_807E3EC(void);
void sub_807F114(void);
void sub_807F204(u8 taskId);
+void sub_807DC00(void);
#endif // GUARD_FIELD_SCREEN_EFFECT_H
diff --git a/include/field_weather.h b/include/field_weather.h
index 96c1ce7cb..2709a7298 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -13,7 +13,7 @@ void DoCurrentWeather(void);
void SetSav1WeatherFromCurrMapHeader(void);
void sub_807B0C4(u16 *, u16 *, u32);
void PlayRainStoppingSoundEffect(void);
-bool8 field_weather_is_fade_finished(void);
+bool8 IsWeatherNotFadingIn(void);
void SetWeatherScreenFadeOut(void);
void sub_807B070(void);
u8 GetCurrentWeather(void);
diff --git a/include/fldeff.h b/include/fldeff.h
index e3f703947..51287f400 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -15,8 +15,10 @@ u8 oei_task_add(void);
// flash
u8 sub_80C9DCC(u8 lightLevel, u8 mapType);
u8 sub_80C9D7C(u8 mapType1, u8 mapType2);
+bool8 SetUpFieldMove_Flash(void);
// cut
+bool8 SetUpFieldMove_Cut(void);
// dig
bool8 SetUpFieldMove_Dig(void);
@@ -42,9 +44,9 @@ bool8 SetUpFieldMove_Teleport(void);
bool8 FldEff_UseTeleport(void);
// softboiled
-bool8 hm_prepare_dive_probably(void);
-void sub_80E56DC(u8 taskId);
-void sub_80E5724(u8 taskId);
+bool8 SetUpFieldMove_SoftBoiled(void);
+void ChooseMonForSoftboiled(u8 taskId);
+void Task_TryUseSoftboiledOnPartyMon(u8 taskId);
// sweetscent
bool8 SetUpFieldMove_SweetScent(void);
diff --git a/include/global.h b/include/global.h
index 744d23eb3..8e5d90964 100644
--- a/include/global.h
+++ b/include/global.h
@@ -206,26 +206,6 @@ struct LinkBattleRecords
#include "global.berry.h"
#include "pokemon.h"
-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 BattleTowerRecord // record mixing
{
/*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
@@ -742,7 +722,7 @@ struct SaveBlock1
/*0x000C*/ struct WarpData warp1;
/*0x0014*/ struct WarpData warp2;
/*0x001C*/ struct WarpData lastHealLocation;
- /*0x0024*/ struct WarpData warp4;
+ /*0x0024*/ struct WarpData escapeWarp;
/*0x002C*/ u16 savedMusic;
/*0x002E*/ u8 weather;
/*0x002F*/ u8 filler_2F;
diff --git a/include/graphics.h b/include/graphics.h
index dbba28ea3..93efbd135 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -3740,6 +3740,16 @@ extern const u8 gWeatherFog1Tiles[];
extern const u32 gBattleAnimFogTilemap[];
extern const u16 gUnknown_83C2CE0[];
+// party_menu
+extern const u32 gPartyMenuPokeball_Gfx[];
+extern const u32 gPartyMenuPokeball_Pal[];
+extern const u32 gPartyMenuPokeballSmall_Gfx[];
+extern const u32 gStatusGfx_Icons[];
+extern const u32 gStatusPal_Icons[];
+extern const u32 gPartyMenuBg_Gfx[];
+extern const u32 gPartyMenuBg_Tilemap[];
+extern const u32 gPartyMenuBg_Pal[];
+
// credits
extern const u32 gCreditsPokeballBgGfxTiles[];
extern const u32 gCreditsPokeballBgGfxMap[];
diff --git a/include/item.h b/include/item.h
index ccc9cd3bb..01d2a55e5 100644
--- a/include/item.h
+++ b/include/item.h
@@ -43,7 +43,6 @@ void ClearItemSlots(struct ItemSlot *itemSlots, u8 b);
u8 CountUsedPCItemSlots(void);
bool8 CheckPCHasItem(u16 itemId, u16 count);
bool8 AddPCItem(u16 itemId, u16 count);
-void RemovePCItem(u8 index, u16 count);
void SwapRegisteredBike(void);
const u8 *ItemId_GetName(u16 itemId);
u16 ItemId_GetId(u16 itemId);
@@ -75,7 +74,7 @@ u16 GetPcItemQuantity(u16 *);
void SetBagPocketsPointers(void);
void ItemPcCompaction(void);
-void RemoveItemFromPC(u16 itemId, u16 quantity);
+void RemovePCItem(u16 itemId, u16 quantity);
void SortAndCompactBagPocket(struct BagPocket * pocket);
u8 CountItemsInPC(void);
void ApplyNewEncryptionKeyToBagItems_(u32 newKey);
diff --git a/include/item_menu.h b/include/item_menu.h
index d12b9f394..187674e83 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -25,7 +25,7 @@ extern u16 gSpecialVar_ItemId;
// Exported ROM declarations
void sub_81AAC50(void);
void sub_81AAC70(void);
-void sub_8108CF0(void);
+void CB2_SetUpReshowBattleScreenAfterMenu(void);
void sub_81089BC(void);
void sub_810B108(u8);
void CB2_BagMenuFromStartMenu(void);
@@ -39,6 +39,6 @@ void sub_8107ECC(void);
void sub_810AF74(void);
void sub_8108DC8(u8 pocketId);
void sub_81089F4(u8 pocketId);
-void sub_8107DB4(u8 menuType, u8 pocket, MainCallback callback);
+void GoToBagMenu(u8 menuType, u8 pocket, MainCallback callback);
#endif //GUARD_ITEM_MENU_H
diff --git a/include/item_use.h b/include/item_use.h
index db98533f1..7e9f7a61d 100644
--- a/include/item_use.h
+++ b/include/item_use.h
@@ -40,5 +40,6 @@ void ItemUseInBattle_EnigmaBerry(u8 taskId);
void ItemUseOutOfBattle_Itemfinder(u8 taskId);
void sub_80A1C44(u8 taskId);
u8 CanUseEscapeRopeOnCurrMap(void);
+u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId);
#endif //GUARD_ITEM_USE_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 671488be0..d1bc2b2bc 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -1,6 +1,9 @@
#ifndef GUARD_LINK_RFU_H
#define GUARD_LINK_RFU_H
+#include "global.h"
+#include "librfu.h"
+
struct Padded_U8
{
u8 value;
@@ -42,6 +45,7 @@ void sub_80F8DC0(void);
void sub_80FBB20(void);
bool8 sub_80FA484(bool32 a0);
void var_800D_set_xB(void);
+struct UnkLinkRfuStruct_02022B14 *sub_80F9800(void);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
diff --git a/include/list_menu.h b/include/list_menu.h
index df53bb529..e688c474f 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -53,8 +53,8 @@ struct ListMenuTemplate
struct ListMenu
{
struct ListMenuTemplate template;
- u16 scrollOffset;
- u16 selectedRow;
+ u16 cursorPos;
+ u16 itemsAbove;
u8 unk_1C;
u8 unk_1D;
u8 taskId;
@@ -73,12 +73,12 @@ struct ListMenuWindowRect
extern struct ListMenuTemplate gMultiuseListMenuTemplate;
s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
-u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
-u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 scrollOffset, u16 selectedRow);
+u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove);
+u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 cursorPos, u16 itemsAbove);
s32 ListMenu_ProcessInput(u8 listTaskId);
-void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow);
+void DestroyListMenuTask(u8 listTaskId, u16 *cursorPos, u16 *itemsAbove);
void RedrawListMenu(u8 listTaskId);
-void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow);
+void ListMenuGetScrollAndRow(u8 listTaskId, u16 *cursorPos, u16 *itemsAbove);
u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId);
void ListMenuOverrideSetColors(u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
void ListMenuDefaultCursorMoveFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list);
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
index 8d042825c..1e75b336c 100644
--- a/include/menu_helpers.h
+++ b/include/menu_helpers.h
@@ -5,6 +5,9 @@
#include "task.h"
#include "window.h"
+#define MENU_L_PRESSED 1
+#define MENU_R_PRESSED 2
+
struct YesNoFuncTable
{
TaskFunc yesFunc;
@@ -22,9 +25,9 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1);
void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc);
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 fontId, u8 left, u8 top, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo);
u8 GetLRKeysState(void);
-u8 sub_80BF66C(void);
+u8 GetLRKeysPressedAndHeld(void);
bool8 itemid_link_can_give_berry(u16 itemId);
bool8 itemid_80BF6D8_mail_related(u16 itemId);
-void ClearVramOamPltt(void);
+void ResetVramOamAndBgCntRegs(void);
#endif //GUARD_MENU_HELPERS_H
diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h
index 644e65289..f20375675 100644
--- a/include/new_menu_helpers.h
+++ b/include/new_menu_helpers.h
@@ -15,8 +15,8 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o
void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
void DecompressAndLoadBgGfxUsingHeap2(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
void * MallocAndDecompress(const void * src, u32 * size);
-void SetBgRectPal(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette);
-void CopyRectIntoAltRect(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height);
+void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette);
+void CopyToBufferFromBgTilemap(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height);
void ResetBgPositions(void);
void InitStandardTextBoxWindows(void);
void FreeAllOverworldWindowBuffers(void);
diff --git a/include/overworld.h b/include/overworld.h
index 36c890eb5..ab20d9ff0 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -72,7 +72,7 @@ void Overworld_ChangeMusicTo(u16);
bool32 IsUpdateLinkStateCBActive(void);
void strange_npc_table_clear(void);
-const struct MapHeader *get_mapheader_by_bank_and_number(u16, u16);
+const struct MapHeader *Overworld_GetMapHeaderByGroupAndId(u16, u16);
void FieldObjectMoveDestCoords(struct MapObject *, u32, s16 *, s16 *);
void sub_8086230(void);
void CB2_ReturnToField(void);
@@ -140,7 +140,7 @@ bool32 Overworld_DoScrollSceneForCredits(u8 *, const struct CreditsOverworldCmd
bool32 sub_8058318(void);
-void CB2_ReturnToStartMenu(void);
+void CB2_ReturnToFieldWithOpenMenu(void);
void CB2_WhiteOut(void);
void c2_8056854(void);
void sub_8054F38(u32 newKey);
diff --git a/include/party_menu.h b/include/party_menu.h
index 19cdda1dc..e2aee442f 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -3,92 +3,85 @@
#include "main.h"
#include "task.h"
+#include "constants/party_menu.h"
-enum {
- AILMENT_NONE,
- AILMENT_PSN,
- AILMENT_PRZ,
- AILMENT_SLP,
- AILMENT_FRZ,
- AILMENT_BRN,
- AILMENT_PKRS,
- AILMENT_FNT
-};
-
-enum
-{
- PARTY_CHOOSE_MON,
- PARTY_MUST_CHOOSE_MON,
- PARTY_CANT_SWITCH,
- PARTY_USE_ITEM_ON,
- PARTY_ABILITY_PREVENTS,
- PARTY_GIVE_ITEM,
-};
-
-struct Struct203B0A0
+struct PartyMenu
{
MainCallback exitCallback;
- TaskFunc unk4;
- u8 unk8_0:4;
- u8 mode:2;
- u8 unk8_2:2;
- s8 unk9;
- s8 unkA;
- u8 unkB;
- u16 unkC;
- s16 unkE;
- s16 unk10;
+ TaskFunc task;
+ u8 menuType:4;
+ u8 layout:2;
+ u8 unk_8_6:2;
+ s8 slotId;
+ s8 slotId2;
+ u8 action;
+ u16 bagItem;
+ s16 data1; // used variously as a moveId, counter, moveSlotId, or cursorPos
+ s16 learnMoveState;
};
-extern struct Struct203B0A0 gUnknown_203B0A0;
-extern u8 gUnknown_203B0C0;
-extern u8 gUnknown_203B0C1;
-extern u8 gUnknown_203B0DC[3];
-extern void (*gUnknown_3005E98)(u8 taskId, TaskFunc func);
+extern struct PartyMenu gPartyMenu;
+extern bool8 gPartyMenuUseExitCallback;
+extern u8 gSelectedMonPartyId;
+extern MainCallback gPostMenuFieldCallback;
extern u8 gSelectedOrderFromParty[3];
+extern u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2];
-bool8 FieldCallback_PrepareFadeInFromMenu(void);
-bool8 MonKnowsMove(struct Pokemon *, u16);
-void sub_81B58A8(void);
-void DoWallyTutorialBagMenu(void);
-u8 pokemon_ailments_get_primary(u32 status);
-u16 ItemIdToBattleMoveId(u16 itemId);
-void sub_8125B40(u8 taskId, TaskFunc func);
-void sub_8124C8C(void);
-void sub_8126EDC(void);
-void c2_8123744(void);
-u8 GetCursorSelectionMonId(void);
-void sub_8128370(void);
-void sub_811F818(u8 monId, u8 a1);
-void sub_8121D0C(u8);
-void sub_811FB28(u8 taskId);
-void sub_8120760(u8 taskId, u8 a1, s8 a2, s16 amount, TaskFunc followupFunc);
-void GetMonNickname(const struct Pokemon * mon, u8 * dest);
-void sub_81202F8(const u8 * src, u8 a1);
-bool8 sub_8120370(void);
-void PartyMenuInit(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, MainCallback callback);
-void sub_81252D0(u8 taskId, TaskFunc followUpFunc);
-void ItemUseCB_PpRestore(u8 taskId, TaskFunc followUpFunc);
-void dp05_pp_up(u8 taskId, TaskFunc followUpFunc);
-void dp05_rare_candy(u8 taskId, TaskFunc followUpFunc);
-void sub_8126B60(u8 taskId, TaskFunc followUpFunc);
-void sub_8126894(u8 taskId, TaskFunc followUpFunc);
-void sub_81279E0(void);
-void ItemUseCB_Medicine(u8 taskId, TaskFunc followUpFunc);
-u8 GetItemEffectType(u16 itemId);
-u8 pokemon_order_func(u8);
-void sub_8127CAC(void);
-void sub_8127DA8(u8 battlerId, u8 multiplayerFlag);
-void OpenPartyMenuInBattle(u8 arg);
-void sub_8127EC4(u8 battlerId, u8 unk, u8 arrayIndex);
+extern void (*gItemUseCB)(u8, TaskFunc);
+
+void InitPartyMenu(u8 menuType, u8 layout, u8 partyAction, bool8 keepCursorPos, u8 messageId, TaskFunc task, MainCallback callback);
+void AnimatePartySlot(u8 slot, u8 animNum);
bool8 IsMultiBattle(void);
-void sub_8126EDC(void);
-void sub_812256C(u8 *partyCount, u8 (*icons)[6], u8 side);
-void PartyMenuInit_FromPlayerPc(void);
-void CB2_PartyMenuFromStartMenu(void);
-void sub_8128198(void);
-void sub_8127FF4(u8 slot, u8 slot2);
+u8 GetCursorSelectionMonId(void);
+u8 GetPartyMenuType(void);
+void Task_HandleChooseMonInput(u8 taskId);
+u8 *GetMonNickname(struct Pokemon *mon, u8 *dest);
+u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen);
+bool8 IsPartyMenuTextPrinterActive(void);
+void PartyMenuModifyHP(u8 taskId, u8 slot, s8 hpIncrement, s16 hpDifference, TaskFunc task);
+u8 GetAilmentFromStatus(u32 status);
+u8 GetMonAilment(struct Pokemon *mon);
+void DisplayPartyMenuStdMessage(u32 stringId);
void LoadHeldItemIcons(void);
-void sub_8127968(void);
+void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty);
+void SpriteCB_BounceConfirmCancelButton(u8 spriteId, u8 spriteId2, u8 animNum);
+void CB2_SelectBagItemToGive(void);
+void CB2_GiveHoldItem(void);
+bool8 FieldCallback_PrepareFadeInFromMenu(void);
+void CB2_ReturnToPartyMenuFromFlyMap(void);
+void sub_8124C1C(const u8 *healLocCtrlData);
+void CB2_ShowPartyMenuForItemUse(void);
+void ItemUseCB_Medicine(u8 taskId, TaskFunc func);
+void ItemUseCB_MedicineStep(u8 taskId, TaskFunc func);
+void ItemUseCB_PPRecovery(u8 taskId, UNUSED TaskFunc func);
+void ItemUseCB_PPUp(u8 taskId, UNUSED TaskFunc func);
+u16 ItemIdToBattleMoveId(u16 item);
+bool8 IsMoveHm(u16 move);
+bool8 MonKnowsMove(struct Pokemon *mon, u16 move);
+void ItemUseCB_TMHM(u8 taskId, UNUSED TaskFunc func);
+void ItemUseCB_RareCandy(u8 taskId, TaskFunc func);
+void ItemUseCB_SacredAsh(u8 taskId, UNUSED TaskFunc func);
+void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc func);
+u8 GetItemEffectType(u16 item);
+void CB2_PartyMenuFromStartMenu(void);
+void CB2_ChooseMonToGiveItem(void);
+void ChooseMonToGiveMailFromMailbox(void);
+void InitChooseHalfPartyForBattle(u8 a1);
+void ClearSelectedPartyOrder(void);
+void sub_81277F4(u8 menuType, MainCallback callback);
+void ChooseMonForMoveTutor(void);
+void ChooseMonForWirelessMinigame(void);
+void OpenPartyMenuInTutorialBattle(u8 partyAction);
+void OpenPartyMenuInBattle(void);
+void ChooseMonForInBattleItem(void);
+void sub_81279E0(void);
+void BufferBattlePartyCurrentOrder(void);
+void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId);
+void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2);
+void SwitchPartyMonSlots(u8 slot, u8 slot2);
+u8 GetPartyIdFromBattlePartyId(u8 battlePartyId);
+void ShowPartyMenuToShowcaseMultiBattleParty(void);
+void ChooseMonForDaycare(void);
+void ChoosePartyMonByMenuType(u8 menuType);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/player_pc.h b/include/player_pc.h
index a1ebcddaa..f62835911 100644
--- a/include/player_pc.h
+++ b/include/player_pc.h
@@ -8,8 +8,8 @@
struct PlayerPCItemPageStruct
{
- u16 selectedRow;
- u16 scrollOffset;
+ u16 cursorPos;
+ u16 itemsAbove;
u8 pageItems;
u8 count;
u8 filler_6[3];
@@ -25,5 +25,6 @@ extern struct PlayerPCItemPageStruct gPlayerPcMenuManager;
void sub_816B060(u8 taskId);
void NewGameInitPCItems(void);
+void Mailbox_ReturnToMailListAfterDeposit(void);
#endif //GUARD_PLAYER_PC_H
diff --git a/include/pokemon.h b/include/pokemon.h
index c5ad89f41..7bc1239f1 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -582,7 +582,7 @@ void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex);
void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex);
bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex);
bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e);
-bool8 PokemonUseItemEffects2(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex);
+bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex);
u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit);
const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId);
u8 GetNature(struct Pokemon *mon);
@@ -593,7 +593,7 @@ u16 HoennToNationalOrder(u16 hoennNum);
u16 SpeciesToCryId(u16 species);
void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4);
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
-bool8 sub_80435E0(void);
+bool8 GetPlayerFlankId(void);
bool16 GetLinkTrainerFlankId(u8 linkPlayerId);
s32 GetBattlerMultiplayerId(u16 a1);
u8 GetTrainerEncounterMusicId(u16 trainer);
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index cfc3c18f0..f0e5c8b9d 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -22,6 +22,6 @@ u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subprior
u8 UpdateMonIconFrame(struct Sprite * sprite);
void LoadMonIconPalette(u16 iconId);
void FreeMonIconPalette(u16 iconId);
-void MonIcon_SetAnim(struct Sprite * sprite, u8 animNum);
+void SetPartyHPBarSprite(struct Sprite * sprite, u8 animNum);
#endif // GUARD_POKEMON_ICON_H
diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h
index 62d0e610f..8623b223a 100644
--- a/include/pokemon_jump.h
+++ b/include/pokemon_jump.h
@@ -4,5 +4,6 @@
#include "main.h"
void ResetPokeJumpResults(void);
+bool32 IsSpeciesAllowedInPokemonJump(u16 species);
#endif // GUARD_POKEMON_JUMP_H
diff --git a/include/pokemon_special_anim.h b/include/pokemon_special_anim.h
index 8dbf0efa4..5cc567580 100644
--- a/include/pokemon_special_anim.h
+++ b/include/pokemon_special_anim.h
@@ -5,8 +5,12 @@
void sub_811E5B8(u16, u16, u16, u16, u16, u16);
bool8 sub_811E680(void);
-void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats);
+void BufferMonStatsToTaskData(struct Pokemon *mon, u16 *currStats);
void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr);
void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr);
+void sub_811C540(u8 slotId, u16 itemId, MainCallback callback);
+void sub_811C5AC(u8 slotId, u16 itemId, MainCallback callback);
+u32 sub_811D178(void);
+void sub_811C568(u8 slotId, u16 itemId, u16 moveId, MainCallback callback);
#endif // GUARD_POKEMON_SPECIAL_ANIM_H
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
index 2655405e5..3695d46df 100644
--- a/include/pokemon_summary_screen.h
+++ b/include/pokemon_summary_screen.h
@@ -32,7 +32,7 @@ enum PokemonSummaryScreenPage
PSS_PAGE_CONTEST_MOVES,
};
-s32 sub_8138B20(void);
+s32 GetLastViewedMonIndex(void);
void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4);
#endif // GUARD_POKEMON_SUMMARY_SCREEN_H
diff --git a/include/quest_log.h b/include/quest_log.h
index 3f6c94de5..3dfd5f35c 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -47,7 +47,6 @@ void sub_81139BC(void);
void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx);
void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
void sub_8110840(void *oldSave);
-
-extern u8 gUnknown_203ADFA;
+void sub_8112F18(u8 windowId);
#endif //GUARD_QUEST_LOG_H
diff --git a/include/region_map.h b/include/region_map.h
index 394fee469..67287b6c4 100644
--- a/include/region_map.h
+++ b/include/region_map.h
@@ -94,7 +94,8 @@ void CreateRegionMapPlayerIcon(u16 x, u16 y);
void CreateRegionMapCursor(u16 tileTag, u16 paletteTag);
u8 *GetMapName(u8 *, u16, u16);
bool32 sub_8124668(u8 mapSecId);
-void sub_80C4DF8(u8 *, u8);
+void GetMapNameGeneric(u8 *, u8);
void sub_80BFF50(u8 a0, void (*a1)(void));
+void MCB2_FlyMap(void);
#endif //GUARD_REGION_MAP_H
diff --git a/include/strings.h b/include/strings.h
index 08dcdb9da..e55cb02f5 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -181,7 +181,7 @@ extern const u8 gUnknown_8416644[];
extern const u8 gUnknown_841665C[];
extern const u8 gUnknown_8416690[];
extern const u8 gUnknown_84166A7[];
-extern const u8 gUnknown_84169DC[];
+extern const u8 gText_WontHaveEffect[];
extern const u8 gUnknown_841623D[];
extern const u8 gUnknown_84162BD[];
extern const u8 gUnknown_841D148[];
@@ -265,6 +265,140 @@ extern const u8 gUnknown_81C6787[];
extern const u8 gUnknown_81C684B[];
extern const u8 gUnknown_81C686C[];
+// party_menu
+extern const u8 gText_ChoosePokemon[];
+extern const u8 gText_ChoosePokemonCancel[];
+extern const u8 gText_ChoosePokemonConfirm[];
+extern const u8 gText_MoveToWhere[];
+extern const u8 gText_TeachWhichPokemon[];
+extern const u8 gText_UseOnWhichPokemon[];
+extern const u8 gText_GiveToWhichPokemon[];
+extern const u8 gText_NothingToCut[];
+extern const u8 gText_CantSurfHere[];
+extern const u8 gText_AlreadySurfing[];
+extern const u8 gText_CurrentIsTooFast[];
+extern const u8 gText_EnjoyCycling[];
+extern const u8 gText_InUseAlready_PM[];
+extern const u8 gText_CantUseHere[];
+extern const u8 gText_NoPokemonForBattle[];
+extern const u8 gText_ChoosePokemon2[];
+extern const u8 gText_NotEnoughHp[];
+extern const u8 gText_ThreePkmnAreNeeded[];
+extern const u8 gText_TwoPokemonAreNeeded[];
+extern const u8 gText_PokemonCantBeSame[];
+extern const u8 gText_NoIdenticalHoldItems[];
+extern const u8 gString_Dummy[];
+extern const u8 gText_DoWhatWithPokemon[];
+extern const u8 gText_RestoreWhichMove[];
+extern const u8 gText_BoostPp[];
+extern const u8 gText_DoWhatWithItem[];
+extern const u8 gText_DoWhatWithMail[];
+extern const u8 gText_NoUse[];
+extern const u8 gText_Able[];
+extern const u8 gText_First_PM[];
+extern const u8 gText_Second_PM[];
+extern const u8 gText_Third_PM[];
+extern const u8 gText_NotAble[];
+extern const u8 gText_Able3[];
+extern const u8 gText_NotAble2[];
+extern const u8 gText_Learned[];
+extern const u8 gText_Able2[];
+extern const u8 gText_CutATreeOrGrass[];
+extern const u8 gText_FlyToAKnownTown[];
+extern const u8 gText_TravelOnWater[];
+extern const u8 gText_MoveHeavyBoulders[];
+extern const u8 gText_LightUpDarkness[];
+extern const u8 gText_ShatterACrackedRock[];
+extern const u8 gText_ClimbAWaterfall[];
+extern const u8 gText_EscapeFromHere[];
+extern const u8 gText_LureWildPokemon[];
+extern const u8 gText_ShareHp[];
+extern const u8 gText_ReturnToAHealingSpot[];
+extern const u8 gText_Summary5[];
+extern const u8 gText_Switch2[];
+extern const u8 gText_Item[];
+extern const u8 gText_Take[];
+extern const u8 gText_Mail[];
+extern const u8 gText_Take2[];
+extern const u8 gText_Read2[];
+extern const u8 gText_Shift[];
+extern const u8 gText_SendOut[];
+extern const u8 gText_Enter[];
+extern const u8 gText_NoEntry[];
+extern const u8 gText_Store[];
+extern const u8 gText_Register[];
+extern const u8 gText_Trade4[];
+extern const u8 gText_NotPkmnOtherTrainerWants[];
+extern const u8 gText_ThatIsntAnEgg[];
+extern const u8 gText_PkmnCantBeTradedNow[];
+extern const u8 gText_OtherTrainersPkmnCantBeTraded[];
+extern const u8 gText_EggCantBeTradedNow[];
+extern const u8 gText_OtherTrainerCantAcceptPkmn[];
+extern const u8 gText_CantTradeWithTrainer[];
+extern const u8 gUnknown_84176CF[];
+extern const u8 gText_PkmnWasGivenItem[];
+extern const u8 gText_ReceivedItemFromPkmn[];
+extern const u8 gText_PkmnAlreadyHoldingItemSwitch[];
+extern const u8 gText_SwitchedPkmnItem[];
+extern const u8 gText_BagFullCouldNotRemoveItem[];
+extern const u8 gText_PkmnCantParticipate[];
+extern const u8 gText_CancelParticipation[];
+extern const u8 gUnknown_8417494[];
+extern const u8 gMenuText_Confirm[];
+extern const u8 gText_Lv[];
+extern const u8 gText_MaleSymbol[];
+extern const u8 gText_FemaleSymbol[];
+extern const u8 gText_Slash[];
+extern const u8 gUnknown_8417457[];
+extern const u8 gText_PkmnNotHolding[];
+extern const u8 gText_PCMailboxFull[];
+extern const u8 gText_MailSentToPC[];
+extern const u8 gText_MailMessageWillBeLost[];
+extern const u8 gText_SendMailToPC[];
+extern const u8 gText_MailTakenFromPkmn[];
+extern const u8 gUnknown_8416B3E[];
+extern const u8 gUnknown_8416B16[];
+extern const u8 gText_PauseUntilPress[];
+extern const u8 gText_CantUseUntilNewBadge[];
+extern const u8 gText_ReturnToHealingSpot[];
+extern const u8 gText_EscapeFromHereAndReturnTo[];
+extern const u8 gText_PkmnCuredOfPoison[];
+extern const u8 gText_PkmnWokeUp2[];
+extern const u8 gText_PkmnBurnHealed[];
+extern const u8 gText_PkmnThawedOut[];
+extern const u8 gText_PkmnCuredOfParalysis[];
+extern const u8 gText_PkmnSnappedOutOfConfusion[];
+extern const u8 gText_PkmnGotOverInfatuation[];
+extern const u8 gText_PkmnBecameHealthy[];
+extern const u8 gText_HP3[];
+extern const u8 gText_Attack3[];
+extern const u8 gText_Defense3[];
+extern const u8 gText_Speed2[];
+extern const u8 gText_SpAtk3[];
+extern const u8 gText_SpDef3[];
+extern const u8 gText_PkmnBaseVar2StatIncreased[];
+extern const u8 gText_MovesPPIncreased[];
+extern const u8 gText_PPWasRestored[];
+extern const u8 gText_PkmnHPRestoredByVar2[];
+extern const u8 gText_PkmnNeedsToReplaceMove[];
+extern const u8 gText_PkmnCantLearnMove[];
+extern const u8 gText_PkmnAlreadyKnows[];
+extern const u8 gText_PkmnLearnedMove3[];
+extern const u8 gText_WhichMoveToForget[];
+extern const u8 gText_12PoofForgotMove[];
+extern const u8 gText_StopLearningMove2[];
+extern const u8 gText_MoveNotLearned[];
+extern const u8 gText_PkmnElevatedToLvVar2[];
+extern const u8 gText_PkmnHoldingItemCantHoldMail[];
+extern const u8 gText_MailTransferredFromMailbox[];
+extern const u8 gText_RemoveMailBeforeItem[];
+extern const u8 gText_CantSwitchWithAlly[];
+extern const u8 gText_PkmnHasNoEnergy[];
+extern const u8 gText_PkmnAlreadyInBattle[];
+extern const u8 gText_EggCantBattle[];
+extern const u8 gText_PkmnAlreadySelected[];
+extern const u8 gText_PkmnCantSwitchOut[];
+
// credits
extern const u8 gString_Dummy[];
extern const u8 gString_PokemonFireRed_Staff[]; // FR
@@ -390,7 +524,7 @@ extern const u8 gText_Pokedex[];
extern const u8 gTextJPDummy_Hiki[];
extern const u8 gText_Badges[];
extern const u8 gTextJPDummy_Ko[];
-extern const u8 gUnknown_841B6F4[];
+extern const u8 gText_Register[];
// mystery_gift_menu
extern const u8 gText_PickOKExit[];
@@ -703,9 +837,9 @@ extern const u8 gUnknown_841E16B[];
extern const u8 gUnknown_8417094[];
extern const u8 gUnknown_841E199[];
extern const u8 gUnknown_841E1C5[];
-extern const u8 gUnknown_84170BC[];
-extern const u8 gUnknown_84170E0[];
-extern const u8 gUnknown_84170FC[];
+extern const u8 gText_PkmnCantBeTradedNow[];
+extern const u8 gText_EggCantBeTradedNow[];
+extern const u8 gText_OtherTrainersPkmnCantBeTraded[];
extern const u8 gUnknown_841E09F[];
extern const u8 gEasyChatGroupName_Pokemon[];
diff --git a/include/trade.h b/include/trade.h
index 257357053..b3b1de23b 100644
--- a/include/trade.h
+++ b/include/trade.h
@@ -1,11 +1,17 @@
#ifndef GUARD_TRADE_H
#define GUARD_TRADE_H
+#include "global.h"
+#include "librfu.h"
+#include "constants/trade.h"
+
extern struct MailStruct gLinkPartnerMail[6];
extern u8 gSelectedTradeMonPositions[2];
extern const u16 gUnknown_826601C[];
void CB2_ReturnFromLinkTrade(void);
s32 sub_804FB34(void);
+s32 CanRegisterMonForTradingBoard(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, u16 species2, u16 species, u8 isObedientBitSet); // TODO: currently in link_rfu_2.s. further file split needed?
+s32 GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, struct UnkLinkRfuStruct_02022B14Substruct rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isObedientBitSet);
#endif //GUARD_TRADE_H
diff --git a/include/union_room.h b/include/union_room.h
index 2e97d87f4..03628441b 100644
--- a/include/union_room.h
+++ b/include/union_room.h
@@ -1,6 +1,9 @@
#ifndef GUARD_UNION_ROOM_H
#define GUARD_UNION_ROOM_H
+#include "global.h"
+#include "librfu.h"
+
struct UnkStruct_Shared
{
struct UnkLinkRfuStruct_02022B14 field_0;
@@ -146,4 +149,8 @@ struct TradeUnkStruct
u32 personality;
};
+extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_203B064;
+extern u16 gUnionRoomOfferedSpecies;
+extern u8 gUnionRoomRequestedMonType;
+
#endif //GUARD_UNION_ROOM_H
diff --git a/ld_script.txt b/ld_script.txt
index 74111a5b5..cf7005555 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -239,7 +239,7 @@ SECTIONS {
src/quest_log.o(.text);
asm/link_rfu_3.o(.text);
asm/pokemon_special_anim.o(.text);
- asm/party_menu.o(.text);
+ src/party_menu.o(.text);
asm/union_room_chat.o(.text);
src/help_system_812B1E0.o(.text);
src/quest_log_battle.o(.text);
@@ -516,7 +516,7 @@ SECTIONS {
src/quest_log.o(.rodata);
data/link_rfu_3.o(.rodata);
data/pokemon_special_anim.o(.rodata);
- data/party_menu.o(.rodata);
+ src/party_menu.o(.rodata);
data/union_room_chat.o(.rodata);
src/help_system_812B1E0.o(.rodata);
src/fame_checker.o(.rodata);
diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c
index a6730cbbb..08c89ec1e 100644
--- a/src/battle_controller_oak_old_man.c
+++ b/src/battle_controller_oak_old_man.c
@@ -355,7 +355,7 @@ static void OpenPartyMenuToChooseMon(void)
caseId = gTasks[gUnknown_3004FFC[gActiveBattler]].data[0];
DestroyTask(gUnknown_3004FFC[gActiveBattler]);
FreeAllWindowBuffers();
- OpenPartyMenuInBattle(caseId);
+ OpenPartyMenuInTutorialBattle(caseId);
}
}
@@ -363,8 +363,8 @@ static void WaitForMonSelection(void)
{
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
{
- if (gUnknown_203B0C0 == 1)
- BtlController_EmitChosenMonReturnValue(1, gUnknown_203B0C1, gUnknown_203B0DC);
+ if (gPartyMenuUseExitCallback == 1)
+ BtlController_EmitChosenMonReturnValue(1, gSelectedMonPartyId, gBattlePartyCurrentOrder);
else
BtlController_EmitChosenMonReturnValue(1, 6, NULL);
OakOldManBufferExecCompleted();
@@ -1879,7 +1879,7 @@ static void OakOldManHandleChooseItem(void)
gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
gBattlerInMenuId = gActiveBattler;
for (i = 0; i < 3; ++i)
- gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][i + 1];
+ gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][i + 1];
}
static void OakOldManHandleChoosePokemon(void)
@@ -1892,7 +1892,7 @@ static void OakOldManHandleChoosePokemon(void)
*(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2];
*(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
for (i = 0; i < 3; ++i)
- gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][4 + i];
+ gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i];
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
gBattlerInMenuId = gActiveBattler;
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 16bf1ec87..baa794f70 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -1305,7 +1305,7 @@ static void OpenPartyMenuToChooseMon(void)
caseId = gTasks[gUnknown_3004FFC[gActiveBattler]].data[0];
DestroyTask(gUnknown_3004FFC[gActiveBattler]);
FreeAllWindowBuffers();
- OpenPartyMenuInBattle(caseId);
+ OpenPartyMenuInTutorialBattle(caseId);
}
}
@@ -1313,8 +1313,8 @@ static void WaitForMonSelection(void)
{
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
{
- if (gUnknown_203B0C0 == 1)
- BtlController_EmitChosenMonReturnValue(1, gUnknown_203B0C1, gUnknown_203B0DC);
+ if (gPartyMenuUseExitCallback == 1)
+ BtlController_EmitChosenMonReturnValue(1, gSelectedMonPartyId, gBattlePartyCurrentOrder);
else
BtlController_EmitChosenMonReturnValue(1, 6, NULL);
if ((gBattleBufferA[gActiveBattler][1] & 0xF) == 1)
@@ -2462,7 +2462,7 @@ static void PlayerHandleChooseItem(void)
gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
gBattlerInMenuId = gActiveBattler;
for (i = 0; i < 3; ++i)
- gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][1 + i];
+ gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][1 + i];
}
static void PlayerHandleChoosePokemon(void)
@@ -2475,7 +2475,7 @@ static void PlayerHandleChoosePokemon(void)
*(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2];
*(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
for (i = 0; i < 3; ++i)
- gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][4 + i];
+ gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i];
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
gBattlerInMenuId = gActiveBattler;
diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c
index 57a405f3c..0b71a92e8 100644
--- a/src/battle_controller_pokedude.c
+++ b/src/battle_controller_pokedude.c
@@ -706,7 +706,7 @@ static void OpenPartyMenuToChooseMon(void)
gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection;
DestroyTask(gUnknown_3004FFC[gActiveBattler]);
FreeAllWindowBuffers();
- sub_8127968();
+ OpenPartyMenuInBattle();
}
}
@@ -714,8 +714,8 @@ static void WaitForMonSelection(void)
{
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
{
- if (gUnknown_203B0C0 == 1)
- BtlController_EmitChosenMonReturnValue(1, gUnknown_203B0C1, gUnknown_203B0DC);
+ if (gPartyMenuUseExitCallback == 1)
+ BtlController_EmitChosenMonReturnValue(1, gSelectedMonPartyId, gBattlePartyCurrentOrder);
else
BtlController_EmitChosenMonReturnValue(1, 6, NULL);
PokedudeBufferExecCompleted();
@@ -1985,7 +1985,7 @@ static void PokedudeHandleChooseItem(void)
gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
gBattlerInMenuId = gActiveBattler;
for (i = 0; i < 3; ++i)
- gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][i + 1];
+ gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][i + 1];
}
static void PokedudeHandleChoosePokemon(void)
@@ -1998,7 +1998,7 @@ static void PokedudeHandleChoosePokemon(void)
*(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2];
*(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
for (i = 0; i < 3; ++i)
- gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][4 + i];
+ gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i];
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
gBattlerInMenuId = gActiveBattler;
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 6fb090307..ca2ef0b22 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -75,7 +75,7 @@ void sub_800D30C(void)
SetBattlePartyIds();
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
for (i = 0; i < gBattlersCount; ++i)
- sub_8127DA8(i, 0);
+ BufferBattlePartyCurrentOrderBySide(i, 0);
}
static void InitSinglePlayerBtlControllers(void)
@@ -199,11 +199,11 @@ static void InitLinkBtlControllers(void)
{
case 0:
case 3:
- sub_8127DA8(gLinkPlayers[i].id, 0);
+ BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 0);
break;
case 1:
case 2:
- sub_8127DA8(gLinkPlayers[i].id, 1);
+ BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1);
break;
}
if (i == multiplayerId)
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index d2e728d0c..d7bccb298 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -620,7 +620,7 @@ bool8 BattleInitAllSprites(u8 *state, u8 *battlerId)
break;
case 6:
LoadAndCreateEnemyShadowSprites();
- sub_8127CAC();
+ BufferBattlePartyCurrentOrder();
retVal = TRUE;
break;
}
@@ -859,8 +859,8 @@ void HandleBattleLowHpMusicChange(void)
{
u8 playerBattler1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
u8 playerBattler2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
- u8 battler1PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler1]);
- u8 battler2PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler2]);
+ u8 battler1PartyId = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[playerBattler1]);
+ u8 battler2PartyId = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[playerBattler2]);
if (GetMonData(&gPlayerParty[battler1PartyId], MON_DATA_HP) != 0)
HandleLowHpMusicChange(&gPlayerParty[battler1PartyId], playerBattler1);
diff --git a/src/battle_main.c b/src/battle_main.c
index 1125a8d2d..d307d4f55 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -144,7 +144,7 @@ static EWRAM_DATA u32 gUnknown_2022AE8[25] = {0};
EWRAM_DATA u32 gBattleTypeFlags = 0;
EWRAM_DATA u8 gBattleTerrain = 0;
EWRAM_DATA u32 gUnknown_2022B54 = 0;
-EWRAM_DATA struct UnknownPokemonStruct4 gUnknown_2022B58[3] = {0};
+EWRAM_DATA struct UnknownPokemonStruct4 gMultiPartnerParty[3] = {0};
EWRAM_DATA u8 *gUnknown_2022BB8 = NULL;
EWRAM_DATA u8 *gUnknown_2022BBC = NULL;
EWRAM_DATA u16 *gUnknown_2022BC0 = NULL;
@@ -1078,16 +1078,16 @@ static void sub_80108C4(void)
for (i = 0; i < 3; ++i)
{
- gUnknown_2022B58[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
- gUnknown_2022B58[i].heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
- nick = gUnknown_2022B58[i].nickname;
+ gMultiPartnerParty[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
+ gMultiPartnerParty[i].heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ nick = gMultiPartnerParty[i].nickname;
GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick);
- gUnknown_2022B58[i].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
- gUnknown_2022B58[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
- gUnknown_2022B58[i].maxhp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
- gUnknown_2022B58[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
- gUnknown_2022B58[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
- gUnknown_2022B58[i].gender = GetMonGender(&gPlayerParty[i]);
+ gMultiPartnerParty[i].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
+ gMultiPartnerParty[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ gMultiPartnerParty[i].maxhp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
+ gMultiPartnerParty[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
+ gMultiPartnerParty[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
+ gMultiPartnerParty[i].gender = GetMonGender(&gPlayerParty[i]);
StripExtCtrlCodes(nick);
if (GetMonData(&gPlayerParty[i], MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE)
{
@@ -1098,7 +1098,7 @@ static void sub_80108C4(void)
cur[j] = EOS;
}
}
- memcpy(&gBattleStruct->field_184, gUnknown_2022B58, sizeof(gUnknown_2022B58));
+ memcpy(&gBattleStruct->field_184, gMultiPartnerParty, sizeof(gMultiPartnerParty));
}
static void CB2_PreInitMultiBattle(void)
@@ -1123,7 +1123,7 @@ static void CB2_PreInitMultiBattle(void)
if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished())
{
sub_80108C4();
- SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, sizeof(gUnknown_2022B58));
+ SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, sizeof(gMultiPartnerParty));
++gBattleCommunication[MULTIUSE_STATE];
}
break;
@@ -1137,13 +1137,13 @@ static void CB2_PreInitMultiBattle(void)
continue;
if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[playerMultiplierId].id & 1))
|| (gLinkPlayers[i].id & 1 && gLinkPlayers[playerMultiplierId].id & 1))
- memcpy(gUnknown_2022B58, gBlockRecvBuffer[i], sizeof(gUnknown_2022B58));
+ memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], sizeof(gMultiPartnerParty));
}
++gBattleCommunication[MULTIUSE_STATE];
*savedCallback = gMain.savedCallback;
*savedBattleTypeFlags = gBattleTypeFlags;
gMain.savedCallback = CB2_PreInitMultiBattle;
- sub_8128198();
+ ShowPartyMenuToShowcaseMultiBattleParty();
}
break;
case 2:
@@ -3004,22 +3004,22 @@ void sub_8013F6C(u8 battler)
u8 r4, r1;
for (i = 0; i < 3; ++i)
- gUnknown_203B0DC[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->field_60));
- r4 = pokemon_order_func(gBattlerPartyIndexes[battler]);
- r1 = pokemon_order_func(*(gBattleStruct->monToSwitchIntoId + battler));
- sub_8127FF4(r4, r1);
+ gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->field_60));
+ r4 = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]);
+ r1 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler));
+ SwitchPartyMonSlots(r4, r1);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
for (i = 0; i < 3; ++i)
{
- *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gUnknown_203B0DC[i];
- *(BATTLE_PARTNER(battler) * 3 + i + (u8 *)(gBattleStruct->field_60)) = gUnknown_203B0DC[i];
+ *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i];
+ *(BATTLE_PARTNER(battler) * 3 + i + (u8 *)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i];
}
}
else
{
for (i = 0; i < 3; ++i)
- *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gUnknown_203B0DC[i];
+ *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i];
}
}
@@ -3137,7 +3137,7 @@ static void HandleTurnActionSelectionState(void)
*(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION) || gStatuses3[gActiveBattler] & STATUS3_ROOTED)
{
- BtlController_EmitChoosePokemon(0, PARTY_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
}
else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG))
|| ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP))
@@ -3146,16 +3146,16 @@ static void HandleTurnActionSelectionState(void)
|| ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0))
&& IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)))
{
- BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]);
}
else
{
if (gActiveBattler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH)
- BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
else if (gActiveBattler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH)
- BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
else
- BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
}
MarkBattlerForControllerExec(gActiveBattler);
break;
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 8a0e32ba8..a20f47ad4 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -4504,7 +4504,7 @@ static void atk4F_jumpifcantswitch(void)
static void sub_8024398(u8 arg0)
{
*(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
- BtlController_EmitChoosePokemon(0, PARTY_MUST_CHOOSE_MON, arg0, 0, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_SEND_OUT, arg0, 0, gBattleStruct->field_60[gActiveBattler]);
MarkBattlerForControllerExec(gActiveBattler);
}
@@ -4739,9 +4739,9 @@ static void atk50_openpartyscreen(void)
else
{
if (gBattlescriptCurrInstr[1] & OPEN_PARTY_ALLOW_CANCEL)
- hitmarkerFaintBits = PARTY_CHOOSE_MON; // Used here as the caseId for the EmitChoose function.
+ hitmarkerFaintBits = PARTY_ACTION_CHOOSE_MON; // Used here as the caseId for the EmitChoose function.
else
- hitmarkerFaintBits = PARTY_MUST_CHOOSE_MON;
+ hitmarkerFaintBits = PARTY_ACTION_SEND_OUT;
battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(OPEN_PARTY_ALLOW_CANCEL));
if (gSpecialStatuses[battlerId].flag40)
{
@@ -5831,7 +5831,7 @@ static void DrawLevelUpWindow1(void)
{
u16 currStats[NUM_STATS];
- GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
+ BufferMonStatsToTaskData(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
DrawLevelUpWindowPg1(12, gBattleResources->beforeLvlUp->stats, currStats, 0xE, 0xD, 0xF);
}
@@ -5839,7 +5839,7 @@ static void DrawLevelUpWindow2(void)
{
u16 currStats[NUM_STATS];
- GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
+ BufferMonStatsToTaskData(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
DrawLevelUpWindowPg2(12, currStats, 0xE, 0xD, 0xF);
}
@@ -7140,8 +7140,8 @@ static void atk8F_forcerandomswitch(void)
*(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i;
if (!IsMultiBattle())
sub_8013F6C(gBattlerTarget);
- sub_8127EC4(gBattlerTarget, i, 0);
- sub_8127EC4(gBattlerTarget ^ 2, i, 1);
+ SwitchPartyOrderLinkMulti(gBattlerTarget, i, 0);
+ SwitchPartyOrderLinkMulti(gBattlerTarget ^ 2, i, 1);
}
}
else
diff --git a/src/berry_pouch.c b/src/berry_pouch.c
index b8b66c0bc..bb1b106af 100644
--- a/src/berry_pouch.c
+++ b/src/berry_pouch.c
@@ -765,7 +765,7 @@ static void PrintSelectedBerryDescription(s32 itemIdx)
static void SetDescriptionWindowBorderPalette(s32 pal)
{
- SetBgRectPal(1, 0, 16, 30, 4, pal + 1);
+ SetBgTilemapPalette(1, 0, 16, 30, 4, pal + 1);
ScheduleBgCopyTilemapToVram(1);
}
@@ -1194,7 +1194,7 @@ static void Task_BerryPouch_Give(u8 taskId)
Task_Give_PrintThereIsNoPokemon(taskId);
else
{
- sResources->exitCallback = sub_8126EDC;
+ sResources->exitCallback = CB2_ChooseMonToGiveItem;
gTasks[taskId].func = BerryPouch_StartFadeToExitCallback;
}
}
@@ -1251,7 +1251,7 @@ static void Task_ContextMenu_FromPartyGiveMenu(u8 taskId)
}
else
{
- sResources->exitCallback = c2_8123744;
+ sResources->exitCallback = CB2_GiveHoldItem;
gTasks[taskId].func = BerryPouch_StartFadeToExitCallback;
}
}
diff --git a/src/data/party_menu.h b/src/data/party_menu.h
new file mode 100644
index 000000000..fa74d1ad8
--- /dev/null
+++ b/src/data/party_menu.h
@@ -0,0 +1,1316 @@
+static const struct BgTemplate sPartyMenuBgTemplates[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 28,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+};
+
+enum
+{
+ PARTY_BOX_LEFT_COLUMN,
+ PARTY_BOX_RIGHT_COLUMN,
+};
+
+static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] =
+{
+ [PARTY_BOX_LEFT_COLUMN] =
+ {
+ BlitBitmapToPartyWindow_LeftColumn,
+ {
+ // The below are the x, y, width, and height for each of the following info
+ 24, 11, 40, 13, // Nickname
+ 32, 20, 32, 8, // Level
+ 64, 20, 8, 8, // Gender
+ 38, 36, 24, 8, // HP
+ 53, 36, 24, 8, // Max HP
+ 24, 35, 48, 3 // HP bar
+ },
+ 12, 34, 64, 16 // Description text (e.g. NO USE)
+ },
+ [PARTY_BOX_RIGHT_COLUMN] =
+ {
+ BlitBitmapToPartyWindow_RightColumn,
+ {
+ // The below are the x, y, width, and height for each of the following info
+ 22, 3, 40, 13, // Nickname
+ 32, 12, 32, 8, // Level
+ 64, 12, 8, 8, // Gender
+ 102, 12, 24, 8, // HP
+ 117, 12, 24, 8, // Max HP
+ 88, 10, 48, 3 // HP bar
+ },
+ 77, 4, 64, 16 // Description text
+ },
+};
+
+static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] =
+{
+ [PARTY_LAYOUT_SINGLE] =
+ {
+ { 16, 40, 20, 50, 56, 52, 16, 34},
+ {104, 18, 108, 28, 144, 27, 102, 25},
+ {104, 42, 108, 52, 144, 51, 102, 49},
+ {104, 66, 108, 76, 144, 75, 102, 73},
+ {104, 90, 108, 100, 144, 99, 102, 97},
+ {104, 114, 108, 124, 144, 123, 102, 121},
+ },
+ [PARTY_LAYOUT_DOUBLE] =
+ {
+ { 16, 24, 20, 34, 56, 36, 16, 18},
+ { 16, 80, 20, 90, 56, 92, 16, 74},
+ {104, 18, 108, 28, 144, 27, 102, 25},
+ {104, 50, 108, 60, 144, 59, 102, 57},
+ {104, 82, 108, 92, 144, 91, 102, 89},
+ {104, 114, 108, 124, 144, 123, 102, 121},
+ },
+ [PARTY_LAYOUT_MULTI] =
+ {
+ { 16, 24, 20, 34, 56, 36, 16, 18},
+ { 16, 80, 20, 90, 56, 92, 16, 74},
+ {104, 26, 106, 36, 144, 35, 102, 33},
+ {104, 50, 106, 60, 144, 59, 102, 57},
+ {104, 82, 106, 92, 144, 91, 102, 89},
+ {104, 106, 106, 116, 144, 115, 102, 113},
+ },
+ [PARTY_LAYOUT_MULTI_SHOWCASE] =
+ {
+ { 16, 32, 20, 42, 56, 44, 16, 26},
+ {104, 34, 106, 44, 144, 43, 102, 41},
+ {104, 58, 106, 68, 144, 67, 102, 65},
+ { 16, 104, 20, 114, 56, 116, 16, 98},
+ {104, 106, 106, 116, 144, 115, 102, 113},
+ {104, 130, 106, 140, 144, 139, 102, 137},
+ },
+};
+
+static const u32 sConfirmButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_confirm_button.bin");
+static const u32 sCancelButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_cancel_button.bin");
+
+static const u8 sFontColorTable[][3] =
+{
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_DARK_GREY}, // Default
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_GREEN}, // Unused
+ {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_2, TEXT_DYNAMIC_COLOR_3}, // Gender symbol
+ {TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}, // Selection actions
+ {TEXT_COLOR_WHITE, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_BLUE}, // Field moves
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}, // Unused
+};
+
+static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 3,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 3,
+ .baseBlock = 0x63,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 1,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 4,
+ .baseBlock = 0xA9,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 4,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 5,
+ .baseBlock = 0xDF,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 7,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 6,
+ .baseBlock = 0x115,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 10,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 7,
+ .baseBlock = 0x14B,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 13,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 8,
+ .baseBlock = 0x181,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 15,
+ .width = 28,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x1DF,
+ },
+ DUMMY_WIN_TEMPLATE,
+};
+
+static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 3,
+ .baseBlock = 0x63,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 8,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 4,
+ .baseBlock = 0xA9,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 1,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 5,
+ .baseBlock = 0xEF,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 5,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 6,
+ .baseBlock = 0x125,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 9,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 7,
+ .baseBlock = 0x15B,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 13,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 8,
+ .baseBlock = 0x191,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 15,
+ .width = 28,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x1DF,
+ },
+ DUMMY_WIN_TEMPLATE,
+};
+
+static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 3,
+ .baseBlock = 0x63,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 8,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 4,
+ .baseBlock = 0xA9,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 2,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 5,
+ .baseBlock = 0xEF,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 5,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 6,
+ .baseBlock = 0x125,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 9,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 7,
+ .baseBlock = 0x15B,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 12,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 8,
+ .baseBlock = 0x191,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 15,
+ .width = 28,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x1DF,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 2,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 3,
+ .baseBlock = 0x63,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 3,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 5,
+ .baseBlock = 0xA9,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 6,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 6,
+ .baseBlock = 0xDF,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 11,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 4,
+ .baseBlock = 0x115,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 12,
+ .tilemapTop = 12,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 7,
+ .baseBlock = 0x16B,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 12,
+ .tilemapTop = 15,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 8,
+ .baseBlock = 0x1A1,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sCancelButtonWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 17,
+ .width = 6,
+ .height = 2,
+ .paletteNum = 3,
+ .baseBlock = 0x1C7,
+};
+
+static const struct WindowTemplate sMultiCancelButtonWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 18,
+ .width = 6,
+ .height = 2,
+ .paletteNum = 3,
+ .baseBlock = 0x1C7,
+};
+
+static const struct WindowTemplate sConfirmButtonWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 16,
+ .width = 6,
+ .height = 2,
+ .paletteNum = 3,
+ .baseBlock = 0x1D3,
+};
+
+static const struct WindowTemplate sDefaultPartyMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 21,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x24F,
+};
+
+static const struct WindowTemplate sDoWhatWithMonMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 16,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x279,
+};
+
+static const struct WindowTemplate sDoWhatWithItemMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 19,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x299,
+};
+
+static const struct WindowTemplate sDoWhatWithMailMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 16,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x299,
+};
+
+static const struct WindowTemplate sWhichMoveMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 15,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x299,
+};
+
+static const struct WindowTemplate sItemGiveTakeWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 22,
+ .tilemapTop = 13,
+ .width = 7,
+ .height = 6,
+ .paletteNum = 14,
+ .baseBlock = 0x373,
+};
+
+static const struct WindowTemplate sMailReadTakeWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 19,
+ .tilemapTop = 13,
+ .width = 10,
+ .height = 6,
+ .paletteNum = 14,
+ .baseBlock = 0x373,
+};
+
+static const struct WindowTemplate sMoveSelectWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 18,
+ .tilemapTop = 11,
+ .width = 11,
+ .height = 8,
+ .paletteNum = 14,
+ .baseBlock = 0x2BF,
+};
+
+static const struct WindowTemplate sPartyMenuYesNoWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 21,
+ .tilemapTop = 9,
+ .width = 6,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x2BF,
+};
+
+static const struct WindowTemplate sLevelUpStatsWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 19,
+ .tilemapTop = 1,
+ .width = 10,
+ .height = 11,
+ .paletteNum = 14,
+ .baseBlock = 0x2BF,
+};
+
+static const struct WindowTemplate gUnknown_845A170 =
+{
+ .bg = 2,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 26,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x1DF,
+};
+
+static const struct WindowTemplate gUnknown_845A178 =
+{
+ .bg = 2,
+ .tilemapLeft = 0,
+ .tilemapTop = 13,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 12,
+ .baseBlock = 0x373,
+};
+
+static const u8 sMainSlotTileNums[] =
+{
+ 24, 25, 25, 25, 25, 25, 25, 25, 25, 26,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 40, 59, 60, 58, 58, 58, 58, 58, 58, 61,
+ 15, 16, 16, 16, 16, 16, 16, 16, 16, 17,
+ 46, 47, 47, 47, 47, 47, 47, 47, 47, 48,
+};
+
+static const u8 sMainSlotTileNums_Egg[] =
+{
+ 24, 25, 25, 25, 25, 25, 25, 25, 25, 26,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 40, 41, 41, 41, 41, 41, 41, 41, 41, 42,
+ 15, 16, 16, 16, 16, 16, 16, 16, 16, 17,
+ 46, 47, 47, 47, 47, 47, 47, 47, 47, 48,
+};
+
+static const u8 sOtherSlotsTileNums[] =
+{
+ 43, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 45, 49, 33,
+ 33, 33, 33, 33, 33, 33, 33, 52, 53, 51,
+ 51, 51, 51, 51, 51, 54, 55, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 57,
+};
+
+static const u8 sOtherSlotsTileNums_Egg[] =
+{
+ 43, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 45, 49, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 50, 55, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 57,
+};
+
+static const u8 sEmptySlotTileNums[] =
+{
+ 21, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 23, 30, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 31, 37, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 39,
+};
+
+static const u8 sGenderPalOffsets[] = {11, 12};
+
+static const u8 sHPBarPalOffsets[] = {9, 10};
+
+static const u8 sPartyBoxPalOffsets1[] = {4, 5, 6};
+
+static const u8 sPartyBoxPalOffsets2[] = {1, 7, 8};
+
+static const u8 sGenderMalePalIds[] = {59, 60};
+
+static const u8 sGenderFemalePalIds[] = {75, 76};
+
+static const u8 sHPBarGreenPalIds[] = {57, 58};
+
+static const u8 sHPBarYellowPalIds[] = {73, 74};
+
+static const u8 sHPBarRedPalIds[] = {89, 90};
+
+static const u8 sPartyBoxEmptySlotPalIds1[] = {52, 53, 54};
+
+static const u8 sPartyBoxMultiPalIds1[] = {68, 69, 70};
+
+static const u8 sPartyBoxFaintedPalIds1[] = {84, 85, 86};
+
+static const u8 sPartyBoxCurrSelectionPalIds1[] = {116, 117, 118};
+
+static const u8 sPartyBoxCurrSelectionMultiPalIds[] = {132, 133, 134};
+
+static const u8 sPartyBoxCurrSelectionFaintedPalIds[] = {148, 149, 150};
+
+static const u8 sPartyBoxSelectedForActionPalIds1[] = {100, 101, 102};
+
+static const u8 sPartyBoxEmptySlotPalIds2[] = {49, 55, 56};
+
+static const u8 sPartyBoxMultiPalIds2[] = {65, 71, 72};
+
+static const u8 sPartyBoxFaintedPalIds2[] = {81, 87, 88};
+
+static const u8 sPartyBoxCurrSelectionPalIds2[] = {97, 103, 104};
+
+static const u8 sPartyBoxSelectedForActionPalIds2[] = {161, 167, 168};
+
+static const u8 *const sActionStringTable[] =
+{
+ [PARTY_MSG_CHOOSE_MON] = gText_ChoosePokemon,
+ [PARTY_MSG_CHOOSE_MON_OR_CANCEL] = gText_ChoosePokemonCancel,
+ [PARTY_MSG_CHOOSE_MON_AND_CONFIRM] = gText_ChoosePokemonConfirm,
+ [PARTY_MSG_MOVE_TO_WHERE] = gText_MoveToWhere,
+ [PARTY_MSG_TEACH_WHICH_MON] = gText_TeachWhichPokemon,
+ [PARTY_MSG_USE_ON_WHICH_MON] = gText_UseOnWhichPokemon,
+ [PARTY_MSG_GIVE_TO_WHICH_MON] = gText_GiveToWhichPokemon,
+ [PARTY_MSG_NOTHING_TO_CUT] = gText_NothingToCut,
+ [PARTY_MSG_CANT_SURF_HERE] = gText_CantSurfHere,
+ [PARTY_MSG_ALREADY_SURFING] = gText_AlreadySurfing,
+ [PARTY_MSG_CURRENT_TOO_FAST] = gText_CurrentIsTooFast,
+ [PARTY_MSG_ENJOY_CYCLING] = gText_EnjoyCycling,
+ [PARTY_MSG_ALREADY_IN_USE] = gText_InUseAlready_PM,
+ [PARTY_MSG_CANT_USE_HERE] = gText_CantUseHere,
+ [PARTY_MSG_NO_MON_FOR_BATTLE] = gText_NoPokemonForBattle,
+ [PARTY_MSG_CHOOSE_MON_2] = gText_ChoosePokemon2,
+ [PARTY_MSG_NOT_ENOUGH_HP] = gText_NotEnoughHp,
+ [PARTY_MSG_THREE_MONS_ARE_NEEDED] = gText_ThreePkmnAreNeeded,
+ [PARTY_MSG_TWO_MONS_ARE_NEEDED] = gText_TwoPokemonAreNeeded,
+ [PARTY_MSG_MONS_CANT_BE_SAME] = gText_PokemonCantBeSame,
+ [PARTY_MSG_NO_SAME_HOLD_ITEMS] = gText_NoIdenticalHoldItems,
+ [PARTY_MSG_UNUSED] = gString_Dummy,
+ [PARTY_MSG_DO_WHAT_WITH_MON] = gText_DoWhatWithPokemon,
+ [PARTY_MSG_RESTORE_WHICH_MOVE] = gText_RestoreWhichMove,
+ [PARTY_MSG_BOOST_PP_WHICH_MOVE] = gText_BoostPp,
+ [PARTY_MSG_DO_WHAT_WITH_ITEM] = gText_DoWhatWithItem,
+ [PARTY_MSG_DO_WHAT_WITH_MAIL] = gText_DoWhatWithMail,
+};
+
+static const u8 *const sDescriptionStringTable[] =
+{
+ [PARTYBOX_DESC_NO_USE] = gText_NoUse,
+ [PARTYBOX_DESC_ABLE_3] = gText_Able,
+ [PARTYBOX_DESC_FIRST] = gText_First_PM,
+ [PARTYBOX_DESC_SECOND] = gText_Second_PM,
+ [PARTYBOX_DESC_THIRD] = gText_Third_PM,
+ [PARTYBOX_DESC_ABLE] = gText_Able2,
+ [PARTYBOX_DESC_NOT_ABLE] = gText_NotAble,
+ [PARTYBOX_DESC_ABLE_2] = gText_Able3,
+ [PARTYBOX_DESC_NOT_ABLE_2] = gText_NotAble2,
+ [PARTYBOX_DESC_LEARNED] = gText_Learned,
+};
+
+static const u8 *const sHMDescriptionTable[] =
+{
+ gText_LightUpDarkness,
+ gText_CutATreeOrGrass,
+ gText_FlyToAKnownTown,
+ gText_MoveHeavyBoulders,
+ gText_TravelOnWater,
+ gText_ShatterACrackedRock,
+ gText_ClimbAWaterfall,
+ gText_ReturnToAHealingSpot,
+ gText_EscapeFromHere,
+ gText_ShareHp,
+ gText_ShareHp,
+ gText_LureWildPokemon,
+};
+
+static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/interface/hold_icons.4bpp");
+static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.gbapal");
+
+static const struct OamData sOamData_HeldItem =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_HeldItem[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_HeldMail[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_HeldItem[] =
+{
+ sSpriteAnim_HeldItem,
+ sSpriteAnim_HeldMail,
+};
+
+static const struct SpriteSheet sSpriteSheet_HeldItem =
+{
+ sHeldItemGfx, sizeof(sHeldItemGfx), 0xD750
+};
+
+static const struct SpritePalette sSpritePalette_HeldItem =
+{
+ sHeldItemPalette, 0xD750
+};
+
+static const struct SpriteTemplate sSpriteTemplate_HeldItem =
+{
+ 0xD750,
+ 0xD750,
+ &sOamData_HeldItem,
+ sSpriteAnimTable_HeldItem,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ SpriteCallbackDummy,
+};
+
+static const struct OamData sOamData_MenuPokeball =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sPokeballAnim_Closed[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sPokeballAnim_Open[] =
+{
+ ANIMCMD_FRAME(16, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_MenuPokeball[] =
+{
+ sPokeballAnim_Closed,
+ sPokeballAnim_Open,
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeball =
+{
+ gPartyMenuPokeball_Gfx, 0x400, 0x04b0
+};
+
+static const struct CompressedSpritePalette sSpritePalette_MenuPokeball =
+{
+ gPartyMenuPokeball_Pal, 0x04b0
+};
+
+// Used for the pokeball sprite on each party slot / Cancel button
+static const struct SpriteTemplate sSpriteTemplate_MenuPokeball =
+{
+ .tileTag = 0x04b0,
+ .paletteTag = 0x04b0,
+ .oam = &sOamData_MenuPokeball,
+ .anims = sSpriteAnimTable_MenuPokeball,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct OamData sOamData_MenuPokeballSmall =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSmallPokeballAnim_Closed[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Open[] =
+{
+ ANIMCMD_FRAME(4, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Blank1[] =
+{
+ ANIMCMD_FRAME(8, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Blank2[] =
+{
+ ANIMCMD_FRAME(12, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Blank3[] =
+{
+ ANIMCMD_FRAME(16, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Blank4[] =
+{
+ ANIMCMD_FRAME(20, 0),
+ ANIMCMD_END
+};
+
+// The blanks below are never used. See SpriteCB_BounceConfirmCancelButton, where they were intended to be used
+static const union AnimCmd *const sSpriteAnimTable_MenuPokeballSmall[] =
+{
+ sSmallPokeballAnim_Closed,
+ sSmallPokeballAnim_Open,
+ sSmallPokeballAnim_Blank1,
+ sSmallPokeballAnim_Blank2,
+ sSmallPokeballAnim_Blank3,
+ sSmallPokeballAnim_Blank4,
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeballSmall =
+{
+ gPartyMenuPokeballSmall_Gfx, 0x0300, 0x04b1
+};
+
+// Used for the pokeball sprite next to Cancel and Confirm when both are present, otherwise sSpriteTemplate_MenuPokeball is used
+static const struct SpriteTemplate sSpriteTemplate_MenuPokeballSmall =
+{
+ .tileTag = 1201,
+ .paletteTag = 1200,
+ .oam = &sOamData_MenuPokeballSmall,
+ .anims = sSpriteAnimTable_MenuPokeballSmall,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct OamData sOamData_StatusCondition =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x8),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_StatusPoison[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusParalyzed[] =
+{
+ ANIMCMD_FRAME(4, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusSleep[] =
+{
+ ANIMCMD_FRAME(8, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusFrozen[] =
+{
+ ANIMCMD_FRAME(12, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusBurn[] =
+{
+ ANIMCMD_FRAME(16, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusPokerus[] =
+{
+ ANIMCMD_FRAME(20, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusFaint[] =
+{
+ ANIMCMD_FRAME(24, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Blank[] =
+{
+ ANIMCMD_FRAME(28, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteTemplate_StatusCondition[] =
+{
+ sSpriteAnim_StatusPoison,
+ sSpriteAnim_StatusParalyzed,
+ sSpriteAnim_StatusSleep,
+ sSpriteAnim_StatusFrozen,
+ sSpriteAnim_StatusBurn,
+ sSpriteAnim_StatusPokerus,
+ sSpriteAnim_StatusFaint,
+ sSpriteAnim_Blank,
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_StatusIcons =
+{
+ gStatusGfx_Icons, 0x400, 1202
+};
+
+static const struct CompressedSpritePalette sSpritePalette_StatusIcons =
+{
+ gStatusPal_Icons, 1202
+};
+
+static const struct SpriteTemplate sSpriteTemplate_StatusIcons =
+{
+ .tileTag = 1202,
+ .paletteTag = 1202,
+ .oam = &sOamData_StatusCondition,
+ .anims = sSpriteTemplate_StatusCondition,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const bool8 sMultiBattlePartnersPartyMask[PARTY_SIZE + 2] =
+{
+ FALSE,
+ TRUE,
+ FALSE,
+ FALSE,
+ TRUE,
+ TRUE,
+ FALSE,
+};
+
+static const u16 sTMHMMoves_Duplicate[] =
+{
+ MOVE_FOCUS_PUNCH,
+ MOVE_DRAGON_CLAW,
+ MOVE_WATER_PULSE,
+ MOVE_CALM_MIND,
+ MOVE_ROAR,
+ MOVE_TOXIC,
+ MOVE_HAIL,
+ MOVE_BULK_UP,
+ MOVE_BULLET_SEED,
+ MOVE_HIDDEN_POWER,
+ MOVE_SUNNY_DAY,
+ MOVE_TAUNT,
+ MOVE_ICE_BEAM,
+ MOVE_BLIZZARD,
+ MOVE_HYPER_BEAM,
+ MOVE_LIGHT_SCREEN,
+ MOVE_PROTECT,
+ MOVE_RAIN_DANCE,
+ MOVE_GIGA_DRAIN,
+ MOVE_SAFEGUARD,
+ MOVE_FRUSTRATION,
+ MOVE_SOLAR_BEAM,
+ MOVE_IRON_TAIL,
+ MOVE_THUNDERBOLT,
+ MOVE_THUNDER,
+ MOVE_EARTHQUAKE,
+ MOVE_RETURN,
+ MOVE_DIG,
+ MOVE_PSYCHIC,
+ MOVE_SHADOW_BALL,
+ MOVE_BRICK_BREAK,
+ MOVE_DOUBLE_TEAM,
+ MOVE_REFLECT,
+ MOVE_SHOCK_WAVE,
+ MOVE_FLAMETHROWER,
+ MOVE_SLUDGE_BOMB,
+ MOVE_SANDSTORM,
+ MOVE_FIRE_BLAST,
+ MOVE_ROCK_TOMB,
+ MOVE_AERIAL_ACE,
+ MOVE_TORMENT,
+ MOVE_FACADE,
+ MOVE_SECRET_POWER,
+ MOVE_REST,
+ MOVE_ATTRACT,
+ MOVE_THIEF,
+ MOVE_STEEL_WING,
+ MOVE_SKILL_SWAP,
+ MOVE_SNATCH,
+ MOVE_OVERHEAT,
+ MOVE_CUT,
+ MOVE_FLY,
+ MOVE_SURF,
+ MOVE_STRENGTH,
+ MOVE_FLASH,
+ MOVE_ROCK_SMASH,
+ MOVE_WATERFALL,
+ MOVE_DIVE,
+};
+
+enum
+{
+ MENU_SUMMARY,
+ MENU_SWITCH,
+ MENU_CANCEL1,
+ MENU_ITEM,
+ MENU_GIVE,
+ MENU_TAKE_ITEM,
+ MENU_MAIL,
+ MENU_TAKE_MAIL,
+ MENU_READ,
+ MENU_CANCEL2,
+ MENU_SHIFT,
+ MENU_SEND_OUT,
+ MENU_ENTER,
+ MENU_NO_ENTRY,
+ MENU_STORE,
+ MENU_REGISTER,
+ MENU_TRADE1,
+ MENU_TRADE2,
+ MENU_FIELD_MOVES,
+};
+
+enum
+{
+ FIELD_MOVE_FLASH,
+ FIELD_MOVE_CUT,
+ FIELD_MOVE_FLY,
+ FIELD_MOVE_STRENGTH,
+ FIELD_MOVE_SURF,
+ FIELD_MOVE_ROCK_SMASH,
+ FIELD_MOVE_WATERFALL,
+ FIELD_MOVE_TELEPORT,
+ FIELD_MOVE_DIG,
+ FIELD_MOVE_MILK_DRINK,
+ FIELD_MOVE_SOFT_BOILED,
+ FIELD_MOVE_SWEET_SCENT,
+ FIELD_MOVE_END,
+};
+
+static struct
+{
+ const u8 *text;
+ TaskFunc func;
+} const sCursorOptions[] =
+{
+ [MENU_SUMMARY] = {gText_Summary5, CursorCB_Summary},
+ [MENU_SWITCH] = {gText_Switch2, CursorCB_Switch},
+ [MENU_CANCEL1] = {gFameCheckerText_Cancel, CursorCB_Cancel1},
+ [MENU_ITEM] = {gText_Item, CursorCB_Item},
+ [MENU_GIVE] = {gOtherText_Give, CursorCB_Give},
+ [MENU_TAKE_ITEM] = {gText_Take, CursorCB_TakeItem},
+ [MENU_MAIL] = {gText_Mail, CursorCB_Mail},
+ [MENU_TAKE_MAIL] = {gText_Take2, CursorCB_TakeMail},
+ [MENU_READ] = {gText_Read2, CursorCB_Read},
+ [MENU_CANCEL2] = {gFameCheckerText_Cancel, CursorCB_Cancel2},
+ [MENU_SHIFT] = {gText_Shift, CursorCB_SendMon},
+ [MENU_SEND_OUT] = {gText_SendOut, CursorCB_SendMon},
+ [MENU_ENTER] = {gText_Enter, CursorCB_Enter},
+ [MENU_NO_ENTRY] = {gText_NoEntry, CursorCB_NoEntry},
+ [MENU_STORE] = {gText_Store, CursorCB_Store},
+ [MENU_REGISTER] = {gText_Register, CursorCB_Register},
+ [MENU_TRADE1] = {gText_Trade4, CursorCB_Trade1},
+ [MENU_TRADE2] = {gText_Trade4, CursorCB_Trade2},
+ [MENU_FIELD_MOVES + FIELD_MOVE_FLASH] = {gMoveNames[MOVE_FLASH], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_CUT] = {gMoveNames[MOVE_CUT], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_FLY] = {gMoveNames[MOVE_FLY], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_STRENGTH] = {gMoveNames[MOVE_STRENGTH], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_SURF] = {gMoveNames[MOVE_SURF], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_SMASH] = {gMoveNames[MOVE_ROCK_SMASH], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_WATERFALL] = {gMoveNames[MOVE_WATERFALL], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_TELEPORT] = {gMoveNames[MOVE_TELEPORT], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_DIG] = {gMoveNames[MOVE_DIG], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_MILK_DRINK] = {gMoveNames[MOVE_MILK_DRINK], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCB_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCB_FieldMove},
+};
+
+static const u8 sPartyMenuAction_SummarySwitchCancel[] = {MENU_SUMMARY, MENU_SWITCH, MENU_CANCEL1};
+static const u8 sPartyMenuAction_ShiftSummaryCancel[] = {MENU_SHIFT, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_SendOutSummaryCancel[] = {MENU_SEND_OUT, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_SummaryCancel[] = {MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_EnterSummaryCancel[] = {MENU_ENTER, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_NoEntrySummaryCancel[] = {MENU_NO_ENTRY, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_StoreSummaryCancel[] = {MENU_STORE, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_GiveTakeItemCancel[] = {MENU_GIVE, MENU_TAKE_ITEM, MENU_CANCEL2};
+static const u8 sPartyMenuAction_ReadTakeMailCancel[] = {MENU_READ, MENU_TAKE_MAIL, MENU_CANCEL2};
+static const u8 sPartyMenuAction_RegisterSummaryCancel[] = {MENU_REGISTER, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_TradeSummaryCancel1[] = {MENU_TRADE1, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_TradeSummaryCancel2[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1};
+
+// IDs for the action lists that appear when a party mon is selected
+enum
+{
+ ACTIONS_NONE,
+ ACTIONS_SWITCH,
+ ACTIONS_SHIFT,
+ ACTIONS_SEND_OUT,
+ ACTIONS_ENTER,
+ ACTIONS_NO_ENTRY,
+ ACTIONS_STORE,
+ ACTIONS_SUMMARY_ONLY,
+ ACTIONS_ITEM,
+ ACTIONS_MAIL,
+ ACTIONS_REGISTER,
+ ACTIONS_TRADE,
+ ACTIONS_SPIN_TRADE,
+};
+
+static const u8 *const sPartyMenuActions[] =
+{
+ [ACTIONS_NONE] = NULL,
+ [ACTIONS_SWITCH] = sPartyMenuAction_SummarySwitchCancel,
+ [ACTIONS_SHIFT] = sPartyMenuAction_ShiftSummaryCancel,
+ [ACTIONS_SEND_OUT] = sPartyMenuAction_SendOutSummaryCancel,
+ [ACTIONS_ENTER] = sPartyMenuAction_EnterSummaryCancel,
+ [ACTIONS_NO_ENTRY] = sPartyMenuAction_NoEntrySummaryCancel,
+ [ACTIONS_STORE] = sPartyMenuAction_StoreSummaryCancel,
+ [ACTIONS_SUMMARY_ONLY] = sPartyMenuAction_SummaryCancel,
+ [ACTIONS_ITEM] = sPartyMenuAction_GiveTakeItemCancel,
+ [ACTIONS_MAIL] = sPartyMenuAction_ReadTakeMailCancel,
+ [ACTIONS_REGISTER] = sPartyMenuAction_RegisterSummaryCancel,
+ [ACTIONS_TRADE] = sPartyMenuAction_TradeSummaryCancel1,
+ [ACTIONS_SPIN_TRADE] = sPartyMenuAction_TradeSummaryCancel2,
+};
+
+static const u8 sPartyMenuActionCounts[] =
+{
+ [ACTIONS_NONE] = 0,
+ [ACTIONS_SWITCH] = NELEMS(sPartyMenuAction_SummarySwitchCancel),
+ [ACTIONS_SHIFT] = NELEMS(sPartyMenuAction_ShiftSummaryCancel),
+ [ACTIONS_SEND_OUT] = NELEMS(sPartyMenuAction_SendOutSummaryCancel),
+ [ACTIONS_ENTER] = NELEMS(sPartyMenuAction_EnterSummaryCancel),
+ [ACTIONS_NO_ENTRY] = NELEMS(sPartyMenuAction_NoEntrySummaryCancel),
+ [ACTIONS_STORE] = NELEMS(sPartyMenuAction_StoreSummaryCancel),
+ [ACTIONS_SUMMARY_ONLY] = NELEMS(sPartyMenuAction_SummaryCancel),
+ [ACTIONS_ITEM] = NELEMS(sPartyMenuAction_GiveTakeItemCancel),
+ [ACTIONS_MAIL] = NELEMS(sPartyMenuAction_ReadTakeMailCancel),
+ [ACTIONS_REGISTER] = NELEMS(sPartyMenuAction_RegisterSummaryCancel),
+ [ACTIONS_TRADE] = NELEMS(sPartyMenuAction_TradeSummaryCancel1),
+ [ACTIONS_SPIN_TRADE] = NELEMS(sPartyMenuAction_TradeSummaryCancel2),
+};
+
+static const u16 sFieldMoves[] =
+{
+ MOVE_FLASH, MOVE_CUT, MOVE_FLY, MOVE_STRENGTH, MOVE_SURF, MOVE_ROCK_SMASH, MOVE_WATERFALL, MOVE_TELEPORT,
+ MOVE_DIG, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, FIELD_MOVE_END // this may be misuse of enum. same in emerald
+};
+
+static struct
+{
+ bool8 (*fieldMoveFunc)(void);
+ u8 msgId;
+} const sFieldMoveCursorCallbacks[] =
+{
+ [FIELD_MOVE_FLASH] = {SetUpFieldMove_Flash, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_CUT] = {SetUpFieldMove_Cut, PARTY_MSG_NOTHING_TO_CUT},
+ [FIELD_MOVE_FLY] = {SetUpFieldMove_Fly, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_STRENGTH] = {SetUpFieldMove_Strength, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_SURF] = {SetUpFieldMove_Surf, PARTY_MSG_CANT_SURF_HERE},
+ [FIELD_MOVE_ROCK_SMASH] = {SetUpFieldMove_RockSmash, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_WATERFALL] = {SetUpFieldMove_Waterfall, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_TELEPORT] = {SetUpFieldMove_Teleport, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_DIG] = {SetUpFieldMove_Dig, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_MILK_DRINK] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP},
+ [FIELD_MOVE_SOFT_BOILED] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP},
+ [FIELD_MOVE_SWEET_SCENT] = {SetUpFieldMove_SweetScent, PARTY_MSG_CANT_USE_HERE},
+};
+
+static const u8 *const sUnionRoomTradeMessages[] =
+{
+ [UR_TRADE_MSG_NOT_MON_PARTNER_WANTS - 1] = gText_NotPkmnOtherTrainerWants,
+ [UR_TRADE_MSG_NOT_EGG - 1] = gText_ThatIsntAnEgg,
+ [UR_TRADE_MSG_MON_CANT_BE_TRADED_1 - 1] = gText_PkmnCantBeTradedNow,
+ [UR_TRADE_MSG_MON_CANT_BE_TRADED_2 - 1] = gText_PkmnCantBeTradedNow,
+ [UR_TRADE_MSG_PARTNERS_MON_CANT_BE_TRADED - 1] = gText_OtherTrainersPkmnCantBeTraded,
+ [UR_TRADE_MSG_EGG_CANT_BE_TRADED -1] = gText_EggCantBeTradedNow,
+ [UR_TRADE_MSG_PARTNER_CANT_ACCEPT_MON - 1] = gText_OtherTrainerCantAcceptPkmn,
+ [UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1 - 1] = gText_CantTradeWithTrainer,
+ [UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2 - 1] = gText_CantTradeWithTrainer,
+};
+
+static const u16 sTMHMMoves[] =
+{
+ MOVE_FOCUS_PUNCH,
+ MOVE_DRAGON_CLAW,
+ MOVE_WATER_PULSE,
+ MOVE_CALM_MIND,
+ MOVE_ROAR,
+ MOVE_TOXIC,
+ MOVE_HAIL,
+ MOVE_BULK_UP,
+ MOVE_BULLET_SEED,
+ MOVE_HIDDEN_POWER,
+ MOVE_SUNNY_DAY,
+ MOVE_TAUNT,
+ MOVE_ICE_BEAM,
+ MOVE_BLIZZARD,
+ MOVE_HYPER_BEAM,
+ MOVE_LIGHT_SCREEN,
+ MOVE_PROTECT,
+ MOVE_RAIN_DANCE,
+ MOVE_GIGA_DRAIN,
+ MOVE_SAFEGUARD,
+ MOVE_FRUSTRATION,
+ MOVE_SOLAR_BEAM,
+ MOVE_IRON_TAIL,
+ MOVE_THUNDERBOLT,
+ MOVE_THUNDER,
+ MOVE_EARTHQUAKE,
+ MOVE_RETURN,
+ MOVE_DIG,
+ MOVE_PSYCHIC,
+ MOVE_SHADOW_BALL,
+ MOVE_BRICK_BREAK,
+ MOVE_DOUBLE_TEAM,
+ MOVE_REFLECT,
+ MOVE_SHOCK_WAVE,
+ MOVE_FLAMETHROWER,
+ MOVE_SLUDGE_BOMB,
+ MOVE_SANDSTORM,
+ MOVE_FIRE_BLAST,
+ MOVE_ROCK_TOMB,
+ MOVE_AERIAL_ACE,
+ MOVE_TORMENT,
+ MOVE_FACADE,
+ MOVE_SECRET_POWER,
+ MOVE_REST,
+ MOVE_ATTRACT,
+ MOVE_THIEF,
+ MOVE_STEEL_WING,
+ MOVE_SKILL_SWAP,
+ MOVE_SNATCH,
+ MOVE_OVERHEAT,
+ MOVE_CUT,
+ MOVE_FLY,
+ MOVE_SURF,
+ MOVE_STRENGTH,
+ MOVE_FLASH,
+ MOVE_ROCK_SMASH,
+ MOVE_WATERFALL,
+ MOVE_DIVE,
+};
diff --git a/src/data/pokemon/tutor_learnsets.h b/src/data/pokemon/tutor_learnsets.h
new file mode 100644
index 000000000..5396c1ecc
--- /dev/null
+++ b/src/data/pokemon/tutor_learnsets.h
@@ -0,0 +1,2813 @@
+static const u16 sTutorMoves[TUTOR_MOVE_COUNT] =
+{
+ [TUTOR_MOVE_MEGA_PUNCH] = MOVE_MEGA_PUNCH,
+ [TUTOR_MOVE_SWORDS_DANCE] = MOVE_SWORDS_DANCE,
+ [TUTOR_MOVE_MEGA_KICK] = MOVE_MEGA_KICK,
+ [TUTOR_MOVE_BODY_SLAM] = MOVE_BODY_SLAM,
+ [TUTOR_MOVE_DOUBLE_EDGE] = MOVE_DOUBLE_EDGE,
+ [TUTOR_MOVE_COUNTER] = MOVE_COUNTER,
+ [TUTOR_MOVE_SEISMIC_TOSS] = MOVE_SEISMIC_TOSS,
+ [TUTOR_MOVE_MIMIC] = MOVE_MIMIC,
+ [TUTOR_MOVE_METRONOME] = MOVE_METRONOME,
+ [TUTOR_MOVE_SOFT_BOILED] = MOVE_SOFT_BOILED,
+ [TUTOR_MOVE_DREAM_EATER] = MOVE_DREAM_EATER,
+ [TUTOR_MOVE_THUNDER_WAVE] = MOVE_THUNDER_WAVE,
+ [TUTOR_MOVE_EXPLOSION] = MOVE_EXPLOSION,
+ [TUTOR_MOVE_ROCK_SLIDE] = MOVE_ROCK_SLIDE,
+ [TUTOR_MOVE_SUBSTITUTE] = MOVE_SUBSTITUTE,
+};
+
+#define TUTOR(move) (1 << (TUTOR_##move))
+
+static const u16 sTutorLearnsets[] =
+{
+ [SPECIES_NONE] = 0,
+
+ [SPECIES_BULBASAUR] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_IVYSAUR] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VENUSAUR] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CHARMANDER] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CHARMELEON] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CHARIZARD] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SQUIRTLE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WARTORTLE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BLASTOISE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CATERPIE] = 0,
+
+ [SPECIES_METAPOD] = 0,
+
+ [SPECIES_BUTTERFREE] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WEEDLE] = 0,
+
+ [SPECIES_KAKUNA] = 0,
+
+ [SPECIES_BEEDRILL] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PIDGEY] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PIDGEOTTO] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PIDGEOT] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RATTATA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RATICATE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SPEAROW] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_FEAROW] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_EKANS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ARBOK] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PIKACHU] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RAICHU] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SANDSHREW] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SANDSLASH] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NIDORAN_F] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NIDORINA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NIDOQUEEN] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NIDORAN_M] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NIDORINO] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NIDOKING] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CLEFAIRY] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CLEFABLE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VULPIX] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NINETALES] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_JIGGLYPUFF] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WIGGLYTUFF] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ZUBAT] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GOLBAT] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ODDISH] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GLOOM] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VILEPLUME] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PARAS] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PARASECT] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VENONAT] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VENOMOTH] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DIGLETT] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DUGTRIO] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MEOWTH] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PERSIAN] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PSYDUCK] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GOLDUCK] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MANKEY] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PRIMEAPE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GROWLITHE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ARCANINE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_POLIWAG] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_POLIWHIRL] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_POLIWRATH] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ABRA] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KADABRA] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ALAKAZAM] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MACHOP] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MACHOKE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MACHAMP] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BELLSPROUT] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WEEPINBELL] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VICTREEBEL] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TENTACOOL] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TENTACRUEL] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GEODUDE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GRAVELER] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GOLEM] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PONYTA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RAPIDASH] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SLOWPOKE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SLOWBRO] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAGNEMITE] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAGNETON] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_FARFETCHD] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DODUO] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DODRIO] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SEEL] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DEWGONG] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GRIMER] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MUK] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SHELLDER] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CLOYSTER] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GASTLY] = TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HAUNTER] = TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GENGAR] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ONIX] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DROWZEE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HYPNO] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KRABBY] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KINGLER] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VOLTORB] = TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ELECTRODE] = TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_EXEGGCUTE] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_EXEGGUTOR] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CUBONE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAROWAK] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HITMONLEE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HITMONCHAN] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LICKITUNG] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KOFFING] = TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WEEZING] = TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RHYHORN] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RHYDON] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CHANSEY] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TANGELA] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KANGASKHAN] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HORSEA] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SEADRA] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GOLDEEN] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SEAKING] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_STARYU] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_STARMIE] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MR_MIME] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SCYTHER] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_JYNX] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ELECTABUZZ] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAGMAR] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PINSIR] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TAUROS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAGIKARP] = 0,
+
+ [SPECIES_GYARADOS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LAPRAS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DITTO] = 0,
+
+ [SPECIES_EEVEE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VAPOREON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_JOLTEON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_FLAREON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PORYGON] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_OMANYTE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_OMASTAR] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KABUTO] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KABUTOPS] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_AERODACTYL] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SNORLAX] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ARTICUNO] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ZAPDOS] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MOLTRES] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DRATINI] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DRAGONAIR] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DRAGONITE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MEWTWO] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MEW] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CHIKORITA] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BAYLEEF] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MEGANIUM] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CYNDAQUIL] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_QUILAVA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TYPHLOSION] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TOTODILE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CROCONAW] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_FERALIGATR] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SENTRET] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_FURRET] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HOOTHOOT] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NOCTOWL] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LEDYBA] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LEDIAN] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SPINARAK] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ARIADOS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CROBAT] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CHINCHOU] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LANTURN] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PICHU] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CLEFFA] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_IGGLYBUFF] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TOGEPI] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TOGETIC] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NATU] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_XATU] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAREEP] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_FLAAFFY] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_AMPHAROS] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BELLOSSOM] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MARILL] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_AZUMARILL] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SUDOWOODO] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_POLITOED] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HOPPIP] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SKIPLOOM] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_JUMPLUFF] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_AIPOM] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SUNKERN] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SUNFLORA] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_YANMA] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WOOPER] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_QUAGSIRE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ESPEON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_UMBREON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MURKROW] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SLOWKING] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MISDREAVUS] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_UNOWN] = 0,
+
+ [SPECIES_WOBBUFFET] = 0,
+
+ [SPECIES_GIRAFARIG] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PINECO] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_FORRETRESS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DUNSPARCE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GLIGAR] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_STEELIX] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SNUBBULL] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GRANBULL] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_QWILFISH] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SCIZOR] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SHUCKLE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HERACROSS] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SNEASEL] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TEDDIURSA] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_URSARING] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SLUGMA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAGCARGO] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SWINUB] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PILOSWINE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CORSOLA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_REMORAID] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_OCTILLERY] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DELIBIRD] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MANTINE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SKARMORY] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HOUNDOUR] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HOUNDOOM] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KINGDRA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PHANPY] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DONPHAN] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PORYGON2] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_STANTLER] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SMEARGLE] = 0,
+
+ [SPECIES_TYROGUE] = TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HITMONTOP] = TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SMOOCHUM] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ELEKID] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAGBY] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MILTANK] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BLISSEY] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RAIKOU] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ENTEI] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SUICUNE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LARVITAR] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PUPITAR] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TYRANITAR] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LUGIA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HO_OH] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CELEBI] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TREECKO] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GROVYLE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SCEPTILE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TORCHIC] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_COMBUSKEN] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BLAZIKEN] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MUDKIP] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MARSHTOMP] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SWAMPERT] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_POOCHYENA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MIGHTYENA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ZIGZAGOON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LINOONE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WURMPLE] = 0,
+
+ [SPECIES_SILCOON] = 0,
+
+ [SPECIES_BEAUTIFLY] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CASCOON] = 0,
+
+ [SPECIES_DUSTOX] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LOTAD] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LOMBRE] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LUDICOLO] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SEEDOT] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NUZLEAF] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SHIFTRY] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NINCADA] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NINJASK] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SHEDINJA] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TAILLOW] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SWELLOW] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SHROOMISH] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BRELOOM] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SPINDA] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WINGULL] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PELIPPER] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SURSKIT] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MASQUERAIN] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WAILMER] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WAILORD] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SKITTY] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DELCATTY] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KECLEON] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BALTOY] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CLAYDOL] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NOSEPASS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TORKOAL] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SABLEYE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BARBOACH] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WHISCASH] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LUVDISC] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CORPHISH] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CRAWDAUNT] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_FEEBAS] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MILOTIC] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CARVANHA] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SHARPEDO] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TRAPINCH] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VIBRAVA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_FLYGON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAKUHITA] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HARIYAMA] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ELECTRIKE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MANECTRIC] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_NUMEL] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CAMERUPT] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SPHEAL] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SEALEO] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WALREIN] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CACNEA] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CACTURNE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SNORUNT] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GLALIE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LUNATONE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SOLROCK] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_AZURILL] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SPOINK] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GRUMPIG] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_PLUSLE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MINUN] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MAWILE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MEDITITE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_MEDICHAM] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SWABLU] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ALTARIA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WYNAUT] = 0,
+
+ [SPECIES_DUSKULL] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DUSCLOPS] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ROSELIA] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SLAKOTH] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VIGOROTH] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SLAKING] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GULPIN] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SWALOT] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_TROPIUS] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_WHISMUR] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LOUDRED] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_EXPLOUD] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CLAMPERL] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_HUNTAIL] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GOREBYSS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ABSOL] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SHUPPET] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BANETTE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SEVIPER] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ZANGOOSE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RELICANTH] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ARON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LAIRON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_AGGRON] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CASTFORM] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_VOLBEAT] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ILLUMISE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LILEEP] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CRADILY] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ANORITH] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_ARMALDO] = TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RALTS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KIRLIA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GARDEVOIR] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BAGON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SHELGON] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_SALAMENCE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_BELDUM] = 0,
+
+ [SPECIES_METANG] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_METAGROSS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_REGIROCK] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_REGICE] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_REGISTEEL] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_KYOGRE] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_GROUDON] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_RAYQUAZA] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LATIAS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_LATIOS] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_JIRACHI] = TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_DEOXYS] = TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE),
+
+ [SPECIES_CHIMECHO] = TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE),
+};
diff --git a/src/daycare.c b/src/daycare.c
index f034bc220..8862dfda9 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1582,7 +1582,7 @@ void ShowDaycareLevelMenu(void)
void ChooseSendDaycareMon(void)
{
- sub_8128370();
+ ChooseMonForDaycare();
gMain.savedCallback = CB2_ReturnToField;
}
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c
index 58caad509..d6bf4ea07 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -522,7 +522,7 @@ static bool32 sub_807E40C(void)
bool32 sub_807E418(void)
{
- if (field_weather_is_fade_finished() == TRUE && sub_80F83B0())
+ if (IsWeatherNotFadingIn() == TRUE && sub_80F83B0())
return TRUE;
else
return FALSE;
diff --git a/src/field_poison.c b/src/field_poison.c
index 474fbcd69..07c2b763f 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -43,7 +43,7 @@ static void FaintFromFieldPoison(u8 partyIdx)
static bool32 MonFaintedFromPoison(u8 partyIdx)
{
struct Pokemon *pokemon = gPlayerParty + partyIdx;
- if (IsMonValidSpecies(pokemon) && !GetMonData(pokemon, MON_DATA_HP) && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
+ if (IsMonValidSpecies(pokemon) && !GetMonData(pokemon, MON_DATA_HP) && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
return TRUE;
return FALSE;
}
@@ -97,7 +97,7 @@ s32 DoPoisonFieldEffect(void)
u32 numFainted = 0;
for (i = 0; i < PARTY_SIZE; i++)
{
- if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
+ if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
{
hp = GetMonData(pokemon, MON_DATA_HP);
if (hp == 0 || --hp == 0)
diff --git a/src/field_specials.c b/src/field_specials.c
index 617faa017..374c74f3c 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -1863,7 +1863,7 @@ void sub_80CC59C(void)
{
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE22) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE23)))
{
- sp0.unk0 = get_mapheader_by_bank_and_number(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId;
+ sp0.unk0 = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId;
if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22))
sp0.unk1 = r5;
else
@@ -1875,7 +1875,7 @@ void sub_80CC59C(void)
}
if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[r5].grp2 && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[r5].num2)
{
- sp0.unk0 = get_mapheader_by_bank_and_number(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId;
+ sp0.unk0 = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId;
sp0.unk1 = r5;
if (r5 == 22)
{
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 000b8105b..4244762c0 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -60,7 +60,7 @@ const u8 gUnknown_8352F10[] = {
const struct MapHeader * mapconnection_get_mapheader(struct MapConnection * connection)
{
- return get_mapheader_by_bank_and_number(connection->mapGroup, connection->mapNum);
+ return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum);
}
void not_trainer_hill_battle_pyramid(void)
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
index 400a1d382..60437c125 100644
--- a/src/fldeff_softboiled.c
+++ b/src/fldeff_softboiled.c
@@ -13,9 +13,9 @@ static void sub_80E58A0(u8 taskId);
static void sub_80E5934(u8 taskId);
extern const u8 gUnknown_84169F8[];
-extern const u8 gUnknown_8416F27[];
+extern const u8 gText_PkmnHPRestoredByVar2[];
-bool8 hm_prepare_dive_probably(void)
+bool8 SetUpFieldMove_SoftBoiled(void)
{
u16 maxHp = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_MAX_HP);
u16 curHp = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_HP);
@@ -26,27 +26,27 @@ bool8 hm_prepare_dive_probably(void)
return FALSE;
}
-void sub_80E56DC(u8 taskId)
+void ChooseMonForSoftboiled(u8 taskId)
{
- gUnknown_203B0A0.unkB = 10;
- gUnknown_203B0A0.unkA = gUnknown_203B0A0.unk9;
- sub_811F818(GetCursorSelectionMonId(), 1);
- sub_8121D0C(5);
- gTasks[taskId].func = sub_811FB28;
+ gPartyMenu.action = 10;
+ gPartyMenu.slotId2 = gPartyMenu.slotId;
+ AnimatePartySlot(GetCursorSelectionMonId(), 1);
+ DisplayPartyMenuStdMessage(5);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
-void sub_80E5724(u8 taskId)
+void Task_TryUseSoftboiledOnPartyMon(u8 taskId)
{
- u8 r8 = gUnknown_203B0A0.unk9;
- u8 r5 = gUnknown_203B0A0.unkA;
+ u8 r8 = gPartyMenu.slotId;
+ u8 r5 = gPartyMenu.slotId2;
u16 curHp;
s16 delta;
if (r5 > 6)
{
- gUnknown_203B0A0.unkB = 0;
- sub_8121D0C(0);
- gTasks[taskId].func = sub_811FB28;
+ gPartyMenu.action = 0;
+ DisplayPartyMenuStdMessage(0);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
else
{
@@ -58,7 +58,7 @@ void sub_80E5724(u8 taskId)
else
{
PlaySE(SE_KAIFUKU);
- sub_8120760(taskId, r8, -1, GetMonData(&gPlayerParty[r8], MON_DATA_MAX_HP) / 5, sub_80E57E8);
+ PartyMenuModifyHP(taskId, r8, -1, GetMonData(&gPlayerParty[r8], MON_DATA_MAX_HP) / 5, sub_80E57E8);
}
}
}
@@ -66,46 +66,46 @@ void sub_80E5724(u8 taskId)
static void sub_80E57E8(u8 taskId)
{
PlaySE(SE_KAIFUKU);
- sub_8120760(taskId, gUnknown_203B0A0.unkA, 1, GetMonData(&gPlayerParty[gUnknown_203B0A0.unk9], MON_DATA_MAX_HP) / 5, sub_80E583C);
+ PartyMenuModifyHP(taskId, gPartyMenu.slotId2, 1, GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAX_HP) / 5, sub_80E583C);
}
static void sub_80E583C(u8 taskId)
{
- GetMonNickname(&gPlayerParty[gUnknown_203B0A0.unkA], gStringVar1);
- StringExpandPlaceholders(gStringVar4, gUnknown_8416F27);
- sub_81202F8(gStringVar4, 0);
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId2], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
+ DisplayPartyMenuMessage(gStringVar4, 0);
ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = sub_80E58A0;
}
static void sub_80E58A0(u8 taskId)
{
- if (sub_8120370() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- gUnknown_203B0A0.unkB = 0;
- sub_811F818(gUnknown_203B0A0.unk9, 0);
- gUnknown_203B0A0.unk9 = gUnknown_203B0A0.unkA;
- sub_811F818(gUnknown_203B0A0.unkA, 1);
+ gPartyMenu.action = 0;
+ AnimatePartySlot(gPartyMenu.slotId, 0);
+ gPartyMenu.slotId = gPartyMenu.slotId2;
+ AnimatePartySlot(gPartyMenu.slotId2, 1);
ClearStdWindowAndFrameToTransparent(6, 0);
ClearWindowTilemap(6);
- sub_8121D0C(0);
- gTasks[taskId].func = sub_811FB28;
+ DisplayPartyMenuStdMessage(0);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
}
static void sub_80E5900(u8 taskId)
{
- if (sub_8120370() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_8121D0C(5);
- gTasks[taskId].func = sub_811FB28;
+ DisplayPartyMenuStdMessage(5);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
}
static void sub_80E5934(u8 taskId)
{
PlaySE(SE_SELECT);
- sub_81202F8(gUnknown_84169F8, 0);
+ DisplayPartyMenuMessage(gUnknown_84169F8, 0);
ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = sub_80E5900;
}
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
index b6ea1daed..943d8504c 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -22,7 +22,7 @@ static void FailSweetScentEncounter(u8 taskId);
static void Unused_StartSweetscentFldeff(void)
{
- gUnknown_203B0A0.unk9 = 0;
+ gPartyMenu.slotId = 0;
FieldCallback_SweetScent();
}
diff --git a/src/item.c b/src/item.c
index 677c13ad7..e16d5055c 100644
--- a/src/item.c
+++ b/src/item.c
@@ -412,7 +412,7 @@ bool8 AddPCItem(u16 itemId, u16 count)
return TRUE;
}
-void RemoveItemFromPC(u16 itemId, u16 count)
+void RemovePCItem(u16 itemId, u16 count)
{
u32 i;
u16 quantity;
diff --git a/src/item_pc.c b/src/item_pc.c
index 60a74ac59..3e0c50b60 100644
--- a/src/item_pc.c
+++ b/src/item_pc.c
@@ -709,7 +709,7 @@ static void ItemPc_SetScrollPosition(void)
static void ItemPc_SetMessageWindowPalette(int a0)
{
- SetBgRectPal(1, 0, 14, 30, 6, a0 + 1);
+ SetBgTilemapPalette(1, 0, 14, 30, 6, a0 + 1);
ScheduleBgCopyTilemapToVram(1);
}
@@ -926,7 +926,7 @@ static void Task_ItemPcWaitButtonAndFinishWithdrawMultiple(u8 taskId)
{
PlaySE(SE_SELECT);
itemId = ItemPc_GetItemIdBySlotId(data[1]);
- RemoveItemFromPC(itemId, data[8]);
+ RemovePCItem(itemId, data[8]);
ItemPcCompaction();
Task_ItemPcCleanUpWithdraw(taskId);
}
@@ -1029,8 +1029,8 @@ static void Task_ItemPcGive(u8 taskId)
static void ItemPc_CB2_SwitchToPartyMenu(void)
{
- PartyMenuInit(0, 0, 6, 0, 6, sub_811FB28, ItemPc_CB2_ReturnFromPartyMenu);
- gUnknown_203B0A0.unkC = ItemPc_GetItemIdBySlotId(ItemPc_GetCursorPosition());
+ InitPartyMenu(0, 0, 6, 0, 6, Task_HandleChooseMonInput, ItemPc_CB2_ReturnFromPartyMenu);
+ gPartyMenu.bagItem = ItemPc_GetItemIdBySlotId(ItemPc_GetCursorPosition());
}
static void ItemPc_CB2_ReturnFromPartyMenu(void)
diff --git a/src/item_use.c b/src/item_use.c
index db0475370..256711463 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -44,37 +44,36 @@
#include "constants/songs.h"
#include "constants/map_types.h"
-EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL;
-
-void sub_80A1084(void);
-void sub_80A109C(u8 taskId);
-void sub_80A112C(u8 taskId);
-void sub_80A11C0(u8 taskId);
-bool8 sub_80A1194(void);
-void sub_80A1208(void);
-void ItemUseOnFieldCB_Bicycle(u8 taskId);
-bool8 ItemUseCheckFunc_Rod(void);
-void ItemUseOnFieldCB_Rod(u8 taskId);
-void FieldUseFunc_EvoItem(u8 taskId);
-void sub_80A1648(u8 taskId);
-void sub_80A1674(u8 taskId);
-void InitTMCaseFromBag(void);
-void Task_InitTMCaseFromField(u8 taskId);
-void InitBerryPouchFromBag(void);
-void Task_InitBerryPouchFromField(u8 taskId);
-void InitBerryPouchFromBattle(void);
-void InitTeachyTvFromBag(void);
-void Task_InitTeachyTvFromField(u8 taskId);
-void sub_80A19E8(u8 taskId);
-void sub_80A1A44(void);
-void sub_80A1B48(u8 taskId);
-void sub_80A1C08(u8 taskId);
-void sub_80A1CAC(void);
-void sub_80A1CC0(u8 taskId);
-void sub_80A1D58(void);
-void sub_80A1D68(u8 taskId);
-void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId);
-void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId);
+static EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL;
+
+static void sub_80A1084(void);
+static void sub_80A109C(u8 taskId);
+static void sub_80A112C(u8 taskId);
+static void sub_80A11C0(u8 taskId);
+static bool8 sub_80A1194(void);
+static void sub_80A1208(void);
+static void ItemUseOnFieldCB_Bicycle(u8 taskId);
+static bool8 ItemUseCheckFunc_Rod(void);
+static void ItemUseOnFieldCB_Rod(u8 taskId);
+static void sub_80A1648(u8 taskId);
+static void sub_80A1674(u8 taskId);
+static void InitTMCaseFromBag(void);
+static void Task_InitTMCaseFromField(u8 taskId);
+static void InitBerryPouchFromBag(void);
+static void Task_InitBerryPouchFromField(u8 taskId);
+static void InitBerryPouchFromBattle(void);
+static void InitTeachyTvFromBag(void);
+static void Task_InitTeachyTvFromField(u8 taskId);
+static void sub_80A19E8(u8 taskId);
+static void sub_80A1A44(void);
+static void sub_80A1B48(u8 taskId);
+static void sub_80A1C08(u8 taskId);
+static void sub_80A1CAC(void);
+static void sub_80A1CC0(u8 taskId);
+static void sub_80A1D58(void);
+static void sub_80A1D68(u8 taskId);
+static void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId);
+static void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId);
// No clue what this is
static const u8 sUnref_83E27B4[] = {
@@ -132,14 +131,14 @@ static const u8 sUnref_83E27B4[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
-void (*const gUnknown_83E2954[])(void) = {
- sub_8124C8C,
+static void (*const gUnknown_83E2954[])(void) = {
+ CB2_ShowPartyMenuForItemUse,
CB2_ReturnToField,
NULL,
NULL
};
-void sub_80A0FBC(u8 taskId)
+static void sub_80A0FBC(u8 taskId)
{
u8 itemType;
if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY)
@@ -160,7 +159,7 @@ void sub_80A0FBC(u8 taskId)
}
}
-void sub_80A103C(u8 taskId)
+static void sub_80A103C(u8 taskId)
{
if (gTasks[taskId].data[3] != 1)
{
@@ -171,21 +170,21 @@ void sub_80A103C(u8 taskId)
sItemUseOnFieldCB(taskId);
}
-void sub_80A1084(void)
+static void sub_80A1084(void)
{
sub_807DC00();
CreateTask(sub_80A109C, 8);
}
-void sub_80A109C(u8 taskId)
+static void sub_80A109C(u8 taskId)
{
- if (field_weather_is_fade_finished() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
sItemUseOnFieldCB(taskId);
}
}
-void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str)
+static void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str)
{
StringExpandPlaceholders(gStringVar4, str);
if (a1 == FALSE)
@@ -194,12 +193,12 @@ void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str)
DisplayItemMessageOnField(taskId, a2, gStringVar4, sub_80A112C);
}
-void sub_80A1110(u8 taskId, bool8 a1)
+static void sub_80A1110(u8 taskId, bool8 a1)
{
sub_80A10C4(taskId, a1, 4, gUnknown_8416425);
}
-void sub_80A112C(u8 taskId)
+static void sub_80A112C(u8 taskId)
{
ClearDialogWindowAndFrame(0, 1);
DestroyTask(taskId);
@@ -207,7 +206,7 @@ void sub_80A112C(u8 taskId)
ScriptContext2_Disable();
}
-u8 GetItemCompatibilityRule(u16 itemId)
+u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId)
{
if (ItemId_GetPocket(itemId) == POCKET_TM_CASE)
return 1;
@@ -217,12 +216,12 @@ u8 GetItemCompatibilityRule(u16 itemId)
return 0;
}
-void sub_80A1184(void)
+static void sub_80A1184(void)
{
gFieldCallback2 = sub_80A1194;
}
-bool8 sub_80A1194(void)
+static bool8 sub_80A1194(void)
{
FreezeEventObjects();
ScriptContext2_Enable();
@@ -232,9 +231,9 @@ bool8 sub_80A1194(void)
return TRUE;
}
-void sub_80A11C0(u8 taskId)
+static void sub_80A11C0(u8 taskId)
{
- if (field_weather_is_fade_finished() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
UnfreezeMapObjects();
ScriptContext2_Disable();
@@ -248,7 +247,7 @@ void FieldUseFunc_OrangeMail(u8 taskId)
ItemMenu_StartFadeToExitCallback(taskId);
}
-void sub_80A1208(void)
+static void sub_80A1208(void)
{
struct MailStruct mail;
@@ -279,7 +278,7 @@ void FieldUseFunc_MachBike(u8 taskId)
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
-void ItemUseOnFieldCB_Bicycle(u8 taskId)
+static void ItemUseOnFieldCB_Bicycle(u8 taskId)
{
if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
PlaySE(SE_JITENSYA);
@@ -300,7 +299,7 @@ void FieldUseFunc_OldRod(u8 taskId)
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
-bool8 ItemUseCheckFunc_Rod(void)
+static bool8 ItemUseCheckFunc_Rod(void)
{
s16 x, y;
u16 behavior;
@@ -327,7 +326,7 @@ bool8 ItemUseCheckFunc_Rod(void)
return FALSE;
}
-void ItemUseOnFieldCB_Rod(u8 taskId)
+static void ItemUseOnFieldCB_Rod(u8 taskId)
{
sub_805D2C0(ItemId_GetSecondaryId(gSpecialVar_ItemId));
DestroyTask(taskId);
@@ -391,13 +390,13 @@ void FieldUseFunc_PokeFlute(u8 taskId)
}
}
-void sub_80A1648(u8 taskId)
+static void sub_80A1648(u8 taskId)
{
PlayFanfareByFanfareNum(FANFARE_POKEFLUTE);
gTasks[taskId].func = sub_80A1674;
}
-void sub_80A1674(u8 taskId)
+static void sub_80A1674(u8 taskId)
{
if (WaitFanfare(FALSE))
{
@@ -408,44 +407,44 @@ void sub_80A1674(u8 taskId)
}
}
-void sub_80A16D0(u8 taskId)
+static void sub_80A16D0(u8 taskId)
{
sub_80A0FBC(taskId);
}
void FieldUseFunc_Medicine(u8 taskId)
{
- gUnknown_3005E98 = sub_81252D0;
+ gItemUseCB = ItemUseCB_Medicine;
sub_80A16D0(taskId);
}
void FieldUseFunc_Ether(u8 taskId)
{
- gUnknown_3005E98 = ItemUseCB_PpRestore;
+ gItemUseCB = ItemUseCB_PPRecovery;
sub_80A16D0(taskId);
}
void FieldUseFunc_PpUp(u8 taskId)
{
- gUnknown_3005E98 = dp05_pp_up;
+ gItemUseCB = ItemUseCB_PPUp;
sub_80A16D0(taskId);
}
void FieldUseFunc_RareCandy(u8 taskId)
{
- gUnknown_3005E98 = dp05_rare_candy;
+ gItemUseCB = ItemUseCB_RareCandy;
sub_80A16D0(taskId);
}
void FieldUseFunc_EvoItem(u8 taskId)
{
- gUnknown_3005E98 = sub_8126B60;
+ gItemUseCB = ItemUseCB_EvolutionStone;
sub_80A16D0(taskId);
}
void FieldUseFunc_SacredAsh(u8 taskId)
{
- gUnknown_3005E98 = sub_8126894;
+ gItemUseCB = ItemUseCB_SacredAsh;
sub_80A0FBC(taskId);
}
@@ -464,12 +463,12 @@ void FieldUseFunc_TmCase(u8 taskId)
}
}
-void InitTMCaseFromBag(void)
+static void InitTMCaseFromBag(void)
{
InitTMCase(0, CB2_BagMenuFromStartMenu, 0);
}
-void Task_InitTMCaseFromField(u8 taskId)
+static void Task_InitTMCaseFromField(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -495,12 +494,12 @@ void FieldUseFunc_BerryPouch(u8 taskId)
}
}
-void InitBerryPouchFromBag(void)
+static void InitBerryPouchFromBag(void)
{
InitBerryPouch(BERRYPOUCH_FROMFIELD, CB2_BagMenuFromStartMenu, 0);
}
-void Task_InitBerryPouchFromField(u8 taskId)
+static void Task_InitBerryPouchFromField(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -517,7 +516,7 @@ void BattleUseFunc_BerryPouch(u8 taskId)
ItemMenu_StartFadeToExitCallback(taskId);
}
-void InitBerryPouchFromBattle(void)
+static void InitBerryPouchFromBattle(void)
{
InitBerryPouch(BERRYPOUCH_FROMBATTLE, sub_8107ECC, 0);
}
@@ -538,12 +537,12 @@ void FieldUseFunc_TeachyTv(u8 taskId)
}
}
-void InitTeachyTvFromBag(void)
+static void InitTeachyTvFromBag(void)
{
InitTeachyTvController(0, CB2_BagMenuFromStartMenu);
}
-void Task_InitTeachyTvFromField(u8 taskId)
+static void Task_InitTeachyTvFromField(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -566,7 +565,7 @@ void FieldUseFunc_SuperRepel(u8 taskId)
DisplayItemMessageInBag(taskId, 2, gUnknown_841659E, sub_810A1F8);
}
-void sub_80A19E8(u8 taskId)
+static void sub_80A19E8(u8 taskId)
{
if (!IsSEPlaying())
{
@@ -577,7 +576,7 @@ void sub_80A19E8(u8 taskId)
}
}
-void sub_80A1A44(void)
+static void sub_80A1A44(void)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
sub_8108DC8(ItemId_GetPocket(gSpecialVar_ItemId));
@@ -609,7 +608,7 @@ void FieldUseFunc_BlackFlute(u8 taskId)
}
}
-void sub_80A1B48(u8 taskId)
+static void sub_80A1B48(u8 taskId)
{
if (++gTasks[taskId].data[8] > 7)
{
@@ -638,7 +637,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId)
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
-void sub_80A1C08(u8 taskId)
+static void sub_80A1C08(u8 taskId)
{
Overworld_ResetStateAfterDigEscRope();
sub_80A1A44();
@@ -668,12 +667,12 @@ void FieldUseFunc_TownMap(u8 taskId)
}
}
-void sub_80A1CAC(void)
+static void sub_80A1CAC(void)
{
sub_80BFF50(0, CB2_BagMenuFromStartMenu);
}
-void sub_80A1CC0(u8 taskId)
+static void sub_80A1CC0(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -700,12 +699,12 @@ void FieldUseFunc_FameChecker(u8 taskId)
}
}
-void sub_80A1D58(void)
+static void sub_80A1D58(void)
{
UseFameChecker(CB2_BagMenuFromStartMenu);
}
-void sub_80A1D68(u8 taskId)
+static void sub_80A1D68(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -765,7 +764,7 @@ void BattleUseFunc_GuardSpec(u8 taskId)
{
if (ExecuteTableBasedItemEffect(&gPlayerParty[gBattlerPartyIndexes[gBattlerInMenuId]], gSpecialVar_ItemId, gBattlerPartyIndexes[gBattlerInMenuId], 0))
{
- DisplayItemMessageInBag(taskId, 2, gUnknown_84169DC, sub_810A1F8);
+ DisplayItemMessageInBag(taskId, 2, gText_WontHaveEffect, sub_810A1F8);
}
else
{
@@ -774,7 +773,7 @@ void BattleUseFunc_GuardSpec(u8 taskId)
}
}
-void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId)
+static void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId)
{
s16 * data = gTasks[taskId].data;
@@ -787,7 +786,7 @@ void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId)
}
}
-void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId)
+static void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId)
{
if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
@@ -796,7 +795,7 @@ void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId)
}
}
-void ItemUse_SwitchToPartyMenuInBattle(u8 taskId)
+static void ItemUse_SwitchToPartyMenuInBattle(u8 taskId)
{
if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
{
@@ -812,19 +811,19 @@ void ItemUse_SwitchToPartyMenuInBattle(u8 taskId)
void BattleUseFunc_Medicine(u8 taskId)
{
- gUnknown_3005E98 = ItemUseCB_Medicine;
+ gItemUseCB = ItemUseCB_MedicineStep;
ItemUse_SwitchToPartyMenuInBattle(taskId);
}
-void sub_80A1FD8(u8 taskId)
+static void sub_80A1FD8(u8 taskId)
{
- gUnknown_3005E98 = sub_8126894;
+ gItemUseCB = ItemUseCB_SacredAsh;
ItemUse_SwitchToPartyMenuInBattle(taskId);
}
void BattleUseFunc_Ether(u8 taskId)
{
- gUnknown_3005E98 = ItemUseCB_PpRestore;
+ gItemUseCB = ItemUseCB_PPRecovery;
ItemUse_SwitchToPartyMenuInBattle(taskId);
}
diff --git a/src/list_menu.c b/src/list_menu.c
index d25eb3faf..484da31ad 100644
--- a/src/list_menu.c
+++ b/src/list_menu.c
@@ -70,7 +70,7 @@ static EWRAM_DATA struct MysteryGiftLinkMenuStruct sMysteryGiftLinkMenu = {0};
struct ListMenuOverride gListMenuOverride;
struct ListMenuTemplate gMultiuseListMenuTemplate;
-static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
+static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove);
static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown);
static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count);
static void ListMenuDrawCursor(struct ListMenu *list);
@@ -172,18 +172,18 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str
return LIST_NOTHING_CHOSEN;
}
-u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
+u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove)
{
- u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow);
+ u8 taskId = ListMenuInitInternal(listMenuTemplate, cursorPos, itemsAbove);
PutWindowTilemap(listMenuTemplate->windowId);
CopyWindowToVram(listMenuTemplate->windowId, 2);
return taskId;
}
-u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 scrollOffset, u16 selectedRow)
+u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 cursorPos, u16 itemsAbove)
{
s32 i;
- u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow);
+ u8 taskId = ListMenuInitInternal(listMenuTemplate, cursorPos, itemsAbove);
for (i = 0; rect[i].palNum != 0xFF; i++)
PutWindowRectTilemapOverridePalette(listMenuTemplate->windowId, rect[i].x, rect[i].y, rect[i].width, rect[i].height, rect[i].palNum);
@@ -197,7 +197,7 @@ s32 ListMenu_ProcessInput(u8 listTaskId)
if (JOY_NEW(A_BUTTON))
{
- return list->template.items[list->scrollOffset + list->selectedRow].index;
+ return list->template.items[list->cursorPos + list->itemsAbove].index;
}
else if (JOY_NEW(B_BUTTON))
{
@@ -249,14 +249,14 @@ s32 ListMenu_ProcessInput(u8 listTaskId)
}
}
-void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
+void DestroyListMenuTask(u8 listTaskId, u16 *cursorPos, u16 *itemsAbove)
{
struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data;
- if (scrollOffset != NULL)
- *scrollOffset = list->scrollOffset;
- if (selectedRow != NULL)
- *selectedRow = list->selectedRow;
+ if (cursorPos != NULL)
+ *cursorPos = list->cursorPos;
+ if (itemsAbove != NULL)
+ *itemsAbove = list->itemsAbove;
if (list->taskId != TASK_NONE)
ListMenuRemoveCursorObject(list->taskId, list->template.cursorKind - 2);
@@ -269,7 +269,7 @@ void RedrawListMenu(u8 listTaskId)
struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data;
FillWindowPixelBuffer(list->template.windowId, PIXEL_FILL(list->template.fillValue));
- ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
+ ListMenuPrintEntries(list, list->cursorPos, 0, list->template.maxShowed);
ListMenuDrawCursor(list);
CopyWindowToVram(list->template.windowId, 2);
}
@@ -291,13 +291,13 @@ static void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y)
SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP, y);
}
-static s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow)
+static s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 cursorPos, u32 itemsAbove, u16 keys, u16 *newCursorPos, u16 *newItemsAbove)
{
struct ListMenu list;
list.template = *template;
- list.scrollOffset = scrollOffset;
- list.selectedRow = selectedRow;
+ list.cursorPos = cursorPos;
+ list.itemsAbove = itemsAbove;
list.unk_1C = 0;
list.unk_1D = 0;
if (keys == DPAD_UP)
@@ -305,10 +305,10 @@ static s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset
if (keys == DPAD_DOWN)
ListMenuChangeSelection(&list, FALSE, 1, TRUE);
- if (newScrollOffset != NULL)
- *newScrollOffset = list.scrollOffset;
- if (newSelectedRow != NULL)
- *newSelectedRow = list.selectedRow;
+ if (newCursorPos != NULL)
+ *newCursorPos = list.cursorPos;
+ if (newItemsAbove != NULL)
+ *newItemsAbove = list.itemsAbove;
return LIST_NOTHING_CHOSEN;
}
@@ -317,17 +317,17 @@ static void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId)
struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data;
if (arrayId != NULL)
- *arrayId = list->scrollOffset + list->selectedRow;
+ *arrayId = list->cursorPos + list->itemsAbove;
}
-void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
+void ListMenuGetScrollAndRow(u8 listTaskId, u16 *cursorPos, u16 *itemsAbove)
{
struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data;
- if (scrollOffset != NULL)
- *scrollOffset = list->scrollOffset;
- if (selectedRow != NULL)
- *selectedRow = list->selectedRow;
+ if (cursorPos != NULL)
+ *cursorPos = list->cursorPos;
+ if (itemsAbove != NULL)
+ *itemsAbove = list->itemsAbove;
}
u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId)
@@ -335,17 +335,17 @@ u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId)
struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data;
u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding;
- return list->selectedRow * yMultiplier + list->template.upText_Y;
+ return list->itemsAbove * yMultiplier + list->template.upText_Y;
}
-static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
+static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove)
{
u8 listTaskId = CreateTask(ListMenuDummyTask, 0);
struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data;
list->template = *listMenuTemplate;
- list->scrollOffset = scrollOffset;
- list->selectedRow = selectedRow;
+ list->cursorPos = cursorPos;
+ list->itemsAbove = itemsAbove;
list->unk_1C = 0;
list->unk_1D = 0;
list->taskId = TASK_NONE;
@@ -359,7 +359,7 @@ static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 sc
if (list->template.totalItems < list->template.maxShowed)
list->template.maxShowed = list->template.totalItems;
FillWindowPixelBuffer(list->template.windowId, PIXEL_FILL(list->template.fillValue));
- ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
+ ListMenuPrintEntries(list, list->cursorPos, 0, list->template.maxShowed);
ListMenuDrawCursor(list);
ListMenuCallSelectionChangedCallback(list, TRUE);
@@ -410,7 +410,7 @@ static void ListMenuDrawCursor(struct ListMenu *list)
{
u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding;
u8 x = list->template.cursor_X;
- u8 y = list->selectedRow * yMultiplier + list->template.upText_Y;
+ u8 y = list->itemsAbove * yMultiplier + list->template.upText_Y;
switch (list->template.cursorKind)
{
@@ -446,7 +446,7 @@ static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind)
return ListMenuAddCursorObjectInternal(&cursor, cursorKind);
}
-static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow)
+static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 itemsAbove)
{
u8 cursorKind = list->template.cursorKind;
if (cursorKind == 0)
@@ -457,7 +457,7 @@ static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow)
FillWindowPixelRect(list->template.windowId,
PIXEL_FILL(list->template.fillValue),
list->template.cursor_X,
- selectedRow * yMultiplier + list->template.upText_Y,
+ itemsAbove * yMultiplier + list->template.upText_Y,
width,
height);
}
@@ -465,8 +465,8 @@ static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow)
static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, bool8 movingDown)
{
- u16 selectedRow = list->selectedRow;
- u16 scrollOffset = list->scrollOffset;
+ u16 itemsAbove = list->itemsAbove;
+ u16 cursorPos = list->cursorPos;
u16 newRow;
u32 newScroll;
@@ -477,14 +477,14 @@ static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, b
else
newRow = list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1;
- if (scrollOffset == 0)
+ if (cursorPos == 0)
{
- while (selectedRow != 0)
+ while (itemsAbove != 0)
{
- selectedRow--;
- if (list->template.items[scrollOffset + selectedRow].index != LIST_HEADER)
+ itemsAbove--;
+ if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER)
{
- list->selectedRow = selectedRow;
+ list->itemsAbove = itemsAbove;
return 1;
}
}
@@ -492,16 +492,16 @@ static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, b
}
else
{
- while (selectedRow > newRow)
+ while (itemsAbove > newRow)
{
- selectedRow--;
- if (list->template.items[scrollOffset + selectedRow].index != LIST_HEADER)
+ itemsAbove--;
+ if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER)
{
- list->selectedRow = selectedRow;
+ list->itemsAbove = itemsAbove;
return 1;
}
}
- newScroll = scrollOffset - 1;
+ newScroll = cursorPos - 1;
}
}
else
@@ -511,14 +511,14 @@ static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, b
else
newRow = ((list->template.maxShowed / 2) + (list->template.maxShowed % 2));
- if (scrollOffset == list->template.totalItems - list->template.maxShowed)
+ if (cursorPos == list->template.totalItems - list->template.maxShowed)
{
- while (selectedRow < list->template.maxShowed - 1)
+ while (itemsAbove < list->template.maxShowed - 1)
{
- selectedRow++;
- if (list->template.items[scrollOffset + selectedRow].index != LIST_HEADER)
+ itemsAbove++;
+ if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER)
{
- list->selectedRow = selectedRow;
+ list->itemsAbove = itemsAbove;
return 1;
}
}
@@ -526,20 +526,20 @@ static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, b
}
else
{
- while (selectedRow < newRow)
+ while (itemsAbove < newRow)
{
- selectedRow++;
- if (list->template.items[scrollOffset + selectedRow].index != LIST_HEADER)
+ itemsAbove++;
+ if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER)
{
- list->selectedRow = selectedRow;
+ list->itemsAbove = itemsAbove;
return 1;
}
}
- newScroll = scrollOffset + 1;
+ newScroll = cursorPos + 1;
}
}
- list->selectedRow = newRow;
- list->scrollOffset = newScroll;
+ list->itemsAbove = newRow;
+ list->cursorPos = newScroll;
return 2;
}
@@ -548,7 +548,7 @@ static void ListMenuScroll(struct ListMenu *list, u8 count, bool8 movingDown)
if (count >= list->template.maxShowed)
{
FillWindowPixelBuffer(list->template.windowId, PIXEL_FILL(list->template.fillValue));
- ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
+ ListMenuPrintEntries(list, list->cursorPos, 0, list->template.maxShowed);
}
else
{
@@ -559,7 +559,7 @@ static void ListMenuScroll(struct ListMenu *list, u8 count, bool8 movingDown)
u16 y, width, height;
ScrollWindow(list->template.windowId, 1, count * yMultiplier, PIXEL_FILL(list->template.fillValue));
- ListMenuPrintEntries(list, list->scrollOffset, 0, count);
+ ListMenuPrintEntries(list, list->cursorPos, 0, count);
y = (list->template.maxShowed * yMultiplier) + list->template.upText_Y;
width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8;
@@ -573,7 +573,7 @@ static void ListMenuScroll(struct ListMenu *list, u8 count, bool8 movingDown)
u16 width;
ScrollWindow(list->template.windowId, 0, count * yMultiplier, PIXEL_FILL(list->template.fillValue));
- ListMenuPrintEntries(list, list->scrollOffset + (list->template.maxShowed - count), list->template.maxShowed - count, count);
+ ListMenuPrintEntries(list, list->cursorPos + (list->template.maxShowed - count), list->template.maxShowed - count, count);
width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8;
FillWindowPixelRect(list->template.windowId,
@@ -588,7 +588,7 @@ static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAn
u16 oldSelectedRow;
u8 selectionChange, i, cursorCount;
- oldSelectedRow = list->selectedRow;
+ oldSelectedRow = list->itemsAbove;
cursorCount = 0;
selectionChange = 0;
for (i = 0; i < count; i++)
@@ -602,7 +602,7 @@ static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAn
break;
cursorCount++;
}
- while (list->template.items[list->scrollOffset + list->selectedRow].index == LIST_HEADER);
+ while (list->template.items[list->cursorPos + list->itemsAbove].index == LIST_HEADER);
}
if (updateCursorAndCallCallback)
@@ -634,7 +634,7 @@ static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAn
static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 onInit)
{
if (list->template.moveCursorFunc != NULL)
- list->template.moveCursorFunc(list->template.items[list->scrollOffset + list->selectedRow].index, onInit, list);
+ list->template.moveCursorFunc(list->template.items[list->cursorPos + list->itemsAbove].index, onInit, list);
}
void ListMenuOverrideSetColors(u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
diff --git a/src/mailbox_pc.c b/src/mailbox_pc.c
index 0a4535271..5489c4c4e 100644
--- a/src/mailbox_pc.c
+++ b/src/mailbox_pc.c
@@ -123,7 +123,7 @@ u8 MailboxPC_InitListMenu(struct PlayerPCItemPageStruct * playerPcStruct)
gMultiuseListMenuTemplate.itemPrintFunc = ItemPrintFunc;
gMultiuseListMenuTemplate.cursorKind = 0;
gMultiuseListMenuTemplate.scrollMultiple = 0;
- return ListMenuInit(&gMultiuseListMenuTemplate, playerPcStruct->scrollOffset, playerPcStruct->selectedRow);
+ return ListMenuInit(&gMultiuseListMenuTemplate, playerPcStruct->itemsAbove, playerPcStruct->cursorPos);
}
static void MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * list)
@@ -134,7 +134,7 @@ static void MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * list)
void MailboxPC_AddScrollIndicatorArrows(struct PlayerPCItemPageStruct * playerPcStruct)
{
- playerPcStruct->scrollIndicatorId = AddScrollIndicatorArrowPairParameterized(2, 0xC2, 0xC, 0x94, playerPcStruct->count - playerPcStruct->pageItems + 1, 110, 110, &playerPcStruct->scrollOffset);
+ playerPcStruct->scrollIndicatorId = AddScrollIndicatorArrowPairParameterized(2, 0xC2, 0xC, 0x94, playerPcStruct->count - playerPcStruct->pageItems + 1, 110, 110, &playerPcStruct->itemsAbove);
}
void MailboxPC_DestroyListMenuBuffer(void)
diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c
index c465a5683..0747e8ade 100644
--- a/src/map_preview_screen.c
+++ b/src/map_preview_screen.c
@@ -495,7 +495,7 @@ static void sub_80F83D0(u8 taskId)
}
break;
case 2:
- if (field_weather_is_fade_finished())
+ if (IsWeatherNotFadingIn())
{
Overworld_PlaySpecialMapMusic();
data[0]++;
diff --git a/src/menu.c b/src/menu.c
index b8a68145c..5a0da28b9 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -815,13 +815,13 @@ static s8 sub_81106F4(void)
MultichoiceGrid_MoveCursor(0, 1);
return MENU_NOTHING_CHOSEN;
}
- else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || sub_80BF66C() == 1)
+ else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1)
{
PlaySE(SE_SELECT);
MultichoiceGrid_MoveCursor(-1, 0);
return MENU_NOTHING_CHOSEN;
}
- else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || sub_80BF66C() == 2)
+ else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2)
{
PlaySE(SE_SELECT);
MultichoiceGrid_MoveCursor(1, 0);
@@ -857,13 +857,13 @@ static s8 sub_81107A0(void)
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
- else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || sub_80BF66C() == 1)
+ else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1)
{
if (oldPos != MultichoiceGrid_MoveCursorIfValid(-1, 0))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
- else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || sub_80BF66C() == 2)
+ else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2)
{
if (oldPos != MultichoiceGrid_MoveCursorIfValid(1, 0))
PlaySE(SE_SELECT);
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index f17bff0d0..905e3c1ea 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -83,7 +83,7 @@ u8 GetLRKeysState(void)
return 0;
}
-u8 sub_80BF66C(void)
+u8 GetLRKeysPressedAndHeld(void)
{
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
{
@@ -149,7 +149,7 @@ void SetVBlankHBlankCallbacksToNull(void)
SetHBlankCallback(NULL);
}
-void ClearVramOamPltt(void)
+void ResetVramOamAndBgCntRegs(void)
{
ResetAllBgsCoordinatesAndBgCntRegs();
CpuFill16(0, (void*) VRAM, VRAM_SIZE);
diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c
index f879e6810..d2421ed9f 100644
--- a/src/new_menu_helpers.c
+++ b/src/new_menu_helpers.c
@@ -343,7 +343,7 @@ static u16 CopyDecompressedTileDataToVram(u8 bgId, const void *src, u16 size, u1
return LoadBgTilemap(bgId, src, size, offset);
}
-void SetBgRectPal(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette)
+void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette)
{
u8 i, j;
u16 *ptr = GetBgTilemapBuffer(bgId);
@@ -357,7 +357,7 @@ void SetBgRectPal(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette)
}
}
-void CopyRectIntoAltRect(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height)
+void CopyToBufferFromBgTilemap(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height)
{
u8 i,j;
const u16 *src = GetBgTilemapBuffer(bgId);
diff --git a/src/option_menu.c b/src/option_menu.c
index 35fe957be..5453dfa9e 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -206,7 +206,7 @@ void CB2_OptionsMenuFromStartMenu(void)
u8 i;
if (gMain.savedCallback == NULL)
- gMain.savedCallback = CB2_ReturnToStartMenu;
+ gMain.savedCallback = CB2_ReturnToFieldWithOpenMenu;
sOptionMenuPtr = AllocZeroed(sizeof(struct OptionMenu));
sOptionMenuPtr->state3 = 0;
sOptionMenuPtr->state2 = 0;
diff --git a/src/party_menu.c b/src/party_menu.c
new file mode 100644
index 000000000..399794b2d
--- /dev/null
+++ b/src/party_menu.c
@@ -0,0 +1,6381 @@
+#include "global.h"
+#include "malloc.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_gfx_sfx_util.h"
+#include "battle_interface.h"
+#include "battle_tower.h"
+#include "berry_pouch.h"
+#include "bg.h"
+#include "data.h"
+#include "decompress.h"
+#include "easy_chat.h"
+#include "event_data.h"
+#include "evolution_scene.h"
+#include "field_control_avatar.h"
+#include "field_effect.h"
+#include "field_player_avatar.h"
+#include "field_screen_effect.h"
+#include "field_specials.h"
+#include "field_weather.h"
+#include "fieldmap.h"
+#include "fldeff.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "help_system.h"
+#include "item.h"
+#include "item_menu.h"
+#include "item_use.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "load_save.h"
+#include "mail.h"
+#include "mail_data.h"
+#include "main.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "new_menu_helpers.h"
+#include "metatile_behavior.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "player_pc.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "pokemon_icon.h"
+#include "pokemon_jump.h"
+#include "pokemon_special_anim.h"
+#include "pokemon_storage_system.h"
+#include "pokemon_summary_screen.h"
+#include "quest_log.h"
+#include "region_map.h"
+#include "reshow_battle_screen.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "start_menu.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "teachy_tv.h"
+#include "text.h"
+#include "text_window.h"
+#include "tm_case.h"
+#include "trade.h"
+#include "union_room.h"
+#include "window.h"
+#include "constants/battle.h"
+#include "constants/easy_chat.h"
+#include "constants/field_effects.h"
+#include "constants/flags.h"
+#include "constants/item_effects.h"
+#include "constants/items.h"
+#include "constants/maps.h"
+#include "constants/moves.h"
+#include "constants/pokemon.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+#include "constants/vars.h"
+
+#define PARTY_PAL_SELECTED (1 << 0)
+#define PARTY_PAL_FAINTED (1 << 1)
+#define PARTY_PAL_TO_SWITCH (1 << 2)
+#define PARTY_PAL_MULTI_ALT (1 << 3)
+#define PARTY_PAL_SWITCHING (1 << 4)
+#define PARTY_PAL_TO_SOFTBOIL (1 << 5)
+#define PARTY_PAL_NO_MON (1 << 6)
+#define PARTY_PAL_UNUSED (1 << 7)
+
+#define MENU_DIR_DOWN 1
+#define MENU_DIR_UP -1
+#define MENU_DIR_RIGHT 2
+#define MENU_DIR_LEFT -2
+
+enum
+{
+ CAN_LEARN_MOVE,
+ CANNOT_LEARN_MOVE,
+ ALREADY_KNOWS_MOVE,
+ CANNOT_LEARN_MOVE_IS_EGG
+};
+
+struct PartyMenuBoxInfoRects
+{
+ void (*blitFunc)(u8 windowId, u8 x, u8 y, u8 width, u8 height, bool8 isEgg);
+ u8 dimensions[24];
+ u8 descTextLeft;
+ u8 descTextTop;
+ u8 descTextWidth;
+ u8 descTextHeight;
+};
+
+struct PartyMenuInternal
+{
+ TaskFunc task;
+ MainCallback exitCallback;
+ u32 chooseHalf:1;
+ u32 lastSelectedSlot:3; // Used to return to same slot when going left/right bewtween columns
+ u32 spriteIdConfirmPokeball:7;
+ u32 spriteIdCancelPokeball:7;
+ u32 messageId:14;
+ u8 windowId[3];
+ u8 actions[8];
+ u8 numActions;
+ u16 palBuffer[BG_PLTT_SIZE / sizeof(u16)];
+ s16 data[16];
+};
+
+struct PartyMenuBox
+{
+ const struct PartyMenuBoxInfoRects *infoRects;
+ const u8 *spriteCoords;
+ u8 windowId;
+ u8 monSpriteId;
+ u8 itemSpriteId;
+ u8 pokeballSpriteId;
+ u8 statusSpriteId;
+};
+
+static void BlitBitmapToPartyWindow_LeftColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, bool8 isEgg);
+static void BlitBitmapToPartyWindow_RightColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, bool8 isEgg);
+static void CursorCB_Summary(u8 taskId);
+static void CursorCB_Switch(u8 taskId);
+static void CursorCB_Cancel1(u8 taskId);
+static void CursorCB_Item(u8 taskId);
+static void CursorCB_Give(u8 taskId);
+static void CursorCB_TakeItem(u8 taskId);
+static void CursorCB_Mail(u8 taskId);
+static void CursorCB_Read(u8 taskId);
+static void CursorCB_TakeMail(u8 taskId);
+static void CursorCB_Cancel2(u8 taskId);
+static void CursorCB_SendMon(u8 taskId);
+static void CursorCB_Enter(u8 taskId);
+static void CursorCB_NoEntry(u8 taskId);
+static void CursorCB_Store(u8 taskId);
+static void CursorCB_Register(u8 taskId);
+static void CursorCB_Trade1(u8 taskId);
+static void CursorCB_Trade2(u8 taskId);
+static void CursorCB_FieldMove(u8 taskId);
+static bool8 SetUpFieldMove_Fly(void);
+static bool8 SetUpFieldMove_Waterfall(void);
+static bool8 SetUpFieldMove_Surf(void);
+static void CB2_InitPartyMenu(void);
+static void ResetPartyMenu(void);
+static bool8 ShowPartyMenu(void);
+static void SetPartyMonsAllowedInMinigame(void);
+static void ExitPartyMenu(void);
+static bool8 CreatePartyMonSpritesLoop(void);
+static bool8 AllocPartyMenuBg(void);
+static bool8 AllocPartyMenuBgGfx(void);
+static void InitPartyMenuWindows(u8 layout);
+static void InitPartyMenuBoxes(u8 layout);
+static void LoadPartyMenuPokeballGfx(void);
+static void LoadPartyMenuAilmentGfx(void);
+static bool8 RenderPartyMenuBoxes(void);
+static void CreateCancelConfirmPokeballSprites(void);
+static void CreateCancelConfirmWindows(bool8 chooseHalf);
+static void Task_ExitPartyMenu(u8 taskId);
+static void FreePartyPointers(void);
+static void PartyPaletteBufferCopy(u8 offset);
+static void DisplayPartyPokemonDataForMultiBattle(u8 slot);
+static void DisplayPartyPokemonDataForChooseHalf(u8 slot);
+static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot);
+static void DisplayPartyPokemonData(u8 slot);
+static void DisplayPartyPokemonDataForWirelessMinigame(u8 slot);
+static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags);
+static void DrawEmptySlot(u8 windowId);
+static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+static void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+static void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+static void DisplayPartyPokemonDescriptionText(u8 stringId, struct PartyMenuBox *menuBox, u8 c);
+static bool8 GetBattleEntryEligibility(struct Pokemon *mon);
+static bool8 IsMonAllowedInMinigame(u8 slot);
+static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor);
+static u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor);
+static void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, const u8 *align);
+static void DisplayPartyPokemonLevel(u8 level, struct PartyMenuBox *menuBox);
+static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox);
+static void DisplayPartyPokemonHP(u16 hp, struct PartyMenuBox *menuBox);
+static void DisplayPartyPokemonMaxHP(u16 maxhp, struct PartyMenuBox *menuBox);
+static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox);
+static void CreatePartyMonIconSpriteParameterized(u16 species, u32 pid, struct PartyMenuBox *menuBox, u8 priority, bool32 handleDeoxys);
+static void CreatePartyMonHeldItemSpriteParameterized(u16 species, u16 item, struct PartyMenuBox *menuBox);
+static void CreatePartyMonPokeballSpriteParameterized(u16 species, struct PartyMenuBox *menuBox);
+static void CreatePartyMonStatusSpriteParameterized(u16 species, u8 status, struct PartyMenuBox *menuBox);
+static void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox, u32 slot);
+static void CreatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+static void CreatePartyMonPokeballSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+static void CreatePartyMonStatusSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+static void CreateCancelConfirmPokeballSprites(void);
+static void DrawCancelConfirmButtons(void);
+static u8 CreatePokeballButtonSprite(u8 x, u8 y);
+static u8 CreateSmallPokeballButtonSprite(u8 x, u8 y);
+static u8 GetPartyBoxPaletteFlags(u8 slot, u8 animNum);
+static void AnimateSelectedPartyIcon(u8 spriteId, u8 animNum);
+static void PartyMenuStartSpriteAnim(u8 spriteId, u8 animNum);
+static void Task_ClosePartyMenuAndSetCB2(u8 taskId);
+static void UpdatePartyToFieldOrder(void);
+static s8 *GetCurrentPartySlotPtr(void);
+static u16 PartyMenuButtonHandler(s8 *slotPtr);
+static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr);
+static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr);
+static void MoveCursorToConfirm(void);
+static bool8 IsSelectedMonNotEgg(u8 *slotPtr);
+static void TryTutorSelectedMon(u8 taskId);
+static void TryGiveMailToSelectedMon(u8 taskId);
+static void SwitchSelectedMons(u8 taskId);
+static void TryEnterMonForMinigame(u8 taskId, u8 slot);
+static void Task_TryCreateSelectionWindow(u8 taskId);
+static void TryGiveItemOrMailToSelectedMon(u8 taskId);
+static void PartyMenuRemoveWindow(u8 *ptr);
+static void CB2_SetUpExitToBattleScreen(void);
+static void Task_ClosePartyMenuAfterText(u8 taskId);
+static void FinishTwoMonAction(u8 taskId);
+static void CancelParticipationPrompt(u8 taskId);
+static void DisplayCancelChooseMonYesNo(u8 taskId);
+static void Task_CancelChooseMonYesNo(u8 taskId);
+static void Task_HandleCancelChooseMonYesNoInput(u8 taskId);
+static void PartyMenuDisplayYesNoMenu(void);
+static void Task_ReturnToChooseMonAfterText(u8 taskId);
+static void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir);
+static void UpdatePartySelectionSingleLayout(s8 *slotPtr, s8 movementDir);
+static void UpdatePartySelectionDoubleLayout(s8 *slotPtr, s8 movementDir);
+static s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir);
+static void Task_PrintAndWaitForText(u8 taskId);
+static void PartyMenuPrintText(const u8 *text);
+static void sub_8124B60(struct Pokemon *mon, u16 item, u16 item2);
+static bool16 IsMonAllowedInPokemonJump(struct Pokemon *mon);
+static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *mon);
+static void Task_CancelParticipationYesNo(u8 taskId);
+static void Task_HandleCancelParticipationYesNoInput(u8 taskId);
+static void Task_TryCreateSelectionWindow(u8 taskId);
+static u16 GetTutorMove(u8 tutor);
+static bool8 CanLearnTutorMove(u16 species, u8 tutor);
+static void CreateSelectionWindow(void);
+static bool8 ShouldUseChooseMonText(void);
+static void UpdatePartyMonHPBar(u8 spriteId, struct Pokemon *mon);
+static void SpriteCB_UpdatePartyMonIcon(struct Sprite *sprite);
+static void SpriteCB_BouncePartyMonIcon(struct Sprite *sprite);
+static void SpriteCB_HeldItem(struct Sprite *sprite);
+static void UpdatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+static void ShowOrHideHeldItemSprite(u16 item, struct PartyMenuBox *menuBox);
+static void CreateHeldItemSpriteForTrade(u8 spriteId, bool8 isMail);
+static void SetPartyMonAilmentGfx(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+static void UpdatePartyMonAilmentGfx(u8 status, struct PartyMenuBox *menuBox);
+static void SetPartyMonFieldSelectionActions(struct Pokemon *mons, u8 slotId);
+static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon *mon);
+static u8 GetPartySlotEntryStatus(s8 slot);
+static void Task_HandleSelectionMenuInput(u8 taskId);
+static void CB2_ShowPokemonSummaryScreen(void);
+static void CB2_ReturnToPartyMenuFromSummaryScreen(void);
+static void UpdatePartyToBattleOrder(void);
+static void SlidePartyMenuBoxOneStep(u8 taskId);
+static void Task_SlideSelectedSlotsOffscreen(u8 taskId);
+static void SwitchPartyMon(void);
+static void Task_SlideSelectedSlotsOnscreen(u8 taskId);
+static void CB2_WriteMailToGiveMon(void);
+static void Task_SwitchHoldItemsPrompt(u8 taskId);
+static void Task_GiveHoldItem(u8 taskId);
+static void Task_UpdateHeldItemSprite(u8 taskId);
+static void Task_HandleSwitchItemsYesNoInput(u8 taskId);
+static void Task_SwitchItemsYesNo(u8 taskId);
+static void Task_WriteMailToGiveMonAfterText(u8 taskId);
+static void CB2_ReturnToPartyMenuFromWritingMail(void);
+static void CB2_ReturnToPartyMenuFromWritingMail(void);
+static void Task_DisplayGaveMailFromPartyMessage(u8 taskId);
+static void CB2_ReadHeldMail(void);
+static void CB2_ReturnToPartyMenuFromReadingMail(void);
+static void Task_SendMailToPCYesNo(u8 taskId);
+static void Task_HandleSendMailToPCYesNoInput(u8 taskId);
+static void Task_LoseMailMessageYesNo(u8 taskId);
+static void Task_HandleLoseMailMessageYesNoInput(u8 taskId);
+static bool8 TrySwitchInPokemon(void);
+static void DisplayCantUseFlashMessage(void);
+static void DisplayCantUseSurfMessage(void);
+static void Task_CancelAfterAorBPress(u8 taskId);
+static void DisplayFieldMoveExitAreaMessage(u8 taskId);
+static void Task_FieldMoveExitAreaYesNo(u8 taskId);
+static void Task_HandleFieldMoveExitAreaYesNoInput(u8 taskId);
+static void Task_FieldMoveWaitForFade(u8 taskId);
+static u16 GetFieldMoveMonSpecies(void);
+static u8 GetPartyLayoutFromBattleType(void);
+static void Task_SetSacredAshCB(u8 taskId);
+static void CB2_ReturnToBagMenu(void);
+static u8 GetPartyIdFromBattleSlot(u8 slot);
+static void Task_DisplayHPRestoredMessage(u8 taskId);
+static void SetSelectedMoveForPPItem(u8 taskId);
+static void ReturnToUseOnWhichMon(u8 taskId);
+static void TryUsePPItem(u8 taskId);
+static void ItemUseCB_LearnedMove(u8 taskId, UNUSED TaskFunc func);
+static void Task_LearnedMove(u8 taskId);
+static void Task_ReplaceMoveYesNo(u8 taskId);
+static void Task_DoLearnedMoveFanfareAfterText(u8 taskId);
+static void Task_TryLearningNextMove(u8 taskId);
+static void Task_LearnNextMoveOrClosePartyMenu(u8 taskId);
+static void Task_HandleReplaceMoveYesNoInput(u8 taskId);
+static void StopLearningMovePrompt(u8 taskId);
+static void Task_ShowSummaryScreenToForgetMove(u8 taskId);
+static void CB2_ShowSummaryScreenToForgetMove(void);
+static void CB2_ReturnToPartyMenuWhileLearningMove(void);
+static void Task_ReturnToPartyMenuWhileLearningMove(u8 taskId);
+static void DisplayPartyMenuForgotMoveMessage(u8 taskId);
+static void Task_PartyMenuReplaceMove(u8 taskId);
+static void Task_StopLearningMoveYesNo(u8 taskId);
+static void Task_HandleStopLearningMoveYesNoInput(u8 taskId);
+static void Task_TryLearningNextMoveAfterText(u8 taskId);
+static void ItemUseCB_RareCandyStep(u8 taskId, UNUSED TaskFunc func);
+static void Task_DisplayLevelUpStatsPg1(u8 taskId);
+static void Task_DisplayLevelUpStatsPg2(u8 taskId);
+static void UpdateMonDisplayInfoAfterRareCandy(u8 slot, struct Pokemon *mon);
+static void DisplayLevelUpStatsPg1(u8 taskId);
+static void DisplayLevelUpStatsPg2(u8 taskId);
+static void Task_TryLearnNewMoves(u8 taskId);
+static void PartyMenuTryEvolution(u8 taskId);
+static void DisplayMonNeedsToReplaceMove(u8 taskId);
+static void DisplayMonLearnedMove(u8 taskId, u16 move);
+static void Task_SacredAshDisplayHPRestored(u8 taskId);
+static void Task_SacredAshLoop(u8 taskId);
+static void UseSacredAsh(u8 taskId);
+static void CB2_ReturnToBerryPouchMenu(void);
+static void CB2_ReturnToTMCaseMenu(void);
+static void GiveItemOrMailToSelectedMon(u8 taskId);
+static void RemoveItemToGiveFromBag(u16 item);
+static void DisplayItemMustBeRemovedFirstMessage(u8 taskId);
+static void CB2_WriteMailToGiveMonFromBag(void);
+static void GiveItemToSelectedMon(u8 taskId);
+static void Task_UpdateHeldItemSpriteAndClosePartyMenu(u8 taskId);
+static void Task_SwitchItemsFromBagYesNo(u8 taskId);
+static void CB2_ReturnToPartyOrBagMenuFromWritingMail(void);
+static bool8 ReturnGiveItemToBagOrPC(u16 item);
+static void Task_DisplayGaveMailFromBagMessage(u8 taskId);
+static void Task_HandleSwitchItemsFromBagYesNoInput(u8 taskId);
+static void Task_ValidateChosenHalfParty(u8 taskId);
+static bool8 HasPartySlotAlreadyBeenSelected(u8 slot);
+static void Task_ContinueChoosingHalfParty(u8 taskId);
+static void BufferBattlePartyOrder(u8 *partyBattleOrder, u8 flankId);
+static void BufferBattlePartyOrderBySide(u8 *partyBattleOrder, u8 flankId, u8 battlerId);
+static void Task_InitMultiPartnerPartySlideIn(u8 taskId);
+static void Task_WaitAfterMultiPartnerPartySlideIn(u8 taskId);
+static void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId);
+static void Task_MultiPartnerPartySlideIn(u8 taskId);
+static bool8 CB2_FadeFromPartyMenu(void);
+static void Task_PartyMenuWaitForFade(u8 taskId);
+static void sub_8120C6C(u8 taskId);
+static void sub_8120CA8(u8 taskId);
+static void sub_8120CD8(u8 taskId);
+static void sub_8120D08(u8 taskId);
+static void sub_8120D40(u8 taskId);
+static void sub_8120D7C(u8 taskId);
+static void sub_8120DAC(u8 taskId);
+static void sub_8120DE0(u8 taskId);
+static void sub_8120E1C(u8 taskId);
+static void sub_8120E58(u8 taskId);
+static void sub_8120EE0(u8 taskId);
+static void sub_8120FF0(u8 taskId);
+static bool8 sub_8120F78(u8 taskId);
+static void sub_8120FB0(void);
+static void sub_8122084(u8 windowId, const u8 *str);
+static u8 sub_81220D4(void);
+static void sub_8122110(u8 windowId);
+static void sub_812358C(void);
+static void sub_8124BB0(struct Pokemon *mon, u8 fieldMove);
+static void sub_8124DE0(void);
+static void sub_8124E48(void);
+static void sub_812580C(u8 taskId);
+static void sub_8125898(u8 taskId, UNUSED TaskFunc func);
+static void sub_8125F4C(u8 taskId, UNUSED TaskFunc func);
+static void sub_8125F5C(u8 taskId);
+static void sub_8126BD4(void);
+static bool8 sub_8126C24(void);
+
+static EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL;
+EWRAM_DATA struct PartyMenu gPartyMenu = {0};
+static EWRAM_DATA struct PartyMenuBox *sPartyMenuBoxes = NULL;
+static EWRAM_DATA u8 *sPartyBgGfxTilemap = NULL;
+static EWRAM_DATA u8 *sPartyBgTilemapBuffer = NULL;
+EWRAM_DATA bool8 gPartyMenuUseExitCallback = FALSE;
+EWRAM_DATA u8 gSelectedMonPartyId = 0;
+EWRAM_DATA MainCallback gPostMenuFieldCallback = NULL;
+static EWRAM_DATA u16 *sSlot1TilemapBuffer = NULL; // for switching party slots
+static EWRAM_DATA u16 *sSlot2TilemapBuffer = NULL;
+static EWRAM_DATA struct Pokemon *sSacredAshQuestLogMonBackup = NULL;
+EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0};
+static EWRAM_DATA u16 sPartyMenuItemId = ITEM_NONE;
+ALIGNED(4) EWRAM_DATA u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2] = {0}; // bits 0-3 are the current pos of Slot 1, 4-7 are Slot 2, and so on
+
+void (*gItemUseCB)(u8, TaskFunc);
+
+#include "data/pokemon/tutor_learnsets.h"
+#include "data/party_menu.h"
+
+void InitPartyMenu(u8 menuType, u8 layout, u8 partyAction, bool8 keepCursorPos, u8 messageId, TaskFunc task, MainCallback callback)
+{
+ u16 i;
+
+ ResetPartyMenu();
+ sPartyMenuInternal = Alloc(sizeof(struct PartyMenuInternal));
+ if (sPartyMenuInternal == NULL)
+ {
+ SetMainCallback2(callback);
+ }
+ else
+ {
+ gPartyMenu.menuType = menuType;
+ gPartyMenu.exitCallback = callback;
+ gPartyMenu.action = partyAction;
+ sPartyMenuInternal->messageId = messageId;
+ sPartyMenuInternal->task = task;
+ sPartyMenuInternal->exitCallback = NULL;
+ sPartyMenuInternal->lastSelectedSlot = 0;
+ if (menuType == PARTY_MENU_TYPE_CHOOSE_HALF)
+ sPartyMenuInternal->chooseHalf = TRUE;
+ else
+ sPartyMenuInternal->chooseHalf = FALSE;
+ if (layout != KEEP_PARTY_LAYOUT)
+ gPartyMenu.layout = layout;
+ for (i = 0; i < NELEMS(sPartyMenuInternal->data); ++i)
+ sPartyMenuInternal->data[i] = 0;
+ for (i = 0; i < NELEMS(sPartyMenuInternal->windowId); ++i)
+ sPartyMenuInternal->windowId[i] = 0xFF;
+ if (!keepCursorPos)
+ gPartyMenu.slotId = 0;
+ else if (gPartyMenu.slotId > PARTY_SIZE - 1 || GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES) == SPECIES_NONE)
+ gPartyMenu.slotId = 0;
+ gTextFlags.autoScroll = FALSE;
+ CalculatePlayerPartyCount();
+ SetMainCallback2(CB2_InitPartyMenu);
+ }
+}
+
+static void CB2_UpdatePartyMenu(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ DoScheduledBgTilemapCopiesToVram();
+ UpdatePaletteFade();
+}
+
+static void VBlankCB_PartyMenu(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void CB2_InitPartyMenu(void)
+{
+ while (TRUE)
+ {
+ if (sub_80BF748() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_LinkSomething() == TRUE)
+ break;
+ }
+}
+
+static bool8 ShowPartyMenu(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankHBlankCallbacksToNull();
+ ResetVramOamAndBgCntRegs();
+ ClearScheduledBgCopiesToVram();
+ ++gMain.state;
+ break;
+ case 1:
+ ScanlineEffect_Stop();
+ ++gMain.state;
+ break;
+ case 2:
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ ++gMain.state;
+ break;
+ case 3:
+ ResetSpriteData();
+ ++gMain.state;
+ break;
+ case 4:
+ FreeAllSpritePalettes();
+ ++gMain.state;
+ break;
+ case 5:
+ if (!MenuHelpers_LinkSomething())
+ ResetTasks();
+ ++gMain.state;
+ break;
+ case 6:
+ SetPartyMonsAllowedInMinigame();
+ ++gMain.state;
+ break;
+ case 7:
+ if (!AllocPartyMenuBg())
+ {
+ ExitPartyMenu();
+ return TRUE;
+ }
+ else
+ {
+ sPartyMenuInternal->data[0] = 0;
+ ++gMain.state;
+ }
+ break;
+ case 8:
+ if (AllocPartyMenuBgGfx())
+ ++gMain.state;
+ break;
+ case 9:
+ InitPartyMenuWindows(gPartyMenu.layout);
+ ++gMain.state;
+ break;
+ case 10:
+ InitPartyMenuBoxes(gPartyMenu.layout);
+ sPartyMenuInternal->data[0] = 0;
+ ++gMain.state;
+ break;
+ case 11:
+ LoadHeldItemIcons();
+ ++gMain.state;
+ break;
+ case 12:
+ LoadPartyMenuPokeballGfx();
+ ++gMain.state;
+ break;
+ case 13:
+ LoadPartyMenuAilmentGfx();
+ ++gMain.state;
+ break;
+ case 14:
+ LoadMonIconPalettes();
+ ++gMain.state;
+ break;
+ case 15:
+ if (CreatePartyMonSpritesLoop())
+ {
+ sPartyMenuInternal->data[0] = 0;
+ ++gMain.state;
+ }
+ break;
+ case 16:
+ if (RenderPartyMenuBoxes())
+ {
+ sPartyMenuInternal->data[0] = 0;
+ ++gMain.state;
+ }
+ break;
+ case 17:
+ CreateCancelConfirmPokeballSprites();
+ ++gMain.state;
+ break;
+ case 18:
+ CreateCancelConfirmWindows(sPartyMenuInternal->chooseHalf);
+ ++gMain.state;
+ break;
+ case 19:
+ HelpSystem_SetSomeVariable2(5);
+ ++gMain.state;
+ break;
+ case 20:
+ CreateTask(sPartyMenuInternal->task, 0);
+ DisplayPartyMenuStdMessage(sPartyMenuInternal->messageId);
+ ++gMain.state;
+ break;
+ case 21:
+ BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
+ ++gMain.state;
+ break;
+ case 22:
+ BeginNormalPaletteFade(0xFFFFFFFF, -2, 16, 0, RGB_BLACK);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ ++gMain.state;
+ break;
+ default:
+ SetVBlankCallback(VBlankCB_PartyMenu);
+ SetMainCallback2(CB2_UpdatePartyMenu);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void ExitPartyMenu(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK);
+ CreateTask(Task_ExitPartyMenu, 0);
+ SetVBlankCallback(VBlankCB_PartyMenu);
+ SetMainCallback2(CB2_UpdatePartyMenu);
+}
+
+static void Task_ExitPartyMenu(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(gPartyMenu.exitCallback);
+ FreePartyPointers();
+ DestroyTask(taskId);
+ }
+}
+
+static void ResetPartyMenu(void)
+{
+ sPartyMenuInternal = NULL;
+ sPartyBgTilemapBuffer = NULL;
+ sPartyMenuBoxes = NULL;
+ sPartyBgGfxTilemap = NULL;
+}
+
+static bool8 AllocPartyMenuBg(void)
+{
+ ResetAllBgsCoordinatesAndBgCntRegs();
+ sPartyBgTilemapBuffer = Alloc(0x800);
+ if (sPartyBgTilemapBuffer == NULL)
+ return FALSE;
+ memset(sPartyBgTilemapBuffer, 0, 0x800);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sPartyMenuBgTemplates, NELEMS(sPartyMenuBgTemplates));
+ SetBgTilemapBuffer(1, sPartyBgTilemapBuffer);
+ ScheduleBgCopyTilemapToVram(1);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ return TRUE;
+}
+
+static bool8 AllocPartyMenuBgGfx(void)
+{
+ u32 sizeout;
+
+ switch (sPartyMenuInternal->data[0])
+ {
+ case 0:
+ sPartyBgGfxTilemap = MallocAndDecompress(gPartyMenuBg_Gfx, &sizeout);
+ LoadBgTiles(1, sPartyBgGfxTilemap, sizeout, 0);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ LZDecompressWram(gPartyMenuBg_Tilemap, sPartyBgTilemapBuffer);
+ ++sPartyMenuInternal->data[0];
+ }
+ break;
+ case 2:
+ LoadCompressedPalette(gPartyMenuBg_Pal, 0, 0x160);
+ CpuCopy16(gPlttBufferUnfaded, sPartyMenuInternal->palBuffer, 0x160);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 3:
+ PartyPaletteBufferCopy(4);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 4:
+ PartyPaletteBufferCopy(5);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 5:
+ PartyPaletteBufferCopy(6);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 6:
+ PartyPaletteBufferCopy(7);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 7:
+ PartyPaletteBufferCopy(8);
+ ++sPartyMenuInternal->data[0];
+ break;
+ default:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void PartyPaletteBufferCopy(u8 offset)
+{
+ offset *= 16;
+ CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferUnfaded[offset], 32);
+ CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferFaded[offset], 32);
+}
+
+static void FreePartyPointers(void)
+{
+ if (sPartyMenuInternal)
+ Free(sPartyMenuInternal);
+ if (sPartyBgTilemapBuffer)
+ Free(sPartyBgTilemapBuffer);
+ if (sPartyBgGfxTilemap)
+ Free(sPartyBgGfxTilemap);
+ if (sPartyMenuBoxes)
+ Free(sPartyMenuBoxes);
+ FreeAllWindowBuffers();
+}
+
+static void InitPartyMenuBoxes(u8 layout)
+{
+ u8 i;
+
+ sPartyMenuBoxes = Alloc(sizeof(struct PartyMenuBox[PARTY_SIZE]));
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ sPartyMenuBoxes[i].infoRects = &sPartyBoxInfoRects[PARTY_BOX_RIGHT_COLUMN];
+ sPartyMenuBoxes[i].spriteCoords = sPartyMenuSpriteCoords[layout][i];
+ sPartyMenuBoxes[i].windowId = i;
+ }
+ // The first party mon goes in the left column
+ sPartyMenuBoxes[0].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN];
+ if (layout == PARTY_LAYOUT_MULTI_SHOWCASE)
+ sPartyMenuBoxes[3].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN];
+ else if (layout != PARTY_LAYOUT_SINGLE)
+ sPartyMenuBoxes[1].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN];
+}
+
+static void RenderPartyMenuBox(u8 slot)
+{
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE)
+ {
+ DisplayPartyPokemonDataForMultiBattle(slot);
+ LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_MULTI_ALT);
+ CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2);
+ PutWindowTilemap(sPartyMenuBoxes[slot].windowId);
+ ScheduleBgCopyTilemapToVram(2);
+ }
+ else
+ {
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) == SPECIES_NONE)
+ {
+ DrawEmptySlot(sPartyMenuBoxes[slot].windowId);
+ CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2);
+ }
+ else
+ {
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF)
+ DisplayPartyPokemonDataForChooseHalf(slot);
+ else if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
+ DisplayPartyPokemonDataForWirelessMinigame(slot);
+ else if (!DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(slot))
+ DisplayPartyPokemonData(slot);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE)
+ AnimatePartySlot(slot, 0);
+ else if (gPartyMenu.slotId == slot)
+ AnimatePartySlot(slot, 1);
+ else
+ AnimatePartySlot(slot, 0);
+ }
+ PutWindowTilemap(sPartyMenuBoxes[slot].windowId);
+ ScheduleBgCopyTilemapToVram(0);
+ }
+}
+
+static void DisplayPartyPokemonData(u8 slot)
+{
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_IS_EGG))
+ {
+ sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE);
+ DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ }
+ else
+ {
+ sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, FALSE);
+ DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonLevelCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonGenderNidoranCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonMaxHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonHPBarCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ }
+}
+
+static void DisplayPartyPokemonDescriptionData(u8 slot, u8 stringId)
+{
+ struct Pokemon *mon = &gPlayerParty[slot];
+
+ sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE);
+ DisplayPartyPokemonNickname(mon, &sPartyMenuBoxes[slot], 0);
+ if (!GetMonData(mon, MON_DATA_IS_EGG))
+ {
+ DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonGenderNidoranCheck(mon, &sPartyMenuBoxes[slot], 0);
+ }
+ DisplayPartyPokemonDescriptionText(stringId, &sPartyMenuBoxes[slot], 0);
+}
+
+static void DisplayPartyPokemonDataForChooseHalf(u8 slot)
+{
+ u8 i;
+ struct Pokemon *mon = &gPlayerParty[slot];
+ u8 *order = gSelectedOrderFromParty;
+ u8 maxBattlers;
+
+ if (!GetBattleEntryEligibility(mon))
+ {
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE);
+ }
+ else
+ {
+ if (gPartyMenu.unk_8_6 == 2)
+ maxBattlers = 2;
+ else
+ maxBattlers = 3;
+ for (i = 0; i < maxBattlers; ++i)
+ {
+ if (order[i] != 0 && (order[i] - 1) == slot)
+ {
+ DisplayPartyPokemonDescriptionData(slot, i + PARTYBOX_DESC_FIRST);
+ return;
+ }
+ }
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_3);
+ }
+}
+
+static void DisplayPartyPokemonDataForWirelessMinigame(u8 slot)
+{
+ if (IsMonAllowedInMinigame(slot) == TRUE)
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE);
+ else
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE);
+}
+
+// Returns TRUE if teaching move or cant evolve with item (i.e. description data is shown), FALSE otherwise
+static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot)
+{
+ struct Pokemon *currentPokemon = &gPlayerParty[slot];
+ u16 item = gSpecialVar_ItemId;
+
+ if (gPartyMenu.action == PARTY_ACTION_MOVE_TUTOR)
+ {
+ gSpecialVar_Result = FALSE;
+ if (gSpecialVar_0x8005 > 14)
+ return FALSE;
+ DisplayPartyPokemonDataToTeachMove(slot, 0, gSpecialVar_0x8005);
+ }
+ else
+ {
+ if (gPartyMenu.action != PARTY_ACTION_USE_ITEM)
+ return FALSE;
+ switch (CheckIfItemIsTMHMOrEvolutionStone(item))
+ {
+ default:
+ return FALSE;
+ case 1: // TM/HM
+ DisplayPartyPokemonDataToTeachMove(slot, item, 0);
+ break;
+ case 2: // Evolution stone
+ if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, 3, item) != SPECIES_NONE)
+ return FALSE;
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NO_USE);
+ break;
+ }
+ }
+ return TRUE;
+}
+
+static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor)
+{
+ switch (CanMonLearnTMTutor(&gPlayerParty[slot], item, tutor))
+ {
+ case CANNOT_LEARN_MOVE:
+ case CANNOT_LEARN_MOVE_IS_EGG:
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE_2);
+ break;
+ case ALREADY_KNOWS_MOVE:
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_LEARNED);
+ break;
+ default:
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_2);
+ break;
+ }
+}
+
+static void DisplayPartyPokemonDataForMultiBattle(u8 slot)
+{
+ struct PartyMenuBox *menuBox = &sPartyMenuBoxes[slot];
+ u8 actualSlot = slot - (3);
+
+ if (gMultiPartnerParty[actualSlot].species == SPECIES_NONE)
+ {
+ DrawEmptySlot(menuBox->windowId);
+ }
+ else
+ {
+ menuBox->infoRects->blitFunc(menuBox->windowId, 0, 0, 0, 0, FALSE);
+ StringCopy(gStringVar1, gMultiPartnerParty[actualSlot].nickname);
+ StringGetEnd10(gStringVar1);
+ if (StringLength(gStringVar1) <= 5)
+ ConvertInternationalString(gStringVar1, 1);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, menuBox->infoRects->dimensions);
+ DisplayPartyPokemonLevel(gMultiPartnerParty[actualSlot].level, menuBox);
+ DisplayPartyPokemonGender(gMultiPartnerParty[actualSlot].gender, gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].nickname, menuBox);
+ DisplayPartyPokemonHP(gMultiPartnerParty[actualSlot].hp, menuBox);
+ DisplayPartyPokemonMaxHP(gMultiPartnerParty[actualSlot].maxhp, menuBox);
+ DisplayPartyPokemonHPBar(gMultiPartnerParty[actualSlot].hp, gMultiPartnerParty[actualSlot].maxhp, menuBox);
+ }
+}
+
+static bool8 RenderPartyMenuBoxes(void)
+{
+ RenderPartyMenuBox(sPartyMenuInternal->data[0]);
+ if (++sPartyMenuInternal->data[0] == PARTY_SIZE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static u8 *GetPartyMenuBgTile(u16 tileId)
+{
+ return &sPartyBgGfxTilemap[tileId << 5];
+}
+
+static void CreatePartyMonSprites(u8 slot)
+{
+ u8 actualSlot;
+
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE)
+ {
+ u8 status;
+
+ actualSlot = slot - MULTI_PARTY_SIZE;
+ if (gMultiPartnerParty[actualSlot].species != SPECIES_NONE)
+ {
+ CreatePartyMonIconSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].personality, &sPartyMenuBoxes[slot], 0, FALSE);
+ CreatePartyMonHeldItemSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].heldItem, &sPartyMenuBoxes[slot]);
+ CreatePartyMonPokeballSpriteParameterized(gMultiPartnerParty[actualSlot].species, &sPartyMenuBoxes[slot]);
+ if (gMultiPartnerParty[actualSlot].hp == 0)
+ status = AILMENT_FNT;
+ else
+ status = GetAilmentFromStatus(gMultiPartnerParty[actualSlot].status);
+ CreatePartyMonStatusSpriteParameterized(gMultiPartnerParty[actualSlot].species, status, &sPartyMenuBoxes[slot]);
+ }
+ }
+ else if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ CreatePartyMonIconSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot], slot);
+ CreatePartyMonHeldItemSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ CreatePartyMonPokeballSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ CreatePartyMonStatusSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ }
+}
+
+static bool8 CreatePartyMonSpritesLoop(void)
+{
+ CreatePartyMonSprites(sPartyMenuInternal->data[0]);
+ if (++sPartyMenuInternal->data[0] == PARTY_SIZE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void CreateCancelConfirmPokeballSprites(void)
+{
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE)
+ {
+ // The showcase has no Cancel/Confirm buttons
+ FillBgTilemapBufferRect(1, 14, 23, 17, 7, 2, 1);
+ }
+ else
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ {
+ sPartyMenuInternal->spriteIdConfirmPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x88);
+ DrawCancelConfirmButtons();
+ sPartyMenuInternal->spriteIdCancelPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x98);
+ }
+ else
+ {
+ sPartyMenuInternal->spriteIdCancelPokeball = CreatePokeballButtonSprite(198, 148);
+ }
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ }
+}
+
+void AnimatePartySlot(u8 slot, u8 animNum)
+{
+ u8 spriteId;
+
+ switch (slot)
+ {
+ default:
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ LoadPartyBoxPalette(&sPartyMenuBoxes[slot], GetPartyBoxPaletteFlags(slot, animNum));
+ AnimateSelectedPartyIcon(sPartyMenuBoxes[slot].monSpriteId, animNum);
+ PartyMenuStartSpriteAnim(sPartyMenuBoxes[slot].pokeballSpriteId, animNum);
+ }
+ return;
+ case PARTY_SIZE: // Confirm
+ if (animNum == 0)
+ SetBgTilemapPalette(1, 23, 16, 7, 2, 1);
+ else
+ SetBgTilemapPalette(1, 23, 16, 7, 2, 2);
+ spriteId = sPartyMenuInternal->spriteIdConfirmPokeball;
+ break;
+ case PARTY_SIZE + 1: // Cancel
+ // The position of the Cancel button changes if Confirm is present
+ if (!sPartyMenuInternal->chooseHalf)
+ {
+ if (animNum == 0)
+ SetBgTilemapPalette(1, 23, 17, 7, 2, 1);
+ else
+ SetBgTilemapPalette(1, 23, 17, 7, 2, 2);
+ }
+ else if (animNum == 0)
+ {
+ SetBgTilemapPalette(1, 23, 18, 7, 2, 1);
+ }
+ else
+ {
+ SetBgTilemapPalette(1, 23, 18, 7, 2, 2);
+ }
+ spriteId = sPartyMenuInternal->spriteIdCancelPokeball;
+ break;
+ }
+ PartyMenuStartSpriteAnim(spriteId, animNum);
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+static u8 GetPartyBoxPaletteFlags(u8 slot, u8 animNum)
+{
+ u8 palFlags = 0;
+
+ if (animNum == 1)
+ palFlags |= PARTY_PAL_SELECTED;
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0)
+ palFlags |= PARTY_PAL_FAINTED;
+ if (gPartyMenu.layout == PARTY_LAYOUT_MULTI
+ && (slot == 1 || slot == 4 || slot == 5))
+ palFlags |= PARTY_PAL_MULTI_ALT;
+ if (gPartyMenu.action == PARTY_ACTION_SWITCHING)
+ palFlags |= PARTY_PAL_SWITCHING;
+ if (gPartyMenu.action == PARTY_ACTION_SWITCH)
+ {
+ if (slot == gPartyMenu.slotId || slot == gPartyMenu.slotId2)
+ palFlags |= PARTY_PAL_TO_SWITCH;
+ }
+ if (gPartyMenu.action == PARTY_ACTION_SOFTBOILED && slot == gPartyMenu.slotId )
+ palFlags |= PARTY_PAL_TO_SOFTBOIL;
+ return palFlags;
+}
+
+static void DrawCancelConfirmButtons(void)
+{
+ CopyToBgTilemapBufferRect_ChangePalette(1, sConfirmButton_Tilemap, 23, 16, 7, 2, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sCancelButton_Tilemap, 23, 18, 7, 2, 17);
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+bool8 IsMultiBattle(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattleTypeFlags & BATTLE_TYPE_LINK)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void SwapPartyPokemon(struct Pokemon *mon1, struct Pokemon *mon2)
+{
+ struct Pokemon *buffer = Alloc(sizeof(struct Pokemon));
+
+ *buffer = *mon1;
+ *mon1 = *mon2;
+ *mon2 = *buffer;
+ Free(buffer);
+}
+
+static void Task_ClosePartyMenu(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = Task_ClosePartyMenuAndSetCB2;
+}
+
+static void Task_ClosePartyMenuAndSetCB2(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ UpdatePartyToFieldOrder();
+ if (sPartyMenuInternal->exitCallback != NULL)
+ SetMainCallback2(sPartyMenuInternal->exitCallback);
+ else
+ SetMainCallback2(gPartyMenu.exitCallback);
+ FreePartyPointers();
+ DestroyTask(taskId);
+ }
+}
+
+u8 GetCursorSelectionMonId(void)
+{
+ return gPartyMenu.slotId;
+}
+
+u8 GetPartyMenuType(void)
+{
+ return gPartyMenu.menuType;
+}
+
+void Task_HandleChooseMonInput(u8 taskId)
+{
+ if (!gPaletteFade.active && sub_80BF748() != TRUE)
+ {
+ s8 *slotPtr = GetCurrentPartySlotPtr();
+
+ switch (PartyMenuButtonHandler(slotPtr))
+ {
+ case 1: // Selected mon
+ HandleChooseMonSelection(taskId, slotPtr);
+ break;
+ case 2: // Selected Cancel
+ HandleChooseMonCancel(taskId, slotPtr);
+ break;
+ case 8: // Start button
+ if (sPartyMenuInternal->chooseHalf)
+ {
+ PlaySE(SE_SELECT);
+ MoveCursorToConfirm();
+ }
+ break;
+ }
+ }
+}
+
+static s8 *GetCurrentPartySlotPtr(void)
+{
+ if (gPartyMenu.action == PARTY_ACTION_SWITCH || gPartyMenu.action == PARTY_ACTION_SOFTBOILED)
+ return &gPartyMenu.slotId2;
+ else
+ return &gPartyMenu.slotId;
+}
+
+static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr)
+{
+ if (*slotPtr == PARTY_SIZE)
+ {
+ gPartyMenu.task(taskId);
+ }
+ else
+ {
+ switch (gPartyMenu.action)
+ {
+ case PARTY_ACTION_SOFTBOILED:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ Task_TryUseSoftboiledOnPartyMon(taskId);
+ break;
+ case PARTY_ACTION_USE_ITEM:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ {
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen;
+ gItemUseCB(taskId, Task_ClosePartyMenuAfterText);
+ }
+ break;
+ case PARTY_ACTION_MOVE_TUTOR:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ {
+ PlaySE(SE_SELECT);
+ TryTutorSelectedMon(taskId);
+ }
+ break;
+ case PARTY_ACTION_GIVE_MAILBOX_MAIL:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ {
+ PlaySE(SE_SELECT);
+ TryGiveMailToSelectedMon(taskId);
+ }
+ break;
+ case PARTY_ACTION_GIVE_ITEM:
+ case PARTY_ACTION_GIVE_PC_ITEM:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ {
+ PlaySE(SE_SELECT);
+ TryGiveItemOrMailToSelectedMon(taskId);
+ }
+ break;
+ case PARTY_ACTION_SWITCH:
+ PlaySE(SE_SELECT);
+ SwitchSelectedMons(taskId);
+ break;
+ case PARTY_ACTION_CHOOSE_AND_CLOSE:
+ PlaySE(SE_SELECT);
+ gSpecialVar_0x8004 = *slotPtr;
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MOVE_RELEARNER)
+ gSpecialVar_0x8005 = GetNumberOfRelearnableMoves(&gPlayerParty[*slotPtr]);
+ Task_ClosePartyMenu(taskId);
+ break;
+ case PARTY_ACTION_MINIGAME:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ TryEnterMonForMinigame(taskId, (u8)*slotPtr);
+ break;
+ default:
+ case PARTY_ACTION_ABILITY_PREVENTS:
+ case PARTY_ACTION_SWITCHING:
+ PlaySE(SE_SELECT);
+ Task_TryCreateSelectionWindow(taskId);
+ break;
+ }
+ }
+}
+
+static bool8 IsSelectedMonNotEgg(u8 *slotPtr)
+{
+ if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_IS_EGG) == TRUE)
+ {
+ PlaySE(SE_HAZURE);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr)
+{
+ switch (gPartyMenu.action)
+ {
+ case PARTY_ACTION_SEND_OUT:
+ PlaySE(SE_HAZURE);
+ break;
+ case PARTY_ACTION_SWITCH:
+ case PARTY_ACTION_SOFTBOILED:
+ PlaySE(SE_SELECT);
+ FinishTwoMonAction(taskId);
+ break;
+ case PARTY_ACTION_MINIGAME:
+ PlaySE(SE_SELECT);
+ CancelParticipationPrompt(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF)
+ {
+ DisplayCancelChooseMonYesNo(taskId);
+ }
+ else
+ {
+ if (!MenuHelpers_LinkSomething())
+ gSpecialVar_0x8004 = PARTY_SIZE + 1;
+ gPartyMenuUseExitCallback = FALSE;
+ *slotPtr = PARTY_SIZE + 1;
+ Task_ClosePartyMenu(taskId);
+ }
+ break;
+ }
+}
+
+static void DisplayCancelChooseMonYesNo(u8 taskId)
+{
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_84176CF);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_CancelChooseMonYesNo;
+}
+
+static void Task_CancelChooseMonYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleCancelChooseMonYesNoInput;
+ }
+}
+
+static void Task_HandleCancelChooseMonYesNoInput(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ gPartyMenuUseExitCallback = FALSE;
+ gPartyMenu.slotId = PARTY_SIZE + 1;
+ ClearSelectedPartyOrder();
+ Task_ClosePartyMenu(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
+ Task_ReturnToChooseMonAfterText(taskId);
+ break;
+ }
+}
+
+static u16 PartyMenuButtonHandler(s8 *slotPtr)
+{
+ s8 movementDir;
+
+ switch (gMain.newAndRepeatedKeys)
+ {
+ case DPAD_UP:
+ movementDir = MENU_DIR_UP;
+ break;
+ case DPAD_DOWN:
+ movementDir = MENU_DIR_DOWN;
+ break;
+ case DPAD_LEFT:
+ movementDir = MENU_DIR_LEFT;
+ break;
+ case DPAD_RIGHT:
+ movementDir = MENU_DIR_RIGHT;
+ break;
+ default:
+ switch (GetLRKeysPressedAndHeld())
+ {
+ case MENU_L_PRESSED:
+ movementDir = MENU_DIR_UP;
+ break;
+ case MENU_R_PRESSED:
+ movementDir = MENU_DIR_DOWN;
+ break;
+ default:
+ movementDir = 0;
+ break;
+ }
+ break;
+ }
+ if (JOY_NEW(START_BUTTON))
+ return 8;
+ if (movementDir)
+ {
+ UpdateCurrentPartySelection(slotPtr, movementDir);
+ return 0;
+ }
+ // Pressed Cancel
+ if (JOY_NEW(A_BUTTON) && *slotPtr == PARTY_SIZE + 1)
+ return 2;
+ return JOY_NEW(A_BUTTON | B_BUTTON);
+}
+
+static void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir)
+{
+ s8 newSlotId = *slotPtr;
+ u8 layout = gPartyMenu.layout;
+
+ if (layout == PARTY_LAYOUT_SINGLE)
+ UpdatePartySelectionSingleLayout(slotPtr, movementDir);
+ else
+ UpdatePartySelectionDoubleLayout(slotPtr, movementDir);
+ if (*slotPtr != newSlotId)
+ {
+ PlaySE(SE_SELECT);
+ AnimatePartySlot(newSlotId, 0);
+ AnimatePartySlot(*slotPtr, 1);
+ }
+}
+
+static void UpdatePartySelectionSingleLayout(s8 *slotPtr, s8 movementDir)
+{
+ // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm
+ switch (movementDir)
+ {
+ case MENU_DIR_UP:
+ if (*slotPtr == 0)
+ {
+ *slotPtr = PARTY_SIZE + 1;
+ }
+ else if (*slotPtr == PARTY_SIZE)
+ {
+ *slotPtr = gPlayerPartyCount - 1;
+ }
+ else if (*slotPtr == PARTY_SIZE + 1)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ *slotPtr = PARTY_SIZE;
+ else
+ *slotPtr = gPlayerPartyCount - 1;
+ }
+ else
+ {
+ --*slotPtr;
+ }
+ break;
+ case MENU_DIR_DOWN:
+ if (*slotPtr == PARTY_SIZE + 1)
+ {
+ *slotPtr = 0;
+ }
+ else
+ {
+ if (*slotPtr == gPlayerPartyCount - 1)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ *slotPtr = PARTY_SIZE;
+ else
+ *slotPtr = PARTY_SIZE + 1;
+ }
+ else
+ {
+ ++*slotPtr;
+ }
+ }
+ break;
+ case MENU_DIR_RIGHT:
+ if (gPlayerPartyCount != 1 && *slotPtr == 0)
+ {
+ if (sPartyMenuInternal->lastSelectedSlot == 0)
+ *slotPtr = 1;
+ else
+ *slotPtr = sPartyMenuInternal->lastSelectedSlot;
+ }
+ break;
+ case MENU_DIR_LEFT:
+ if (*slotPtr != 0 && *slotPtr != PARTY_SIZE && *slotPtr != PARTY_SIZE + 1)
+ {
+ sPartyMenuInternal->lastSelectedSlot = *slotPtr;
+ *slotPtr = 0;
+ }
+ break;
+ }
+}
+
+static void UpdatePartySelectionDoubleLayout(s8 *slotPtr, s8 movementDir)
+{
+ // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm
+ // newSlot is used temporarily as a movement direction during its later assignment
+ s8 newSlot = movementDir;
+
+ switch (movementDir)
+ {
+ case MENU_DIR_UP:
+ if (*slotPtr == 0)
+ {
+ *slotPtr = PARTY_SIZE + 1;
+ break;
+ }
+ else if (*slotPtr == PARTY_SIZE)
+ {
+ *slotPtr = gPlayerPartyCount - 1;
+ break;
+ }
+ else if (*slotPtr == PARTY_SIZE + 1)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ {
+ *slotPtr = PARTY_SIZE;
+ break;
+ }
+ --*slotPtr;
+ }
+ newSlot = GetNewSlotDoubleLayout(*slotPtr, newSlot);
+ if (newSlot != -1)
+ *slotPtr = newSlot;
+ break;
+ case MENU_DIR_DOWN:
+ if (*slotPtr == PARTY_SIZE)
+ {
+ *slotPtr = PARTY_SIZE + 1;
+ }
+ else if (*slotPtr == PARTY_SIZE + 1)
+ {
+ *slotPtr = 0;
+ }
+ else
+ {
+ newSlot = GetNewSlotDoubleLayout(*slotPtr, MENU_DIR_DOWN);
+ if (newSlot == -1)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ *slotPtr = PARTY_SIZE;
+ else
+ *slotPtr = PARTY_SIZE + 1;
+ }
+ else
+ {
+ *slotPtr = newSlot;
+ }
+ }
+ break;
+ case MENU_DIR_RIGHT:
+ if (*slotPtr == 0)
+ {
+ if (sPartyMenuInternal->lastSelectedSlot == 3)
+ {
+ if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES) != SPECIES_NONE)
+ *slotPtr = 3;
+ }
+ else if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ *slotPtr = 2;
+ }
+ }
+ else if (*slotPtr == 1)
+ {
+ if (sPartyMenuInternal->lastSelectedSlot == 5)
+ {
+ if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES) != SPECIES_NONE)
+ *slotPtr = 5;
+ }
+ else if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ *slotPtr = 4;
+ }
+ }
+ break;
+ case MENU_DIR_LEFT:
+ if (*slotPtr == 2 || *slotPtr == 3)
+ {
+ sPartyMenuInternal->lastSelectedSlot = *slotPtr;
+ *slotPtr = 0;
+ }
+ else if (*slotPtr == 4 || *slotPtr == 5)
+ {
+ sPartyMenuInternal->lastSelectedSlot = *slotPtr;
+ *slotPtr = 1;
+ }
+ break;
+ }
+}
+
+static s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir)
+{
+ while (TRUE)
+ {
+ slotId += movementDir;
+ if ((u8)slotId >= PARTY_SIZE)
+ return -1;
+ if (GetMonData(&gPlayerParty[slotId], MON_DATA_SPECIES) != SPECIES_NONE)
+ return slotId;
+ }
+}
+
+u8 *GetMonNickname(struct Pokemon *mon, u8 *dest)
+{
+ GetMonData(mon, MON_DATA_NICKNAME, dest);
+ return StringGetEnd10(dest);
+}
+
+#define tKeepOpen data[0]
+
+u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen)
+{
+ u8 taskId;
+
+ PartyMenuPrintText(str);
+ taskId = CreateTask(Task_PrintAndWaitForText, 1);
+ gTasks[taskId].tKeepOpen = keepOpen;
+ return taskId;
+}
+
+static void Task_PrintAndWaitForText(u8 taskId)
+{
+ if (RunTextPrinters_CheckActive(6) != TRUE)
+ {
+ if (gTasks[taskId].tKeepOpen == FALSE)
+ {
+ ClearStdWindowAndFrameToTransparent(6, 0);
+ ClearWindowTilemap(6);
+ }
+ DestroyTask(taskId);
+ }
+}
+
+#undef tKeepOpen
+
+bool8 IsPartyMenuTextPrinterActive(void)
+{
+ return FuncIsActiveTask(Task_PrintAndWaitForText);
+}
+
+static void Task_WaitForLinkAndReturnToChooseMon(u8 taskId)
+{
+ if (sub_80BF748() != TRUE)
+ {
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ }
+}
+
+static void Task_ReturnToChooseMonAfterText(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ ClearStdWindowAndFrameToTransparent(6, 0);
+ ClearWindowTilemap(6);
+ if (MenuHelpers_LinkSomething() == TRUE)
+ {
+ gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon;
+ }
+ else
+ {
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ }
+ }
+}
+
+static void DisplayGaveHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen, u8 a4)
+{
+ if (!a4)
+ ItemUse_SetQuestLogEvent(5, mon, item, 0xFFFF);
+ else if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM)
+ ItemUse_SetQuestLogEvent(7, mon, item, 0xFFFF);
+ else
+ ItemUse_SetQuestLogEvent(6, mon, item, 0xFFFF);
+ GetMonNickname(mon, gStringVar1);
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnWasGivenItem);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+static void DisplayTookHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen)
+{
+ ItemUse_SetQuestLogEvent(8, mon, item, 0xFFFF);
+ GetMonNickname(mon, gStringVar1);
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_ReceivedItemFromPkmn);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+static void DisplayAlreadyHoldingItemSwitchMessage(struct Pokemon *mon, u16 item, bool8 keepOpen)
+{
+ GetMonNickname(mon, gStringVar1);
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyHoldingItemSwitch);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+static void DisplaySwitchedHeldItemMessage(u16 item, u16 item2, bool8 keepOpen)
+{
+ sub_8124B60(&gPlayerParty[gPartyMenu.slotId], item2, item);
+ CopyItemName(item, gStringVar1);
+ CopyItemName(item2, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_SwitchedPkmnItem);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+static void GiveItemToMon(struct Pokemon *mon, u16 item)
+{
+ u8 itemBytes[2];
+
+ if (ItemIsMail(item) == TRUE)
+ {
+ if (GiveMailToMon(mon, item) == 0xFF)
+ return;
+ }
+ itemBytes[0] = item;
+ itemBytes[1] = item >> 8;
+ SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes);
+}
+
+static u8 TryTakeMonItem(struct Pokemon *mon)
+{
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ if (item == ITEM_NONE)
+ return 0;
+ if (AddBagItem(item, 1) == FALSE)
+ return 1;
+ item = ITEM_NONE;
+ SetMonData(mon, MON_DATA_HELD_ITEM, &item);
+ return 2;
+}
+
+static void BufferBagFullCantTakeItemMessage(u16 itemId)
+{
+ const u8 *string;
+
+ switch (ItemId_GetPocket(itemId))
+ {
+ default:
+ string = gStartMenuText_Bag;
+ break;
+ case POCKET_TM_CASE:
+ string = ItemId_GetName(ITEM_TM_CASE);
+ break;
+ case POCKET_BERRY_POUCH:
+ string = ItemId_GetName(ITEM_BERRY_POUCH);
+ break;
+ }
+ StringCopy(gStringVar1, string);
+ StringExpandPlaceholders(gStringVar4, gText_BagFullCouldNotRemoveItem);
+}
+
+#define tHP data[0]
+#define tMaxHP data[1]
+#define tHPIncrement data[2]
+#define tHPToAdd data[3]
+#define tPartyId data[4]
+#define tStartHP data[5]
+
+static void Task_PartyMenuModifyHP(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ tHP += tHPIncrement;
+ --tHPToAdd;
+ SetMonData(&gPlayerParty[tPartyId], MON_DATA_HP, &tHP);
+ DisplayPartyPokemonHPCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId], 1);
+ DisplayPartyPokemonHPBarCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId]);
+ if (tHPToAdd == 0 || tHP == 0 || tHP == tMaxHP)
+ {
+ // If HP was recovered, buffer the amount recovered
+ if (tHP > tStartHP)
+ ConvertIntToDecimalStringN(gStringVar2, tHP - tStartHP, STR_CONV_MODE_LEFT_ALIGN, 3);
+ SwitchTaskToFollowupFunc(taskId);
+ }
+}
+
+void PartyMenuModifyHP(u8 taskId, u8 slot, s8 hpIncrement, s16 hpDifference, TaskFunc task)
+{
+ struct Pokemon *mon = &gPlayerParty[slot];
+ s16 *data = gTasks[taskId].data;
+
+ tHP = GetMonData(mon, MON_DATA_HP);
+ tMaxHP = GetMonData(mon, MON_DATA_MAX_HP);
+ tHPIncrement = hpIncrement;
+ tHPToAdd = hpDifference;
+ tPartyId = slot;
+ tStartHP = tHP;
+ SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, task);
+}
+
+// The usage of hp in this function is mostly nonsense
+// Because caseId is always passed 0, none of the other cases ever occur
+static void ResetHPTaskData(u8 taskId, u8 caseId, u32 hp)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (caseId) // always zero
+ {
+ case 0:
+ tHP = hp;
+ tStartHP = hp;
+ break;
+ case 1:
+ tMaxHP = hp;
+ break;
+ case 2:
+ tHPIncrement = hp;
+ break;
+ case 3:
+ tHPToAdd = hp;
+ break;
+ case 4:
+ tPartyId = hp;
+ break;
+ case 5:
+ SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, (TaskFunc)hp); // >casting hp as a taskfunc
+ break;
+ }
+}
+
+#undef tHP
+#undef tMaxHP
+#undef tHPIncrement
+#undef tHPToAdd
+#undef tPartyId
+#undef tStartHP
+
+u8 GetAilmentFromStatus(u32 status)
+{
+ if (status & STATUS1_PSN_ANY)
+ return AILMENT_PSN;
+ if (status & STATUS1_PARALYSIS)
+ return AILMENT_PRZ;
+ if (status & STATUS1_SLEEP)
+ return AILMENT_SLP;
+ if (status & STATUS1_FREEZE)
+ return AILMENT_FRZ;
+ if (status & STATUS1_BURN)
+ return AILMENT_BRN;
+ return AILMENT_NONE;
+}
+
+u8 GetMonAilment(struct Pokemon *mon)
+{
+ u8 ailment;
+
+ if (GetMonData(mon, MON_DATA_HP) == 0)
+ return AILMENT_FNT;
+ ailment = GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS));
+ if (ailment != AILMENT_NONE)
+ return ailment;
+ if (CheckPartyPokerus(mon, 0))
+ return AILMENT_PKRS;
+ return AILMENT_NONE;
+}
+
+static void SetPartyMonsAllowedInMinigame(void)
+{
+ u16 *ptr;
+
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
+ {
+ u8 i;
+
+ ptr = &gPartyMenu.data1;
+ gPartyMenu.data1 = 0;
+ if (gSpecialVar_0x8005 == 0)
+ {
+ for (i = 0; i < gPlayerPartyCount; ++i)
+ *ptr += IsMonAllowedInPokemonJump(&gPlayerParty[i]) << i;
+ }
+ else
+ {
+ for (i = 0; i < gPlayerPartyCount; ++i)
+ *ptr += IsMonAllowedInDodrioBerryPicking(&gPlayerParty[i]) << i;
+ }
+ }
+}
+
+static bool16 IsMonAllowedInPokemonJump(struct Pokemon *mon)
+{
+ if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && IsSpeciesAllowedInPokemonJump(GetMonData(mon, MON_DATA_SPECIES)))
+ return TRUE;
+ return FALSE;
+}
+
+
+static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *mon)
+{
+ if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_DODRIO)
+ return TRUE;
+ return FALSE;
+}
+
+static bool8 IsMonAllowedInMinigame(u8 slot)
+{
+ if (!((gPartyMenu.data1 >> slot) & 1))
+ return FALSE;
+ return TRUE;
+}
+
+static void TryEnterMonForMinigame(u8 taskId, u8 slot)
+{
+ if (IsMonAllowedInMinigame(slot) == TRUE)
+ {
+ PlaySE(SE_SELECT);
+ gSpecialVar_0x8004 = slot;
+ Task_ClosePartyMenu(taskId);
+ }
+ else
+ {
+ PlaySE(SE_HAZURE);
+ DisplayPartyMenuMessage(gText_PkmnCantParticipate, FALSE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ }
+}
+
+static void CancelParticipationPrompt(u8 taskId)
+{
+ DisplayPartyMenuMessage(gText_CancelParticipation, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_CancelParticipationYesNo;
+}
+
+static void Task_CancelParticipationYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleCancelParticipationYesNoInput;
+ }
+}
+
+static void Task_HandleCancelParticipationYesNoInput(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ gSpecialVar_0x8004 = PARTY_SIZE + 1;
+ Task_ClosePartyMenu(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ break;
+ }
+}
+
+static u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor)
+{
+ u16 move;
+
+ if (GetMonData(mon, MON_DATA_IS_EGG))
+ return CANNOT_LEARN_MOVE_IS_EGG;
+
+ if (item >= ITEM_TM01_FOCUS_PUNCH)
+ {
+ if (CanMonLearnTMHM(mon, item - ITEM_TM01_FOCUS_PUNCH))
+ move = ItemIdToBattleMoveId(item);
+ else
+ return CANNOT_LEARN_MOVE;
+ do
+ {
+ } while (0);
+ }
+ else if (CanLearnTutorMove(GetMonData(mon, MON_DATA_SPECIES), tutor) == FALSE)
+ {
+ return CANNOT_LEARN_MOVE;
+ }
+ else
+ {
+ move = GetTutorMove(tutor);
+ }
+ if (MonKnowsMove(mon, move) == TRUE)
+ return ALREADY_KNOWS_MOVE;
+ else
+ return CAN_LEARN_MOVE;
+}
+
+static u16 GetTutorMove(u8 tutor)
+{
+ switch (tutor)
+ {
+ case TUTOR_MOVE_FRENZY_PLANT:
+ return MOVE_FRENZY_PLANT;
+ case TUTOR_MOVE_BLAST_BURN:
+ return MOVE_BLAST_BURN;
+ case TUTOR_MOVE_HYDRO_CANNON:
+ return MOVE_HYDRO_CANNON;
+ default:
+ return sTutorMoves[tutor];
+ }
+}
+
+static bool8 CanLearnTutorMove(u16 species, u8 tutor)
+{
+ switch (tutor)
+ {
+ case TUTOR_MOVE_FRENZY_PLANT:
+ if (species == SPECIES_VENUSAUR)
+ return TRUE;
+ else
+ return FALSE;
+ case TUTOR_MOVE_BLAST_BURN:
+ if (species == SPECIES_CHARIZARD)
+ return TRUE;
+ else
+ return FALSE;
+ case TUTOR_MOVE_HYDRO_CANNON:
+ if (species == SPECIES_BLASTOISE)
+ return TRUE;
+ else
+ return FALSE;
+ default:
+ if (sTutorLearnsets[species] & (1 << tutor))
+ return TRUE;
+ else
+ return FALSE;
+ }
+}
+
+static void sub_8120C3C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = sub_8120C6C;
+}
+
+static void sub_8120C6C(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFF1FFF, 4, 0, 6, RGB_BLACK);
+ gTasks[taskId].func = sub_8120CA8;
+}
+
+static void sub_8120CA8(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = sub_8120CD8;
+}
+
+static void sub_8120CD8(u8 taskId)
+{
+ gTasks[taskId].data[0] = sub_81220D4();
+ gTasks[taskId].func = sub_8120D08;
+}
+
+static void sub_8120D08(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE)
+ gTasks[taskId].func = sub_8120D40;
+}
+
+static void sub_8120D40(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFF0008, 4, 6, 0, RGB_BLACK);
+ gTasks[taskId].func = sub_8120D7C;
+}
+
+static void sub_8120D7C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = sub_8120DAC;
+}
+
+static void sub_8120DAC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ sub_8122084(data[0], gUnknown_8417494);
+ gTasks[taskId].func = sub_8120DE0;
+}
+
+static void sub_8120DE0(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE)
+ {
+ sub_8122110((u8)data[0]);
+ gTasks[taskId].func = sub_8120E1C;
+ }
+}
+
+static void sub_8120E1C(u8 taskId)
+{
+ BeginNormalPaletteFade(0x0000FFF7, 4, 6, 0, RGB_BLACK);
+ gTasks[taskId].func = sub_8120E58;
+}
+
+static void sub_8120E58(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ TextWindow_SetUserSelectedFrame(0, 0x4F, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(0, 0x58, 0xF0);
+ if (gPartyMenu.action == PARTY_ACTION_USE_ITEM)
+ DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON);
+ else
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ }
+}
+
+static void sub_8120EBC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[0] = 0;
+ gTasks[taskId].func = sub_8120EE0;
+}
+
+static void sub_8120EE0(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active && sub_8120F78(taskId) != TRUE)
+ {
+ switch (data[0])
+ {
+ case 80:
+ UpdateCurrentPartySelection(&gPartyMenu.slotId, 2);
+ break;
+ case 160:
+ PlaySE(SE_SELECT);
+ CreateSelectionWindow();
+ break;
+ case 240:
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]);
+ sCursorOptions[sPartyMenuInternal->actions[0]].func(taskId);
+ break;
+ }
+ ++data[0];
+ }
+}
+
+static bool8 sub_8120F78(u8 taskId)
+{
+ if (JOY_NEW(B_BUTTON))
+ {
+ sPartyMenuInternal->exitCallback = sub_8120FB0;
+ Task_ClosePartyMenu(taskId);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_8120FB0(void)
+{
+ FreeRestoreBattleData();
+ LoadPlayerParty();
+ SetTeachyTvControllerModeToResume();
+ SetMainCallback2(CB2_ReturnToTeachyTV);
+}
+
+static void sub_8120FCC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[0] = 0;
+ gTasks[taskId].func = sub_8120FF0;
+}
+
+static void sub_8120FF0(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active && sub_8120F78(taskId) != TRUE)
+ {
+ if (data[0] != 80)
+ {
+ ++data[0];
+ }
+ else
+ {
+ sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen;
+ gItemUseCB(taskId, Task_ClosePartyMenuAfterText);
+ }
+ }
+}
+
+static void InitPartyMenuWindows(u8 layout)
+{
+ u8 i;
+
+ switch (layout)
+ {
+ case PARTY_LAYOUT_SINGLE:
+ InitWindows(sSinglePartyMenuWindowTemplate);
+ break;
+ case PARTY_LAYOUT_DOUBLE:
+ InitWindows(sDoublePartyMenuWindowTemplate);
+ break;
+ case PARTY_LAYOUT_MULTI:
+ InitWindows(sMultiPartyMenuWindowTemplate);
+ break;
+ default: // PARTY_LAYOUT_MULTI_SHOWCASE
+ InitWindows(sShowcaseMultiPartyMenuWindowTemplate);
+ break;
+ }
+ DeactivateAllTextPrinters();
+ for (i = 0; i < PARTY_SIZE; ++i)
+ FillWindowPixelBuffer(i, PIXEL_FILL(0));
+ TextWindow_SetUserSelectedFrame(0, 0x4F, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(0, 0x58, 0xF0);
+ LoadPalette(stdpal_get(2), 0xC0, 0x20);
+ LoadPalette(stdpal_get(0), 0xE0, 0x20);
+}
+
+static void CreateCancelConfirmWindows(bool8 chooseHalf)
+{
+ u8 confirmWindowId;
+ u8 cancelWindowId;
+ u8 offset;
+
+ if (gPartyMenu.menuType != PARTY_MENU_TYPE_MULTI_SHOWCASE)
+ {
+ if (chooseHalf == TRUE)
+ {
+ confirmWindowId = AddWindow(&sConfirmButtonWindowTemplate);
+ FillWindowPixelBuffer(confirmWindowId, PIXEL_FILL(0));
+ AddTextPrinterParameterized4(confirmWindowId, 0, (48 - GetStringWidth(0, gMenuText_Confirm, 0)) / 2u, 1, 0, 0, sFontColorTable[0], -1, gMenuText_Confirm);
+ PutWindowTilemap(confirmWindowId);
+ CopyWindowToVram(confirmWindowId, 2);
+ cancelWindowId = AddWindow(&sMultiCancelButtonWindowTemplate);
+ offset = 0;
+ }
+ else
+ {
+ cancelWindowId = AddWindow(&sCancelButtonWindowTemplate);
+ offset = 3;
+ }
+ FillWindowPixelBuffer(cancelWindowId, PIXEL_FILL(0));
+ // Branches are functionally identical. Second branch is never reached, Spin Trade wasnt fully implemented
+ if (gPartyMenu.menuType != PARTY_MENU_TYPE_SPIN_TRADE)
+ {
+ offset += (48 - GetStringWidth(0, gFameCheckerText_Cancel, 0)) / 2;
+ AddTextPrinterParameterized3(cancelWindowId, 0, offset, 1, sFontColorTable[0], -1, gFameCheckerText_Cancel);
+ }
+ else
+ {
+ offset += (48 - GetStringWidth(0, gOtherText_Exit, 0)) / 2;
+ AddTextPrinterParameterized3(cancelWindowId, 0, offset, 1, sFontColorTable[0], -1, gOtherText_Exit);
+ }
+ PutWindowTilemap(cancelWindowId);
+ CopyWindowToVram(cancelWindowId, 2);
+ ScheduleBgCopyTilemapToVram(0);
+ }
+}
+
+static u16 *GetPartyMenuPalBufferPtr(u8 paletteId)
+{
+ return &sPartyMenuInternal->palBuffer[paletteId];
+}
+
+static void BlitBitmapToPartyWindow(u8 windowId, const u8 *b, u8 c, u8 x, u8 y, u8 width, u8 height)
+{
+ u8 *pixels = AllocZeroed(height * width * 32);
+ u8 i, j;
+
+ if (pixels != NULL)
+ {
+ for (i = 0; i < height; ++i)
+ for (j = 0; j < width; ++j)
+ CpuCopy16(GetPartyMenuBgTile(b[x + j + ((y + i) * c)]), &pixels[(i * width + j) * 32], 32);
+ BlitBitmapToWindow(windowId, pixels, x * 8, y * 8, width * 8, height * 8);
+ Free(pixels);
+ }
+}
+
+static void BlitBitmapToPartyWindow_LeftColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg)
+{
+ if (width == 0 && height == 0)
+ {
+ width = 10;
+ height = 7;
+ }
+ if (!isEgg)
+ BlitBitmapToPartyWindow(windowId, sMainSlotTileNums, 10, x, y, width, height);
+ else
+ BlitBitmapToPartyWindow(windowId, sMainSlotTileNums_Egg, 10, x, y, width, height);
+}
+
+static void BlitBitmapToPartyWindow_RightColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg)
+{
+ if (width == 0 && height == 0)
+ {
+ width = 18;
+ height = 3;
+ }
+ if (!isEgg)
+ BlitBitmapToPartyWindow(windowId, sOtherSlotsTileNums, 18, x, y, width, height);
+ else
+ BlitBitmapToPartyWindow(windowId, sOtherSlotsTileNums_Egg, 18, x, y, width, height);
+}
+
+static void DrawEmptySlot(u8 windowId)
+{
+ BlitBitmapToPartyWindow(windowId, sEmptySlotTileNums, 18, 0, 0, 18, 3);
+}
+
+#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \
+{ \
+ LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palNum, 2); \
+ LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palNum, 2); \
+ LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palNum, 2); \
+}
+
+static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags)
+{
+ u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16;
+
+ if (palFlags & PARTY_PAL_TO_SOFTBOIL)
+ {
+ if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2);
+ }
+ }
+ else if (palFlags & PARTY_PAL_SWITCHING)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else if (palFlags & PARTY_PAL_TO_SWITCH)
+ {
+ if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2);
+ }
+ }
+ else if (palFlags & PARTY_PAL_FAINTED)
+ {
+ if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionFaintedPalIds, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxFaintedPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxFaintedPalIds2, sPartyBoxPalOffsets2);
+ }
+ }
+ else if (palFlags & PARTY_PAL_MULTI_ALT)
+ {
+ if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionMultiPalIds, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxMultiPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxMultiPalIds2, sPartyBoxPalOffsets2);
+ }
+ }
+ else if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxEmptySlotPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxEmptySlotPalIds2, sPartyBoxPalOffsets2);
+ }
+}
+
+static void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, const u8 *align)
+{
+ AddTextPrinterParameterized3(windowId, 0, align[0], align[1], sFontColorTable[color], 0, str);
+}
+
+static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ if (c == 1)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[0] >> 3, menuBox->infoRects->dimensions[1] >> 3, menuBox->infoRects->dimensions[2] >> 3, menuBox->infoRects->dimensions[3] >> 3, FALSE);
+ GetMonNickname(mon, nickname);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, nickname, 0, menuBox->infoRects->dimensions);
+ }
+}
+
+static void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ u8 ailment = GetMonAilment(mon);
+
+ if (ailment == AILMENT_NONE || ailment == AILMENT_PKRS)
+ {
+ if (c != 0)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[4] >> 3, (menuBox->infoRects->dimensions[5] >> 3) + 1, menuBox->infoRects->dimensions[6] >> 3, menuBox->infoRects->dimensions[7] >> 3, FALSE);
+ if (c != 2)
+ DisplayPartyPokemonLevel(GetMonData(mon, MON_DATA_LEVEL), menuBox);
+ }
+ }
+}
+
+static void DisplayPartyPokemonLevel(u8 level, struct PartyMenuBox *menuBox)
+{
+ ConvertIntToDecimalStringN(gStringVar2, level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(gStringVar1, gText_Lv);
+ StringAppend(gStringVar1, gStringVar2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[4]);
+}
+
+static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+
+ if (c == 1)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[8] >> 3, (menuBox->infoRects->dimensions[9] >> 3) + 1, menuBox->infoRects->dimensions[10] >> 3, menuBox->infoRects->dimensions[11] >> 3, FALSE);
+ GetMonNickname(mon, nickname);
+ DisplayPartyPokemonGender(GetMonGender(mon), GetMonData(mon, MON_DATA_SPECIES), nickname, menuBox);
+}
+
+static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox)
+{
+ u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16;
+
+ if (species == SPECIES_NONE)
+ return;
+ if ((species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F) && StringCompare(nickname, gSpeciesNames[species]) == 0)
+ return;
+ switch (gender)
+ {
+ case MON_MALE:
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palNum, 2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gText_MaleSymbol, 2, &menuBox->infoRects->dimensions[8]);
+ break;
+ case MON_FEMALE:
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palNum, 2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gText_FemaleSymbol, 2, &menuBox->infoRects->dimensions[8]);
+ break;
+ }
+}
+
+static void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ if (c != 0)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[12] >> 3, (menuBox->infoRects->dimensions[13] >> 3) + 1, menuBox->infoRects->dimensions[14] >> 3, menuBox->infoRects->dimensions[15] >> 3, FALSE);
+ if (c != 2)
+ DisplayPartyPokemonHP(GetMonData(mon, MON_DATA_HP), menuBox);
+ }
+}
+
+static void DisplayPartyPokemonHP(u16 hp, struct PartyMenuBox *menuBox)
+{
+ u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, STR_CONV_MODE_RIGHT_ALIGN, 3);
+
+ strOut[0] = CHAR_SLASH;
+ strOut[1] = EOS;
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[12]);
+}
+
+static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ if (c != 0)
+ menuBox->infoRects->blitFunc(menuBox->windowId, (menuBox->infoRects->dimensions[16] >> 3) + 1, (menuBox->infoRects->dimensions[17] >> 3) + 1, menuBox->infoRects->dimensions[18] >> 3, menuBox->infoRects->dimensions[19] >> 3, FALSE);
+ if (c != 2)
+ DisplayPartyPokemonMaxHP(GetMonData(mon, MON_DATA_MAX_HP), menuBox);
+ }
+}
+
+static void DisplayPartyPokemonMaxHP(u16 maxhp, struct PartyMenuBox *menuBox)
+{
+ ConvertIntToDecimalStringN(gStringVar2, maxhp, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ StringCopy(gStringVar1, gText_Slash);
+ StringAppend(gStringVar1, gStringVar2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[16]);
+}
+
+static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ DisplayPartyPokemonHPBar(GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP), menuBox);
+}
+
+static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox)
+{
+ u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16;
+ u8 hpFraction;
+
+ switch (GetHPBarLevel(hp, maxhp))
+ {
+ case HP_BAR_GREEN:
+ case HP_BAR_FULL:
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palNum, 2);
+ break;
+ case HP_BAR_YELLOW:
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palNum, 2);
+ break;
+ default:
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palNum, 2);
+ break;
+ }
+ hpFraction = GetScaledHPFraction(hp, maxhp, menuBox->infoRects->dimensions[22]);
+ FillWindowPixelRect(menuBox->windowId, sHPBarPalOffsets[1], menuBox->infoRects->dimensions[20], menuBox->infoRects->dimensions[21], hpFraction, 1);
+ FillWindowPixelRect(menuBox->windowId, sHPBarPalOffsets[0], menuBox->infoRects->dimensions[20], menuBox->infoRects->dimensions[21] + 1, hpFraction, 2);
+ if (hpFraction != menuBox->infoRects->dimensions[22])
+ {
+ // This appears to be an alternating fill
+ FillWindowPixelRect(menuBox->windowId, 0x0D, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21], menuBox->infoRects->dimensions[22] - hpFraction, 1);
+ FillWindowPixelRect(menuBox->windowId, 0x02, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21] + 1, menuBox->infoRects->dimensions[22] - hpFraction, 2);
+ }
+ CopyWindowToVram(menuBox->windowId, 2);
+}
+
+static void DisplayPartyPokemonDescriptionText(u8 stringId, struct PartyMenuBox *menuBox, u8 c)
+{
+ if (c != 0)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->descTextLeft >> 3, menuBox->infoRects->descTextTop >> 3, menuBox->infoRects->descTextWidth >> 3, menuBox->infoRects->descTextHeight >> 3, TRUE);
+ if (c != 2)
+ AddTextPrinterParameterized3(menuBox->windowId, 1, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringId]);
+}
+
+static void PartyMenuRemoveWindow(u8 *ptr)
+{
+ if (*ptr != 0xFF)
+ {
+ ClearStdWindowAndFrameToTransparent(*ptr, 0);
+ RemoveWindow(*ptr);
+ *ptr = 0xFF;
+ ScheduleBgCopyTilemapToVram(2);
+ }
+}
+
+void DisplayPartyMenuStdMessage(u32 stringId)
+{
+ u8 *windowPtr = &sPartyMenuInternal->windowId[1];
+
+ if (*windowPtr != 0xFF)
+ PartyMenuRemoveWindow(windowPtr);
+
+ if (stringId != PARTY_MSG_NONE)
+ {
+ switch (stringId)
+ {
+ case PARTY_MSG_DO_WHAT_WITH_MON:
+ *windowPtr = AddWindow(&sDoWhatWithMonMsgWindowTemplate);
+ break;
+ case PARTY_MSG_DO_WHAT_WITH_ITEM:
+ *windowPtr = AddWindow(&sDoWhatWithItemMsgWindowTemplate);
+ break;
+ case PARTY_MSG_DO_WHAT_WITH_MAIL:
+ *windowPtr = AddWindow(&sDoWhatWithMailMsgWindowTemplate);
+ break;
+ case PARTY_MSG_RESTORE_WHICH_MOVE:
+ case PARTY_MSG_BOOST_PP_WHICH_MOVE:
+ *windowPtr = AddWindow(&sWhichMoveMsgWindowTemplate);
+ break;
+ default:
+ *windowPtr = AddWindow(&sDefaultPartyMsgWindowTemplate);
+ break;
+ }
+
+ if (stringId == PARTY_MSG_CHOOSE_MON)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ stringId = PARTY_MSG_CHOOSE_MON_AND_CONFIRM;
+ else if (!ShouldUseChooseMonText())
+ stringId = PARTY_MSG_CHOOSE_MON_OR_CANCEL;
+ }
+ DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x58, 0xF);
+ StringExpandPlaceholders(gStringVar4, sActionStringTable[stringId]);
+ AddTextPrinterParameterized(*windowPtr, 2, gStringVar4, 0, 2, 0, 0);
+ ScheduleBgCopyTilemapToVram(2);
+ }
+}
+
+static bool8 ShouldUseChooseMonText(void)
+{
+ struct Pokemon *party = gPlayerParty;
+ u8 i;
+ u8 numAliveMons = 0;
+
+ if (gPartyMenu.action == PARTY_ACTION_SEND_OUT)
+ return TRUE;
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && (GetMonData(&party[i], MON_DATA_HP) != 0 || GetMonData(&party[i], MON_DATA_IS_EGG)))
+ ++numAliveMons;
+ if (numAliveMons > 1)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static u8 DisplaySelectionWindow(u8 windowType)
+{
+ struct WindowTemplate window;
+ u8 cursorDimension;
+ u8 fontAttribute;
+ u8 i;
+
+ switch (windowType)
+ {
+ case SELECTWINDOW_ACTIONS:
+ window = SetWindowTemplateFields(2, 19, 19 - (sPartyMenuInternal->numActions * 2), 10, sPartyMenuInternal->numActions * 2, 14, 0x2BF);
+ break;
+ case SELECTWINDOW_ITEM:
+ window = sItemGiveTakeWindowTemplate;
+ break;
+ case SELECTWINDOW_MAIL:
+ window = sMailReadTakeWindowTemplate;
+ break;
+ default: // SELECTWINDOW_MOVES
+ window = sMoveSelectWindowTemplate;
+ break;
+ }
+ sPartyMenuInternal->windowId[0] = AddWindow(&window);
+ DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13);
+ if (windowType == SELECTWINDOW_MOVES)
+ return sPartyMenuInternal->windowId[0];
+ cursorDimension = GetMenuCursorDimensionByFont(2, 0);
+ fontAttribute = GetFontAttribute(2, FONTATTR_LETTER_SPACING);
+ for (i = 0; i < sPartyMenuInternal->numActions; ++i)
+ {
+ u8 fontColorsId = (sPartyMenuInternal->actions[i] >= MENU_FIELD_MOVES) ? 4 : 3;
+
+ AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], 2, cursorDimension, (i * 16) + 2, fontAttribute, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text);
+ }
+ Menu_InitCursorInternal(sPartyMenuInternal->windowId[0], 2, 0, 2, 16, sPartyMenuInternal->numActions, 0, 1);
+ ScheduleBgCopyTilemapToVram(2);
+ return sPartyMenuInternal->windowId[0];
+}
+
+static void PartyMenuPrintText(const u8 *text)
+{
+ DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13);
+ gTextFlags.canABSpeedUpPrint = TRUE;
+ AddTextPrinterParameterized2(6, 2, text, GetTextSpeedSetting(), 0, 2, 1, 3);
+}
+
+static void PartyMenuDisplayYesNoMenu(void)
+{
+ CreateYesNoMenu(&sPartyMenuYesNoWindowTemplate, 2, 0, 2, 0x4F, 13, 0);
+}
+
+static u8 CreateLevelUpStatsWindow(void)
+{
+ sPartyMenuInternal->windowId[0] = AddWindow(&sLevelUpStatsWindowTemplate);
+ DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13);
+ return sPartyMenuInternal->windowId[0];
+}
+
+static void RemoveLevelUpStatsWindow(void)
+{
+ ClearWindowTilemap(sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+}
+
+static void sub_8122084(u8 windowId, const u8 *str)
+{
+ StringExpandPlaceholders(gStringVar4, str);
+ gTextFlags.canABSpeedUpPrint = TRUE;
+ AddTextPrinterParameterized2(windowId, 4, gStringVar4, GetTextSpeedSetting(), 0, 2, 1, 3);
+}
+
+static bool8 sub_81220D4(void)
+{
+ u8 windowId = AddWindow(&gUnknown_845A170);
+
+ TextWindow_LoadResourcesStdFrame0(windowId, 0x4F, 0xE0);
+ DrawDialogFrameWithCustomTileAndPalette(windowId, 1, 0x4F, 0xE);
+ sub_8122084(windowId, gUnknown_8417457);
+ return windowId;
+}
+
+static void sub_8122110(u8 windowId)
+{
+ ClearWindowTilemap(windowId);
+ ClearDialogWindowAndFrameToTransparent(windowId, FALSE);
+ RemoveWindow(windowId);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+static void sub_8122138(u8 action)
+{
+ u8 attr;
+ struct PartyMenuInternal *ptr = sPartyMenuInternal;
+
+ if (action <= 17)
+ {
+ if (ptr->windowId[2] != 0xFF)
+ {
+ ClearWindowTilemap(ptr->windowId[2]);
+ RemoveWindow(ptr->windowId[2]);
+ ptr->windowId[2] = 0xFF;
+ ScheduleBgCopyTilemapToVram(2);
+ }
+ }
+ else
+ {
+ if (ptr->windowId[2] == 0xFF)
+ ptr->windowId[2] = AddWindow(&gUnknown_845A178);
+ sub_8112F18(ptr->windowId[2]);
+ attr = GetFontAttribute(2, FONTATTR_LETTER_SPACING);
+ AddTextPrinterParameterized4(ptr->windowId[2], 2, 3, 6, attr, 0, sFontColorTable[5], 0, sHMDescriptionTable[action - MENU_FIELD_MOVES]);
+ PutWindowTilemap(ptr->windowId[2]);
+ ScheduleBgCopyTilemapToVram(2);
+ }
+}
+
+static void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox, u32 slot)
+{
+ bool32 handleDeoxys = TRUE;
+ u16 species2;
+
+ // If in a multi battle, show partners Deoxys icon as Normal forme
+ if (IsMultiBattle() == TRUE && gMain.inBattle)
+ handleDeoxys = (sMultiBattlePartnersPartyMask[slot] ^ handleDeoxys) ? TRUE : FALSE;
+ species2 = GetMonData(mon, MON_DATA_SPECIES2);
+ CreatePartyMonIconSpriteParameterized(species2, GetMonData(mon, MON_DATA_PERSONALITY), menuBox, 1, handleDeoxys);
+ UpdatePartyMonHPBar(menuBox->monSpriteId, mon);
+}
+
+static void CreatePartyMonIconSpriteParameterized(u16 species, u32 pid, struct PartyMenuBox *menuBox, u8 priority, bool32 handleDeoxys)
+{
+ if (species != SPECIES_NONE)
+ {
+ menuBox->monSpriteId = CreateMonIcon(species, SpriteCB_MonIcon, menuBox->spriteCoords[0], menuBox->spriteCoords[1], 4, pid, handleDeoxys);
+ gSprites[menuBox->monSpriteId].oam.priority = priority;
+ }
+}
+
+static void UpdateHPBar(u8 spriteId, u16 hp, u16 maxhp)
+{
+ switch (GetHPBarLevel(hp, maxhp))
+ {
+ case HP_BAR_FULL:
+ SetPartyHPBarSprite(&gSprites[spriteId], 0);
+ break;
+ case HP_BAR_GREEN:
+ SetPartyHPBarSprite(&gSprites[spriteId], 1);
+ break;
+ case HP_BAR_YELLOW:
+ SetPartyHPBarSprite(&gSprites[spriteId], 2);
+ break;
+ case HP_BAR_RED:
+ SetPartyHPBarSprite(&gSprites[spriteId], 3);
+ break;
+ default:
+ SetPartyHPBarSprite(&gSprites[spriteId], 4);
+ break;
+ }
+}
+
+static void UpdatePartyMonHPBar(u8 spriteId, struct Pokemon *mon)
+{
+ UpdateHPBar(spriteId, GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP));
+}
+
+static void AnimateSelectedPartyIcon(u8 spriteId, u8 animNum)
+{
+ gSprites[spriteId].data[0] = 0;
+ if (animNum == 0)
+ {
+ if (gSprites[spriteId].pos1.x == 16)
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = -4;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = -4;
+ gSprites[spriteId].pos2.y = 0;
+ }
+ gSprites[spriteId].callback = SpriteCB_UpdatePartyMonIcon;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ gSprites[spriteId].callback = SpriteCB_BouncePartyMonIcon;
+ }
+}
+
+static void SpriteCB_BouncePartyMonIcon(struct Sprite *sprite)
+{
+ u8 animCmd = UpdateMonIconFrame(sprite);
+
+ if (animCmd != 0)
+ {
+ if (animCmd & 1) // % 2 also matches
+ sprite->pos2.y = -3;
+ else
+ sprite->pos2.y = 1;
+ }
+}
+
+static void SpriteCB_UpdatePartyMonIcon(struct Sprite *sprite)
+{
+ UpdateMonIconFrame(sprite);
+}
+
+static void CreatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ menuBox->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, menuBox->spriteCoords[2], menuBox->spriteCoords[3], 0);
+ UpdatePartyMonHeldItemSprite(mon, menuBox);
+ }
+}
+
+static void CreatePartyMonHeldItemSpriteParameterized(u16 species, u16 item, struct PartyMenuBox *menuBox)
+{
+ if (species != SPECIES_NONE)
+ {
+ menuBox->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, menuBox->spriteCoords[2], menuBox->spriteCoords[3], 0);
+ gSprites[menuBox->itemSpriteId].oam.priority = 0;
+ ShowOrHideHeldItemSprite(item, menuBox);
+ }
+}
+
+static void UpdatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ ShowOrHideHeldItemSprite(GetMonData(mon, MON_DATA_HELD_ITEM), menuBox);
+}
+
+static void ShowOrHideHeldItemSprite(u16 item, struct PartyMenuBox *menuBox)
+{
+ if (item == ITEM_NONE)
+ {
+ gSprites[menuBox->itemSpriteId].invisible = TRUE;
+ }
+ else
+ {
+ if (ItemIsMail(item))
+ StartSpriteAnim(&gSprites[menuBox->itemSpriteId], 1);
+ else
+ StartSpriteAnim(&gSprites[menuBox->itemSpriteId], 0);
+ gSprites[menuBox->itemSpriteId].invisible = FALSE;
+ }
+}
+
+void LoadHeldItemIcons(void)
+{
+ LoadSpriteSheet(&sSpriteSheet_HeldItem);
+ LoadSpritePalette(&sSpritePalette_HeldItem);
+}
+
+void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty)
+{
+ u16 i;
+ u16 item;
+
+ switch (whichParty)
+ {
+ case TRADE_PLAYER:
+ for (i = 0; i < partyCounts[TRADE_PLAYER]; ++i)
+ {
+ item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ if (item != ITEM_NONE)
+ CreateHeldItemSpriteForTrade(partySpriteIds[i], ItemIsMail(item));
+ }
+ break;
+ case TRADE_PARTNER:
+ for (i = 0; i < partyCounts[TRADE_PARTNER]; ++i)
+ {
+ item = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM);
+ if (item != ITEM_NONE)
+ CreateHeldItemSpriteForTrade(partySpriteIds[i + PARTY_SIZE], ItemIsMail(item));
+ }
+ break;
+ }
+}
+
+static void CreateHeldItemSpriteForTrade(u8 spriteId, bool8 isMail)
+{
+ u8 subpriority = gSprites[spriteId].subpriority;
+ u8 newSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, 250, 170, subpriority - 1);
+
+ gSprites[newSpriteId].pos2.x = 4;
+ gSprites[newSpriteId].pos2.y = 10;
+ gSprites[newSpriteId].callback = SpriteCB_HeldItem;
+ gSprites[newSpriteId].data[7] = spriteId;
+ StartSpriteAnim(&gSprites[newSpriteId], isMail);
+ gSprites[newSpriteId].callback(&gSprites[newSpriteId]);
+}
+
+static void SpriteCB_HeldItem(struct Sprite *sprite)
+{
+ u8 otherSpriteId = sprite->data[7];
+
+ if (gSprites[otherSpriteId].invisible)
+ {
+ sprite->invisible = TRUE;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ sprite->pos1.x = gSprites[otherSpriteId].pos1.x + gSprites[otherSpriteId].pos2.x;
+ sprite->pos1.y = gSprites[otherSpriteId].pos1.y + gSprites[otherSpriteId].pos2.y;
+ }
+}
+
+static void CreatePartyMonPokeballSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ menuBox->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, menuBox->spriteCoords[6], menuBox->spriteCoords[7], 8);
+}
+
+static void CreatePartyMonPokeballSpriteParameterized(u16 species, struct PartyMenuBox *menuBox)
+{
+ if (species != SPECIES_NONE)
+ {
+ menuBox->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, menuBox->spriteCoords[6], menuBox->spriteCoords[7], 8);
+ gSprites[menuBox->pokeballSpriteId].oam.priority = 0;
+ }
+}
+
+// For Cancel when Confirm isnt present
+static u8 CreatePokeballButtonSprite(u8 x, u8 y)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, x, y, 8);
+
+ gSprites[spriteId].oam.priority = 2;
+ return spriteId;
+}
+
+// For Confirm and Cancel when both are present
+static u8 CreateSmallPokeballButtonSprite(u8 x, u8 y)
+{
+ return CreateSprite(&sSpriteTemplate_MenuPokeballSmall, x, y, 8);
+}
+
+static void PartyMenuStartSpriteAnim(u8 spriteId, u8 animNum)
+{
+ StartSpriteAnim(&gSprites[spriteId], animNum);
+}
+
+// Unused. Might explain the large blank section in gPartyMenuPokeballSmall_Gfx
+// At the very least this is how the unused anim cmds for sSpriteAnimTable_MenuPokeballSmall were meant to be accessed
+void SpriteCB_BounceConfirmCancelButton(u8 spriteId, u8 spriteId2, u8 animNum)
+{
+ if (animNum == 0)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 2);
+ StartSpriteAnim(&gSprites[spriteId2], 4);
+ gSprites[spriteId].pos2.y = 0;
+ gSprites[spriteId2].pos2.y = 0;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], 3);
+ StartSpriteAnim(&gSprites[spriteId2], 5);
+ gSprites[spriteId].pos2.y = -4;
+ gSprites[spriteId2].pos2.y = 4;
+ }
+}
+
+static void LoadPartyMenuPokeballGfx(void)
+{
+ LoadCompressedSpriteSheet(&sSpriteSheet_MenuPokeball);
+ LoadCompressedSpriteSheet(&sSpriteSheet_MenuPokeballSmall);
+ LoadCompressedSpritePalette(&sSpritePalette_MenuPokeball);
+}
+
+static void CreatePartyMonStatusSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ menuBox->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, menuBox->spriteCoords[4], menuBox->spriteCoords[5], 0);
+ SetPartyMonAilmentGfx(mon, menuBox);
+ }
+}
+
+static void CreatePartyMonStatusSpriteParameterized(u16 species, u8 status, struct PartyMenuBox *menuBox)
+{
+ if (species != SPECIES_NONE)
+ {
+ menuBox->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, menuBox->spriteCoords[4], menuBox->spriteCoords[5], 0);
+ UpdatePartyMonAilmentGfx(status, menuBox);
+ gSprites[menuBox->statusSpriteId].oam.priority = 0;
+ }
+}
+
+static void SetPartyMonAilmentGfx(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ UpdatePartyMonAilmentGfx(GetMonAilment(mon), menuBox);
+}
+
+static void UpdatePartyMonAilmentGfx(u8 status, struct PartyMenuBox *menuBox)
+{
+ switch (status)
+ {
+ case AILMENT_NONE:
+ case AILMENT_PKRS:
+ gSprites[menuBox->statusSpriteId].invisible = TRUE;
+ break;
+ default:
+ StartSpriteAnim(&gSprites[menuBox->statusSpriteId], status - 1);
+ gSprites[menuBox->statusSpriteId].invisible = FALSE;
+ break;
+ }
+}
+
+static void LoadPartyMenuAilmentGfx(void)
+{
+ LoadCompressedSpriteSheet(&sSpriteSheet_StatusIcons);
+ LoadCompressedSpritePalette(&sSpritePalette_StatusIcons);
+}
+
+static void SetPartyMonSelectionActions(struct Pokemon *mons, u8 slotId, u8 action)
+{
+ u8 i;
+
+ if (action == ACTIONS_NONE)
+ {
+ SetPartyMonFieldSelectionActions(mons, slotId);
+ }
+ else
+ {
+ sPartyMenuInternal->numActions = sPartyMenuActionCounts[action];
+ for (i = 0; i < sPartyMenuInternal->numActions; ++i)
+ sPartyMenuInternal->actions[i] = sPartyMenuActions[action][i];
+ }
+}
+
+static void SetPartyMonFieldSelectionActions(struct Pokemon *mons, u8 slotId)
+{
+ u8 i, j;
+
+ sPartyMenuInternal->numActions = 0;
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_SUMMARY);
+ // Add field moves to action list
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ for (j = 0; sFieldMoves[j] != FIELD_MOVE_END; ++j)
+ {
+ if (GetMonData(&mons[slotId], i + MON_DATA_MOVE1) == sFieldMoves[j])
+ {
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, j + MENU_FIELD_MOVES);
+ break;
+ }
+ }
+ }
+ if (GetMonData(&mons[1], MON_DATA_SPECIES) != SPECIES_NONE)
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_SWITCH);
+ if (ItemIsMail(GetMonData(&mons[slotId], MON_DATA_HELD_ITEM)))
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_MAIL);
+ else
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_ITEM);
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_CANCEL1);
+}
+
+static u8 GetPartyMenuActionsType(struct Pokemon *mon)
+{
+ u32 actionType;
+
+ switch (gPartyMenu.menuType)
+ {
+ case PARTY_MENU_TYPE_FIELD:
+ if (GetMonData(mon, MON_DATA_IS_EGG))
+ actionType = ACTIONS_SWITCH;
+ else
+ actionType = ACTIONS_NONE; // actions populated by SetPartyMonFieldSelectionActions
+ break;
+ case PARTY_MENU_TYPE_IN_BATTLE:
+ actionType = GetPartyMenuActionsTypeInBattle(mon);
+ break;
+ case PARTY_MENU_TYPE_CHOOSE_HALF:
+ switch (GetPartySlotEntryStatus(gPartyMenu.slotId))
+ {
+ default: // Not eligible
+ actionType = ACTIONS_SUMMARY_ONLY;
+ break;
+ case 0: // Eligible
+ actionType = ACTIONS_ENTER;
+ break;
+ case 1: // Already selected
+ actionType = ACTIONS_NO_ENTRY;
+ break;
+ }
+ break;
+ case PARTY_MENU_TYPE_DAYCARE:
+ actionType = (GetMonData(mon, MON_DATA_IS_EGG)) ? ACTIONS_SUMMARY_ONLY : ACTIONS_STORE;
+ break;
+ case PARTY_MENU_TYPE_UNION_ROOM_REGISTER:
+ actionType = ACTIONS_REGISTER;
+ break;
+ case PARTY_MENU_TYPE_UNION_ROOM_TRADE:
+ actionType = ACTIONS_TRADE;
+ break;
+ case PARTY_MENU_TYPE_SPIN_TRADE:
+ actionType = ACTIONS_SPIN_TRADE;
+ break;
+ // The following have no selection actions (i.e. they exit immediately upon selection)
+ // PARTY_MENU_TYPE_CONTEST
+ // PARTY_MENU_TYPE_CHOOSE_MON
+ // PARTY_MENU_TYPE_MULTI_SHOWCASE
+ // PARTY_MENU_TYPE_MOVE_RELEARNER
+ // PARTY_MENU_TYPE_MINIGAME
+ default:
+ actionType = ACTIONS_NONE;
+ break;
+ }
+ return actionType;
+}
+
+static void CreateSelectionWindow(void)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+
+ GetMonNickname(mon, gStringVar1);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon));
+ DisplaySelectionWindow(SELECTWINDOW_ACTIONS);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MON);
+}
+
+static void Task_TryCreateSelectionWindow(u8 taskId)
+{
+ CreateSelectionWindow();
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
+}
+
+static void Task_HandleSelectionMenuInput(u8 taskId)
+{
+ if (!gPaletteFade.active && sub_80BF748() != TRUE)
+ {
+ s8 input;
+ s16 *data = gTasks[taskId].data;
+
+ if (sPartyMenuInternal->numActions <= 3)
+ input = Menu_ProcessInputNoWrapAround_other();
+ else
+ input = Menu_ProcessInput_other();
+ if (data[0] != Menu_GetCursorPos())
+ sub_8122138(sPartyMenuInternal->actions[Menu_GetCursorPos()]);
+ data[0] = Menu_GetCursorPos();
+ switch (input)
+ {
+ case MENU_NOTHING_CHOSEN:
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]);
+ sCursorOptions[sPartyMenuInternal->actions[sPartyMenuInternal->numActions - 1]].func(taskId);
+ break;
+ default:
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]);
+ sCursorOptions[sPartyMenuInternal->actions[input]].func(taskId);
+ break;
+ }
+ }
+}
+
+static void CursorCB_Summary(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sPartyMenuInternal->exitCallback = CB2_ShowPokemonSummaryScreen;
+ Task_ClosePartyMenu(taskId);
+}
+
+static void CB2_ShowPokemonSummaryScreen(void)
+{
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ UpdatePartyToBattleOrder();
+ ShowPokemonSummaryScreen(gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen, 0);
+}
+
+static void CB2_ReturnToPartyMenuFromSummaryScreen(void)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gPartyMenu.slotId = GetLastViewedMonIndex();
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_DO_WHAT_WITH_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
+}
+
+static void CursorCB_Switch(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ gPartyMenu.action = PARTY_ACTION_SWITCH;
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ DisplayPartyMenuStdMessage(PARTY_MSG_MOVE_TO_WHERE);
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ gPartyMenu.slotId2 = gPartyMenu.slotId;
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+}
+
+#define tSlot1Left data[0]
+#define tSlot1Top data[1]
+#define tSlot1Width data[2]
+#define tSlot1Height data[3]
+#define tSlot2Left data[4]
+#define tSlot2Top data[5]
+#define tSlot2Width data[6]
+#define tSlot2Height data[7]
+#define tSlot1Offset data[8]
+#define tSlot2Offset data[9]
+#define tSlot1SlideDir data[10]
+#define tSlot2SlideDir data[11]
+
+static void SwitchSelectedMons(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 windowIds[2];
+
+ if (gPartyMenu.slotId2 == gPartyMenu.slotId)
+ {
+ FinishTwoMonAction(taskId);
+ }
+ else
+ {
+ // Initialize switching party mons slide animation
+ sub_812358C();
+ windowIds[0] = sPartyMenuBoxes[gPartyMenu.slotId].windowId;
+ tSlot1Left = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_LEFT);
+ tSlot1Top = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_TOP);
+ tSlot1Width = GetWindowAttribute(windowIds[0], WINDOW_WIDTH);
+ tSlot1Height = GetWindowAttribute(windowIds[0], WINDOW_HEIGHT);
+ tSlot1Offset = 0;
+ if (tSlot1Width == 10)
+ tSlot1SlideDir = -1;
+ else
+ tSlot1SlideDir = 1;
+ windowIds[1] = sPartyMenuBoxes[gPartyMenu.slotId2].windowId;
+ tSlot2Left = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_LEFT);
+ tSlot2Top = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_TOP);
+ tSlot2Width = GetWindowAttribute(windowIds[1], WINDOW_WIDTH);
+ tSlot2Height = GetWindowAttribute(windowIds[1], WINDOW_HEIGHT);
+ tSlot2Offset = 0;
+ if (tSlot2Width == 10)
+ tSlot2SlideDir = -1;
+ else
+ tSlot2SlideDir = 1;
+ sSlot1TilemapBuffer = Alloc(tSlot1Width * (tSlot1Height << 1));
+ sSlot2TilemapBuffer = Alloc(tSlot2Width * (tSlot2Height << 1));
+ CopyToBufferFromBgTilemap(0, sSlot1TilemapBuffer, tSlot1Left, tSlot1Top, tSlot1Width, tSlot1Height);
+ CopyToBufferFromBgTilemap(0, sSlot2TilemapBuffer, tSlot2Left, tSlot2Top, tSlot2Width, tSlot2Height);
+ ClearWindowTilemap(windowIds[0]);
+ ClearWindowTilemap(windowIds[1]);
+ gPartyMenu.action = PARTY_ACTION_SWITCHING;
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ AnimatePartySlot(gPartyMenu.slotId2, 1);
+ SlidePartyMenuBoxOneStep(taskId);
+ gTasks[taskId].func = Task_SlideSelectedSlotsOffscreen;
+ }
+}
+
+// returns FALSE if the slot has slid fully offscreen / back onscreen
+static bool8 TryMovePartySlot(s16 x, s16 width, u8 *leftMove, u8 *newX, u8 *newWidth)
+{
+ if ((x + width) < 0)
+ return FALSE;
+ if (x > 31)
+ return FALSE;
+ if (x < 0)
+ {
+ *leftMove = x * -1;
+ *newX = 0;
+ *newWidth = width + x;
+ }
+ else
+ {
+ *leftMove = 0;
+ *newX = x;
+ if ((x + width) > 31)
+ *newWidth = 32 - x;
+ else
+ *newWidth = width;
+ }
+ return TRUE;
+}
+
+static void MoveAndBufferPartySlot(const void *rectSrc, s16 x, s16 y, s16 width, s16 height, s16 dir)
+{
+ // The use of the dimension parameters here is a mess
+ u8 leftMove, newX, newWidth; // leftMove is used as a srcX, newX is used as both x and srcHeight, newWidth is used as both width and destY
+
+ if (TryMovePartySlot(x, width, &leftMove, &newX, &newWidth))
+ {
+ FillBgTilemapBufferRect_Palette0(0, 0, newX, y, newWidth, height);
+ if (TryMovePartySlot(x + dir, width, &leftMove, &newX, &newWidth))
+ CopyRectToBgTilemapBufferRect(0, rectSrc, leftMove, 0, width, height, newX, y, newWidth, height, 17, 0, 0);
+ }
+}
+
+static void MovePartyMenuBoxSprites(struct PartyMenuBox *menuBox, s16 offset)
+{
+ gSprites[menuBox->pokeballSpriteId].pos2.x += offset * 8;
+ gSprites[menuBox->itemSpriteId].pos2.x += offset * 8;
+ gSprites[menuBox->monSpriteId].pos2.x += offset * 8;
+ gSprites[menuBox->statusSpriteId].pos2.x += offset * 8;
+}
+
+static void SlidePartyMenuBoxSpritesOneStep(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (tSlot1SlideDir != 0)
+ MovePartyMenuBoxSprites(&sPartyMenuBoxes[gPartyMenu.slotId], tSlot1SlideDir);
+ if (tSlot2SlideDir != 0)
+ MovePartyMenuBoxSprites(&sPartyMenuBoxes[gPartyMenu.slotId2], tSlot2SlideDir);
+}
+
+static void SlidePartyMenuBoxOneStep(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (tSlot1SlideDir != 0)
+ MoveAndBufferPartySlot(sSlot1TilemapBuffer, tSlot1Left + tSlot1Offset, tSlot1Top, tSlot1Width, tSlot1Height, tSlot1SlideDir);
+ if (tSlot2SlideDir != 0)
+ MoveAndBufferPartySlot(sSlot2TilemapBuffer, tSlot2Left + tSlot2Offset, tSlot2Top, tSlot2Width, tSlot2Height, tSlot2SlideDir);
+ ScheduleBgCopyTilemapToVram(0);
+}
+
+static void Task_SlideSelectedSlotsOffscreen(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u16 slidingSlotPositions[2];
+
+ SlidePartyMenuBoxOneStep(taskId);
+ SlidePartyMenuBoxSpritesOneStep(taskId);
+ tSlot1Offset += tSlot1SlideDir;
+ tSlot2Offset += tSlot2SlideDir;
+ slidingSlotPositions[0] = tSlot1Left + tSlot1Offset;
+ slidingSlotPositions[1] = tSlot2Left + tSlot2Offset;
+ // Both slots have slid offscreen
+ if (slidingSlotPositions[0] > 33 && slidingSlotPositions[1] > 33)
+ {
+ tSlot1SlideDir *= -1;
+ tSlot2SlideDir *= -1;
+ SwitchPartyMon();
+ DisplayPartyPokemonData(gPartyMenu.slotId);
+ DisplayPartyPokemonData(gPartyMenu.slotId2);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
+ CopyToBufferFromBgTilemap(0, sSlot1TilemapBuffer, tSlot1Left, tSlot1Top, tSlot1Width, tSlot1Height);
+ CopyToBufferFromBgTilemap(0, sSlot2TilemapBuffer, tSlot2Left, tSlot2Top, tSlot2Width, tSlot2Height);
+ ClearWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
+ ClearWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
+ gTasks[taskId].func = Task_SlideSelectedSlotsOnscreen;
+ }
+}
+
+static void Task_SlideSelectedSlotsOnscreen(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ SlidePartyMenuBoxOneStep(taskId);
+ SlidePartyMenuBoxSpritesOneStep(taskId);
+
+ // Both slots have slide back onscreen
+ if (tSlot1SlideDir == 0 && tSlot2SlideDir == 0)
+ {
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
+ ScheduleBgCopyTilemapToVram(0);
+ // BUG: memory leak
+ // Free(sSlot1TilemapBuffer);
+ // Free(sSlot2TilemapBuffer);
+ FinishTwoMonAction(taskId);
+ }
+ // Continue sliding
+ else
+ {
+ tSlot1Offset += tSlot1SlideDir;
+ tSlot2Offset += tSlot2SlideDir;
+ if (tSlot1Offset == 0)
+ tSlot1SlideDir = 0;
+ if (tSlot2Offset == 0)
+ tSlot2SlideDir = 0;
+ }
+}
+
+static void SwitchMenuBoxSprites(u8 *spriteIdPtr1, u8 *spriteIdPtr2)
+{
+ u8 spriteIdBuffer = *spriteIdPtr1;
+ u16 xBuffer1, yBuffer1, xBuffer2, yBuffer2;
+
+ *spriteIdPtr1 = *spriteIdPtr2;
+ *spriteIdPtr2 = spriteIdBuffer;
+ xBuffer1 = gSprites[*spriteIdPtr1].pos1.x;
+ yBuffer1 = gSprites[*spriteIdPtr1].pos1.y;
+ xBuffer2 = gSprites[*spriteIdPtr1].pos2.x;
+ yBuffer2 = gSprites[*spriteIdPtr1].pos2.y;
+ gSprites[*spriteIdPtr1].pos1.x = gSprites[*spriteIdPtr2].pos1.x;
+ gSprites[*spriteIdPtr1].pos1.y = gSprites[*spriteIdPtr2].pos1.y;
+ gSprites[*spriteIdPtr1].pos2.x = gSprites[*spriteIdPtr2].pos2.x;
+ gSprites[*spriteIdPtr1].pos2.y = gSprites[*spriteIdPtr2].pos2.y;
+ gSprites[*spriteIdPtr2].pos1.x = xBuffer1;
+ gSprites[*spriteIdPtr2].pos1.y = yBuffer1;
+ gSprites[*spriteIdPtr2].pos2.x = xBuffer2;
+ gSprites[*spriteIdPtr2].pos2.y = yBuffer2;
+}
+
+static void SwitchPartyMon(void)
+{
+ struct PartyMenuBox *menuBoxes[2];
+ struct Pokemon *mon1, *mon2;
+ struct Pokemon *monBuffer;
+
+ menuBoxes[0] = &sPartyMenuBoxes[gPartyMenu.slotId];
+ menuBoxes[1] = &sPartyMenuBoxes[gPartyMenu.slotId2];
+ mon1 = &gPlayerParty[gPartyMenu.slotId];
+ mon2 = &gPlayerParty[gPartyMenu.slotId2];
+ monBuffer = Alloc(sizeof(struct Pokemon));
+ *monBuffer = *mon1;
+ *mon1 = *mon2;
+ *mon2 = *monBuffer;
+ Free(monBuffer);
+ SwitchMenuBoxSprites(&menuBoxes[0]->pokeballSpriteId, &menuBoxes[1]->pokeballSpriteId);
+ SwitchMenuBoxSprites(&menuBoxes[0]->itemSpriteId, &menuBoxes[1]->itemSpriteId);
+ SwitchMenuBoxSprites(&menuBoxes[0]->monSpriteId, &menuBoxes[1]->monSpriteId);
+ SwitchMenuBoxSprites(&menuBoxes[0]->statusSpriteId, &menuBoxes[1]->statusSpriteId);
+}
+
+static void sub_812358C(void)
+{
+ u16 *buffer = Alloc(2 * sizeof(u16));
+
+ buffer[0] = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
+ buffer[1] = GetMonData(&gPlayerParty[gPartyMenu.slotId2], MON_DATA_SPECIES2);
+ sub_8113550(3, buffer);
+ Free(buffer);
+}
+
+// Finish switching mons or using Softboiled
+static void FinishTwoMonAction(u8 taskId)
+{
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ gPartyMenu.action = PARTY_ACTION_CHOOSE_MON;
+ AnimatePartySlot(gPartyMenu.slotId, 0);
+ gPartyMenu.slotId = gPartyMenu.slotId2;
+ AnimatePartySlot(gPartyMenu.slotId2, 1);
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+}
+
+#undef tSlot1Left
+#undef tSlot1Top
+#undef tSlot1Width
+#undef tSlot1Height
+#undef tSlot2Left
+#undef tSlot2Top
+#undef tSlot2Width
+#undef tSlot2Height
+#undef tSlot1Offset
+#undef tSlot2Offset
+#undef tSlot1SlideDir
+#undef tSlot2SlideDir
+
+static void CursorCB_Cancel1(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_DAYCARE)
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON_2);
+ else
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+}
+
+static void CursorCB_Item(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_ITEM);
+ DisplaySelectionWindow(SELECTWINDOW_ITEM);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_ITEM);
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
+}
+
+static void CursorCB_Give(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sPartyMenuInternal->exitCallback = CB2_SelectBagItemToGive;
+ Task_ClosePartyMenu(taskId);
+}
+
+void CB2_SelectBagItemToGive(void)
+{
+ GoToBagMenu(1, 3, CB2_GiveHoldItem);
+}
+
+void CB2_GiveHoldItem(void)
+{
+ if (gSpecialVar_ItemId == ITEM_NONE)
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
+ }
+ else
+ {
+ sPartyMenuItemId = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM);
+ // Already holding item
+ if (sPartyMenuItemId != ITEM_NONE)
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_SwitchHoldItemsPrompt, gPartyMenu.exitCallback);
+ }
+ // Give mail
+ else if (ItemIsMail(gSpecialVar_ItemId))
+ {
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId);
+ CB2_WriteMailToGiveMon();
+ }
+ // Give item
+ else
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_GiveHoldItem, gPartyMenu.exitCallback);
+ }
+ }
+}
+
+static void Task_GiveHoldItem(u8 taskId)
+{
+ u16 item;
+
+ if (!gPaletteFade.active)
+ {
+ item = gSpecialVar_ItemId;
+ DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], item, FALSE, 0);
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item);
+ RemoveBagItem(item, 1);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
+ }
+}
+
+static void Task_SwitchHoldItemsPrompt(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ DisplayAlreadyHoldingItemSwitchMessage(&gPlayerParty[gPartyMenu.slotId], sPartyMenuItemId, TRUE);
+ gTasks[taskId].func = Task_SwitchItemsYesNo;
+ }
+}
+
+static void Task_SwitchItemsYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleSwitchItemsYesNoInput;
+ }
+}
+
+static void Task_HandleSwitchItemsYesNoInput(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0: // Yes, switch items
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+
+ // No room to return held item to bag
+ if (AddBagItem(sPartyMenuItemId, 1) == FALSE)
+ {
+ AddBagItem(gSpecialVar_ItemId, 1);
+ BufferBagFullCantTakeItemMessage(sPartyMenuItemId);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ }
+ // Giving mail
+ else if (ItemIsMail(gSpecialVar_ItemId))
+ {
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId);
+ gTasks[taskId].func = Task_WriteMailToGiveMonAfterText;
+ }
+ // Giving item
+ else
+ {
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId);
+ DisplaySwitchedHeldItemMessage(gSpecialVar_ItemId, sPartyMenuItemId, TRUE);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1: // No
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ break;
+ }
+}
+
+static void Task_WriteMailToGiveMonAfterText(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMon;
+ Task_ClosePartyMenu(taskId);
+ }
+}
+
+static void CB2_WriteMailToGiveMon(void)
+{
+ u8 mail = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL);
+
+ DoEasyChatScreen(EASY_CHAT_TYPE_MAIL,
+ gSaveBlock1Ptr->mail[mail].words,
+ CB2_ReturnToPartyMenuFromWritingMail);
+}
+
+static void CB2_ReturnToPartyMenuFromWritingMail(void)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ // Canceled writing mail
+ if (gSpecialVar_Result == FALSE)
+ {
+ TakeMailFromMon(mon);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &sPartyMenuItemId);
+ RemoveBagItem(sPartyMenuItemId, 1);
+ AddBagItem(item, 1);
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_CHOOSE_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
+ }
+ // Wrote mail
+ else
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_CHOOSE_MON, Task_DisplayGaveMailFromPartyMessage, gPartyMenu.exitCallback);
+ }
+}
+
+// Nearly redundant with Task_DisplayGaveMailFromBagMessgae
+static void Task_DisplayGaveMailFromPartyMessage(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (sPartyMenuItemId == ITEM_NONE)
+ DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId, FALSE, 0);
+ else
+ DisplaySwitchedHeldItemMessage(gSpecialVar_ItemId, sPartyMenuItemId, FALSE);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
+ }
+}
+
+static void Task_UpdateHeldItemSprite(u8 taskId)
+{
+ s8 slotId = gPartyMenu.slotId;
+
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ UpdatePartyMonHeldItemSprite(&gPlayerParty[slotId], &sPartyMenuBoxes[slotId]);
+ Task_ReturnToChooseMonAfterText(taskId);
+ }
+}
+
+static void CursorCB_TakeItem(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ switch (TryTakeMonItem(mon))
+ {
+ case 0: // Not holding item
+ GetMonNickname(mon, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ break;
+ case 1: // No room to take item
+ BufferBagFullCantTakeItemMessage(item);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ break;
+ default: // Took item
+ DisplayTookHeldItemMessage(mon, item, TRUE);
+ break;
+ }
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
+}
+
+static void CursorCB_Mail(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_MAIL);
+ DisplaySelectionWindow(SELECTWINDOW_MAIL);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MAIL);
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
+}
+
+static void CursorCB_Read(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sPartyMenuInternal->exitCallback = CB2_ReadHeldMail;
+ Task_ClosePartyMenu(taskId);
+}
+
+static void CB2_ReadHeldMail(void)
+{
+ ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL)], CB2_ReturnToPartyMenuFromReadingMail, 1);
+}
+
+static void CB2_ReturnToPartyMenuFromReadingMail(void)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_DO_WHAT_WITH_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
+}
+
+static void CursorCB_TakeMail(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ DisplayPartyMenuMessage(gText_SendMailToPC, TRUE);
+ gTasks[taskId].func = Task_SendMailToPCYesNo;
+}
+
+static void Task_SendMailToPCYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleSendMailToPCYesNoInput;
+ }
+}
+
+static void Task_HandleSendMailToPCYesNoInput(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0: // Yes, send to PC
+ if (TakeMailFromMon2(&gPlayerParty[gPartyMenu.slotId]) != 0xFF)
+ {
+ DisplayPartyMenuMessage(gText_MailSentToPC, FALSE);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
+ }
+ else
+ {
+ DisplayPartyMenuMessage(gText_PCMailboxFull, FALSE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
+ DisplayPartyMenuMessage(gText_MailMessageWillBeLost, TRUE);
+ gTasks[taskId].func = Task_LoseMailMessageYesNo;
+ break;
+ }
+}
+
+static void Task_LoseMailMessageYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleLoseMailMessageYesNoInput;
+ }
+}
+
+static void Task_HandleLoseMailMessageYesNoInput(u8 taskId)
+{
+ u16 item;
+
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0: // Yes, lose mail message
+ item = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM);
+ if (AddBagItem(item, 1) == TRUE)
+ {
+ TakeMailFromMon(&gPlayerParty[gPartyMenu.slotId]);
+ DisplayPartyMenuMessage(gText_MailTakenFromPkmn, FALSE);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
+ }
+ else
+ {
+ BufferBagFullCantTakeItemMessage(item);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ break;
+ }
+}
+
+static void CursorCB_Cancel2(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon));
+ DisplaySelectionWindow(SELECTWINDOW_ACTIONS);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MON);
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
+}
+
+static void CursorCB_SendMon(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ if (TrySwitchInPokemon() == TRUE)
+ {
+ Task_ClosePartyMenu(taskId);
+ }
+ else
+ {
+ // gStringVar4 below is the error message buffered by TrySwitchInPokemon
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ }
+}
+
+static void CursorCB_Enter(u8 taskId)
+{
+ u8 maxBattlers;
+ u8 i;
+ const u8 *str;
+
+ if (gPartyMenu.unk_8_6 == 2)
+ {
+ maxBattlers = 2;
+ str = gUnknown_8416B3E;
+ }
+ else
+ {
+ maxBattlers = 3;
+ str = gUnknown_8416B16;
+ }
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ for (i = 0; i < maxBattlers; ++i)
+ {
+ if (gSelectedOrderFromParty[i] == 0)
+ {
+ PlaySE(SE_SELECT);
+ gSelectedOrderFromParty[i] = gPartyMenu.slotId + 1;
+ DisplayPartyPokemonDescriptionText(i + PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
+ if (i == (maxBattlers - 1))
+ MoveCursorToConfirm();
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ return;
+ }
+ }
+ PlaySE(SE_HAZURE);
+ DisplayPartyMenuMessage(str, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+}
+
+static void MoveCursorToConfirm(void)
+{
+ AnimatePartySlot(gPartyMenu.slotId, 0);
+ gPartyMenu.slotId = PARTY_SIZE;
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+}
+
+static void CursorCB_NoEntry(u8 taskId)
+{
+ u8 i;
+
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ for (i = 0; i < 3; ++i)
+ {
+ if (gSelectedOrderFromParty[i] == gPartyMenu.slotId + 1)
+ {
+ gSelectedOrderFromParty[i] = 0;
+ switch (i)
+ {
+ case 0:
+ gSelectedOrderFromParty[0] = gSelectedOrderFromParty[1];
+ gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2];
+ gSelectedOrderFromParty[2] = 0;
+ break;
+ case 1:
+ gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2];
+ gSelectedOrderFromParty[2] = 0;
+ break;
+ }
+ break;
+ }
+ }
+ DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_ABLE_3, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
+ if (gSelectedOrderFromParty[0] != 0)
+ DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gSelectedOrderFromParty[0] - 1], 1);
+ if (gSelectedOrderFromParty[1] != 0)
+ DisplayPartyPokemonDescriptionText(1 + PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gSelectedOrderFromParty[1] - 1], 1);
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+}
+
+static void CursorCB_Store(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ gSpecialVar_0x8004 = gPartyMenu.slotId;
+ Task_ClosePartyMenu(taskId);
+}
+
+// Register mon for the Trading Board in Union Room
+static void CursorCB_Register(u8 taskId)
+{
+ u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
+ u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
+ u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
+
+ switch (CanRegisterMonForTradingBoard(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_80F9800(), species2, species, obedience))
+ {
+ case CANT_REGISTER_MON:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
+ break;
+ case CANT_REGISTER_EGG:
+ StringExpandPlaceholders(gStringVar4, gText_EggCantBeTradedNow);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ Task_ClosePartyMenu(taskId);
+ return;
+ }
+ PlaySE(SE_HAZURE);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ StringAppend(gStringVar4, gText_PauseUntilPress);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+}
+
+static void CursorCB_Trade1(u8 taskId)
+{
+ u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
+ u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
+ u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
+ u32 stringId = GetUnionRoomTradeMessageId(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_80F9800(), gUnknown_203B064, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
+
+ if (stringId != UR_TRADE_MSG_NONE)
+ {
+ StringExpandPlaceholders(gStringVar4, sUnionRoomTradeMessages[stringId - 1]);
+ PlaySE(SE_HAZURE);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ StringAppend(gStringVar4, gText_PauseUntilPress);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ Task_ClosePartyMenu(taskId);
+ }
+}
+
+// Spin Trade (based on the translation of the Japanese trade prompt)
+// Not implemented, and normally unreachable because PARTY_MENU_TYPE_SPIN_TRADE is never used
+static void CursorCB_Trade2(u8 taskId)
+{
+}
+
+static void CursorCB_FieldMove(u8 taskId)
+{
+ u8 fieldMove = sPartyMenuInternal->actions[Menu_GetCursorPos()] - MENU_FIELD_MOVES;
+ const struct MapHeader *mapHeader;
+
+ PlaySE(SE_SELECT);
+ if (sFieldMoveCursorCallbacks[fieldMove].fieldMoveFunc == NULL)
+ return;
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE)
+ {
+ if (fieldMove == FIELD_MOVE_MILK_DRINK || fieldMove == FIELD_MOVE_SOFT_BOILED)
+ DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE);
+ else
+ DisplayPartyMenuStdMessage(sFieldMoveCursorCallbacks[fieldMove].msgId);
+ gTasks[taskId].func = Task_CancelAfterAorBPress;
+ }
+ else
+ {
+ // All field moves before WATERFALL are HMs.
+ if (fieldMove <= FIELD_MOVE_WATERFALL && FlagGet(FLAG_BADGE01_GET + fieldMove) != TRUE)
+ {
+ DisplayPartyMenuMessage(gText_CantUseUntilNewBadge, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ }
+ else if (sFieldMoveCursorCallbacks[fieldMove].fieldMoveFunc() == TRUE)
+ {
+ switch (fieldMove)
+ {
+ case FIELD_MOVE_MILK_DRINK:
+ case FIELD_MOVE_SOFT_BOILED:
+ ChooseMonForSoftboiled(taskId);
+ break;
+ case FIELD_MOVE_TELEPORT:
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum);
+ GetMapNameGeneric(gStringVar1, mapHeader->regionMapSectionId);
+ StringExpandPlaceholders(gStringVar4, gText_ReturnToHealingSpot);
+ DisplayFieldMoveExitAreaMessage(taskId);
+ sPartyMenuInternal->data[0] = fieldMove;
+ break;
+ case FIELD_MOVE_DIG:
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum);
+ GetMapNameGeneric(gStringVar1, mapHeader->regionMapSectionId);
+ StringExpandPlaceholders(gStringVar4, gText_EscapeFromHereAndReturnTo);
+ DisplayFieldMoveExitAreaMessage(taskId);
+ sPartyMenuInternal->data[0] = fieldMove;
+ break;
+ case FIELD_MOVE_FLY:
+ gPartyMenu.exitCallback = MCB2_FlyMap;
+ Task_ClosePartyMenu(taskId);
+ break;
+ default:
+ gPartyMenu.exitCallback = CB2_ReturnToField;
+ sub_8124BB0(&gPlayerParty[GetCursorSelectionMonId()], fieldMove);
+ Task_ClosePartyMenu(taskId);
+ break;
+ }
+ }
+ // Cant use Field Move
+ else
+ {
+ switch (fieldMove)
+ {
+ case FIELD_MOVE_SURF:
+ DisplayCantUseSurfMessage();
+ break;
+ case FIELD_MOVE_FLASH:
+ DisplayCantUseFlashMessage();
+ break;
+ default:
+ DisplayPartyMenuStdMessage(sFieldMoveCursorCallbacks[fieldMove].msgId);
+ break;
+ }
+ gTasks[taskId].func = Task_CancelAfterAorBPress;
+ }
+ }
+}
+
+static void DisplayFieldMoveExitAreaMessage(u8 taskId)
+{
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_FieldMoveExitAreaYesNo;
+}
+
+static void Task_FieldMoveExitAreaYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleFieldMoveExitAreaYesNoInput;
+ }
+}
+
+static void Task_HandleFieldMoveExitAreaYesNoInput(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ gPartyMenu.exitCallback = CB2_ReturnToField;
+ sub_8124BB0(&gPlayerParty[GetCursorSelectionMonId()], sPartyMenuInternal->data[0]);
+ Task_ClosePartyMenu(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
+ gFieldCallback2 = NULL;
+ gPostMenuFieldCallback = NULL;
+ Task_ReturnToChooseMonAfterText(taskId);
+ break;
+ }
+}
+
+bool8 FieldCallback_PrepareFadeInFromMenu(void)
+{
+ sub_807DC00();
+ CreateTask(Task_FieldMoveWaitForFade, 8);
+ return TRUE;
+}
+
+static void Task_FieldMoveWaitForFade(u8 taskId)
+{
+ if (IsWeatherNotFadingIn() == TRUE)
+ {
+ gFieldEffectArguments[0] = GetFieldMoveMonSpecies();
+ gPostMenuFieldCallback();
+ DestroyTask(taskId);
+ }
+}
+
+static u16 GetFieldMoveMonSpecies(void)
+{
+ return GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
+}
+
+static void Task_CancelAfterAorBPress(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ CursorCB_Cancel1(taskId);
+}
+
+static void DisplayCantUseFlashMessage(void)
+{
+ if (FlagGet(FLAG_SYS_FLASH_ACTIVE) == TRUE)
+ DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_IN_USE);
+ else
+ DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE);
+}
+
+static void FieldCallback_Surf(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ FieldEffectStart(FLDEFF_USE_SURF);
+}
+
+static bool8 SetUpFieldMove_Surf(void)
+{
+ s16 x, y;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ if (MetatileBehavior_IsSemiDeepWater(MapGridGetMetatileBehaviorAt(x, y)) != TRUE
+ && PartyHasMonWithSurf() == TRUE
+ && IsPlayerFacingSurfableFishableWater() == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_Surf;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void DisplayCantUseSurfMessage(void)
+{
+ s16 x, y;
+
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ {
+ DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_SURFING);
+ }
+ else
+ {
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ if (MetatileBehavior_IsSemiDeepWater(MapGridGetMetatileBehaviorAt(x, y)) == TRUE)
+ DisplayPartyMenuStdMessage(PARTY_MSG_CURRENT_TOO_FAST);
+ else if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE17))
+ && ((gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE17))
+ || (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE18))))
+ DisplayPartyMenuStdMessage(PARTY_MSG_ENJOY_CYCLING);
+ else
+ DisplayPartyMenuStdMessage(PARTY_MSG_CANT_SURF_HERE);
+ }
+}
+
+static bool8 SetUpFieldMove_Fly(void)
+{
+ if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void CB2_ReturnToPartyMenuFromFlyMap(void)
+{
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToFieldWithOpenMenu);
+}
+
+static void FieldCallback_Waterfall(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ FieldEffectStart(FLDEFF_USE_WATERFALL);
+}
+
+static bool8 SetUpFieldMove_Waterfall(void)
+{
+ s16 x, y;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE && IsPlayerSurfingNorth() == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_Waterfall;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_8124B60(struct Pokemon *mon, u16 item, u16 item2)
+{
+ u16 *ptr = Alloc(4 * sizeof(u16));
+
+ ptr[2] = GetMonData(mon, MON_DATA_SPECIES2);
+ ptr[0] = item;
+ ptr[1] = item2;
+ if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM)
+ sub_8113550(10, ptr);
+ else
+ sub_8113550(9, ptr);
+ Free(ptr);
+}
+
+struct FieldMoveWarpParams
+{
+ u16 species;
+ u8 fieldMove;
+ u8 regionMapSectionId;
+};
+
+static void sub_8124BB0(struct Pokemon *mon, u8 fieldMove)
+{
+ struct FieldMoveWarpParams *ptr = Alloc(sizeof(*ptr));
+
+ ptr->species = GetMonData(mon, MON_DATA_SPECIES2);
+ ptr->fieldMove = fieldMove;
+ switch (ptr->fieldMove)
+ {
+ case FIELD_MOVE_TELEPORT:
+ ptr->regionMapSectionId = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum)->regionMapSectionId;
+ break;
+ case FIELD_MOVE_DIG:
+ ptr->regionMapSectionId = gMapHeader.regionMapSectionId;
+ break;
+ default:
+ ptr->regionMapSectionId = 0xFF;
+ }
+ sub_8113550(36, (u16 *)ptr);
+ Free(ptr);
+}
+
+void sub_8124C1C(const u8 *healLocCtrlData) // TODO: confirm the type of data chunk at 0x83F2EE0
+{
+ const struct MapHeader *mapHeader;
+ struct FieldMoveWarpParams *ptr2;
+ struct
+ {
+ s8 mapGroup;
+ s8 mapNum;
+ u32 unk_4;
+ } *ptr = Alloc(sizeof(*ptr));
+
+ ptr->mapGroup = healLocCtrlData[0];
+ ptr->mapNum = healLocCtrlData[1];
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(ptr->mapGroup, ptr->mapNum);
+ Free(ptr);
+ ptr2 = Alloc(4);
+ ptr2->species = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_SPECIES2);
+ ptr2->fieldMove = FIELD_MOVE_FLY;
+ ptr2->regionMapSectionId = mapHeader->regionMapSectionId;
+ sub_8113550(36, (u16 *)ptr2);
+ Free(ptr2);
+}
+
+void CB2_ShowPartyMenuForItemUse(void)
+{
+ MainCallback callback = CB2_ReturnToBagMenu;
+ u8 partyLayout;
+ u8 menuType;
+ u8 i;
+ u8 msgId;
+ TaskFunc task;
+
+ if (gMain.inBattle)
+ {
+ menuType = PARTY_MENU_TYPE_IN_BATTLE;
+ partyLayout = GetPartyLayoutFromBattleType();
+ }
+ else
+ {
+ menuType = PARTY_MENU_TYPE_FIELD;
+ partyLayout = PARTY_LAYOUT_SINGLE;
+ }
+
+ if (GetItemEffectType(gSpecialVar_ItemId) == ITEM_EFFECT_SACRED_ASH)
+ {
+ gPartyMenu.slotId = 0;
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
+ {
+ gPartyMenu.slotId = i;
+ break;
+ }
+ }
+ if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
+ callback = CB2_ReturnToBerryPouchMenu;
+ task = Task_SetSacredAshCB;
+ msgId = PARTY_MSG_NONE;
+ }
+ else
+ {
+ switch (GetPocketByItemId(gSpecialVar_ItemId))
+ {
+ default:
+ msgId = PARTY_MSG_USE_ON_WHICH_MON;
+ break;
+ case POCKET_TM_CASE:
+ msgId = PARTY_MSG_TEACH_WHICH_MON;
+ callback = CB2_ReturnToTMCaseMenu;
+ break;
+ case POCKET_BERRY_POUCH:
+ msgId = PARTY_MSG_USE_ON_WHICH_MON;
+ callback = CB2_ReturnToBerryPouchMenu;
+ break;
+ }
+ task = Task_HandleChooseMonInput;
+ }
+ InitPartyMenu(menuType, partyLayout, PARTY_ACTION_USE_ITEM, TRUE, msgId, task, callback);
+}
+
+static void CB2_ReturnToBagMenu(void)
+{
+ GoToBagMenu(11, 3, NULL);
+}
+
+static void CB2_ReturnToTMCaseMenu(void)
+{
+ InitTMCase(5, NULL, 0xFF);
+}
+
+static void CB2_ReturnToBerryPouchMenu(void)
+{
+ InitBerryPouch(BERRYPOUCH_NA, NULL, 0xFF);
+}
+
+static void sub_8124DC0(u8 taskId)
+{
+ sPartyMenuInternal->exitCallback = sub_8124DE0;
+ Task_ClosePartyMenu(taskId);
+}
+
+static void sub_8124DE0(void)
+{
+ if (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId) == 2) // Evolution stone
+ {
+ if (sub_8126C24() == TRUE)
+ sub_811C540(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8126BD4);
+ else
+ sub_811C5AC(gPartyMenu.slotId, gSpecialVar_ItemId, gPartyMenu.exitCallback);
+ }
+ else
+ {
+ sub_811C540(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8124E48);
+ }
+}
+
+static void sub_8124E48(void)
+{
+ if (ItemId_GetPocket(gSpecialVar_ItemId) == POCKET_TM_CASE
+ && sub_811D178() == 1)
+ {
+ GiveMoveToMon(&gPlayerParty[gPartyMenu.slotId], ItemIdToBattleMoveId(gSpecialVar_ItemId));
+ AdjustFriendship(&gPlayerParty[gPartyMenu.slotId], 4);
+ if (gSpecialVar_ItemId <= ITEM_TM50)
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ SetMainCallback2(gPartyMenu.exitCallback);
+ }
+ else
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, PARTY_ACTION_CHOOSE_MON, gPartyMenu.slotId, PARTY_MSG_NONE, Task_SetSacredAshCB, gPartyMenu.exitCallback);
+ }
+}
+
+static void sub_8124EFC(void)
+{
+ if (sub_811D178() == 1)
+ {
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u8 moveIdx = GetMoveSlotToReplace();
+ u16 move = GetMonData(mon, moveIdx + MON_DATA_MOVE1);
+
+ RemoveMonPPBonus(mon, moveIdx);
+ SetMonMoveSlot(mon, ItemIdToBattleMoveId(gSpecialVar_ItemId), moveIdx);
+ AdjustFriendship(mon, 4);
+ ItemUse_SetQuestLogEvent(4, mon, gSpecialVar_ItemId, move);
+ if (gSpecialVar_ItemId <= ITEM_TM50)
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ SetMainCallback2(gPartyMenu.exitCallback);
+ }
+ else
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, gPartyMenu.slotId, PARTY_MSG_NONE, Task_SetSacredAshCB, gPartyMenu.exitCallback);
+ }
+}
+
+static void Task_SetSacredAshCB(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen;
+ gItemUseCB(taskId, Task_ClosePartyMenuAfterText); // ItemUseCB_SacredAsh in this case
+ }
+}
+
+static bool8 IsHPRecoveryItem(u16 item)
+{
+ const u8 *effect;
+
+ if (item == ITEM_ENIGMA_BERRY)
+ effect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ else
+ effect = gItemEffectTable[item - ITEM_POTION];
+ if (effect[4] & ITEM4_HEAL_HP)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void GetMedicineItemEffectMessage(u16 item)
+{
+ switch (GetItemEffectType(item))
+ {
+ case ITEM_EFFECT_CURE_POISON:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnCuredOfPoison);
+ break;
+ case ITEM_EFFECT_CURE_SLEEP:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnWokeUp2);
+ break;
+ case ITEM_EFFECT_CURE_BURN:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBurnHealed);
+ break;
+ case ITEM_EFFECT_CURE_FREEZE:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnThawedOut);
+ break;
+ case ITEM_EFFECT_CURE_PARALYSIS:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnCuredOfParalysis);
+ break;
+ case ITEM_EFFECT_CURE_CONFUSION:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnSnappedOutOfConfusion);
+ break;
+ case ITEM_EFFECT_CURE_INFATUATION:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnGotOverInfatuation);
+ break;
+ case ITEM_EFFECT_CURE_ALL_STATUS:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBecameHealthy);
+ break;
+ case ITEM_EFFECT_HP_EV:
+ StringCopy(gStringVar2, gText_HP3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case ITEM_EFFECT_ATK_EV:
+ StringCopy(gStringVar2, gText_Attack3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case ITEM_EFFECT_DEF_EV:
+ StringCopy(gStringVar2, gText_Defense3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case ITEM_EFFECT_SPEED_EV:
+ StringCopy(gStringVar2, gText_Speed2);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case ITEM_EFFECT_SPATK_EV:
+ StringCopy(gStringVar2, gText_SpAtk3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case ITEM_EFFECT_SPDEF_EV:
+ StringCopy(gStringVar2, gText_SpDef3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case ITEM_EFFECT_PP_UP:
+ case ITEM_EFFECT_PP_MAX:
+ StringExpandPlaceholders(gStringVar4, gText_MovesPPIncreased);
+ break;
+ case ITEM_EFFECT_HEAL_PP:
+ StringExpandPlaceholders(gStringVar4, gText_PPWasRestored);
+ break;
+ default:
+ StringExpandPlaceholders(gStringVar4, gText_WontHaveEffect);
+ break;
+ }
+}
+
+static bool8 NotUsingHPEVItemOnShedinja(struct Pokemon *mon, u16 item)
+{
+ if (GetItemEffectType(item) == ITEM_EFFECT_HP_EV && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_SHEDINJA)
+ return FALSE;
+ return TRUE;
+}
+
+static bool8 IsItemFlute(u16 item)
+{
+ if (item == ITEM_BLUE_FLUTE || item == ITEM_RED_FLUTE || item == ITEM_YELLOW_FLUTE)
+ return TRUE;
+ return FALSE;
+}
+
+static bool8 ExecuteTableBasedItemEffect_(u8 partyMonIndex, u16 item, u8 monMoveIndex)
+{
+ if (gMain.inBattle)
+ return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex);
+ else
+ return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex);
+}
+
+void ItemUseCB_Medicine(u8 taskId, TaskFunc func)
+{
+ u16 hp;
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 item = gSpecialVar_ItemId;
+ bool8 canHeal;
+
+ if (!NotUsingHPEVItemOnShedinja(mon, item))
+ {
+ canHeal = TRUE;
+ }
+ else
+ {
+ if (IsHPRecoveryItem(item) == TRUE)
+ {
+ hp = GetMonData(mon, MON_DATA_HP);
+ if (hp == GetMonData(mon, MON_DATA_MAX_HP))
+ canHeal = FALSE;
+ }
+ canHeal = PokemonItemUseNoEffect(mon, item, gPartyMenu.slotId, 0);
+ }
+ PlaySE(SE_SELECT);
+ if (canHeal)
+ {
+ gPartyMenuUseExitCallback = FALSE;
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = func;
+ }
+ else
+ {
+ ItemUse_SetQuestLogEvent(4, mon, item, 0xFFFF);
+ sub_8124DC0(taskId);
+ gItemUseCB = ItemUseCB_MedicineStep;
+ }
+}
+
+void ItemUseCB_MedicineStep(u8 taskId, TaskFunc func)
+{
+ u16 hp = 0;
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 item = gSpecialVar_ItemId;
+ bool8 canHeal;
+
+ if (NotUsingHPEVItemOnShedinja(mon, item))
+ {
+ canHeal = IsHPRecoveryItem(item);
+ if (canHeal == TRUE)
+ {
+ hp = GetMonData(mon, MON_DATA_HP);
+ if (hp == GetMonData(mon, MON_DATA_MAX_HP))
+ canHeal = FALSE;
+ }
+ if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0))
+ {
+ WONT_HAVE_EFFECT:
+ gPartyMenuUseExitCallback = FALSE;
+ PlaySE(SE_SELECT);
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = func;
+ return;
+ }
+ }
+ else
+ {
+ goto WONT_HAVE_EFFECT; // even loop wrap won't work
+ }
+ gPartyMenuUseExitCallback = TRUE;
+ if (!IsItemFlute(item))
+ {
+ PlaySE(SE_KAIFUKU);
+ if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM)
+ RemoveBagItem(item, 1);
+ }
+ else
+ {
+ PlaySE(SE_BIDORO);
+ }
+ SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
+ if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible)
+ DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
+ if (canHeal == TRUE)
+ {
+ if (hp == 0)
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage);
+ ResetHPTaskData(taskId, 0, hp);
+ return;
+ }
+ else
+ {
+ GetMonNickname(mon, gStringVar1);
+ GetMedicineItemEffectMessage(item);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = func;
+ }
+}
+
+static void Task_DisplayHPRestoredMessage(u8 taskId)
+{
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
+ ScheduleBgCopyTilemapToVram(2);
+ HandleBattleLowHpMusicChange();
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+}
+
+static void Task_ClosePartyMenuAfterText(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ if (gPartyMenuUseExitCallback == FALSE)
+ sPartyMenuInternal->exitCallback = NULL;
+ Task_ClosePartyMenu(taskId);
+ }
+}
+
+static void ShowMoveSelectWindow(u8 slot)
+{
+ u8 i;
+ u8 moveCount = 0;
+ u8 fontId = 2;
+ u8 windowId = DisplaySelectionWindow(SELECTWINDOW_MOVES);
+ u16 move;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ move = GetMonData(&gPlayerParty[slot], MON_DATA_MOVE1 + i);
+ AddTextPrinterParameterized(windowId,
+ fontId,
+ gMoveNames[move],
+ GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH) + GetFontAttribute(fontId, FONTATTR_LETTER_SPACING),
+ (i * 16) + 2,
+ TEXT_SPEED_FF,
+ NULL);
+ if (move != MOVE_NONE)
+ ++moveCount;
+ }
+ Menu_InitCursor(windowId, fontId, 0, 2, 16, moveCount, FALSE);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+static void Task_HandleWhichMoveInput(u8 taskId)
+{
+ s8 input = Menu_ProcessInput();
+
+ if (input != MENU_NOTHING_CHOSEN)
+ {
+ if (input == MENU_B_PRESSED)
+ {
+ PlaySE(SE_SELECT);
+ ReturnToUseOnWhichMon(taskId);
+ }
+ else
+ {
+ SetSelectedMoveForPPItem(taskId);
+ }
+ }
+}
+
+void ItemUseCB_PPRecovery(u8 taskId, UNUSED TaskFunc func)
+{
+ const u8 *effect;
+ u16 item = gSpecialVar_ItemId;
+
+ if (item == ITEM_ENIGMA_BERRY)
+ effect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ else
+ effect = gItemEffectTable[item - ITEM_POTION];
+
+ if (!(effect[4] & ITEM4_HEAL_PP_ONE))
+ {
+ gPartyMenu.data1 = 0;
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ TryUsePPItem(taskId);
+ else
+ sub_812580C(taskId);
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ DisplayPartyMenuStdMessage(PARTY_MSG_RESTORE_WHICH_MOVE);
+ ShowMoveSelectWindow(gPartyMenu.slotId);
+ gTasks[taskId].func = Task_HandleWhichMoveInput;
+ }
+}
+
+static void SetSelectedMoveForPPItem(u8 taskId)
+{
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ gPartyMenu.data1 = Menu_GetCursorPos();
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ TryUsePPItem(taskId);
+ else
+ sub_812580C(taskId);
+}
+
+static void ReturnToUseOnWhichMon(u8 taskId)
+{
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ sPartyMenuInternal->exitCallback = NULL;
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON);
+}
+
+static void sub_812580C(u8 taskId)
+{
+ bool8 noEffect = PokemonItemUseNoEffect(&gPlayerParty[gPartyMenu.slotId],
+ gSpecialVar_ItemId,
+ gPartyMenu.slotId,
+ gPartyMenu.data1);
+ PlaySE(SE_SELECT);
+ if (noEffect)
+ {
+ gPartyMenuUseExitCallback = FALSE;
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+ }
+ else
+ {
+ sub_8124DC0(taskId);
+ gItemUseCB = sub_8125898;
+ }
+}
+
+static void sub_8125898(u8 taskId, UNUSED TaskFunc func)
+{
+ u16 move;
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+
+ ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, (u8)gPartyMenu.data1);
+ gPartyMenuUseExitCallback = TRUE;
+ ItemUse_SetQuestLogEvent(4, mon, gSpecialVar_ItemId, 0xFFFF);
+ PlaySE(SE_KAIFUKU);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ move = GetMonData(mon, gPartyMenu.data1 + MON_DATA_MOVE1);
+ StringCopy(gStringVar1, gMoveNames[move]);
+ GetMedicineItemEffectMessage(gSpecialVar_ItemId);
+ DisplayPartyMenuMessage(gStringVar4, 1);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+}
+
+static void TryUsePPItem(u8 taskId)
+{
+ u16 move = MOVE_NONE;
+ s16 *moveSlot = &gPartyMenu.data1;
+ u16 item = gSpecialVar_ItemId;
+ struct PartyMenu *ptr = &gPartyMenu;
+ struct Pokemon *mon;
+
+ if (ExecuteTableBasedItemEffect_(ptr->slotId, item, *moveSlot))
+ {
+ gPartyMenuUseExitCallback = FALSE;
+ PlaySE(SE_SELECT);
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+ }
+ else
+ {
+ gPartyMenuUseExitCallback = TRUE;
+ mon = &gPlayerParty[ptr->slotId];
+ ItemUse_SetQuestLogEvent(4, mon, item, 0xFFFF);
+ PlaySE(SE_KAIFUKU);
+ RemoveBagItem(item, 1);
+ move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot);
+ StringCopy(gStringVar1, gMoveNames[move]);
+ GetMedicineItemEffectMessage(item);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+ }
+}
+
+void ItemUseCB_PPUp(u8 taskId, UNUSED TaskFunc func)
+{
+ PlaySE(SE_SELECT);
+ DisplayPartyMenuStdMessage(PARTY_MSG_BOOST_PP_WHICH_MOVE);
+ ShowMoveSelectWindow(gPartyMenu.slotId);
+ gTasks[taskId].func = Task_HandleWhichMoveInput;
+}
+
+u16 ItemIdToBattleMoveId(u16 item)
+{
+ u16 tmNumber = item - ITEM_TM01_FOCUS_PUNCH;
+
+ return sTMHMMoves[tmNumber];
+}
+
+bool8 IsMoveHm(u16 move)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_HIDDEN_MACHINES - 1; ++i) // no dive
+ if (sTMHMMoves[i + NUM_TECHNICAL_MACHINES] == move)
+ return TRUE;
+ return FALSE;
+}
+
+bool8 MonKnowsMove(struct Pokemon *mon, u16 move)
+{
+ u8 i;
+
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (GetMonData(mon, MON_DATA_MOVE1 + i) == move)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void DisplayLearnMoveMessage(const u8 *str)
+{
+ StringExpandPlaceholders(gStringVar4, str);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+static void DisplayLearnMoveMessageAndClose(u8 taskId, const u8 *str)
+{
+ DisplayLearnMoveMessage(str);
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+}
+
+void ItemUseCB_TMHM(u8 taskId, UNUSED TaskFunc func)
+{
+ struct Pokemon *mon;
+ s16 *move;
+ u16 item;
+
+ PlaySE(SE_SELECT);
+ mon = &gPlayerParty[gPartyMenu.slotId];
+ move = &gPartyMenu.data1;
+ item = gSpecialVar_ItemId;
+ GetMonNickname(mon, gStringVar1);
+ move[0] = ItemIdToBattleMoveId(item);
+ StringCopy(gStringVar2, gMoveNames[move[0]]);
+ move[1] = 0;
+ switch (CanMonLearnTMTutor(mon, item, 0))
+ {
+ case CANNOT_LEARN_MOVE:
+ DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove);
+ return;
+ case ALREADY_KNOWS_MOVE:
+ DisplayLearnMoveMessageAndClose(taskId, gText_PkmnAlreadyKnows);
+ return;
+ }
+ if (GiveMoveToMon(mon, move[0]) != MON_HAS_MAX_MOVES)
+ {
+ ItemUse_SetQuestLogEvent(4, mon, item, 0xFFFF);
+ sub_8124DC0(taskId);
+ gItemUseCB = ItemUseCB_LearnedMove;
+ }
+ else
+ {
+ DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = Task_ReplaceMoveYesNo;
+ }
+}
+
+static void ItemUseCB_LearnedMove(u8 taskId, UNUSED TaskFunc func)
+{
+ Task_LearnedMove(taskId);
+}
+
+static void Task_LearnedMove(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ s16 *move = &gPartyMenu.data1;
+ u16 item = gSpecialVar_ItemId;
+
+ if (move[1] == 0)
+ {
+ AdjustFriendship(mon, 4);
+ if (item < ITEM_HM01_CUT)
+ RemoveBagItem(item, 1);
+ }
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[move[0]]);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_DoLearnedMoveFanfareAfterText;
+}
+
+static void Task_DoLearnedMoveFanfareAfterText(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PlayFanfare(MUS_FANFA1);
+ gTasks[taskId].func = Task_LearnNextMoveOrClosePartyMenu;
+ }
+}
+
+static void Task_LearnNextMoveOrClosePartyMenu(u8 taskId)
+{
+ if (IsFanfareTaskInactive() && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)))
+ {
+ if (gPartyMenu.learnMoveState == 1)
+ Task_TryLearningNextMove(taskId);
+ else
+ {
+ if (gPartyMenu.learnMoveState == 2) // never occurs
+ gSpecialVar_Result = TRUE;
+ Task_ClosePartyMenu(taskId);
+ }
+ }
+}
+
+static void Task_ReplaceMoveYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleReplaceMoveYesNoInput;
+ }
+}
+
+static void Task_HandleReplaceMoveYesNoInput(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ DisplayPartyMenuMessage(gText_WhichMoveToForget, TRUE);
+ gTasks[taskId].func = Task_ShowSummaryScreenToForgetMove;
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
+ StopLearningMovePrompt(taskId);
+ break;
+ }
+}
+
+static void Task_ShowSummaryScreenToForgetMove(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ sPartyMenuInternal->exitCallback = CB2_ShowSummaryScreenToForgetMove;
+ Task_ClosePartyMenu(taskId);
+ }
+}
+
+static void CB2_ShowSummaryScreenToForgetMove(void)
+{
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuWhileLearningMove, gPartyMenu.data1);
+}
+
+static void CB2_ReturnToPartyMenuWhileLearningMove(void)
+{
+ u8 moveIdx = GetMoveSlotToReplace();
+ u16 move;
+ s32 learnMoveState = gPartyMenu.learnMoveState;
+
+ if (learnMoveState == 0 && moveIdx != MAX_MON_MOVES)
+ {
+ move = GetMonData(&gPlayerParty[gPartyMenu.slotId], moveIdx + MON_DATA_MOVE1);
+ sub_811C568(gPartyMenu.slotId, gSpecialVar_ItemId, move, sub_8124EFC);
+ gItemUseCB = sub_8125F4C;
+ gPartyMenu.action = learnMoveState;
+ }
+ else
+ {
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback);
+ }
+}
+
+static void Task_ReturnToPartyMenuWhileLearningMove(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (GetMoveSlotToReplace() != MAX_MON_MOVES)
+ DisplayPartyMenuForgotMoveMessage(taskId);
+ else
+ StopLearningMovePrompt(taskId);
+ }
+}
+
+static void sub_8125F4C(u8 taskId, UNUSED TaskFunc func)
+{
+ sub_8125F5C(taskId);
+}
+
+static void sub_8125F5C(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u8 moveIdx = GetMoveSlotToReplace();
+ u16 move = GetMonData(mon, moveIdx + MON_DATA_MOVE1);
+
+ ItemUse_SetQuestLogEvent(4, mon, gSpecialVar_ItemId, move);
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[move]);
+ RemoveMonPPBonus(mon, moveIdx);
+ SetMonMoveSlot(mon, gPartyMenu.data1, moveIdx);
+ Task_LearnedMove(taskId);
+}
+
+static void DisplayPartyMenuForgotMoveMessage(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 move = GetMonData(mon, MON_DATA_MOVE1 + GetMoveSlotToReplace());
+
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[move]);
+ DisplayLearnMoveMessage(gText_12PoofForgotMove);
+ gTasks[taskId].func = Task_PartyMenuReplaceMove;
+}
+
+static void Task_PartyMenuReplaceMove(u8 taskId)
+{
+ struct Pokemon *mon;
+ u16 move;
+
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ mon = &gPlayerParty[gPartyMenu.slotId];
+ RemoveMonPPBonus(mon, GetMoveSlotToReplace());
+ move = gPartyMenu.data1;
+ SetMonMoveSlot(mon, move, GetMoveSlotToReplace());
+ Task_LearnedMove(taskId);
+ }
+}
+
+static void StopLearningMovePrompt(u8 taskId)
+{
+ StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
+ StringExpandPlaceholders(gStringVar4, gText_StopLearningMove2);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_StopLearningMoveYesNo;
+}
+
+static void Task_StopLearningMoveYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleStopLearningMoveYesNoInput;
+ }
+}
+
+static void Task_HandleStopLearningMoveYesNoInput(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
+ StringExpandPlaceholders(gStringVar4, gText_MoveNotLearned);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ if (gPartyMenu.learnMoveState == 1)
+ {
+ gTasks[taskId].func = Task_TryLearningNextMoveAfterText;
+ }
+ else
+ {
+ if (gPartyMenu.learnMoveState == 2) // never occurs
+ gSpecialVar_Result = FALSE;
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
+ DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = Task_ReplaceMoveYesNo;
+ break;
+ }
+}
+
+static void Task_TryLearningNextMoveAfterText(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ Task_TryLearningNextMove(taskId);
+}
+
+void ItemUseCB_RareCandy(u8 taskId, TaskFunc func)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 item = gSpecialVar_ItemId;
+ bool8 noEffect;
+
+ if (GetMonData(mon, MON_DATA_LEVEL) != MAX_LEVEL)
+ noEffect = PokemonItemUseNoEffect(mon, item, gPartyMenu.slotId, 0);
+ else
+ noEffect = TRUE;
+ PlaySE(SE_SELECT);
+ if (noEffect)
+ {
+ gPartyMenuUseExitCallback = FALSE;
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = func;
+ }
+ else
+ {
+ sub_8124DC0(taskId);
+ gItemUseCB = ItemUseCB_RareCandyStep;
+ }
+}
+
+static void ItemUseCB_RareCandyStep(u8 taskId, UNUSED TaskFunc func)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ struct PartyMenuInternal *ptr = sPartyMenuInternal;
+ s16 *arrayPtr = ptr->data;
+ u8 level;
+
+ BufferMonStatsToTaskData(mon, arrayPtr);
+ ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0);
+ BufferMonStatsToTaskData(mon, &ptr->data[NUM_STATS]);
+ gPartyMenuUseExitCallback = TRUE;
+ ItemUse_SetQuestLogEvent(4, mon, gSpecialVar_ItemId, 0xFFFF);
+ PlayFanfareByFanfareNum(0);
+ UpdateMonDisplayInfoAfterRareCandy(gPartyMenu.slotId, mon);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ GetMonNickname(mon, gStringVar1);
+ level = GetMonData(mon, MON_DATA_LEVEL);
+ ConvertIntToDecimalStringN(gStringVar2, level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnElevatedToLvVar2);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_DisplayLevelUpStatsPg1;
+}
+
+static void UpdateMonDisplayInfoAfterRareCandy(u8 slot, struct Pokemon *mon)
+{
+ SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[slot]);
+ if (gSprites[sPartyMenuBoxes[slot].statusSpriteId].invisible)
+ DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[slot], 1);
+ DisplayPartyPokemonHPCheck(mon, &sPartyMenuBoxes[slot], 1);
+ DisplayPartyPokemonMaxHPCheck(mon, &sPartyMenuBoxes[slot], 1);
+ DisplayPartyPokemonHPBarCheck(mon, &sPartyMenuBoxes[slot]);
+ UpdatePartyMonHPBar(sPartyMenuBoxes[slot].monSpriteId, mon);
+ AnimatePartySlot(slot, 1);
+ ScheduleBgCopyTilemapToVram(0);
+}
+
+static void Task_DisplayLevelUpStatsPg1(u8 taskId)
+{
+ if (WaitFanfare(FALSE) && IsPartyMenuTextPrinterActive() != TRUE && (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)))
+ {
+ PlaySE(SE_SELECT);
+ DisplayLevelUpStatsPg1(taskId);
+ gTasks[taskId].func = Task_DisplayLevelUpStatsPg2;
+ }
+}
+
+static void Task_DisplayLevelUpStatsPg2(u8 taskId)
+{
+ if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ DisplayLevelUpStatsPg2(taskId);
+ gTasks[taskId].func = Task_TryLearnNewMoves;
+ }
+}
+
+static void DisplayLevelUpStatsPg1(u8 taskId)
+{
+ s16 *arrayPtr = sPartyMenuInternal->data;
+
+ arrayPtr[12] = CreateLevelUpStatsWindow();
+ DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], 1, 2, 3);
+ CopyWindowToVram(arrayPtr[12], 2);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+static void DisplayLevelUpStatsPg2(u8 taskId)
+{
+ s16 *arrayPtr = sPartyMenuInternal->data;
+
+ DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], 1, 2, 3);
+ CopyWindowToVram(arrayPtr[12], 2);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+static void Task_TryLearnNewMoves(u8 taskId)
+{
+ u16 learnMove;
+
+ if (WaitFanfare(0) && (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)))
+ {
+ RemoveLevelUpStatsWindow();
+ learnMove = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], TRUE);
+ gPartyMenu.learnMoveState = 1;
+ switch (learnMove)
+ {
+ case 0: // No moves to learn
+ PartyMenuTryEvolution(taskId);
+ break;
+ case MON_HAS_MAX_MOVES:
+ DisplayMonNeedsToReplaceMove(taskId);
+ break;
+ case MON_ALREADY_KNOWS_MOVE:
+ gTasks[taskId].func = Task_TryLearningNextMove;
+ break;
+ default:
+ DisplayMonLearnedMove(taskId, learnMove);
+ break;
+ }
+ }
+}
+
+static void Task_TryLearningNextMove(u8 taskId)
+{
+ u16 result = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], FALSE);
+
+ switch (result)
+ {
+ case 0: // No moves to learn
+ PartyMenuTryEvolution(taskId);
+ break;
+ case MON_HAS_MAX_MOVES:
+ DisplayMonNeedsToReplaceMove(taskId);
+ break;
+ case MON_ALREADY_KNOWS_MOVE:
+ return;
+ default:
+ DisplayMonLearnedMove(taskId, result);
+ break;
+ }
+}
+
+static void PartyMenuTryEvolution(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 targetSpecies = GetEvolutionTargetSpecies(mon, 0, 0);
+
+ if (targetSpecies != SPECIES_NONE)
+ {
+ FreePartyPointers();
+ gCB2_AfterEvolution = gPartyMenu.exitCallback;
+ BeginEvolutionScene(mon, targetSpecies, 1, gPartyMenu.slotId);
+ DestroyTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+ }
+}
+
+static void DisplayMonNeedsToReplaceMove(u8 taskId)
+{
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[gMoveToLearn]);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnNeedsToReplaceMove);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gPartyMenu.data1 = gMoveToLearn;
+ gTasks[taskId].func = Task_ReplaceMoveYesNo;
+}
+
+static void DisplayMonLearnedMove(u8 taskId, u16 move)
+{
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[move]);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gPartyMenu.data1 = move;
+ gTasks[taskId].func = Task_DoLearnedMoveFanfareAfterText;
+}
+
+#define tUsedOnSlot data[0]
+#define tHadEffect data[1]
+#define tLastSlotUsed data[2]
+
+void ItemUseCB_SacredAsh(u8 taskId, UNUSED TaskFunc func)
+{
+ sPartyMenuInternal->tUsedOnSlot = FALSE;
+ sPartyMenuInternal->tHadEffect = FALSE;
+ sPartyMenuInternal->tLastSlotUsed = gPartyMenu.slotId;
+ UseSacredAsh(taskId);
+}
+
+static void UseSacredAsh(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 hp;
+
+ if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NONE)
+ {
+ gTasks[taskId].func = Task_SacredAshLoop;
+ return;
+ }
+ hp = GetMonData(mon, MON_DATA_HP);
+ if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0))
+ {
+ gTasks[taskId].func = Task_SacredAshLoop;
+ return;
+ }
+ PlaySE(SE_KAIFUKU);
+ if (sPartyMenuInternal->tHadEffect == 0)
+ sSacredAshQuestLogMonBackup = mon;
+ SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
+ if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible)
+ DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
+ AnimatePartySlot(sPartyMenuInternal->tLastSlotUsed, 0);
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_SacredAshDisplayHPRestored);
+ ResetHPTaskData(taskId, 0, hp);
+ sPartyMenuInternal->tUsedOnSlot = TRUE;
+ sPartyMenuInternal->tHadEffect = TRUE;
+}
+
+static void Task_SacredAshLoop(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ if (sPartyMenuInternal->tUsedOnSlot == TRUE)
+ {
+ sPartyMenuInternal->tUsedOnSlot = FALSE;
+ sPartyMenuInternal->tLastSlotUsed = gPartyMenu.slotId;
+ }
+ if (++(gPartyMenu.slotId) == PARTY_SIZE)
+ {
+ if (sPartyMenuInternal->tHadEffect == FALSE)
+ {
+ gPartyMenuUseExitCallback = FALSE;
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ }
+ else
+ {
+ gPartyMenuUseExitCallback = TRUE;
+ if (gPartyMenu.menuType != PARTY_MENU_TYPE_IN_BATTLE)
+ ItemUse_SetQuestLogEvent(4, sSacredAshQuestLogMonBackup, gSpecialVar_ItemId, 0xFFFF);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ }
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+ gPartyMenu.slotId = 0;
+ }
+ else
+ {
+ UseSacredAsh(taskId);
+ }
+ }
+}
+
+static void Task_SacredAshDisplayHPRestored(u8 taskId)
+{
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_SacredAshLoop;
+}
+
+#undef tUsedOnSlot
+#undef tHadEffect
+#undef tLastSlotUsed
+
+void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc func)
+{
+ bool8 noEffect;
+
+ PlaySE(SE_SELECT);
+ noEffect = PokemonItemUseNoEffect(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId, gPartyMenu.slotId, 0);
+ if (noEffect)
+ {
+ gPartyMenuUseExitCallback = FALSE;
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = func;
+ }
+ else
+ {
+ sub_8124DC0(taskId);
+ }
+}
+
+static void sub_8126BD4(void)
+{
+ gCB2_AfterEvolution = gPartyMenu.exitCallback;
+ ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0);
+ ItemUse_SetQuestLogEvent(4, &gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId, 0xFFFF);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+}
+
+static bool8 sub_8126C24(void)
+{
+ if (!IsNationalPokedexEnabled()
+ && GetEvolutionTargetSpecies(&gPlayerParty[gPartyMenu.slotId], 2, gSpecialVar_ItemId) > KANTO_DEX_COUNT)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+u8 GetItemEffectType(u16 item)
+{
+ const u8 *itemEffect;
+ u32 statusCure;
+
+ if (!IS_POKEMON_ITEM(item))
+ return ITEM_EFFECT_NONE;
+ // Read the item's effect properties.
+ if (item == ITEM_ENIGMA_BERRY)
+ itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ else
+ itemEffect = gItemEffectTable[item - ITEM_POTION];
+ if ((itemEffect[0] & (ITEM0_HIGH_CRIT | ITEM0_X_ATTACK)) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & ITEM3_MIST))
+ return ITEM_EFFECT_X_ITEM;
+ else if (itemEffect[0] & ITEM0_SACRED_ASH)
+ return ITEM_EFFECT_SACRED_ASH;
+ else if (itemEffect[3] & ITEM3_LEVEL_UP)
+ return ITEM_EFFECT_RAISE_LEVEL;
+ statusCure = itemEffect[3] & ITEM3_STATUS_ALL;
+ if (statusCure || (itemEffect[0] >> 7))
+ {
+ if (statusCure == ITEM3_SLEEP)
+ return ITEM_EFFECT_CURE_SLEEP;
+ else if (statusCure == ITEM3_POISON)
+ return ITEM_EFFECT_CURE_POISON;
+ else if (statusCure == ITEM3_BURN)
+ return ITEM_EFFECT_CURE_BURN;
+ else if (statusCure == ITEM3_FREEZE)
+ return ITEM_EFFECT_CURE_FREEZE;
+ else if (statusCure == ITEM3_PARALYSIS)
+ return ITEM_EFFECT_CURE_PARALYSIS;
+ else if (statusCure == ITEM3_CONFUSION)
+ return ITEM_EFFECT_CURE_CONFUSION;
+ else if (itemEffect[0] >> 7 && !statusCure)
+ return ITEM_EFFECT_CURE_INFATUATION;
+ else
+ return ITEM_EFFECT_CURE_ALL_STATUS;
+ }
+ if (itemEffect[4] & (ITEM4_REVIVE | ITEM4_HEAL_HP))
+ return ITEM_EFFECT_HEAL_HP;
+ else if (itemEffect[4] & ITEM4_EV_ATK)
+ return ITEM_EFFECT_ATK_EV;
+ else if (itemEffect[4] & ITEM4_EV_HP)
+ return ITEM_EFFECT_HP_EV;
+ else if (itemEffect[5] & ITEM5_EV_SPATK)
+ return ITEM_EFFECT_SPATK_EV;
+ else if (itemEffect[5] & ITEM5_EV_SPDEF)
+ return ITEM_EFFECT_SPDEF_EV;
+ else if (itemEffect[5] & ITEM5_EV_SPEED)
+ return ITEM_EFFECT_SPEED_EV;
+ else if (itemEffect[5] & ITEM5_EV_DEF)
+ return ITEM_EFFECT_DEF_EV;
+ else if (itemEffect[4] & ITEM4_EVO_STONE)
+ return ITEM_EFFECT_EVO_STONE;
+ else if (itemEffect[4] & ITEM4_PP_UP)
+ return ITEM_EFFECT_PP_UP;
+ else if (itemEffect[5] & ITEM5_PP_MAX)
+ return ITEM_EFFECT_PP_MAX;
+ else if (itemEffect[4] & (ITEM4_HEAL_PP_ALL | ITEM4_HEAL_PP_ONE))
+ return ITEM_EFFECT_HEAL_PP;
+ else
+ return ITEM_EFFECT_NONE;
+}
+
+static void TryTutorSelectedMon(u8 taskId)
+{
+ struct Pokemon *mon;
+ s16 *move;
+
+ if (!gPaletteFade.active)
+ {
+ mon = &gPlayerParty[gPartyMenu.slotId];
+ move = &gPartyMenu.data1;
+ GetMonNickname(mon, gStringVar1);
+ gPartyMenu.data1 = GetTutorMove(gSpecialVar_0x8005);
+ StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
+ move[1] = 2;
+ switch (CanMonLearnTMTutor(mon, 0, gSpecialVar_0x8005))
+ {
+ case CANNOT_LEARN_MOVE:
+ DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove);
+ return;
+ case ALREADY_KNOWS_MOVE:
+ DisplayLearnMoveMessageAndClose(taskId, gText_PkmnAlreadyKnows);
+ return;
+ default:
+ if (GiveMoveToMon(mon, gPartyMenu.data1) != MON_HAS_MAX_MOVES)
+ {
+ Task_LearnedMove(taskId);
+ return;
+ }
+ break;
+ }
+ DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = Task_ReplaceMoveYesNo;
+ }
+}
+
+void CB2_PartyMenuFromStartMenu(void)
+{
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToFieldWithOpenMenu);
+}
+
+// Giving an item by selecting Give from the bag menu
+// As opposted to by selecting Give in the party menu, which is handled by CursorCB_Give
+void CB2_ChooseMonToGiveItem(void)
+{
+ MainCallback callback;
+
+ switch (GetPocketByItemId(gSpecialVar_ItemId))
+ {
+ default:
+ callback = CB2_ReturnToBagMenu;
+ break;
+ case POCKET_TM_CASE:
+ callback = CB2_ReturnToTMCaseMenu;
+ break;
+ case POCKET_BERRY_POUCH:
+ callback = CB2_ReturnToBerryPouchMenu;
+ break;
+ }
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_GIVE_ITEM, FALSE, PARTY_MSG_GIVE_TO_WHICH_MON, Task_HandleChooseMonInput, callback);
+ gPartyMenu.bagItem = gSpecialVar_ItemId;
+}
+
+static void TryGiveItemOrMailToSelectedMon(u8 taskId)
+{
+ sPartyMenuItemId = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM);
+ if (sPartyMenuItemId == ITEM_NONE)
+ {
+ GiveItemOrMailToSelectedMon(taskId);
+ }
+ else if (ItemIsMail(sPartyMenuItemId))
+ {
+ DisplayItemMustBeRemovedFirstMessage(taskId);
+ }
+ else
+ {
+ DisplayAlreadyHoldingItemSwitchMessage(&gPlayerParty[gPartyMenu.slotId], sPartyMenuItemId, TRUE);
+ gTasks[taskId].func = Task_SwitchItemsFromBagYesNo;
+ }
+}
+
+static void GiveItemOrMailToSelectedMon(u8 taskId)
+{
+ if (ItemIsMail(gPartyMenu.bagItem))
+ {
+ RemoveItemToGiveFromBag(gPartyMenu.bagItem);
+ sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMonFromBag;
+ Task_ClosePartyMenu(taskId);
+ }
+ else
+ {
+ GiveItemToSelectedMon(taskId);
+ }
+}
+
+static void GiveItemToSelectedMon(u8 taskId)
+{
+ u16 item;
+
+ if (!gPaletteFade.active)
+ {
+ item = gPartyMenu.bagItem;
+ DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], item, FALSE, 1);
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item);
+ RemoveItemToGiveFromBag(item);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
+ }
+}
+
+static void Task_UpdateHeldItemSpriteAndClosePartyMenu(u8 taskId)
+{
+ s8 slot = gPartyMenu.slotId;
+
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ UpdatePartyMonHeldItemSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ Task_ClosePartyMenu(taskId);
+ }
+}
+
+static void CB2_WriteMailToGiveMonFromBag(void)
+{
+ u8 mail;
+
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gPartyMenu.bagItem);
+ mail = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL);
+ DoEasyChatScreen(EASY_CHAT_TYPE_MAIL, gSaveBlock1Ptr->mail[mail].words, CB2_ReturnToPartyOrBagMenuFromWritingMail);
+}
+
+static void CB2_ReturnToPartyOrBagMenuFromWritingMail(void)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ // Canceled writing mail
+ if (gSpecialVar_Result == FALSE)
+ {
+ TakeMailFromMon(mon);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &sPartyMenuItemId);
+ RemoveBagItem(sPartyMenuItemId, 1);
+ ReturnGiveItemToBagOrPC(item);
+ SetMainCallback2(gPartyMenu.exitCallback);
+ }
+ // Wrote mail
+ else
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_DisplayGaveMailFromBagMessage, gPartyMenu.exitCallback);
+ }
+}
+
+static void Task_DisplayGaveMailFromBagMessage(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (sPartyMenuItemId != ITEM_NONE)
+ DisplaySwitchedHeldItemMessage(gPartyMenu.bagItem, sPartyMenuItemId, FALSE);
+ else
+ DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], gPartyMenu.bagItem, FALSE, 1);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
+ }
+}
+
+static void Task_SwitchItemsFromBagYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleSwitchItemsFromBagYesNoInput;
+ }
+}
+
+static void Task_HandleSwitchItemsFromBagYesNoInput(u8 taskId)
+{
+ u16 item;
+
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0: // Yes, switch items
+ item = gPartyMenu.bagItem;
+ RemoveItemToGiveFromBag(item);
+ if (AddBagItem(sPartyMenuItemId, 1) == FALSE)
+ {
+ ReturnGiveItemToBagOrPC(item);
+ BufferBagFullCantTakeItemMessage(sPartyMenuItemId);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
+ }
+ else if (ItemIsMail(item))
+ {
+ sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMonFromBag;
+ Task_ClosePartyMenu(taskId);
+ }
+ else
+ {
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item);
+ DisplaySwitchedHeldItemMessage(item, sPartyMenuItemId, TRUE);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1: // No, dont switch items
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
+ break;
+ }
+}
+
+static void DisplayItemMustBeRemovedFirstMessage(u8 taskId)
+{
+ DisplayPartyMenuMessage(gText_RemoveMailBeforeItem, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
+}
+
+static void RemoveItemToGiveFromBag(u16 item)
+{
+ if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM) // Unused, never occurs
+ RemovePCItem(item, 1);
+ else
+ RemoveBagItem(item, 1);
+}
+
+// Returns FALSE if there was no space to return the item
+// but there always should be, and the return is ignored in all uses
+static bool8 ReturnGiveItemToBagOrPC(u16 item)
+{
+ if (gPartyMenu.action == PARTY_ACTION_GIVE_ITEM)
+ return AddBagItem(item, 1);
+ else
+ return AddPCItem(item, 1);
+}
+
+void ChooseMonToGiveMailFromMailbox(void)
+{
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_GIVE_MAILBOX_MAIL, FALSE, PARTY_MSG_GIVE_TO_WHICH_MON, Task_HandleChooseMonInput, Mailbox_ReturnToMailListAfterDeposit);
+}
+
+static void TryGiveMailToSelectedMon(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ struct MailStruct *mail;
+
+ gPartyMenuUseExitCallback = FALSE;
+ mail = &gSaveBlock1Ptr->mail[gPlayerPcMenuManager.itemsAbove + 6 + gPlayerPcMenuManager.cursorPos];
+ if (GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE)
+ {
+ DisplayPartyMenuMessage(gText_PkmnHoldingItemCantHoldMail, TRUE);
+ }
+ else
+ {
+ GiveMailToMon2(mon, mail);
+ ClearMailStruct(mail);
+ DisplayPartyMenuMessage(gText_MailTransferredFromMailbox, TRUE);
+ }
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
+}
+
+void InitChooseHalfPartyForBattle(u8 a1)
+{
+ ClearSelectedPartyOrder();
+ InitPartyMenu(PARTY_MENU_TYPE_CHOOSE_HALF, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, gMain.savedCallback);
+ gPartyMenu.unk_8_6 = a1;
+ gPartyMenu.task = Task_ValidateChosenHalfParty;
+}
+
+void ClearSelectedPartyOrder(void)
+{
+ memset(gSelectedOrderFromParty, 0, sizeof(gSelectedOrderFromParty));
+}
+
+static u8 GetPartySlotEntryStatus(s8 slot)
+{
+ if (GetBattleEntryEligibility(&gPlayerParty[slot]) == FALSE)
+ return 2;
+ if (HasPartySlotAlreadyBeenSelected(slot + 1) == TRUE)
+ return 1;
+ return 0;
+}
+
+static bool8 GetBattleEntryEligibility(struct Pokemon *mon)
+{
+ u16 species;
+ u16 i = 0;
+
+ if (GetMonData(mon, MON_DATA_IS_EGG))
+ return FALSE;
+ switch (gPartyMenu.unk_8_6)
+ {
+ default:
+ if (GetMonData(mon, MON_DATA_LEVEL) > 30)
+ return FALSE;
+ break;
+ case 0:
+ if (GetMonData(mon, MON_DATA_HP) == 0)
+ return FALSE;
+ break;
+ case 1:
+ if (gSaveBlock2Ptr->battleTower.battleTowerLevelType == 0 // level 50
+ && GetMonData(mon, MON_DATA_LEVEL) > 50)
+ return FALSE;
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ for (; gBattleTowerBannedSpecies[i] != 0xFFFF; ++i)
+ if (gBattleTowerBannedSpecies[i] == species)
+ return FALSE;
+ break;
+ }
+ return TRUE;
+}
+
+static u8 CheckBattleEntriesAndGetMessage(void)
+{
+ u8 i, j;
+ struct Pokemon *party = gPlayerParty;
+ u8 *order = gSelectedOrderFromParty;
+
+ switch (gPartyMenu.unk_8_6)
+ {
+ case 1:
+ if (order[2] == 0)
+ return PARTY_MSG_THREE_MONS_ARE_NEEDED;
+ for (i = 0; i < 2; ++i)
+ {
+ sPartyMenuInternal->data[15] = GetMonData(&party[order[i] - 1], MON_DATA_SPECIES);
+ sPartyMenuInternal->data[14] = GetMonData(&party[order[i] - 1], MON_DATA_HELD_ITEM);
+ for (j = i + 1; j < 3; ++j)
+ {
+ if (sPartyMenuInternal->data[15] == GetMonData(&party[order[j] - 1], MON_DATA_SPECIES))
+ return PARTY_MSG_MONS_CANT_BE_SAME;
+ if (sPartyMenuInternal->data[14] != ITEM_NONE && sPartyMenuInternal->data[14] == GetMonData(&party[order[j] - 1], MON_DATA_HELD_ITEM))
+ return PARTY_MSG_NO_SAME_HOLD_ITEMS;
+ }
+ }
+ break;
+ case 2:
+ if (order[1] == 0)
+ return PARTY_MSG_TWO_MONS_ARE_NEEDED;
+ break;
+ }
+ return 0xFF;
+}
+
+static bool8 HasPartySlotAlreadyBeenSelected(u8 slot)
+{
+ u8 i;
+
+ for (i = 0; i < NELEMS(gSelectedOrderFromParty); ++i)
+ if (gSelectedOrderFromParty[i] == slot)
+ return TRUE;
+ return FALSE;
+}
+
+static void Task_ValidateChosenHalfParty(u8 taskId)
+{
+ u8 msgId = CheckBattleEntriesAndGetMessage();
+
+ if (msgId != 0xFF)
+ {
+ PlaySE(SE_HAZURE);
+ DisplayPartyMenuStdMessage(msgId);
+ gTasks[taskId].func = Task_ContinueChoosingHalfParty;
+ }
+ else
+ {
+ if (gSelectedOrderFromParty[0] != 0)
+ {
+ PlaySE(SE_SELECT);
+ Task_ClosePartyMenu(taskId);
+ }
+ else
+ {
+ PlaySE(SE_HAZURE);
+ DisplayPartyMenuStdMessage(PARTY_MSG_NO_MON_FOR_BATTLE);
+ gTasks[taskId].func = Task_ContinueChoosingHalfParty;
+ }
+ }
+}
+
+static void Task_ContinueChoosingHalfParty(u8 taskId)
+{
+ if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ }
+}
+
+void sub_81277F4(u8 menuType, MainCallback callback)
+{
+ InitPartyMenu(menuType,
+ PARTY_LAYOUT_SINGLE,
+ PARTY_ACTION_CHOOSE_MON,
+ FALSE,
+ PARTY_MSG_CHOOSE_MON,
+ Task_HandleChooseMonInput,
+ callback);
+}
+
+void ChooseMonForMoveTutor(void)
+{
+ if (gSpecialVar_0x8005 < TUTOR_MOVE_COUNT)
+ {
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD,
+ PARTY_LAYOUT_SINGLE,
+ PARTY_ACTION_MOVE_TUTOR,
+ FALSE,
+ PARTY_MSG_TEACH_WHICH_MON,
+ Task_HandleChooseMonInput,
+ CB2_ReturnToFieldContinueScriptPlayMapMusic);
+ }
+ else
+ {
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD,
+ PARTY_LAYOUT_SINGLE,
+ PARTY_ACTION_MOVE_TUTOR,
+ FALSE,
+ PARTY_MSG_NONE,
+ TryTutorSelectedMon,
+ CB2_ReturnToFieldContinueScriptPlayMapMusic);
+ gPartyMenu.slotId = gSpecialVar_0x8007;
+ }
+}
+
+void ChooseMonForWirelessMinigame(void)
+{
+ InitPartyMenu(PARTY_MENU_TYPE_MINIGAME, PARTY_LAYOUT_SINGLE, PARTY_ACTION_MINIGAME, FALSE, PARTY_MSG_CHOOSE_MON_OR_CANCEL, Task_HandleChooseMonInput, CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+static u8 GetPartyLayoutFromBattleType(void)
+{
+ if (IsDoubleBattle() == FALSE)
+ return PARTY_LAYOUT_SINGLE;
+ if (IsMultiBattle() == TRUE)
+ return PARTY_LAYOUT_MULTI;
+ return PARTY_LAYOUT_DOUBLE;
+}
+
+void OpenPartyMenuInTutorialBattle(u8 partyAction)
+{
+ if (!sub_80EB2E0(8) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE))
+ {
+ InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE,
+ GetPartyLayoutFromBattleType(),
+ partyAction,
+ FALSE,
+ PARTY_MSG_NONE,
+ sub_8120C3C,
+ SetCB2ToReshowScreenAfterMenu);
+ sub_80EB2F4(8);
+ }
+ else
+ {
+ InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE,
+ GetPartyLayoutFromBattleType(),
+ partyAction,
+ FALSE,
+ PARTY_MSG_CHOOSE_MON,
+ Task_HandleChooseMonInput,
+ SetCB2ToReshowScreenAfterMenu);
+ }
+ nullsub_44();
+ UpdatePartyToBattleOrder();
+}
+
+void OpenPartyMenuInBattle(void)
+{
+ InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, sub_8120EBC, SetCB2ToReshowScreenAfterMenu);
+ nullsub_44();
+ UpdatePartyToBattleOrder();
+}
+
+void ChooseMonForInBattleItem(void)
+{
+ InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_REUSABLE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, sub_8120FCC, sub_8107ECC);
+ nullsub_44();
+ UpdatePartyToBattleOrder();
+}
+
+void sub_81279E0(void)
+{
+ if (!sub_80EB2E0(8) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE))
+ {
+ InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE,
+ GetPartyLayoutFromBattleType(),
+ PARTY_ACTION_USE_ITEM,
+ FALSE,
+ PARTY_MSG_NONE,
+ sub_8120C3C,
+ sub_8107ECC);
+ sub_80EB2F4(8);
+ }
+ else
+ {
+ MainCallback callback;
+
+ if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
+ callback = CB2_ReturnToBerryPouchMenu;
+ else
+ callback = sub_8107ECC;
+ InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE,
+ GetPartyLayoutFromBattleType(),
+ PARTY_ACTION_USE_ITEM,
+ FALSE,
+ PARTY_MSG_USE_ON_WHICH_MON,
+ Task_HandleChooseMonInput,
+ callback);
+ }
+ nullsub_44();
+ UpdatePartyToBattleOrder();
+}
+
+static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon *mon)
+{
+ if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(mon, MON_DATA_IS_EGG))
+ return ACTIONS_SUMMARY_ONLY;
+ else if (gPartyMenu.action == PARTY_ACTION_SEND_OUT)
+ return ACTIONS_SEND_OUT;
+ else
+ return ACTIONS_SHIFT;
+}
+
+static bool8 TrySwitchInPokemon(void)
+{
+ u8 slot = GetCursorSelectionMonId();
+ u8 newSlot;
+ u8 i;
+
+ // In a multi battle, slots 1, 4, and 5 are the partner's pokemon
+ if (IsMultiBattle() == TRUE && (slot == 1 || slot == 4 || slot == 5))
+ {
+ StringCopy(gStringVar1, GetTrainerPartnerName());
+ StringExpandPlaceholders(gStringVar4, gText_CantSwitchWithAlly);
+ return FALSE;
+ }
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0)
+ {
+ GetMonNickname(&gPlayerParty[slot], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnHasNoEnergy);
+ return FALSE;
+ }
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (GetBattlerSide(i) == B_SIDE_PLAYER && GetPartyIdFromBattleSlot(slot) == gBattlerPartyIndexes[i])
+ {
+ GetMonNickname(&gPlayerParty[slot], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyInBattle);
+ return FALSE;
+ }
+ }
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_IS_EGG))
+ {
+ StringExpandPlaceholders(gStringVar4, gText_EggCantBattle);
+ return FALSE;
+ }
+ if (GetPartyIdFromBattleSlot(slot) == gBattleStruct->field_8B)
+ {
+ GetMonNickname(&gPlayerParty[slot], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadySelected);
+ return FALSE;
+ }
+ if (gPartyMenu.action == PARTY_ACTION_ABILITY_PREVENTS)
+ {
+ SetMonPreventsSwitchingString();
+ return FALSE;
+ }
+ if (gPartyMenu.action == PARTY_ACTION_CANT_SWITCH)
+ {
+ u8 currBattler = gBattlerInMenuId;
+
+ GetMonNickname(&gPlayerParty[GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[currBattler])], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnCantSwitchOut);
+ return FALSE;
+ }
+ gSelectedMonPartyId = GetPartyIdFromBattleSlot(slot);
+ gPartyMenuUseExitCallback = TRUE;
+ newSlot = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattlerInMenuId]);
+ SwitchPartyMonSlots(newSlot, slot);
+ SwapPartyPokemon(&gPlayerParty[newSlot], &gPlayerParty[slot]);
+ return TRUE;
+}
+
+void BufferBattlePartyCurrentOrder(void)
+{
+ BufferBattlePartyOrder(gBattlePartyCurrentOrder, GetPlayerFlankId());
+}
+
+static void BufferBattlePartyOrder(u8 *partyBattleOrder, u8 flankId)
+{
+ u8 partyIds[PARTY_SIZE];
+ s32 i, j;
+
+ if (IsMultiBattle() == TRUE)
+ {
+ // Party ids are packed in 4 bits at a time
+ // i.e. the party id order below would be 0, 3, 5, 4, 2, 1, and the two parties would be 0,5,4 and 3,2,1
+ if (flankId != 0)
+ {
+ partyBattleOrder[0] = 0 | (3 << 4);
+ partyBattleOrder[1] = 5 | (4 << 4);
+ partyBattleOrder[2] = 2 | (1 << 4);
+ }
+ else
+ {
+ partyBattleOrder[0] = 3 | (0 << 4);
+ partyBattleOrder[1] = 2 | (1 << 4);
+ partyBattleOrder[2] = 5 | (4 << 4);
+ }
+ return;
+ }
+ else if (IsDoubleBattle() == FALSE)
+ {
+ j = 1;
+ partyIds[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (i != partyIds[0])
+ {
+ partyIds[j] = i;
+ ++j;
+ }
+ }
+ }
+ else
+ {
+ j = 2;
+ partyIds[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)];
+ partyIds[1] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (i != partyIds[0] && i != partyIds[1])
+ {
+ partyIds[j] = i;
+ ++j;
+ }
+ }
+ }
+ for (i = 0; i < (s32)NELEMS(gBattlePartyCurrentOrder); ++i)
+ partyBattleOrder[i] = (partyIds[0 + (i * 2)] << 4) | partyIds[1 + (i * 2)];
+}
+
+void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId)
+{
+ BufferBattlePartyOrderBySide(gBattleStruct->field_60[battlerId], flankId, battlerId);
+}
+
+// when GetBattlerSide(battlerId) == B_SIDE_PLAYER, this function is identical the one above
+static void BufferBattlePartyOrderBySide(u8 *partyBattleOrder, u8 flankId, u8 battlerId)
+{
+ u8 partyIndexes[PARTY_SIZE];
+ s32 i, j;
+ u8 leftBattler;
+ u8 rightBattler;
+
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ {
+ leftBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ rightBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ }
+ else
+ {
+ leftBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ rightBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ }
+ if (IsMultiBattle() == TRUE)
+ {
+ if (flankId != 0)
+ {
+ partyBattleOrder[0] = 0 | (3 << 4);
+ partyBattleOrder[1] = 5 | (4 << 4);
+ partyBattleOrder[2] = 2 | (1 << 4);
+ }
+ else
+ {
+ partyBattleOrder[0] = 3 | (0 << 4);
+ partyBattleOrder[1] = 2 | (1 << 4);
+ partyBattleOrder[2] = 5 | (4 << 4);
+ }
+ return;
+ }
+ else if (IsDoubleBattle() == FALSE)
+ {
+ j = 1;
+ partyIndexes[0] = gBattlerPartyIndexes[leftBattler];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (i != partyIndexes[0])
+ {
+ partyIndexes[j] = i;
+ ++j;
+ }
+ }
+ }
+ else
+ {
+ j = 2;
+ partyIndexes[0] = gBattlerPartyIndexes[leftBattler];
+ partyIndexes[1] = gBattlerPartyIndexes[rightBattler];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (i != partyIndexes[0] && i != partyIndexes[1])
+ {
+ partyIndexes[j] = i;
+ ++j;
+ }
+ }
+ }
+ for (i = 0; i < 3; ++i)
+ partyBattleOrder[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)];
+}
+
+void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2)
+{
+ u8 partyIds[PARTY_SIZE];
+ u8 tempSlot = 0;
+ s32 i, j;
+ u8 *partyBattleOrder;
+ u8 partyIdBuffer;
+
+ if (IsMultiBattle())
+ {
+ partyBattleOrder = gBattleStruct->field_60[battlerId];
+ for (i = j = 0; i < 3; ++j, ++i)
+ {
+ partyIds[j] = partyBattleOrder[i] >> 4;
+ ++j;
+ partyIds[j] = partyBattleOrder[i] & 0xF;
+ }
+ partyIdBuffer = partyIds[slot2];
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (partyIds[i] == slot)
+ {
+ tempSlot = partyIds[i];
+ partyIds[i] = partyIdBuffer;
+ break;
+ }
+ }
+ if (i != PARTY_SIZE)
+ {
+ partyIds[slot2] = tempSlot;
+ partyBattleOrder[0] = (partyIds[0] << 4) | partyIds[1];
+ partyBattleOrder[1] = (partyIds[2] << 4) | partyIds[3];
+ partyBattleOrder[2] = (partyIds[4] << 4) | partyIds[5];
+ }
+ }
+}
+
+static u8 GetPartyIdFromBattleSlot(u8 slot)
+{
+ u8 modResult = slot & 1;
+ u8 retVal;
+
+ slot /= 2;
+ if (modResult != 0)
+ retVal = gBattlePartyCurrentOrder[slot] & 0xF;
+ else
+ retVal = gBattlePartyCurrentOrder[slot] >> 4;
+ return retVal;
+}
+
+static void SetPartyIdAtBattleSlot(u8 slot, u8 setVal)
+{
+ bool32 modResult = slot & 1;
+
+ slot /= 2;
+ if (modResult != 0)
+ gBattlePartyCurrentOrder[slot] = (gBattlePartyCurrentOrder[slot] & 0xF0) | setVal;
+ else
+ gBattlePartyCurrentOrder[slot] = (gBattlePartyCurrentOrder[slot] & 0xF) | (setVal << 4);
+}
+
+void SwitchPartyMonSlots(u8 slot, u8 slot2)
+{
+ u8 partyId = GetPartyIdFromBattleSlot(slot);
+
+ SetPartyIdAtBattleSlot(slot, GetPartyIdFromBattleSlot(slot2));
+ SetPartyIdAtBattleSlot(slot2, partyId);
+}
+
+u8 GetPartyIdFromBattlePartyId(u8 battlePartyId)
+{
+ u8 i, j;
+
+ for (j = i = 0; i < (s32)NELEMS(gBattlePartyCurrentOrder); ++j, ++i)
+ {
+ if ((gBattlePartyCurrentOrder[i] >> 4) != battlePartyId)
+ {
+ ++j;
+ if ((gBattlePartyCurrentOrder[i] & 0xF) == battlePartyId)
+ return j;
+ }
+ else
+ {
+ return j;
+ }
+ }
+ return 0;
+}
+
+static void UpdatePartyToBattleOrder(void)
+{
+ struct Pokemon *partyBuffer = Alloc(sizeof(gPlayerParty));
+ u8 i;
+
+ memcpy(partyBuffer, gPlayerParty, sizeof(gPlayerParty));
+ for (i = 0; i < PARTY_SIZE; ++i)
+ memcpy(&gPlayerParty[GetPartyIdFromBattlePartyId(i)], &partyBuffer[i], sizeof(struct Pokemon));
+ Free(partyBuffer);
+}
+
+static void UpdatePartyToFieldOrder(void)
+{
+ struct Pokemon *partyBuffer = Alloc(sizeof(gPlayerParty));
+ u8 i;
+
+ memcpy(partyBuffer, gPlayerParty, sizeof(gPlayerParty));
+ for (i = 0; i < PARTY_SIZE; ++i)
+ memcpy(&gPlayerParty[GetPartyIdFromBattleSlot(i)], &partyBuffer[i], sizeof(struct Pokemon));
+ Free(partyBuffer);
+}
+
+// not used
+static void SwitchAliveMonIntoLeadSlot(void)
+{
+ u8 i;
+ struct Pokemon *mon;
+ u8 partyId;
+
+ for (i = 1; i < PARTY_SIZE; ++i)
+ {
+ mon = &gPlayerParty[GetPartyIdFromBattleSlot(i)];
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(mon, MON_DATA_HP) != 0)
+ {
+ partyId = GetPartyIdFromBattleSlot(0);
+ SwitchPartyMonSlots(0, i);
+ SwapPartyPokemon(&gPlayerParty[partyId], mon);
+ break;
+ }
+ }
+}
+
+static void CB2_SetUpExitToBattleScreen(void)
+{
+ CB2_SetUpReshowBattleScreenAfterMenu();
+ SetMainCallback2(SetCB2ToReshowScreenAfterMenu);
+}
+
+void ShowPartyMenuToShowcaseMultiBattleParty(void)
+{
+ InitPartyMenu(PARTY_MENU_TYPE_MULTI_SHOWCASE, PARTY_LAYOUT_MULTI_SHOWCASE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_NONE, Task_InitMultiPartnerPartySlideIn, gMain.savedCallback);
+}
+
+#define tXPos data[0]
+
+static void Task_InitMultiPartnerPartySlideIn(u8 taskId)
+{
+ // The first slide step also sets the sprites offscreen
+ gTasks[taskId].tXPos = 256;
+ SlideMultiPartyMenuBoxSpritesOneStep(taskId);
+ ChangeBgX(2, 0x10000, 0);
+ gTasks[taskId].func = Task_MultiPartnerPartySlideIn;
+}
+
+static void Task_MultiPartnerPartySlideIn(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 i;
+
+ if (!gPaletteFade.active)
+ {
+ tXPos -= 8;
+ SlideMultiPartyMenuBoxSpritesOneStep(taskId);
+ if (tXPos == 0)
+ {
+ for (i = 3; i < PARTY_SIZE; ++i)
+ {
+ if (gMultiPartnerParty[i - MULTI_PARTY_SIZE].species != SPECIES_NONE)
+ AnimateSelectedPartyIcon(sPartyMenuBoxes[i].monSpriteId, 0);
+ }
+ PlaySE(SE_W231); // The Harden SE plays once the partners party mons have slid on screen
+ gTasks[taskId].func = Task_WaitAfterMultiPartnerPartySlideIn;
+ }
+ }
+}
+
+static void Task_WaitAfterMultiPartnerPartySlideIn(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ // data[0] used as a timer afterwards rather than the x pos
+ if (++data[0] == 256)
+ Task_ClosePartyMenu(taskId);
+}
+
+static void MoveMultiPartyMenuBoxSprite(u8 spriteId, s16 x)
+{
+ if (x >= 0)
+ gSprites[spriteId].pos2.x = x;
+}
+
+static void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 i;
+
+ for (i = 3; i < PARTY_SIZE; ++i)
+ {
+ if (gMultiPartnerParty[i - MULTI_PARTY_SIZE].species != SPECIES_NONE)
+ {
+ MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].monSpriteId, tXPos - 8);
+ MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].itemSpriteId, tXPos - 8);
+ MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].pokeballSpriteId, tXPos - 8);
+ MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].statusSpriteId, tXPos - 8);
+ }
+ }
+ ChangeBgX(2, 0x800, 1);
+}
+
+#undef tXpos
+
+void ChooseMonForDaycare(void)
+{
+ gFieldCallback2 = CB2_FadeFromPartyMenu;
+ InitPartyMenu(PARTY_MENU_TYPE_DAYCARE, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON_2, Task_HandleChooseMonInput, CB2_ReturnToField);
+}
+
+void ChoosePartyMonByMenuType(u8 menuType)
+{
+ gFieldCallback2 = CB2_FadeFromPartyMenu;
+ InitPartyMenu(menuType, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToField);
+}
+
+static bool8 CB2_FadeFromPartyMenu(void)
+{
+ sub_807DC00();
+ CreateTask(Task_PartyMenuWaitForFade, 10);
+ return TRUE;
+}
+
+static void Task_PartyMenuWaitForFade(u8 taskId)
+{
+ if (IsWeatherNotFadingIn())
+ {
+ DestroyTask(taskId);
+ ScriptContext2_Disable();
+ EnableBothScriptContexts();
+ }
+}
diff --git a/src/player_pc.c b/src/player_pc.c
index f454cd07f..00d41abe6 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -38,7 +38,7 @@ static EWRAM_DATA const u8 *sItemOrder = NULL;
static EWRAM_DATA u8 sTopMenuItemCount = 0;
EWRAM_DATA struct PlayerPCItemPageStruct gPlayerPcMenuManager = {};
-#define SELECTED_MAIL (gSaveBlock1Ptr->mail[PC_MAIL_NUM(gPlayerPcMenuManager.scrollOffset) + gPlayerPcMenuManager.selectedRow])
+#define SELECTED_MAIL (gSaveBlock1Ptr->mail[PC_MAIL_NUM(gPlayerPcMenuManager.itemsAbove) + gPlayerPcMenuManager.cursorPos])
static void Task_DrawPlayerPcTopMenu(u8 taskId);
static void Task_TopMenuHandleInput(u8 taskId);
@@ -234,8 +234,8 @@ static void Task_PlayerPcMailbox(u8 taskId)
}
else
{
- gPlayerPcMenuManager.selectedRow = 0;
- gPlayerPcMenuManager.scrollOffset = 0;
+ gPlayerPcMenuManager.cursorPos = 0;
+ gPlayerPcMenuManager.itemsAbove = 0;
PCMailCompaction();
Task_SetPageItemVars(taskId);
if (gPlayerPcMenuManager.unk_9 == 0)
@@ -322,7 +322,7 @@ static void Task_DepositItem_WaitFadeAndGoToBag(u8 taskId)
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
- sub_8107DB4(3, POCKET_ITEMS - 1, CB2_ReturnToField);
+ GoToBagMenu(3, POCKET_ITEMS - 1, CB2_ReturnToField);
gFieldCallback = CB2_ReturnFromDepositMenu;
DestroyTask(taskId);
}
@@ -336,7 +336,7 @@ static void Task_PlayerPcDepositItem(u8 taskId)
static void Task_ReturnToItemStorageSubmenu(u8 taskId)
{
- if (field_weather_is_fade_finished() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
gTasks[taskId].func = Task_TopMenu_ItemStorageSubmenu_HandleInput;
}
@@ -469,7 +469,7 @@ static void Task_MailboxPcHandleInput(u8 taskId)
if (!gPaletteFade.active)
{
input = ListMenu_ProcessInput(tListMenuTaskId);
- ListMenuGetScrollAndRow(tListMenuTaskId, &gPlayerPcMenuManager.scrollOffset, &gPlayerPcMenuManager.selectedRow);
+ ListMenuGetScrollAndRow(tListMenuTaskId, &gPlayerPcMenuManager.itemsAbove, &gPlayerPcMenuManager.cursorPos);
switch (input)
{
case -1:
@@ -483,7 +483,7 @@ static void Task_MailboxPcHandleInput(u8 taskId)
PlaySE(SE_SELECT);
MailboxPC_RemoveWindow(0);
MailboxPC_RemoveWindow(1);
- DestroyListMenuTask(tListMenuTaskId, &gPlayerPcMenuManager.scrollOffset, &gPlayerPcMenuManager.selectedRow);
+ DestroyListMenuTask(tListMenuTaskId, &gPlayerPcMenuManager.itemsAbove, &gPlayerPcMenuManager.cursorPos);
ScheduleBgCopyTilemapToVram(0);
RemoveScrollIndicatorArrowPair(gPlayerPcMenuManager.scrollIndicatorId);
gTasks[taskId].func = Task_PrintWhatToDoWithSelectedMail;
@@ -573,7 +573,7 @@ static void Task_WaitFadeAndReadSelectedMail(u8 taskId)
static void Task_WaitFadeAndReturnToMailboxPcInputHandler(u8 taskId)
{
- if (field_weather_is_fade_finished() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
gTasks[taskId].func = Task_MailboxPcHandleInput;
}
@@ -641,10 +641,10 @@ static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId)
ClearMailStruct(mail);
PCMailCompaction();
gPlayerPcMenuManager.count--;
- if (gPlayerPcMenuManager.count < gPlayerPcMenuManager.pageItems + gPlayerPcMenuManager.scrollOffset)
+ if (gPlayerPcMenuManager.count < gPlayerPcMenuManager.pageItems + gPlayerPcMenuManager.itemsAbove)
{
- if (gPlayerPcMenuManager.scrollOffset != 0)
- gPlayerPcMenuManager.scrollOffset--;
+ if (gPlayerPcMenuManager.itemsAbove != 0)
+ gPlayerPcMenuManager.itemsAbove--;
}
Task_SetPageItemVars(taskId);
}
@@ -674,7 +674,7 @@ static void Task_WaitFadeAndGoToPartyMenu(u8 taskId)
{
MailboxPC_DestroyListMenuBuffer();
CleanupOverworldWindowsAndTilemaps();
- PartyMenuInit_FromPlayerPc();
+ ChooseMonToGiveMailFromMailbox();
DestroyTask(taskId);
}
}
@@ -693,10 +693,10 @@ static void CB2_ReturnToMailboxPc_UpdateScrollVariables(void)
PCMailCompaction();
if (count != gPlayerPcMenuManager.count)
{
- if (gPlayerPcMenuManager.count < gPlayerPcMenuManager.pageItems + gPlayerPcMenuManager.scrollOffset)
+ if (gPlayerPcMenuManager.count < gPlayerPcMenuManager.pageItems + gPlayerPcMenuManager.itemsAbove)
{
- if (gPlayerPcMenuManager.scrollOffset != 0)
- gPlayerPcMenuManager.scrollOffset--;
+ if (gPlayerPcMenuManager.itemsAbove != 0)
+ gPlayerPcMenuManager.itemsAbove--;
}
}
Task_SetPageItemVars(taskId);
@@ -708,7 +708,7 @@ static void CB2_ReturnToMailboxPc_UpdateScrollVariables(void)
sub_807DC00();
}
-void CB2_PlayerPC_ReturnFromPartyMenu(void)
+void Mailbox_ReturnToMailListAfterDeposit(void)
{
gFieldCallback = CB2_ReturnToMailboxPc_UpdateScrollVariables;
SetMainCallback2(CB2_ReturnToField);
diff --git a/src/pokemon.c b/src/pokemon.c
index 8f9fe192c..9f5a6967e 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -4117,7 +4117,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
if (sp34 != 4)
{
gAbsentBattlerFlags &= ~gBitTable[sp34];
- CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlerPartyIndexes[sp34]));
+ CopyPlayerPartyMonToBattleData(sp34, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[sp34]));
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255)
gBattleResults.numRevivesUsed++;
}
@@ -4405,7 +4405,7 @@ static bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask,
}
}
-bool8 PokemonUseItemEffects2(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex)
+bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex)
{
u32 data;
s32 tmp;
@@ -5179,7 +5179,7 @@ void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]);
}
-bool8 sub_80435E0(void)
+bool8 GetPlayerFlankId(void)
{
bool8 retVal = FALSE;
switch (gLinkPlayers[GetMultiplayerId()].id)
@@ -5813,11 +5813,11 @@ void SetMonPreventsSwitchingString(void)
gBattleTextBuff1[4] = B_BUFF_EOS;
if (GetBattlerSide(gBattleStruct->battlerPreventingSwitchout) == B_SIDE_PLAYER)
- gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]);
+ gBattleTextBuff1[3] = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]);
else
gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout];
- PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]))
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattlerInMenuId]))
BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4);
}
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index f3492593c..4c7681231 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -1276,7 +1276,7 @@ static void DestroyMonIconInternal(struct Sprite * sprite)
DestroySprite(sprite);
}
-void MonIcon_SetAnim(struct Sprite * sprite, u8 animNum)
+void SetPartyHPBarSprite(struct Sprite * sprite, u8 animNum)
{
sprite->animNum = animNum;
sprite->animDelayCounter = 0;
diff --git a/src/quest_log.c b/src/quest_log.c
index d7b544882..04369f1c2 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -987,7 +987,7 @@ void sub_8111708(void)
gSaveBlock1Ptr->mapDataId = VarGet(VAR_0x40AE);
if (gSaveBlock1Ptr->mapDataId == 0)
{
- sp0 = *get_mapheader_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ sp0 = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
gSaveBlock1Ptr->mapDataId = sp0.mapDataId;
}
}
@@ -1363,7 +1363,7 @@ static void sub_8111FCC(u8 taskId)
{
if (gUnknown_203AE94.unk_0_6 != 1)
{
- sub_80C4DF8(gStringVar1, gMapHeader.regionMapSectionId);
+ GetMapNameGeneric(gStringVar1, gMapHeader.regionMapSectionId);
StringExpandPlaceholders(gStringVar4, gUnknown_841B073);
sub_8111D10();
}
@@ -1972,15 +1972,15 @@ void DestroyHelpMessageWindow(u8 a0)
}
#ifdef NONMATCHING
-void sub_8112F18(u8 a0)
+void sub_8112F18(u8 windowId)
{
- u8 width = GetWindowAttribute(a0, WINDOW_WIDTH);
- u8 height = GetWindowAttribute(a0, WINDOW_HEIGHT);
+ u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
+ u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
u8 *buffer = Alloc(32 * width * height);
u8 i, j;
u8 k;
- if (buffer)
+ if (buffer != NULL)
{
for (i = 0; i < height; i++)
{
@@ -1999,13 +1999,13 @@ void sub_8112F18(u8 a0)
);
}
}
- CopyToWindowPixelBuffer(a0, buffer, width * height * 32, 0);
+ CopyToWindowPixelBuffer(windowId, buffer, width * height * 32, 0);
Free(buffer);
}
}
#else
NAKED
-void sub_8112F18(u8 a0)
+void sub_8112F18(u8 windowId)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
@@ -3166,7 +3166,7 @@ static const u16 *sub_8113FBC(const u16 *a0)
StringCopy(gStringVar1, ItemId_GetName(r5[0]));
if (r5[0] == ITEM_ESCAPE_ROPE)
{
- sub_80C4DF8(gStringVar2, r5[2]);
+ GetMapNameGeneric(gStringVar2, r5[2]);
StringExpandPlaceholders(gStringVar4, gUnknown_841AFA6);
}
else if (r5[1] != 0xFFFF)
@@ -3814,7 +3814,7 @@ static const u16 *sub_8114D68(const u16 *a0)
a0 = sub_8113E88(30, a0);
r6 = (const u8 *)a0 + 6;
DynamicPlaceholderTextUtil_Reset();
- sub_80C4DF8(gStringVar1, r6[0]);
+ GetMapNameGeneric(gStringVar1, r6[0]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[a0[2]].trainerName);
QuestLog_AutoGetSpeciesName(a0[0], 0, 2);
@@ -3855,7 +3855,7 @@ static const u16 *sub_8114E68(const u16 *a0)
r6 = (const u8 *)a0 + 8;
DynamicPlaceholderTextUtil_Reset();
- sub_80C4DF8(gStringVar1, r6[2]);
+ GetMapNameGeneric(gStringVar1, r6[2]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
QuestLog_AutoGetSpeciesName(a0[2], NULL, 1);
ConvertIntToDecimalStringN(gStringVar2, r6[0], STR_CONV_MODE_LEFT_ALIGN, 3);
@@ -3983,7 +3983,7 @@ static const u16 *sub_81151DC(const u16 *a0)
const u16 *r5 = sub_8113E88(34, a0);
const u8 *r6 = (const u8 *)r5 + 6;
DynamicPlaceholderTextUtil_Reset();
- sub_80C4DF8(gStringVar1, r6[0]);
+ GetMapNameGeneric(gStringVar1, r6[0]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
if (
gTrainers[r5[2]].trainerClass == 0x51
@@ -4164,7 +4164,7 @@ static const u16 *sub_81152BC(const u16 *a0)
const u16 *r5 = sub_8113E88(35, a0);
const u8 *r5_2 = (const u8 *)r5 + 0;
r6 = r5_2[1];
- sub_80C4DF8(gStringVar1, r5_2[0]);
+ GetMapNameGeneric(gStringVar1, r5_2[0]);
StringCopy(gStringVar2, gUnknown_8456AF0[r6]);
if (gUnknown_8456BE4[r6] == 5)
{
@@ -4238,7 +4238,7 @@ static const u16 *sub_8115460(const u16 *a0)
const u8 *r5 = (const u8 *)r4 + 2;
QuestLog_AutoGetSpeciesName(r4[0], gStringVar1, 0);
if (r5[1] != 0xFF)
- sub_80C4DF8(gStringVar2, r5[1]);
+ GetMapNameGeneric(gStringVar2, r5[1]);
if (r5[0] == 7)
{
if (r5[1] == 0x58)
@@ -4270,7 +4270,7 @@ static const u16 *sub_8115518(const u16 *a0)
const u8 *r7 = (const u8 *)r4 + 8;
u32 r6 = (r4[2] << 16) + r4[3];
DynamicPlaceholderTextUtil_Reset();
- sub_80C4DF8(gStringVar1, r7[0]);
+ GetMapNameGeneric(gStringVar1, r7[0]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, ItemId_GetName(r4[0]));
if (r4[1] < 2)
@@ -4303,7 +4303,7 @@ static const u16 *sub_81155E0(const u16 *a0) {
const u8 *r7 = (const u8 *) r5 + 8;
u32 r6 = (r5[2] << 16) + r5[3];
DynamicPlaceholderTextUtil_Reset();
- sub_80C4DF8(gStringVar1, r7[0]);
+ GetMapNameGeneric(gStringVar1, r7[0]);
if (r7[1] == 0) {
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1);
@@ -4344,7 +4344,7 @@ static const u16 *sub_8115700(const u16 *a0)
{
const u16 *r4 = sub_8113E88(40, a0);
const u8 *r5 = (const u8 *)r4 + 2;
- sub_80C4DF8(gStringVar1, r5[0]);
+ GetMapNameGeneric(gStringVar1, r5[0]);
StringCopy(gStringVar2, ItemId_GetName(r4[0]));
StringExpandPlaceholders(gStringVar4, gUnknown_841B03F);
return (const u16 *)(r5 + 2);
@@ -4420,7 +4420,7 @@ static u16 *sub_81157DC(u16 *a0, const u16 *a1)
static const u16 *sub_8115800(const u16 *a0)
{
const u16 *r4 = sub_8113E88(42, a0);
- sub_80C4DF8(gStringVar1, r4[0]);
+ GetMapNameGeneric(gStringVar1, r4[0]);
StringExpandPlaceholders(gStringVar4, gUnknown_841B064);
return r4 + 1;
}
diff --git a/src/roamer.c b/src/roamer.c
index b42855644..b3cc67f85 100644
--- a/src/roamer.c
+++ b/src/roamer.c
@@ -236,5 +236,5 @@ u16 GetRoamerLocationMapSectionId(void)
struct Roamer *roamer = &saveRoamer;
if (!saveRoamer.active)
return MAPSEC_NONE;
- return get_mapheader_by_bank_and_number(sRoamerLocation[MAP_GRP], sRoamerLocation[MAP_NUM])->regionMapSectionId;
+ return Overworld_GetMapHeaderByGroupAndId(sRoamerLocation[MAP_GRP], sRoamerLocation[MAP_NUM])->regionMapSectionId;
}
diff --git a/src/save_menu_util.c b/src/save_menu_util.c
index 195b29b0c..54073785e 100644
--- a/src/save_menu_util.c
+++ b/src/save_menu_util.c
@@ -41,7 +41,7 @@ void SaveStatToString(u8 gameStatId, u8 *dest0, u8 color)
dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
break;
case SAVE_STAT_LOCATION:
- sub_80C4DF8(dest, gMapHeader.regionMapSectionId);
+ GetMapNameGeneric(dest, gMapHeader.regionMapSectionId);
break;
case SAVE_STAT_BADGES:
for (flagId = FLAG_BADGE01_GET, nBadges = 0; flagId < FLAG_BADGE01_GET + 8; flagId++)
diff --git a/src/start_menu.c b/src/start_menu.c
index 4a4fe52e3..2a1713902 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -504,7 +504,7 @@ static bool8 StartMenuPlayerCallback(void)
PlayRainStoppingSoundEffect();
DestroySafariZoneStatsWindow();
CleanupOverworldWindowsAndTilemaps();
- InitTrainerCard(CB2_ReturnToStartMenu);
+ InitTrainerCard(CB2_ReturnToFieldWithOpenMenu);
return TRUE;
}
return FALSE;
@@ -524,7 +524,7 @@ static bool8 StartMenuOptionCallback(void)
DestroySafariZoneStatsWindow();
CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_OptionsMenuFromStartMenu);
- gMain.savedCallback = CB2_ReturnToStartMenu;
+ gMain.savedCallback = CB2_ReturnToFieldWithOpenMenu;
return TRUE;
}
return FALSE;
@@ -554,7 +554,7 @@ static bool8 StartMenuLinkPlayerCallback(void)
{
PlayRainStoppingSoundEffect();
CleanupOverworldWindowsAndTilemaps();
- InitLinkPartnerTrainerCard(gUnknown_300502C, CB2_ReturnToStartMenu);
+ InitLinkPartnerTrainerCard(gUnknown_300502C, CB2_ReturnToFieldWithOpenMenu);
return TRUE;
}
return FALSE;
diff --git a/src/tm_case.c b/src/tm_case.c
index 25fe9a72c..a9af2332e 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -595,7 +595,7 @@ static void TMCase_MoveCursor_UpdatePrintedDescription(s32 itemIndex)
static void FillBG2RowWithPalette_2timesNplus1(s32 a0)
{
- SetBgRectPal(2, 0, 12, 30, 8, 2 * a0 + 1);
+ SetBgTilemapPalette(2, 0, 12, 30, 8, 2 * a0 + 1);
ScheduleBgCopyTilemapToVram(2);
}
@@ -848,8 +848,8 @@ static void TMHMContextMenuAction_Use(u8 taskId)
}
else
{
- gUnknown_3005E98 = sub_8125B40;
- sTMCaseDynamicResources->savedCallback = sub_8124C8C;
+ gItemUseCB = ItemUseCB_TMHM;
+ sTMCaseDynamicResources->savedCallback = CB2_ShowPartyMenuForItemUse;
Task_BeginFadeOutFromTMCase(taskId);
}
}
@@ -874,7 +874,7 @@ static void TMHMContextMenuAction_Give(u8 taskId)
}
else
{
- sTMCaseDynamicResources->savedCallback = sub_8126EDC;
+ sTMCaseDynamicResources->savedCallback = CB2_ChooseMonToGiveItem;
Task_BeginFadeOutFromTMCase(taskId);
}
}
@@ -945,7 +945,7 @@ static void Task_SelectTMAction_Type1(u8 taskId)
if (!itemid_is_unique(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1])))
{
- sTMCaseDynamicResources->savedCallback = c2_8123744;
+ sTMCaseDynamicResources->savedCallback = CB2_GiveHoldItem;
Task_BeginFadeOutFromTMCase(taskId);
}
else
@@ -1274,7 +1274,7 @@ static void Task_TMCaseDude_Playback(u8 taskId)
sTMCaseStaticResources.scrollOffset = sPokeDudePackBackup->unk_162;
Free(sPokeDudePackBackup);
CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
- sub_8108CF0();
+ CB2_SetUpReshowBattleScreenAfterMenu();
BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, 0);
data[8]++;
}
diff --git a/src/trade.c b/src/trade.c
index 5151ecedd..4921a1ba3 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -459,9 +459,9 @@ static const u8 *const sTradeErrorOrStatusMessagePtrs[] = {
gUnknown_8417094, // That's your only POKéMON for battle
gUnknown_841E199, // Waiting for your friend to finish
gUnknown_841E1C5, // Your friend wants to trade POKéMON
- gUnknown_84170BC, // That POKéMON can't be traded now
- gUnknown_84170E0, // An EGG can't be traded now
- gUnknown_84170FC // The other TRAINER's POKéMON can't be traded now
+ gText_PkmnCantBeTradedNow, // That POKéMON can't be traded now
+ gText_EggCantBeTradedNow, // An EGG can't be traded now
+ gText_OtherTrainersPkmnCantBeTraded // The other TRAINER's POKéMON can't be traded now
};
static const u8 gUnknown_8261F18[] = { 0, 1, 2 };
@@ -879,11 +879,11 @@ static void sub_804C728(void)
break;
case 8:
LoadHeldItemIcons();
- sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 0);
+ DrawHeldItemIconsForTrade(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 0);
gMain.state++;
break;
case 9:
- sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 1);
+ DrawHeldItemIconsForTrade(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 1);
gMain.state++;
break;
case 10:
@@ -1483,7 +1483,7 @@ static void sub_804C728(void)
"\tadds r0, 0x36\n"
"\tadds r1, 0x28\n"
"\tmovs r2, 0\n"
- "\tbl sub_812256C\n"
+ "\tbl DrawHeldItemIconsForTrade\n"
"\tldr r1, _0804CB74 @ =gMain\n"
"\tmovs r5, 0x87\n"
"\tlsls r5, 3\n"
@@ -1499,7 +1499,7 @@ static void sub_804C728(void)
"\tadds r0, 0x36\n"
"\tadds r1, 0x28\n"
"\tmovs r2, 0x1\n"
- "\tbl sub_812256C\n"
+ "\tbl DrawHeldItemIconsForTrade\n"
"\tldr r1, _0804CB98 @ =gMain\n"
"\tmovs r7, 0x87\n"
"\tlsls r7, 3\n"
@@ -1989,11 +1989,11 @@ void sub_804CF14(void)
break;
case 8:
LoadHeldItemIcons();
- sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 0);
+ DrawHeldItemIconsForTrade(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 0);
gMain.state++;
break;
case 9:
- sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 1);
+ DrawHeldItemIconsForTrade(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 1);
gMain.state++;
break;
case 10:
@@ -2053,9 +2053,9 @@ void sub_804CF14(void)
}
if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6)
- sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20();
+ sTradeMenuResourcesPtr->tradeMenuCursorPosition = GetLastViewedMonIndex();
else
- sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20() + 6;
+ sTradeMenuResourcesPtr->tradeMenuCursorPosition = GetLastViewedMonIndex() + 6;
sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&sSpriteTemplate_TradeButtons, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][0] * 8 + 32, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][1] * 8, 2);
gMain.state = 16;
@@ -2365,7 +2365,7 @@ void sub_804CF14(void)
"\tadds r0, 0x36\n"
"\tadds r1, 0x28\n"
"\tmovs r2, 0\n"
- "\tbl sub_812256C\n"
+ "\tbl DrawHeldItemIconsForTrade\n"
"\tldr r1, _0804D174 @ =gMain\n"
"\tmovs r5, 0x87\n"
"\tlsls r5, 3\n"
@@ -2381,7 +2381,7 @@ void sub_804CF14(void)
"\tadds r0, 0x36\n"
"\tadds r1, 0x28\n"
"\tmovs r2, 0x1\n"
- "\tbl sub_812256C\n"
+ "\tbl DrawHeldItemIconsForTrade\n"
"\tldr r1, _0804D198 @ =gMain\n"
"\tmovs r7, 0x87\n"
"\tlsls r7, 3\n"
@@ -2633,14 +2633,14 @@ void sub_804CF14(void)
"\tldrb r0, [r0]\n"
"\tcmp r0, 0x5\n"
"\tbhi _0804D3B8\n"
- "\tbl sub_8138B20\n"
+ "\tbl GetLastViewedMonIndex\n"
"\tldr r1, [r4]\n"
"\tb _0804D3C0\n"
"\t.align 2, 0\n"
"_0804D3B0: .4byte sSpriteTemplate_Text\n"
"_0804D3B4: .4byte sTradeMenuResourcesPtr\n"
"_0804D3B8:\n"
- "\tbl sub_8138B20\n"
+ "\tbl GetLastViewedMonIndex\n"
"\tldr r1, [r4]\n"
"\tadds r0, 0x6\n"
"_0804D3C0:\n"
@@ -4243,7 +4243,7 @@ static void sub_804F964(void)
{
for (j = 0; j < sTradeMenuResourcesPtr->partyCounts[i]; j++)
{
- MonIcon_SetAnim(&gSprites[sTradeMenuResourcesPtr->partyIcons[i][j]], 4 - sTradeMenuResourcesPtr->unk_5D[i][j]);
+ SetPartyHPBarSprite(&gSprites[sTradeMenuResourcesPtr->partyIcons[i][j]], 4 - sTradeMenuResourcesPtr->unk_5D[i][j]);
}
}
}
@@ -4394,7 +4394,7 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet)
return FALSE;
}
-int sub_804FBEC(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet)
+int GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet)
{
u8 r9 = a0.unk_01_0;
u8 r4 = a0.unk_00_7;
@@ -4474,7 +4474,7 @@ int sub_804FBEC(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuS
return 0;
}
-int Trade_CanTradeSelectedMon(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3)
+int CanRegisterMonForTradingBoard(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3)
{
u8 canTradeEggAndNational = a0.unk_01_0;
diff --git a/src/wild_pokemon_area.c b/src/wild_pokemon_area.c
index fc4df06ed..3c5afaf25 100644
--- a/src/wild_pokemon_area.c
+++ b/src/wild_pokemon_area.c
@@ -289,7 +289,7 @@ static bool32 PokemonInEncounterTable(const struct WildPokemonInfo * info, s32 s
static u16 GetMapSecIdFromWildMonHeader(const struct WildPokemonHeader * header)
{
- return get_mapheader_by_bank_and_number(header->mapGroup, header->mapNum)->regionMapSectionId;
+ return Overworld_GetMapHeaderByGroupAndId(header->mapGroup, header->mapNum)->regionMapSectionId;
}
static bool32 TryGetMapSecPokedexAreaEntry(u16 mapSecId, const u16 (*lut)[2], s32 count, s32 * lutIdx_p, u16 * tableIdx_p)
diff --git a/sym_common.txt b/sym_common.txt
index b6e5f8b5e..9a64a9d0f 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -180,9 +180,9 @@ gUnknown_3005E90: @ 3005E90
gUnknown_3005E94: @ 3005E94
.space 0x4
-gUnknown_3005E98: @ 3005E98
- .space 0x4
-
+ .align 2
+ .include "party_menu.o"
+ .align 2
.include "help_system_812B1E0.o"
.align 4
.include "fame_checker.o"
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 68488d842..e068902f2 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -562,10 +562,10 @@ gUnknown_203B05C: @ 203B05C
gUnknown_203B064: @ 203B064
.space 0x4
-gUnknown_203B068: @ 203B068
+gUnionRoomOfferedSpecies: @ 203B068
.space 0x2
-gUnknown_203B06A: @ 203B06A
+gUnionRoomRequestedMonType: @ 203B06A
.space 0x2
gUnknown_203B06C: @ 203B06C
@@ -589,54 +589,10 @@ gUnknown_203B094: @ 203B094
gUnknown_203B098: @ 203B098
.space 0x4
-gUnknown_203B09C: @ 203B09C
- .space 0x4
-
-gUnknown_203B0A0: @ 203B0A0
- .space 0x9
-
-gUnknown_203B0A9: @ 203B0A9
- .space 0x5
-
-gUnknown_203B0AE: @ 203B0AE
- .space 0x6
-
-gUnknown_203B0B4: @ 203B0B4
- .space 0x4
-
-gUnknown_203B0B8: @ 203B0B8
- .space 0x4
-
-gUnknown_203B0BC: @ 203B0BC
- .space 0x4
-
-gUnknown_203B0C0: @ 203B0C0
- .space 0x1
-
-gUnknown_203B0C1: @ 203B0C1
- .space 0x3
-
-gPostMenuFieldCallback: @ 203B0C4
- .space 0x4
-
-gUnknown_203B0C8: @ 203B0C8
- .space 0x4
-
-gUnknown_203B0CC: @ 203B0CC
- .space 0x4
-
-gUnknown_203B0D0: @ 203B0D0
- .space 0x4
-
-gSelectedOrderFromParty: @ 203B0D4
- .space 0x4
-
-gUnknown_203B0D8: @ 203B0D8
- .space 0x4
-
-gUnknown_203B0DC: @ 203B0DC
- .space 0x4
+ .align 2
+ .include "src/party_menu.o"
+ .align 2
gUnknown_203B0E0: @ 203B0E0
.space 0x4
@@ -680,7 +636,7 @@ gUnknown_203B164: @ 203B164
gUnknown_203B168: @ 203B168
.space 0x4
-gUnknown_203B16C: @ 203B16C
+gLastViewedMonIndex: @ 203B16C
.space 0x1
gUnknown_203B16D: @ 203B16D