summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-11-25 09:15:34 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2019-11-25 09:15:34 -0500
commit10aa908f56599c155ecf70ccee6b07eea07fb643 (patch)
tree0bec37a7083498f43dcf1124ceb0ce13c74ca420
parent0e3d574276db954994b0be24c61813b0b0e28c0c (diff)
parent46773995020da0bc7984933f7f407ff30394596d (diff)
Merge branch 'dism_more_data' of github.com:PikalaxALT/pokefirered into dism_more_data
-rw-r--r--asm/battle_message.s3043
-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--baserom.ipsbin242395 -> 239212 bytes
-rw-r--r--common_syms/party_menu.txt1
-rw-r--r--data/battle_message.s2923
-rw-r--r--data/battle_scripts_1.s6
-rw-r--r--data/event_scripts.s6
-rw-r--r--data/graphics.s16
-rw-r--r--data/link_rfu.s261
-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--graphics/pokemon_special_anim/unk_8459868.pal19
-rw-r--r--graphics/pokemon_special_anim/unk_84598A4.pal19
-rw-r--r--graphics/pokemon_special_anim/unk_8459940.pal19
-rw-r--r--include/battle.h5
-rw-r--r--include/battle_message.h10
-rw-r--r--include/battle_string_ids.h2
-rw-r--r--include/battle_tower.h7
-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/constants/trainers.h149
-rw-r--r--include/data.h2
-rw-r--r--include/easy_chat.h1
-rw-r--r--include/event_scripts.h6
-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.h9
-rw-r--r--include/global.h22
-rw-r--r--include/graphics.h13
-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.h154
-rw-r--r--include/trade.h6
-rw-r--r--include/trainer_tower.h2
-rw-r--r--include/union_room.h7
-rw-r--r--ld_script.txt8
-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_message.c2515
-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.c4
-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.c20
-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.txt71
120 files changed, 14545 insertions, 27067 deletions
diff --git a/asm/battle_message.s b/asm/battle_message.s
deleted file mode 100644
index fc21f17ee..000000000
--- a/asm/battle_message.s
+++ /dev/null
@@ -1,3043 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start BufferStringBattle
-BufferStringBattle: @ 80D7274
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 16
- lsrs r6, r0, 16
- movs r7, 0
- ldr r4, _080D7330 @ =gUnknown_2039A34
- ldr r0, _080D7334 @ =gActiveBattler
- mov r8, r0
- ldrb r1, [r0]
- lsls r1, 9
- ldr r0, _080D7338 @ =gBattleBufferA + 4
- adds r1, r0
- str r1, [r4]
- ldr r2, _080D733C @ =gLastUsedItem
- ldrh r0, [r1, 0x4]
- strh r0, [r2]
- ldr r2, _080D7340 @ =gLastUsedAbility
- ldrb r0, [r1, 0x6]
- strb r0, [r2]
- ldr r5, _080D7344 @ =gBattleScripting
- ldrb r0, [r1, 0x7]
- strb r0, [r5, 0x17]
- ldr r3, _080D7348 @ =gBattleStruct
- ldr r0, [r3]
- adds r0, 0x52
- ldrb r1, [r1, 0x8]
- strb r1, [r0]
- ldr r0, [r3]
- adds r0, 0xAD
- ldr r1, [r4]
- ldrb r1, [r1, 0x9]
- strb r1, [r0]
- ldr r1, _080D734C @ =gPotentialItemEffectBattler
- ldr r2, [r4]
- ldrb r0, [r2, 0xA]
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x8E
- ldrb r1, [r2, 0xB]
- strb r1, [r0]
- movs r2, 0
- mov r12, r8
- mov r10, r5
- ldr r1, _080D7350 @ =gBattleTextBuff1
- mov r9, r1
- ldr r3, _080D7354 @ =gUnknown_2039A30
-_080D72D6:
- adds r0, r2, r3
- ldr r1, [r4]
- adds r1, 0xC
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x3
- ble _080D72D6
- movs r2, 0
- ldr r0, _080D7350 @ =gBattleTextBuff1
- mov r8, r0
- ldr r3, _080D7330 @ =gUnknown_2039A34
- ldr r5, _080D7358 @ =gBattleTextBuff2
- ldr r4, _080D735C @ =gBattleTextBuff3
-_080D72F4:
- mov r0, r8
- adds r1, r2, r0
- ldr r0, [r3]
- adds r0, 0x10
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, r2, r5
- ldr r0, [r3]
- adds r0, 0x20
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, r2, r4
- ldr r0, [r3]
- adds r0, 0x30
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0xF
- ble _080D72F4
- cmp r6, 0x5
- bls _080D7326
- b _080D77B8
-_080D7326:
- lsls r0, r6, 2
- ldr r1, _080D7360 @ =_080D7364
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080D7330: .4byte gUnknown_2039A34
-_080D7334: .4byte gActiveBattler
-_080D7338: .4byte gBattleBufferA + 4
-_080D733C: .4byte gLastUsedItem
-_080D7340: .4byte gLastUsedAbility
-_080D7344: .4byte gBattleScripting
-_080D7348: .4byte gBattleStruct
-_080D734C: .4byte gPotentialItemEffectBattler
-_080D7350: .4byte gBattleTextBuff1
-_080D7354: .4byte gUnknown_2039A30
-_080D7358: .4byte gBattleTextBuff2
-_080D735C: .4byte gBattleTextBuff3
-_080D7360: .4byte _080D7364
- .align 2, 0
-_080D7364:
- .4byte _080D737C
- .4byte _080D7428
- .4byte _080D74C8
- .4byte _080D7558
- .4byte _080D75F0
- .4byte _080D7654
-_080D737C:
- ldr r0, _080D739C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080D73C4
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D73B4
- movs r0, 0x40
- ands r1, r0
- cmp r1, 0
- beq _080D73A4
- ldr r7, _080D73A0 @ =gUnknown_83FD397
- b _080D77DC
- .align 2, 0
-_080D739C: .4byte gBattleTypeFlags
-_080D73A0: .4byte gUnknown_83FD397
-_080D73A4:
- ldr r0, _080D73B8 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0xC0
- lsls r0, 4
- ldr r7, _080D73BC @ =gUnknown_83FD383
- cmp r1, r0
- beq _080D73B4
- b _080D77DC
-_080D73B4:
- ldr r7, _080D73C0 @ =gUnknown_83FD366
- b _080D77DC
- .align 2, 0
-_080D73B8: .4byte gTrainerBattleOpponent_A
-_080D73BC: .4byte gUnknown_83FD383
-_080D73C0: .4byte gUnknown_83FD366
-_080D73C4:
- movs r0, 0x80
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _080D73E8
- movs r0, 0x80
- lsls r0, 6
- ands r1, r0
- ldr r7, _080D73E0 @ =gUnknown_83FD2D9
- cmp r1, 0
- bne _080D73DC
- b _080D77DC
-_080D73DC:
- ldr r7, _080D73E4 @ =gUnknown_83FD30D
- b _080D77DC
- .align 2, 0
-_080D73E0: .4byte gUnknown_83FD2D9
-_080D73E4: .4byte gUnknown_83FD30D
-_080D73E8:
- movs r0, 0x80
- lsls r0, 6
- ands r0, r1
- cmp r0, 0
- beq _080D73FC
- ldr r7, _080D73F8 @ =gUnknown_83FD297
- b _080D77DC
- .align 2, 0
-_080D73F8: .4byte gUnknown_83FD297
-_080D73FC:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D740C
- ldr r7, _080D7408 @ =gUnknown_83FD2BF
- b _080D77DC
- .align 2, 0
-_080D7408: .4byte gUnknown_83FD2BF
-_080D740C:
- movs r0, 0x80
- lsls r0, 2
- ands r1, r0
- ldr r7, _080D7420 @ =gUnknown_83FD284
- cmp r1, 0
- bne _080D741A
- b _080D77DC
-_080D741A:
- ldr r7, _080D7424 @ =gUnknown_83FD2AA
- b _080D77DC
- .align 2, 0
-_080D7420: .4byte gUnknown_83FD284
-_080D7424: .4byte gUnknown_83FD2AA
-_080D7428:
- mov r1, r12
- ldrb r0, [r1]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080D7468
- ldr r0, _080D7454 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D7460
- movs r0, 0x40
- ands r1, r0
- ldr r7, _080D7458 @ =gUnknown_83FD466
- cmp r1, 0
- bne _080D744E
- b _080D77DC
-_080D744E:
- ldr r7, _080D745C @ =gUnknown_83FD4B5
- b _080D77DC
- .align 2, 0
-_080D7454: .4byte gBattleTypeFlags
-_080D7458: .4byte gUnknown_83FD466
-_080D745C: .4byte gUnknown_83FD4B5
-_080D7460:
- ldr r7, _080D7464 @ =gUnknown_83FD45E
- b _080D77DC
- .align 2, 0
-_080D7464: .4byte gUnknown_83FD45E
-_080D7468:
- ldr r0, _080D7480 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D74A0
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080D7488
- ldr r7, _080D7484 @ =gUnknown_83FD41E
- b _080D77DC
- .align 2, 0
-_080D7480: .4byte gBattleTypeFlags
-_080D7484: .4byte gUnknown_83FD41E
-_080D7488:
- movs r0, 0x2
- ands r1, r0
- ldr r7, _080D7498 @ =gUnknown_83FD3C7
- cmp r1, 0
- bne _080D7494
- b _080D77DC
-_080D7494:
- ldr r7, _080D749C @ =gUnknown_83FD407
- b _080D77DC
- .align 2, 0
-_080D7498: .4byte gUnknown_83FD3C7
-_080D749C: .4byte gUnknown_83FD407
-_080D74A0:
- movs r0, 0x2
- ands r1, r0
- cmp r1, 0
- beq _080D74B8
- ldr r0, _080D74BC @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0xC0
- lsls r0, 4
- ldr r7, _080D74C0 @ =gUnknown_83FD3F7
- cmp r1, r0
- beq _080D74B8
- b _080D77DC
-_080D74B8:
- ldr r7, _080D74C4 @ =gUnknown_83FD3B1
- b _080D77DC
- .align 2, 0
-_080D74BC: .4byte gTrainerBattleOpponent_A
-_080D74C0: .4byte gUnknown_83FD3F7
-_080D74C4: .4byte gUnknown_83FD3B1
-_080D74C8:
- mov r1, r12
- ldrb r0, [r1]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080D7520
- ldr r0, _080D74E8 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xAD
- ldrb r2, [r0]
- cmp r2, 0
- bne _080D74F0
- ldr r7, _080D74EC @ =gUnknown_83FD4CD
- b _080D77DC
- .align 2, 0
-_080D74E8: .4byte gBattleStruct
-_080D74EC: .4byte gUnknown_83FD4CD
-_080D74F0:
- cmp r2, 0x1
- beq _080D7500
- ldr r0, _080D7504 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D750C
-_080D7500:
- ldr r7, _080D7508 @ =gUnknown_83FD4EB
- b _080D77DC
- .align 2, 0
-_080D7504: .4byte gBattleTypeFlags
-_080D7508: .4byte gUnknown_83FD4EB
-_080D750C:
- ldr r7, _080D7518 @ =gUnknown_83FD50D
- cmp r2, 0x2
- beq _080D7514
- b _080D77DC
-_080D7514:
- ldr r7, _080D751C @ =gUnknown_83FD4FA
- b _080D77DC
- .align 2, 0
-_080D7518: .4byte gUnknown_83FD50D
-_080D751C: .4byte gUnknown_83FD4FA
-_080D7520:
- ldr r0, _080D7540 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 4
- cmp r1, r0
- bne _080D7550
- ldr r0, _080D7544 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- ldr r7, _080D7548 @ =gUnknown_83FD535
- cmp r0, 0
- bne _080D753C
- b _080D77DC
-_080D753C:
- ldr r7, _080D754C @ =gUnknown_83FD545
- b _080D77DC
- .align 2, 0
-_080D7540: .4byte gTrainerBattleOpponent_A
-_080D7544: .4byte gBattleTypeFlags
-_080D7548: .4byte gUnknown_83FD535
-_080D754C: .4byte gUnknown_83FD545
-_080D7550:
- ldr r7, _080D7554 @ =gUnknown_83FD522
- b _080D77DC
- .align 2, 0
-_080D7554: .4byte gUnknown_83FD522
-_080D7558:
- mov r1, r10
- ldrb r0, [r1, 0x17]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080D75B0
- ldr r0, _080D7584 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xAD
- ldrb r2, [r0]
- cmp r2, 0
- beq _080D757E
- ldr r0, _080D7588 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D7590
-_080D757E:
- ldr r7, _080D758C @ =gUnknown_83FD475
- b _080D77DC
- .align 2, 0
-_080D7584: .4byte gBattleStruct
-_080D7588: .4byte gBattleTypeFlags
-_080D758C: .4byte gUnknown_83FD475
-_080D7590:
- cmp r2, 0x1
- bne _080D759C
- ldr r7, _080D7598 @ =gUnknown_83FD47D
- b _080D77DC
- .align 2, 0
-_080D7598: .4byte gUnknown_83FD47D
-_080D759C:
- ldr r7, _080D75A8 @ =gUnknown_83FD497
- cmp r2, 0x2
- beq _080D75A4
- b _080D77DC
-_080D75A4:
- ldr r7, _080D75AC @ =gUnknown_83FD488
- b _080D77DC
- .align 2, 0
-_080D75A8: .4byte gUnknown_83FD497
-_080D75AC: .4byte gUnknown_83FD488
-_080D75B0:
- ldr r0, _080D75C8 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D75E0
- movs r0, 0x40
- ands r1, r0
- cmp r1, 0
- beq _080D75D0
- ldr r7, _080D75CC @ =gUnknown_83FD44E
- b _080D77DC
- .align 2, 0
-_080D75C8: .4byte gBattleTypeFlags
-_080D75CC: .4byte gUnknown_83FD44E
-_080D75D0:
- ldr r0, _080D75E4 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0xC0
- lsls r0, 4
- ldr r7, _080D75E8 @ =gUnknown_83FD43E
- cmp r1, r0
- beq _080D75E0
- b _080D77DC
-_080D75E0:
- ldr r7, _080D75EC @ =gUnknown_83FD3E4
- b _080D77DC
- .align 2, 0
-_080D75E4: .4byte gTrainerBattleOpponent_A
-_080D75E8: .4byte gUnknown_83FD43E
-_080D75EC: .4byte gUnknown_83FD3E4
-_080D75F0:
- mov r0, r9
- bl sub_80D86C8
- ldr r0, _080D761C @ =gUnknown_2039A34
- ldr r2, [r0]
- ldrh r1, [r2]
- movs r0, 0xB1
- lsls r0, 1
- cmp r1, r0
- bls _080D762C
- ldr r0, _080D7620 @ =gBattleTextBuff2
- ldr r2, _080D7624 @ =gUnknown_83FEA28
- ldr r1, _080D7628 @ =gBattleStruct
- ldr r1, [r1]
- adds r1, 0x8E
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- b _080D763C
- .align 2, 0
-_080D761C: .4byte gUnknown_2039A34
-_080D7620: .4byte gBattleTextBuff2
-_080D7624: .4byte gUnknown_83FEA28
-_080D7628: .4byte gBattleStruct
-_080D762C:
- ldr r0, _080D7648 @ =gBattleTextBuff2
- ldrh r2, [r2]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _080D764C @ =gMoveNames
- adds r1, r2
- bl StringCopy
-_080D763C:
- ldr r0, _080D7648 @ =gBattleTextBuff2
- bl sub_80D8720
- ldr r7, _080D7650 @ =gUnknown_83FD57B
- b _080D77DC
- .align 2, 0
-_080D7648: .4byte gBattleTextBuff2
-_080D764C: .4byte gMoveNames
-_080D7650: .4byte gUnknown_83FD57B
-_080D7654:
- ldr r4, _080D7694 @ =gBattleTextBuff1
- ldrb r1, [r4]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080D76D4
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r4]
- mov r1, r12
- ldrb r0, [r1]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D7682
- ldrb r1, [r4]
- cmp r1, 0x3
- beq _080D7682
- movs r0, 0x3
- eors r0, r1
- strb r0, [r4]
-_080D7682:
- ldr r0, _080D7694 @ =gBattleTextBuff1
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _080D769C
- ldr r7, _080D7698 @ =gUnknown_83FCC8A
- b _080D77DC
- .align 2, 0
-_080D7694: .4byte gBattleTextBuff1
-_080D7698: .4byte gUnknown_83FCC8A
-_080D769C:
- ldr r0, _080D76AC @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080D76B4
- ldr r7, _080D76B0 @ =gUnknown_83FCD9F
- b _080D77DC
- .align 2, 0
-_080D76AC: .4byte gBattleTypeFlags
-_080D76B0: .4byte gUnknown_83FCD9F
-_080D76B4:
- ldr r0, _080D76C8 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0xC0
- lsls r0, 4
- ldr r7, _080D76CC @ =gUnknown_83FCD92
- cmp r1, r0
- beq _080D76C4
- b _080D77DC
-_080D76C4:
- ldr r7, _080D76D0 @ =gUnknown_83FE9D4
- b _080D77DC
- .align 2, 0
-_080D76C8: .4byte gTrainerBattleOpponent_A
-_080D76CC: .4byte gUnknown_83FCD92
-_080D76D0: .4byte gUnknown_83FE9D4
-_080D76D4:
- mov r1, r12
- ldrb r0, [r1]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D76F0
- ldrb r1, [r4]
- cmp r1, 0x3
- beq _080D76F0
- movs r0, 0x3
- eors r0, r1
- strb r0, [r4]
-_080D76F0:
- ldr r0, _080D7710 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080D7738
- ldr r0, _080D7714 @ =gBattleTextBuff1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _080D7728
- cmp r0, 0x2
- bgt _080D7718
- cmp r0, 0x1
- beq _080D771E
- b _080D77DC
- .align 2, 0
-_080D7710: .4byte gBattleTypeFlags
-_080D7714: .4byte gBattleTextBuff1
-_080D7718:
- cmp r0, 0x3
- beq _080D7730
- b _080D77DC
-_080D771E:
- ldr r7, _080D7724 @ =gUnknown_83FCCF8
- b _080D77DC
- .align 2, 0
-_080D7724: .4byte gUnknown_83FCCF8
-_080D7728:
- ldr r7, _080D772C @ =gUnknown_83FCD27
- b _080D77DC
- .align 2, 0
-_080D772C: .4byte gUnknown_83FCD27
-_080D7730:
- ldr r7, _080D7734 @ =gUnknown_83FCD66
- b _080D77DC
- .align 2, 0
-_080D7734: .4byte gUnknown_83FCD66
-_080D7738:
- ldr r0, _080D7758 @ =gTrainerBattleOpponent_A
- ldrh r1, [r0]
- movs r0, 0xC0
- lsls r0, 4
- cmp r1, r0
- bne _080D7780
- ldr r0, _080D775C @ =gBattleTextBuff1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _080D7770
- cmp r0, 0x2
- bgt _080D7760
- cmp r0, 0x1
- beq _080D7766
- b _080D77DC
- .align 2, 0
-_080D7758: .4byte gTrainerBattleOpponent_A
-_080D775C: .4byte gBattleTextBuff1
-_080D7760:
- cmp r0, 0x3
- beq _080D7778
- b _080D77DC
-_080D7766:
- ldr r7, _080D776C @ =gUnknown_83FD1C7
- b _080D77DC
- .align 2, 0
-_080D776C: .4byte gUnknown_83FD1C7
-_080D7770:
- ldr r7, _080D7774 @ =gUnknown_83FE9E4
- b _080D77DC
- .align 2, 0
-_080D7774: .4byte gUnknown_83FE9E4
-_080D7778:
- ldr r7, _080D777C @ =gUnknown_83FE9FF
- b _080D77DC
- .align 2, 0
-_080D777C: .4byte gUnknown_83FE9FF
-_080D7780:
- ldr r0, _080D7794 @ =gBattleTextBuff1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _080D77A8
- cmp r0, 0x2
- bgt _080D7798
- cmp r0, 0x1
- beq _080D779E
- b _080D77DC
- .align 2, 0
-_080D7794: .4byte gBattleTextBuff1
-_080D7798:
- cmp r0, 0x3
- beq _080D77B0
- b _080D77DC
-_080D779E:
- ldr r7, _080D77A4 @ =gUnknown_83FCCE4
- b _080D77DC
- .align 2, 0
-_080D77A4: .4byte gUnknown_83FCCE4
-_080D77A8:
- ldr r7, _080D77AC @ =gUnknown_83FCD0F
- b _080D77DC
- .align 2, 0
-_080D77AC: .4byte gUnknown_83FCD0F
-_080D77B0:
- ldr r7, _080D77B4 @ =gUnknown_83FCD41
- b _080D77DC
- .align 2, 0
-_080D77B4: .4byte gUnknown_83FCD41
-_080D77B8:
- ldr r0, _080D77C8 @ =0x00000181
- cmp r6, r0
- bls _080D77D0
- ldr r1, _080D77CC @ =gDisplayedStringBattle
- movs r0, 0xFF
- strb r0, [r1]
- b _080D77E2
- .align 2, 0
-_080D77C8: .4byte 0x00000181
-_080D77CC: .4byte gDisplayedStringBattle
-_080D77D0:
- ldr r1, _080D77F0 @ =gBattleStringsTable
- adds r0, r6, 0
- subs r0, 0xC
- lsls r0, 2
- adds r0, r1
- ldr r7, [r0]
-_080D77DC:
- adds r0, r7, 0
- bl BattleStringExpandPlaceholdersToDisplayedString
-_080D77E2:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D77F0: .4byte gBattleStringsTable
- thumb_func_end BufferStringBattle
-
- thumb_func_start BattleStringExpandPlaceholdersToDisplayedString
-BattleStringExpandPlaceholdersToDisplayedString: @ 80D77F4
- push {lr}
- ldr r1, _080D7800 @ =gDisplayedStringBattle
- bl BattleStringExpandPlaceholders
- pop {r1}
- bx r1
- .align 2, 0
-_080D7800: .4byte gDisplayedStringBattle
- thumb_func_end BattleStringExpandPlaceholdersToDisplayedString
-
- thumb_func_start TryGetStatusString
-TryGetStatusString: @ 80D7804
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _080D781C @ =gUnknown_83FEB5C
- mov r0, sp
- movs r2, 0x8
- bl memcpy
- mov r2, sp
- movs r3, 0
- b _080D782C
- .align 2, 0
-_080D781C: .4byte gUnknown_83FEB5C
-_080D7820:
- strb r1, [r2]
- adds r4, 0x1
- adds r2, 0x1
- adds r3, 0x1
- cmp r3, 0x7
- bhi _080D7834
-_080D782C:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080D7820
-_080D7834:
- ldr r5, [sp]
- ldr r4, [sp, 0x4]
- movs r3, 0
- ldr r2, _080D7850 @ =gStatusConditionStringsTable
-_080D783C:
- ldr r1, [r2]
- ldr r0, [r1]
- cmp r5, r0
- bne _080D7854
- ldr r0, [r1, 0x4]
- cmp r4, r0
- bne _080D7854
- ldr r0, [r2, 0x4]
- b _080D785E
- .align 2, 0
-_080D7850: .4byte gStatusConditionStringsTable
-_080D7854:
- adds r2, 0x8
- adds r3, 0x1
- cmp r3, 0x6
- bls _080D783C
- movs r0, 0
-_080D785E:
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end TryGetStatusString
-
- thumb_func_start BattleStringExpandPlaceholders
-BattleStringExpandPlaceholders: @ 80D7868
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x20
- mov r9, r0
- mov r8, r1
- movs r6, 0
- movs r4, 0
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r7, r0, 24
- mov r0, r9
- ldrb r1, [r0]
- bl _080D83F0
-_080D788A:
- cmp r1, 0xFD
- beq _080D7892
- bl _080D83E0
-_080D7892:
- movs r1, 0x1
- add r9, r1
- mov r2, r9
- ldrb r0, [r2]
- cmp r0, 0x30
- bls _080D78A2
- bl _080D8382
-_080D78A2:
- lsls r0, 2
- ldr r1, _080D78AC @ =_080D78B0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080D78AC: .4byte _080D78B0
- .align 2, 0
-_080D78B0:
- .4byte _080D7974
- .4byte _080D79A2
- .4byte _080D79DE
- .4byte _080D79E8
- .4byte _080D79F4
- .4byte _080D7A00
- .4byte _080D7A24
- .4byte _080D7A48
- .4byte _080D7A6C
- .4byte _080D7A90
- .4byte _080D7ABC
- .4byte _080D7AEC
- .4byte _080D7B1C
- .4byte _080D7B4C
- .4byte _080D7BE0
- .4byte _080D7C4C
- .4byte _080D7CC0
- .4byte _080D7D34
- .4byte _080D7DA8
- .4byte _080D7E1C
- .4byte _080D7E90
- .4byte _080D7EA8
- .4byte _080D7EE4
- .4byte _080D7FB0
- .4byte _080D7FB8
- .4byte _080D7FC8
- .4byte _080D7FD8
- .4byte _080D7FE8
- .4byte _080D8008
- .4byte _080D80A4
- .4byte _080D8162
- .4byte _080D8174
- .4byte _080D8188
- .4byte _080D819C
- .4byte _080D81C0
- .4byte _080D81DC
- .4byte _080D81E8
- .4byte _080D8214
- .4byte _080D8260
- .4byte _080D82F8
- .4byte _080D8340
- .4byte _080D8348
- .4byte _080D8318
- .4byte _080D8320
- .4byte _080D8368
- .4byte _080D8370
- .4byte _080D8240
- .4byte _080D8250
- .4byte _080D79B8
-_080D7974:
- ldr r5, _080D7984 @ =gBattleTextBuff1
- ldrb r0, [r5]
- cmp r0, 0xFD
- bne _080D798C
- ldr r4, _080D7988 @ =gStringVar1
- adds r0, r5, 0
- b _080D79C4
- .align 2, 0
-_080D7984: .4byte gBattleTextBuff1
-_080D7988: .4byte gStringVar1
-_080D798C:
- adds r0, r5, 0
- bl TryGetStatusString
- adds r4, r0, 0
- cmp r4, 0
- beq _080D799C
- bl _080D8382
-_080D799C:
- adds r4, r5, 0
- bl _080D8382
-_080D79A2:
- ldr r1, _080D79B0 @ =gBattleTextBuff2
- ldrb r0, [r1]
- cmp r0, 0xFD
- bne _080D79D8
- ldr r4, _080D79B4 @ =gStringVar2
- b _080D79C2
- .align 2, 0
-_080D79B0: .4byte gBattleTextBuff2
-_080D79B4: .4byte gStringVar2
-_080D79B8:
- ldr r1, _080D79D0 @ =gBattleTextBuff3
- ldrb r0, [r1]
- cmp r0, 0xFD
- bne _080D79D8
- ldr r4, _080D79D4 @ =gStringVar3
-_080D79C2:
- adds r0, r1, 0
-_080D79C4:
- adds r1, r4, 0
- bl ExpandBattleTextBuffPlaceholders
- bl _080D8382
- .align 2, 0
-_080D79D0: .4byte gBattleTextBuff3
-_080D79D4: .4byte gStringVar3
-_080D79D8:
- adds r4, r1, 0
- bl _080D8382
-_080D79DE:
- ldr r4, _080D79E4 @ =gStringVar1
- bl _080D8382
- .align 2, 0
-_080D79E4: .4byte gStringVar1
-_080D79E8:
- ldr r4, _080D79F0 @ =gStringVar2
- bl _080D8382
- .align 2, 0
-_080D79F0: .4byte gStringVar2
-_080D79F4:
- ldr r4, _080D79FC @ =gStringVar3
- bl _080D8382
- .align 2, 0
-_080D79FC: .4byte gStringVar3
-_080D7A00:
- movs r0, 0
- bl GetBattlerAtPosition
- ldr r1, _080D7A1C @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7A20 @ =gPlayerParty
- adds r0, r1
- bl _080D82AA
- .align 2, 0
-_080D7A1C: .4byte gBattlerPartyIndexes
-_080D7A20: .4byte gPlayerParty
-_080D7A24:
- movs r0, 0x1
- bl GetBattlerAtPosition
- ldr r1, _080D7A40 @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7A44 @ =gEnemyParty
- adds r0, r1
- bl _080D82AA
- .align 2, 0
-_080D7A40: .4byte gBattlerPartyIndexes
-_080D7A44: .4byte gEnemyParty
-_080D7A48:
- movs r0, 0x2
- bl GetBattlerAtPosition
- ldr r1, _080D7A64 @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7A68 @ =gPlayerParty
- adds r0, r1
- bl _080D82AA
- .align 2, 0
-_080D7A64: .4byte gBattlerPartyIndexes
-_080D7A68: .4byte gPlayerParty
-_080D7A6C:
- movs r0, 0x3
- bl GetBattlerAtPosition
- ldr r1, _080D7A88 @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7A8C @ =gEnemyParty
- adds r0, r1
- bl _080D82AA
- .align 2, 0
-_080D7A88: .4byte gBattlerPartyIndexes
-_080D7A8C: .4byte gEnemyParty
-_080D7A90:
- ldr r2, _080D7AB0 @ =gBattlerPartyIndexes
- ldr r1, _080D7AB4 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x18]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7AB8 @ =gPlayerParty
- adds r0, r1
- bl _080D82AA
- .align 2, 0
-_080D7AB0: .4byte gBattlerPartyIndexes
-_080D7AB4: .4byte gLinkPlayers
-_080D7AB8: .4byte gPlayerParty
-_080D7ABC:
- ldr r2, _080D7AE0 @ =gBattlerPartyIndexes
- ldr r1, _080D7AE4 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x18]
- movs r0, 0x1
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7AE8 @ =gEnemyParty
- adds r0, r1
- bl _080D82AA
- .align 2, 0
-_080D7AE0: .4byte gBattlerPartyIndexes
-_080D7AE4: .4byte gLinkPlayers
-_080D7AE8: .4byte gEnemyParty
-_080D7AEC:
- ldr r2, _080D7B10 @ =gBattlerPartyIndexes
- ldr r1, _080D7B14 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x18]
- movs r0, 0x2
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7B18 @ =gPlayerParty
- adds r0, r1
- bl _080D82AA
- .align 2, 0
-_080D7B10: .4byte gBattlerPartyIndexes
-_080D7B14: .4byte gLinkPlayers
-_080D7B18: .4byte gPlayerParty
-_080D7B1C:
- ldr r2, _080D7B40 @ =gBattlerPartyIndexes
- ldr r1, _080D7B44 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x18]
- movs r0, 0x3
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7B48 @ =gEnemyParty
- adds r0, r1
- b _080D82AA
- .align 2, 0
-_080D7B40: .4byte gBattlerPartyIndexes
-_080D7B44: .4byte gLinkPlayers
-_080D7B48: .4byte gEnemyParty
-_080D7B4C:
- ldr r4, _080D7B70 @ =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- adds r2, r4, 0
- cmp r0, 0
- beq _080D7BC0
- ldr r0, _080D7B74 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x8
- ands r1, r0
- ldr r4, _080D7B78 @ =gUnknown_83FD555
- cmp r1, 0
- beq _080D7B8A
- ldr r4, _080D7B7C @ =gUnknown_83FD55B
- b _080D7B8A
- .align 2, 0
-_080D7B70: .4byte gBattlerAttacker
-_080D7B74: .4byte gBattleTypeFlags
-_080D7B78: .4byte gUnknown_83FD555
-_080D7B7C: .4byte gUnknown_83FD55B
-_080D7B80:
- mov r3, r8
- adds r0, r3, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
-_080D7B8A:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080D7B80
- ldrb r0, [r2]
- bl GetBattlerPosition
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBattlerAtPosition
- ldr r1, _080D7BB8 @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7BBC @ =gEnemyParty
- adds r0, r1
- b _080D82AA
- .align 2, 0
-_080D7BB8: .4byte gBattlerPartyIndexes
-_080D7BBC: .4byte gEnemyParty
-_080D7BC0:
- ldrb r0, [r2]
- bl GetBattlerPosition
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBattlerAtPosition
- ldr r1, _080D7BDC @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- b _080D82D4
- .align 2, 0
-_080D7BDC: .4byte gBattlerPartyIndexes
-_080D7BE0:
- ldr r4, _080D7C14 @ =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080D7C20
- ldrb r0, [r4]
- bl GetBattlerPosition
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBattlerAtPosition
- ldr r1, _080D7C18 @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, 0x4
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7C1C @ =gPlayerParty
- adds r0, r1
- b _080D82AA
- .align 2, 0
-_080D7C14: .4byte gBattlerAttacker
-_080D7C18: .4byte gBattlerPartyIndexes
-_080D7C1C: .4byte gPlayerParty
-_080D7C20:
- ldrb r0, [r4]
- bl GetBattlerPosition
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBattlerAtPosition
- ldr r1, _080D7C44 @ =gBattlerPartyIndexes
- lsls r0, 24
- lsrs r0, 23
- adds r0, 0x4
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D7C48 @ =gEnemyParty
- b _080D82DA
- .align 2, 0
-_080D7C44: .4byte gBattlerPartyIndexes
-_080D7C48: .4byte gEnemyParty
-_080D7C4C:
- ldr r5, _080D7C98 @ =gBattlerAttacker
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7CB0
- ldr r0, _080D7C9C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x8
- ands r1, r0
- ldr r4, _080D7CA0 @ =gUnknown_83FD555
- cmp r1, 0
- beq _080D7C6A
- ldr r4, _080D7CA4 @ =gUnknown_83FD55B
-_080D7C6A:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _080D7CA8 @ =gBattlerPartyIndexes
- ldr r2, _080D7CAC @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _080D7C8C
-_080D7C7A:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080D7C7A
-_080D7C8C:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _080D82A4
- .align 2, 0
-_080D7C98: .4byte gBattlerAttacker
-_080D7C9C: .4byte gBattleTypeFlags
-_080D7CA0: .4byte gUnknown_83FD555
-_080D7CA4: .4byte gUnknown_83FD55B
-_080D7CA8: .4byte gBattlerPartyIndexes
-_080D7CAC: .4byte gEnemyParty
-_080D7CB0:
- ldr r1, _080D7CBC @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _080D82D4
- .align 2, 0
-_080D7CBC: .4byte gBattlerPartyIndexes
-_080D7CC0:
- ldr r5, _080D7D0C @ =gBattlerTarget
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7D24
- ldr r0, _080D7D10 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x8
- ands r1, r0
- ldr r4, _080D7D14 @ =gUnknown_83FD555
- cmp r1, 0
- beq _080D7CDE
- ldr r4, _080D7D18 @ =gUnknown_83FD55B
-_080D7CDE:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _080D7D1C @ =gBattlerPartyIndexes
- ldr r2, _080D7D20 @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _080D7D00
-_080D7CEE:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080D7CEE
-_080D7D00:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _080D82A4
- .align 2, 0
-_080D7D0C: .4byte gBattlerTarget
-_080D7D10: .4byte gBattleTypeFlags
-_080D7D14: .4byte gUnknown_83FD555
-_080D7D18: .4byte gUnknown_83FD55B
-_080D7D1C: .4byte gBattlerPartyIndexes
-_080D7D20: .4byte gEnemyParty
-_080D7D24:
- ldr r1, _080D7D30 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _080D82D4
- .align 2, 0
-_080D7D30: .4byte gBattlerPartyIndexes
-_080D7D34:
- ldr r5, _080D7D80 @ =gEffectBattler
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7D98
- ldr r0, _080D7D84 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x8
- ands r1, r0
- ldr r4, _080D7D88 @ =gUnknown_83FD555
- cmp r1, 0
- beq _080D7D52
- ldr r4, _080D7D8C @ =gUnknown_83FD55B
-_080D7D52:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _080D7D90 @ =gBattlerPartyIndexes
- ldr r2, _080D7D94 @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _080D7D74
-_080D7D62:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080D7D62
-_080D7D74:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _080D82A4
- .align 2, 0
-_080D7D80: .4byte gEffectBattler
-_080D7D84: .4byte gBattleTypeFlags
-_080D7D88: .4byte gUnknown_83FD555
-_080D7D8C: .4byte gUnknown_83FD55B
-_080D7D90: .4byte gBattlerPartyIndexes
-_080D7D94: .4byte gEnemyParty
-_080D7D98:
- ldr r1, _080D7DA4 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _080D82D4
- .align 2, 0
-_080D7DA4: .4byte gBattlerPartyIndexes
-_080D7DA8:
- ldr r5, _080D7DF4 @ =gActiveBattler
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7E0C
- ldr r0, _080D7DF8 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x8
- ands r1, r0
- ldr r4, _080D7DFC @ =gUnknown_83FD555
- cmp r1, 0
- beq _080D7DC6
- ldr r4, _080D7E00 @ =gUnknown_83FD55B
-_080D7DC6:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _080D7E04 @ =gBattlerPartyIndexes
- ldr r2, _080D7E08 @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _080D7DE8
-_080D7DD6:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080D7DD6
-_080D7DE8:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _080D82A4
- .align 2, 0
-_080D7DF4: .4byte gActiveBattler
-_080D7DF8: .4byte gBattleTypeFlags
-_080D7DFC: .4byte gUnknown_83FD555
-_080D7E00: .4byte gUnknown_83FD55B
-_080D7E04: .4byte gBattlerPartyIndexes
-_080D7E08: .4byte gEnemyParty
-_080D7E0C:
- ldr r1, _080D7E18 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _080D82D4
- .align 2, 0
-_080D7E18: .4byte gBattlerPartyIndexes
-_080D7E1C:
- ldr r5, _080D7E68 @ =gBattleScripting
- ldrb r0, [r5, 0x17]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D7E80
- ldr r0, _080D7E6C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x8
- ands r1, r0
- ldr r4, _080D7E70 @ =gUnknown_83FD555
- cmp r1, 0
- beq _080D7E3A
- ldr r4, _080D7E74 @ =gUnknown_83FD55B
-_080D7E3A:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _080D7E78 @ =gBattlerPartyIndexes
- ldr r2, _080D7E7C @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _080D7E5C
-_080D7E4A:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080D7E4A
-_080D7E5C:
- ldrb r0, [r2, 0x17]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _080D82A4
- .align 2, 0
-_080D7E68: .4byte gBattleScripting
-_080D7E6C: .4byte gBattleTypeFlags
-_080D7E70: .4byte gUnknown_83FD555
-_080D7E74: .4byte gUnknown_83FD55B
-_080D7E78: .4byte gBattlerPartyIndexes
-_080D7E7C: .4byte gEnemyParty
-_080D7E80:
- ldr r1, _080D7E8C @ =gBattlerPartyIndexes
- ldrb r0, [r5, 0x17]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _080D82D4
- .align 2, 0
-_080D7E8C: .4byte gBattlerPartyIndexes
-_080D7E90:
- ldr r0, _080D7EA4 @ =gUnknown_2039A34
- ldr r2, [r0]
- ldrh r1, [r2]
- movs r0, 0xB1
- lsls r0, 1
- cmp r1, r0
- bhi _080D7EB6
- ldrh r1, [r2]
- b _080D7ED6
- .align 2, 0
-_080D7EA4: .4byte gUnknown_2039A34
-_080D7EA8:
- ldr r0, _080D7EC8 @ =gUnknown_2039A34
- ldr r2, [r0]
- ldrh r1, [r2, 0x2]
- movs r0, 0xB1
- lsls r0, 1
- cmp r1, r0
- bls _080D7ED4
-_080D7EB6:
- ldr r0, _080D7ECC @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x8E
- ldrb r0, [r0]
- lsls r0, 2
- ldr r1, _080D7ED0 @ =gUnknown_83FEA28
- adds r4, r0, r1
- b _080D8382
- .align 2, 0
-_080D7EC8: .4byte gUnknown_2039A34
-_080D7ECC: .4byte gBattleStruct
-_080D7ED0: .4byte gUnknown_83FEA28
-_080D7ED4:
- ldrh r1, [r2, 0x2]
-_080D7ED6:
- movs r0, 0xD
- muls r1, r0
- ldr r0, _080D7EE0 @ =gMoveNames
- adds r4, r1, r0
- b _080D8382
- .align 2, 0
-_080D7EE0: .4byte gMoveNames
-_080D7EE4:
- ldr r0, _080D7F1C @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D7F9C
- ldr r2, _080D7F20 @ =gLastUsedItem
- ldrh r0, [r2]
- cmp r0, 0xAF
- bne _080D7F98
- movs r0, 0x40
- ands r1, r0
- cmp r1, 0
- bne _080D7F44
- ldr r0, _080D7F24 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xB5
- ldrb r0, [r0]
- cmp r0, 0
- beq _080D7F2C
- ldr r2, _080D7F28 @ =gPotentialItemEffectBattler
- ldrb r1, [r2]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080D7F38
- b _080D7F90
- .align 2, 0
-_080D7F1C: .4byte gBattleTypeFlags
-_080D7F20: .4byte gLastUsedItem
-_080D7F24: .4byte gBattleStruct
-_080D7F28: .4byte gPotentialItemEffectBattler
-_080D7F2C:
- ldr r2, _080D7F40 @ =gPotentialItemEffectBattler
- ldrb r1, [r2]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080D7F90
-_080D7F38:
- ldrb r0, [r2]
- lsls r1, r0, 3
- subs r1, r0
- b _080D7F64
- .align 2, 0
-_080D7F40: .4byte gPotentialItemEffectBattler
-_080D7F44:
- ldr r2, _080D7F7C @ =gLinkPlayers
- ldr r0, _080D7F80 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xB5
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _080D7F84 @ =gPotentialItemEffectBattler
- ldrb r2, [r1]
- ldrh r0, [r0, 0x18]
- cmp r0, r2
- bne _080D7F90
- lsls r1, r2, 3
- subs r1, r2
-_080D7F64:
- lsls r1, 2
- ldr r0, _080D7F88 @ =gEnigmaBerries
- adds r1, r0
- mov r0, sp
- bl StringCopy
- ldr r1, _080D7F8C @ =gUnknown_83FD8AF
- mov r0, sp
- bl StringAppend
- mov r4, sp
- b _080D8382
- .align 2, 0
-_080D7F7C: .4byte gLinkPlayers
-_080D7F80: .4byte gBattleStruct
-_080D7F84: .4byte gPotentialItemEffectBattler
-_080D7F88: .4byte gEnigmaBerries
-_080D7F8C: .4byte gUnknown_83FD8AF
-_080D7F90:
- ldr r4, _080D7F94 @ =gUnknown_83FD8A2
- b _080D8382
- .align 2, 0
-_080D7F94: .4byte gUnknown_83FD8A2
-_080D7F98:
- ldrh r0, [r2]
- b _080D7FA0
-_080D7F9C:
- ldr r0, _080D7FAC @ =gLastUsedItem
- ldrh r0, [r0]
-_080D7FA0:
- mov r1, sp
- bl CopyItemName
- mov r4, sp
- b _080D8382
- .align 2, 0
-_080D7FAC: .4byte gLastUsedItem
-_080D7FB0:
- ldr r0, _080D7FB4 @ =gLastUsedAbility
- b _080D7FF0
- .align 2, 0
-_080D7FB4: .4byte gLastUsedAbility
-_080D7FB8:
- ldr r1, _080D7FC0 @ =gUnknown_2039A30
- ldr r0, _080D7FC4 @ =gBattlerAttacker
- b _080D7FEC
- .align 2, 0
-_080D7FC0: .4byte gUnknown_2039A30
-_080D7FC4: .4byte gBattlerAttacker
-_080D7FC8:
- ldr r1, _080D7FD0 @ =gUnknown_2039A30
- ldr r0, _080D7FD4 @ =gBattlerTarget
- b _080D7FEC
- .align 2, 0
-_080D7FD0: .4byte gUnknown_2039A30
-_080D7FD4: .4byte gBattlerTarget
-_080D7FD8:
- ldr r1, _080D7FE0 @ =gUnknown_2039A30
- ldr r0, _080D7FE4 @ =gBattleScripting
- ldrb r0, [r0, 0x17]
- b _080D7FEE
- .align 2, 0
-_080D7FE0: .4byte gUnknown_2039A30
-_080D7FE4: .4byte gBattleScripting
-_080D7FE8:
- ldr r1, _080D7FFC @ =gUnknown_2039A30
- ldr r0, _080D8000 @ =gEffectBattler
-_080D7FEC:
- ldrb r0, [r0]
-_080D7FEE:
- adds r0, r1
-_080D7FF0:
- ldrb r1, [r0]
- movs r0, 0xD
- muls r1, r0
- ldr r0, _080D8004 @ =gAbilityNames
- adds r4, r1, r0
- b _080D8382
- .align 2, 0
-_080D7FFC: .4byte gUnknown_2039A30
-_080D8000: .4byte gEffectBattler
-_080D8004: .4byte gAbilityNames
-_080D8008:
- ldr r3, _080D8020 @ =gTrainerBattleOpponent_A
- ldrh r1, [r3]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _080D8024
- bl GetSecretBaseTrainerNameIndex
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xD
- b _080D8094
- .align 2, 0
-_080D8020: .4byte gTrainerBattleOpponent_A
-_080D8024:
- movs r0, 0xC0
- lsls r0, 4
- cmp r1, r0
- bne _080D8038
- bl sub_80447F0
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xD
- b _080D8094
-_080D8038:
- ldr r0, _080D8054 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _080D8058
- bl GetBattleTowerTrainerClassNameId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xD
- b _080D8094
- .align 2, 0
-_080D8054: .4byte gBattleTypeFlags
-_080D8058:
- movs r0, 0x80
- lsls r0, 12
- ands r0, r1
- cmp r0, 0
- beq _080D806E
- bl sub_815DA10
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xD
- b _080D8094
-_080D806E:
- movs r0, 0x80
- lsls r0, 4
- ands r1, r0
- cmp r1, 0
- beq _080D8084
- bl GetEreaderTrainerClassId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xD
- b _080D8094
-_080D8084:
- ldr r2, _080D809C @ =gTrainers
- ldrh r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r0, 0xD
-_080D8094:
- muls r1, r0
- ldr r0, _080D80A0 @ =gTrainerClassNames
- adds r4, r1, r0
- b _080D8382
- .align 2, 0
-_080D809C: .4byte gTrainers
-_080D80A0: .4byte gTrainerClassNames
-_080D80A4:
- ldr r0, _080D80E8 @ =gTrainerBattleOpponent_A
- ldrh r2, [r0]
- movs r1, 0x80
- lsls r1, 3
- adds r5, r0, 0
- cmp r2, r1
- bne _080D80D6
- movs r2, 0
- ldr r0, _080D80EC @ =gBattleResources
- ldr r3, [r0]
-_080D80B8:
- mov r1, sp
- adds r0, r1, r2
- ldr r1, [r3]
- adds r1, 0x2
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x6
- ble _080D80B8
- mov r3, sp
- adds r1, r3, r2
- movs r0, 0xFF
- strb r0, [r1]
- mov r4, sp
-_080D80D6:
- ldrh r1, [r5]
- movs r0, 0xC0
- lsls r0, 4
- cmp r1, r0
- bne _080D80F0
- movs r1, 0x1
- adds r0, r7, 0
- eors r0, r1
- b _080D81C8
- .align 2, 0
-_080D80E8: .4byte gTrainerBattleOpponent_A
-_080D80EC: .4byte gBattleResources
-_080D80F0:
- ldr r0, _080D8108 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _080D810C
- mov r0, sp
- bl GetBattleTowerTrainerName
- b _080D8382
- .align 2, 0
-_080D8108: .4byte gBattleTypeFlags
-_080D810C:
- movs r0, 0x80
- lsls r0, 12
- ands r0, r1
- cmp r0, 0
- beq _080D8120
- mov r0, sp
- bl sub_815DA28
- mov r4, sp
- b _080D8382
-_080D8120:
- movs r0, 0x80
- lsls r0, 4
- ands r1, r0
- cmp r1, 0
- beq _080D8134
- mov r0, sp
- bl CopyEReaderTrainerName5
- mov r4, sp
- b _080D8382
-_080D8134:
- ldr r2, _080D8158 @ =gTrainers
- ldrh r0, [r5]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r0, r1, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0x51
- beq _080D814E
- cmp r0, 0x59
- beq _080D814E
- cmp r0, 0x5A
- bne _080D815C
-_080D814E:
- movs r0, 0x6
- bl GetExpandedPlaceholder
- adds r4, r0, 0
- b _080D8382
- .align 2, 0
-_080D8158: .4byte gTrainers
-_080D815C:
- adds r0, r2, 0x4
- adds r4, r1, r0
- b _080D8382
-_080D8162:
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- ldr r1, _080D8170 @ =gLinkPlayers + 8
- adds r4, r0, r1
- b _080D8382
- .align 2, 0
-_080D8170: .4byte gLinkPlayers + 8
-_080D8174:
- ldr r4, _080D8184 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x18]
- movs r0, 0x2
- b _080D81AA
- .align 2, 0
-_080D8184: .4byte gLinkPlayers
-_080D8188:
- ldr r4, _080D8198 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x18]
- movs r0, 0x1
- b _080D81AA
- .align 2, 0
-_080D8198: .4byte gLinkPlayers
-_080D819C:
- ldr r4, _080D81BC @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x18]
- movs r0, 0x3
-_080D81AA:
- eors r0, r1
- bl GetBattlerMultiplayerId
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r4, 0x8
- adds r4, r1, r4
- b _080D8382
- .align 2, 0
-_080D81BC: .4byte gLinkPlayers
-_080D81C0:
- ldr r0, _080D81D4 @ =gBattleScripting
- ldrb r0, [r0, 0x17]
- bl GetBattlerMultiplayerId
-_080D81C8:
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r0, _080D81D8 @ =gLinkPlayers + 8
- adds r4, r1, r0
- b _080D8382
- .align 2, 0
-_080D81D4: .4byte gBattleScripting
-_080D81D8: .4byte gLinkPlayers + 8
-_080D81DC:
- ldr r0, _080D81E4 @ =gSaveBlock2Ptr
- ldr r4, [r0]
- b _080D8382
- .align 2, 0
-_080D81E4: .4byte gSaveBlock2Ptr
-_080D81E8:
- ldr r0, _080D8204 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _080D820C
- ldr r4, _080D8208 @ =gStringVar4
- adds r0, r4, 0
- movs r1, 0
- bl sub_815DC40
- b _080D8382
- .align 2, 0
-_080D8204: .4byte gBattleTypeFlags
-_080D8208: .4byte gStringVar4
-_080D820C:
- bl GetTrainerALoseText
- adds r4, r0, 0
- b _080D8382
-_080D8214:
- ldr r0, _080D8230 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _080D8238
- ldr r4, _080D8234 @ =gStringVar4
- adds r0, r4, 0
- movs r1, 0
- bl sub_815DBF4
- b _080D8382
- .align 2, 0
-_080D8230: .4byte gBattleTypeFlags
-_080D8234: .4byte gStringVar4
-_080D8238:
- bl GetTrainerWonSpeech
- adds r4, r0, 0
- b _080D8382
-_080D8240:
- ldr r4, _080D824C @ =gStringVar4
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_815DC40
- b _080D8382
- .align 2, 0
-_080D824C: .4byte gStringVar4
-_080D8250:
- ldr r4, _080D825C @ =gStringVar4
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_815DBF4
- b _080D8382
- .align 2, 0
-_080D825C: .4byte gStringVar4
-_080D8260:
- ldr r0, _080D82B4 @ =gBattleScripting
- ldrb r0, [r0, 0x17]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080D82CC
- ldr r0, _080D82B8 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x8
- ands r1, r0
- ldr r4, _080D82BC @ =gUnknown_83FD555
- cmp r1, 0
- beq _080D827E
- ldr r4, _080D82C0 @ =gUnknown_83FD55B
-_080D827E:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r5, _080D82C4 @ =gEnemyParty
- mov r12, r5
- ldr r2, _080D82C8 @ =gBattleStruct
- cmp r0, 0xFF
- beq _080D829E
-_080D828C:
- mov r3, r8
- adds r0, r3, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080D828C
-_080D829E:
- ldr r0, [r2]
- adds r0, 0x52
- ldrb r1, [r0]
-_080D82A4:
- movs r0, 0x64
- muls r0, r1
- add r0, r12
-_080D82AA:
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- b _080D82E4
- .align 2, 0
-_080D82B4: .4byte gBattleScripting
-_080D82B8: .4byte gBattleTypeFlags
-_080D82BC: .4byte gUnknown_83FD555
-_080D82C0: .4byte gUnknown_83FD55B
-_080D82C4: .4byte gEnemyParty
-_080D82C8: .4byte gBattleStruct
-_080D82CC:
- ldr r0, _080D82F0 @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0x52
- ldrb r1, [r0]
-_080D82D4:
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D82F4 @ =gPlayerParty
-_080D82DA:
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
-_080D82E4:
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _080D8382
- .align 2, 0
-_080D82F0: .4byte gBattleStruct
-_080D82F4: .4byte gPlayerParty
-_080D82F8:
- ldr r0, _080D830C @ =0x00000834
- bl FlagGet
- lsls r0, 24
- ldr r4, _080D8310 @ =gUnknown_83FD81A
- cmp r0, 0
- beq _080D8382
- ldr r4, _080D8314 @ =gUnknown_83FD824
- b _080D8382
- .align 2, 0
-_080D830C: .4byte 0x00000834
-_080D8310: .4byte gUnknown_83FD81A
-_080D8314: .4byte gUnknown_83FD824
-_080D8318:
- ldr r0, _080D831C @ =gBattlerAttacker
- b _080D8322
- .align 2, 0
-_080D831C: .4byte gBattlerAttacker
-_080D8320:
- ldr r0, _080D8334 @ =gBattlerTarget
-_080D8322:
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- ldr r4, _080D8338 @ =gUnknown_83FD569
- cmp r0, 0
- bne _080D8382
- ldr r4, _080D833C @ =gUnknown_83FD56D
- b _080D8382
- .align 2, 0
-_080D8334: .4byte gBattlerTarget
-_080D8338: .4byte gUnknown_83FD569
-_080D833C: .4byte gUnknown_83FD56D
-_080D8340:
- ldr r0, _080D8344 @ =gBattlerAttacker
- b _080D834A
- .align 2, 0
-_080D8344: .4byte gBattlerAttacker
-_080D8348:
- ldr r0, _080D835C @ =gBattlerTarget
-_080D834A:
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- ldr r4, _080D8360 @ =gUnknown_83FD560
- cmp r0, 0
- bne _080D8382
- ldr r4, _080D8364 @ =gUnknown_83FD564
- b _080D8382
- .align 2, 0
-_080D835C: .4byte gBattlerTarget
-_080D8360: .4byte gUnknown_83FD560
-_080D8364: .4byte gUnknown_83FD564
-_080D8368:
- ldr r0, _080D836C @ =gBattlerAttacker
- b _080D8372
- .align 2, 0
-_080D836C: .4byte gBattlerAttacker
-_080D8370:
- ldr r0, _080D83D4 @ =gBattlerTarget
-_080D8372:
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- ldr r4, _080D83D8 @ =gUnknown_83FD572
- cmp r0, 0
- bne _080D8382
- ldr r4, _080D83DC @ =gUnknown_83FD576
-_080D8382:
- ldrb r1, [r4]
- adds r0, r1, 0
- mov r5, r9
- ldrb r2, [r5]
- mov r3, r9
- adds r3, 0x1
- cmp r0, 0xFF
- beq _080D83A4
-_080D8392:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080D8392
-_080D83A4:
- adds r0, r2, 0
- subs r0, 0x24
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080D83BC
- lsls r0, r2, 24
- lsrs r0, 24
- cmp r0, 0x2E
- beq _080D83BC
- cmp r0, 0x2F
- bne _080D83EC
-_080D83BC:
- mov r0, r8
- adds r1, r0, r6
- movs r0, 0xFC
- strb r0, [r1]
- adds r6, 0x1
- mov r2, r8
- adds r1, r2, r6
- movs r0, 0x9
- strb r0, [r1]
- adds r6, 0x1
- b _080D83EC
- .align 2, 0
-_080D83D4: .4byte gBattlerTarget
-_080D83D8: .4byte gUnknown_83FD572
-_080D83DC: .4byte gUnknown_83FD576
-_080D83E0:
- mov r3, r8
- adds r0, r3, r6
- strb r1, [r0]
- adds r6, 0x1
- mov r3, r9
- adds r3, 0x1
-_080D83EC:
- mov r9, r3
- ldrb r1, [r3]
-_080D83F0:
- adds r0, r1, 0
- cmp r0, 0xFF
- beq _080D83FA
- bl _080D788A
-_080D83FA:
- mov r5, r8
- adds r1, r5, r6
- mov r2, r9
- ldrb r0, [r2]
- strb r0, [r1]
- adds r6, 0x1
- adds r0, r6, 0
- add sp, 0x20
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end BattleStringExpandPlaceholders
-
- thumb_func_start ExpandBattleTextBuffPlaceholders
-ExpandBattleTextBuffPlaceholders: @ 80D8418
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- adds r7, r0, 0
- adds r6, r1, 0
- movs r5, 0x1
- movs r0, 0
- mov r8, r0
- movs r0, 0xFF
- strb r0, [r6]
- ldrb r0, [r7, 0x1]
- cmp r0, 0xFF
- bne _080D8436
- b _080D86BA
-_080D8436:
- adds r0, r7, r5
- ldrb r1, [r0]
- adds r4, r0, 0
- cmp r1, 0xA
- bls _080D8442
- b _080D86B0
-_080D8442:
- lsls r0, r1, 2
- ldr r1, _080D844C @ =_080D8450
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080D844C: .4byte _080D8450
- .align 2, 0
-_080D8450:
- .4byte _080D847C
- .4byte _080D8498
- .4byte _080D84EC
- .4byte _080D8504
- .4byte _080D8514
- .4byte _080D858C
- .4byte _080D85A0
- .4byte _080D85B2
- .4byte _080D85F8
- .4byte _080D860C
- .4byte _080D8628
-_080D847C:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldr r0, _080D8494 @ =gBattleStringsTable
- subs r1, 0xC
- lsls r1, 2
- adds r1, r0
- ldr r1, [r1]
- b _080D868E
- .align 2, 0
-_080D8494: .4byte gBattleStringsTable
-_080D8498:
- ldrb r0, [r4, 0x1]
- cmp r0, 0x2
- beq _080D84B4
- cmp r0, 0x2
- bgt _080D84A8
- cmp r0, 0x1
- beq _080D84AE
- b _080D84D6
-_080D84A8:
- cmp r0, 0x4
- beq _080D84BC
- b _080D84D6
-_080D84AE:
- ldrb r4, [r4, 0x3]
- mov r8, r4
- b _080D84D6
-_080D84B4:
- ldrb r1, [r4, 0x3]
- ldrb r0, [r4, 0x4]
- lsls r0, 8
- b _080D84D2
-_080D84BC:
- ldrb r0, [r4, 0x3]
- mov r8, r0
- ldrb r0, [r4, 0x4]
- lsls r0, 8
- mov r1, r8
- orrs r1, r0
- ldrb r0, [r4, 0x5]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r4, 0x6]
- lsls r0, 24
-_080D84D2:
- orrs r1, r0
- mov r8, r1
-_080D84D6:
- adds r4, r5, r7
- ldrb r3, [r4, 0x2]
- adds r0, r6, 0
- mov r1, r8
- movs r2, 0
- bl ConvertIntToDecimalStringN
- adds r0, r5, 0x3
- ldrb r4, [r4, 0x1]
- adds r5, r0, r4
- b _080D86B0
-_080D84EC:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0xD
- muls r1, r0
- ldr r0, _080D8500 @ =gMoveNames
- adds r1, r0
- b _080D868E
- .align 2, 0
-_080D8500: .4byte gMoveNames
-_080D8504:
- adds r0, r5, r7
- ldrb r0, [r0, 0x1]
- lsls r1, r0, 3
- subs r1, r0
- ldr r0, _080D8510 @ =gTypeNames
- b _080D8616
- .align 2, 0
-_080D8510: .4byte gTypeNames
-_080D8514:
- ldrb r0, [r4, 0x1]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080D8538
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D8534 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- b _080D8574
- .align 2, 0
-_080D8534: .4byte gPlayerParty
-_080D8538:
- ldr r0, _080D8550 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080D8558
- ldr r1, _080D8554 @ =gUnknown_83FD55B
- adds r0, r6, 0
- bl StringAppend
- b _080D8560
- .align 2, 0
-_080D8550: .4byte gBattleTypeFlags
-_080D8554: .4byte gUnknown_83FD55B
-_080D8558:
- ldr r1, _080D8584 @ =gUnknown_83FD555
- adds r0, r6, 0
- bl StringAppend
-_080D8560:
- adds r0, r5, r7
- ldrb r1, [r0, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D8588 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
-_080D8574:
- mov r0, sp
- bl StringGetEnd10
- adds r0, r6, 0
- mov r1, sp
- bl StringAppend
- b _080D86AE
- .align 2, 0
-_080D8584: .4byte gUnknown_83FD555
-_080D8588: .4byte gEnemyParty
-_080D858C:
- ldr r1, _080D859C @ =gUnknown_83FD5D0
- adds r0, r5, r7
- ldrb r0, [r0, 0x1]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- b _080D8618
- .align 2, 0
-_080D859C: .4byte gUnknown_83FD5D0
-_080D85A0:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- adds r0, r6, 0
- bl GetSpeciesName
- b _080D86AE
-_080D85B2:
- adds r4, r5, r7
- ldrb r0, [r4, 0x1]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _080D85D8
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D85D4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2
- adds r2, r6, 0
- bl GetMonData
- b _080D85EA
- .align 2, 0
-_080D85D4: .4byte gPlayerParty
-_080D85D8:
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080D85F4 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- adds r2, r6, 0
- bl GetMonData
-_080D85EA:
- adds r0, r6, 0
- bl StringGetEnd10
- b _080D86AE
- .align 2, 0
-_080D85F4: .4byte gEnemyParty
-_080D85F8:
- ldr r1, _080D8608 @ =gUnknown_83FD63C
- adds r0, r5, r7
- ldrb r0, [r0, 0x1]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- b _080D8618
- .align 2, 0
-_080D8608: .4byte gUnknown_83FD63C
-_080D860C:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- movs r0, 0xD
- muls r1, r0
- ldr r0, _080D8624 @ =gAbilityNames
-_080D8616:
- adds r1, r0
-_080D8618:
- adds r0, r6, 0
- bl StringAppend
- adds r5, 0x2
- b _080D86B0
- .align 2, 0
-_080D8624: .4byte gAbilityNames
-_080D8628:
- adds r0, r5, r7
- ldrb r2, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r2, r0
- ldr r0, _080D8674 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D86A6
- cmp r2, 0xAF
- bne _080D869C
- ldr r2, _080D8678 @ =gLinkPlayers
- ldr r0, _080D867C @ =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xB5
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _080D8680 @ =gPotentialItemEffectBattler
- ldrb r2, [r1]
- ldrh r0, [r0, 0x18]
- cmp r0, r2
- bne _080D868C
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- ldr r0, _080D8684 @ =gEnigmaBerries
- adds r1, r0
- adds r0, r6, 0
- bl StringCopy
- ldr r1, _080D8688 @ =gUnknown_83FD8AF
- b _080D868E
- .align 2, 0
-_080D8674: .4byte gBattleTypeFlags
-_080D8678: .4byte gLinkPlayers
-_080D867C: .4byte gBattleStruct
-_080D8680: .4byte gPotentialItemEffectBattler
-_080D8684: .4byte gEnigmaBerries
-_080D8688: .4byte gUnknown_83FD8AF
-_080D868C:
- ldr r1, _080D8698 @ =gUnknown_83FD8A2
-_080D868E:
- adds r0, r6, 0
- bl StringAppend
- b _080D86AE
- .align 2, 0
-_080D8698: .4byte gUnknown_83FD8A2
-_080D869C:
- adds r0, r2, 0
- adds r1, r6, 0
- bl CopyItemName
- b _080D86AE
-_080D86A6:
- adds r0, r2, 0
- adds r1, r6, 0
- bl CopyItemName
-_080D86AE:
- adds r5, 0x3
-_080D86B0:
- adds r0, r7, r5
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _080D86BA
- b _080D8436
-_080D86BA:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ExpandBattleTextBuffPlaceholders
-
- thumb_func_start sub_80D86C8
-sub_80D86C8: @ 80D86C8
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r2, 0
- ldr r5, _080D86FC @ =gUnknown_2039A34
- ldr r3, _080D8700 @ =gUnknown_83FEA70
-_080D86D2:
- cmp r2, 0x4
- beq _080D86E8
- ldrh r1, [r3]
- cmp r1, 0
- bne _080D86DE
- adds r2, 0x1
-_080D86DE:
- ldr r0, [r5]
- adds r3, 0x2
- ldrh r0, [r0]
- cmp r1, r0
- bne _080D86D2
-_080D86E8:
- cmp r2, 0
- blt _080D8714
- cmp r2, 0x2
- bgt _080D8708
- ldr r1, _080D8704 @ =gUnknown_83FE88B
- adds r0, r4, 0
- bl StringCopy
- b _080D8714
- .align 2, 0
-_080D86FC: .4byte gUnknown_2039A34
-_080D8700: .4byte gUnknown_83FEA70
-_080D8704: .4byte gUnknown_83FE88B
-_080D8708:
- cmp r2, 0x4
- bgt _080D8714
- ldr r1, _080D871C @ =gUnknown_83FE88F
- adds r0, r4, 0
- bl StringCopy
-_080D8714:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D871C: .4byte gUnknown_83FE88F
- thumb_func_end sub_80D86C8
-
- thumb_func_start sub_80D8720
-sub_80D8720: @ 80D8720
- push {r4,r5,lr}
- adds r3, r0, 0
- movs r4, 0
- b _080D872A
-_080D8728:
- adds r3, 0x1
-_080D872A:
- ldrb r0, [r3]
- cmp r0, 0xFF
- bne _080D8728
- ldr r1, _080D8760 @ =gUnknown_83FEA70
- ldr r5, _080D8764 @ =gUnknown_2039A34
- movs r0, 0
- lsls r0, 1
- adds r2, r0, r1
-_080D873A:
- cmp r4, 0x4
- beq _080D8754
- ldrh r1, [r2]
- cmp r1, 0
- bne _080D8746
- adds r4, 0x1
-_080D8746:
- ldr r0, [r5]
- adds r2, 0x2
- ldrh r0, [r0]
- cmp r1, r0
- bne _080D873A
- cmp r4, 0x4
- bhi _080D87B0
-_080D8754:
- lsls r0, r4, 2
- ldr r1, _080D8768 @ =_080D876C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080D8760: .4byte gUnknown_83FEA70
-_080D8764: .4byte gUnknown_2039A34
-_080D8768: .4byte _080D876C
- .align 2, 0
-_080D876C:
- .4byte _080D8780
- .4byte _080D8788
- .4byte _080D8790
- .4byte _080D8798
- .4byte _080D87A8
-_080D8780:
- ldr r1, _080D8784 @ =gUnknown_83FD586
- b _080D879A
- .align 2, 0
-_080D8784: .4byte gUnknown_83FD586
-_080D8788:
- ldr r1, _080D878C @ =gUnknown_83FD588
- b _080D879A
- .align 2, 0
-_080D878C: .4byte gUnknown_83FD588
-_080D8790:
- ldr r1, _080D8794 @ =gUnknown_83FD58A
- b _080D879A
- .align 2, 0
-_080D8794: .4byte gUnknown_83FD58A
-_080D8798:
- ldr r1, _080D87A4 @ =gUnknown_83FD58C
-_080D879A:
- adds r0, r3, 0
- bl StringCopy
- b _080D87B0
- .align 2, 0
-_080D87A4: .4byte gUnknown_83FD58C
-_080D87A8:
- ldr r1, _080D87B8 @ =gUnknown_83FD58E
- adds r0, r3, 0
- bl StringCopy
-_080D87B0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D87B8: .4byte gUnknown_83FD58E
- thumb_func_end sub_80D8720
-
- thumb_func_start BattlePutTextOnWindow
-BattlePutTextOnWindow: @ 80D87BC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r4, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- movs r0, 0xC0
- mov r8, r0
- mov r1, r8
- ands r1, r7
- mov r8, r1
- movs r0, 0x3F
- ands r7, r0
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080D87F2
- ldr r0, _080D8814 @ =gUnknown_83FEB64
- lsls r1, r7, 1
- adds r1, r7
- lsls r1, 2
- adds r1, r0
- ldrb r1, [r1]
- adds r0, r7, 0
- bl FillWindowPixelBuffer
-_080D87F2:
- movs r0, 0x40
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- beq _080D881C
- bl ContextNpcGetTextColor
- lsls r0, 24
- lsrs r0, 24
- mov r2, sp
- ldr r1, _080D8818 @ =gUnknown_83FEC90
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2, 0x5]
- lsls r6, r7, 1
- b _080D882E
- .align 2, 0
-_080D8814: .4byte gUnknown_83FEB64
-_080D8818: .4byte gUnknown_83FEC90
-_080D881C:
- mov r3, sp
- ldr r1, _080D884C @ =gUnknown_83FEB64
- lsls r2, r7, 1
- adds r0, r2, r7
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- strb r0, [r3, 0x5]
- adds r6, r2, 0
-_080D882E:
- cmp r7, 0xF
- blt _080D8878
- cmp r7, 0x14
- bgt _080D8850
- ldr r0, _080D884C @ =gUnknown_83FEB64
- adds r1, r6, r7
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- ldrb r2, [r1, 0x4]
- adds r1, r4, 0
- bl GetStringWidth
- movs r1, 0x30
- b _080D8868
- .align 2, 0
-_080D884C: .4byte gUnknown_83FEB64
-_080D8850:
- cmp r7, 0x17
- bgt _080D8878
- ldr r0, _080D8874 @ =gUnknown_83FEB64
- adds r1, r6, r7
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- ldrb r2, [r1, 0x4]
- adds r1, r4, 0
- bl GetStringWidth
- movs r1, 0x40
-_080D8868:
- subs r1, r0
- lsrs r0, r1, 31
- adds r1, r0
- asrs r1, 1
- b _080D8882
- .align 2, 0
-_080D8874: .4byte gUnknown_83FEB64
-_080D8878:
- ldr r1, _080D88F8 @ =gUnknown_83FEB64
- adds r0, r6, r7
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x2]
-_080D8882:
- cmp r1, 0
- bge _080D8888
- movs r1, 0
-_080D8888:
- str r4, [sp]
- mov r0, sp
- strb r7, [r0, 0x4]
- strb r1, [r0, 0x6]
- mov r1, sp
- ldr r0, _080D88F8 @ =gUnknown_83FEB64
- mov r12, r0
- adds r3, r6, r7
- lsls r3, 2
- add r3, r12
- ldrb r0, [r3, 0x3]
- strb r0, [r1, 0x7]
- mov r0, sp
- ldrb r0, [r0, 0x6]
- strb r0, [r1, 0x8]
- mov r0, sp
- ldrb r0, [r0, 0x7]
- strb r0, [r1, 0x9]
- ldrb r0, [r3, 0x4]
- strb r0, [r1, 0xA]
- ldrb r0, [r3, 0x5]
- strb r0, [r1, 0xB]
- mov r4, sp
- ldrb r2, [r4, 0xC]
- movs r1, 0x10
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4, 0xC]
- mov r2, sp
- ldrb r0, [r3, 0x7]
- lsls r0, 4
- movs r5, 0xF
- strb r0, [r2, 0xC]
- ldrb r2, [r3, 0x8]
- adds r0, r5, 0
- ands r0, r2
- ldrb r2, [r4, 0xD]
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0xD]
- mov r2, sp
- ldrb r0, [r3, 0x9]
- lsls r0, 4
- ands r1, r5
- orrs r1, r0
- strb r1, [r2, 0xD]
- mov r3, r12
- cmp r7, 0x18
- bne _080D8900
- ldr r0, _080D88FC @ =gTextFlags
- ldrb r2, [r0]
- movs r1, 0x3
- negs r1, r1
- ands r1, r2
- b _080D8908
- .align 2, 0
-_080D88F8: .4byte gUnknown_83FEB64
-_080D88FC: .4byte gTextFlags
-_080D8900:
- ldr r0, _080D8930 @ =gTextFlags
- ldrb r1, [r0]
- movs r2, 0x2
- orrs r1, r2
-_080D8908:
- strb r1, [r0]
- adds r4, r0, 0
- ldr r1, _080D8934 @ =gBattleTypeFlags
- ldr r2, [r1]
- movs r0, 0x2
- ands r0, r2
- adds r5, r1, 0
- cmp r0, 0
- bne _080D8928
- movs r0, 0x80
- lsls r0, 9
- ands r2, r0
- cmp r2, 0
- beq _080D8938
- cmp r7, 0x18
- beq _080D8938
-_080D8928:
- ldrb r0, [r4]
- movs r1, 0x4
- orrs r0, r1
- b _080D8940
- .align 2, 0
-_080D8930: .4byte gTextFlags
-_080D8934: .4byte gBattleTypeFlags
-_080D8938:
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
-_080D8940:
- strb r0, [r4]
- cmp r7, 0
- beq _080D894A
- cmp r7, 0x18
- bne _080D8970
-_080D894A:
- ldr r0, [r5]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080D8958
- movs r3, 0x1
- b _080D8960
-_080D8958:
- bl GetTextSpeedSetting
- lsls r0, 24
- lsrs r3, r0, 24
-_080D8960:
- ldr r0, _080D896C @ =gTextFlags
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _080D8982
- .align 2, 0
-_080D896C: .4byte gTextFlags
-_080D8970:
- adds r0, r6, r7
- lsls r0, 2
- adds r0, r3
- ldrb r3, [r0, 0x6]
- ldrb r1, [r4]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r4]
-_080D8982:
- mov r0, sp
- adds r1, r3, 0
- movs r2, 0
- bl AddTextPrinter
- movs r0, 0x80
- mov r1, r8
- ands r1, r0
- cmp r1, 0
- bne _080D89A4
- adds r0, r7, 0
- bl PutWindowTilemap
- adds r0, r7, 0
- movs r1, 0x3
- bl CopyWindowToVram
-_080D89A4:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BattlePutTextOnWindow
-
- thumb_func_start sub_80D89B0
-sub_80D89B0: @ 80D89B0
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0xC
- beq _080D89CC
- ldr r0, _080D89D0 @ =0x00000177
- cmp r1, r0
- beq _080D89CC
- adds r0, 0x8
- cmp r1, r0
- beq _080D89CC
- subs r0, 0x7
- cmp r1, r0
- bne _080D89D4
-_080D89CC:
- movs r0, 0x1
- b _080D89D6
- .align 2, 0
-_080D89D0: .4byte 0x00000177
-_080D89D4:
- movs r0, 0
-_080D89D6:
- pop {r1}
- bx r1
- thumb_func_end sub_80D89B0
-
- thumb_func_start SetPpNumbersPaletteInMoveSelection
-SetPpNumbersPaletteInMoveSelection: @ 80D89DC
- push {r4,r5,lr}
- ldr r0, _080D8A38 @ =gActiveBattler
- ldrb r2, [r0]
- lsls r1, r2, 9
- ldr r0, _080D8A3C @ =gBattleBufferA + 4
- adds r1, r0
- ldr r4, _080D8A40 @ =gUnknown_8D2FBB4
- ldr r0, _080D8A44 @ =gMoveSelectionCursor
- adds r2, r0
- ldrb r2, [r2]
- adds r0, r1, 0
- adds r0, 0x8
- adds r0, r2
- ldrb r0, [r0]
- adds r1, 0xC
- adds r1, r2
- ldrb r1, [r1]
- bl GetCurrentPpToMaxPpState
- lsls r0, 24
- ldr r5, _080D8A48 @ =gPlttBufferUnfaded
- lsrs r0, 22
- adds r0, r4
- ldrh r1, [r0]
- adds r2, r5, 0
- adds r2, 0xB8
- strh r1, [r2]
- ldrh r0, [r0, 0x2]
- adds r5, 0xB6
- strh r0, [r5]
- ldr r4, _080D8A4C @ =gPlttBufferFaded + 0xB8
- adds r0, r2, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl CpuSet
- subs r4, 0x2
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl CpuSet
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D8A38: .4byte gActiveBattler
-_080D8A3C: .4byte gBattleBufferA + 4
-_080D8A40: .4byte gUnknown_8D2FBB4
-_080D8A44: .4byte gMoveSelectionCursor
-_080D8A48: .4byte gPlttBufferUnfaded
-_080D8A4C: .4byte gPlttBufferFaded + 0xB8
- thumb_func_end SetPpNumbersPaletteInMoveSelection
-
- thumb_func_start GetCurrentPpToMaxPpState
-GetCurrentPpToMaxPpState: @ 80D8A50
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- lsls r1, 24
- lsrs r0, r1, 24
- cmp r0, r2
- beq _080D8A98
- cmp r0, 0x2
- bhi _080D8A6A
- cmp r2, 0x1
- bhi _080D8A98
- b _080D8A72
-_080D8A6A:
- cmp r0, 0x7
- bhi _080D8A7C
- cmp r2, 0x2
- bhi _080D8A98
-_080D8A72:
- movs r0, 0x2
- subs r0, r2
- lsls r0, 24
- lsrs r0, 24
- b _080D8A9A
-_080D8A7C:
- cmp r2, 0
- bne _080D8A84
- movs r0, 0x2
- b _080D8A9A
-_080D8A84:
- lsrs r0, r1, 26
- cmp r2, r0
- bhi _080D8A8E
- movs r0, 0x1
- b _080D8A9A
-_080D8A8E:
- lsrs r0, r1, 25
- cmp r3, r0
- bhi _080D8A98
- movs r0, 0
- b _080D8A9A
-_080D8A98:
- movs r0, 0x3
-_080D8A9A:
- pop {r1}
- bx r1
- thumb_func_end GetCurrentPpToMaxPpState
-
- .align 2, 0 @ Don't pad with nop.
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/baserom.ips b/baserom.ips
index d7de0a120..fe18b52d1 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
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/battle_message.s b/data/battle_message.s
deleted file mode 100644
index 4f7576103..000000000
--- a/data/battle_message.s
+++ /dev/null
@@ -1,2923 +0,0 @@
-#include "constants/moves.h"
-#include "constants/battle.h"
-#include "battle_string_ids.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2, 0
-
-gUnknown_83FB218:: @ 83FB218
- .string "$"
-
-gUnknown_83FB219:: @ 83FB219
- .string "{B_TRAINER1_LOSE_TEXT}$"
-
-gUnknown_83FB21C:: @ 83FB21C
- .string "{B_TRAINER2_CLASS}$"
-
-gUnknown_83FB21F:: @ 83FB21F
- .string "{B_TRAINER1_NAME}: {B_OPPONENT_MON1_NAME}, come back!$"
-
-gUnknown_83FB232:: @ 83FB232
- .string "{B_TRAINER1_WIN_TEXT}$"
-
-gUnknown_83FB235:: @ 83FB235
- .string "{B_TRAINER1_NAME}: {B_OPPONENT_MON2_NAME}, come back!$"
-
-gUnknown_83FB248:: @ 83FB248
- .string "{B_TRAINER1_NAME}: {B_OPPONENT_MON1_NAME} and\n"
- .string "{B_OPPONENT_MON2_NAME}, come back!$"
-
-gUnknown_83FB262:: @ 83FB262
- .string "{B_TRAINER2_NAME}$"
-
-gUnknown_83FB265:: @ 83FB265
- .string "{B_BUFF1} gained{B_BUFF2}\n"
- .string "{B_TRAINER2_LOSE_TEXT} EXP. Points!\p"
- .string "$"
-
-gUnknown_83FB282:: @ 83FB282
- .string "$"
-
-gUnknown_83FB283:: @ 83FB283
- .string " a boosted$"
-
-gUnknown_83FB28E:: @ 83FB28E
- .string "{B_BUFF1} grew to\n"
- .string "LV. {B_BUFF2}!{WAIT_SE}\p"
- .string "$"
-
-gUnknown_83FB2A4:: @ 83FB2A4
- .string "{B_BUFF1} learned\n"
- .string "{B_BUFF2}!{WAIT_SE}\p"
- .string "$"
-
-gUnknown_83FB2B6:: @ 83FB2B6
- .string "{B_BUFF1} is trying to\n"
- .string "learn {B_BUFF2}.\p"
- .string "$"
-
-gUnknown_83FB2D1:: @ 83FB2D1
- .string "But, {B_BUFF1} can't learn\n"
- .string "more than four moves.\p"
- .string "$"
-
-gUnknown_83FB2FC:: @ 83FB2FC
- .string "Delete a move to make\n"
- .string "room for {B_BUFF2}?$"
-
-gUnknown_83FB31F:: @ 83FB31F
- .string "{B_BUFF1} forgot\n"
- .string "{B_BUFF2}.\p"
- .string "$"
-
-gUnknown_83FB32E:: @ 83FB32E
- .string "{PAUSE 32}Stop learning\n"
- .string "{B_BUFF2}?$"
-
-gUnknown_83FB343:: @ 83FB343
- .string "{B_BUFF1} did not learn\n"
- .string "{B_BUFF2}.\p"
- .string "$"
-
-gUnknown_83FB359:: @ 83FB359
- .string "Use next POKéMON?$"
-
-gUnknown_83FB36B:: @ 83FB36B
- .string "{B_ATK_NAME_WITH_PREFIX}'s\n"
- .string "attack missed!$"
-
-gUnknown_83FB37F:: @ 83FB37F
- .string "{B_DEF_NAME_WITH_PREFIX}\n"
- .string "protected itself!$"
-
-gUnknown_83FB394:: @ 83FB394
- .string "{B_DEF_NAME_WITH_PREFIX} avoided\n"
- .string "damage with {B_DEF_ABILITY}!$"
-
-gUnknown_83FB3AF:: @ 83FB3AF
- .string "{B_DEF_NAME_WITH_PREFIX} makes GROUND\n"
- .string "moves miss with {B_DEF_ABILITY}!$"
-
-gUnknown_83FB3D3:: @ 83FB3D3
- .string "{B_DEF_NAME_WITH_PREFIX} avoided\n"
- .string "the attack!$"
-
-gUnknown_83FB3EA:: @ 83FB3EA
- .string "It doesn't affect\n"
- .string "{B_DEF_NAME_WITH_PREFIX}…$"
-
-gUnknown_83FB400:: @ 83FB400
- .string "{B_ATK_NAME_WITH_PREFIX}\n"
- .string "fainted!\p"
- .string "$"
-
-gUnknown_83FB40D:: @ 83FB40D
- .string "{B_DEF_NAME_WITH_PREFIX}\n"
- .string "fainted!\p"
- .string "$"
-
-gUnknown_83FB41A:: @ 83FB41A
- .string "{B_PLAYER_NAME} got ¥{B_BUFF1}\n"
- .string "for winning!\p"
- .string "$"
-
-gUnknown_83FB433:: @ 83FB433
- .string "{B_PLAYER_NAME} is out of\n"
- .string "usable POKéMON!\p"
- .string "$"
-
-gUnknown_83FB451:: @ 83FB451
- .string "{B_PLAYER_NAME} panicked and lost ¥{B_BUFF1}…\p"
- .string "… … … …\p"
- .string "{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}$"
-
-gUnknown_83FB484:: @ 83FB484
- .string "{B_PLAYER_NAME} is out of\n"
- .string "usable POKéMON!\p"
- .string "Player lost against\n"
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}$"
-
-gUnknown_83FB4BE:: @ 83FB4BE
- .string "{B_PLAYER_NAME} paid ¥{B_BUFF1} as the prize\n"
- .string "money…\p"
- .string "… … … …\p"
- .string "{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}$"
-
-gUnknown_83FB4F7:: @ 83FB4F7
- .string "{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}$"
-
-gUnknown_83FB508:: @ 83FB508
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\n"
- .string "escape with {B_SCR_ACTIVE_ABILITY}!\p"
- .string "$"
-
-gUnknown_83FB525:: @ 83FB525
- .string "Can't escape!\p"
- .string "$"
-
-gUnknown_83FB534:: @ 83FB534
- .string "{B_ATK_NAME_WITH_PREFIX} can't escape!$"
-
-gUnknown_83FB545:: @ 83FB545
- .string "Hit {B_BUFF1} time(s)!$"
-
-gUnknown_83FB555:: @ 83FB555
- .string "{B_EFF_NAME_WITH_PREFIX}\n"
- .string "fell asleep!$"
-
-gUnknown_83FB565:: @ 83FB565
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "made {B_EFF_NAME_WITH_PREFIX} sleep!$"
-
-gUnknown_83FB57C:: @ 83FB57C
- .string "{B_DEF_NAME_WITH_PREFIX} is\n"
- .string "already asleep!$"
-
-gUnknown_83FB592:: @ 83FB592
- .string "{B_ATK_NAME_WITH_PREFIX} is\n"
- .string "already asleep!$"
-
-gUnknown_83FB5A8:: @ 83FB5A8
- .string "{B_DEF_NAME_WITH_PREFIX}\n"
- .string "wasn't affected!$"
-
-gUnknown_83FB5BC:: @ 83FB5BC
- .string "{B_EFF_NAME_WITH_PREFIX}\n"
- .string "was poisoned!$"
-
-gUnknown_83FB5CD:: @ 83FB5CD
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "poisoned {B_EFF_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FB5E2:: @ 83FB5E2
- .string "{B_ATK_NAME_WITH_PREFIX} is hurt\n"
- .string "by poison!$"
-
-gUnknown_83FB5F8:: @ 83FB5F8
- .string "{B_DEF_NAME_WITH_PREFIX} is already\n"
- .string "poisoned.$"
-
-gUnknown_83FB610:: @ 83FB610
- .string "{B_EFF_NAME_WITH_PREFIX} is badly\n"
- .string "poisoned!$"
-
-gUnknown_83FB626:: @ 83FB626
- .string "{B_DEF_NAME_WITH_PREFIX} had its\n"
- .string "energy drained!$"
-
-gUnknown_83FB641:: @ 83FB641
- .string "{B_EFF_NAME_WITH_PREFIX} was burned!$"
-
-gUnknown_83FB650:: @ 83FB650
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "burned {B_EFF_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FB663:: @ 83FB663
- .string "{B_ATK_NAME_WITH_PREFIX} is hurt\n"
- .string "by its burn!$"
-
-gUnknown_83FB67B:: @ 83FB67B
- .string "{B_DEF_NAME_WITH_PREFIX} already\n"
- .string "has a burn.$"
-
-gUnknown_83FB692:: @ 83FB692
- .string "{B_EFF_NAME_WITH_PREFIX} was\n"
- .string "frozen solid!$"
-
-gUnknown_83FB6A7:: @ 83FB6A7
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "froze {B_EFF_NAME_WITH_PREFIX} solid!$"
-
-gUnknown_83FB6BF:: @ 83FB6BF
- .string "{B_ATK_NAME_WITH_PREFIX} is\n"
- .string "frozen solid!$"
-
-gUnknown_83FB6D3:: @ 83FB6D3
- .string "{B_DEF_NAME_WITH_PREFIX} was\n"
- .string "defrosted!$"
-
-gUnknown_83FB6E5:: @ 83FB6E5
- .string "{B_ATK_NAME_WITH_PREFIX} was\n"
- .string "defrosted!$"
-
-gUnknown_83FB6F7:: @ 83FB6F7
- .string "{B_ATK_NAME_WITH_PREFIX} was\n"
- .string "defrosted by {B_CURRENT_MOVE}!$"
-
-gUnknown_83FB70F:: @ 83FB70F
- .string "{B_EFF_NAME_WITH_PREFIX} is paralyzed!\n"
- .string "It may be unable to move!$"
-
-gUnknown_83FB73A:: @ 83FB73A
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "paralyzed {B_EFF_NAME_WITH_PREFIX}!\l"
- .string "It may be unable to move!$"
-
-gUnknown_83FB76A:: @ 83FB76A
- .string "{B_ATK_NAME_WITH_PREFIX} is paralyzed!\n"
- .string "It can't move!$"
-
-gUnknown_83FB78A:: @ 83FB78A
- .string "{B_DEF_NAME_WITH_PREFIX} is\n"
- .string "already paralyzed!$"
-
-gUnknown_83FB7A3:: @ 83FB7A3
- .string "{B_DEF_NAME_WITH_PREFIX} was\n"
- .string "healed of paralysis!$"
-
-gUnknown_83FB7BF:: @ 83FB7BF
- .string "{B_DEF_NAME_WITH_PREFIX}'s\n"
- .string "dream was eaten!$"
-
-gUnknown_83FB7D5:: @ 83FB7D5
- .string "{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n"
- .string "won't go higher!$"
-
-gUnknown_83FB7EE:: @ 83FB7EE
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n"
- .string "won't go lower!$"
-
-gUnknown_83FB806:: @ 83FB806
- .string "Your team's {B_BUFF1}\n"
- .string "stopped working!$"
-
-gUnknown_83FB826:: @ 83FB826
- .string "The foe's {B_BUFF1}\n"
- .string "stopped working!$"
-
-gUnknown_83FB844:: @ 83FB844
- .string "{B_ATK_NAME_WITH_PREFIX} is\n"
- .string "confused!$"
-
-gUnknown_83FB854:: @ 83FB854
- .string "{B_ATK_NAME_WITH_PREFIX} snapped\n"
- .string "out of confusion!$"
-
-gUnknown_83FB871:: @ 83FB871
- .string "{B_EFF_NAME_WITH_PREFIX} became\n"
- .string "confused!$"
-
-gUnknown_83FB885:: @ 83FB885
- .string "{B_DEF_NAME_WITH_PREFIX} is\n"
- .string "already confused!$"
-
-gUnknown_83FB89D:: @ 83FB89D
- .string "{B_DEF_NAME_WITH_PREFIX}\n"
- .string "fell in love!$"
-
-gUnknown_83FB8AE:: @ 83FB8AE
- .string "{B_ATK_NAME_WITH_PREFIX} is in love\n"
- .string "with {B_SCR_ACTIVE_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FB8C5:: @ 83FB8C5
- .string "{B_ATK_NAME_WITH_PREFIX} is\n"
- .string "immobilized by love!$"
-
-gUnknown_83FB8E0:: @ 83FB8E0
- .string "{B_DEF_NAME_WITH_PREFIX} was\n"
- .string "blown away!$"
-
-gUnknown_83FB8F3:: @ 83FB8F3
- .string "{B_ATK_NAME_WITH_PREFIX} transformed\n"
- .string "into the {B_BUFF1} type!$"
-
-gUnknown_83FB914:: @ 83FB914
- .string "{B_ATK_NAME_WITH_PREFIX} flinched!$"
-
-gUnknown_83FB921:: @ 83FB921
- .string "{B_DEF_NAME_WITH_PREFIX} regained\n"
- .string "health!$"
-
-gUnknown_83FB935:: @ 83FB935
- .string "{B_DEF_NAME_WITH_PREFIX}'s\n"
- .string "HP is full!$"
-
-gUnknown_83FB946:: @ 83FB946
- .string "{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\n"
- .string "raised SP. DEF!$"
-
-gUnknown_83FB95E:: @ 83FB95E
- .string "{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\n"
- .string "raised SP. DEF a little!$"
-
-gUnknown_83FB97F:: @ 83FB97F
- .string "{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\n"
- .string "raised DEFENSE!$"
-
-gUnknown_83FB997:: @ 83FB997
- .string "{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\n"
- .string "raised DEFENSE a little!$"
-
-gUnknown_83FB9B8:: @ 83FB9B8
- .string "{B_ATK_PREFIX2}'s party is covered\n"
- .string "by a veil!$"
-
-gUnknown_83FB9D9:: @ 83FB9D9
- .string "{B_DEF_NAME_WITH_PREFIX}'s party is protected\n"
- .string "by SAFEGUARD!$"
-
-gUnknown_83FB9FF:: @ 83FB9FF
- .string "{B_ATK_PREFIX3}'s party is no longer\n"
- .string "protected by SAFEGUARD!$"
-
-gUnknown_83FBA2F:: @ 83FBA2F
- .string "{B_ATK_NAME_WITH_PREFIX} went\n"
- .string "to sleep!$"
-
-gUnknown_83FBA41:: @ 83FBA41
- .string "{B_ATK_NAME_WITH_PREFIX} slept and\n"
- .string "became healthy!$"
-
-gUnknown_83FBA5E:: @ 83FBA5E
- .string "{B_ATK_NAME_WITH_PREFIX} whipped\n"
- .string "up a whirlwind!$"
-
-gUnknown_83FBA79:: @ 83FBA79
- .string "{B_ATK_NAME_WITH_PREFIX} took\n"
- .string "in sunlight!$"
-
-gUnknown_83FBA8E:: @ 83FBA8E
- .string "{B_ATK_NAME_WITH_PREFIX} lowered\n"
- .string "its head!$"
-
-gUnknown_83FBAA3:: @ 83FBAA3
- .string "{B_ATK_NAME_WITH_PREFIX} is glowing!$"
-
-gUnknown_83FBAB2:: @ 83FBAB2
- .string "{B_ATK_NAME_WITH_PREFIX} flew\n"
- .string "up high!$"
-
-gUnknown_83FBAC3:: @ 83FBAC3
- .string "{B_ATK_NAME_WITH_PREFIX} dug a hole!$"
-
-gUnknown_83FBAD2:: @ 83FBAD2
- .string "{B_ATK_NAME_WITH_PREFIX} hid\n"
- .string "underwater!$"
-
-gUnknown_83FBAE5:: @ 83FBAE5
- .string "{B_ATK_NAME_WITH_PREFIX} sprang up!$"
-
-gUnknown_83FBAF3:: @ 83FBAF3
- .string "{B_DEF_NAME_WITH_PREFIX} was squeezed by\n"
- .string "{B_ATK_NAME_WITH_PREFIX}'s BIND!$"
-
-gUnknown_83FBB11:: @ 83FBB11
- .string "{B_DEF_NAME_WITH_PREFIX} was trapped\n"
- .string "in the vortex!$"
-
-gUnknown_83FBB2F:: @ 83FBB2F
- .string "{B_DEF_NAME_WITH_PREFIX} was trapped\n"
- .string "by SAND TOMB!$"
-
-gUnknown_83FBB4C:: @ 83FBB4C
- .string "{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n"
- .string "{B_ATK_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FBB62:: @ 83FBB62
- .string "{B_ATK_NAME_WITH_PREFIX} CLAMPED\n"
- .string "{B_DEF_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FBB71:: @ 83FBB71
- .string "{B_ATK_NAME_WITH_PREFIX} is hurt\n"
- .string "by {B_BUFF1}!$"
-
-gUnknown_83FBB83:: @ 83FBB83
- .string "{B_ATK_NAME_WITH_PREFIX} was freed\n"
- .string "from {B_BUFF1}!$"
-
-gUnknown_83FBB99:: @ 83FBB99
- .string "{B_ATK_NAME_WITH_PREFIX} kept going\n"
- .string "and crashed!$"
-
-BattleText_MistShroud:: @ 83FBBB4
- .string "{B_ATK_PREFIX2} became\n"
- .string "shrouded in MIST!$"
-
-gUnknown_83FBBD0:: @ 83FBBD0
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\n"
- .string "by MIST!$"
-
-BattleText_GetPumped:: @ 83FBBE9
- .string "{B_ATK_NAME_WITH_PREFIX} is getting\n"
- .string "pumped!$"
-
-gUnknown_83FBBFF:: @ 83FBBFF
- .string "{B_ATK_NAME_WITH_PREFIX} is hit\n"
- .string "with recoil!$"
-
-gUnknown_83FBC16:: @ 83FBC16
- .string "{B_ATK_NAME_WITH_PREFIX} protected\n"
- .string "itself!$"
-
-gUnknown_83FBC2B:: @ 83FBC2B
- .string "{B_ATK_NAME_WITH_PREFIX} is buffeted\n"
- .string "by the sandstorm!$"
-
-gUnknown_83FBC4C:: @ 83FBC4C
- .string "{B_ATK_NAME_WITH_PREFIX} is pelted\n"
- .string "by HAIL!$"
-
-gUnknown_83FBC62:: @ 83FBC62
- .string "{B_ATK_PREFIX1}'s {B_BUFF1}\n"
- .string "wore off!$"
-
-gUnknown_83FBC74:: @ 83FBC74
- .string "{B_DEF_NAME_WITH_PREFIX} was seeded!$"
-
-gUnknown_83FBC83:: @ 83FBC83
- .string "{B_DEF_NAME_WITH_PREFIX} evaded\n"
- .string "the attack!$"
-
-gUnknown_83FBC99:: @ 83FBC99
- .string "{B_ATK_NAME_WITH_PREFIX}'s health is\n"
- .string "sapped by LEECH SEED!$"
-
-gUnknown_83FBCBE:: @ 83FBCBE
- .string "{B_ATK_NAME_WITH_PREFIX} is fast\n"
- .string "asleep.$"
-
-gUnknown_83FBCD1:: @ 83FBCD1
- .string "{B_ATK_NAME_WITH_PREFIX} woke up!$"
-
-gUnknown_83FBCDD:: @ 83FBCDD
- .string "But {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s UPROAR\n"
- .string "kept it awake!$"
-
-gUnknown_83FBCFC:: @ 83FBCFC
- .string "{B_ATK_NAME_WITH_PREFIX} woke up\n"
- .string "in the UPROAR!$"
-
-gUnknown_83FBD16:: @ 83FBD16
- .string "{B_ATK_NAME_WITH_PREFIX} caused\n"
- .string "an UPROAR!$"
-
-gUnknown_83FBD2B:: @ 83FBD2B
- .string "{B_ATK_NAME_WITH_PREFIX} is making\n"
- .string "an UPROAR!$"
-
-gUnknown_83FBD43:: @ 83FBD43
- .string "{B_ATK_NAME_WITH_PREFIX} calmed down.$"
-
-gUnknown_83FBD53:: @ 83FBD53
- .string "But {B_DEF_NAME_WITH_PREFIX} can't\n"
- .string "sleep in an UPROAR!$"
-
-gUnknown_83FBD74:: @ 83FBD74
- .string "{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n"
- .string "{B_BUFF1}!$"
-
-gUnknown_83FBD86:: @ 83FBD86
- .string "{B_ATK_NAME_WITH_PREFIX} can't\n"
- .string "STOCKPILE any more!$"
-
-gUnknown_83FBDA3:: @ 83FBDA3
- .string "But {B_DEF_NAME_WITH_PREFIX} can't\n"
- .string "sleep in an UPROAR!$"
-
-gUnknown_83FBDC4:: @ 83FBDC4
- .string "But the UPROAR kept\n"
- .string "{B_DEF_NAME_WITH_PREFIX} awake!$"
-
-gUnknown_83FBDE2:: @ 83FBDE2
- .string "{B_DEF_NAME_WITH_PREFIX} stayed awake\n"
- .string "using its {B_DEF_ABILITY}!$"
-
-gUnknown_83FBE00:: @ 83FBE00
- .string "{B_ATK_NAME_WITH_PREFIX} is storing\n"
- .string "energy!$"
-
-gUnknown_83FBE16:: @ 83FBE16
- .string "{B_ATK_NAME_WITH_PREFIX} unleashed\n"
- .string "energy!$"
-
-gUnknown_83FBE2B:: @ 83FBE2B
- .string "{B_ATK_NAME_WITH_PREFIX} became\n"
- .string "confused due to fatigue!$"
-
-gUnknown_83FBE4E:: @ 83FBE4E
- .string "{B_PLAYER_NAME} picked up\n"
- .string "¥{B_BUFF1}!\p"
- .string "$"
-
-gUnknown_83FBE61:: @ 83FBE61
- .string "{B_DEF_NAME_WITH_PREFIX} is\n"
- .string "unaffected!$"
-
-gUnknown_83FBE73:: @ 83FBE73
- .string "{B_ATK_NAME_WITH_PREFIX} transformed\n"
- .string "into {B_BUFF1}!$"
-
-gUnknown_83FBE8B:: @ 83FBE8B
- .string "{B_ATK_NAME_WITH_PREFIX} made\n"
- .string "a SUBSTITUTE!$"
-
-gUnknown_83FBEA1:: @ 83FBEA1
- .string "{B_ATK_NAME_WITH_PREFIX} already\n"
- .string "has a SUBSTITUTE!$"
-
-gUnknown_83FBEBE:: @ 83FBEBE
- .string "The SUBSTITUTE took damage\n"
- .string "for {B_DEF_NAME_WITH_PREFIX}!\p"
- .string "$"
-
-gUnknown_83FBEE2:: @ 83FBEE2
- .string "{B_DEF_NAME_WITH_PREFIX}'s\n"
- .string "SUBSTITUTE faded!\p"
- .string "$"
-
-gUnknown_83FBEFA:: @ 83FBEFA
- .string "{B_ATK_NAME_WITH_PREFIX} must\n"
- .string "recharge!$"
-
-gUnknown_83FBF0C:: @ 83FBF0C
- .string "{B_DEF_NAME_WITH_PREFIX}'s RAGE\n"
- .string "is building!$"
-
-gUnknown_83FBF23:: @ 83FBF23
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n"
- .string "was disabled!$"
-
-gUnknown_83FBF39:: @ 83FBF39
- .string "{B_ATK_NAME_WITH_PREFIX} is disabled\n"
- .string "no more!$"
-
-gUnknown_83FBF51:: @ 83FBF51
- .string "{B_DEF_NAME_WITH_PREFIX} got\n"
- .string "an ENCORE!$"
-
-gUnknown_83FBF63:: @ 83FBF63
- .string "{B_ATK_NAME_WITH_PREFIX}'s ENCORE\n"
- .string "ended!$"
-
-gUnknown_83FBF76:: @ 83FBF76
- .string "{B_ATK_NAME_WITH_PREFIX} took aim\n"
- .string "at {B_DEF_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FBF89:: @ 83FBF89
- .string "{B_ATK_NAME_WITH_PREFIX} SKETCHED\n"
- .string "{B_BUFF1}!$"
-
-gUnknown_83FBF99:: @ 83FBF99
- .string "{B_ATK_NAME_WITH_PREFIX} is trying\n"
- .string "to take its foe with it!$"
-
-gUnknown_83FBFBF:: @ 83FBFBF
- .string "{B_DEF_NAME_WITH_PREFIX} took\n"
- .string "{B_ATK_NAME_WITH_PREFIX} with it!$"
-
-gUnknown_83FBFD3:: @ 83FBFD3
- .string "Reduced {B_DEF_NAME_WITH_PREFIX}'s\n"
- .string "{B_BUFF1} by {B_BUFF2}!$"
-
-gUnknown_83FBFEA:: @ 83FBFEA
- .string "{B_ATK_NAME_WITH_PREFIX} stole\n"
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!$"
-
-gUnknown_83FBFFC:: @ 83FBFFC
- .string "{B_DEF_NAME_WITH_PREFIX} can't\n"
- .string "escape now!$"
-
-gUnknown_83FC011:: @ 83FC011
- .string "{B_DEF_NAME_WITH_PREFIX} fell into\n"
- .string "a NIGHTMARE!$"
-
-gUnknown_83FC02B:: @ 83FC02B
- .string "{B_ATK_NAME_WITH_PREFIX} is locked\n"
- .string "in a NIGHTMARE!$"
-
-gUnknown_83FC048:: @ 83FC048
- .string "{B_ATK_NAME_WITH_PREFIX} cut its own HP and\n"
- .string "laid a CURSE on {B_DEF_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FC072:: @ 83FC072
- .string "{B_ATK_NAME_WITH_PREFIX} is afflicted\n"
- .string "by the CURSE!$"
-
-gUnknown_83FC090:: @ 83FC090
- .string "SPIKES were scattered all around\n"
- .string "the opponent's side!$"
-
-gUnknown_83FC0C6:: @ 83FC0C6
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\n"
- .string "by SPIKES!$"
-
-gUnknown_83FC0DC:: @ 83FC0DC
- .string "{B_ATK_NAME_WITH_PREFIX} identified\n"
- .string "{B_DEF_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FC0EE:: @ 83FC0EE
- .string "{B_ATK_NAME_WITH_PREFIX}'s PERISH count\n"
- .string "fell to {B_BUFF1}!$"
-
-gUnknown_83FC10C:: @ 83FC10C
- .string "{B_ATK_NAME_WITH_PREFIX} braced\n"
- .string "itself!$"
-
-gUnknown_83FC11E:: @ 83FC11E
- .string "{B_DEF_NAME_WITH_PREFIX} ENDURED\n"
- .string "the hit!$"
-
-gUnknown_83FC132:: @ 83FC132
- .string "MAGNITUDE {B_BUFF1}!$"
-
-gUnknown_83FC140:: @ 83FC140
- .string "{B_ATK_NAME_WITH_PREFIX} cut its own HP\n"
- .string "and maximized ATTACK!$"
-
-gUnknown_83FC168:: @ 83FC168
- .string "{B_ATK_NAME_WITH_PREFIX} copied\n"
- .string "{B_DEF_NAME_WITH_PREFIX}'s stat changes!$"
-
-gUnknown_83FC185:: @ 83FC185
- .string "{B_ATK_NAME_WITH_PREFIX} got free of\n"
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!$"
-
-gUnknown_83FC19D:: @ 83FC19D
- .string "{B_ATK_NAME_WITH_PREFIX} shed\n"
- .string "LEECH SEED!$"
-
-gUnknown_83FC1B1:: @ 83FC1B1
- .string "{B_ATK_NAME_WITH_PREFIX} blew away\n"
- .string "SPIKES!$"
-
-gUnknown_83FC1C6:: @ 83FC1C6
- .string "{B_ATK_NAME_WITH_PREFIX} fled from\n"
- .string "battle!$"
-
-gUnknown_83FC1DB:: @ 83FC1DB
- .string "{B_ATK_NAME_WITH_PREFIX} foresaw\n"
- .string "an attack!$"
-
-gUnknown_83FC1F1:: @ 83FC1F1
- .string "{B_DEF_NAME_WITH_PREFIX} took the\n"
- .string "{B_BUFF1} attack!$"
-
-gUnknown_83FC208:: @ 83FC208
- .string "{B_ATK_NAME_WITH_PREFIX} chose\n"
- .string "{B_CURRENT_MOVE} as its destiny!$"
-
-gUnknown_83FC224:: @ 83FC224
- .string "{B_BUFF1}'s attack!$"
-
-gUnknown_83FC231:: @ 83FC231
- .string "{B_ATK_NAME_WITH_PREFIX} became the\n"
- .string "center of attention!$"
-
-gUnknown_83FC254:: @ 83FC254
- .string "{B_ATK_NAME_WITH_PREFIX} began\n"
- .string "charging power!$"
-
-gUnknown_83FC26D:: @ 83FC26D
- .string "NATURE POWER turned into\n"
- .string "{B_CURRENT_MOVE}!$"
-
-gUnknown_83FC28A:: @ 83FC28A
- .string "{B_ATK_NAME_WITH_PREFIX}'s status\n"
- .string "returned to normal!$"
-
-gUnknown_83FC2AA:: @ 83FC2AA
- .string "{B_DEF_NAME_WITH_PREFIX} was subjected\n"
- .string "to TORMENT!$"
-
-gUnknown_83FC2C7:: @ 83FC2C7
- .string "{B_ATK_NAME_WITH_PREFIX} is tightening\n"
- .string "its focus!$"
-
-gUnknown_83FC2E3:: @ 83FC2E3
- .string "{B_DEF_NAME_WITH_PREFIX} fell for\n"
- .string "the TAUNT!$"
-
-gUnknown_83FC2FA:: @ 83FC2FA
- .string "{B_ATK_NAME_WITH_PREFIX} is ready to\n"
- .string "help {B_DEF_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FC312:: @ 83FC312
- .string "{B_ATK_NAME_WITH_PREFIX} switched\n"
- .string "items with its opponent!$"
-
-gUnknown_83FC337:: @ 83FC337
- .string "{B_ATK_NAME_WITH_PREFIX} obtained\n"
- .string "{B_BUFF1}.$"
-
-gUnknown_83FC347:: @ 83FC347
- .string "{B_DEF_NAME_WITH_PREFIX} obtained\n"
- .string "{B_BUFF2}.$"
-
-gUnknown_83FC357:: @ 83FC357
- .string "{B_ATK_NAME_WITH_PREFIX} obtained\n"
- .string "{B_BUFF1}.\p"
- .string "{B_DEF_NAME_WITH_PREFIX} obtained\n"
- .string "{B_BUFF2}.$"
-
-gUnknown_83FC377:: @ 83FC377
- .string "{B_ATK_NAME_WITH_PREFIX} copied\n"
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!$"
-
-gUnknown_83FC38A:: @ 83FC38A
- .string "{B_ATK_NAME_WITH_PREFIX} made a WISH!$"
-
-gUnknown_83FC39A:: @ 83FC39A
- .string "{B_BUFF1}'s WISH\n"
- .string "came true!$"
-
-gUnknown_83FC3AF:: @ 83FC3AF
- .string "{B_ATK_NAME_WITH_PREFIX} planted its roots!$"
-
-gUnknown_83FC3C5:: @ 83FC3C5
- .string "{B_ATK_NAME_WITH_PREFIX} absorbed\n"
- .string "nutrients with its roots!$"
-
-gUnknown_83FC3EB:: @ 83FC3EB
- .string "{B_DEF_NAME_WITH_PREFIX} anchored\n"
- .string "itself with its roots!$"
-
-gUnknown_83FC40E:: @ 83FC40E
- .string "{B_ATK_NAME_WITH_PREFIX} made\n"
- .string "{B_DEF_NAME_WITH_PREFIX} drowsy!$"
-
-gUnknown_83FC421:: @ 83FC421
- .string "{B_ATK_NAME_WITH_PREFIX} knocked off\n"
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!$"
-
-gUnknown_83FC439:: @ 83FC439
- .string "{B_ATK_NAME_WITH_PREFIX} swapped abilities\n"
- .string "with its opponent!$"
-
-gUnknown_83FC461:: @ 83FC461
- .string "{B_ATK_NAME_WITH_PREFIX} sealed the\n"
- .string "opponent's moveシsス!$"
-
-gUnknown_83FC483:: @ 83FC483
- .string "{B_ATK_NAME_WITH_PREFIX} wants the\n"
- .string "opponent to bear a GRUDGE!$"
-
-gUnknown_83FC4AB:: @ 83FC4AB
- .string "{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost\n"
- .string "all its PP due to the GRUDGE!$"
-
-gUnknown_83FC4D6:: @ 83FC4D6
- .string "{B_ATK_NAME_WITH_PREFIX} shrouded\n"
- .string "itself in {B_CURRENT_MOVE}!$"
-
-gUnknown_83FC4F0:: @ 83FC4F0
- .string "{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\n"
- .string "was bounced back by MAGIC COAT!$"
-
-gUnknown_83FC518:: @ 83FC518
- .string "{B_ATK_NAME_WITH_PREFIX} waits for its foe\n"
- .string "to make a move!$"
-
-gUnknown_83FC53D:: @ 83FC53D
- .string "{B_DEF_NAME_WITH_PREFIX} SNATCHED\n"
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s move!$"
-
-gUnknown_83FC554:: @ 83FC554
- .string "Electricity's power was\n"
- .string "weakened!$"
-
-gUnknown_83FC576:: @ 83FC576
- .string "Fire's power was\n"
- .string "weakened!$"
-
-gUnknown_83FC591:: @ 83FC591
- .string "{B_ATK_NAME_WITH_PREFIX} found\n"
- .string "one {B_LAST_ITEM}!$"
-
-gUnknown_83FC5A2:: @ 83FC5A2
- .string "A soothing aroma wafted\n"
- .string "through the area!$"
-
-gUnknown_83FC5CC:: @ 83FC5CC
- .string "Items can't be used now.{PAUSE 64}$"
-
-gUnknown_83FC5E8:: @ 83FC5E8
- .string "For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n"
- .string "{B_LAST_ITEM} {B_BUFF1}$"
-
-gUnknown_83FC5F6:: @ 83FC5F6
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n"
- .string "{B_LAST_ITEM} to hustle!$"
-
-gUnknown_83FC60C:: @ 83FC60C
- .string "{B_ATK_NAME_WITH_PREFIX} lost its\n"
- .string "focus and couldn't move!$"
-
-gUnknown_83FC631:: @ 83FC631
- .string "{B_DEF_NAME_WITH_PREFIX} was\n"
- .string "dragged out!\p"
- .string "$"
-
-gUnknown_83FC646:: @ 83FC646
- .string "The wall shattered!$"
-
-gUnknown_83FC65A:: @ 83FC65A
- .string "But it had no effect!$"
-
-gUnknown_83FC670:: @ 83FC670
- .string "{B_ACTIVE_NAME_WITH_PREFIX} has no\n"
- .string "moves left!\p"
- .string "$"
-
-gUnknown_83FC687:: @ 83FC687
- .string "{B_ACTIVE_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\n"
- .string "is disabled!\p"
- .string "$"
-
-gUnknown_83FC69D:: @ 83FC69D
- .string "{B_ACTIVE_NAME_WITH_PREFIX} can't use the same\n"
- .string "move in a row due to the TORMENT!\p"
- .string "$"
-
-gUnknown_83FC6D6:: @ 83FC6D6
- .string "{B_ACTIVE_NAME_WITH_PREFIX} can't use\n"
- .string "{B_CURRENT_MOVE} after the TAUNT!\p"
- .string "$"
-
-gUnknown_83FC6F8:: @ 83FC6F8
- .string "{B_ACTIVE_NAME_WITH_PREFIX} can't use the\n"
- .string "sealed {B_CURRENT_MOVE}!\p"
- .string "$"
-
-gUnknown_83FC715:: @ 83FC715
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "made it rain!$"
-
-gUnknown_83FC72B:: @ 83FC72B
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "raised its SPEED!$"
-
-gUnknown_83FC745:: @ 83FC745
- .string "{B_DEF_NAME_WITH_PREFIX} was protected\n"
- .string "by {B_DEF_ABILITY}!$"
-
-gUnknown_83FC75D:: @ 83FC75D
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "prevents {B_ATK_NAME_WITH_PREFIX}\l"
- .string "from using {B_CURRENT_MOVE}!$"
-
-gUnknown_83FC780:: @ 83FC780
- .string "{B_DEF_NAME_WITH_PREFIX} restored HP\n"
- .string "using its {B_DEF_ABILITY}!$"
-
-gUnknown_83FC79D:: @ 83FC79D
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "made {B_CURRENT_MOVE} useless!$"
-
-gUnknown_83FC7B6:: @ 83FC7B6
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "made it the {B_BUFF1} type!$"
-
-gUnknown_83FC7D3:: @ 83FC7D3
- .string "{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "prevents paralysis!$"
-
-gUnknown_83FC7EF:: @ 83FC7EF
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "prevents romance!$"
-
-gUnknown_83FC809:: @ 83FC809
- .string "{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "prevents poisoning!$"
-
-gUnknown_83FC825:: @ 83FC825
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "prevents confusion!$"
-
-gUnknown_83FC841:: @ 83FC841
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "raised its FIRE power!$"
-
-gUnknown_83FC860:: @ 83FC860
- .string "{B_DEF_NAME_WITH_PREFIX} anchors\n"
- .string "itself with {B_DEF_ABILITY}!$"
-
-gUnknown_83FC87B:: @ 83FC87B
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "cuts {B_DEF_NAME_WITH_PREFIX}'s ATTACK!$"
-
-gUnknown_83FC895:: @ 83FC895
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "prevents stat loss!$"
-
-gUnknown_83FC8B1:: @ 83FC8B1
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "hurt {B_ATK_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FC8C2:: @ 83FC8C2
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n"
- .string "{B_BUFF1}'s {B_BUFF2}!$"
-
-gUnknown_83FC8D5:: @ 83FC8D5
- .string "{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\n"
- .string "prevents burns!$"
-
-gUnknown_83FC8ED:: @ 83FC8ED
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "blocks {B_CURRENT_MOVE}!$"
-
-gUnknown_83FC900:: @ 83FC900
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "blocks {B_CURRENT_MOVE}!$"
-
-gUnknown_83FC913:: @ 83FC913
- .string "{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\n"
- .string "restored its HP a little!$"
-
-gUnknown_83FC935:: @ 83FC935
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "whipped up a sandstorm!$"
-
-gUnknown_83FC955:: @ 83FC955
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "intensified the sun's rays!$"
-
-gUnknown_83FC979:: @ 83FC979
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "prevents {B_BUFF1} loss!$"
-
-gUnknown_83FC993:: @ 83FC993
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "infatuated {B_ATK_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FC9AA:: @ 83FC9AA
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "made {B_CURRENT_MOVE} ineffective!$"
-
-gUnknown_83FC9C7:: @ 83FC9C7
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "cured its {B_BUFF1} problem!$"
-
-gUnknown_83FC9E5:: @ 83FC9E5
- .string "It sucked up the\n"
- .string "LIQUID OOZE!$"
-
-gUnknown_83FCA03:: @ 83FCA03
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!$"
-
-gUnknown_83FCA13:: @ 83FCA13
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "took the attack!$"
-
-gText_PkmnsXPreventsSwitching:: @ 83FCA2C
- .string "{B_BUFF1}'s {B_LAST_ABILITY}\n"
- .string "prevents switching!\p"
- .string "$"
-
-gUnknown_83FCA49:: @ 83FCA49
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\n"
- .string "prevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\l"
- .string "{B_BUFF1} from working!$"
-
-gUnknown_83FCA71:: @ 83FCA71
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "made it ineffective!$"
-
-gUnknown_83FCA8E:: @ 83FCA8E
- .string "{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\n"
- .string "prevents flinching!$"
-
-gUnknown_83FCAAA:: @ 83FCAAA
- .string "{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\n"
- .string "prevents {B_DEF_NAME_WITH_PREFIX}'s\l"
- .string "{B_DEF_ABILITY} from working!$"
-
-gUnknown_83FCAD1:: @ 83FCAD1
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "cured its {B_BUFF1} problem!$"
-
-gUnknown_83FCAEF:: @ 83FCAEF
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\n"
- .string "had no effect on {B_EFF_NAME_WITH_PREFIX}!$"
-
-gUnknown_83FCB0C:: @ 83FCB0C
- .string "{B_ATK_NAME_WITH_PREFIX} is too scared to move!$"
-
-gUnknown_83FCB26:: @ 83FCB26
- .string "GHOST: Get out…… Get out……$"
-
-gUnknown_83FCB41:: @ 83FCB41
- .string "sharply $"
-
-BattleText_Rose:: @ 83FCB4A
- .string "rose!$"
-
-gUnknown_83FCB50:: @ 83FCB50
- .string "harshly $"
-
-gUnknown_83FCB59:: @ 83FCB59
- .string "fell!$"
-
-gUnknown_83FCB5F:: @ 83FCB5F
- .string "{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n"
- .string "{B_BUFF2}$"
-
-BattleText_UnknownString3:: @ 83FCB6A
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n"
- .string "{B_BUFF2}$"
-
-gUnknown_83FCB75:: @ 83FCB75
- .string "Using {B_LAST_ITEM}, the {B_BUFF1}\n"
- .string "of {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}$"
-
-gUnknown_83FCB8F:: @ 83FCB8F
- .string "{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n"
- .string "{B_BUFF2}$"
-
-gUnknown_83FCB9A:: @ 83FCB9A
- .string "{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n"
- .string "{B_BUFF2}$"
-
-gUnknown_83FCBA5:: @ 83FCBA5
- .string "{B_ATK_NAME_WITH_PREFIX}'s stats won't\n"
- .string "go any higher!$"
-
-gUnknown_83FCBC5:: @ 83FCBC5
- .string "{B_DEF_NAME_WITH_PREFIX}'s stats won't\n"
- .string "go any lower!$"
-
-gUnknown_83FCBE4:: @ 83FCBE4
- .string "A critical hit!$"
-
-gUnknown_83FCBF4:: @ 83FCBF4
- .string "It's a one-hit KO!$"
-
-gUnknown_83FCC07:: @ 83FCC07
- .string "{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_KON}Poof!\p"
- .string "$"
-
-gUnknown_83FCC33:: @ 83FCC33
- .string "And…\p"
- .string "$"
-
-gUnknown_83FCC39:: @ 83FCC39
- .string "HM moves can't be\n"
- .string "forgotten now.\p"
- .string "$"
-
-gUnknown_83FCC5B:: @ 83FCC5B
- .string "It's not very effective…$"
-
-gUnknown_83FCC74:: @ 83FCC74
- .string "It's super effective!$"
-
-gUnknown_83FCC8A:: @ 83FCC8A
- .string "{PLAY_SE SE_NIGERU}Got away safely!\p"
- .string "$"
-
-gUnknown_83FCCA0:: @ 83FCCA0
- .string "{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\n"
- .string "using its {B_LAST_ITEM}!\p"
- .string "$"
-
-gUnknown_83FCCBB:: @ 83FCCBB
- .string "{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\n"
- .string "using {B_ATK_ABILITY}!\p"
- .string "$"
-
-gUnknown_83FCCD2:: @ 83FCCD2
- .string "{PLAY_SE SE_NIGERU}Wild {B_BUFF1} fled!$"
-
-gUnknown_83FCCE4:: @ 83FCCE4
- .string "Player defeated\n"
- .string "{B_LINK_OPPONENT1_NAME}!$"
-
-gUnknown_83FCCF8:: @ 83FCCF8
- .string "Player beat {B_LINK_OPPONENT1_NAME}\n"
- .string "and {B_LINK_OPPONENT2_NAME}!$"
-
-gUnknown_83FCD0F:: @ 83FCD0F
- .string "Player lost against\n"
- .string "{B_LINK_OPPONENT1_NAME}!$"
-
-gUnknown_83FCD27:: @ 83FCD27
- .string "Player lost to {B_LINK_OPPONENT1_NAME}\n"
- .string "and {B_LINK_OPPONENT2_NAME}!$"
-
-gUnknown_83FCD41:: @ 83FCD41
- .string "Player battled to a draw against\n"
- .string "{B_LINK_OPPONENT1_NAME}!$"
-
-gUnknown_83FCD66:: @ 83FCD66
- .string "Player battled to a draw against\n"
- .string "{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!$"
-
-gUnknown_83FCD92:: @ 83FCD92
- .string "{PLAY_SE SE_NIGERU}{B_LINK_OPPONENT1_NAME} fled!$"
-
-gUnknown_83FCD9F:: @ 83FCD9F
- .string "{PLAY_SE SE_NIGERU}{B_LINK_OPPONENT1_NAME} and\n"
- .string "{B_LINK_OPPONENT2_NAME} fled!$"
-
-gUnknown_83FCDB3:: @ 83FCDB3
- .string "No! There's no running\n"
- .string "from a TRAINER battle!\p"
- .string "$"
-
-gUnknown_83FCDE2:: @ 83FCDE2
- .string "Can't escape!\p"
- .string "$"
-
-gUnknown_83FCDF1:: @ 83FCDF1
- .string "$"
-
-gUnknown_83FCDF2:: @ 83FCDF2
- .string "But nothing happened!$"
-
-gUnknown_83FCE08:: @ 83FCE08
- .string "But it failed!$"
-
-gUnknown_83FCE17:: @ 83FCE17
- .string "It hurt itself in its\n"
- .string "confusion!$"
-
-gUnknown_83FCE38:: @ 83FCE38
- .string "The MIRROR MOVE failed!$"
-
-gUnknown_83FCE50:: @ 83FCE50
- .string "It started to rain!$"
-
-gUnknown_83FCE64:: @ 83FCE64
- .string "A downpour started!$"
-
-gUnknown_83FCE78:: @ 83FCE78
- .string "Rain continues to fall.$"
-
-gUnknown_83FCE90:: @ 83FCE90
- .string "The downpour continues.$"
-
-gUnknown_83FCEA8:: @ 83FCEA8
- .string "The rain stopped.$"
-
-gUnknown_83FCEBA:: @ 83FCEBA
- .string "A sandstorm brewed!$"
-
-gUnknown_83FCECE:: @ 83FCECE
- .string "The sandstorm rages.$"
-
-gUnknown_83FCEE3:: @ 83FCEE3
- .string "The sandstorm subsided.$"
-
-gUnknown_83FCEFB:: @ 83FCEFB
- .string "The sunlight got bright!$"
-
-gUnknown_83FCF14:: @ 83FCF14
- .string "The sunlight is strong.$"
-
-gUnknown_83FCF2C:: @ 83FCF2C
- .string "The sunlight faded.$"
-
-gUnknown_83FCF40:: @ 83FCF40
- .string "It started to hail!$"
-
-gUnknown_83FCF54:: @ 83FCF54
- .string "Hail continues to fall.$"
-
-gUnknown_83FCF6C:: @ 83FCF6C
- .string "The hail stopped.$"
-
-gUnknown_83FCF7E:: @ 83FCF7E
- .string "But it failed to SPIT UP\n"
- .string "a thing!$"
-
-gUnknown_83FCFA0:: @ 83FCFA0
- .string "But it failed to SWALLOW\n"
- .string "a thing!$"
-
-gUnknown_83FCFC2:: @ 83FCFC2
- .string "The wind turned into a\n"
- .string "HEAT WAVE!$"
-
-gUnknown_83FCFE4:: @ 83FCFE4
- .string "All stat changes were\n"
- .string "eliminated!$"
-
-gUnknown_83FD006:: @ 83FD006
- .string "Coins scattered everywhere!$"
-
-gUnknown_83FD022:: @ 83FD022
- .string "It was too weak to make\n"
- .string "a SUBSTITUTE!$"
-
-gUnknown_83FD048:: @ 83FD048
- .string "The battlers shared\n"
- .string "their pain!$"
-
-gUnknown_83FD068:: @ 83FD068
- .string "A bell chimed!$"
-
-gUnknown_83FD077:: @ 83FD077
- .string "All affected POKéMON will\n"
- .string "faint in three turns!$"
-
-gUnknown_83FD0A7:: @ 83FD0A7
- .string "There's no PP left for\n"
- .string "this move!\p"
- .string "$"
-
-gUnknown_83FD0CA:: @ 83FD0CA
- .string "But there was no PP left\n"
- .string "for the move!$"
-
-gUnknown_83FD0F1:: @ 83FD0F1
- .string "{B_ATK_NAME_WITH_PREFIX} ignored\n"
- .string "orders while asleep!$"
-
-gUnknown_83FD111:: @ 83FD111
- .string "{B_ATK_NAME_WITH_PREFIX} ignored\n"
- .string "orders!$"
-
-gUnknown_83FD124:: @ 83FD124
- .string "{B_ATK_NAME_WITH_PREFIX} began to nap!$"
-
-gUnknown_83FD135:: @ 83FD135
- .string "{B_ATK_NAME_WITH_PREFIX} is\n"
- .string "loafing around!$"
-
-gUnknown_83FD14B:: @ 83FD14B
- .string "{B_ATK_NAME_WITH_PREFIX} won't\n"
- .string "obey!$"
-
-gUnknown_83FD15A:: @ 83FD15A
- .string "{B_ATK_NAME_WITH_PREFIX} turned away!$"
-
-gUnknown_83FD16A:: @ 83FD16A
- .string "{B_ATK_NAME_WITH_PREFIX} pretended\n"
- .string "not to notice!$"
-
-gUnknown_83FD186:: @ 83FD186
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\n"
- .string "about to use {B_BUFF2}.\p"
- .string "Will {B_PLAYER_NAME} change\n"
- .string "POKéMON?$"
-
-gUnknown_83FD1B8:: @ 83FD1B8
- .string "{B_ATK_NAME_WITH_PREFIX} learned\n"
- .string "{B_BUFF1}!$"
-
-gUnknown_83FD1C7:: @ 83FD1C7
- .string "Player defeated\n"
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"
- .string "$"
-
-gUnknown_83FD1DF:: @ 83FD1DF
- .string "{B_PLAYER_NAME} threw a ROCK\n"
- .string "at the {B_OPPONENT_MON1_NAME}!$"
-
-gUnknown_83FD1FA:: @ 83FD1FA
- .string "{B_PLAYER_NAME} threw some BAIT\n"
- .string "at the {B_OPPONENT_MON1_NAME}!$"
-
-gUnknown_83FD218:: @ 83FD218
- .string "{B_OPPONENT_MON1_NAME} is watching\n"
- .string "carefully!$"
-
-gUnknown_83FD232:: @ 83FD232
- .string "{B_OPPONENT_MON1_NAME} is angry!$"
-
-gUnknown_83FD23F:: @ 83FD23F
- .string "{B_OPPONENT_MON1_NAME} is eating!$"
-
-gUnknown_83FD24D:: @ 83FD24D
- .string "{PLAY_SE SE_PINPON}ANNOUNCER: You're out of\n"
- .string "SAFARI BALLS! Game over!\p"
- .string "$"
-
-gUnknown_83FD284:: @ 83FD284
- .string "Wild {B_OPPONENT_MON1_NAME} appeared!\p"
- .string "$"
-
-gUnknown_83FD297:: @ 83FD297
- .string "Wild {B_OPPONENT_MON1_NAME} appeared!\p"
- .string "$"
-
-gUnknown_83FD2AA:: @ 83FD2AA
- .string "Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}$"
-
-gUnknown_83FD2BF:: @ 83FD2BF
- .string "Wild {B_OPPONENT_MON1_NAME} and\n"
- .string "{B_OPPONENT_MON2_NAME} appeared!\p"
- .string "$"
-
-gUnknown_83FD2D9:: @ 83FD2D9
- .string "The GHOST appeared!\p"
- .string "Darn!\n"
- .string "The GHOST can't be ID'd!\p"
- .string "$"
-
-gUnknown_83FD30D:: @ 83FD30D
- .string "The GHOST appeared!\p"
- .string "$"
-
-gUnknown_83FD322:: @ 83FD322
- .string "SILPH SCOPE unveiled the GHOST's\n"
- .string "identity!$"
-
-gUnknown_83FD34D:: @ 83FD34D
- .string "The GHOST was MAROWAK!\p"
- .string "\n"
- .string "$"
-
-gUnknown_83FD366:: @ 83FD366
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\n"
- .string "would like to battle!\p"
- .string "$"
-
-gUnknown_83FD383:: @ 83FD383
- .string "{B_LINK_OPPONENT1_NAME}\n"
- .string "wants to battle!$"
-
-gUnknown_83FD397:: @ 83FD397
- .string "{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\n"
- .string "want to battle!$"
-
-gUnknown_83FD3B1:: @ 83FD3B1
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\n"
- .string "out {B_OPPONENT_MON1_NAME}!{PAUSE 60}$"
-
-gUnknown_83FD3C7:: @ 83FD3C7
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\n"
- .string "out {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!{PAUSE 60}$"
-
-gUnknown_83FD3E4:: @ 83FD3E4
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\n"
- .string "out {B_BUFF1}!$"
-
-gUnknown_83FD3F7:: @ 83FD3F7
- .string "{B_LINK_OPPONENT1_NAME} sent out\n"
- .string "{B_OPPONENT_MON1_NAME}!$"
-
-gUnknown_83FD407:: @ 83FD407
- .string "{B_LINK_OPPONENT1_NAME} sent out\n"
- .string "{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!$"
-
-gUnknown_83FD41E:: @ 83FD41E
- .string "{B_LINK_OPPONENT1_NAME} sent out {B_LINK_OPPONENT_MON1_NAME}!\n"
- .string "{B_LINK_OPPONENT2_NAME} sent out {B_LINK_OPPONENT_MON2_NAME}!$"
-
-gUnknown_83FD43E:: @ 83FD43E
- .string "{B_LINK_OPPONENT1_NAME} sent out\n"
- .string "{B_BUFF1}!$"
-
-gUnknown_83FD44E:: @ 83FD44E
- .string "{B_LINK_SCR_TRAINER_NAME} sent out\n"
- .string "{B_BUFF1}!$"
-
-gUnknown_83FD45E:: @ 83FD45E
- .string "Go! {B_PLAYER_MON1_NAME}!$"
-
-gUnknown_83FD466:: @ 83FD466
- .string "Go! {B_PLAYER_MON1_NAME} and\n"
- .string "{B_PLAYER_MON2_NAME}!$"
-
-gUnknown_83FD475:: @ 83FD475
- .string "Go! {B_BUFF1}!$"
-
-gUnknown_83FD47D:: @ 83FD47D
- .string "Do it! {B_BUFF1}!$"
-
-gUnknown_83FD488:: @ 83FD488
- .string "Go for it, {B_BUFF1}!$"
-
-gUnknown_83FD497:: @ 83FD497
- .string "Your foe's weak!\n"
- .string "Get 'em, {B_BUFF1}!$"
-
-gUnknown_83FD4B5:: @ 83FD4B5
- .string "{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}!\n"
- .string "Go! {GOOD_TEAM}!$"
-
-gUnknown_83FD4CD:: @ 83FD4CD
- .string "{B_BUFF1}, that's enough!\n"
- .string "Come back!$"
-
-gUnknown_83FD4EB:: @ 83FD4EB
- .string "{B_BUFF1}, come back!$"
-
-gUnknown_83FD4FA:: @ 83FD4FA
- .string "{B_BUFF1}, OK!\n"
- .string "Come back!$"
-
-gUnknown_83FD50D:: @ 83FD50D
- .string "{B_BUFF1}, good!\n"
- .string "Come back!$"
-
-gUnknown_83FD522:: @ 83FD522
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\n"
- .string "withdrew {B_BUFF1}!$"
-
-gUnknown_83FD535:: @ 83FD535
- .string "{B_LINK_OPPONENT1_NAME} withdrew\n"
- .string "{B_BUFF1}!$"
-
-gUnknown_83FD545:: @ 83FD545
- .string "{B_LINK_SCR_TRAINER_NAME} withdrew\n"
- .string "{B_BUFF1}!$"
-
-gUnknown_83FD555:: @ 83FD555
- .string "Wild $"
-
-gUnknown_83FD55B:: @ 83FD55B
- .string "Foe $"
-
-gUnknown_83FD560:: @ 83FD560
- .string "Foe$"
-
-gUnknown_83FD564:: @ 83FD564
- .string "Ally$"
-
-gUnknown_83FD569:: @ 83FD569
- .string "Foe$"
-
-gUnknown_83FD56D:: @ 83FD56D
- .string "Ally$"
-
-gUnknown_83FD572:: @ 83FD572
- .string "Foe$"
-
-gUnknown_83FD576:: @ 83FD576
- .string "Ally$"
-
-gUnknown_83FD57B:: @ 83FD57B
- .string "{B_ATK_NAME_WITH_PREFIX} used\n"
- .string "{B_BUFF2}$"
-
-gUnknown_83FD586:: @ 83FD586
- .string "!$"
-
-gUnknown_83FD588:: @ 83FD588
- .string "!$"
-
-gUnknown_83FD58A:: @ 83FD58A
- .string "!$"
-
-gUnknown_83FD58C:: @ 83FD58C
- .string "!$"
-
-gUnknown_83FD58E:: @ 83FD58E
- .string "!$"
-
-gUnknown_83FD590:: @ 83FD590
- .string "HP$"
-
-gUnknown_83FD593:: @ 83FD593
- .string "ATTACK$"
-
-gUnknown_83FD59A:: @ 83FD59A
- .string "DEFENSE$"
-
-gUnknown_83FD5A2:: @ 83FD5A2
- .string "SPEED$"
-
-gUnknown_83FD5A8:: @ 83FD5A8
- .string "SP. ATK$"
-
-gUnknown_83FD5B0:: @ 83FD5B0
- .string "SP. DEF$"
-
-gUnknown_83FD5B8:: @ 83FD5B8
- .string "accuracy$"
-
-gUnknown_83FD5C1:: @ 83FD5C1
- .string "evasiveness$"
-
- .align 2
-gUnknown_83FD5D0:: @ 83FD5D0
- .4byte gUnknown_83FD590
- .4byte gUnknown_83FD593
- .4byte gUnknown_83FD59A
- .4byte gUnknown_83FD5A2
- .4byte gUnknown_83FD5A8
- .4byte gUnknown_83FD5B0
- .4byte gUnknown_83FD5B8
- .4byte gUnknown_83FD5C1
-
-gUnknown_83FD5F0::
- .string "was too spicy!$"
-
-gUnknown_83FD5FF:: @ 83FD5FF
- .string "was too dry!$"
-
-gUnknown_83FD60C:: @ 83FD60C
- .string "was too sweet!$"
-
-gUnknown_83FD61B:: @ 83FD61B
- .string "was too bitter!$"
-
-gUnknown_83FD62B:: @ 83FD62B
- .string "was too sour!$"
-
- .align 2
-gUnknown_83FD63C:: @ 83FD63C
- .4byte gUnknown_83FD5F0
- .4byte gUnknown_83FD5FF
- .4byte gUnknown_83FD60C
- .4byte gUnknown_83FD61B
- .4byte gUnknown_83FD62B
-
-gUnknown_83FD650:: @ 83FD650
- .string "{B_PLAYER_NAME} used\n"
- .string "{B_LAST_ITEM}!$"
-
-gUnknown_83FD65C:: @ 83FD65C
- .string "The old man used\n"
- .string "{B_LAST_ITEM}!$"
-
-gUnknown_83FD671:: @ 83FD671
- .string "The POKé DUDE used\n"
- .string "{B_LAST_ITEM}!$"
-
-gUnknown_83FD688:: @ 83FD688
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\n"
- .string "used {B_LAST_ITEM}!$"
-
-gUnknown_83FD697:: @ 83FD697
- .string "The TRAINER blocked the BALL!$"
-
-gUnknown_83FD6B5:: @ 83FD6B5
- .string "Don't be a thief!$"
-
-gUnknown_83FD6C7:: @ 83FD6C7
- .string "It dodged the thrown BALL!\n"
- .string "This POKéMON can't be caught!$"
-
-gUnknown_83FD700:: @ 83FD700
- .string "You missed the POKéMON!$"
-
-gUnknown_83FD718:: @ 83FD718
- .string "Oh, no!\n"
- .string "The POKéMON broke free!$"
-
-gUnknown_83FD738:: @ 83FD738
- .string "Aww!\n"
- .string "It appeared to be caught!$"
-
-gUnknown_83FD757:: @ 83FD757
- .string "Aargh!\n"
- .string "Almost had it!$"
-
-gUnknown_83FD76D:: @ 83FD76D
- .string "Shoot!\n"
- .string "It was so close, too!$"
-
-gUnknown_83FD78A:: @ 83FD78A
- .string "よけられた!\n"
- .string "こいつは つかまりそうにないぞ!$"
-
-gUnknown_83FD7A2:: @ 83FD7A2
- .string "Gotcha!\n"
- .string "{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_GET_YASEI}\p"
- .string "$"
-
-gUnknown_83FD7C0:: @ 83FD7C0
- .string "Gotcha!\n"
- .string "{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_GET_YASEI}{PAUSE 127}$"
-
-gUnknown_83FD7E0:: @ 83FD7E0
- .string "Give a nickname to the\n"
- .string "captured {B_OPPONENT_MON1_NAME}?$"
-
-gUnknown_83FD804:: @ 83FD804
- .string "{B_OPPONENT_MON1_NAME} was sent to\n"
- .string "{B_PC_CREATOR_NAME} PC.$"
-
-gUnknown_83FD81A:: @ 83FD81A
- .string "someone's$"
-
-gUnknown_83FD824:: @ 83FD824
- .string "BILL's$"
-
-gUnknown_83FD82B:: @ 83FD82B
- .string "{B_OPPONENT_MON1_NAME}'s data was\n"
- .string "added to the POKéDEX.\p"
- .string "$"
-
-gUnknown_83FD850:: @ 83FD850
- .string "It is raining.$"
-
-gUnknown_83FD85F:: @ 83FD85F
- .string "A sandstorm is raging.$"
-
-gUnknown_83FD876:: @ 83FD876
- .string "The BOX is full!\n"
- .string "You can't catch any more!\p"
- .string "$"
-
-gUnknown_83FD8A2:: @ 83FD8A2
- .string "ENIGMA BERRY$"
-
-gUnknown_83FD8AF:: @ 83FD8AF
- .string " BERRY$"
-
-gUnknown_83FD8B6:: @ 83FD8B6
- .string "ナゾ$"
-
-gUnknown_83FD8B9:: @ 83FD8B9
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "cured paralysis!$"
-
-gUnknown_83FD8D2:: @ 83FD8D2
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "cured poison!$"
-
-gUnknown_83FD8E8:: @ 83FD8E8
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "healed its burn!$"
-
-gUnknown_83FD901:: @ 83FD901
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "defrosted it!$"
-
-gUnknown_83FD917:: @ 83FD917
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "woke it from its sleep!$"
-
-gUnknown_83FD937:: @ 83FD937
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "snapped it out of confusion!$"
-
-gUnknown_83FD95C:: @ 83FD95C
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "cured its {B_BUFF1} problem!$"
-
-gUnknown_83FD97A:: @ 83FD97A
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "normalized its status!$"
-
-gUnknown_83FD999:: @ 83FD999
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "restored health!$"
-
-gUnknown_83FD9B2:: @ 83FD9B2
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "restored {B_BUFF1}'s PP!$"
-
-gUnknown_83FD9CC:: @ 83FD9CC
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "restored its status!$"
-
-gUnknown_83FD9E9:: @ 83FD9E9
- .string "{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\n"
- .string "restored its HP a little!$"
-
-gUnknown_83FDA0B:: @ 83FDA0B
- .string "{B_LAST_ITEM}'s effect allows only\n"
- .string "{B_CURRENT_MOVE} to be used!\p"
- .string "$"
-
-gUnknown_83FDA33:: @ 83FDA33
- .string "{B_DEF_NAME_WITH_PREFIX} hung on\n"
- .string "using its {B_LAST_ITEM}!$"
-
-gUnknown_83FDA4C:: @ 83FDA4C
- .string "$"
-
-gUnknown_83FDA4D:: @ 83FDA4D
- .string "{B_PLAYER_NAME} played the {B_LAST_ITEM}.\p"
- .string "Now, that's a catchy tune!$"
-
-gUnknown_83FDA7A:: @ 83FDA7A
- .string "{B_PLAYER_NAME} played the\n"
- .string "{B_LAST_ITEM}.$"
-
-gUnknown_83FDA8C:: @ 83FDA8C
- .string "The POKéMON hearing the FLUTE\n"
- .string "awoke!$"
-
-gUnknown_83FDAB1:: @ 83FDAB1
- .string "You throw a BALL now, right?\n"
- .string "I… I'll do my best!$"
-
-gUnknown_83FDAE2:: @ 83FDAE2
- .string "OAK: Oh, for Pete's sake…\n"
- .string "So pushy, as always.\p"
- .string "{B_PLAYER_NAME}.\p"
- .string "You've never had a POKéMON battle\n"
- .string "before, have you?\p"
- .string "A POKéMON battle is when TRAINERS\n"
- .string "pit their POKéMON against each\l"
- .string "other.\p"
- .string "$"
-
-gUnknown_83FDB92:: @ 83FDB92
- .string "The TRAINER that makes the other\n"
- .string "TRAINER's POKéMON faint by lowering\l"
- .string "their HP to “0,” wins.\p"
- .string "$"
-
-gUnknown_83FDBEF:: @ 83FDBEF
- .string "But rather than talking about it,\n"
- .string "you'll learn more from experience.\p"
- .string "Try battling and see for yourself.\p"
- .string "$"
-
-gUnknown_83FDC58:: @ 83FDC58
- .string "OAK: Inflicting damage on the foe\n"
- .string "is the key to any battle.\p"
- .string "$"
-
-gUnknown_83FDC95:: @ 83FDC95
- .string "OAK: Lowering the foe's stats\n"
- .string "will put you at an advantage.\p"
- .string "$"
-
-gUnknown_83FDCD2:: @ 83FDCD2
- .string "OAK: Keep your eyes on your\n"
- .string "POKéMON's HP.\p"
- .string "It will faint if the HP drops to\n"
- .string "“0.”\p"
- .string "$"
-
-gUnknown_83FDD23:: @ 83FDD23
- .string "OAK: No! There's no running away\n"
- .string "from a TRAINER POKéMON battle!\p"
- .string "$"
-
-gUnknown_83FDD64:: @ 83FDD64
- .string "OAK: Hm! Excellent!\p"
- .string "If you win, you earn prize money,\n"
- .string "and your POKéMON will grow!\p"
- .string "Battle other TRAINERS and make\n"
- .string "your POKéMON strong!\p"
- .string "$"
-
-gUnknown_83FDDEB:: @ 83FDDEB
- .string "OAK: Hm…\n"
- .string "How disappointing…\p"
- .string "If you win, you earn prize money,\n"
- .string "and your POKéMON grow.\p"
- .string "But if you lose, {B_PLAYER_NAME}, you end\n"
- .string "up paying prize money…\p"
- .string "However, since you had no warning\n"
- .string "this time, I'll pay for you.\p"
- .string "But things won't be this way once\n"
- .string "you step outside these doors.\p"
- .string "That's why you must strengthen your\n"
- .string "POKéMON by battling wild POKéMON.\p"
- .string "$"
-
- .align 2
-gBattleStringsTable:: @ 83FDF3C
- .4byte gUnknown_83FB219
- .4byte gUnknown_83FB265
- .4byte gUnknown_83FB28E
- .4byte gUnknown_83FB2A4
- .4byte gUnknown_83FB2B6
- .4byte gUnknown_83FB2D1
- .4byte gUnknown_83FB2FC
- .4byte gUnknown_83FB31F
- .4byte gUnknown_83FB32E
- .4byte gUnknown_83FB343
- .4byte gUnknown_83FD1B8
- .4byte gUnknown_83FB36B
- .4byte gUnknown_83FB37F
- .4byte gUnknown_83FCBA5
- .4byte gUnknown_83FB394
- .4byte gUnknown_83FB3EA
- .4byte gUnknown_83FB400
- .4byte gUnknown_83FB40D
- .4byte gUnknown_83FB41A
- .4byte gUnknown_83FB433
- .4byte gUnknown_83FB451
- .4byte gUnknown_83FB508
- .4byte gUnknown_83FB545
- .4byte gUnknown_83FB555
- .4byte gUnknown_83FB565
- .4byte gUnknown_83FB57C
- .4byte gUnknown_83FB592
- .4byte gUnknown_83FB5A8
- .4byte gUnknown_83FB5BC
- .4byte gUnknown_83FB5CD
- .4byte gUnknown_83FB5E2
- .4byte gUnknown_83FB5F8
- .4byte gUnknown_83FB610
- .4byte gUnknown_83FB626
- .4byte gUnknown_83FB641
- .4byte gUnknown_83FB650
- .4byte gUnknown_83FB663
- .4byte gUnknown_83FB692
- .4byte gUnknown_83FB6A7
- .4byte gUnknown_83FB6BF
- .4byte gUnknown_83FB6D3
- .4byte gUnknown_83FB6E5
- .4byte gUnknown_83FB6F7
- .4byte gUnknown_83FB70F
- .4byte gUnknown_83FB73A
- .4byte gUnknown_83FB76A
- .4byte gUnknown_83FB78A
- .4byte gUnknown_83FB7A3
- .4byte gUnknown_83FB7BF
- .4byte gUnknown_83FB7D5
- .4byte gUnknown_83FB7EE
- .4byte gUnknown_83FB806
- .4byte gUnknown_83FB826
- .4byte gUnknown_83FB844
- .4byte gUnknown_83FB854
- .4byte gUnknown_83FB871
- .4byte gUnknown_83FB885
- .4byte gUnknown_83FB89D
- .4byte gUnknown_83FB8AE
- .4byte gUnknown_83FB8C5
- .4byte gUnknown_83FB8E0
- .4byte gUnknown_83FB8F3
- .4byte gUnknown_83FB914
- .4byte gUnknown_83FB921
- .4byte gUnknown_83FB935
- .4byte gUnknown_83FB946
- .4byte gUnknown_83FB97F
- .4byte gUnknown_83FB9B8
- .4byte gUnknown_83FB9D9
- .4byte gUnknown_83FB9FF
- .4byte gUnknown_83FBA2F
- .4byte gUnknown_83FBA41
- .4byte gUnknown_83FBA5E
- .4byte gUnknown_83FBA79
- .4byte gUnknown_83FBA8E
- .4byte gUnknown_83FBAA3
- .4byte gUnknown_83FBAB2
- .4byte gUnknown_83FBAC3
- .4byte gUnknown_83FBAF3
- .4byte gUnknown_83FBB11
- .4byte gUnknown_83FBB4C
- .4byte gUnknown_83FBB62
- .4byte gUnknown_83FBB71
- .4byte gUnknown_83FBB83
- .4byte gUnknown_83FBB99
- .4byte BattleText_MistShroud
- .4byte gUnknown_83FBBD0
- .4byte BattleText_GetPumped
- .4byte gUnknown_83FBBFF
- .4byte gUnknown_83FBC16
- .4byte gUnknown_83FBC2B
- .4byte gUnknown_83FBC4C
- .4byte gUnknown_83FBC74
- .4byte gUnknown_83FBC83
- .4byte gUnknown_83FBC99
- .4byte gUnknown_83FBCBE
- .4byte gUnknown_83FBCD1
- .4byte gUnknown_83FBCDD
- .4byte gUnknown_83FBCFC
- .4byte gUnknown_83FBD16
- .4byte gUnknown_83FBD2B
- .4byte gUnknown_83FBD43
- .4byte gUnknown_83FBD53
- .4byte gUnknown_83FBD74
- .4byte gUnknown_83FBD86
- .4byte gUnknown_83FBDA3
- .4byte gUnknown_83FBDC4
- .4byte gUnknown_83FBDE2
- .4byte gUnknown_83FBE00
- .4byte gUnknown_83FBE16
- .4byte gUnknown_83FBE2B
- .4byte gUnknown_83FBE4E
- .4byte gUnknown_83FBE61
- .4byte gUnknown_83FBE73
- .4byte gUnknown_83FBE8B
- .4byte gUnknown_83FBEA1
- .4byte gUnknown_83FBEBE
- .4byte gUnknown_83FBEE2
- .4byte gUnknown_83FBEFA
- .4byte gUnknown_83FBF0C
- .4byte gUnknown_83FBF23
- .4byte gUnknown_83FC687
- .4byte gUnknown_83FBF39
- .4byte gUnknown_83FBF51
- .4byte gUnknown_83FBF63
- .4byte gUnknown_83FBF76
- .4byte gUnknown_83FBF89
- .4byte gUnknown_83FBF99
- .4byte gUnknown_83FBFBF
- .4byte gUnknown_83FBFD3
- .4byte gUnknown_83FBFEA
- .4byte gUnknown_83FBFFC
- .4byte gUnknown_83FC011
- .4byte gUnknown_83FC02B
- .4byte gUnknown_83FC048
- .4byte gUnknown_83FC072
- .4byte gUnknown_83FC090
- .4byte gUnknown_83FC0C6
- .4byte gUnknown_83FC0DC
- .4byte gUnknown_83FC0EE
- .4byte gUnknown_83FC10C
- .4byte gUnknown_83FC11E
- .4byte gUnknown_83FC132
- .4byte gUnknown_83FC140
- .4byte gUnknown_83FC168
- .4byte gUnknown_83FC185
- .4byte gUnknown_83FC19D
- .4byte gUnknown_83FC1B1
- .4byte gUnknown_83FC1C6
- .4byte gUnknown_83FC1DB
- .4byte gUnknown_83FC1F1
- .4byte gUnknown_83FC224
- .4byte gUnknown_83FC231
- .4byte gUnknown_83FC254
- .4byte gUnknown_83FC26D
- .4byte gUnknown_83FC28A
- .4byte gUnknown_83FC670
- .4byte gUnknown_83FC2AA
- .4byte gUnknown_83FC69D
- .4byte gUnknown_83FC2C7
- .4byte gUnknown_83FC2E3
- .4byte gUnknown_83FC6D6
- .4byte gUnknown_83FC2FA
- .4byte gUnknown_83FC312
- .4byte gUnknown_83FC377
- .4byte gUnknown_83FC38A
- .4byte gUnknown_83FC39A
- .4byte gUnknown_83FC3AF
- .4byte gUnknown_83FC3C5
- .4byte gUnknown_83FC3EB
- .4byte gUnknown_83FC40E
- .4byte gUnknown_83FC421
- .4byte gUnknown_83FC439
- .4byte gUnknown_83FC461
- .4byte gUnknown_83FC6F8
- .4byte gUnknown_83FC483
- .4byte gUnknown_83FC4AB
- .4byte gUnknown_83FC4D6
- .4byte gUnknown_83FC4F0
- .4byte gUnknown_83FC518
- .4byte gUnknown_83FC53D
- .4byte gUnknown_83FC715
- .4byte gUnknown_83FC72B
- .4byte gUnknown_83FC745
- .4byte gUnknown_83FC75D
- .4byte gUnknown_83FC780
- .4byte gUnknown_83FC7B6
- .4byte gUnknown_83FC7D3
- .4byte gUnknown_83FC7EF
- .4byte gUnknown_83FC809
- .4byte gUnknown_83FC825
- .4byte gUnknown_83FC841
- .4byte gUnknown_83FC860
- .4byte gUnknown_83FC87B
- .4byte gUnknown_83FC895
- .4byte gUnknown_83FC8B1
- .4byte gUnknown_83FC8C2
- .4byte gUnknown_83FCB41
- .4byte BattleText_Rose
- .4byte gUnknown_83FCB50
- .4byte gUnknown_83FCB59
- .4byte gUnknown_83FCB5F
- .4byte BattleText_UnknownString3
- .4byte gUnknown_83FCB8F
- .4byte gUnknown_83FCB9A
- .4byte gUnknown_83FCBE4
- .4byte gUnknown_83FCBF4
- .4byte gUnknown_83FCC07
- .4byte gUnknown_83FCC33
- .4byte gUnknown_83FCC5B
- .4byte gUnknown_83FCC74
- .4byte gUnknown_83FCC8A
- .4byte gUnknown_83FCCD2
- .4byte gUnknown_83FCDB3
- .4byte gUnknown_83FCDE2
- .4byte gUnknown_83FCDF1
- .4byte gUnknown_83FCDF2
- .4byte gUnknown_83FCE08
- .4byte gUnknown_83FCE17
- .4byte gUnknown_83FCE38
- .4byte gUnknown_83FCE50
- .4byte gUnknown_83FCE64
- .4byte gUnknown_83FCE78
- .4byte gUnknown_83FCE90
- .4byte gUnknown_83FCEA8
- .4byte gUnknown_83FCEBA
- .4byte gUnknown_83FCECE
- .4byte gUnknown_83FCEE3
- .4byte gUnknown_83FCEFB
- .4byte gUnknown_83FCF14
- .4byte gUnknown_83FCF2C
- .4byte gUnknown_83FCF40
- .4byte gUnknown_83FCF54
- .4byte gUnknown_83FCF6C
- .4byte gUnknown_83FCF7E
- .4byte gUnknown_83FCFA0
- .4byte gUnknown_83FCFC2
- .4byte gUnknown_83FCFE4
- .4byte gUnknown_83FD006
- .4byte gUnknown_83FD022
- .4byte gUnknown_83FD048
- .4byte gUnknown_83FD068
- .4byte gUnknown_83FD077
- .4byte gUnknown_83FD0A7
- .4byte gUnknown_83FD0CA
- .4byte gUnknown_83FD650
- .4byte gUnknown_83FD65C
- .4byte gUnknown_83FD697
- .4byte gUnknown_83FD6B5
- .4byte gUnknown_83FD6C7
- .4byte gUnknown_83FD700
- .4byte gUnknown_83FD718
- .4byte gUnknown_83FD738
- .4byte gUnknown_83FD757
- .4byte gUnknown_83FD76D
- .4byte gUnknown_83FD7A2
- .4byte gUnknown_83FD7C0
- .4byte gUnknown_83FD7E0
- .4byte gUnknown_83FD804
- .4byte gUnknown_83FD82B
- .4byte gUnknown_83FD850
- .4byte gUnknown_83FD85F
- .4byte gUnknown_83FB525
- .4byte gUnknown_83FD0F1
- .4byte gUnknown_83FD111
- .4byte gUnknown_83FD124
- .4byte gUnknown_83FD135
- .4byte gUnknown_83FD14B
- .4byte gUnknown_83FD15A
- .4byte gUnknown_83FD16A
- .4byte gUnknown_83FD186
- .4byte gUnknown_83FD1DF
- .4byte gUnknown_83FD1FA
- .4byte gUnknown_83FD218
- .4byte gUnknown_83FD232
- .4byte gUnknown_83FD23F
- .4byte gUnknown_83FB218
- .4byte gUnknown_83FB218
- .4byte gUnknown_83FD24D
- .4byte gUnknown_83FD8B9
- .4byte gUnknown_83FD8D2
- .4byte gUnknown_83FD8E8
- .4byte gUnknown_83FD901
- .4byte gUnknown_83FD917
- .4byte gUnknown_83FD937
- .4byte gUnknown_83FD95C
- .4byte gUnknown_83FD999
- .4byte gUnknown_83FD9B2
- .4byte gUnknown_83FD9CC
- .4byte gUnknown_83FD9E9
- .4byte gUnknown_83FDA0B
- .4byte gUnknown_83FDA33
- .4byte gUnknown_83FDA4C
- .4byte gUnknown_83FC8D5
- .4byte gUnknown_83FC8ED
- .4byte gUnknown_83FC913
- .4byte gUnknown_83FC935
- .4byte gUnknown_83FC979
- .4byte gUnknown_83FC993
- .4byte gUnknown_83FC9AA
- .4byte gUnknown_83FC9C7
- .4byte gUnknown_83FC9E5
- .4byte gUnknown_83FCA03
- .4byte gUnknown_83FC554
- .4byte gUnknown_83FC576
- .4byte gUnknown_83FBAD2
- .4byte gUnknown_83FBAE5
- .4byte gUnknown_83FCC39
- .4byte gUnknown_83FC591
- .4byte gUnknown_83FD1C7
- .4byte gUnknown_83FC5A2
- .4byte gUnknown_83FC5CC
- .4byte gUnknown_83FC5E8
- .4byte gUnknown_83FCB75
- .4byte gUnknown_83FC5F6
- .4byte gUnknown_83FC79D
- .4byte gUnknown_83FBB2F
- .4byte gUnknown_83FB282
- .4byte gUnknown_83FB283
- .4byte gUnknown_83FC955
- .4byte gUnknown_83FB3AF
- .4byte gUnknown_83FDAB1
- .4byte gUnknown_83FCA13
- .4byte gUnknown_83FC208
- .4byte gUnknown_83FC60C
- .4byte gUnknown_83FB359
- .4byte gUnknown_83FCCA0
- .4byte gUnknown_83FCCBB
- .4byte gUnknown_83FC631
- .4byte gUnknown_83FCA49
- .4byte gUnknown_83FD97A
- .4byte gUnknown_83FD688
- .4byte gUnknown_83FD876
- .4byte gUnknown_83FB3D3
- .4byte gUnknown_83FCA71
- .4byte gUnknown_83FCA8E
- .4byte gUnknown_83FB67B
- .4byte gUnknown_83FCBC5
- .4byte gUnknown_83FC900
- .4byte gUnknown_83FBC62
- .4byte gUnknown_83FB997
- .4byte gUnknown_83FB95E
- .4byte gUnknown_83FC646
- .4byte gUnknown_83FCAAA
- .4byte gUnknown_83FCAD1
- .4byte gUnknown_83FB534
- .4byte gUnknown_83FC337
- .4byte gUnknown_83FC347
- .4byte gUnknown_83FC357
- .4byte gUnknown_83FC65A
- .4byte gUnknown_83FCAEF
- .4byte gUnknown_83FDD64
- .4byte gUnknown_83FDDEB
- .4byte gUnknown_83FB484
- .4byte gUnknown_83FB4BE
- .4byte Text_1A5CF1
- .4byte Text_1A5D31
- .4byte Text_1A5D6E
- .4byte Text_1A5DB1
- .4byte gUnknown_83FD671
- .4byte gUnknown_83FDA4D
- .4byte gUnknown_83FDA7A
- .4byte gUnknown_83FDA8C
- .4byte gUnknown_83FB21C
- .4byte gUnknown_83FB262
- .4byte gUnknown_83FB4F7
- .4byte gUnknown_83FCB0C
- .4byte gUnknown_83FCB26
- .4byte gUnknown_83FD322
- .4byte gUnknown_83FD34D
- .4byte gUnknown_83FB21F
- .4byte gUnknown_83FB232
- .4byte gUnknown_83FB235
- .4byte gUnknown_83FB248
-
-gMissStringIds:: @ 83FE514
- .2byte STRINGID_ATTACKMISSED
- .2byte STRINGID_PKMNPROTECTEDITSELF
- .2byte STRINGID_PKMNAVOIDEDATTACK
- .2byte STRINGID_AVOIDEDDAMAGE
- .2byte STRINGID_PKMNMAKESGROUNDMISS
-
-gNoEscapeStringIds::
- .2byte STRINGID_CANTESCAPE
- .2byte STRINGID_DONTLEAVEBIRCH
- .2byte STRINGID_PREVENTSESCAPE
- .2byte STRINGID_CANTESCAPE2
- .2byte STRINGID_ATTACKERCANTESCAPE
-
-gMoveWeatherChangeStringIds::
- .2byte STRINGID_STARTEDTORAIN
- .2byte STRINGID_DOWNPOURSTARTED
- .2byte STRINGID_BUTITFAILED
- .2byte STRINGID_SANDSTORMBREWED
- .2byte STRINGID_SUNLIGHTGOTBRIGHT
- .2byte STRINGID_STARTEDHAIL
-
-gSandStormHailContinuesStringIds::
- .2byte STRINGID_SANDSTORMRAGES
- .2byte STRINGID_HAILCONTINUES
-
-gSandStormHailDmgStringIds::
- .2byte STRINGID_PKMNBUFFETEDBYSANDSTORM
- .2byte STRINGID_PKMNPELTEDBYHAIL
-
-gSandStormHailEndStringIds::
- .2byte STRINGID_SANDSTORMSUBSIDED
- .2byte STRINGID_HAILSTOPPED
-
-gRainContinuesStringIds::
- .2byte STRINGID_RAINCONTINUES
- .2byte STRINGID_DOWNPOURCONTINUES
- .2byte STRINGID_RAINSTOPPED
-
-gProtectLikeUsedStringIds::
- .2byte STRINGID_PKMNPROTECTEDITSELF2
- .2byte STRINGID_PKMNBRACEDITSELF
- .2byte STRINGID_BUTITFAILED
-
-gReflectLightScreenSafeguardStringIds::
- .2byte STRINGID_BUTITFAILED
- .2byte STRINGID_PKMNRAISEDDEF
- .2byte STRINGID_PKMNRAISEDDEFALITTLE
- .2byte STRINGID_PKMNRAISEDSPDEF
- .2byte STRINGID_PKMNRAISEDSPDEFALITTLE
- .2byte STRINGID_PKMNCOVEREDBYVEIL
-
-gLeechSeedStringIds::
- .2byte STRINGID_PKMNSEEDED
- .2byte STRINGID_PKMNEVADEDATTACK
- .2byte STRINGID_ITDOESNTAFFECT
- .2byte STRINGID_PKMNSAPPEDBYLEECHSEED
- .2byte STRINGID_ITSUCKEDLIQUIDOOZE
-
-gRestUsedStringIds::
- .2byte STRINGID_PKMNWENTTOSLEEP
- .2byte STRINGID_PKMNSLEPTHEALTHY
-
-gUproarOverTurnStringIds::
- .2byte STRINGID_PKMNMAKINGUPROAR
- .2byte STRINGID_PKMNCALMEDDOWN
-
-gStockpileUsedStringIds::
- .2byte STRINGID_PKMNSTOCKPILED
- .2byte STRINGID_PKMNCANTSTOCKPILE
-
-gWokeUpStringIds::
- .2byte STRINGID_PKMNWOKEUP
- .2byte STRINGID_PKMNWOKEUPINUPROAR
-
-gSwallowFailStringIds::
- .2byte STRINGID_FAILEDTOSWALLOW
- .2byte STRINGID_PKMNHPFULL
-
-gUproarAwakeStringIds::
- .2byte STRINGID_PKMNCANTSLEEPINUPROAR2
- .2byte STRINGID_UPROARKEPTPKMNAWAKE
- .2byte STRINGID_PKMNSTAYEDAWAKEUSING
-
-gStatUpStringIds::
- .2byte STRINGID_PKMNSSTATCHANGED
- .2byte STRINGID_PKMNSSTATCHANGED2
- .2byte STRINGID_STATSWONTINCREASE
- .2byte STRINGID_EMPTYSTRING3
- .2byte STRINGID_USINGXTHEYOFZN
- .2byte STRINGID_PKMNUSEDXTOGETPUMPED
-
-gStatDownStringIds::
- .2byte STRINGID_PKMNSSTATCHANGED3
- .2byte STRINGID_PKMNSSTATCHANGED4
- .2byte STRINGID_STATSWONTDECREASE
- .2byte STRINGID_EMPTYSTRING3
-
-gFirstTurnOfTwoStringIds::
- .2byte STRINGID_PKMNWHIPPEDWHIRLWIND
- .2byte STRINGID_PKMNTOOKSUNLIGHT
- .2byte STRINGID_PKMNLOWEREDHEAD
- .2byte STRINGID_PKMNISGLOWING
- .2byte STRINGID_PKMNFLEWHIGH
- .2byte STRINGID_PKMNDUGHOLE
- .2byte STRINGID_PKMNHIDUNDERWATER
- .2byte STRINGID_PKMNSPRANGUP
-
-gWrappedStringIds::
- .2byte STRINGID_PKMNSQUEEZEDBYBIND
- .2byte STRINGID_PKMNWRAPPEDBY
- .2byte STRINGID_PKMNTRAPPEDINVORTEX
- .2byte STRINGID_PKMNCLAMPED
- .2byte STRINGID_PKMNTRAPPEDINVORTEX
- .2byte STRINGID_PKMNTRAPPEDBYSANDTOMB
-
-gMistUsedStringIds::
- .2byte STRINGID_PKMNSHROUDEDINMIST
- .2byte STRINGID_BUTITFAILED
-
-gFocusEnergyUsedStringIds::
- .2byte STRINGID_PKMNGETTINGPUMPED
- .2byte STRINGID_BUTITFAILED
-
-gTransformUsedStringIds::
- .2byte STRINGID_PKMNTRANSFORMEDINTO
- .2byte STRINGID_BUTITFAILED
-
-gSubsituteUsedStringIds::
- .2byte STRINGID_PKMNMADESUBSTITUTE
- .2byte STRINGID_TOOWEAKFORSUBSTITUTE
-
-gGotPoisonedStringIds::
- .2byte STRINGID_PKMNWASPOISONED
- .2byte STRINGID_PKMNPOISONEDBY
-
-gGotParalyzedStringIds::
- .2byte STRINGID_PKMNWASPARALYZED
- .2byte STRINGID_PKMNWASPARALYZEDBY
-
-gFellAsleepStringIds::
- .2byte STRINGID_PKMNFELLASLEEP
- .2byte STRINGID_PKMNMADESLEEP
-
-gGotBurnedStringIds::
- .2byte STRINGID_PKMNWASBURNED
- .2byte STRINGID_PKMNBURNEDBY
-
-gGotFrozenStringIds::
- .2byte STRINGID_PKMNWASFROZEN
- .2byte STRINGID_PKMNFROZENBY
-
-gGotDefrostedStringIds::
- .2byte STRINGID_PKMNWASDEFROSTED2
- .2byte STRINGID_PKMNWASDEFROSTEDBY
-
-gKOFailedStringIds::
- .2byte STRINGID_ATTACKMISSED
- .2byte STRINGID_PKMNUNAFFECTED
-
-gAttractUsedStringIds::
- .2byte STRINGID_PKMNFELLINLOVE
- .2byte STRINGID_PKMNSXINFATUATEDY
-
-gLeechSeedDrainStringIds::
- .2byte STRINGID_PKMNENERGYDRAINED
- .2byte STRINGID_ITSUCKEDLIQUIDOOZE
-
-gSportsUsedStringIds::
- .2byte STRINGID_ELECTRICITYWEAKENED
- .2byte STRINGID_FIREWEAKENED
-
-gPartyStatusHealStringIds::
- .2byte STRINGID_BELLCHIMED
- .2byte STRINGID_BELLCHIMED
- .2byte STRINGID_BELLCHIMED
- .2byte STRINGID_BELLCHIMED
- .2byte STRINGID_SOOTHINGAROMA
-
-gFutureMoveUsedStringIds::
- .2byte STRINGID_PKMNFORESAWATTACK
- .2byte STRINGID_PKMNCHOSEXASDESTINY
-
-gBallEscapeStringIds::
- .2byte STRINGID_PKMNBROKEFREE
- .2byte STRINGID_ITAPPEAREDCAUGHT
- .2byte STRINGID_AARGHALMOSTHADIT
- .2byte STRINGID_SHOOTSOCLOSE
-
-gWeatherContinuesStringIds::
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_SANDSTORMISRAGING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_SUNLIGHTSTRONG
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
- .2byte STRINGID_ITISRAINING
-
-gInobedientStringIds::
- .2byte STRINGID_PKMNLOAFING
- .2byte STRINGID_PKMNWONTOBEY
- .2byte STRINGID_PKMNTURNEDAWAY
- .2byte STRINGID_PKMNPRETENDNOTNOTICE
-
-gSafariPokeblockResultStringIds::
- .2byte STRINGID_PKMNWATCHINGCAREFULLY
- .2byte STRINGID_PKMNANGRY
- .2byte STRINGID_PKMNEATING
-
-gTrainerItemCuredStatusStringIds::
- .2byte STRINGID_PKMNSITEMSNAPPEDOUT
- .2byte STRINGID_PKMNSITEMCUREDPARALYSIS
- .2byte STRINGID_PKMNSITEMDEFROSTEDIT
- .2byte STRINGID_PKMNSITEMHEALEDBURN
- .2byte STRINGID_PKMNSITEMCUREDPOISON
- .2byte STRINGID_PKMNSITEMWOKEIT
-
-gBerryEffectStringIds::
- .2byte STRINGID_PKMNSITEMCUREDPROBLEM
- .2byte STRINGID_PKMNSITEMNORMALIZEDSTATUS
-
-gBRNPreventionStringIds::
- .2byte STRINGID_PKMNSXPREVENTSBURNS
- .2byte STRINGID_PKMNSXPREVENTSYSZ
- .2byte STRINGID_PKMNSXHADNOEFFECTONY
-
-gPRLZPreventionStringIds::
- .2byte STRINGID_PKMNPREVENTSPARALYSISWITH
- .2byte STRINGID_PKMNSXPREVENTSYSZ
- .2byte STRINGID_PKMNSXHADNOEFFECTONY
-
-gPSNPreventionStringIds::
- .2byte STRINGID_PKMNPREVENTSPOISONINGWITH
- .2byte STRINGID_PKMNSXPREVENTSYSZ
- .2byte STRINGID_PKMNSXHADNOEFFECTONY
-
-gItemSwapStringIds::
- .2byte STRINGID_PKMNOBTAINEDX
- .2byte STRINGID_PKMNOBTAINEDX2
- .2byte STRINGID_PKMNOBTAINEDXYOBTAINEDZ
-
-gFlashFireStringIds::
- .2byte STRINGID_PKMNRAISEDFIREPOWERWITH
- .2byte STRINGID_PKMNSXMADEYINEFFECTIVE
-
-gCaughtMonStringIds::
- .2byte STRINGID_PKMNTRANSFERREDSOMEONESPC
- .2byte STRINGID_PKMNTRANSFERREDBILLSPC
- .2byte STRINGID_PKMNBOXSOMEONESPCFULL
- .2byte STRINGID_PKMNBOXBILLSPCFULL
-
-gDoubleBattleRecallStrings::
- .2byte STRINGID_TRAINER1MON1COMEBACK
- .2byte STRINGID_TRAINER1MON1COMEBACK
- .2byte STRINGID_TRAINER1MON2COMEBACK
- .2byte STRINGID_TRAINER1MON1AND2COMEBACK
-
-gTrappingMoves:: @ 83FE664
- .2byte MOVE_BIND
- .2byte MOVE_WRAP
- .2byte MOVE_FIRE_SPIN
- .2byte MOVE_CLAMP
- .2byte MOVE_WHIRLPOOL
- .2byte MOVE_SAND_TOMB
- .2byte 0xFFFF
-
-gText_PkmnIsEvolving:: @ 83FE672
- .string "What?\n"
- .string "{STR_VAR_1} is evolving!$"
-
-gText_CongratsPkmnEvolved:: @ 83FE688
- .string "Congratulations! Your {STR_VAR_1}\n"
- .string "evolved into {STR_VAR_2}!{WAIT_SE}\p"
- .string "$"
-
-gText_PkmnStoppedEvolving:: @ 83FE6B5
- .string "Huh? {STR_VAR_1}\n"
- .string "stopped evolving!\p"
- .string "$"
-
-gText_EllipsisQuestionMark:: @ 83FE6D0
- .string "……?\p"
- .string "$"
-
-gText_WhatWillPkmnDo:: @ 83FE6D5
- .string "What will\n"
- .string "{B_ACTIVE_NAME_WITH_PREFIX} do?$"
-
-gUnknown_83FE6E6:: @ 83FE6E6
- .string "What will {B_PLAYER_NAME}\n"
- .string "throw?$"
-
-gUnknown_83FE6FA:: @ 83FE6FA
- .string "What will the\n"
- .string "old man do?$"
-
-gText_LinkStandby:: @ 83FE714
- .string "{PAUSE 16}Link standby…$"
-
-gUnknown_83FE725:: @ 83FE725
- .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}FIGHT{CLEAR_TO 56}BAG\n"
- .string "POKéMON{CLEAR_TO 56}RUN$"
-
-gUnknown_83FE747:: @ 83FE747
- .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}BALL{CLEAR_TO 56}BAIT\n"
- .string "ROCK{CLEAR_TO 56}RUN$"
-
-gText_MoveInterfacePP:: @ 83FE766
- .string "PP $"
-
-gText_MoveInterfaceType:: @ 83FE76A
- .string "TYPE/$"
-
-gUnknown_83FE770:: @ 83FE770
- .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}$"
-
-gUnknown_83FE779:: @ 83FE779
- .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}どの わざを\n"
- .string "わすれさせたい?$"
-
-gText_BattleYesNoChoice:: @ 83FE791
- .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}Yes\n"
- .string "No$"
-
-gText_BattleSwitchWhich:: @ 83FE7A0
- .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}Switch\n"
- .string "which?$"
-
-gUnknown_83FE7B6:: @ 83FE7B6
- .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}$"
-
-gUnknown_83FE7BF:: @ 83FE7BF
- .string "{RIGHT_ARROW_2}$"
-
-gUnknown_83FE7C2:: @ 83FE7C2
- .string "{PLUS}$"
-
-gUnknown_83FE7C5:: @ 83FE7C5
- .string "-$"
-
-gUnknown_83FE7C7:: @ 83FE7C7
- .string "{SIZE 0}Max{SIZE 2} HP$"
-
-gUnknown_83FE7D4:: @ 83FE7D4
- .string "ATTACK $"
-
-gUnknown_83FE7DC:: @ 83FE7DC
- .string "DEFENSE$"
-
-gUnknown_83FE7E4:: @ 83FE7E4
- .string "SP. ATK$"
-
-gUnknown_83FE7EC:: @ 83FE7EC
- .string "SP. DEF$"
-
-gUnknown_83FE7F4:: @ 83FE7F4
- .4byte gUnknown_83FE7C7
- .4byte gUnknown_83FE7E4
- .4byte gUnknown_83FE7D4
- .4byte gUnknown_83FE7EC
- .4byte gUnknown_83FE7DC
- .4byte gUnknown_83FD5A2
-
-gUnknown_83FE80C::
- .string "{HIGHLIGHT 2}SAFARI BALLS$"
-
-gText_HighlightRed_Left:: @ 83FE81C
- .string "{HIGHLIGHT 2}Left: $"
-
-gText_HighlightRed:: @ 83FE826
- .string "{HIGHLIGHT 2}$"
-
-gText_Sleep:: @ 83FE82A
- .string "sleep$"
-
-gText_Poison:: @ 83FE830
- .string "poison$"
-
-gText_Burn:: @ 83FE837
- .string "burn$"
-
-gText_Paralysis:: @ 83FE83C
- .string "paralysis$"
-
-gText_Ice:: @ 83FE846
- .string "ice$"
-
-gText_Confusion:: @ 83FE84A
- .string "confusion$"
-
-gText_Love:: @ 83FE854
- .string "love$"
-
-gUnknown_83FE859:: @ 83FE859
- .string " $"
-
-gUnknown_83FE85C:: @ 83FE85C
- .string "\n"
- .string "$"
-
-gUnknown_83FE85E:: @ 83FE85E
- .string "\n"
- .string "$"
-
-gUnknown_83FE860:: @ 83FE860
- .string " is$"
-
-gUnknown_83FE864:: @ 83FE864
- .string " is$"
-
-gText_BadEgg:: @ 83FE868
- .string "Bad EGG$"
-
-gUnknown_83FE870:: @ 83FE870
- .string "ミツル$"
-
-gUnknown_83FE874:: @ 83FE874
- .string "{HIGHLIGHT 0}Win$"
-
-gUnknown_83FE87B:: @ 83FE87B
- .string "{HIGHLIGHT 0}Loss$"
-
-gUnknown_83FE883:: @ 83FE883
- .string "{HIGHLIGHT 0}Draw$"
-
-gUnknown_83FE88B:: @ 83FE88B
- .string " is$"
-
-gUnknown_83FE88F:: @ 83FE88F
- .string "'s$"
-
-gUnknown_83FE892:: @ 83FE892
- .string "a NORMAL move$"
-
-gUnknown_83FE8A0:: @ 83FE8A0
- .string "a FIGHTING move$"
-
-gUnknown_83FE8B0:: @ 83FE8B0
- .string "a FLYING move$"
-
-gUnknown_83FE8BE:: @ 83FE8BE
- .string "a POISON move$"
-
-gUnknown_83FE8CC:: @ 83FE8CC
- .string "a GROUND move$"
-
-gUnknown_83FE8DA:: @ 83FE8DA
- .string "a ROCK move$"
-
-gUnknown_83FE8E6:: @ 83FE8E6
- .string "a BUG move$"
-
-gUnknown_83FE8F1:: @ 83FE8F1
- .string "a GHOST move$"
-
-gUnknown_83FE8FE:: @ 83FE8FE
- .string "a STEEL move$"
-
-gUnknown_83FE90B:: @ 83FE90B
- .string "a ??? move$"
-
-gUnknown_83FE916:: @ 83FE916
- .string "a FIRE move$"
-
-gUnknown_83FE922:: @ 83FE922
- .string "a WATER move$"
-
-gUnknown_83FE92F:: @ 83FE92F
- .string "a GRASS move$"
-
-gUnknown_83FE93C:: @ 83FE93C
- .string "an ELECTRIC move$"
-
-gUnknown_83FE94D:: @ 83FE94D
- .string "a PSYCHIC move$"
-
-gUnknown_83FE95C:: @ 83FE95C
- .string "an ICE move$"
-
-gUnknown_83FE968:: @ 83FE968
- .string "a DRAGON move$"
-
-gUnknown_83FE976:: @ 83FE976
- .string "a DARK move$"
-
-gUnknown_83FE982:: @ 83FE982
- .string "TIME BOARD$"
-
-gUnknown_83FE98D:: @ 83FE98D
- .string "CLEAR TIME$"
-
-gUnknown_83FE998:: @ 83FE998
- .string "{STR_VAR_1}MIN. {STR_VAR_2}.{STR_VAR_3}SEC.$"
-
-gUnknown_83FE9A9:: @ 83FE9A9
- .string "1F$"
-
-gUnknown_83FE9AC:: @ 83FE9AC
- .string "2F$"
-
-gUnknown_83FE9AF:: @ 83FE9AF
- .string "3F$"
-
-gUnknown_83FE9B2:: @ 83FE9B2
- .string "4F$"
-
-gUnknown_83FE9B5:: @ 83FE9B5
- .string "5F$"
-
-gUnknown_83FE9B8:: @ 83FE9B8
- .string "6F$"
-
-gUnknown_83FE9BB:: @ 83FE9BB
- .string "7F$"
-
-gUnknown_83FE9BE:: @ 83FE9BE
- .string "8F$"
-
- .align 2
-gUnknown_83FE9C4:: @ 83FE9C4
- .4byte gOtherText_Single
- .4byte gOtherText_Double
- .4byte gOtherText_Knockout
- .4byte gOtherText_Mixed
-
-gUnknown_83FE9D4::
- .string "{PLAY_SE SE_NIGERU}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!$"
-
-gUnknown_83FE9E4:: @ 83FE9E4
- .string "Player lost against\n"
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!$"
-
-gUnknown_83FE9FF:: @ 83FE9FF
- .string "Player battled to a draw against\n"
- .string "{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!$"
-
- .align 2
-gUnknown_83FEA28:: @ 83FEA28
- .4byte gUnknown_83FE892
- .4byte gUnknown_83FE8A0
- .4byte gUnknown_83FE8B0
- .4byte gUnknown_83FE8BE
- .4byte gUnknown_83FE8CC
- .4byte gUnknown_83FE8DA
- .4byte gUnknown_83FE8E6
- .4byte gUnknown_83FE8F1
- .4byte gUnknown_83FE8FE
- .4byte gUnknown_83FE90B
- .4byte gUnknown_83FE916
- .4byte gUnknown_83FE922
- .4byte gUnknown_83FE92F
- .4byte gUnknown_83FE93C
- .4byte gUnknown_83FE94D
- .4byte gUnknown_83FE95C
- .4byte gUnknown_83FE968
- .4byte gUnknown_83FE976
-
- .align 1
-gUnknown_83FEA70:: @ 83FEA70
- .2byte MOVE_SWORDS_DANCE
- .2byte MOVE_STRENGTH
- .2byte MOVE_GROWTH
- .2byte MOVE_HARDEN
- .2byte MOVE_MINIMIZE
- .2byte MOVE_SMOKESCREEN
- .2byte MOVE_WITHDRAW
- .2byte MOVE_DEFENSE_CURL
- .2byte MOVE_EGG_BOMB
- .2byte MOVE_SMOG
- .2byte MOVE_BONE_CLUB
- .2byte MOVE_FLASH
- .2byte MOVE_SPLASH
- .2byte MOVE_ACID_ARMOR
- .2byte MOVE_BONEMERANG
- .2byte MOVE_REST
- .2byte MOVE_SHARPEN
- .2byte MOVE_SUBSTITUTE
- .2byte MOVE_MIND_READER
- .2byte MOVE_SNORE
- .2byte MOVE_PROTECT
- .2byte MOVE_SPIKES
- .2byte MOVE_ENDURE
- .2byte MOVE_ROLLOUT
- .2byte MOVE_SWAGGER
- .2byte MOVE_SLEEP_TALK
- .2byte MOVE_HIDDEN_POWER
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_EXTREME_SPEED
- .2byte MOVE_FOLLOW_ME
- .2byte MOVE_TRICK
- .2byte MOVE_ASSIST
- .2byte MOVE_INGRAIN
- .2byte MOVE_KNOCK_OFF
- .2byte MOVE_CAMOUFLAGE
- .2byte MOVE_ASTONISH
- .2byte MOVE_ODOR_SLEUTH
- .2byte MOVE_GRASS_WHISTLE
- .2byte MOVE_SHEER_COLD
- .2byte MOVE_MUDDY_WATER
- .2byte MOVE_IRON_DEFENSE
- .2byte MOVE_BOUNCE
- .2byte MOVE_NONE
-
- .2byte MOVE_TELEPORT
- .2byte MOVE_RECOVER
- .2byte MOVE_BIDE
- .2byte MOVE_AMNESIA
- .2byte MOVE_FLAIL
- .2byte MOVE_TAUNT
- .2byte MOVE_BULK_UP
- .2byte MOVE_NONE
-
- .2byte MOVE_MEDITATE
- .2byte MOVE_AGILITY
- .2byte MOVE_MIMIC
- .2byte MOVE_DOUBLE_TEAM
- .2byte MOVE_BARRAGE
- .2byte MOVE_TRANSFORM
- .2byte MOVE_STRUGGLE
- .2byte MOVE_SCARY_FACE
- .2byte MOVE_CHARGE
- .2byte MOVE_WISH
- .2byte MOVE_BRICK_BREAK
- .2byte MOVE_YAWN
- .2byte MOVE_FEATHER_DANCE
- .2byte MOVE_TEETER_DANCE
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_FAKE_TEARS
- .2byte MOVE_WATER_SPORT
- .2byte MOVE_CALM_MIND
- .2byte MOVE_NONE
-
- .2byte MOVE_POUND
- .2byte MOVE_SCRATCH
- .2byte MOVE_VICE_GRIP
- .2byte MOVE_WING_ATTACK
- .2byte MOVE_FLY
- .2byte MOVE_BIND
- .2byte MOVE_SLAM
- .2byte MOVE_HORN_ATTACK
- .2byte MOVE_WRAP
- .2byte MOVE_THRASH
- .2byte MOVE_TAIL_WHIP
- .2byte MOVE_LEER
- .2byte MOVE_BITE
- .2byte MOVE_GROWL
- .2byte MOVE_ROAR
- .2byte MOVE_SING
- .2byte MOVE_PECK
- .2byte MOVE_ABSORB
- .2byte MOVE_STRING_SHOT
- .2byte MOVE_EARTHQUAKE
- .2byte MOVE_FISSURE
- .2byte MOVE_DIG
- .2byte MOVE_TOXIC
- .2byte MOVE_SCREECH
- .2byte MOVE_METRONOME
- .2byte MOVE_LICK
- .2byte MOVE_CLAMP
- .2byte MOVE_CONSTRICT
- .2byte MOVE_POISON_GAS
- .2byte MOVE_BUBBLE
- .2byte MOVE_SLASH
- .2byte MOVE_SPIDER_WEB
- .2byte MOVE_NIGHTMARE
- .2byte MOVE_CURSE
- .2byte MOVE_FORESIGHT
- .2byte MOVE_CHARM
- .2byte MOVE_ATTRACT
- .2byte MOVE_ROCK_SMASH
- .2byte MOVE_UPROAR
- .2byte MOVE_SPIT_UP
- .2byte MOVE_SWALLOW
- .2byte MOVE_TORMENT
- .2byte MOVE_FLATTER
- .2byte MOVE_ROLE_PLAY
- .2byte MOVE_ENDEAVOR
- .2byte MOVE_TICKLE
- .2byte MOVE_COVET
- .2byte MOVE_NONE
-
-gUnknown_83FEB5C:: @ 83FEB5C
- .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-
- .align 2
-gUnknown_83FEB64:: @ 83FEB64
- .byte 0xff, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x0f, 0x06
- .align 2
- .byte 0xff, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x01, 0x0f, 0x06
- .align 2
- .byte 0xee, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x0e, 0x0b
- .align 2
- .byte 0xee, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x01, 0x0a, 0x02, 0x00, 0x02, 0x00, 0x0c, 0x0e, 0x0b
- .align 2
- .byte 0xee, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02
- .align 2
- .byte 0xee, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0xee, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0f
- .align 2
- .byte 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06
- .align 2
- .byte 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06
- .align 2
- .byte 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06
- .align 2
- .byte 0x11, 0x04, 0x00, 0x01, 0x00, 0x01, 0x01, 0x02, 0x01, 0x03
- .align 2
-
-gUnknown_83FEC90:: @ 83FEC90
- .byte 0x04, 0x05, 0x02, 0x02
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index b802723b7..2ac9f7f6d 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -3167,7 +3167,7 @@ BattleScript_RainContinuesOrEndsEnd::
end2
BattleScript_DamagingWeatherContinues::
- printfromtable gSandStormHailContinuesStringIds
+ printfromtable gSandstormHailContinuesStringIds
waitmessage 0x40
playanimation2 BS_ATTACKER, sB_ANIM_ARG1, NULL
setbyte gBattleCommunication, 0
@@ -3175,7 +3175,7 @@ BattleScript_DamagingWeatherLoop::
copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1
weatherdamage
jumpifword CMP_EQUAL, gBattleMoveDamage, NULL, BattleScript_DamagingWeatherContinuesEnd
- printfromtable gSandStormHailDmgStringIds
+ printfromtable gSandstormHailDmgStringIds
waitmessage 0x40
orword gHitMarker, HITMARKER_x20 | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 | HITMARKER_GRUDGE
effectivenesssound
@@ -3193,7 +3193,7 @@ BattleScript_WeatherDamageEndedBattle::
end2
BattleScript_SandStormHailEnds::
- printfromtable gSandStormHailEndStringIds
+ printfromtable gSandstormHailEndStringIds
waitmessage 0x40
end2
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/link_rfu.s b/data/link_rfu.s
index d16c35a22..877242271 100644
--- a/data/link_rfu.s
+++ b/data/link_rfu.s
@@ -7,82 +7,259 @@
.align 2
gUnknown_843F29C:: @ 843F29C
- .incbin "baserom.gba", 0x43F29C, 0x8
+ .2byte 0x143a, 0x1817, 0x100b, 0x200f
gUnknown_843F2A4:: @ 843F2A4
- .incbin "baserom.gba", 0x43F2A4, 0x8
+ .2byte 0x0209, 0x140b, 0x1030, 0x102a
gUnknown_843F2AC:: @ 843F2AC
- .incbin "baserom.gba", 0x43F2AC, 0xF0
+ .byte 0, 2, 2, 0
+ .4byte gUnknown_8418A2B
+ .4byte gUnknown_84186D1
+ .4byte gUnknown_84186EF
+ .4byte gUnknown_841880E
+ .4byte gUnknown_8418902
+ .byte 1, 2, 3, 1
+ .4byte gUnknown_8418A33
+ .4byte gUnknown_8418706
+ .4byte gUnknown_8418725
+ .4byte gUnknown_841881B
+ .4byte gUnknown_8418902
+ .byte 2, 2, 3, 1
+ .4byte gUnknown_8418A4A
+ .4byte gUnknown_8418706
+ .4byte gUnknown_8418725
+ .4byte gUnknown_841883E
+ .4byte gUnknown_8418902
+ .byte 3, 2, 3, 1
+ .4byte gUnknown_8418A61
+ .4byte gUnknown_8418706
+ .4byte gUnknown_8418725
+ .4byte gUnknown_841885F
+ .4byte gUnknown_8418902
+ .byte 4, 2, 5, 2
+ .4byte NULL
+ .4byte gUnknown_8418780
+ .4byte gUnknown_841879E
+ .4byte gUnknown_841888C
+ .4byte gUnknown_8418902
+ .byte 5, 2, 2, 0
+ .4byte NULL
+ .4byte gUnknown_8418780
+ .4byte gUnknown_841879E
+ .4byte NULL
+ .4byte NULL
+ .byte 6, 2, 3, 1
+ .4byte gUnknown_8418A77
+ .4byte gUnknown_84187B2
+ .4byte gUnknown_84187D1
+ .4byte gUnknown_84188AC
+ .4byte gUnknown_8418902
+ .byte 7, 2, 3, 1
+ .4byte gUnknown_8418AA1
+ .4byte gUnknown_8418745
+ .4byte gUnknown_8418763
+ .4byte gUnknown_8418881
+ .4byte gUnknown_8418902
+ .byte 9, 2, 1, 3
+ .4byte gUnknown_8418A87
+ .4byte gUnknown_84188B9
+ .4byte gUnknown_84188D6
+ .4byte gUnknown_84188F0
+ .4byte gUnknown_8418902
+ .byte 14, 2, 2, 0
+ .4byte gUnknown_8418AB2
+ .4byte gUnknown_84186D1
+ .4byte gUnknown_84187EE
+ .4byte gUnknown_8418881
+ .4byte gUnknown_8418902
-gUnknown_843F39C:: @ 843F39C
- .incbin "baserom.gba", 0x43F39C, 0x3D0
+gUnknown_843F39C:: @ 843F39C data8 4x7
+ .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a
-gUnknown_843F76C:: @ 843F76C
+gUnknown_843F3B8:: @ 843F3B8
+ .incbin "baserom.gba", 0x43F3B8, 0x20
+
+gUnknown_843F3D8:: @ 843F3D8
+ .incbin "baserom.gba", 0x43F3D8, 0x20
+
+gUnknown_843F3F8:: @ 843F3F8
+ .incbin "baserom.gba", 0x43F3F8, 0x20
+
+gUnknown_843F418:: @ 843F418
+ .incbin "baserom.gba", 0x43F418, 0x100
+
+gUnknown_843F518:: @ 843F518
+ .incbin "baserom.gba", 0x43F518, 0x100
+
+gUnknown_843F618:: @ 843F618
+ .incbin "baserom.gba", 0x43F618, 0x20
+
+gUnknown_843F638:: @ 843F638
+ .incbin "baserom.gba", 0x43F638, 0x134
+
+gUnknown_843F76C:: @ 843F76C gbapal
.incbin "baserom.gba", 0x43F76C, 0x20
-gUnknown_843F78C:: @ 843F78C
+gUnknown_843F78C:: @ 843F78C gbapal
.incbin "baserom.gba", 0x43F78C, 0x20
-gUnknown_843F7AC:: @ 843F7AC
+gUnknown_843F7AC:: @ 843F7AC 4bpp.lz
.incbin "baserom.gba", 0x43F7AC, 0xC8
-gUnknown_843F874:: @ 843F874
+gUnknown_843F874:: @ 843F874 gbapal
.incbin "baserom.gba", 0x43F874, 0x8
-gUnknown_843F87C:: @ 843F87C
+gUnknown_843F87C:: @ 843F87C gbapal
.incbin "baserom.gba", 0x43F87C, 0xC
-gUnknown_843F888:: @ 843F888
- .incbin "baserom.gba", 0x43F888, 0x18
+gUnknown_843F888:: @ 843F888 data8 6x4
+ .byte 0x03, 0x04, 0x18, 0x04, 0x01, 0x04, 0x1b, 0x04, 0x03, 0x00, 0x18, 0x0a, 0x06, 0x06, 0x12, 0x04, 0x10, 0x04, 0x09, 0x02, 0x0e, 0x04, 0x12, 0x04
-gUnknown_843F8A0:: @ 843F8A0
- .incbin "baserom.gba", 0x43F8A0, 0x10
+gUnknown_843F8A0:: @ 843F8A0 bg_template
+ .4byte 0x000001c0, 0x000011dd, 0x002021e2, 0x000031fb
-gUnknown_843F8B0:: @ 843F8B0
- .incbin "baserom.gba", 0x43F8B0, 0x20
+gUnknown_843F8B0:: @ 843F8B0 window_template
+ .align 2
+ .byte 0x01, 0x07, 0x00, 0x10, 0x02, 0x0a
+ .2byte 0x0010
+ @ {0x01, 0x07, 0x00, 0x10, 0x02, 0x0a, 0x0010}
+ .align 2
+ .byte 0x00, 0x04, 0x0f, 0x16, 0x04, 0x0f
+ .2byte 0x000a
+ @ {0x00, 0x04, 0x0f, 0x16, 0x04, 0x0f, 0x000a}
+ .align 2
+ .byte 0x02, 0x01, 0x00, 0x1c, 0x20, 0x03
+ .2byte 0x0000
+ @ {0x02, 0x01, 0x00, 0x1c, 0x20, 0x03, 0x0000}
+ .align 2
+ .byte 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
+ .2byte 0x0000
+ @ {0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000}
-gUnknown_843F8D0:: @ 843F8D0
- .incbin "baserom.gba", 0x43F8D0, 0x8
+gUnknown_843F8D0:: @ 843F8D0 window_template
+ .align 2
+ .byte 0x00, 0x16, 0x09, 0x05, 0x04, 0x0f
+ .2byte 0x0062
+ @ {0x00, 0x16, 0x09, 0x05, 0x04, 0x0f, 0x0062}
-gUnknown_843F8D8:: @ 843F8D8
- .incbin "baserom.gba", 0x43F8D8, 0x3
+gUnknown_843F8D8:: @ 843F8D8 text
+ .string "{UNDERSCORE}$"
-gUnknown_843F8DB:: @ 843F8DB
- .incbin "baserom.gba", 0x43F8DB, 0x5
+gUnknown_843F8DB:: @ 843F8DB text
+ .string "{CLEAR 17}$"
+ .align 2
gUnknown_843F8E0:: @ 843F8E0
.4byte gUnknown_847A8D8
.4byte gUnknown_847A8FA
.4byte gUnknown_847A913
.4byte gUnknown_847A934
-gUnknown_843F8F0:: @ 843F8F0
- .incbin "baserom.gba", 0x43F8F0, 0x20
+gUnknown_843F8F0:: @ 843F8F0 sprite_sheet
+ obj_tiles gUnknown_843F3F8, 0x0020, 0
+ obj_tiles gUnknown_843F418, 0x0100, 2
+ obj_tiles gUnknown_843F518, 0x0100, 3
+ obj_tiles NULL, 0x0000, 0
+
+gUnknown_843F910:: @ 843F910 sprite_palette
+ obj_pal gUnknown_843F3B8, 0
+ obj_pal gUnknown_843F3D8, 1
+ obj_pal gUnknown_8E99F24, 2
+ obj_pal gUnknown_843F618, 3
+ null_obj_pal
+
+gUnknown_843F938:: @ 843F938 sprite_sheet
+ obj_tiles gUnknown_843F638, 0x0800, 5
+ obj_tiles gUnknown_8E9BD28, 0x1000, 1
+ obj_tiles gUnknown_8E99F44, 0x0800, 6
+ obj_tiles gUnknown_8E9A168, 0x1000, 4
+
+gUnknown_843F958:: @ 843F958 data8
+ .byte 0x00, 0x0c, 0x18, 0x38, 0x44, 0x50, 0x5c, 0x00
+
+gUnknown_843F960::
+ .4byte 0x00000000, 0x00000c00
+
+gUnknown_843F968:: @ 843F968 sprite_template
+ spr_template 0, 0, gUnknown_843F960, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8101B20
+
+gUnknown_843F980::
+ .4byte 0xc0004000, 0x00000400
+
+gUnknown_843F988::
+ .incbin "baserom.gba", 0x43F988, 0x8
+
+gUnknown_843F990::
+ .incbin "baserom.gba", 0x43F990, 0x8
+
+gUnknown_843F998::
+ .incbin "baserom.gba", 0x43F998, 0x8
+
+gUnknown_843F9A0::
+ .incbin "baserom.gba", 0x43F9A0, 0x8
+
+gUnknown_843F9A8::
+ .4byte 0x843f988
+ .4byte 0x843f990
+ .4byte 0x843f998
+ .4byte 0x843f9a0
+
+gUnknown_843F9B8:: @ 843F9B8 sprite_template
+ spr_template 1, 1, gUnknown_843F980, gUnknown_843F9A8, NULL, gDummySpriteAffineAnimTable, sub_8101B20
+
+gUnknown_843F9D0::
+ .4byte 0xc0004000, 0x00000400
+
+gUnknown_843F9D8::
+ .incbin "baserom.gba", 0x43F9D8, 0x8
+
+gUnknown_843F9E0::
+ .incbin "baserom.gba", 0x43F9E0, 0xC
+
+gUnknown_843F9EC::
+ .incbin "baserom.gba", 0x43F9EC, 0xC
+
+gUnknown_843F9F8::
+ .incbin "baserom.gba", 0x43F9F8, 0xC
+
+gUnknown_843FA04::
+ .incbin "baserom.gba", 0x43FA04, 0x8
+
+gUnknown_843FA0C::
+ .4byte gUnknown_843F9D8
+ .4byte gUnknown_843F9E0
+ .4byte gUnknown_843F9EC
+ .4byte gUnknown_843F9F8
+ .4byte gUnknown_843FA04
+
+gUnknown_843FA20:: @ 843FA20 sprite_template
+ spr_template 4, 2, gUnknown_843F9D0, gUnknown_843FA0C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-gUnknown_843F910:: @ 843F910
- .incbin "baserom.gba", 0x43F910, 0x28
+gUnknown_843FA38::
+ .4byte 0xc0000000, 0x00000c00
-gUnknown_843F938:: @ 843F938
- .incbin "baserom.gba", 0x43F938, 0x20
+gUnknown_843FA40:: @ 843FA40 sprite_template
+ spr_template 6, 2, gUnknown_843FA38, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-gUnknown_843F958:: @ 843F958
- .incbin "baserom.gba", 0x43F958, 0x10
+gUnknown_843FA58::
+ .4byte 0x40004000, 0x00000400
-gUnknown_843F968:: @ 843F968
- .incbin "baserom.gba", 0x43F968, 0x50
+gUnknown_843FA60::
+ .4byte 0x40000000, 0x00000400
-gUnknown_843F9B8:: @ 843F9B8
- .incbin "baserom.gba", 0x43F9B8, 0x68
+gUnknown_843FA68::
+ .incbin "baserom.gba", 0x43FA68, 0x8
-gUnknown_843FA20:: @ 843FA20
- .incbin "baserom.gba", 0x43FA20, 0x20
+gUnknown_843FA70::
+ .incbin "baserom.gba", 0x43FA70, 0x8
-gUnknown_843FA40:: @ 843FA40
- .incbin "baserom.gba", 0x43FA40, 0x40
+gUnknown_843FA78::
+ .4byte gUnknown_843FA68
+ .4byte gUnknown_843FA70
-gUnknown_843FA80:: @ 843FA80
- .incbin "baserom.gba", 0x43FA80, 0x18
+gUnknown_843FA80:: @ 843FA80 sprite_template
+ spr_template 3, 2, gUnknown_843FA58, gUnknown_843FA78, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-gUnknown_843FA98:: @ 843FA98
- .incbin "baserom.gba", 0x43FA98, 0x18
+gUnknown_843FA98:: @ 843FA98 sprite_template
+ spr_template 2, 2, gUnknown_843FA60, gUnknown_843FA78, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
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/graphics/pokemon_special_anim/unk_8459868.pal b/graphics/pokemon_special_anim/unk_8459868.pal
new file mode 100644
index 000000000..9448351d8
--- /dev/null
+++ b/graphics/pokemon_special_anim/unk_8459868.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 255 255
+230 230 255
+213 213 255
+197 197 255
+180 180 255
+164 164 255
+148 148 255
+131 131 255
+115 115 255
+98 98 255
+82 82 255
+65 65 255
+49 49 255
+32 32 255
+16 16 255
diff --git a/graphics/pokemon_special_anim/unk_84598A4.pal b/graphics/pokemon_special_anim/unk_84598A4.pal
new file mode 100644
index 000000000..a13a09ed3
--- /dev/null
+++ b/graphics/pokemon_special_anim/unk_84598A4.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+98 90 8
+197 189 24
+246 246 0
+148 139 16
+246 238 32
+222 213 0
+213 197 0
+180 164 0
+49 41 0
+172 148 32
+189 164 49
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon_special_anim/unk_8459940.pal b/graphics/pokemon_special_anim/unk_8459940.pal
new file mode 100644
index 000000000..7354e267b
--- /dev/null
+++ b/graphics/pokemon_special_anim/unk_8459940.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+65 106 255
+255 255 255
+230 230 230
+213 213 213
+197 197 197
+180 180 180
+164 164 164
+148 148 148
+131 131 131
+115 115 115
+98 98 98
+82 82 82
+65 65 65
+49 49 49
+32 32 32
+16 16 16
diff --git a/include/battle.h b/include/battle.h
index 00f7dcea9..54aef5106 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -24,8 +24,7 @@
#define TRAINER_OPPONENT_3FE 0x3FE
#define TRAINER_OPPONENT_C00 0xC00
-#define TRAINER_OPPONENT_800 0x800
-#define STEVEN_PARTNER_ID 0xC03
+#define TRAINER_LINK_OPPONENT 0x800
#define SECRET_BASE_OPPONENT 0x400
#define B_ACTION_USE_MOVE 0
@@ -712,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_message.h b/include/battle_message.h
index 2bbfffa43..612b253cf 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -51,13 +51,9 @@
#define B_TXT_DEF_PREFIX2 0x2B
#define B_TXT_ATK_PREFIX3 0x2C
#define B_TXT_DEF_PREFIX3 0x2D
-#define B_TXT_TRAINER2_CLASS 0x2E
-#define B_TXT_TRAINER2_NAME 0x2F
-#define B_TXT_TRAINER2_LOSE_TEXT 0x30
-#define B_TXT_TRAINER2_WIN_TEXT 0x31
-#define B_TXT_PARTNER_CLASS 0x32
-#define B_TXT_PARTNER_NAME 0x33
-#define B_TXT_BUFF3 0x34
+#define B_TXT_TRAINER2_LOSE_TEXT 0x2E
+#define B_TXT_TRAINER2_WIN_TEXT 0x2F
+#define B_TXT_BUFF3 0x30
// for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3
diff --git a/include/battle_string_ids.h b/include/battle_string_ids.h
index 155e9f7bf..0eb6b63f4 100644
--- a/include/battle_string_ids.h
+++ b/include/battle_string_ids.h
@@ -387,6 +387,6 @@
#define STRINGID_TRAINER1MON2COMEBACK 384
#define STRINGID_TRAINER1MON1AND2COMEBACK 385
-#define BATTLESTRINGS_COUNT 386
+#define BATTLESTRINGS_COUNT 374
#endif // GUARD_BATTLE_STRING_IDS_H
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 9bb93f1c2..87f847aa4 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -25,11 +25,18 @@ struct BattleTowerPokemonTemplate
u8 nature;
};
+extern const u16 gBattleTowerBannedSpecies[];
+
u16 sub_8164FCC(u8, u8);
void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *);
void ValidateEReaderTrainer(void);
u8 GetBattleTowerTrainerFrontSpriteId(void);
u8 GetEreaderTrainerFrontSpriteId(void);
void CopyEReaderTrainerName5(u8 *dest);
+void sub_815DC40(u8 *dest, u8 opponentIdx);
+void sub_815DBF4(u8 *dest, u8 opponentIdx);
+void GetBattleTowerTrainerName(u8 *text);
+u8 GetEreaderTrainerClassId(void);
+u8 GetBattleTowerTrainerClassNameId(void);
#endif //GUARD_BATTLE_TOWER_H
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/constants/trainers.h b/include/constants/trainers.h
index 30e11c14f..f75c4bab8 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -170,155 +170,6 @@
#define F_TRAINER_FEMALE (1 << 7)
-#define TRAINER_PIC_AQUA_LEADER_ARCHIE 0
-#define TRAINER_PIC_AQUA_GRUNT_M 1
-#define TRAINER_PIC_AQUA_GRUNT_F 2
-#define TRAINER_PIC_RS_AROMA_LADY 3
-#define TRAINER_PIC_RS_RUIN_MANIAC 4
-#define TRAINER_PIC_INTERVIEWER 5
-#define TRAINER_PIC_RS_TUBER_F 6
-#define TRAINER_PIC_TUBER_M 7
-#define TRAINER_PIC_RS_COOLTRAINER_M 8
-#define TRAINER_PIC_RS_COOLTRAINER_F 9
-#define TRAINER_PIC_HEX_MANIAC 10
-#define TRAINER_PIC_RS_LADY 11
-#define TRAINER_PIC_RS_BEAUTY 12
-#define TRAINER_PIC_RICH_BOY 13
-#define TRAINER_PIC_RS_POKEMANIAC 14
-#define TRAINER_PIC_RS_SWIMMER_M 15
-#define TRAINER_PIC_RS_BLACK_BELT 16
-#define TRAINER_PIC_GUITARIST 17
-#define TRAINER_PIC_KINDLER 18
-#define TRAINER_PIC_RS_CAMPER 19
-#define TRAINER_PIC_BUG_MANIAC 20
-#define TRAINER_PIC_RS_PSYCHIC_M 21
-#define TRAINER_PIC_RS_PSYCHIC_F 22
-#define TRAINER_PIC_RS_GENTLEMAN 23
-#define TRAINER_PIC_ELITE_FOUR_SIDNEY 24
-#define TRAINER_PIC_ELITE_FOUR_PHOEBE 25
-#define TRAINER_PIC_LEADER_ROXANNE 26
-#define TRAINER_PIC_LEADER_BRAWLY 27
-#define TRAINER_PIC_LEADER_TATE_AND_LIZA 28
-#define TRAINER_PIC_SCHOOL_KID_M 29
-#define TRAINER_PIC_SCHOOL_KID_F 30
-#define TRAINER_PIC_SR_AND_JR 31
-#define TRAINER_PIC_POKEFAN_M 32
-#define TRAINER_PIC_POKEFAN_F 33
-#define TRAINER_PIC_EXPERT_M 34
-#define TRAINER_PIC_EXPERT_F 35
-#define TRAINER_PIC_RS_YOUNGSTER 36
-#define TRAINER_PIC_CHAMPION_STEVEN 37
-#define TRAINER_PIC_RS_FISHERMAN 38
-#define TRAINER_PIC_CYCLING_TRIATHLETE_M 39
-#define TRAINER_PIC_CYCLING_TRIATHLETE_F 40
-#define TRAINER_PIC_RUNNING_TRIATHLETE_M 41
-#define TRAINER_PIC_RUNNING_TRIATHLETE_F 42
-#define TRAINER_PIC_SWIMMING_TRIATHLETE_M 43
-#define TRAINER_PIC_SWIMMING_TRIATHLETE_F 44
-#define TRAINER_PIC_DRAGON_TAMER 45
-#define TRAINER_PIC_RS_BIRD_KEEPER 46
-#define TRAINER_PIC_NINJA_BOY 47
-#define TRAINER_PIC_BATTLE_GIRL 48
-#define TRAINER_PIC_PARASOL_LADY 49
-#define TRAINER_PIC_RS_SWIMMER_F 50
-#define TRAINER_PIC_RS_PICNICKER 51
-#define TRAINER_PIC_RS_TWINS 52
-#define TRAINER_PIC_RS_SAILOR 53
-#define TRAINER_PIC_COLLECTOR 54
-#define TRAINER_PIC_WALLY 55
-#define TRAINER_PIC_RS_BRENDAN_1 56
-#define TRAINER_PIC_RS_MAY_1 57
-#define TRAINER_PIC_POKEMON_BREEDER_M 58
-#define TRAINER_PIC_RS_POKEMON_BREEDER_F 59
-#define TRAINER_PIC_RS_POKEMON_RANGER_M 60
-#define TRAINER_PIC_RS_POKEMON_RANGER_F 61
-#define TRAINER_PIC_MAGMA_LEADER_MAXIE 62
-#define TRAINER_PIC_MAGMA_GRUNT_M 63
-#define TRAINER_PIC_MAGMA_GRUNT_F 64
-#define TRAINER_PIC_RS_LASS 65
-#define TRAINER_PIC_RS_BUG_CATCHER 66
-#define TRAINER_PIC_RS_HIKER 67
-#define TRAINER_PIC_RS_YOUNG_COUPLE 68
-#define TRAINER_PIC_OLD_COUPLE 69
-#define TRAINER_PIC_RS_SIS_AND_BRO 70
-#define TRAINER_PIC_AQUA_ADMIN_M 71
-#define TRAINER_PIC_AQUA_ADMIN_F 72
-#define TRAINER_PIC_MAGMA_ADMIN_M 73
-#define TRAINER_PIC_MAGMA_ADMIN_F 74
-#define TRAINER_PIC_LEADER_WATTSON 75
-#define TRAINER_PIC_LEADER_FLANNERY 76
-#define TRAINER_PIC_LEADER_NORMAN 77
-#define TRAINER_PIC_LEADER_WINONA 78
-#define TRAINER_PIC_LEADER_WALLACE 79
-#define TRAINER_PIC_ELITE_FOUR_GLACIA 80
-#define TRAINER_PIC_ELITE_FOUR_DRAKE 81
-#define TRAINER_PIC_YOUNGSTER 82
-#define TRAINER_PIC_BUG_CATCHER 83
-#define TRAINER_PIC_LASS 84
-#define TRAINER_PIC_SAILOR 85
-#define TRAINER_PIC_CAMPER 86
-#define TRAINER_PIC_PICNICKER 87
-#define TRAINER_PIC_POKEMANIAC 88
-#define TRAINER_PIC_SUPER_NERD 89
-#define TRAINER_PIC_HIKER 90
-#define TRAINER_PIC_BIKER 91
-#define TRAINER_PIC_BURGLAR 92
-#define TRAINER_PIC_ENGINEER 93
-#define TRAINER_PIC_FISHERMAN 94
-#define TRAINER_PIC_SWIMMER_M 95
-#define TRAINER_PIC_CUE_BALL 96
-#define TRAINER_PIC_GAMER 97
-#define TRAINER_PIC_BEAUTY 98
-#define TRAINER_PIC_SWIMMER_F 99
-#define TRAINER_PIC_PSYCHIC_M 100
-#define TRAINER_PIC_ROCKER 101
-#define TRAINER_PIC_JUGGLER 102
-#define TRAINER_PIC_TAMER 103
-#define TRAINER_PIC_BIRD_KEEPER 104
-#define TRAINER_PIC_BLACK_BELT 105
-#define TRAINER_PIC_RIVAL_1 106
-#define TRAINER_PIC_SCIENTIST 107
-#define TRAINER_PIC_LEADER_GIOVANNI 108
-#define TRAINER_PIC_ROCKET_GRUNT_M 109
-#define TRAINER_PIC_COOLTRAINER_M 110
-#define TRAINER_PIC_COOLTRAINER_F 111
-#define TRAINER_PIC_ELITE_FOUR_LORELEI 112
-#define TRAINER_PIC_ELITE_FOUR_BRUNO 113
-#define TRAINER_PIC_ELITE_FOUR_AGATHA 114
-#define TRAINER_PIC_ELITE_FOUR_LANCE 115
-#define TRAINER_PIC_LEADER_BROCK 116
-#define TRAINER_PIC_LEADER_MISTY 117
-#define TRAINER_PIC_LEADER_LT_SURGE 118
-#define TRAINER_PIC_LEADER_ERIKA 119
-#define TRAINER_PIC_LEADER_KOGA 120
-#define TRAINER_PIC_LEADER_BLAINE 121
-#define TRAINER_PIC_LEADER_SABRINA 122
-#define TRAINER_PIC_GENTLEMAN 123
-#define TRAINER_PIC_RIVAL_2 124
-#define TRAINER_PIC_CHAMPION_RIVAL 125
-#define TRAINER_PIC_CHANNELER 126
-#define TRAINER_PIC_TWINS 127
-#define TRAINER_PIC_COOL_COUPLE 128
-#define TRAINER_PIC_YOUNG_COUPLE 129
-#define TRAINER_PIC_CRUSH_KIN 130
-#define TRAINER_PIC_SIS_AND_BRO 131
-#define TRAINER_PIC_PROFESSOR_OAK 132
-#define TRAINER_PIC_RS_BRENDAN_2 133
-#define TRAINER_PIC_RS_MAY_2 134
-#define TRAINER_PIC_RED 135
-#define TRAINER_PIC_LEAF 136
-#define TRAINER_PIC_ROCKET_GRUNT_F 137
-#define TRAINER_PIC_PSYCHIC_F 138
-#define TRAINER_PIC_CRUSH_GIRL 139
-#define TRAINER_PIC_TUBER_F 140
-#define TRAINER_PIC_POKEMON_BREEDER_F 141
-#define TRAINER_PIC_POKEMON_RANGER_M 142
-#define TRAINER_PIC_POKEMON_RANGER_F 143
-#define TRAINER_PIC_AROMA_LADY 144
-#define TRAINER_PIC_RUIN_MANIAC 145
-#define TRAINER_PIC_LADY 146
-#define TRAINER_PIC_PAINTER 147
-
#define TRAINER_NONE 0
#define TRAINER_AQUA_LEADER_1 1
#define TRAINER_TEAM_AQUA_1 2
diff --git a/include/data.h b/include/data.h
index 9ea1f7c96..72e6b66fc 100644
--- a/include/data.h
+++ b/include/data.h
@@ -22,6 +22,8 @@ extern const u16 gUnknown_8251FEE[];
extern const u16 gUnknown_8252324[];
extern const u16 gUnknown_82539D4[];
+extern const u8 gTrainerClassNames[][13];
+
extern const struct MonCoords gMonFrontPicCoords[];
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
extern const struct MonCoords gMonBackPicCoords[];
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/event_scripts.h b/include/event_scripts.h
index e8fc40fa4..2ad1485c2 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -1188,4 +1188,10 @@ extern const u8 Text_1BCAF2[];
extern const u8 EventScript_RepelWoreOff[];
+// battle_message
+extern const u8 Text_1A5CF1[];
+extern const u8 Text_1A5D31[];
+extern const u8 Text_1A5D6E[];
+extern const u8 Text_1A5DB1[];
+
#endif //GUARD_EVENT_SCRIPTS_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 25d5b8d43..51287f400 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -7,7 +7,6 @@
gTasks[taskId].data[8] = (u32)func >> 16; \
gTasks[taskId].data[9] = (u32)func;
-extern u8 *gUnknown_203AAB0;
extern struct MapPosition gPlayerFacingPosition;
bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId);
@@ -16,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);
@@ -43,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 354339235..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[];
@@ -4239,4 +4249,7 @@ extern const u16 gUnknown_8E97DDC[];
extern const u32 gUnknown_8E97DFC[];
extern const u32 gUnknown_8E97EC4[];
+// battle_message
+extern const u16 gUnknown_8D2FBB4[];
+
#endif //GUARD_GRAPHICS_H
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 7750b271c..e55cb02f5 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -181,19 +181,19 @@ 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[];
// pokemon
-extern const u8 BattleText_Rose[];
-extern const u8 BattleText_UnknownString3[];
-extern const u8 BattleText_GetPumped[];
-extern const u8 BattleText_MistShroud[];
+extern const u8 gBattleText_Rose[];
+extern const u8 gBattleText_UnknownString3[];
+extern const u8 gBattleText_GetPumped[];
+extern const u8 gBattleText_MistShroud[];
extern const u8 gText_BadEgg[];
extern const u8 gText_PkmnsXPreventsSwitching[];
-extern u8 *gUnknown_83FD5D0[];
+extern const u8 *const gStatNamesTable[];
// diploma
extern const u8 gUnknown_841B60E[];
@@ -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/trainer_tower.h b/include/trainer_tower.h
index 810642a69..9c1ac0631 100644
--- a/include/trainer_tower.h
+++ b/include/trainer_tower.h
@@ -6,5 +6,7 @@ void InitTrainerTowerBattleStruct(void);
void FreeTrainerTowerBattleStruct(void);
u8 GetTrainerTowerTrainerFrontSpriteId(void);
void ResetTrainerTowerResults(void);
+void sub_815DA28(u8 *text);
+u8 sub_815DA10(void);
#endif //GUARD_TRAINER_TOWER_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 c23a7f105..cf7005555 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -195,7 +195,7 @@ SECTIONS {
src/fldeff_strength.o(.text);
src/battle_transition.o(.text);
src/battle_controller_link_partner.o(.text);
- asm/battle_message.o(.text);
+ src/battle_message.o(.text);
src/math_util.o(.text);
src/roulette_util.o(.text);
src/cable_car_util.o(.text);
@@ -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);
@@ -477,7 +477,7 @@ SECTIONS {
src/evolution_scene.o(.rodata);
src/battle_transition.o(.rodata);
src/battle_controller_link_partner.o(.rodata);
- data/battle_message.o(.rodata);
+ src/battle_message.o(.rodata);
src/save.o(.rodata);
data/field_effect_helpers.o(.rodata);
src/battle_controller_safari.o(.rodata);
@@ -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_message.c b/src/battle_message.c
new file mode 100644
index 000000000..396c4c7f0
--- /dev/null
+++ b/src/battle_message.c
@@ -0,0 +1,2515 @@
+#include "global.h"
+#include "battle_string_ids.h"
+#include "battle.h"
+#include "palette.h"
+#include "battle_anim.h"
+#include "string_util.h"
+#include "text.h"
+#include "window.h"
+#include "strings.h"
+#include "battle_message.h"
+#include "link.h"
+#include "event_scripts.h"
+#include "event_data.h"
+#include "item.h"
+#include "battle_tower.h"
+#include "trainer_tower.h"
+#include "battle_setup.h"
+#include "field_specials.h"
+#include "new_menu_helpers.h"
+#include "battle_controllers.h"
+#include "graphics.h"
+#include "constants/moves.h"
+#include "constants/items.h"
+#include "constants/trainer_classes.h"
+
+struct BattleWindowText
+{
+ u8 fillValue;
+ u8 fontId;
+ u8 x;
+ u8 y;
+ u8 letterSpacing;
+ u8 lineSpacing;
+ u8 speed;
+ u8 fgColor;
+ u8 bgColor;
+ u8 shadowColor;
+};
+
+static EWRAM_DATA u8 sBattlerAbilities[MAX_BATTLERS_COUNT] = {};
+static EWRAM_DATA struct BattleMsgData *sBattleMsgDataPtr = NULL;
+
+static void ChooseMoveUsedParticle(u8 *textPtr);
+static void ChooseTypeOfMoveUsedString(u8 *textPtr);
+static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst);
+
+const u8 gUnknown_83FB218[] = _("");
+const u8 gUnknown_83FB219[] = _("{B_TRAINER1_LOSE_TEXT}");
+const u8 gUnknown_83FB21C[] = _("{B_TRAINER2_CLASS}");
+const u8 gUnknown_83FB21F[] = _("{B_TRAINER1_NAME}: {B_OPPONENT_MON1_NAME}, come back!");
+const u8 gUnknown_83FB232[] = _("{B_TRAINER1_WIN_TEXT}");
+const u8 gUnknown_83FB235[] = _("{B_TRAINER1_NAME}: {B_OPPONENT_MON2_NAME}, come back!");
+const u8 gUnknown_83FB248[] = _("{B_TRAINER1_NAME}: {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME}, come back!");
+const u8 gUnknown_83FB262[] = _("{B_TRAINER2_NAME}");
+const u8 gUnknown_83FB265[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_TRAINER2_LOSE_TEXT} EXP. Points!\p");
+const u8 gUnknown_83FB282[] = _("");
+const u8 gUnknown_83FB283[] = _(" a boosted");
+const u8 gUnknown_83FB28E[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{WAIT_SE}\p");
+const u8 gUnknown_83FB2A4[] = _("{B_BUFF1} learned\n{B_BUFF2}!{WAIT_SE}\p");
+const u8 gUnknown_83FB2B6[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p");
+const u8 gUnknown_83FB2D1[] = _("But, {B_BUFF1} can't learn\nmore than four moves.\p");
+const u8 gUnknown_83FB2FC[] = _("Delete a move to make\nroom for {B_BUFF2}?");
+const u8 gUnknown_83FB31F[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p");
+const u8 gUnknown_83FB32E[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?");
+const u8 gUnknown_83FB343[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p");
+const u8 gUnknown_83FB359[] = _("Use next POKéMON?");
+const u8 gUnknown_83FB36B[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!");
+const u8 gUnknown_83FB37F[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!");
+const u8 gUnknown_83FB394[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!");
+const u8 gUnknown_83FB3AF[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!");
+const u8 gUnknown_83FB3D3[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!");
+const u8 gUnknown_83FB3EA[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX}…");
+const u8 gUnknown_83FB400[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p");
+const u8 gUnknown_83FB40D[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p");
+const u8 gUnknown_83FB41A[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p");
+const u8 gUnknown_83FB433[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p");
+const u8 gUnknown_83FB451[] = _("{B_PLAYER_NAME} panicked and lost ¥{B_BUFF1}…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
+const u8 gUnknown_83FB484[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\pPlayer lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}");
+const u8 gUnknown_83FB4BE[] = _("{B_PLAYER_NAME} paid ¥{B_BUFF1} as the prize\nmoney…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
+const u8 gUnknown_83FB4F7[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
+const u8 gUnknown_83FB508[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p");
+const u8 gUnknown_83FB525[] = _("Can't escape!\p");
+const u8 gUnknown_83FB534[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!");
+const u8 gUnknown_83FB545[] = _("Hit {B_BUFF1} time(s)!");
+const u8 gUnknown_83FB555[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!");
+const u8 gUnknown_83FB565[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!");
+const u8 gUnknown_83FB57C[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!");
+const u8 gUnknown_83FB592[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!");
+const u8 gUnknown_83FB5A8[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!");
+const u8 gUnknown_83FB5BC[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!");
+const u8 gUnknown_83FB5CD[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FB5E2[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!");
+const u8 gUnknown_83FB5F8[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned.");
+const u8 gUnknown_83FB610[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!");
+const u8 gUnknown_83FB626[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!");
+const u8 gUnknown_83FB641[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!");
+const u8 gUnknown_83FB650[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FB663[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!");
+const u8 gUnknown_83FB67B[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn.");
+const u8 gUnknown_83FB692[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!");
+const u8 gUnknown_83FB6A7[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!");
+const u8 gUnknown_83FB6BF[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!");
+const u8 gUnknown_83FB6D3[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!");
+const u8 gUnknown_83FB6E5[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!");
+const u8 gUnknown_83FB6F7[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!");
+const u8 gUnknown_83FB70F[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!");
+const u8 gUnknown_83FB73A[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!");
+const u8 gUnknown_83FB76A[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can't move!");
+const u8 gUnknown_83FB78A[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!");
+const u8 gUnknown_83FB7A3[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!");
+const u8 gUnknown_83FB7BF[] = _("{B_DEF_NAME_WITH_PREFIX}'s\ndream was eaten!");
+const u8 gUnknown_83FB7D5[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go higher!");
+const u8 gUnknown_83FB7EE[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go lower!");
+const u8 gUnknown_83FB806[] = _("Your team's {B_BUFF1}\nstopped working!");
+const u8 gUnknown_83FB826[] = _("The foe's {B_BUFF1}\nstopped working!");
+const u8 gUnknown_83FB844[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!");
+const u8 gUnknown_83FB854[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!");
+const u8 gUnknown_83FB871[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!");
+const u8 gUnknown_83FB885[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!");
+const u8 gUnknown_83FB89D[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!");
+const u8 gUnknown_83FB8AE[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FB8C5[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!");
+const u8 gUnknown_83FB8E0[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!");
+const u8 gUnknown_83FB8F3[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!");
+const u8 gUnknown_83FB914[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!");
+const u8 gUnknown_83FB921[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!");
+const u8 gUnknown_83FB935[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nHP is full!");
+const u8 gUnknown_83FB946[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised SP. DEF!");
+const u8 gUnknown_83FB95E[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!");
+const u8 gUnknown_83FB97F[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised DEFENSE!");
+const u8 gUnknown_83FB997[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!");
+const u8 gUnknown_83FB9B8[] = _("{B_ATK_PREFIX2}'s party is covered\nby a veil!");
+const u8 gUnknown_83FB9D9[] = _("{B_DEF_NAME_WITH_PREFIX}'s party is protected\nby SAFEGUARD!");
+const u8 gUnknown_83FB9FF[] = _("{B_ATK_PREFIX3}'s party is no longer\nprotected by SAFEGUARD!");
+const u8 gUnknown_83FBA2F[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!");
+const u8 gUnknown_83FBA41[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!");
+const u8 gUnknown_83FBA5E[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!");
+const u8 gUnknown_83FBA79[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!");
+const u8 gUnknown_83FBA8E[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!");
+const u8 gUnknown_83FBAA3[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!");
+const u8 gUnknown_83FBAB2[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!");
+const u8 gUnknown_83FBAC3[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!");
+const u8 gUnknown_83FBAD2[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!");
+const u8 gUnknown_83FBAE5[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!");
+const u8 gUnknown_83FBAF3[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}'s BIND!");
+const u8 gUnknown_83FBB11[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!");
+const u8 gUnknown_83FBB2F[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!");
+const u8 gUnknown_83FBB4C[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FBB62[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FBB71[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!");
+const u8 gUnknown_83FBB83[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!");
+const u8 gUnknown_83FBB99[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!");
+const u8 gBattleText_MistShroud[] = _("{B_ATK_PREFIX2} became\nshrouded in MIST!");
+const u8 gUnknown_83FBBD0[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!");
+const u8 gBattleText_GetPumped[] = _("{B_ATK_NAME_WITH_PREFIX} is getting\npumped!");
+const u8 gUnknown_83FBBFF[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!");
+const u8 gUnknown_83FBC16[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!");
+const u8 gUnknown_83FBC2B[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!");
+const u8 gUnknown_83FBC4C[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!");
+const u8 gUnknown_83FBC62[] = _("{B_ATK_PREFIX1}'s {B_BUFF1}\nwore off!");
+const u8 gUnknown_83FBC74[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!");
+const u8 gUnknown_83FBC83[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!");
+const u8 gUnknown_83FBC99[] = _("{B_ATK_NAME_WITH_PREFIX}'s health is\nsapped by LEECH SEED!");
+const u8 gUnknown_83FBCBE[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep.");
+const u8 gUnknown_83FBCD1[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!");
+const u8 gUnknown_83FBCDD[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s UPROAR\nkept it awake!");
+const u8 gUnknown_83FBCFC[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!");
+const u8 gUnknown_83FBD16[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!");
+const u8 gUnknown_83FBD2B[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!");
+const u8 gUnknown_83FBD43[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down.");
+const u8 gUnknown_83FBD53[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!");
+const u8 gUnknown_83FBD74[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!");
+const u8 gUnknown_83FBD86[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nSTOCKPILE any more!");
+const u8 gUnknown_83FBDA3[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!");
+const u8 gUnknown_83FBDC4[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!");
+const u8 gUnknown_83FBDE2[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!");
+const u8 gUnknown_83FBE00[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!");
+const u8 gUnknown_83FBE16[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!");
+const u8 gUnknown_83FBE2B[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!");
+const u8 gUnknown_83FBE4E[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p");
+const u8 gUnknown_83FBE61[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!");
+const u8 gUnknown_83FBE73[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!");
+const u8 gUnknown_83FBE8B[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!");
+const u8 gUnknown_83FBEA1[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!");
+const u8 gUnknown_83FBEBE[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p");
+const u8 gUnknown_83FBEE2[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nSUBSTITUTE faded!\p");
+const u8 gUnknown_83FBEFA[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!");
+const u8 gUnknown_83FBF0C[] = _("{B_DEF_NAME_WITH_PREFIX}'s RAGE\nis building!");
+const u8 gUnknown_83FBF23[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas disabled!");
+const u8 gUnknown_83FBF39[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!");
+const u8 gUnknown_83FBF51[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!");
+const u8 gUnknown_83FBF63[] = _("{B_ATK_NAME_WITH_PREFIX}'s ENCORE\nended!");
+const u8 gUnknown_83FBF76[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FBF89[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!");
+const u8 gUnknown_83FBF99[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!");
+const u8 gUnknown_83FBFBF[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!");
+const u8 gUnknown_83FBFD3[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} by {B_BUFF2}!");
+const u8 gUnknown_83FBFEA[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!");
+const u8 gUnknown_83FBFFC[] = _("{B_DEF_NAME_WITH_PREFIX} can't\nescape now!");
+const u8 gUnknown_83FC011[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!");
+const u8 gUnknown_83FC02B[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!");
+const u8 gUnknown_83FC048[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FC072[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!");
+const u8 gUnknown_83FC090[] = _("SPIKES were scattered all around\nthe opponent's side!");
+const u8 gUnknown_83FC0C6[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby SPIKES!");
+const u8 gUnknown_83FC0DC[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FC0EE[] = _("{B_ATK_NAME_WITH_PREFIX}'s PERISH count\nfell to {B_BUFF1}!");
+const u8 gUnknown_83FC10C[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!");
+const u8 gUnknown_83FC11E[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!");
+const u8 gUnknown_83FC132[] = _("MAGNITUDE {B_BUFF1}!");
+const u8 gUnknown_83FC140[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!");
+const u8 gUnknown_83FC168[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s stat changes!");
+const u8 gUnknown_83FC185[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!");
+const u8 gUnknown_83FC19D[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!");
+const u8 gUnknown_83FC1B1[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSPIKES!");
+const u8 gUnknown_83FC1C6[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!");
+const u8 gUnknown_83FC1DB[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!");
+const u8 gUnknown_83FC1F1[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!");
+const u8 gUnknown_83FC208[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!");
+const u8 gUnknown_83FC224[] = _("{B_BUFF1}'s attack!");
+const u8 gUnknown_83FC231[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!");
+const u8 gUnknown_83FC254[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!");
+const u8 gUnknown_83FC26D[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!");
+const u8 gUnknown_83FC28A[] = _("{B_ATK_NAME_WITH_PREFIX}'s status\nreturned to normal!");
+const u8 gUnknown_83FC2AA[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!");
+const u8 gUnknown_83FC2C7[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!");
+const u8 gUnknown_83FC2E3[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!");
+const u8 gUnknown_83FC2FA[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FC312[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!");
+const u8 gUnknown_83FC337[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.");
+const u8 gUnknown_83FC347[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
+const u8 gUnknown_83FC357[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
+const u8 gUnknown_83FC377[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!");
+const u8 gUnknown_83FC38A[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!");
+const u8 gUnknown_83FC39A[] = _("{B_BUFF1}'s WISH\ncame true!");
+const u8 gUnknown_83FC3AF[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!");
+const u8 gUnknown_83FC3C5[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!");
+const u8 gUnknown_83FC3EB[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!");
+const u8 gUnknown_83FC40E[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!");
+const u8 gUnknown_83FC421[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!");
+const u8 gUnknown_83FC439[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!");
+const u8 gUnknown_83FC461[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent's moveシsス!");
+const u8 gUnknown_83FC483[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!");
+const u8 gUnknown_83FC4AB[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost\nall its PP due to the GRUDGE!");
+const u8 gUnknown_83FC4D6[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!");
+const u8 gUnknown_83FC4F0[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!");
+const u8 gUnknown_83FC518[] = _("{B_ATK_NAME_WITH_PREFIX} waits for its foe\nto make a move!");
+const u8 gUnknown_83FC53D[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s move!");
+const u8 gUnknown_83FC554[] = _("Electricity's power was\nweakened!");
+const u8 gUnknown_83FC576[] = _("Fire's power was\nweakened!");
+const u8 gUnknown_83FC591[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!");
+const u8 gUnknown_83FC5A2[] = _("A soothing aroma wafted\nthrough the area!");
+const u8 gUnknown_83FC5CC[] = _("Items can't be used now.{PAUSE 64}");
+const u8 gUnknown_83FC5E8[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}");
+const u8 gUnknown_83FC5F6[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to hustle!");
+const u8 gUnknown_83FC60C[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn't move!");
+const u8 gUnknown_83FC631[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p");
+const u8 gUnknown_83FC646[] = _("The wall shattered!");
+const u8 gUnknown_83FC65A[] = _("But it had no effect!");
+const u8 gUnknown_83FC670[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p");
+const u8 gUnknown_83FC687[] = _("{B_ACTIVE_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nis disabled!\p");
+const u8 gUnknown_83FC69D[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the same\nmove in a row due to the TORMENT!\p");
+const u8 gUnknown_83FC6D6[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the TAUNT!\p");
+const u8 gUnknown_83FC6F8[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the\nsealed {B_CURRENT_MOVE}!\p");
+const u8 gUnknown_83FC715[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!");
+const u8 gUnknown_83FC72B[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!");
+const u8 gUnknown_83FC745[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!");
+const u8 gUnknown_83FC75D[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!");
+const u8 gUnknown_83FC780[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!");
+const u8 gUnknown_83FC79D[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!");
+const u8 gUnknown_83FC7B6[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!");
+const u8 gUnknown_83FC7D3[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents paralysis!");
+const u8 gUnknown_83FC7EF[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents romance!");
+const u8 gUnknown_83FC809[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents poisoning!");
+const u8 gUnknown_83FC825[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents confusion!");
+const u8 gUnknown_83FC841[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its FIRE power!");
+const u8 gUnknown_83FC860[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!");
+const u8 gUnknown_83FC87B[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s ATTACK!");
+const u8 gUnknown_83FC895[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!");
+const u8 gUnknown_83FC8B1[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FC8C2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}'s {B_BUFF2}!");
+const u8 gUnknown_83FC8D5[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents burns!");
+const u8 gUnknown_83FC8ED[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!");
+const u8 gUnknown_83FC900[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!");
+const u8 gUnknown_83FC913[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nrestored its HP a little!");
+const u8 gUnknown_83FC935[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!");
+const u8 gUnknown_83FC955[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nintensified the sun's rays!");
+const u8 gUnknown_83FC979[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!");
+const u8 gUnknown_83FC993[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FC9AA[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!");
+const u8 gUnknown_83FC9C7[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
+const u8 gUnknown_83FC9E5[] = _("It sucked up the\nLIQUID OOZE!");
+const u8 gUnknown_83FCA03[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!");
+const u8 gUnknown_83FCA13[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!");
+const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}'s {B_LAST_ABILITY}\nprevents switching!\p");
+const u8 gUnknown_83FCA49[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\l{B_BUFF1} from working!");
+const u8 gUnknown_83FCA71[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!");
+const u8 gUnknown_83FCA8E[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!");
+const u8 gUnknown_83FCAAA[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!");
+const u8 gUnknown_83FCAD1[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
+const u8 gUnknown_83FCAEF[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!");
+const u8 gUnknown_83FCB0C[] = _("{B_ATK_NAME_WITH_PREFIX} is too scared to move!");
+const u8 gUnknown_83FCB26[] = _("GHOST: Get out…… Get out……");
+const u8 gUnknown_83FCB41[] = _("sharply ");
+const u8 gBattleText_Rose[] = _("rose!");
+const u8 gUnknown_83FCB50[] = _("harshly ");
+const u8 gUnknown_83FCB59[] = _("fell!");
+const u8 gUnknown_83FCB5F[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}");
+const u8 gBattleText_UnknownString3[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}");
+const u8 gUnknown_83FCB75[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}");
+const u8 gUnknown_83FCB8F[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}");
+const u8 gUnknown_83FCB9A[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}");
+const u8 gUnknown_83FCBA5[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats won't\ngo any higher!");
+const u8 gUnknown_83FCBC5[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats won't\ngo any lower!");
+const u8 gUnknown_83FCBE4[] = _("A critical hit!");
+const u8 gUnknown_83FCBF4[] = _("It's a one-hit KO!");
+const u8 gUnknown_83FCC07[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_KON}Poof!\p");
+const u8 gUnknown_83FCC33[] = _("And…\p");
+const u8 gUnknown_83FCC39[] = _("HM moves can't be\nforgotten now.\p");
+const u8 gUnknown_83FCC5B[] = _("It's not very effective…");
+const u8 gUnknown_83FCC74[] = _("It's super effective!");
+static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_NIGERU}Got away safely!\p");
+const u8 gUnknown_83FCCA0[] = _("{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
+const u8 gUnknown_83FCCBB[] = _("{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
+const u8 gUnknown_83FCCD2[] = _("{PLAY_SE SE_NIGERU}Wild {B_BUFF1} fled!");
+static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_LINK_OPPONENT1_NAME}!");
+static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!");
+static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_LINK_OPPONENT1_NAME}!");
+static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!");
+static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME}!");
+static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!");
+const u8 gUnknown_83FCD92[] = _("{PLAY_SE SE_NIGERU}{B_LINK_OPPONENT1_NAME} fled!");
+static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_NIGERU}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!");
+const u8 gUnknown_83FCDB3[] = _("No! There's no running\nfrom a TRAINER battle!\p");
+const u8 gUnknown_83FCDE2[] = _("Can't escape!\p");
+const u8 gUnknown_83FCDF1[] = _("");
+const u8 gUnknown_83FCDF2[] = _("But nothing happened!");
+const u8 gUnknown_83FCE08[] = _("But it failed!");
+const u8 gUnknown_83FCE17[] = _("It hurt itself in its\nconfusion!");
+const u8 gUnknown_83FCE38[] = _("The MIRROR MOVE failed!");
+const u8 gUnknown_83FCE50[] = _("It started to rain!");
+const u8 gUnknown_83FCE64[] = _("A downpour started!");
+const u8 gUnknown_83FCE78[] = _("Rain continues to fall.");
+const u8 gUnknown_83FCE90[] = _("The downpour continues.");
+const u8 gUnknown_83FCEA8[] = _("The rain stopped.");
+const u8 gUnknown_83FCEBA[] = _("A sandstorm brewed!");
+const u8 gUnknown_83FCECE[] = _("The sandstorm rages.");
+const u8 gUnknown_83FCEE3[] = _("The sandstorm subsided.");
+const u8 gUnknown_83FCEFB[] = _("The sunlight got bright!");
+const u8 gUnknown_83FCF14[] = _("The sunlight is strong.");
+const u8 gUnknown_83FCF2C[] = _("The sunlight faded.");
+const u8 gUnknown_83FCF40[] = _("It started to hail!");
+const u8 gUnknown_83FCF54[] = _("Hail continues to fall.");
+const u8 gUnknown_83FCF6C[] = _("The hail stopped.");
+const u8 gUnknown_83FCF7E[] = _("But it failed to SPIT UP\na thing!");
+const u8 gUnknown_83FCFA0[] = _("But it failed to SWALLOW\na thing!");
+const u8 gUnknown_83FCFC2[] = _("The wind turned into a\nHEAT WAVE!");
+const u8 gUnknown_83FCFE4[] = _("All stat changes were\neliminated!");
+const u8 gUnknown_83FD006[] = _("Coins scattered everywhere!");
+const u8 gUnknown_83FD022[] = _("It was too weak to make\na SUBSTITUTE!");
+const u8 gUnknown_83FD048[] = _("The battlers shared\ntheir pain!");
+const u8 gUnknown_83FD068[] = _("A bell chimed!");
+const u8 gUnknown_83FD077[] = _("All affected POKéMON will\nfaint in three turns!");
+const u8 gUnknown_83FD0A7[] = _("There's no PP left for\nthis move!\p");
+const u8 gUnknown_83FD0CA[] = _("But there was no PP left\nfor the move!");
+const u8 gUnknown_83FD0F1[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!");
+const u8 gUnknown_83FD111[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!");
+const u8 gUnknown_83FD124[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!");
+const u8 gUnknown_83FD135[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!");
+const u8 gUnknown_83FD14B[] = _("{B_ATK_NAME_WITH_PREFIX} won't\nobey!");
+const u8 gUnknown_83FD15A[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!");
+const u8 gUnknown_83FD16A[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!");
+const u8 gUnknown_83FD186[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?");
+const u8 gUnknown_83FD1B8[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!");
+static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p");
+const u8 gUnknown_83FD1DF[] = _("{B_PLAYER_NAME} threw a ROCK\nat the {B_OPPONENT_MON1_NAME}!");
+const u8 gUnknown_83FD1FA[] = _("{B_PLAYER_NAME} threw some BAIT\nat the {B_OPPONENT_MON1_NAME}!");
+const u8 gUnknown_83FD218[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!");
+const u8 gUnknown_83FD232[] = _("{B_OPPONENT_MON1_NAME} is angry!");
+const u8 gUnknown_83FD23F[] = _("{B_OPPONENT_MON1_NAME} is eating!");
+const u8 gUnknown_83FD24D[] = _("{PLAY_SE SE_PINPON}ANNOUNCER: You're out of\nSAFARI BALLS! Game over!\p");
+static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
+static const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
+static const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}");
+static const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p");
+const u8 gUnknown_83FD2D9[] = _("The GHOST appeared!\pDarn!\nThe GHOST can't be ID'd!\p");
+const u8 gUnknown_83FD30D[] = _("The GHOST appeared!\p");
+const u8 gUnknown_83FD322[] = _("SILPH SCOPE unveiled the GHOST's\nidentity!");
+const u8 gUnknown_83FD34D[] = _("The GHOST was MAROWAK!\p\n");
+static const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p");
+static const u8 sText_LinkTrainerWantsToBattle[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!");
+static const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!");
+static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!{PAUSE 60}");
+static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!{PAUSE 60}");
+static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!");
+static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME}!");
+static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!");
+static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_LINK_OPPONENT2_NAME} sent out {B_LINK_OPPONENT_MON2_NAME}!");
+static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_BUFF1}!");
+static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} sent out\n{B_BUFF1}!");
+static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!");
+static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!");
+static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!");
+static const u8 sText_DoItPkmn[] = _("Do it! {B_BUFF1}!");
+static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!");
+static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your foe's weak!\nGet 'em, {B_BUFF1}!");
+static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!");
+static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!");
+static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!");
+static const u8 sText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!");
+const u8 sText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!");
+static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!");
+static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew\n{B_BUFF1}!");
+static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew\n{B_BUFF1}!");
+static const u8 sText_WildPkmnPrefix[] = _("Wild ");
+static const u8 sText_FoePkmnPrefix[] = _("Foe ");
+static const u8 sText_FoePkmnPrefix2[] = _("Foe");
+static const u8 sText_AllyPkmnPrefix[] = _("Ally");
+static const u8 sText_FoePkmnPrefix3[] = _("Foe");
+static const u8 sText_AllyPkmnPrefix2[] = _("Ally");
+static const u8 sText_FoePkmnPrefix4[] = _("Foe");
+static const u8 sText_AllyPkmnPrefix3[] = _("Ally");
+static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}");
+static const u8 sText_ExclamationMark[] = _("!");
+static const u8 sText_ExclamationMark2[] = _("!");
+static const u8 sText_ExclamationMark3[] = _("!");
+static const u8 sText_ExclamationMark4[] = _("!");
+static const u8 sText_ExclamationMark5[] = _("!");
+
+static const u8 sText_HP2[] = _("HP");
+static const u8 sText_Attack2[] = _("ATTACK");
+static const u8 sText_Defense2[] = _("DEFENSE");
+static const u8 sText_Speed[] = _("SPEED");
+static const u8 sText_SpAtk2[] = _("SP. ATK");
+static const u8 sText_SpDef2[] = _("SP. DEF");
+static const u8 sText_Accuracy[] = _("accuracy");
+static const u8 sText_Evasiveness[] = _("evasiveness");
+
+const u8 *const gStatNamesTable[] = {
+ sText_HP2,
+ sText_Attack2,
+ sText_Defense2,
+ sText_Speed,
+ sText_SpAtk2,
+ sText_SpDef2,
+ sText_Accuracy,
+ sText_Evasiveness
+};
+
+static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!"); //
+static const u8 sText_PokeblockWasTooDry[] = _("was too dry!");
+static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!");
+static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!");
+static const u8 sText_PokeblockWasTooSour[] = _("was too sour!");
+
+const u8 *const gPokeblockWasTooXStringTable[] = {
+ sText_PokeblockWasTooSpicy,
+ sText_PokeblockWasTooDry,
+ sText_PokeblockWasTooSweet,
+ sText_PokeblockWasTooBitter,
+ sText_PokeblockWasTooSour
+};
+
+static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!");
+static const u8 sText_OldManUsedItem[] = _("The old man used\n{B_LAST_ITEM}!");
+static const u8 sText_PokeDudeUsedItem[] = _("The POKé DUDE used\n{B_LAST_ITEM}!");
+static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!");
+static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!");
+static const u8 sText_DontBeAThief[] = _("Don't be a thief!");
+static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can't be caught!");
+static const u8 sText_YouMissedPkmn[] = _("You missed the POKéMON!");
+static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!");
+static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!");
+static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!");
+static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!");
+const u8 gUnknown_83FD78A[] = _("よけられた!\nこいつは つかまりそうにないぞ!");
+static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_GET_YASEI}\p");
+static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_GET_YASEI}{PAUSE 127}");
+static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?");
+static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC.");
+static const u8 sText_Someones[] = _("someone's");
+static const u8 sText_Bills[] = _("BILL's");
+const u8 gUnknown_83FD82B[] = _("{B_OPPONENT_MON1_NAME}'s data was\nadded to the POKéDEX.\p");
+const u8 gUnknown_83FD850[] = _("It is raining.");
+const u8 gUnknown_83FD85F[] = _("A sandstorm is raging.");
+const u8 gUnknown_83FD876[] = _("The BOX is full!\nYou can't catch any more!\p");
+static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY");
+static const u8 sText_BerrySuffix[] = _(" BERRY");
+const u8 gUnknown_83FD8B6[] = _("ナゾ");
+const u8 gUnknown_83FD8B9[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured paralysis!");
+const u8 gUnknown_83FD8D2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured poison!");
+const u8 gUnknown_83FD8E8[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nhealed its burn!");
+const u8 gUnknown_83FD901[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ndefrosted it!");
+const u8 gUnknown_83FD917[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwoke it from its sleep!");
+const u8 gUnknown_83FD937[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nsnapped it out of confusion!");
+const u8 gUnknown_83FD95C[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!");
+const u8 gUnknown_83FD97A[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nnormalized its status!");
+const u8 gUnknown_83FD999[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored health!");
+const u8 gUnknown_83FD9B2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored {B_BUFF1}'s PP!");
+const u8 gUnknown_83FD9CC[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored its status!");
+const u8 gUnknown_83FD9E9[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored its HP a little!");
+const u8 gUnknown_83FDA0B[] = _("{B_LAST_ITEM}'s effect allows only\n{B_CURRENT_MOVE} to be used!\p");
+const u8 gUnknown_83FDA33[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!");
+const u8 gUnknown_83FDA4C[] = _("");
+const u8 gUnknown_83FDA4D[] = _("{B_PLAYER_NAME} played the {B_LAST_ITEM}.\pNow, that's a catchy tune!");
+const u8 gUnknown_83FDA7A[] = _("{B_PLAYER_NAME} played the\n{B_LAST_ITEM}.");
+const u8 gUnknown_83FDA8C[] = _("The POKéMON hearing the FLUTE\nawoke!");
+const u8 gUnknown_83FDAB1[] = _("You throw a BALL now, right?\nI… I'll do my best!");
+const u8 gUnknown_83FDAE2[] = _("OAK: Oh, for Pete's sake…\nSo pushy, as always.\p{B_PLAYER_NAME}.\pYou've never had a POKéMON battle\nbefore, have you?\pA POKéMON battle is when TRAINERS\npit their POKéMON against each\lother.\p");
+const u8 gUnknown_83FDB92[] = _("The TRAINER that makes the other\nTRAINER's POKéMON faint by lowering\ltheir HP to “0,” wins.\p");
+const u8 gUnknown_83FDBEF[] = _("But rather than talking about it,\nyou'll learn more from experience.\pTry battling and see for yourself.\p");
+const u8 gUnknown_83FDC58[] = _("OAK: Inflicting damage on the foe\nis the key to any battle.\p");
+const u8 gUnknown_83FDC95[] = _("OAK: Lowering the foe's stats\nwill put you at an advantage.\p");
+const u8 gUnknown_83FDCD2[] = _("OAK: Keep your eyes on your\nPOKéMON's HP.\pIt will faint if the HP drops to\n“0.”\p");
+const u8 gUnknown_83FDD23[] = _("OAK: No! There's no running away\nfrom a TRAINER POKéMON battle!\p");
+const u8 gUnknown_83FDD64[] = _("OAK: Hm! Excellent!\pIf you win, you earn prize money,\nand your POKéMON will grow!\pBattle other TRAINERS and make\nyour POKéMON strong!\p");
+const u8 gUnknown_83FDDEB[] = _("OAK: Hm…\nHow disappointing…\pIf you win, you earn prize money,\nand your POKéMON grow.\pBut if you lose, {B_PLAYER_NAME}, you end\nup paying prize money…\pHowever, since you had no warning\nthis time, I'll pay for you.\pBut things won't be this way once\nyou step outside these doors.\pThat's why you must strengthen your\nPOKéMON by battling wild POKéMON.\p");
+
+const u8 *const gBattleStringsTable[] = {
+ gUnknown_83FB219,
+ gUnknown_83FB265,
+ gUnknown_83FB28E,
+ gUnknown_83FB2A4,
+ gUnknown_83FB2B6,
+ gUnknown_83FB2D1,
+ gUnknown_83FB2FC,
+ gUnknown_83FB31F,
+ gUnknown_83FB32E,
+ gUnknown_83FB343,
+ gUnknown_83FD1B8,
+ gUnknown_83FB36B,
+ gUnknown_83FB37F,
+ gUnknown_83FCBA5,
+ gUnknown_83FB394,
+ gUnknown_83FB3EA,
+ gUnknown_83FB400,
+ gUnknown_83FB40D,
+ gUnknown_83FB41A,
+ gUnknown_83FB433,
+ gUnknown_83FB451,
+ gUnknown_83FB508,
+ gUnknown_83FB545,
+ gUnknown_83FB555,
+ gUnknown_83FB565,
+ gUnknown_83FB57C,
+ gUnknown_83FB592,
+ gUnknown_83FB5A8,
+ gUnknown_83FB5BC,
+ gUnknown_83FB5CD,
+ gUnknown_83FB5E2,
+ gUnknown_83FB5F8,
+ gUnknown_83FB610,
+ gUnknown_83FB626,
+ gUnknown_83FB641,
+ gUnknown_83FB650,
+ gUnknown_83FB663,
+ gUnknown_83FB692,
+ gUnknown_83FB6A7,
+ gUnknown_83FB6BF,
+ gUnknown_83FB6D3,
+ gUnknown_83FB6E5,
+ gUnknown_83FB6F7,
+ gUnknown_83FB70F,
+ gUnknown_83FB73A,
+ gUnknown_83FB76A,
+ gUnknown_83FB78A,
+ gUnknown_83FB7A3,
+ gUnknown_83FB7BF,
+ gUnknown_83FB7D5,
+ gUnknown_83FB7EE,
+ gUnknown_83FB806,
+ gUnknown_83FB826,
+ gUnknown_83FB844,
+ gUnknown_83FB854,
+ gUnknown_83FB871,
+ gUnknown_83FB885,
+ gUnknown_83FB89D,
+ gUnknown_83FB8AE,
+ gUnknown_83FB8C5,
+ gUnknown_83FB8E0,
+ gUnknown_83FB8F3,
+ gUnknown_83FB914,
+ gUnknown_83FB921,
+ gUnknown_83FB935,
+ gUnknown_83FB946,
+ gUnknown_83FB97F,
+ gUnknown_83FB9B8,
+ gUnknown_83FB9D9,
+ gUnknown_83FB9FF,
+ gUnknown_83FBA2F,
+ gUnknown_83FBA41,
+ gUnknown_83FBA5E,
+ gUnknown_83FBA79,
+ gUnknown_83FBA8E,
+ gUnknown_83FBAA3,
+ gUnknown_83FBAB2,
+ gUnknown_83FBAC3,
+ gUnknown_83FBAF3,
+ gUnknown_83FBB11,
+ gUnknown_83FBB4C,
+ gUnknown_83FBB62,
+ gUnknown_83FBB71,
+ gUnknown_83FBB83,
+ gUnknown_83FBB99,
+ gBattleText_MistShroud,
+ gUnknown_83FBBD0,
+ gBattleText_GetPumped,
+ gUnknown_83FBBFF,
+ gUnknown_83FBC16,
+ gUnknown_83FBC2B,
+ gUnknown_83FBC4C,
+ gUnknown_83FBC74,
+ gUnknown_83FBC83,
+ gUnknown_83FBC99,
+ gUnknown_83FBCBE,
+ gUnknown_83FBCD1,
+ gUnknown_83FBCDD,
+ gUnknown_83FBCFC,
+ gUnknown_83FBD16,
+ gUnknown_83FBD2B,
+ gUnknown_83FBD43,
+ gUnknown_83FBD53,
+ gUnknown_83FBD74,
+ gUnknown_83FBD86,
+ gUnknown_83FBDA3,
+ gUnknown_83FBDC4,
+ gUnknown_83FBDE2,
+ gUnknown_83FBE00,
+ gUnknown_83FBE16,
+ gUnknown_83FBE2B,
+ gUnknown_83FBE4E,
+ gUnknown_83FBE61,
+ gUnknown_83FBE73,
+ gUnknown_83FBE8B,
+ gUnknown_83FBEA1,
+ gUnknown_83FBEBE,
+ gUnknown_83FBEE2,
+ gUnknown_83FBEFA,
+ gUnknown_83FBF0C,
+ gUnknown_83FBF23,
+ gUnknown_83FC687,
+ gUnknown_83FBF39,
+ gUnknown_83FBF51,
+ gUnknown_83FBF63,
+ gUnknown_83FBF76,
+ gUnknown_83FBF89,
+ gUnknown_83FBF99,
+ gUnknown_83FBFBF,
+ gUnknown_83FBFD3,
+ gUnknown_83FBFEA,
+ gUnknown_83FBFFC,
+ gUnknown_83FC011,
+ gUnknown_83FC02B,
+ gUnknown_83FC048,
+ gUnknown_83FC072,
+ gUnknown_83FC090,
+ gUnknown_83FC0C6,
+ gUnknown_83FC0DC,
+ gUnknown_83FC0EE,
+ gUnknown_83FC10C,
+ gUnknown_83FC11E,
+ gUnknown_83FC132,
+ gUnknown_83FC140,
+ gUnknown_83FC168,
+ gUnknown_83FC185,
+ gUnknown_83FC19D,
+ gUnknown_83FC1B1,
+ gUnknown_83FC1C6,
+ gUnknown_83FC1DB,
+ gUnknown_83FC1F1,
+ gUnknown_83FC224,
+ gUnknown_83FC231,
+ gUnknown_83FC254,
+ gUnknown_83FC26D,
+ gUnknown_83FC28A,
+ gUnknown_83FC670,
+ gUnknown_83FC2AA,
+ gUnknown_83FC69D,
+ gUnknown_83FC2C7,
+ gUnknown_83FC2E3,
+ gUnknown_83FC6D6,
+ gUnknown_83FC2FA,
+ gUnknown_83FC312,
+ gUnknown_83FC377,
+ gUnknown_83FC38A,
+ gUnknown_83FC39A,
+ gUnknown_83FC3AF,
+ gUnknown_83FC3C5,
+ gUnknown_83FC3EB,
+ gUnknown_83FC40E,
+ gUnknown_83FC421,
+ gUnknown_83FC439,
+ gUnknown_83FC461,
+ gUnknown_83FC6F8,
+ gUnknown_83FC483,
+ gUnknown_83FC4AB,
+ gUnknown_83FC4D6,
+ gUnknown_83FC4F0,
+ gUnknown_83FC518,
+ gUnknown_83FC53D,
+ gUnknown_83FC715,
+ gUnknown_83FC72B,
+ gUnknown_83FC745,
+ gUnknown_83FC75D,
+ gUnknown_83FC780,
+ gUnknown_83FC7B6,
+ gUnknown_83FC7D3,
+ gUnknown_83FC7EF,
+ gUnknown_83FC809,
+ gUnknown_83FC825,
+ gUnknown_83FC841,
+ gUnknown_83FC860,
+ gUnknown_83FC87B,
+ gUnknown_83FC895,
+ gUnknown_83FC8B1,
+ gUnknown_83FC8C2,
+ gUnknown_83FCB41,
+ gBattleText_Rose,
+ gUnknown_83FCB50,
+ gUnknown_83FCB59,
+ gUnknown_83FCB5F,
+ gBattleText_UnknownString3,
+ gUnknown_83FCB8F,
+ gUnknown_83FCB9A,
+ gUnknown_83FCBE4,
+ gUnknown_83FCBF4,
+ gUnknown_83FCC07,
+ gUnknown_83FCC33,
+ gUnknown_83FCC5B,
+ gUnknown_83FCC74,
+ sText_GotAwaySafely,
+ gUnknown_83FCCD2,
+ gUnknown_83FCDB3,
+ gUnknown_83FCDE2,
+ gUnknown_83FCDF1,
+ gUnknown_83FCDF2,
+ gUnknown_83FCE08,
+ gUnknown_83FCE17,
+ gUnknown_83FCE38,
+ gUnknown_83FCE50,
+ gUnknown_83FCE64,
+ gUnknown_83FCE78,
+ gUnknown_83FCE90,
+ gUnknown_83FCEA8,
+ gUnknown_83FCEBA,
+ gUnknown_83FCECE,
+ gUnknown_83FCEE3,
+ gUnknown_83FCEFB,
+ gUnknown_83FCF14,
+ gUnknown_83FCF2C,
+ gUnknown_83FCF40,
+ gUnknown_83FCF54,
+ gUnknown_83FCF6C,
+ gUnknown_83FCF7E,
+ gUnknown_83FCFA0,
+ gUnknown_83FCFC2,
+ gUnknown_83FCFE4,
+ gUnknown_83FD006,
+ gUnknown_83FD022,
+ gUnknown_83FD048,
+ gUnknown_83FD068,
+ gUnknown_83FD077,
+ gUnknown_83FD0A7,
+ gUnknown_83FD0CA,
+ sText_PlayerUsedItem,
+ sText_OldManUsedItem,
+ sText_TrainerBlockedBall,
+ sText_DontBeAThief,
+ sText_ItDodgedBall,
+ sText_YouMissedPkmn,
+ sText_PkmnBrokeFree,
+ sText_ItAppearedCaught,
+ sText_AarghAlmostHadIt,
+ sText_ShootSoClose,
+ sText_GotchaPkmnCaught,
+ sText_GotchaPkmnCaught2,
+ sText_GiveNicknameCaptured,
+ sText_PkmnSentToPC,
+ gUnknown_83FD82B,
+ gUnknown_83FD850,
+ gUnknown_83FD85F,
+ gUnknown_83FB525,
+ gUnknown_83FD0F1,
+ gUnknown_83FD111,
+ gUnknown_83FD124,
+ gUnknown_83FD135,
+ gUnknown_83FD14B,
+ gUnknown_83FD15A,
+ gUnknown_83FD16A,
+ gUnknown_83FD186,
+ gUnknown_83FD1DF,
+ gUnknown_83FD1FA,
+ gUnknown_83FD218,
+ gUnknown_83FD232,
+ gUnknown_83FD23F,
+ gUnknown_83FB218,
+ gUnknown_83FB218,
+ gUnknown_83FD24D,
+ gUnknown_83FD8B9,
+ gUnknown_83FD8D2,
+ gUnknown_83FD8E8,
+ gUnknown_83FD901,
+ gUnknown_83FD917,
+ gUnknown_83FD937,
+ gUnknown_83FD95C,
+ gUnknown_83FD999,
+ gUnknown_83FD9B2,
+ gUnknown_83FD9CC,
+ gUnknown_83FD9E9,
+ gUnknown_83FDA0B,
+ gUnknown_83FDA33,
+ gUnknown_83FDA4C,
+ gUnknown_83FC8D5,
+ gUnknown_83FC8ED,
+ gUnknown_83FC913,
+ gUnknown_83FC935,
+ gUnknown_83FC979,
+ gUnknown_83FC993,
+ gUnknown_83FC9AA,
+ gUnknown_83FC9C7,
+ gUnknown_83FC9E5,
+ gUnknown_83FCA03,
+ gUnknown_83FC554,
+ gUnknown_83FC576,
+ gUnknown_83FBAD2,
+ gUnknown_83FBAE5,
+ gUnknown_83FCC39,
+ gUnknown_83FC591,
+ sText_PlayerDefeatedLinkTrainerTrainer1,
+ gUnknown_83FC5A2,
+ gUnknown_83FC5CC,
+ gUnknown_83FC5E8,
+ gUnknown_83FCB75,
+ gUnknown_83FC5F6,
+ gUnknown_83FC79D,
+ gUnknown_83FBB2F,
+ gUnknown_83FB282,
+ gUnknown_83FB283,
+ gUnknown_83FC955,
+ gUnknown_83FB3AF,
+ gUnknown_83FDAB1,
+ gUnknown_83FCA13,
+ gUnknown_83FC208,
+ gUnknown_83FC60C,
+ gUnknown_83FB359,
+ gUnknown_83FCCA0,
+ gUnknown_83FCCBB,
+ gUnknown_83FC631,
+ gUnknown_83FCA49,
+ gUnknown_83FD97A,
+ sText_Trainer1UsedItem,
+ gUnknown_83FD876,
+ gUnknown_83FB3D3,
+ gUnknown_83FCA71,
+ gUnknown_83FCA8E,
+ gUnknown_83FB67B,
+ gUnknown_83FCBC5,
+ gUnknown_83FC900,
+ gUnknown_83FBC62,
+ gUnknown_83FB997,
+ gUnknown_83FB95E,
+ gUnknown_83FC646,
+ gUnknown_83FCAAA,
+ gUnknown_83FCAD1,
+ gUnknown_83FB534,
+ gUnknown_83FC337,
+ gUnknown_83FC347,
+ gUnknown_83FC357,
+ gUnknown_83FC65A,
+ gUnknown_83FCAEF,
+ gUnknown_83FDD64,
+ gUnknown_83FDDEB,
+ gUnknown_83FB484,
+ gUnknown_83FB4BE,
+ Text_1A5CF1,
+ Text_1A5D31,
+ Text_1A5D6E,
+ Text_1A5DB1,
+ sText_PokeDudeUsedItem,
+ gUnknown_83FDA4D,
+ gUnknown_83FDA7A,
+ gUnknown_83FDA8C,
+ gUnknown_83FB21C,
+ gUnknown_83FB262,
+ gUnknown_83FB4F7,
+ gUnknown_83FCB0C,
+ gUnknown_83FCB26,
+ gUnknown_83FD322,
+ gUnknown_83FD34D,
+ gUnknown_83FB21F,
+ gUnknown_83FB232,
+ gUnknown_83FB235,
+ gUnknown_83FB248
+};
+
+const u16 gMissStringIds[] = {
+ STRINGID_ATTACKMISSED,
+ STRINGID_PKMNPROTECTEDITSELF,
+ STRINGID_PKMNAVOIDEDATTACK,
+ STRINGID_AVOIDEDDAMAGE,
+ STRINGID_PKMNMAKESGROUNDMISS
+};
+
+const u16 gNoEscapeStringIds[] = {
+ STRINGID_CANTESCAPE,
+ STRINGID_DONTLEAVEBIRCH,
+ STRINGID_PREVENTSESCAPE,
+ STRINGID_CANTESCAPE2,
+ STRINGID_ATTACKERCANTESCAPE
+};
+
+const u16 gMoveWeatherChangeStringIds[] = {
+ STRINGID_STARTEDTORAIN,
+ STRINGID_DOWNPOURSTARTED,
+ STRINGID_BUTITFAILED,
+ STRINGID_SANDSTORMBREWED,
+ STRINGID_SUNLIGHTGOTBRIGHT,
+ STRINGID_STARTEDHAIL
+};
+
+const u16 gSandstormHailContinuesStringIds[] = {
+ STRINGID_SANDSTORMRAGES,
+ STRINGID_HAILCONTINUES
+};
+
+const u16 gSandstormHailDmgStringIds[] = {
+ STRINGID_PKMNBUFFETEDBYSANDSTORM,
+ STRINGID_PKMNPELTEDBYHAIL
+};
+
+const u16 gSandstormHailEndStringIds[] = {
+ STRINGID_SANDSTORMSUBSIDED,
+ STRINGID_HAILSTOPPED
+};
+
+const u16 gRainContinuesStringIds[] = {
+ STRINGID_RAINCONTINUES,
+ STRINGID_DOWNPOURCONTINUES,
+ STRINGID_RAINSTOPPED
+};
+
+const u16 gProtectLikeUsedStringIds[] = {
+ STRINGID_PKMNPROTECTEDITSELF2,
+ STRINGID_PKMNBRACEDITSELF,
+ STRINGID_BUTITFAILED
+};
+
+const u16 gReflectLightScreenSafeguardStringIds[] = {
+ STRINGID_BUTITFAILED,
+ STRINGID_PKMNRAISEDDEF,
+ STRINGID_PKMNRAISEDDEFALITTLE,
+ STRINGID_PKMNRAISEDSPDEF,
+ STRINGID_PKMNRAISEDSPDEFALITTLE,
+ STRINGID_PKMNCOVEREDBYVEIL
+};
+
+const u16 gLeechSeedStringIds[] = {
+ STRINGID_PKMNSEEDED,
+ STRINGID_PKMNEVADEDATTACK,
+ STRINGID_ITDOESNTAFFECT,
+ STRINGID_PKMNSAPPEDBYLEECHSEED,
+ STRINGID_ITSUCKEDLIQUIDOOZE
+};
+
+const u16 gRestUsedStringIds[] = {
+ STRINGID_PKMNWENTTOSLEEP,
+ STRINGID_PKMNSLEPTHEALTHY
+};
+
+const u16 gUproarOverTurnStringIds[] = {
+ STRINGID_PKMNMAKINGUPROAR,
+ STRINGID_PKMNCALMEDDOWN
+};
+
+const u16 gStockpileUsedStringIds[] = {
+ STRINGID_PKMNSTOCKPILED,
+ STRINGID_PKMNCANTSTOCKPILE
+};
+
+const u16 gWokeUpStringIds[] = {
+ STRINGID_PKMNWOKEUP,
+ STRINGID_PKMNWOKEUPINUPROAR
+};
+
+const u16 gSwallowFailStringIds[] = {
+ STRINGID_FAILEDTOSWALLOW,
+ STRINGID_PKMNHPFULL
+};
+
+const u16 gUproarAwakeStringIds[] = {
+ STRINGID_PKMNCANTSLEEPINUPROAR2,
+ STRINGID_UPROARKEPTPKMNAWAKE,
+ STRINGID_PKMNSTAYEDAWAKEUSING
+};
+
+const u16 gStatUpStringIds[] = {
+ STRINGID_PKMNSSTATCHANGED,
+ STRINGID_PKMNSSTATCHANGED2,
+ STRINGID_STATSWONTINCREASE,
+ STRINGID_EMPTYSTRING3,
+ STRINGID_USINGXTHEYOFZN,
+ STRINGID_PKMNUSEDXTOGETPUMPED
+};
+
+const u16 gStatDownStringIds[] = {
+ STRINGID_PKMNSSTATCHANGED3,
+ STRINGID_PKMNSSTATCHANGED4,
+ STRINGID_STATSWONTDECREASE,
+ STRINGID_EMPTYSTRING3
+};
+
+const u16 gFirstTurnOfTwoStringIds[] = {
+ STRINGID_PKMNWHIPPEDWHIRLWIND,
+ STRINGID_PKMNTOOKSUNLIGHT,
+ STRINGID_PKMNLOWEREDHEAD,
+ STRINGID_PKMNISGLOWING,
+ STRINGID_PKMNFLEWHIGH,
+ STRINGID_PKMNDUGHOLE,
+ STRINGID_PKMNHIDUNDERWATER,
+ STRINGID_PKMNSPRANGUP
+};
+
+const u16 gWrappedStringIds[] = {
+ STRINGID_PKMNSQUEEZEDBYBIND,
+ STRINGID_PKMNWRAPPEDBY,
+ STRINGID_PKMNTRAPPEDINVORTEX,
+ STRINGID_PKMNCLAMPED,
+ STRINGID_PKMNTRAPPEDINVORTEX,
+ STRINGID_PKMNTRAPPEDBYSANDTOMB
+};
+
+const u16 gMistUsedStringIds[] = {
+ STRINGID_PKMNSHROUDEDINMIST,
+ STRINGID_BUTITFAILED
+};
+
+const u16 gFocusEnergyUsedStringIds[] = {
+ STRINGID_PKMNGETTINGPUMPED,
+ STRINGID_BUTITFAILED
+};
+
+const u16 gTransformUsedStringIds[] = {
+ STRINGID_PKMNTRANSFORMEDINTO,
+ STRINGID_BUTITFAILED
+};
+
+const u16 gSubsituteUsedStringIds[] = {
+ STRINGID_PKMNMADESUBSTITUTE,
+ STRINGID_TOOWEAKFORSUBSTITUTE
+};
+
+const u16 gGotPoisonedStringIds[] = {
+ STRINGID_PKMNWASPOISONED,
+ STRINGID_PKMNPOISONEDBY
+};
+
+const u16 gGotParalyzedStringIds[] = {
+ STRINGID_PKMNWASPARALYZED,
+ STRINGID_PKMNWASPARALYZEDBY
+};
+
+const u16 gFellAsleepStringIds[] = {
+ STRINGID_PKMNFELLASLEEP,
+ STRINGID_PKMNMADESLEEP
+};
+
+const u16 gGotBurnedStringIds[] = {
+ STRINGID_PKMNWASBURNED,
+ STRINGID_PKMNBURNEDBY
+};
+
+const u16 gGotFrozenStringIds[] = {
+ STRINGID_PKMNWASFROZEN,
+ STRINGID_PKMNFROZENBY
+};
+
+const u16 gGotDefrostedStringIds[] = {
+ STRINGID_PKMNWASDEFROSTED2,
+ STRINGID_PKMNWASDEFROSTEDBY
+};
+
+const u16 gKOFailedStringIds[] = {
+ STRINGID_ATTACKMISSED,
+ STRINGID_PKMNUNAFFECTED
+};
+
+const u16 gAttractUsedStringIds[] = {
+ STRINGID_PKMNFELLINLOVE,
+ STRINGID_PKMNSXINFATUATEDY
+};
+
+const u16 gLeechSeedDrainStringIds[] = {
+ STRINGID_PKMNENERGYDRAINED,
+ STRINGID_ITSUCKEDLIQUIDOOZE
+};
+
+const u16 gSportsUsedStringIds[] = {
+ STRINGID_ELECTRICITYWEAKENED,
+ STRINGID_FIREWEAKENED
+};
+
+const u16 gPartyStatusHealStringIds[] = {
+ STRINGID_BELLCHIMED,
+ STRINGID_BELLCHIMED,
+ STRINGID_BELLCHIMED,
+ STRINGID_BELLCHIMED,
+ STRINGID_SOOTHINGAROMA
+};
+
+const u16 gFutureMoveUsedStringIds[] = {
+ STRINGID_PKMNFORESAWATTACK,
+ STRINGID_PKMNCHOSEXASDESTINY
+};
+
+const u16 gBallEscapeStringIds[] = {
+ STRINGID_PKMNBROKEFREE,
+ STRINGID_ITAPPEAREDCAUGHT,
+ STRINGID_AARGHALMOSTHADIT,
+ STRINGID_SHOOTSOCLOSE
+};
+
+const u16 gWeatherContinuesStringIds[] = {
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_SANDSTORMISRAGING,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_SUNLIGHTSTRONG,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING,
+ STRINGID_ITISRAINING
+};
+
+const u16 gInobedientStringIds[] = {
+ STRINGID_PKMNLOAFING,
+ STRINGID_PKMNWONTOBEY,
+ STRINGID_PKMNTURNEDAWAY,
+ STRINGID_PKMNPRETENDNOTNOTICE
+};
+
+const u16 gSafariPokeblockResultStringIds[] = {
+ STRINGID_PKMNWATCHINGCAREFULLY,
+ STRINGID_PKMNANGRY,
+ STRINGID_PKMNEATING
+};
+
+const u16 gTrainerItemCuredStatusStringIds[] = {
+ STRINGID_PKMNSITEMSNAPPEDOUT,
+ STRINGID_PKMNSITEMCUREDPARALYSIS,
+ STRINGID_PKMNSITEMDEFROSTEDIT,
+ STRINGID_PKMNSITEMHEALEDBURN,
+ STRINGID_PKMNSITEMCUREDPOISON,
+ STRINGID_PKMNSITEMWOKEIT
+};
+
+const u16 gBerryEffectStringIds[] = {
+ STRINGID_PKMNSITEMCUREDPROBLEM,
+ STRINGID_PKMNSITEMNORMALIZEDSTATUS
+};
+
+const u16 gBRNPreventionStringIds[] = {
+ STRINGID_PKMNSXPREVENTSBURNS,
+ STRINGID_PKMNSXPREVENTSYSZ,
+ STRINGID_PKMNSXHADNOEFFECTONY
+};
+
+const u16 gPRLZPreventionStringIds[] = {
+ STRINGID_PKMNPREVENTSPARALYSISWITH,
+ STRINGID_PKMNSXPREVENTSYSZ,
+ STRINGID_PKMNSXHADNOEFFECTONY
+};
+
+const u16 gPSNPreventionStringIds[] = {
+ STRINGID_PKMNPREVENTSPOISONINGWITH,
+ STRINGID_PKMNSXPREVENTSYSZ,
+ STRINGID_PKMNSXHADNOEFFECTONY
+};
+
+const u16 gItemSwapStringIds[] = {
+ STRINGID_PKMNOBTAINEDX,
+ STRINGID_PKMNOBTAINEDX2,
+ STRINGID_PKMNOBTAINEDXYOBTAINEDZ
+};
+
+const u16 gFlashFireStringIds[] = {
+ STRINGID_PKMNRAISEDFIREPOWERWITH,
+ STRINGID_PKMNSXMADEYINEFFECTIVE
+};
+
+const u16 gCaughtMonStringIds[] = {
+ STRINGID_PKMNTRANSFERREDSOMEONESPC,
+ STRINGID_PKMNTRANSFERREDBILLSPC,
+ STRINGID_PKMNBOXSOMEONESPCFULL,
+ STRINGID_PKMNBOXBILLSPCFULL
+};
+
+const u16 gDoubleBattleRecallStrings[] = {
+ STRINGID_TRAINER1MON1COMEBACK,
+ STRINGID_TRAINER1MON1COMEBACK,
+ STRINGID_TRAINER1MON2COMEBACK,
+ STRINGID_TRAINER1MON1AND2COMEBACK
+};
+
+const u16 gTrappingMoves[] = {
+ MOVE_BIND,
+ MOVE_WRAP,
+ MOVE_FIRE_SPIN,
+ MOVE_CLAMP,
+ MOVE_WHIRLPOOL,
+ MOVE_SAND_TOMB,
+ 0xFFFF
+};
+
+const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!");
+const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p");
+const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p");
+const u8 gText_EllipsisQuestionMark[] = _("……?\p");
+const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_ACTIVE_NAME_WITH_PREFIX} do?");
+const u8 gUnknown_83FE6E6[] = _("What will {B_PLAYER_NAME}\nthrow?");
+const u8 gUnknown_83FE6FA[] = _("What will the\nold man do?");
+const u8 gText_LinkStandby[] = _("{PAUSE 16}Link standby…");
+const u8 gUnknown_83FE725[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}FIGHT{CLEAR_TO 56}BAG\nPOKéMON{CLEAR_TO 56}RUN");
+const u8 gUnknown_83FE747[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}BALL{CLEAR_TO 56}BAIT\nROCK{CLEAR_TO 56}RUN");
+const u8 gText_MoveInterfacePP[] = _("PP ");
+const u8 gText_MoveInterfaceType[] = _("TYPE/");
+const u8 gUnknown_83FE770[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}");
+const u8 gUnknown_83FE779[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}どの わざを\nわすれさせたい?");
+const u8 gText_BattleYesNoChoice[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}Yes\nNo");
+const u8 gText_BattleSwitchWhich[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}Switch\nwhich?");
+const u8 gUnknown_83FE7B6[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW 13 14 15}");
+const u8 gUnknown_83FE7BF[] = _("{RIGHT_ARROW_2}");
+const u8 gUnknown_83FE7C2[] = _("{PLUS}");
+const u8 gUnknown_83FE7C5[] = _("-");
+
+const u8 gUnknown_83FE7C7[] = _("{SIZE 0}Max{SIZE 2} HP");
+const u8 gUnknown_83FE7D4[] = _("ATTACK ");
+const u8 gUnknown_83FE7DC[] = _("DEFENSE");
+const u8 gUnknown_83FE7E4[] = _("SP. ATK");
+const u8 gUnknown_83FE7EC[] = _("SP. DEF");
+
+const u8 *const gUnknown_83FE7F4[] = {
+ gUnknown_83FE7C7,
+ gUnknown_83FE7E4,
+ gUnknown_83FE7D4,
+ gUnknown_83FE7EC,
+ gUnknown_83FE7DC,
+ sText_Speed
+};
+
+const u8 gUnknown_83FE80C[] = _("{HIGHLIGHT 2}SAFARI BALLS"); //
+const u8 gText_HighlightRed_Left[] = _("{HIGHLIGHT 2}Left: ");
+const u8 gText_HighlightRed[] = _("{HIGHLIGHT 2}");
+const u8 gText_Sleep[] = _("sleep");
+const u8 gText_Poison[] = _("poison");
+const u8 gText_Burn[] = _("burn");
+const u8 gText_Paralysis[] = _("paralysis");
+const u8 gText_Ice[] = _("ice");
+const u8 gText_Confusion[] = _("confusion");
+const u8 gText_Love[] = _("love");
+const u8 gUnknown_83FE859[] = _(" ");
+const u8 gUnknown_83FE85C[] = _("\n");
+const u8 gUnknown_83FE85E[] = _("\n");
+const u8 gUnknown_83FE860[] = _(" is");
+const u8 gUnknown_83FE864[] = _(" is");
+const u8 gText_BadEgg[] = _("Bad EGG");
+const u8 gUnknown_83FE870[] = _("ミツル");
+const u8 gUnknown_83FE874[] = _("{HIGHLIGHT 0}Win");
+const u8 gUnknown_83FE87B[] = _("{HIGHLIGHT 0}Loss");
+const u8 gUnknown_83FE883[] = _("{HIGHLIGHT 0}Draw");
+static const u8 sText_SpaceIs[] = _(" is");
+static const u8 sText_ApostropheS[] = _("'s");
+const u8 gUnknown_83FE892[] = _("a NORMAL move");
+const u8 gUnknown_83FE8A0[] = _("a FIGHTING move");
+const u8 gUnknown_83FE8B0[] = _("a FLYING move");
+const u8 gUnknown_83FE8BE[] = _("a POISON move");
+const u8 gUnknown_83FE8CC[] = _("a GROUND move");
+const u8 gUnknown_83FE8DA[] = _("a ROCK move");
+const u8 gUnknown_83FE8E6[] = _("a BUG move");
+const u8 gUnknown_83FE8F1[] = _("a GHOST move");
+const u8 gUnknown_83FE8FE[] = _("a STEEL move");
+const u8 gUnknown_83FE90B[] = _("a ??? move");
+const u8 gUnknown_83FE916[] = _("a FIRE move");
+const u8 gUnknown_83FE922[] = _("a WATER move");
+const u8 gUnknown_83FE92F[] = _("a GRASS move");
+const u8 gUnknown_83FE93C[] = _("an ELECTRIC move");
+const u8 gUnknown_83FE94D[] = _("a PSYCHIC move");
+const u8 gUnknown_83FE95C[] = _("an ICE move");
+const u8 gUnknown_83FE968[] = _("a DRAGON move");
+const u8 gUnknown_83FE976[] = _("a DARK move");
+const u8 gUnknown_83FE982[] = _("TIME BOARD");
+const u8 gUnknown_83FE98D[] = _("CLEAR TIME");
+const u8 gUnknown_83FE998[] = _("{STR_VAR_1}MIN. {STR_VAR_2}.{STR_VAR_3}SEC.");
+const u8 gUnknown_83FE9A9[] = _("1F");
+const u8 gUnknown_83FE9AC[] = _("2F");
+const u8 gUnknown_83FE9AF[] = _("3F");
+const u8 gUnknown_83FE9B2[] = _("4F");
+const u8 gUnknown_83FE9B5[] = _("5F");
+const u8 gUnknown_83FE9B8[] = _("6F");
+const u8 gUnknown_83FE9BB[] = _("7F");
+const u8 gUnknown_83FE9BE[] = _("8F");
+
+const u8 *const gUnknown_83FE9C4[] = {
+ gOtherText_Single,
+ gOtherText_Double,
+ gOtherText_Knockout,
+ gOtherText_Mixed
+};
+
+const u8 gUnknown_83FE9D4[] = _("{PLAY_SE SE_NIGERU}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!"); //
+static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
+static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
+
+static const u8 *const sATypeMove_Table[] = {
+ gUnknown_83FE892,
+ gUnknown_83FE8A0,
+ gUnknown_83FE8B0,
+ gUnknown_83FE8BE,
+ gUnknown_83FE8CC,
+ gUnknown_83FE8DA,
+ gUnknown_83FE8E6,
+ gUnknown_83FE8F1,
+ gUnknown_83FE8FE,
+ gUnknown_83FE90B,
+ gUnknown_83FE916,
+ gUnknown_83FE922,
+ gUnknown_83FE92F,
+ gUnknown_83FE93C,
+ gUnknown_83FE94D,
+ gUnknown_83FE95C,
+ gUnknown_83FE968,
+ gUnknown_83FE976
+};
+
+static const u16 sGrammarMoveUsedTable[] = {
+ MOVE_SWORDS_DANCE,
+ MOVE_STRENGTH,
+ MOVE_GROWTH,
+ MOVE_HARDEN,
+ MOVE_MINIMIZE,
+ MOVE_SMOKESCREEN,
+ MOVE_WITHDRAW,
+ MOVE_DEFENSE_CURL,
+ MOVE_EGG_BOMB,
+ MOVE_SMOG,
+ MOVE_BONE_CLUB,
+ MOVE_FLASH,
+ MOVE_SPLASH,
+ MOVE_ACID_ARMOR,
+ MOVE_BONEMERANG,
+ MOVE_REST,
+ MOVE_SHARPEN,
+ MOVE_SUBSTITUTE,
+ MOVE_MIND_READER,
+ MOVE_SNORE,
+ MOVE_PROTECT,
+ MOVE_SPIKES,
+ MOVE_ENDURE,
+ MOVE_ROLLOUT,
+ MOVE_SWAGGER,
+ MOVE_SLEEP_TALK,
+ MOVE_HIDDEN_POWER,
+ MOVE_PSYCH_UP,
+ MOVE_EXTREME_SPEED,
+ MOVE_FOLLOW_ME,
+ MOVE_TRICK,
+ MOVE_ASSIST,
+ MOVE_INGRAIN,
+ MOVE_KNOCK_OFF,
+ MOVE_CAMOUFLAGE,
+ MOVE_ASTONISH,
+ MOVE_ODOR_SLEUTH,
+ MOVE_GRASS_WHISTLE,
+ MOVE_SHEER_COLD,
+ MOVE_MUDDY_WATER,
+ MOVE_IRON_DEFENSE,
+ MOVE_BOUNCE,
+ MOVE_NONE,
+
+ MOVE_TELEPORT,
+ MOVE_RECOVER,
+ MOVE_BIDE,
+ MOVE_AMNESIA,
+ MOVE_FLAIL,
+ MOVE_TAUNT,
+ MOVE_BULK_UP,
+ MOVE_NONE,
+
+ MOVE_MEDITATE,
+ MOVE_AGILITY,
+ MOVE_MIMIC,
+ MOVE_DOUBLE_TEAM,
+ MOVE_BARRAGE,
+ MOVE_TRANSFORM,
+ MOVE_STRUGGLE,
+ MOVE_SCARY_FACE,
+ MOVE_CHARGE,
+ MOVE_WISH,
+ MOVE_BRICK_BREAK,
+ MOVE_YAWN,
+ MOVE_FEATHER_DANCE,
+ MOVE_TEETER_DANCE,
+ MOVE_MUD_SPORT,
+ MOVE_FAKE_TEARS,
+ MOVE_WATER_SPORT,
+ MOVE_CALM_MIND,
+ MOVE_NONE,
+
+ MOVE_POUND,
+ MOVE_SCRATCH,
+ MOVE_VICE_GRIP,
+ MOVE_WING_ATTACK,
+ MOVE_FLY,
+ MOVE_BIND,
+ MOVE_SLAM,
+ MOVE_HORN_ATTACK,
+ MOVE_WRAP,
+ MOVE_THRASH,
+ MOVE_TAIL_WHIP,
+ MOVE_LEER,
+ MOVE_BITE,
+ MOVE_GROWL,
+ MOVE_ROAR,
+ MOVE_SING,
+ MOVE_PECK,
+ MOVE_ABSORB,
+ MOVE_STRING_SHOT,
+ MOVE_EARTHQUAKE,
+ MOVE_FISSURE,
+ MOVE_DIG,
+ MOVE_TOXIC,
+ MOVE_SCREECH,
+ MOVE_METRONOME,
+ MOVE_LICK,
+ MOVE_CLAMP,
+ MOVE_CONSTRICT,
+ MOVE_POISON_GAS,
+ MOVE_BUBBLE,
+ MOVE_SLASH,
+ MOVE_SPIDER_WEB,
+ MOVE_NIGHTMARE,
+ MOVE_CURSE,
+ MOVE_FORESIGHT,
+ MOVE_CHARM,
+ MOVE_ATTRACT,
+ MOVE_ROCK_SMASH,
+ MOVE_UPROAR,
+ MOVE_SPIT_UP,
+ MOVE_SWALLOW,
+ MOVE_TORMENT,
+ MOVE_FLATTER,
+ MOVE_ROLE_PLAY,
+ MOVE_ENDEAVOR,
+ MOVE_TICKLE,
+ MOVE_COVET,
+ MOVE_NONE
+};
+
+// code
+void BufferStringBattle(u16 stringId)
+{
+ s32 i;
+ const u8 *stringPtr = NULL;
+
+ sBattleMsgDataPtr = (struct BattleMsgData*)(&gBattleBufferA[gActiveBattler][4]);
+ gLastUsedItem = sBattleMsgDataPtr->lastItem;
+ gLastUsedAbility = sBattleMsgDataPtr->lastAbility;
+ gBattleScripting.battler = sBattleMsgDataPtr->scrActive;
+ *(&gBattleStruct->field_52) = sBattleMsgDataPtr->unk1605E;
+ *(&gBattleStruct->hpScale) = sBattleMsgDataPtr->hpScale;
+ gPotentialItemEffectBattler = sBattleMsgDataPtr->itemEffectBattler;
+ *(&gBattleStruct->stringMoveType) = sBattleMsgDataPtr->moveType;
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ sBattlerAbilities[i] = sBattleMsgDataPtr->abilities[i];
+ }
+ for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; i++)
+ {
+ gBattleTextBuff1[i] = sBattleMsgDataPtr->textBuffs[0][i];
+ gBattleTextBuff2[i] = sBattleMsgDataPtr->textBuffs[1][i];
+ gBattleTextBuff3[i] = sBattleMsgDataPtr->textBuffs[2][i];
+ }
+
+ switch (stringId)
+ {
+ case STRINGID_INTROMSG: // first battle msg
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ stringPtr = sText_TwoLinkTrainersWantToBattle;
+ }
+ else
+ {
+ if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ stringPtr = sText_Trainer1WantsToBattle;
+ else
+ stringPtr = sText_LinkTrainerWantsToBattle;
+ }
+ }
+ else
+ {
+ stringPtr = sText_Trainer1WantsToBattle;
+ }
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_GHOST)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
+ stringPtr = gUnknown_83FD30D;
+ else
+ stringPtr = gUnknown_83FD2D9;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
+ stringPtr = sText_WildPkmnAppeared2;
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles
+ stringPtr = sText_TwoWildPkmnAppeared;
+ else if (gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL)
+ stringPtr = sText_WildPkmnAppearedPause;
+ else
+ stringPtr = sText_WildPkmnAppeared;
+ }
+ break;
+ case STRINGID_INTROSENDOUT: // poke first send-out
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = sText_LinkPartnerSentOutPkmnGoPkmn;
+ else
+ stringPtr = sText_GoTwoPkmn;
+ }
+ else
+ {
+ stringPtr = sText_GoPkmn;
+ }
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = sText_TwoLinkTrainersSentOutPkmn;
+ else if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ stringPtr = sText_LinkTrainerSentOutTwoPkmn;
+ else
+ stringPtr = sText_Trainer1SentOutTwoPkmn;
+ }
+ else
+ {
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ stringPtr = sText_Trainer1SentOutPkmn;
+ else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ stringPtr = sText_Trainer1SentOutPkmn;
+ else
+ stringPtr = sText_LinkTrainerSentOutPkmn;
+ }
+ }
+ break;
+ case STRINGID_RETURNMON: // sending poke to ball msg
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ if (*(&gBattleStruct->hpScale) == 0)
+ stringPtr = sText_PkmnThatsEnough;
+ else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ stringPtr = sText_PkmnComeBack;
+ else if (*(&gBattleStruct->hpScale) == 2)
+ stringPtr = sText_PkmnOkComeBack;
+ else
+ stringPtr = sText_PkmnGoodComeBack;
+ }
+ else
+ {
+ if (gTrainerBattleOpponent_A == TRAINER_LINK_OPPONENT)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = sText_LinkTrainer2WithdrewPkmn;
+ else
+ stringPtr = sText_LinkTrainer1WithdrewPkmn;
+ }
+ else
+ {
+ stringPtr = sText_Trainer1WithdrewPkmn;
+ }
+ }
+ break;
+ case STRINGID_SWITCHINMON: // switch-in msg
+ if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER)
+ {
+ if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ stringPtr = sText_GoPkmn2;
+ else if (*(&gBattleStruct->hpScale) == 1)
+ stringPtr = sText_DoItPkmn;
+ else if (*(&gBattleStruct->hpScale) == 2)
+ stringPtr = sText_GoForItPkmn;
+ else
+ stringPtr = sText_YourFoesWeakGetEmPkmn;
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = sText_LinkTrainerMultiSentOutPkmn;
+ else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ stringPtr = sText_Trainer1SentOutPkmn2;
+ else
+ stringPtr = sText_LinkTrainerSentOutPkmn2;
+ }
+ else
+ {
+ stringPtr = sText_Trainer1SentOutPkmn2;
+ }
+ }
+ break;
+ case STRINGID_USEDMOVE: // pokemon used a move msg
+ ChooseMoveUsedParticle(gBattleTextBuff1); // buff1 doesn't appear in the string, leftover from japanese move names
+
+ if (sBattleMsgDataPtr->currentMove >= MOVES_COUNT)
+ StringCopy(gBattleTextBuff2, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]);
+ else
+ StringCopy(gBattleTextBuff2, gMoveNames[sBattleMsgDataPtr->currentMove]);
+
+ ChooseTypeOfMoveUsedString(gBattleTextBuff2);
+ stringPtr = sText_AttackerUsedX;
+ break;
+ case STRINGID_BATTLEEND: // battle end
+ if (gBattleTextBuff1[0] & B_OUTCOME_LINK_BATTLE_RAN)
+ {
+ gBattleTextBuff1[0] &= ~(B_OUTCOME_LINK_BATTLE_RAN);
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT && gBattleTextBuff1[0] != B_OUTCOME_DREW)
+ gBattleTextBuff1[0] ^= (B_OUTCOME_LOST | B_OUTCOME_WON);
+
+ if (gBattleTextBuff1[0] == B_OUTCOME_LOST || gBattleTextBuff1[0] == B_OUTCOME_DREW)
+ stringPtr = sText_GotAwaySafely;
+ else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = sText_TwoWildFled;
+ else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ stringPtr = gUnknown_83FE9D4;
+ else
+ stringPtr = gUnknown_83FCD92;
+ }
+ else
+ {
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT && gBattleTextBuff1[0] != B_OUTCOME_DREW)
+ gBattleTextBuff1[0] ^= (B_OUTCOME_LOST | B_OUTCOME_WON);
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ switch (gBattleTextBuff1[0])
+ {
+ case B_OUTCOME_WON:
+ stringPtr = sText_TwoLinkTrainersDefeated;
+ break;
+ case B_OUTCOME_LOST:
+ stringPtr = sText_PlayerLostToTwo;
+ break;
+ case B_OUTCOME_DREW:
+ stringPtr = sText_PlayerBattledToDrawVsTwo;
+ break;
+ }
+ }
+ else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ {
+ switch (gBattleTextBuff1[0])
+ {
+ case B_OUTCOME_WON:
+ stringPtr = sText_PlayerDefeatedLinkTrainerTrainer1;
+ break;
+ case B_OUTCOME_LOST:
+ stringPtr = sText_PlayerLostAgainstTrainer1;
+ break;
+ case B_OUTCOME_DREW:
+ stringPtr = sText_PlayerBattledToDrawTrainer1;
+ break;
+ }
+ }
+ else
+ {
+ switch (gBattleTextBuff1[0])
+ {
+ case B_OUTCOME_WON:
+ stringPtr = sText_PlayerDefeatedLinkTrainer;
+ break;
+ case B_OUTCOME_LOST:
+ stringPtr = sText_PlayerLostAgainstLinkTrainer;
+ break;
+ case B_OUTCOME_DREW:
+ stringPtr = sText_PlayerBattledToDrawLinkTrainer;
+ break;
+ }
+ }
+ }
+ break;
+ default: // load a string from the table
+ if (stringId >= BATTLESTRINGS_COUNT + BATTLESTRINGS_ID_ADDER)
+ {
+ gDisplayedStringBattle[0] = EOS;
+ return;
+ }
+ else
+ {
+ stringPtr = gBattleStringsTable[stringId - BATTLESTRINGS_ID_ADDER];
+ }
+ break;
+ }
+
+ BattleStringExpandPlaceholdersToDisplayedString(stringPtr);
+}
+
+u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src)
+{
+ BattleStringExpandPlaceholders(src, gDisplayedStringBattle);
+}
+
+static const u8* TryGetStatusString(u8 *src)
+{
+ u32 i;
+ u8 status[] = _("$$$$$$$");
+ u32 chars1, chars2;
+ u8* statusPtr;
+
+ statusPtr = status;
+ for (i = 0; i < 8; i++)
+ {
+ if (*src == EOS)
+ break;
+ *statusPtr = *src;
+ src++;
+ statusPtr++;
+ }
+
+ chars1 = *(u32*)(&status[0]);
+ chars2 = *(u32*)(&status[4]);
+
+ for (i = 0; i < NELEMS(gStatusConditionStringsTable); i++)
+ {
+ if (chars1 == *(u32*)(&gStatusConditionStringsTable[i][0][0])
+ && chars2 == *(u32*)(&gStatusConditionStringsTable[i][0][4]))
+ return gStatusConditionStringsTable[i][1];
+ }
+ return NULL;
+}
+
+#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex) \
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) \
+ { \
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
+ toCpy = sText_FoePkmnPrefix; \
+ else \
+ toCpy = sText_WildPkmnPrefix; \
+ while (*toCpy != EOS) \
+ { \
+ dst[dstId] = *toCpy; \
+ dstId++; \
+ toCpy++; \
+ } \
+ GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \
+ } \
+ else \
+ { \
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \
+ } \
+ StringGetEnd10(text); \
+ toCpy = text;
+
+u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
+{
+ u32 dstId = 0; // if they used dstId, why not use srcId as well?
+ const u8 *toCpy = NULL;
+ u8 text[30];
+ u8 multiplayerId;
+ s32 i;
+
+ multiplayerId = GetMultiplayerId();
+
+ while (*src != EOS)
+ {
+ if (*src == PLACEHOLDER_BEGIN)
+ {
+ src++;
+ switch (*src)
+ {
+ case B_TXT_BUFF1:
+ if (gBattleTextBuff1[0] == B_BUFF_PLACEHOLDER_BEGIN)
+ {
+ ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gStringVar1);
+ toCpy = gStringVar1;
+ }
+ else
+ {
+ toCpy = TryGetStatusString(gBattleTextBuff1);
+ if (toCpy == NULL)
+ toCpy = gBattleTextBuff1;
+ }
+ break;
+ case B_TXT_BUFF2:
+ if (gBattleTextBuff2[0] == B_BUFF_PLACEHOLDER_BEGIN)
+ {
+ ExpandBattleTextBuffPlaceholders(gBattleTextBuff2, gStringVar2);
+ toCpy = gStringVar2;
+ }
+ else
+ toCpy = gBattleTextBuff2;
+ break;
+ case B_TXT_BUFF3:
+ if (gBattleTextBuff3[0] == B_BUFF_PLACEHOLDER_BEGIN)
+ {
+ ExpandBattleTextBuffPlaceholders(gBattleTextBuff3, gStringVar3);
+ toCpy = gStringVar3;
+ }
+ else
+ toCpy = gBattleTextBuff3;
+ break;
+ case B_TXT_COPY_VAR_1:
+ toCpy = gStringVar1;
+ break;
+ case B_TXT_COPY_VAR_2:
+ toCpy = gStringVar2;
+ break;
+ case B_TXT_COPY_VAR_3:
+ toCpy = gStringVar3;
+ break;
+ case B_TXT_PLAYER_MON1_NAME: // first player poke name
+ GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]],
+ MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case B_TXT_OPPONENT_MON1_NAME: // first enemy poke name
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]],
+ MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case B_TXT_PLAYER_MON2_NAME: // second player poke name
+ GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]],
+ MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case B_TXT_OPPONENT_MON2_NAME: // second enemy poke name
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]],
+ MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case B_TXT_LINK_PLAYER_MON1_NAME: // link first player poke name
+ GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id]],
+ MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case B_TXT_LINK_OPPONENT_MON1_NAME: // link first opponent poke name
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 1]],
+ MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case B_TXT_LINK_PLAYER_MON2_NAME: // link second player poke name
+ GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 2]],
+ MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case B_TXT_LINK_OPPONENT_MON2_NAME: // link second opponent poke name
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 3]],
+ MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only battlerId 0/1
+ HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker,
+ gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker))])
+ break;
+ case B_TXT_ATK_PARTNER_NAME: // attacker partner name
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ GetMonData(
+ &gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) +
+ 2]], MON_DATA_NICKNAME, text);
+ else
+ GetMonData(
+ &gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) +
+ 2]], MON_DATA_NICKNAME, text);
+
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case B_TXT_ATK_NAME_WITH_PREFIX: // attacker name with prefix
+ HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker])
+ break;
+ case B_TXT_DEF_NAME_WITH_PREFIX: // target name with prefix
+ HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget])
+ break;
+ case B_TXT_EFF_NAME_WITH_PREFIX: // effect battlerId name with prefix
+ HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler])
+ break;
+ case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active battlerId name with prefix
+ HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
+ break;
+ case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active battlerId name with prefix
+ HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, gBattlerPartyIndexes[gBattleScripting.battler])
+ break;
+ case B_TXT_CURRENT_MOVE: // current move name
+ if (sBattleMsgDataPtr->currentMove >= MOVES_COUNT)
+ toCpy = (const u8 *)&sATypeMove_Table[gBattleStruct->stringMoveType];
+ else
+ toCpy = gMoveNames[sBattleMsgDataPtr->currentMove];
+ break;
+ case B_TXT_LAST_MOVE: // originally used move name
+ if (sBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT)
+ toCpy = (const u8 *)&sATypeMove_Table[gBattleStruct->stringMoveType];
+ else
+ toCpy = gMoveNames[sBattleMsgDataPtr->originallyUsedMove];
+ break;
+ case B_TXT_LAST_ITEM: // last used item
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gLastUsedItem == ITEM_ENIGMA_BERRY)
+ {
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ if ((gBattleStruct->multiplayerId != 0 && (gPotentialItemEffectBattler & BIT_SIDE))
+ || (gBattleStruct->multiplayerId == 0 && !(gPotentialItemEffectBattler & BIT_SIDE)))
+ {
+ StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
+ StringAppend(text, sText_BerrySuffix);
+ toCpy = text;
+ }
+ else
+ {
+ toCpy = sText_EnigmaBerry;
+ }
+ }
+ else
+ {
+ if (gLinkPlayers[gBattleStruct->multiplayerId].id == gPotentialItemEffectBattler)
+ {
+ StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
+ StringAppend(text, sText_BerrySuffix);
+ toCpy = text;
+ }
+ else
+ toCpy = sText_EnigmaBerry;
+ }
+ }
+ else
+ {
+ CopyItemName(gLastUsedItem, text);
+ toCpy = text;
+ }
+ }
+ else
+ {
+ CopyItemName(gLastUsedItem, text);
+ toCpy = text;
+ }
+ break;
+ case B_TXT_LAST_ABILITY: // last used ability
+ toCpy = gAbilityNames[gLastUsedAbility];
+ break;
+ case B_TXT_ATK_ABILITY: // attacker ability
+ toCpy = gAbilityNames[sBattlerAbilities[gBattlerAttacker]];
+ break;
+ case B_TXT_DEF_ABILITY: // target ability
+ toCpy = gAbilityNames[sBattlerAbilities[gBattlerTarget]];
+ break;
+ case B_TXT_SCR_ACTIVE_ABILITY: // scripting active ability
+ toCpy = gAbilityNames[sBattlerAbilities[gBattleScripting.battler]];
+ break;
+ case B_TXT_EFF_ABILITY: // effect battlerId ability
+ toCpy = gAbilityNames[sBattlerAbilities[gEffectBattler]];
+ break;
+ case B_TXT_TRAINER1_CLASS: // trainer class name
+ if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
+ toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()];
+ else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ toCpy = gTrainerClassNames[sub_80447F0()];
+ else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
+ toCpy = gTrainerClassNames[GetBattleTowerTrainerClassNameId()];
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
+ toCpy = gTrainerClassNames[sub_815DA10()];
+ else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
+ toCpy = gTrainerClassNames[GetEreaderTrainerClassId()];
+ else
+ toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent_A].trainerClass];
+ break;
+ case B_TXT_TRAINER1_NAME: // trainer1 name
+ if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
+ {
+ for (i = 0; i < (s32)NELEMS(gBattleResources->secretBase->trainerName); i++)
+ text[i] = gBattleResources->secretBase->trainerName[i];
+ text[i] = EOS;
+ toCpy = text;
+ }
+ if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
+ {
+ toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
+ {
+ GetBattleTowerTrainerName(text);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
+ {
+ sub_815DA28(text);
+ toCpy = text;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
+ {
+ CopyEReaderTrainerName5(text);
+ toCpy = text;
+ }
+ else
+ {
+ if (gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_RIVAL
+ || gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_RIVAL_2
+ || gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_CHAMPION_2)
+ toCpy = GetExpandedPlaceholder(6);
+ else
+ toCpy = gTrainers[gTrainerBattleOpponent_A].trainerName;
+ }
+ break;
+ case B_TXT_LINK_PLAYER_NAME: // link player name
+ toCpy = gLinkPlayers[multiplayerId].name;
+ break;
+ case B_TXT_LINK_PARTNER_NAME: // link partner name
+ toCpy = gLinkPlayers[GetBattlerMultiplayerId(BATTLE_PARTNER(gLinkPlayers[multiplayerId].id))].name;
+ break;
+ case B_TXT_LINK_OPPONENT1_NAME: // link opponent 1 name
+ toCpy = gLinkPlayers[GetBattlerMultiplayerId(BATTLE_OPPOSITE(gLinkPlayers[multiplayerId].id))].name;
+ break;
+ case B_TXT_LINK_OPPONENT2_NAME: // link opponent 2 name
+ toCpy = gLinkPlayers[GetBattlerMultiplayerId(
+ BATTLE_PARTNER(BATTLE_OPPOSITE(gLinkPlayers[multiplayerId].id)))].name;
+ break;
+ case B_TXT_LINK_SCR_TRAINER_NAME: // link scripting active name
+ toCpy = gLinkPlayers[GetBattlerMultiplayerId(gBattleScripting.battler)].name;
+ break;
+ case B_TXT_PLAYER_NAME: // player name
+ toCpy = gSaveBlock2Ptr->playerName;
+ break;
+ case B_TXT_TRAINER1_LOSE_TEXT: // trainerA lose text
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
+ {
+ sub_815DC40(gStringVar4, 0);
+ toCpy = gStringVar4;
+ }
+ else
+ {
+ toCpy = GetTrainerALoseText();
+ }
+ break;
+ case B_TXT_TRAINER1_WIN_TEXT: // trainerA win text
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
+ {
+ sub_815DBF4(gStringVar4, 0);
+ toCpy = gStringVar4;
+ }
+ else
+ {
+ toCpy = GetTrainerWonSpeech();
+ }
+ break;
+ case B_TXT_TRAINER2_LOSE_TEXT:
+ sub_815DC40(gStringVar4, 1);
+ toCpy = gStringVar4;
+ break;
+ case B_TXT_TRAINER2_WIN_TEXT:
+ sub_815DBF4(gStringVar4, 1);
+ toCpy = gStringVar4;
+ break;
+ case B_TXT_26: // ?
+ HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, *(&gBattleStruct->field_52))
+ break;
+ case B_TXT_PC_CREATOR_NAME: // lanette pc
+ if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC))
+ toCpy = sText_Bills;
+ else
+ toCpy = sText_Someones;
+ break;
+ case B_TXT_ATK_PREFIX2:
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ toCpy = sText_AllyPkmnPrefix2;
+ else
+ toCpy = sText_FoePkmnPrefix3;
+ break;
+ case B_TXT_DEF_PREFIX2:
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ toCpy = sText_AllyPkmnPrefix2;
+ else
+ toCpy = sText_FoePkmnPrefix3;
+ break;
+ case B_TXT_ATK_PREFIX1:
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ toCpy = sText_AllyPkmnPrefix;
+ else
+ toCpy = sText_FoePkmnPrefix2;
+ break;
+ case B_TXT_DEF_PREFIX1:
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ toCpy = sText_AllyPkmnPrefix;
+ else
+ toCpy = sText_FoePkmnPrefix2;
+ break;
+ case B_TXT_ATK_PREFIX3:
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ toCpy = sText_AllyPkmnPrefix3;
+ else
+ toCpy = sText_FoePkmnPrefix4;
+ break;
+ case B_TXT_DEF_PREFIX3:
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ toCpy = sText_AllyPkmnPrefix3;
+ else
+ toCpy = sText_FoePkmnPrefix4;
+ break;
+ }
+
+ // missing if (toCpy != NULL) check
+ while (*toCpy != EOS)
+ {
+ dst[dstId] = *toCpy;
+ dstId++;
+ toCpy++;
+ }
+ if (*src == B_TXT_TRAINER1_LOSE_TEXT || *src == B_TXT_TRAINER1_WIN_TEXT
+ || *src == B_TXT_TRAINER2_LOSE_TEXT || *src == B_TXT_TRAINER2_WIN_TEXT)
+ {
+ dst[dstId] = EXT_CTRL_CODE_BEGIN;
+ dstId++;
+ dst[dstId] = 9;
+ dstId++;
+ }
+ }
+ else
+ {
+ dst[dstId] = *src;
+ dstId++;
+ }
+ src++;
+ }
+
+ dst[dstId] = *src;
+ dstId++;
+
+ return dstId;
+}
+
+static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
+{
+ u32 srcId = 1;
+ u32 value = 0;
+ u8 text[12];
+ u16 hword;
+
+ *dst = EOS;
+ while (src[srcId] != B_BUFF_EOS)
+ {
+ switch (src[srcId])
+ {
+ case B_BUFF_STRING: // battle string
+ hword = T1_READ_16(&src[srcId + 1]);
+ StringAppend(dst, gBattleStringsTable[hword - BATTLESTRINGS_ID_ADDER]);
+ srcId += 3;
+ break;
+ case B_BUFF_NUMBER: // int to string
+ switch (src[srcId + 1])
+ {
+ case 1:
+ value = src[srcId + 3];
+ break;
+ case 2:
+ value = T1_READ_16(&src[srcId + 3]);
+ break;
+ case 4:
+ value = T1_READ_32(&src[srcId + 3]);
+ break;
+ }
+ ConvertIntToDecimalStringN(dst, value, STR_CONV_MODE_LEFT_ALIGN, src[srcId + 2]);
+ srcId += src[srcId + 1] + 3;
+ break;
+ case B_BUFF_MOVE: // move name
+ StringAppend(dst, gMoveNames[T1_READ_16(&src[srcId + 1])]);
+ srcId += 3;
+ break;
+ case B_BUFF_TYPE: // type name
+ StringAppend(dst, gTypeNames[src[srcId + 1]]);
+ srcId += 2;
+ break;
+ case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix
+ if (GetBattlerSide(src[srcId + 1]) == B_SIDE_PLAYER)
+ {
+ GetMonData(&gPlayerParty[src[srcId + 2]], MON_DATA_NICKNAME, text);
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ StringAppend(dst, sText_FoePkmnPrefix);
+ else
+ StringAppend(dst, sText_WildPkmnPrefix);
+
+ GetMonData(&gEnemyParty[src[srcId + 2]], MON_DATA_NICKNAME, text);
+ }
+ StringGetEnd10(text);
+ StringAppend(dst, text);
+ srcId += 3;
+ break;
+ case B_BUFF_STAT: // stats
+ StringAppend(dst, gStatNamesTable[src[srcId + 1]]);
+ srcId += 2;
+ break;
+ case B_BUFF_SPECIES: // species name
+ GetSpeciesName(dst, T1_READ_16(&src[srcId + 1]));
+ srcId += 3;
+ break;
+ case B_BUFF_MON_NICK: // poke nick without prefix
+ if (GetBattlerSide(src[srcId + 1]) == B_SIDE_PLAYER)
+ GetMonData(&gPlayerParty[src[srcId + 2]], MON_DATA_NICKNAME, dst);
+ else
+ GetMonData(&gEnemyParty[src[srcId + 2]], MON_DATA_NICKNAME, dst);
+ StringGetEnd10(dst);
+ srcId += 3;
+ break;
+ case B_BUFF_NEGATIVE_FLAVOR: // flavor table
+ StringAppend(dst, gPokeblockWasTooXStringTable[src[srcId + 1]]);
+ srcId += 2;
+ break;
+ case B_BUFF_ABILITY: // ability names
+ StringAppend(dst, gAbilityNames[src[srcId + 1]]);
+ srcId += 2;
+ break;
+ case B_BUFF_ITEM: // item name
+ hword = T1_READ_16(&src[srcId + 1]);
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (hword == ITEM_ENIGMA_BERRY)
+ {
+ if (gLinkPlayers[gBattleStruct->multiplayerId].id == gPotentialItemEffectBattler)
+ {
+ StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
+ StringAppend(dst, sText_BerrySuffix);
+ }
+ else
+ {
+ StringAppend(dst, sText_EnigmaBerry);
+ }
+ }
+ else
+ {
+ CopyItemName(hword, dst);
+ }
+ }
+ else
+ {
+ CopyItemName(hword, dst);
+ }
+ srcId += 3;
+ break;
+ }
+ }
+}
+
+// Loads one of two text strings into the provided buffer. This is functionally
+// unused, since the value loaded into the buffer is not read; it loaded one of
+// two particles (either "は" or "の") which works in tandem with ChooseTypeOfMoveUsedString
+// below to effect changes in the meaning of the line.
+static void ChooseMoveUsedParticle(u8* textBuff)
+{
+ s32 counter = 0;
+ u32 i = 0;
+
+ while (counter != MAX_MON_MOVES)
+ {
+ if (sGrammarMoveUsedTable[i] == 0)
+ counter++;
+ if (sGrammarMoveUsedTable[i++] == sBattleMsgDataPtr->currentMove)
+ break;
+ }
+
+ if (counter >= 0)
+ {
+ if (counter <= 2)
+ StringCopy(textBuff, sText_SpaceIs); // is
+ else if (counter <= MAX_MON_MOVES)
+ StringCopy(textBuff, sText_ApostropheS); // 's
+ }
+}
+
+// Appends "!" to the text buffer `dst`. In the original Japanese this looked
+// into the table of moves at sGrammarMoveUsedTable and varied the line accordingly.
+//
+// sText_ExclamationMark was a plain "!", used for any attack not on the list.
+// It resulted in the translation "<NAME>'s <ATTACK>!".
+//
+// sText_ExclamationMark2 was "を つかった!". This resulted in the translation
+// "<NAME> used <ATTACK>!", which was used for all attacks in English.
+//
+// sText_ExclamationMark3 was "した!". This was used for those moves whose
+// names were verbs, such as Recover, and resulted in translations like "<NAME>
+// recovered itself!".
+//
+// sText_ExclamationMark4 was "を した!" This resulted in a translation of
+// "<NAME> did an <ATTACK>!".
+//
+// sText_ExclamationMark5 was " こうげき!" This resulted in a translation of
+// "<NAME>'s <ATTACK> attack!".
+static void ChooseTypeOfMoveUsedString(u8* dst)
+{
+ s32 counter = 0;
+ s32 i = 0;
+
+ while (*dst != EOS)
+ dst++;
+
+ while (counter != MAX_MON_MOVES)
+ {
+ if (sGrammarMoveUsedTable[i] == MOVE_NONE)
+ counter++;
+ if (sGrammarMoveUsedTable[i++] == sBattleMsgDataPtr->currentMove)
+ break;
+ }
+
+ switch (counter)
+ {
+ case 0:
+ StringCopy(dst, sText_ExclamationMark);
+ break;
+ case 1:
+ StringCopy(dst, sText_ExclamationMark2);
+ break;
+ case 2:
+ StringCopy(dst, sText_ExclamationMark3);
+ break;
+ case 3:
+ StringCopy(dst, sText_ExclamationMark4);
+ break;
+ case 4:
+ StringCopy(dst, sText_ExclamationMark5);
+ break;
+ }
+}
+
+static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
+ {PIXEL_FILL(0xf), 2, 0x02, 2, 0, 2, 1, 0x1, 0xf, 0x6},
+ {PIXEL_FILL(0xf), 2, 0x02, 2, 0, 2, 0, 0x1, 0xf, 0x6},
+ {PIXEL_FILL(0xe), 1, 0x00, 2, 0, 2, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 0, 0x00, 1, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 0, 0x00, 1, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 0, 0x00, 1, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 0, 0x00, 1, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 0, 0x00, 2, 0, 0, 0, 0xc, 0xe, 0xb},
+ {PIXEL_FILL(0xe), 0, 0x00, 2, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 1, 0x0a, 2, 0, 2, 0, 0xc, 0xe, 0xb},
+ {PIXEL_FILL(0xe), 1, 0x00, 2, 0, 2, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 1, 0x00, 2, 0, 2, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 2, 0x00, 0, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0x0), 0, 0x20, 0, 0, 0, 0, 0x1, 0x0, 0x2},
+ {PIXEL_FILL(0xe), 2, 0x00, 2, 1, 2, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 2, 0x00, 2, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 2, 0x00, 2, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 2, 0x00, 2, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 2, 0x00, 2, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 2, 0x00, 2, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0xe), 2, 0x00, 2, 0, 0, 0, 0xd, 0xe, 0xf},
+ {PIXEL_FILL(0x0), 2, 0x00, 2, 0, 0, 0, 0x1, 0x0, 0x6},
+ {PIXEL_FILL(0x0), 2, 0x00, 2, 0, 0, 0, 0x1, 0x0, 0x6},
+ {PIXEL_FILL(0x0), 2, 0x00, 2, 0, 0, 0, 0x1, 0x0, 0x6},
+ {PIXEL_FILL(0x1), 4, 0x00, 1, 0, 1, 1, 0x2, 0x1, 0x3}
+};
+
+const u8 gUnknown_83FEC90[] = {0x04, 0x05, 0x02, 0x02};
+
+void BattlePutTextOnWindow(const u8 *text, u8 windowId) {
+ bool32 copyToVram;
+ struct TextPrinterTemplate printerTemplate;
+ u8 speed;
+ int x;
+ u8 context;
+
+ u8 textFlags = windowId & 0xC0;
+ windowId &= 0x3F;
+ if (!(textFlags & 0x80))
+ FillWindowPixelBuffer(windowId, sTextOnWindowsInfo_Normal[windowId].fillValue);
+ if (textFlags & 0x40) {
+ context = ContextNpcGetTextColor();
+ printerTemplate.fontId = gUnknown_83FEC90[context];
+ }
+ else {
+ printerTemplate.fontId = sTextOnWindowsInfo_Normal[windowId].fontId;
+ }
+ switch (windowId)
+ {
+ case 15 ... 20:
+ x = (48 - GetStringWidth(sTextOnWindowsInfo_Normal[windowId].fontId, text,
+ sTextOnWindowsInfo_Normal[windowId].letterSpacing)) / 2;
+ break;
+ case 21 ... 23:
+ x = (64 - GetStringWidth(sTextOnWindowsInfo_Normal[windowId].fontId, text,
+ sTextOnWindowsInfo_Normal[windowId].letterSpacing)) / 2;
+ break;
+ default:
+ x = sTextOnWindowsInfo_Normal[windowId].x;
+ break;
+ }
+ if (x < 0)
+ x = 0;
+ printerTemplate.currentChar = text;
+ printerTemplate.windowId = windowId;
+ printerTemplate.x = x;
+ printerTemplate.y = sTextOnWindowsInfo_Normal[windowId].y;
+ printerTemplate.currentX = printerTemplate.x;
+ printerTemplate.currentY = printerTemplate.y;
+ printerTemplate.letterSpacing = sTextOnWindowsInfo_Normal[windowId].letterSpacing;
+ printerTemplate.lineSpacing = sTextOnWindowsInfo_Normal[windowId].lineSpacing;
+ printerTemplate.unk = 0;
+ printerTemplate.fgColor = sTextOnWindowsInfo_Normal[windowId].fgColor;
+ printerTemplate.bgColor = sTextOnWindowsInfo_Normal[windowId].bgColor;
+ printerTemplate.shadowColor = sTextOnWindowsInfo_Normal[windowId].shadowColor;
+ if (windowId == 24)
+ gTextFlags.useAlternateDownArrow = FALSE;
+ else
+ gTextFlags.useAlternateDownArrow = TRUE;
+
+ if ((gBattleTypeFlags & BATTLE_TYPE_LINK) || ((gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) && windowId != 24))
+ gTextFlags.autoScroll = TRUE;
+ else
+ gTextFlags.autoScroll = FALSE;
+
+ if (windowId == 0 || windowId == 24)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ speed = 1;
+ else
+ speed = GetTextSpeedSetting();
+ gTextFlags.canABSpeedUpPrint = TRUE;
+ }
+ else
+ {
+ speed = sTextOnWindowsInfo_Normal[windowId].speed;
+ gTextFlags.canABSpeedUpPrint = FALSE;
+ }
+
+ AddTextPrinter(&printerTemplate, speed, NULL);
+ if (!(textFlags & 0x80))
+ {
+ PutWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 3);
+ }
+}
+
+bool8 sub_80D89B0(u16 stringId)
+{
+ if (stringId == STRINGID_TRAINER1LOSETEXT || stringId == STRINGID_TRAINER2CLASS || stringId == STRINGID_TRAINER1WINTEXT || stringId == STRINGID_TRAINER2NAME)
+ return TRUE;
+ return FALSE;
+}
+
+void SetPpNumbersPaletteInMoveSelection(void)
+{
+ struct ChooseMoveStruct *chooseMoveStruct = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ const u16 *palPtr = gUnknown_8D2FBB4;
+ u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]],
+ chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]);
+
+ gPlttBufferUnfaded[92] = palPtr[(var * 2) + 0];
+ gPlttBufferUnfaded[91] = palPtr[(var * 2) + 1];
+
+ CpuCopy16(&gPlttBufferUnfaded[92], &gPlttBufferFaded[92], sizeof(u16));
+ CpuCopy16(&gPlttBufferUnfaded[91], &gPlttBufferFaded[91], sizeof(u16));
+}
+
+u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp)
+{
+ if (maxPp == currentPp)
+ {
+ return 3;
+ }
+ else if (maxPp <= 2)
+ {
+ if (currentPp > 1)
+ return 3;
+ else
+ return 2 - currentPp;
+ }
+ else if (maxPp <= 7)
+ {
+ if (currentPp > 2)
+ return 3;
+ else
+ return 2 - currentPp;
+ }
+ else
+ {
+ if (currentPp == 0)
+ return 2;
+ if (currentPp <= maxPp / 4)
+ return 1;
+ if (currentPp > maxPp / 2)
+ return 3;
+ }
+
+ return 0;
+}
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 114bf0b57..943d8504c 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -13,6 +13,8 @@
#include "wild_encounter.h"
#include "constants/songs.h"
+static EWRAM_DATA u8 *gUnknown_203AAB0 = NULL;
+
static void FieldCallback_SweetScent(void);
static void StartSweetScentFieldEffect(void);
static void TrySweetScentEncounter(u8 taskId);
@@ -20,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 9aaddc142..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;
@@ -4796,9 +4796,9 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
static void sub_8042D50(int stat)
{
gBattlerTarget = gBattlerInMenuId;
- StringCopy(gBattleTextBuff1, gUnknown_83FD5D0[gUnknown_825DFF0[stat]]);
- StringCopy(gBattleTextBuff2, BattleText_Rose);
- BattleStringExpandPlaceholdersToDisplayedString(BattleText_UnknownString3);
+ StringCopy(gBattleTextBuff1, gStatNamesTable[gUnknown_825DFF0[stat]]);
+ StringCopy(gBattleTextBuff2, gBattleText_Rose);
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleText_UnknownString3);
}
const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId)
@@ -4837,7 +4837,7 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId)
else
{
gBattlerAttacker = gBattlerInMenuId;
- BattleStringExpandPlaceholdersToDisplayedString(BattleText_GetPumped);
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleText_GetPumped);
}
}
}
@@ -4845,7 +4845,7 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId)
if (itemEffect[3] & 0x80)
{
gBattlerAttacker = gBattlerInMenuId;
- BattleStringExpandPlaceholdersToDisplayedString(BattleText_MistShroud);
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleText_MistShroud);
}
return gDisplayedStringBattle;
@@ -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 7a25f1726..e068902f2 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -426,21 +426,14 @@ gPlayerFacingPosition: @ 2039A04
.include "src/coins.o"
.align 2
.include "src/battle_transition.o"
-
-gUnknown_2039A30: @ 2039A30
- .space 0x4
-
-gUnknown_2039A34: @ 2039A34
- .space 0x4
-
+ .align 2
+ .include "src/battle_message.o"
.align 2
.include "src/save.o"
.align 2
.include "src/mystery_event_script.o"
-
-gUnknown_203AAB0: @ 203AAB0
- .space 0x4
-
+ .align 2
+ .include "src/fldeff_sweetscent.o"
.align 2
.include "src/learn_move.o"
.align 2
@@ -569,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
@@ -596,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
@@ -687,7 +636,7 @@ gUnknown_203B164: @ 203B164
gUnknown_203B168: @ 203B168
.space 0x4
-gUnknown_203B16C: @ 203B16C
+gLastViewedMonIndex: @ 203B16C
.space 0x1
gUnknown_203B16D: @ 203B16D