summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-11-24 03:03:29 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-11-24 03:03:29 +0800
commit972c044d71a870128d2ac41b5b407a1db41d60de (patch)
tree597c13c139566d6923bd5ee9b83a9c8dc357664a
parent5c1bdd0eb54b4159e4d66d9f733b0f66697a2436 (diff)
party_menu fourth quarter
-rw-r--r--asm/item_menu.s4
-rw-r--r--asm/link_rfu_3.s4
-rw-r--r--asm/party_menu.s4264
-rw-r--r--asm/pokemon_special_anim.s6
-rw-r--r--data/event_scripts.s2
-rw-r--r--data/specials.inc2
-rw-r--r--data/strings.s14
-rw-r--r--include/battle_tower.h2
-rw-r--r--include/constants/party_menu.h4
-rw-r--r--include/item.h3
-rw-r--r--include/party_menu.h12
-rw-r--r--include/player_pc.h5
-rw-r--r--include/pokemon.h4
-rw-r--r--include/pokemon_special_anim.h2
-rw-r--r--include/strings.h10
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_gfx_sfx_util.c4
-rw-r--r--src/battle_main.c4
-rw-r--r--src/battle_script_commands.c4
-rw-r--r--src/item.c2
-rw-r--r--src/item_pc.c2
-rw-r--r--src/item_use.c8
-rw-r--r--src/mailbox_pc.c4
-rw-r--r--src/party_menu.c1491
-rw-r--r--src/player_pc.c24
-rw-r--r--src/pokemon.c10
26 files changed, 1551 insertions, 4341 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index c2c1925f2..3f662656e 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -6857,7 +6857,7 @@ _0810B564:
bl DestroyListMenuTask
bl sub_810AECC
ldr r1, _0810B5B0 @ =gItemUseCB
- ldr r0, _0810B5B4 @ =ItemUseCB_Medicine
+ ldr r0, _0810B5B4 @ =ItemUseCB_MedicineStep
str r0, [r1]
ldr r0, _0810B5B8 @ =ChooseMonForInBattleItem
bl ItemMenu_SetExitCallback
@@ -6869,7 +6869,7 @@ _0810B564:
b _0810B5C6
.align 2, 0
_0810B5B0: .4byte gItemUseCB
-_0810B5B4: .4byte ItemUseCB_Medicine
+_0810B5B4: .4byte ItemUseCB_MedicineStep
_0810B5B8: .4byte ChooseMonForInBattleItem
_0810B5BC: .4byte sub_810B070
_0810B5C0:
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s
index d996721ad..1e076a55e 100644
--- a/asm/link_rfu_3.s
+++ b/asm/link_rfu_3.s
@@ -7006,7 +7006,7 @@ _08119512:
str r0, [r1]
ldr r1, _08119538 @ =CB2_ReturnToField
movs r0, 0x8
- bl ChooseMonForMoveTutor
+ bl sub_81277F4
b _081198DC
.align 2, 0
_08119528: .4byte gPaletteFade
@@ -7359,7 +7359,7 @@ _081197CA:
str r0, [r1]
ldr r1, _0811983C @ =CB2_ReturnToField
movs r0, 0x9
- bl ChooseMonForMoveTutor
+ bl sub_81277F4
adds r0, r6, 0
bl sub_81186B0
ldrh r0, [r7, 0x2]
diff --git a/asm/party_menu.s b/asm/party_menu.s
deleted file mode 100644
index 0e68a23b2..000000000
--- a/asm/party_menu.s
+++ /dev/null
@@ -1,4264 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start Task_TryLearningNextMoveAfterText
-Task_TryLearningNextMoveAfterText: @ 812628C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsPartyMenuTextPrinterActive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081262A4
- adds r0, r4, 0
- bl Task_TryLearningNextMove
-_081262A4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end Task_TryLearningNextMoveAfterText
-
- 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 @ =gPartyMenu
- 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 gPartyMenu
-_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 @ =gPartyMenuUseExitCallback
- movs r0, 0
- strb r0, [r1]
- ldr r0, _08126328 @ =gText_WontHaveEffect
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- 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 gPartyMenuUseExitCallback
-_08126328: .4byte gText_WontHaveEffect
-_0812632C: .4byte gTasks
-_08126330:
- adds r0, r6, 0
- bl sub_8124DC0
- ldr r1, _08126348 @ =gItemUseCB
- ldr r0, _0812634C @ =ItemUseCB_RareCandy
- str r0, [r1]
-_0812633C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126348: .4byte gItemUseCB
-_0812634C: .4byte ItemUseCB_RareCandy
- thumb_func_end dp05_rare_candy
-
- thumb_func_start ItemUseCB_RareCandy
-ItemUseCB_RareCandy: @ 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 @ =gPartyMenu
- 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 @ =sPartyMenuInternal
- 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 @ =gPartyMenuUseExitCallback
- 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 UpdateMonDisplayInfoAfterRareCandy
- 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 @ =gText_PkmnElevatedToLvVar2
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- 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 @ =Task_DisplayLevelUpStatsPg1
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126410: .4byte gPartyMenu
-_08126414: .4byte gPlayerParty
-_08126418: .4byte sPartyMenuInternal
-_0812641C: .4byte gSpecialVar_ItemId
-_08126420: .4byte gPartyMenuUseExitCallback
-_08126424: .4byte 0x0000ffff
-_08126428: .4byte gStringVar1
-_0812642C: .4byte gStringVar2
-_08126430: .4byte gStringVar4
-_08126434: .4byte gText_PkmnElevatedToLvVar2
-_08126438: .4byte gTasks
-_0812643C: .4byte Task_DisplayLevelUpStatsPg1
- thumb_func_end ItemUseCB_RareCandy
-
- thumb_func_start UpdateMonDisplayInfoAfterRareCandy
-UpdateMonDisplayInfoAfterRareCandy: @ 8126440
- push {r4-r7,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r0, 24
- adds r7, r0, 0
- ldr r6, _081264C0 @ =sPartyMenuBoxes
- lsls r4, r7, 4
- ldr r1, [r6]
- adds r1, r4
- adds r0, r5, 0
- bl SetPartyMonAilmentGfx
- 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 DisplayPartyPokemonLevelCheck
-_0812647C:
- ldr r1, [r6]
- adds r1, r4
- adds r0, r5, 0
- movs r2, 0x1
- bl DisplayPartyPokemonHPCheck
- ldr r1, [r6]
- adds r1, r4
- adds r0, r5, 0
- movs r2, 0x1
- bl DisplayPartyPokemonMaxHPCheck
- ldr r1, [r6]
- adds r1, r4
- adds r0, r5, 0
- bl DisplayPartyPokemonHPBarCheck
- ldr r0, [r6]
- adds r0, r4, r0
- ldrb r0, [r0, 0x9]
- adds r1, r5, 0
- bl UpdatePartyMonHPBar
- adds r0, r7, 0
- movs r1, 0x1
- bl AnimatePartySlot
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081264C0: .4byte sPartyMenuBoxes
-_081264C4: .4byte gSprites
- thumb_func_end UpdateMonDisplayInfoAfterRareCandy
-
- thumb_func_start Task_DisplayLevelUpStatsPg1
-Task_DisplayLevelUpStatsPg1: @ 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 IsPartyMenuTextPrinterActive
- 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 DisplayLevelUpStatsPg1
- ldr r0, _08126520 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08126524 @ =Task_DisplayLevelUpStatsPg2
- str r0, [r1]
-_08126514:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812651C: .4byte gMain
-_08126520: .4byte gTasks
-_08126524: .4byte Task_DisplayLevelUpStatsPg2
- thumb_func_end Task_DisplayLevelUpStatsPg1
-
- thumb_func_start Task_DisplayLevelUpStatsPg2
-Task_DisplayLevelUpStatsPg2: @ 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 DisplayLevelUpStatsPg2
- ldr r0, _08126568 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812656C @ =Task_TryLearnNewMoves
- str r0, [r1]
-_0812655C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08126564: .4byte gMain
-_08126568: .4byte gTasks
-_0812656C: .4byte Task_TryLearnNewMoves
- thumb_func_end Task_DisplayLevelUpStatsPg2
-
- thumb_func_start DisplayLevelUpStatsPg1
-DisplayLevelUpStatsPg1: @ 8126570
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r0, _081265B8 @ =sPartyMenuInternal
- ldr r5, [r0]
- movs r0, 0x86
- lsls r0, 2
- adds r4, r5, r0
- bl CreateLevelUpStatsWindow
- 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 sPartyMenuInternal
- thumb_func_end DisplayLevelUpStatsPg1
-
- thumb_func_start DisplayLevelUpStatsPg2
-DisplayLevelUpStatsPg2: @ 81265BC
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _081265F4 @ =sPartyMenuInternal
- 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 sPartyMenuInternal
- thumb_func_end DisplayLevelUpStatsPg2
-
- thumb_func_start Task_TryLearnNewMoves
-Task_TryLearnNewMoves: @ 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 RemoveLevelUpStatsWindow
- ldr r4, _08126654 @ =gPartyMenu
- 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 gPartyMenu
-_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 PartyMenuTryEvolution
- b _0812669A
-_08126674:
- adds r0, r5, 0
- bl DisplayMonNeedsToReplaceMove
- b _0812669A
-_0812667C:
- ldr r0, _0812668C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _08126690 @ =Task_TryLearningNextMove
- str r0, [r1]
- b _0812669A
- .align 2, 0
-_0812668C: .4byte gTasks
-_08126690: .4byte Task_TryLearningNextMove
-_08126694:
- adds r0, r5, 0
- bl DisplayMonLearnedMove
-_0812669A:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end Task_TryLearnNewMoves
-
- thumb_func_start Task_TryLearningNextMove
-Task_TryLearningNextMove: @ 81266A0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _081266D0 @ =gPartyMenu
- 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 gPartyMenu
-_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 PartyMenuTryEvolution
- b _081266FE
-_081266F0:
- adds r0, r4, 0
- bl DisplayMonNeedsToReplaceMove
- b _081266FE
-_081266F8:
- adds r0, r4, 0
- bl DisplayMonLearnedMove
-_081266FE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end Task_TryLearningNextMove
-
- thumb_func_start PartyMenuTryEvolution
-PartyMenuTryEvolution: @ 8126704
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _08126748 @ =gPartyMenu
- 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 FreePartyPointers
- 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 gPartyMenu
-_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 @ =Task_ClosePartyMenuAfterText
- str r0, [r1]
-_08126762:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126768: .4byte gTasks
-_0812676C: .4byte Task_ClosePartyMenuAfterText
- thumb_func_end PartyMenuTryEvolution
-
- thumb_func_start DisplayMonNeedsToReplaceMove
-DisplayMonNeedsToReplaceMove: @ 8126770
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _081267DC @ =gPartyMenu
- 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 @ =gText_PkmnNeedsToReplaceMove
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- 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 @ =Task_ReplaceMoveYesNo
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081267DC: .4byte gPartyMenu
-_081267E0: .4byte gPlayerParty
-_081267E4: .4byte gStringVar1
-_081267E8: .4byte gStringVar2
-_081267EC: .4byte gMoveToLearn
-_081267F0: .4byte gMoveNames
-_081267F4: .4byte gStringVar4
-_081267F8: .4byte gText_PkmnNeedsToReplaceMove
-_081267FC: .4byte gTasks
-_08126800: .4byte Task_ReplaceMoveYesNo
- thumb_func_end DisplayMonNeedsToReplaceMove
-
- thumb_func_start DisplayMonLearnedMove
-DisplayMonLearnedMove: @ 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 @ =gPartyMenu
- 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 @ =gText_PkmnLearnedMove3
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- 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 @ =Task_DoLearnedMoveFanfareAfterText
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08126870: .4byte gPartyMenu
-_08126874: .4byte gPlayerParty
-_08126878: .4byte gStringVar1
-_0812687C: .4byte gStringVar2
-_08126880: .4byte gMoveNames
-_08126884: .4byte gStringVar4
-_08126888: .4byte gText_PkmnLearnedMove3
-_0812688C: .4byte gTasks
-_08126890: .4byte Task_DoLearnedMoveFanfareAfterText
- thumb_func_end DisplayMonLearnedMove
-
- thumb_func_start ItemUseCB_SacredAsh
-ItemUseCB_SacredAsh: @ 8126894
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _081268C8 @ =sPartyMenuInternal
- 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 @ =gPartyMenu
- ldrb r1, [r1, 0x9]
- lsls r1, 24
- asrs r1, 24
- movs r3, 0x87
- lsls r3, 2
- adds r2, r3
- strh r1, [r2]
- bl UseSacredAsh
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081268C8: .4byte sPartyMenuInternal
-_081268CC: .4byte 0x0000021a
-_081268D0: .4byte gPartyMenu
- thumb_func_end ItemUseCB_SacredAsh
-
- thumb_func_start UseSacredAsh
-UseSacredAsh: @ 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 @ =gPartyMenu
- 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 @ =Task_SacredAshLoop
- str r0, [r1]
- b _081269EE
- .align 2, 0
-_08126930: .4byte gPartyMenu
-_08126934: .4byte gPlayerParty
-_08126938: .4byte gSpecialVar_ItemId
-_0812693C: .4byte gTasks
-_08126940: .4byte Task_SacredAshLoop
-_08126944:
- movs r0, 0x1
- bl PlaySE
- ldr r7, _08126A00 @ =sPartyMenuInternal
- 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 @ =sPartyMenuBoxes
- movs r0, 0x9
- ldrsb r0, [r6, r0]
- lsls r0, 4
- ldr r1, [r4]
- adds r1, r0
- adds r0, r5, 0
- bl SetPartyMonAilmentGfx
- 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 DisplayPartyPokemonLevelCheck
-_0812699C:
- ldr r0, [r7]
- movs r1, 0x87
- lsls r1, 2
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl AnimatePartySlot
- ldrb r0, [r6, 0x9]
- movs r1, 0x1
- bl AnimatePartySlot
- 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 @ =Task_SacredAshDisplayHPRestored
- str r0, [sp]
- mov r0, r9
- movs r2, 0x1
- bl PartyMenuModifyHP
- mov r0, r9
- movs r1, 0
- mov r2, r8
- bl ResetHPTaskData
- 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 sPartyMenuInternal
-_08126A04: .4byte 0x0000021a
-_08126A08: .4byte gUnknown_203B0D0
-_08126A0C: .4byte sPartyMenuBoxes
-_08126A10: .4byte gSprites
-_08126A14: .4byte Task_SacredAshDisplayHPRestored
- thumb_func_end UseSacredAsh
-
- thumb_func_start Task_SacredAshLoop
-Task_SacredAshLoop: @ 8126A18
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsPartyMenuTextPrinterActive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08126AF6
- ldr r5, _08126A80 @ =sPartyMenuInternal
- ldr r2, [r5]
- movs r0, 0x86
- lsls r0, 2
- adds r1, r2, r0
- movs r3, 0
- ldrsh r0, [r1, r3]
- ldr r3, _08126A84 @ =gPartyMenu
- 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 @ =gPartyMenuUseExitCallback
- strb r1, [r0]
- ldr r0, _08126A90 @ =gText_WontHaveEffect
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- b _08126ABE
- .align 2, 0
-_08126A80: .4byte sPartyMenuInternal
-_08126A84: .4byte gPartyMenu
-_08126A88: .4byte 0x0000021a
-_08126A8C: .4byte gPartyMenuUseExitCallback
-_08126A90: .4byte gText_WontHaveEffect
-_08126A94:
- ldr r1, _08126AD4 @ =gPartyMenuUseExitCallback
- 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 @ =Task_ClosePartyMenuAfterText
- str r1, [r0]
- ldr r1, _08126AEC @ =gPartyMenu
- movs r0, 0
- strb r0, [r1, 0x9]
- b _08126AF6
- .align 2, 0
-_08126AD4: .4byte gPartyMenuUseExitCallback
-_08126AD8: .4byte gUnknown_203B0D0
-_08126ADC: .4byte gSpecialVar_ItemId
-_08126AE0: .4byte 0x0000ffff
-_08126AE4: .4byte gTasks
-_08126AE8: .4byte Task_ClosePartyMenuAfterText
-_08126AEC: .4byte gPartyMenu
-_08126AF0:
- adds r0, r4, 0
- bl UseSacredAsh
-_08126AF6:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end Task_SacredAshLoop
-
- thumb_func_start Task_SacredAshDisplayHPRestored
-Task_SacredAshDisplayHPRestored: @ 8126AFC
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _08126B44 @ =gPartyMenu
- 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 @ =gText_PkmnHPRestoredByVar2
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0
- bl DisplayPartyMenuMessage
- 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 @ =Task_SacredAshLoop
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08126B44: .4byte gPartyMenu
-_08126B48: .4byte gPlayerParty
-_08126B4C: .4byte gStringVar1
-_08126B50: .4byte gStringVar4
-_08126B54: .4byte gText_PkmnHPRestoredByVar2
-_08126B58: .4byte gTasks
-_08126B5C: .4byte Task_SacredAshLoop
- thumb_func_end Task_SacredAshDisplayHPRestored
-
- 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 @ =gPartyMenu
- 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 @ =gPartyMenuUseExitCallback
- movs r0, 0
- strb r0, [r1]
- ldr r0, _08126BC0 @ =gText_WontHaveEffect
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- 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 gPartyMenu
-_08126BB4: .4byte gPlayerParty
-_08126BB8: .4byte gSpecialVar_ItemId
-_08126BBC: .4byte gPartyMenuUseExitCallback
-_08126BC0: .4byte gText_WontHaveEffect
-_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 @ =gPartyMenu
- 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 gPartyMenu
-_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 @ =gPartyMenu
- 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 gPartyMenu
-_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 TryTutorSelectedMon
-TryTutorSelectedMon: @ 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 @ =gPartyMenu
- 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 GetTutorMove
- 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 CanMonLearnTMTutor
- 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 Task_LearnedMove
- b _08126E98
- .align 2, 0
-_08126E4C: .4byte gPaletteFade
-_08126E50: .4byte gPartyMenu
-_08126E54: .4byte gPlayerParty
-_08126E58: .4byte gStringVar1
-_08126E5C: .4byte gSpecialVar_0x8005
-_08126E60: .4byte gStringVar2
-_08126E64: .4byte gMoveNames
-_08126E68: .4byte 0xffff0000
-_08126E6C:
- ldr r1, _08126E70 @ =gText_PkmnCantLearnMove
- b _08126E76
- .align 2, 0
-_08126E70: .4byte gText_PkmnCantLearnMove
-_08126E74:
- ldr r1, _08126E80 @ =gText_PkmnAlreadyKnows
-_08126E76:
- adds r0, r6, 0
- bl DisplayLearnMoveMessageAndClose
- b _08126E98
- .align 2, 0
-_08126E80: .4byte gText_PkmnAlreadyKnows
-_08126E84:
- ldr r0, _08126EA4 @ =gText_PkmnNeedsToReplaceMove
- bl DisplayLearnMoveMessage
- ldr r1, _08126EA8 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126EAC @ =Task_ReplaceMoveYesNo
- str r1, [r0]
-_08126E98:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126EA4: .4byte gText_PkmnNeedsToReplaceMove
-_08126EA8: .4byte gTasks
-_08126EAC: .4byte Task_ReplaceMoveYesNo
- thumb_func_end TryTutorSelectedMon
-
- thumb_func_start CB2_PartyMenuFromStartMenu
-CB2_PartyMenuFromStartMenu: @ 8126EB0
- push {lr}
- sub sp, 0xC
- movs r0, 0
- str r0, [sp]
- ldr r0, _08126ED4 @ =Task_HandleChooseMonInput
- str r0, [sp, 0x4]
- ldr r0, _08126ED8 @ =CB2_ReturnToFieldWithOpenMenu
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl InitPartyMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08126ED4: .4byte Task_HandleChooseMonInput
-_08126ED8: .4byte CB2_ReturnToFieldWithOpenMenu
- thumb_func_end CB2_PartyMenuFromStartMenu
-
- thumb_func_start CB2_ChooseMonToGiveItem
-CB2_ChooseMonToGiveItem: @ 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 @ =CB2_ReturnToBagMenu
- b _08126F0A
- .align 2, 0
-_08126EF8: .4byte gSpecialVar_ItemId
-_08126EFC: .4byte CB2_ReturnToBagMenu
-_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 @ =Task_HandleChooseMonInput
- str r0, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0x5
- movs r3, 0
- bl InitPartyMenu
- ldr r1, _08126F38 @ =gPartyMenu
- 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 Task_HandleChooseMonInput
-_08126F38: .4byte gPartyMenu
-_08126F3C: .4byte gSpecialVar_ItemId
- thumb_func_end CB2_ChooseMonToGiveItem
-
- thumb_func_start TryGiveItemOrMailToSelectedMon
-TryGiveItemOrMailToSelectedMon: @ 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 @ =sPartyMenuItemId
- ldr r0, _08126F84 @ =gPartyMenu
- 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 GiveItemOrMailToSelectedMon
- b _08126FC4
- .align 2, 0
-_08126F80: .4byte sPartyMenuItemId
-_08126F84: .4byte gPartyMenu
-_08126F88: .4byte gPlayerParty
-_08126F8C:
- ldrh r0, [r5]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _08126FA0
- adds r0, r4, 0
- bl DisplayItemMustBeRemovedFirstMessage
- 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 DisplayAlreadyHoldingItemSwitchMessage
- ldr r1, _08126FD0 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08126FD4 @ =Task_SwitchItemsFromBagYesNo
- 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 Task_SwitchItemsFromBagYesNo
- thumb_func_end TryGiveItemOrMailToSelectedMon
-
- thumb_func_start GiveItemOrMailToSelectedMon
-GiveItemOrMailToSelectedMon: @ 8126FD8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, _08127004 @ =gPartyMenu
- ldrh r0, [r5, 0xC]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _08127010
- ldrh r0, [r5, 0xC]
- bl RemoveItemToGiveFromBag
- ldr r0, _08127008 @ =sPartyMenuInternal
- ldr r1, [r0]
- ldr r0, _0812700C @ =CB2_WriteMailToGiveMonFromBag
- str r0, [r1, 0x4]
- adds r0, r4, 0
- bl Task_ClosePartyMenu
- b _08127016
- .align 2, 0
-_08127004: .4byte gPartyMenu
-_08127008: .4byte sPartyMenuInternal
-_0812700C: .4byte CB2_WriteMailToGiveMonFromBag
-_08127010:
- adds r0, r4, 0
- bl GiveItemToSelectedMon
-_08127016:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GiveItemOrMailToSelectedMon
-
- thumb_func_start GiveItemToSelectedMon
-GiveItemToSelectedMon: @ 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 @ =gPartyMenu
- 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 DisplayGaveHeldItemMessage
- 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 GiveItemToMon
- adds r0, r5, 0
- bl RemoveItemToGiveFromBag
- ldr r1, _08127090 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _08127094 @ =Task_UpdateHeldItemSpriteAndClosePartyMenu
- str r1, [r0]
-_08127078:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08127084: .4byte gPaletteFade
-_08127088: .4byte gPartyMenu
-_0812708C: .4byte gPlayerParty
-_08127090: .4byte gTasks
-_08127094: .4byte Task_UpdateHeldItemSpriteAndClosePartyMenu
- thumb_func_end GiveItemToSelectedMon
-
- thumb_func_start Task_UpdateHeldItemSpriteAndClosePartyMenu
-Task_UpdateHeldItemSpriteAndClosePartyMenu: @ 8127098
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _081270D4 @ =gPartyMenu
- ldrb r4, [r0, 0x9]
- bl IsPartyMenuTextPrinterActive
- 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 @ =sPartyMenuBoxes
- lsls r2, 4
- ldr r1, [r1]
- adds r1, r2
- bl UpdatePartyMonHeldItemSprite
- adds r0, r5, 0
- bl Task_ClosePartyMenu
-_081270CC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081270D4: .4byte gPartyMenu
-_081270D8: .4byte gPlayerParty
-_081270DC: .4byte sPartyMenuBoxes
- thumb_func_end Task_UpdateHeldItemSpriteAndClosePartyMenu
-
- thumb_func_start CB2_WriteMailToGiveMonFromBag
-CB2_WriteMailToGiveMonFromBag: @ 81270E0
- push {r4-r6,lr}
- ldr r4, _08127128 @ =gPartyMenu
- 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 GiveItemToMon
- 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 @ =CB2_ReturnToPartyOrBagMenuFromWritingMail
- movs r0, 0x4
- bl DoEasyChatScreen
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08127128: .4byte gPartyMenu
-_0812712C: .4byte gPlayerParty
-_08127130: .4byte gSaveBlock1Ptr
-_08127134: .4byte 0x00002cd0
-_08127138: .4byte CB2_ReturnToPartyOrBagMenuFromWritingMail
- thumb_func_end CB2_WriteMailToGiveMonFromBag
-
- thumb_func_start CB2_ReturnToPartyOrBagMenuFromWritingMail
-CB2_ReturnToPartyOrBagMenuFromWritingMail: @ 812713C
- push {r4-r7,lr}
- sub sp, 0xC
- ldr r6, _0812718C @ =gPartyMenu
- 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 @ =sPartyMenuItemId
- 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 ReturnGiveItemToBagOrPC
- ldr r0, [r6]
- bl SetMainCallback2
- b _081271B8
- .align 2, 0
-_0812718C: .4byte gPartyMenu
-_08127190: .4byte gPlayerParty
-_08127194: .4byte gSpecialVar_Result
-_08127198: .4byte sPartyMenuItemId
-_0812719C:
- ldrb r0, [r6, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r6, 0xB]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _081271C0 @ =Task_DisplayGaveMailFromBagMessage
- str r1, [sp, 0x4]
- ldr r1, [r6]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl InitPartyMenu
-_081271B8:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081271C0: .4byte Task_DisplayGaveMailFromBagMessage
- thumb_func_end CB2_ReturnToPartyOrBagMenuFromWritingMail
-
- thumb_func_start Task_DisplayGaveMailFromBagMessage
-Task_DisplayGaveMailFromBagMessage: @ 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 @ =sPartyMenuItemId
- ldrh r0, [r1]
- cmp r0, 0
- beq _081271F8
- ldr r0, _081271F4 @ =gPartyMenu
- ldrh r0, [r0, 0xC]
- ldrh r1, [r1]
- movs r2, 0
- bl DisplaySwitchedHeldItemMessage
- b _08127210
- .align 2, 0
-_081271EC: .4byte gPaletteFade
-_081271F0: .4byte sPartyMenuItemId
-_081271F4: .4byte gPartyMenu
-_081271F8:
- ldr r2, _08127224 @ =gPartyMenu
- 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 DisplayGaveHeldItemMessage
-_08127210:
- ldr r0, _0812722C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08127230 @ =Task_UpdateHeldItemSpriteAndClosePartyMenu
- str r0, [r1]
-_0812721E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127224: .4byte gPartyMenu
-_08127228: .4byte gPlayerParty
-_0812722C: .4byte gTasks
-_08127230: .4byte Task_UpdateHeldItemSpriteAndClosePartyMenu
- thumb_func_end Task_DisplayGaveMailFromBagMessage
-
- thumb_func_start Task_SwitchItemsFromBagYesNo
-Task_SwitchItemsFromBagYesNo: @ 8127234
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsPartyMenuTextPrinterActive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08127258
- bl PartyMenuDisplayYesNoMenu
- ldr r0, _08127260 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08127264 @ =Task_HandleSwitchItemsFromBagYesNoInput
- str r0, [r1]
-_08127258:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127260: .4byte gTasks
-_08127264: .4byte Task_HandleSwitchItemsFromBagYesNoInput
- thumb_func_end Task_SwitchItemsFromBagYesNo
-
- thumb_func_start Task_HandleSwitchItemsFromBagYesNoInput
-Task_HandleSwitchItemsFromBagYesNoInput: @ 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 @ =gPartyMenu
- ldrh r4, [r7, 0xC]
- adds r0, r4, 0
- bl RemoveItemToGiveFromBag
- ldr r6, _081272C4 @ =sPartyMenuItemId
- ldrh r0, [r6]
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- cmp r0, 0
- bne _081272CC
- adds r0, r4, 0
- bl ReturnGiveItemToBagOrPC
- ldrh r0, [r6]
- bl BufferBagFullCantTakeItemMessage
- ldr r0, _081272C8 @ =gStringVar4
- movs r1, 0
- bl DisplayPartyMenuMessage
- b _0812730C
- .align 2, 0
-_081272C0: .4byte gPartyMenu
-_081272C4: .4byte sPartyMenuItemId
-_081272C8: .4byte gStringVar4
-_081272CC:
- adds r0, r4, 0
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _081272F0
- ldr r0, _081272E8 @ =sPartyMenuInternal
- ldr r1, [r0]
- ldr r0, _081272EC @ =CB2_WriteMailToGiveMonFromBag
- str r0, [r1, 0x4]
- adds r0, r5, 0
- bl Task_ClosePartyMenu
- b _0812733C
- .align 2, 0
-_081272E8: .4byte sPartyMenuInternal
-_081272EC: .4byte CB2_WriteMailToGiveMonFromBag
-_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 GiveItemToMon
- ldrh r1, [r6]
- adds r0, r4, 0
- movs r2, 0x1
- bl DisplaySwitchedHeldItemMessage
-_0812730C:
- ldr r1, _08127320 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _08127324 @ =Task_UpdateHeldItemSpriteAndClosePartyMenu
- str r1, [r0]
- b _0812733C
- .align 2, 0
-_0812731C: .4byte gPlayerParty
-_08127320: .4byte gTasks
-_08127324: .4byte Task_UpdateHeldItemSpriteAndClosePartyMenu
-_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 @ =Task_UpdateHeldItemSpriteAndClosePartyMenu
- str r0, [r1]
-_0812733C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08127344: .4byte gTasks
-_08127348: .4byte Task_UpdateHeldItemSpriteAndClosePartyMenu
- thumb_func_end Task_HandleSwitchItemsFromBagYesNoInput
-
- thumb_func_start DisplayItemMustBeRemovedFirstMessage
-DisplayItemMustBeRemovedFirstMessage: @ 812734C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08127378 @ =gUnknown_8416BFB
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- 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 @ =Task_UpdateHeldItemSpriteAndClosePartyMenu
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127378: .4byte gUnknown_8416BFB
-_0812737C: .4byte gTasks
-_08127380: .4byte Task_UpdateHeldItemSpriteAndClosePartyMenu
- thumb_func_end DisplayItemMustBeRemovedFirstMessage
-
- thumb_func_start RemoveItemToGiveFromBag
-RemoveItemToGiveFromBag: @ 8127384
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, _0812739C @ =gPartyMenu
- 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 gPartyMenu
-_081273A0:
- adds r0, r1, 0
- movs r1, 0x1
- bl RemoveBagItem
-_081273A8:
- pop {r0}
- bx r0
- thumb_func_end RemoveItemToGiveFromBag
-
- thumb_func_start ReturnGiveItemToBagOrPC
-ReturnGiveItemToBagOrPC: @ 81273AC
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, _081273C4 @ =gPartyMenu
- 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 gPartyMenu
-_081273C8:
- adds r0, r1, 0
- movs r1, 0x1
- bl AddBagItem
-_081273D0:
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end ReturnGiveItemToBagOrPC
-
- thumb_func_start ChooseMonToGiveMailFromMailbox
-ChooseMonToGiveMailFromMailbox: @ 81273D8
- push {lr}
- sub sp, 0xC
- movs r0, 0x6
- str r0, [sp]
- ldr r0, _081273FC @ =Task_HandleChooseMonInput
- 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 InitPartyMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081273FC: .4byte Task_HandleChooseMonInput
-_08127400: .4byte CB2_PlayerPC_ReturnFromPartyMenu
- thumb_func_end ChooseMonToGiveMailFromMailbox
-
- thumb_func_start TryGiveMailToSelectedMon
-TryGiveMailToSelectedMon: @ 8127404
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08127450 @ =gPartyMenu
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08127454 @ =gPlayerParty
- adds r5, r1, r0
- ldr r1, _08127458 @ =gPartyMenuUseExitCallback
- 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 @ =gText_PkmnHoldingItemCantHoldMail
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- b _08127482
- .align 2, 0
-_08127450: .4byte gPartyMenu
-_08127454: .4byte gPlayerParty
-_08127458: .4byte gPartyMenuUseExitCallback
-_0812745C: .4byte gSaveBlock1Ptr
-_08127460: .4byte gPlayerPcMenuManager
-_08127464: .4byte 0x00002cd0
-_08127468: .4byte gText_PkmnHoldingItemCantHoldMail
-_0812746C:
- adds r0, r5, 0
- adds r1, r4, 0
- bl GiveMailToMon2
- adds r0, r4, 0
- bl ClearMailStruct
- ldr r0, _0812749C @ =gText_MailTransferredFromMailbox
- movs r1, 0x1
- bl DisplayPartyMenuMessage
-_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 @ =Task_UpdateHeldItemSpriteAndClosePartyMenu
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812749C: .4byte gText_MailTransferredFromMailbox
-_081274A0: .4byte gTasks
-_081274A4: .4byte Task_UpdateHeldItemSpriteAndClosePartyMenu
- thumb_func_end TryGiveMailToSelectedMon
-
- thumb_func_start InitChooseHalfPartyForBattle
-InitChooseHalfPartyForBattle: @ 81274A8
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl ClearSelectedPartyOrder
- movs r0, 0
- str r0, [sp]
- ldr r0, _081274EC @ =Task_HandleChooseMonInput
- 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 InitPartyMenu
- ldr r1, _081274F4 @ =gPartyMenu
- lsls r4, 6
- ldrb r2, [r1, 0x8]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x8]
- ldr r0, _081274F8 @ =Task_ValidateChosenHalfParty
- str r0, [r1, 0x4]
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081274EC: .4byte Task_HandleChooseMonInput
-_081274F0: .4byte gMain
-_081274F4: .4byte gPartyMenu
-_081274F8: .4byte Task_ValidateChosenHalfParty
- thumb_func_end InitChooseHalfPartyForBattle
-
- thumb_func_start ClearSelectedPartyOrder
-ClearSelectedPartyOrder: @ 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 ClearSelectedPartyOrder
-
- thumb_func_start GetPartySlotEntryStatus
-GetPartySlotEntryStatus: @ 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 GetBattleEntryEligibility
- 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 HasPartySlotAlreadyBeenSelected
- 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 GetPartySlotEntryStatus
-
- thumb_func_start GetBattleEntryEligibility
-GetBattleEntryEligibility: @ 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 @ =gPartyMenu
- 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 gPartyMenu
-_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 GetBattleEntryEligibility
-
- thumb_func_start CheckBattleEntriesAndGetMessage
-CheckBattleEntriesAndGetMessage: @ 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 @ =gPartyMenu
- 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 gPartyMenu
-_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 @ =sPartyMenuInternal
- 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 @ =sPartyMenuInternal
- 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 @ =sPartyMenuInternal
- 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 sPartyMenuInternal
-_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 CheckBattleEntriesAndGetMessage
-
- thumb_func_start HasPartySlotAlreadyBeenSelected
-HasPartySlotAlreadyBeenSelected: @ 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 HasPartySlotAlreadyBeenSelected
-
- thumb_func_start Task_ValidateChosenHalfParty
-Task_ValidateChosenHalfParty: @ 812773C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- bl CheckBattleEntriesAndGetMessage
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xFF
- beq _08127768
- movs r0, 0x1A
- bl PlaySE
- adds r0, r4, 0
- bl DisplayPartyMenuStdMessage
- 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 Task_ClosePartyMenu
- b _0812779E
- .align 2, 0
-_08127780: .4byte gSelectedOrderFromParty
-_08127784:
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0xE
- bl DisplayPartyMenuStdMessage
- ldr r0, _081277A4 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
-_08127796:
- lsls r1, 3
- adds r1, r0
- ldr r0, _081277A8 @ =Task_ContinueChoosingHalfParty
- str r0, [r1]
-_0812779E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081277A4: .4byte gTasks
-_081277A8: .4byte Task_ContinueChoosingHalfParty
- thumb_func_end Task_ValidateChosenHalfParty
-
- thumb_func_start Task_ContinueChoosingHalfParty
-Task_ContinueChoosingHalfParty: @ 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 DisplayPartyMenuStdMessage
- ldr r0, _081277EC @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _081277F0 @ =Task_HandleChooseMonInput
- str r0, [r1]
-_081277E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081277E8: .4byte gMain
-_081277EC: .4byte gTasks
-_081277F0: .4byte Task_HandleChooseMonInput
- thumb_func_end Task_ContinueChoosingHalfParty
-
- thumb_func_start ChooseMonForMoveTutor
-ChooseMonForMoveTutor: @ 81277F4
- push {lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0
- str r2, [sp]
- ldr r2, _08127818 @ =Task_HandleChooseMonInput
- str r2, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl InitPartyMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08127818: .4byte Task_HandleChooseMonInput
- thumb_func_end ChooseMonForMoveTutor
-
- 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 @ =Task_HandleChooseMonInput
- 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 InitPartyMenu
- b _08127870
- .align 2, 0
-_08127844: .4byte gSpecialVar_0x8005
-_08127848: .4byte Task_HandleChooseMonInput
-_0812784C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
-_08127850:
- movs r0, 0x7F
- str r0, [sp]
- ldr r0, _08127878 @ =TryTutorSelectedMon
- 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 InitPartyMenu
- ldr r1, _08127880 @ =gPartyMenu
- 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 TryTutorSelectedMon
-_0812787C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
-_08127880: .4byte gPartyMenu
-_08127884: .4byte gSpecialVar_0x8007
- thumb_func_end sub_812781C
-
- thumb_func_start ChooseMonForWirelessMinigame
-ChooseMonForWirelessMinigame: @ 8127888
- push {lr}
- sub sp, 0xC
- movs r0, 0x1
- str r0, [sp]
- ldr r0, _081278AC @ =Task_HandleChooseMonInput
- 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 InitPartyMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081278AC: .4byte Task_HandleChooseMonInput
-_081278B0: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
- thumb_func_end ChooseMonForWirelessMinigame
-
- thumb_func_start GetPartyLayoutFromBattleType
-GetPartyLayoutFromBattleType: @ 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 GetPartyLayoutFromBattleType
-
- thumb_func_start OpenPartyMenuInTutorialBattle
-OpenPartyMenuInTutorialBattle: @ 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 GetPartyLayoutFromBattleType
- 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 InitPartyMenu
- movs r0, 0x8
- bl sub_80EB2F4
- b _08127950
- .align 2, 0
-_08127924: .4byte gBattleTypeFlags
-_08127928: .4byte sub_8120C3C
-_0812792C: .4byte SetCB2ToReshowScreenAfterMenu
-_08127930:
- bl GetPartyLayoutFromBattleType
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- str r0, [sp]
- ldr r0, _08127960 @ =Task_HandleChooseMonInput
- str r0, [sp, 0x4]
- ldr r0, _08127964 @ =SetCB2ToReshowScreenAfterMenu
- str r0, [sp, 0x8]
- movs r0, 0x1
- adds r2, r4, 0
- movs r3, 0
- bl InitPartyMenu
-_08127950:
- bl nullsub_44
- bl UpdatePartyToBattleOrder
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127960: .4byte Task_HandleChooseMonInput
-_08127964: .4byte SetCB2ToReshowScreenAfterMenu
- thumb_func_end OpenPartyMenuInTutorialBattle
-
- thumb_func_start OpenPartyMenuInBattle
-OpenPartyMenuInBattle: @ 8127968
- push {lr}
- sub sp, 0xC
- bl GetPartyLayoutFromBattleType
- 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 InitPartyMenu
- bl nullsub_44
- bl UpdatePartyToBattleOrder
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_0812799C: .4byte sub_8120EBC
-_081279A0: .4byte SetCB2ToReshowScreenAfterMenu
- thumb_func_end OpenPartyMenuInBattle
-
- thumb_func_start ChooseMonForInBattleItem
-ChooseMonForInBattleItem: @ 81279A4
- push {lr}
- sub sp, 0xC
- bl GetPartyLayoutFromBattleType
- 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 InitPartyMenu
- bl nullsub_44
- bl UpdatePartyToBattleOrder
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081279D8: .4byte sub_8120FCC
-_081279DC: .4byte sub_8107ECC
- thumb_func_end ChooseMonForInBattleItem
-
- 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 GetPartyLayoutFromBattleType
- 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 InitPartyMenu
- 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 GetPartyLayoutFromBattleType
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x5
- str r0, [sp]
- ldr r0, _08127A80 @ =Task_HandleChooseMonInput
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x3
- movs r3, 0
- bl InitPartyMenu
-_08127A62:
- bl nullsub_44
- bl UpdatePartyToBattleOrder
- 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 Task_HandleChooseMonInput
- thumb_func_end sub_81279E0
-
- thumb_func_start GetPartyMenuActionsTypeInBattle
-GetPartyMenuActionsTypeInBattle: @ 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 @ =gPartyMenu
- ldrb r0, [r0, 0xB]
- cmp r0, 0x1
- beq _08127AB8
- movs r0, 0x2
- b _08127ABA
- .align 2, 0
-_08127AB4: .4byte gPartyMenu
-_08127AB8:
- movs r0, 0x3
-_08127ABA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetPartyMenuActionsTypeInBattle
-
- thumb_func_start TrySwitchInPokemon
-TrySwitchInPokemon: @ 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 GetPartyIdFromBattleSlot
- 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 GetPartyIdFromBattleSlot
- 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 @ =gPartyMenu
- ldrb r0, [r0, 0xB]
- cmp r0, 0x4
- bne _08127BEC
- bl SetMonPreventsSwitchingString
- b _08127C8A
- .align 2, 0
-_08127BE8: .4byte gPartyMenu
-_08127BEC:
- cmp r0, 0x2
- beq _08127C64
- adds r0, r5, 0
- bl GetPartyIdFromBattleSlot
- ldr r1, _08127C30 @ =gSelectedMonPartyId
- strb r0, [r1]
- ldr r1, _08127C34 @ =gPartyMenuUseExitCallback
- 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 SwitchPartyMonSlots
- adds r0, r4, 0
- muls r0, r7
- add r0, r8
- adds r1, r6, 0
- bl SwapPartyPokemon
- movs r0, 0x1
- b _08127C8C
- .align 2, 0
-_08127C30: .4byte gSelectedMonPartyId
-_08127C34: .4byte gPartyMenuUseExitCallback
-_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 TrySwitchInPokemon
-
- thumb_func_start BufferBattlePartyCurrentOrder
-BufferBattlePartyCurrentOrder: @ 8127CAC
- push {r4,lr}
- ldr r4, _08127CC8 @ =gBattlePartyCurrentOrder
- bl sub_80435E0
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl BufferBattlePartyOrder
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127CC8: .4byte gBattlePartyCurrentOrder
- thumb_func_end BufferBattlePartyCurrentOrder
-
- thumb_func_start BufferBattlePartyOrder
-BufferBattlePartyOrder: @ 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 BufferBattlePartyOrder
-
- thumb_func_start BufferBattlePartyCurrentOrderBySide
-BufferBattlePartyCurrentOrderBySide: @ 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 BufferBattlePartyOrderBySide
- pop {r0}
- bx r0
- .align 2, 0
-_08127DC8: .4byte gBattleStruct
- thumb_func_end BufferBattlePartyCurrentOrderBySide
-
- thumb_func_start BufferBattlePartyOrderBySide
-BufferBattlePartyOrderBySide: @ 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 BufferBattlePartyOrderBySide
-
- thumb_func_start SwitchPartyOrderLinkMulti
-SwitchPartyOrderLinkMulti: @ 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 SwitchPartyOrderLinkMulti
-
- thumb_func_start GetPartyIdFromBattleSlot
-GetPartyIdFromBattleSlot: @ 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 @ =gBattlePartyCurrentOrder
- adds r0, r2, r0
- ldrb r0, [r0]
- movs r1, 0xF
- ands r1, r0
- b _08127FA4
- .align 2, 0
-_08127F98: .4byte gBattlePartyCurrentOrder
-_08127F9C:
- ldr r0, _08127FAC @ =gBattlePartyCurrentOrder
- 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 gBattlePartyCurrentOrder
- thumb_func_end GetPartyIdFromBattleSlot
-
- thumb_func_start SetPartyIdAtBattleSlot
-SetPartyIdAtBattleSlot: @ 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 @ =gBattlePartyCurrentOrder
- 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 gBattlePartyCurrentOrder
-_08127FD8:
- ldr r2, _08127FF0 @ =gBattlePartyCurrentOrder
- 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 gBattlePartyCurrentOrder
- thumb_func_end SetPartyIdAtBattleSlot
-
- thumb_func_start SwitchPartyMonSlots
-SwitchPartyMonSlots: @ 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 GetPartyIdFromBattleSlot
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl GetPartyIdFromBattleSlot
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl SetPartyIdAtBattleSlot
- adds r0, r6, 0
- adds r1, r4, 0
- bl SetPartyIdAtBattleSlot
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end SwitchPartyMonSlots
-
- 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 @ =gBattlePartyCurrentOrder
-_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 gBattlePartyCurrentOrder
-_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 UpdatePartyToBattleOrder
-UpdatePartyToBattleOrder: @ 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 UpdatePartyToBattleOrder
-
- thumb_func_start UpdatePartyToFieldOrder
-UpdatePartyToFieldOrder: @ 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 GetPartyIdFromBattleSlot
- 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 UpdatePartyToFieldOrder
-
- thumb_func_start SwitchAliveMonIntoLeadSlot
-SwitchAliveMonIntoLeadSlot: @ 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 GetPartyIdFromBattleSlot
- 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 GetPartyIdFromBattleSlot
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- adds r1, r6, 0
- bl SwitchPartyMonSlots
- adds r0, r4, 0
- muls r0, r7
- add r0, r8
- adds r1, r5, 0
- bl SwapPartyPokemon
- 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 SwitchAliveMonIntoLeadSlot
-
- thumb_func_start CB2_SetUpExitToBattleScreen
-CB2_SetUpExitToBattleScreen: @ 8128184
- push {lr}
- bl CB2_SetUpReshowBattleScreenAfterMenu
- ldr r0, _08128194 @ =SetCB2ToReshowScreenAfterMenu
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08128194: .4byte SetCB2ToReshowScreenAfterMenu
- thumb_func_end CB2_SetUpExitToBattleScreen
-
- thumb_func_start ShowPartyMenuToShowcaseMultiBattleParty
-ShowPartyMenuToShowcaseMultiBattleParty: @ 8128198
- push {lr}
- sub sp, 0xC
- movs r0, 0x7F
- str r0, [sp]
- ldr r0, _081281BC @ =Task_InitMultiPartnerPartySlideIn
- 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 InitPartyMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081281BC: .4byte Task_InitMultiPartnerPartySlideIn
-_081281C0: .4byte gMain
- thumb_func_end ShowPartyMenuToShowcaseMultiBattleParty
-
- thumb_func_start Task_InitMultiPartnerPartySlideIn
-Task_InitMultiPartnerPartySlideIn: @ 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 SlideMultiPartyMenuBoxSpritesOneStep
- movs r1, 0x80
- lsls r1, 9
- movs r0, 0x2
- movs r2, 0
- bl ChangeBgX
- ldr r0, _081281F8 @ =Task_MultiPartnerPartySlideIn
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081281F4: .4byte gTasks
-_081281F8: .4byte Task_MultiPartnerPartySlideIn
- thumb_func_end Task_InitMultiPartnerPartySlideIn
-
- thumb_func_start Task_MultiPartnerPartySlideIn
-Task_MultiPartnerPartySlideIn: @ 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 SlideMultiPartyMenuBoxSpritesOneStep
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08128268
- movs r4, 0x3
- ldr r7, _08128278 @ =gMultiPartnerParty
-_08128230:
- subs r0, r4, 0x3
- lsls r0, 5
- adds r0, r7
- ldrh r0, [r0]
- cmp r0, 0
- beq _0812824C
- ldr r0, _0812827C @ =sPartyMenuBoxes
- ldr r1, [r0]
- lsls r0, r4, 4
- adds r0, r1
- ldrb r0, [r0, 0x9]
- movs r1, 0
- bl AnimateSelectedPartyIcon
-_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 @ =Task_WaitAfterMultiPartnerPartySlideIn
- str r0, [r1]
-_08128268:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08128270: .4byte gTasks+0x8
-_08128274: .4byte gPaletteFade
-_08128278: .4byte gMultiPartnerParty
-_0812827C: .4byte sPartyMenuBoxes
-_08128280: .4byte gTasks
-_08128284: .4byte Task_WaitAfterMultiPartnerPartySlideIn
- thumb_func_end Task_MultiPartnerPartySlideIn
-
- thumb_func_start Task_WaitAfterMultiPartnerPartySlideIn
-Task_WaitAfterMultiPartnerPartySlideIn: @ 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 Task_ClosePartyMenu
-_081282AE:
- pop {r0}
- bx r0
- .align 2, 0
-_081282B4: .4byte gTasks+0x8
- thumb_func_end Task_WaitAfterMultiPartnerPartySlideIn
-
- thumb_func_start MoveMultiPartyMenuBoxSprite
-MoveMultiPartyMenuBoxSprite: @ 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 MoveMultiPartyMenuBoxSprite
-
- thumb_func_start SlideMultiPartyMenuBoxSpritesOneStep
-SlideMultiPartyMenuBoxSpritesOneStep: @ 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 @ =sPartyMenuBoxes
-_081282F0:
- ldr r0, _0812836C @ =gMultiPartnerParty
- 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 MoveMultiPartyMenuBoxSprite
- ldr r0, [r7]
- adds r0, r4, r0
- ldrb r0, [r0, 0xA]
- ldrh r1, [r5]
- subs r1, 0x8
- lsls r1, 16
- asrs r1, 16
- bl MoveMultiPartyMenuBoxSprite
- ldr r0, [r7]
- adds r0, r4, r0
- ldrb r0, [r0, 0xB]
- ldrh r1, [r5]
- subs r1, 0x8
- lsls r1, 16
- asrs r1, 16
- bl MoveMultiPartyMenuBoxSprite
- ldr r0, [r7]
- adds r4, r0
- ldrb r0, [r4, 0xC]
- ldrh r1, [r5]
- subs r1, 0x8
- lsls r1, 16
- asrs r1, 16
- bl MoveMultiPartyMenuBoxSprite
-_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 sPartyMenuBoxes
-_0812836C: .4byte gMultiPartnerParty
- thumb_func_end SlideMultiPartyMenuBoxSpritesOneStep
-
- thumb_func_start ChooseMonForDaycare
-ChooseMonForDaycare: @ 8128370
- push {lr}
- sub sp, 0xC
- ldr r1, _08128398 @ =gFieldCallback2
- ldr r0, _0812839C @ =CB2_FadeFromPartyMenu
- str r0, [r1]
- movs r0, 0xF
- str r0, [sp]
- ldr r0, _081283A0 @ =Task_HandleChooseMonInput
- 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 InitPartyMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08128398: .4byte gFieldCallback2
-_0812839C: .4byte CB2_FadeFromPartyMenu
-_081283A0: .4byte Task_HandleChooseMonInput
-_081283A4: .4byte CB2_ReturnToField
- thumb_func_end ChooseMonForDaycare
-
- thumb_func_start ChoosePartyMonByMenuType
-ChoosePartyMonByMenuType: @ 81283A8
- push {lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _081283D4 @ =gFieldCallback2
- ldr r1, _081283D8 @ =CB2_FadeFromPartyMenu
- str r1, [r2]
- movs r1, 0
- str r1, [sp]
- ldr r1, _081283DC @ =Task_HandleChooseMonInput
- str r1, [sp, 0x4]
- ldr r1, _081283E0 @ =CB2_ReturnToField
- str r1, [sp, 0x8]
- movs r1, 0
- movs r2, 0xB
- movs r3, 0
- bl InitPartyMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_081283D4: .4byte gFieldCallback2
-_081283D8: .4byte CB2_FadeFromPartyMenu
-_081283DC: .4byte Task_HandleChooseMonInput
-_081283E0: .4byte CB2_ReturnToField
- thumb_func_end ChoosePartyMonByMenuType
-
- thumb_func_start CB2_FadeFromPartyMenu
-CB2_FadeFromPartyMenu: @ 81283E4
- push {lr}
- bl sub_807DC00
- ldr r0, _081283F8 @ =Task_PartyMenuWaitForFade
- movs r1, 0xA
- bl CreateTask
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_081283F8: .4byte Task_PartyMenuWaitForFade
- thumb_func_end CB2_FadeFromPartyMenu
-
- thumb_func_start Task_PartyMenuWaitForFade
-Task_PartyMenuWaitForFade: @ 81283FC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsWeatherNotFadingIn
- 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_PartyMenuWaitForFade
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s
index c757216fd..b499f0999 100644
--- a/asm/pokemon_special_anim.s
+++ b/asm/pokemon_special_anim.s
@@ -1508,8 +1508,8 @@ sub_811D120: @ 811D120
bx r1
thumb_func_end sub_811D120
- thumb_func_start 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/data/event_scripts.s b/data/event_scripts.s
index 89099c58f..c07f400a1 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -13968,7 +13968,7 @@ EventScript_1C4F26:: @ 81C4F26
end
EventScript_1C4F30:: @ 81C4F30
- special sub_812781C
+ special ChooseMonForMoveTutor
waitstate
lock
faceplayer
diff --git a/data/specials.inc b/data/specials.inc
index 148da72dc..74ba0c849 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -405,7 +405,7 @@ gSpecials:: @ 815FD60
def_special get_unknown_box_id
def_special Special_OpenMuseumFossilPic
def_special Special_CloseMuseumFossilPic
- def_special sub_812781C
+ def_special ChooseMonForMoveTutor
def_special ChooseMonForWirelessMinigame
def_special SetBattledTrainerFlag
def_special sub_812B35C
diff --git a/data/strings.s b/data/strings.s
index 35548d0dc..628bbda28 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -859,27 +859,27 @@ 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}$"
gText_CantUseUntilNewBadge:: @ 8416AE2
@@ -908,7 +908,7 @@ 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}$"
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 9bb93f1c2..e9425e76f 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -25,6 +25,8 @@ struct BattleTowerPokemonTemplate
u8 nature;
};
+extern const u16 gBattleTowerBannedSpecies[];
+
u16 sub_8164FCC(u8, u8);
void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *);
void ValidateEReaderTrainer(void);
diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h
index 5c084ee6e..9b5660f6f 100644
--- a/include/constants/party_menu.h
+++ b/include/constants/party_menu.h
@@ -58,7 +58,7 @@
#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_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
@@ -66,7 +66,7 @@
#define PARTY_ACTION_CHOOSE_AND_CLOSE 11
#define PARTY_ACTION_MOVE_TUTOR 12
#define PARTY_ACTION_MINIGAME 13
-#define PARTY_ACTION_REUSABLE_ITEM 14 // Unused. The only reusable items are handled separately
+#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
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/party_menu.h b/include/party_menu.h
index b100097df..edd5efc92 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -25,7 +25,7 @@ extern u8 gPartyMenuUseExitCallback;
extern u8 gSelectedMonPartyId;
extern u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2];
extern void (*gItemUseCB)(u8 taskId, TaskFunc func);
-extern u8 gSelectedOrderFromParty[4];
+extern u8 gSelectedOrderFromParty[3];
bool8 FieldCallback_PrepareFadeInFromMenu(void);
bool8 MonKnowsMove(struct Pokemon *, u16);
@@ -47,16 +47,16 @@ u8 *GetMonNickname(struct Pokemon *mon, u8 *dest);
u8 DisplayPartyMenuMessage(const u8 * src, u8 a1);
bool8 IsPartyMenuTextPrinterActive(void);
void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, MainCallback callback);
-void sub_81252D0(u8 taskId, TaskFunc followUpFunc);
+void ItemUseCB_Medicine(u8 taskId, TaskFunc followUpFunc);
void ItemUseCB_PPRecovery(u8 taskId, TaskFunc followUpFunc);
void ItemUseCB_PPUp(u8 taskId, TaskFunc followUpFunc);
-void dp05_rare_candy(u8 taskId, TaskFunc followUpFunc);
-void sub_8126B60(u8 taskId, TaskFunc followUpFunc);
+void ItemUseCB_RareCandy(u8 taskId, TaskFunc followUpFunc);
+void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc followUpFunc);
void ItemUseCB_SacredAsh(u8 taskId, TaskFunc followUpFunc);
void sub_81279E0(void);
-void ItemUseCB_Medicine(u8 taskId, TaskFunc followUpFunc);
+void ItemUseCB_MedicineStep(u8 taskId, TaskFunc followUpFunc);
u8 GetItemEffectType(u16 itemId);
-u8 pokemon_order_func(u8);
+u8 GetPartyIdFromBattlePartyId(u8);
void BufferBattlePartyCurrentOrder(void);
void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 multiplayerFlag);
void OpenPartyMenuInBattle(void);
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_special_anim.h b/include/pokemon_special_anim.h
index d2580552d..5cc567580 100644
--- a/include/pokemon_special_anim.h
+++ b/include/pokemon_special_anim.h
@@ -5,7 +5,7 @@
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);
diff --git a/include/strings.h b/include/strings.h
index 8c082ccb4..4b80c1308 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -388,6 +388,16 @@ 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[];
diff --git a/ld_script.txt b/ld_script.txt
index fcf214ccb..db98b79a1 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -240,7 +240,6 @@ SECTIONS {
asm/link_rfu_3.o(.text);
asm/pokemon_special_anim.o(.text);
src/party_menu.o(.text);
- asm/party_menu.o(.text);
asm/union_room_chat.o(.text);
src/help_system_812B1E0.o(.text);
src/quest_log_battle.o(.text);
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 55d413b3b..d7bccb298 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -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 a6d7e69c8..d307d4f55 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -3005,8 +3005,8 @@ void sub_8013F6C(u8 battler)
for (i = 0; i < 3; ++i)
gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->field_60));
- r4 = pokemon_order_func(gBattlerPartyIndexes[battler]);
- r1 = pokemon_order_func(*(gBattleStruct->monToSwitchIntoId + battler));
+ r4 = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]);
+ r1 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler));
SwitchPartyMonSlots(r4, r1);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index fe7359eb9..a20f47ad4 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -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);
}
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 f30cf1381..3e0c50b60 100644
--- a/src/item_pc.c
+++ b/src/item_pc.c
@@ -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);
}
diff --git a/src/item_use.c b/src/item_use.c
index 70673d681..256711463 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -414,7 +414,7 @@ static void sub_80A16D0(u8 taskId)
void FieldUseFunc_Medicine(u8 taskId)
{
- gItemUseCB = sub_81252D0;
+ gItemUseCB = ItemUseCB_Medicine;
sub_80A16D0(taskId);
}
@@ -432,13 +432,13 @@ void FieldUseFunc_PpUp(u8 taskId)
void FieldUseFunc_RareCandy(u8 taskId)
{
- gItemUseCB = dp05_rare_candy;
+ gItemUseCB = ItemUseCB_RareCandy;
sub_80A16D0(taskId);
}
void FieldUseFunc_EvoItem(u8 taskId)
{
- gItemUseCB = sub_8126B60;
+ gItemUseCB = ItemUseCB_EvolutionStone;
sub_80A16D0(taskId);
}
@@ -811,7 +811,7 @@ static void ItemUse_SwitchToPartyMenuInBattle(u8 taskId)
void BattleUseFunc_Medicine(u8 taskId)
{
- gItemUseCB = ItemUseCB_Medicine;
+ gItemUseCB = ItemUseCB_MedicineStep;
ItemUse_SwitchToPartyMenuInBattle(taskId);
}
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/party_menu.c b/src/party_menu.c
index f88f2f6fc..5bee1442e 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -5,6 +5,7 @@
#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"
@@ -40,6 +41,7 @@
#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"
@@ -326,6 +328,43 @@ void Task_PartyMenuReplaceMove(u8 taskId);
void Task_StopLearningMoveYesNo(u8 taskId);
void Task_HandleStopLearningMoveYesNoInput(u8 taskId);
void Task_TryLearningNextMoveAfterText(u8 taskId);
+void ItemUseCB_RareCandyStep(u8 taskId, UNUSED TaskFunc func);
+void Task_DisplayLevelUpStatsPg1(u8 taskId);
+void Task_DisplayLevelUpStatsPg2(u8 taskId);
+void UpdateMonDisplayInfoAfterRareCandy(u8 slot, struct Pokemon *mon);
+void DisplayLevelUpStatsPg1(u8 taskId);
+void DisplayLevelUpStatsPg2(u8 taskId);
+void Task_TryLearnNewMoves(u8 taskId);
+void PartyMenuTryEvolution(u8 taskId);
+void DisplayMonNeedsToReplaceMove(u8 taskId);
+void DisplayMonLearnedMove(u8 taskId, u16 move);
+void Task_SacredAshDisplayHPRestored(u8 taskId);
+void Task_SacredAshLoop(u8 taskId);
+void UseSacredAsh(u8 taskId);
+void CB2_ReturnToBerryPouchMenu(void);
+void CB2_ReturnToTMCaseMenu(void);
+void GiveItemOrMailToSelectedMon(u8 taskId);
+void RemoveItemToGiveFromBag(u16 item);
+void DisplayItemMustBeRemovedFirstMessage(u8 taskId);
+void CB2_WriteMailToGiveMonFromBag(void);
+void GiveItemToSelectedMon(u8 taskId);
+void Task_UpdateHeldItemSpriteAndClosePartyMenu(u8 taskId);
+void Task_SwitchItemsFromBagYesNo(u8 taskId);
+void CB2_ReturnToPartyOrBagMenuFromWritingMail(void);
+bool8 ReturnGiveItemToBagOrPC(u16 item);
+void Task_DisplayGaveMailFromBagMessage(u8 taskId);
+void Task_HandleSwitchItemsFromBagYesNoInput(u8 taskId);
+void Task_ValidateChosenHalfParty(u8 taskId);
+bool8 HasPartySlotAlreadyBeenSelected(u8 slot);
+void Task_ContinueChoosingHalfParty(u8 taskId);
+void BufferBattlePartyOrder(u8 *partyBattleOrder, u8 flankId);
+void BufferBattlePartyOrderBySide(u8 *partyBattleOrder, u8 flankId, u8 battlerId);
+void Task_InitMultiPartnerPartySlideIn(u8 taskId);
+void Task_WaitAfterMultiPartnerPartySlideIn(u8 taskId);
+void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId);
+void Task_MultiPartnerPartySlideIn(u8 taskId);
+bool8 CB2_FadeFromPartyMenu(void);
+void Task_PartyMenuWaitForFade(u8 taskId);
void sub_8120C6C(u8 taskId);
void sub_8120CA8(u8 taskId);
void sub_8120CD8(u8 taskId);
@@ -345,8 +384,6 @@ u8 sub_81220D4(void);
void sub_8122110(u8 windowId);
void sub_812358C(void);
void sub_8124BB0(struct Pokemon *mon, u8 fieldMove);
-void sub_8124DB0(void);
-void sub_8124DA0(void);
void sub_8124DE0(void);
void sub_8124E48(void);
void sub_812580C(u8 taskId);
@@ -366,8 +403,8 @@ EWRAM_DATA u8 gSelectedMonPartyId = 0;
EWRAM_DATA MainCallback gPostMenuFieldCallback = NULL;
EWRAM_DATA u16 *sSlot1TilemapBuffer = NULL; // for switching party slots
EWRAM_DATA u16 *sSlot2TilemapBuffer = NULL;
-EWRAM_DATA struct Pokemon *gUnknown_203B0D0 = NULL;
-EWRAM_DATA u8 gSelectedOrderFromParty[4] = {0};
+EWRAM_DATA struct Pokemon *sSacredAshQuestLogMonBackup = NULL;
+EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0};
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
@@ -4217,7 +4254,7 @@ void CB2_ShowPartyMenuForItemUse(void)
}
}
if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
- callback = sub_8124DB0;
+ callback = CB2_ReturnToBerryPouchMenu;
task = Task_SetSacredAshCB;
msgId = PARTY_MSG_NONE;
}
@@ -4230,11 +4267,11 @@ void CB2_ShowPartyMenuForItemUse(void)
break;
case POCKET_TM_CASE:
msgId = PARTY_MSG_TEACH_WHICH_MON;
- callback = sub_8124DA0;
+ callback = CB2_ReturnToTMCaseMenu;
break;
case POCKET_BERRY_POUCH:
msgId = PARTY_MSG_USE_ON_WHICH_MON;
- callback = sub_8124DB0;
+ callback = CB2_ReturnToBerryPouchMenu;
break;
}
task = Task_HandleChooseMonInput;
@@ -4247,12 +4284,12 @@ void CB2_ReturnToBagMenu(void)
GoToBagMenu(11, 3, NULL);
}
-void sub_8124DA0(void)
+void CB2_ReturnToTMCaseMenu(void)
{
InitTMCase(5, NULL, 0xFF);
}
-void sub_8124DB0(void)
+void CB2_ReturnToBerryPouchMenu(void)
{
InitBerryPouch(BERRYPOUCH_NA, NULL, 0xFF);
}
@@ -4428,7 +4465,7 @@ bool8 ExecuteTableBasedItemEffect_(u8 partyMonIndex, u16 item, u8 monMoveIndex)
return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex);
}
-void sub_81252D0(u8 taskId, TaskFunc func)
+void ItemUseCB_Medicine(u8 taskId, TaskFunc func)
{
u16 hp;
struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
@@ -4447,7 +4484,7 @@ void sub_81252D0(u8 taskId, TaskFunc func)
if (hp == GetMonData(mon, MON_DATA_MAX_HP))
canHeal = FALSE;
}
- canHeal = PokemonUseItemEffects2(mon, item, gPartyMenu.slotId, 0);
+ canHeal = PokemonItemUseNoEffect(mon, item, gPartyMenu.slotId, 0);
}
PlaySE(SE_SELECT);
if (canHeal)
@@ -4461,11 +4498,11 @@ void sub_81252D0(u8 taskId, TaskFunc func)
{
ItemUse_SetQuestLogEvent(4, mon, item, 0xFFFF);
sub_8124DC0(taskId);
- gItemUseCB = ItemUseCB_Medicine;
+ gItemUseCB = ItemUseCB_MedicineStep;
}
}
-void ItemUseCB_Medicine(u8 taskId, TaskFunc func)
+void ItemUseCB_MedicineStep(u8 taskId, TaskFunc func)
{
u16 hp = 0;
struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
@@ -4638,7 +4675,7 @@ void ReturnToUseOnWhichMon(u8 taskId)
void sub_812580C(u8 taskId)
{
- bool8 noEffect = PokemonUseItemEffects2(&gPlayerParty[gPartyMenu.slotId],
+ bool8 noEffect = PokemonItemUseNoEffect(&gPlayerParty[gPartyMenu.slotId],
gSpecialVar_ItemId,
gPartyMenu.slotId,
gPartyMenu.data1);
@@ -5008,3 +5045,1429 @@ void Task_HandleStopLearningMoveYesNoInput(u8 taskId)
break;
}
}
+
+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;
+ }
+}
+
+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;
+}
+
+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);
+}
+
+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;
+ }
+}
+
+void Task_DisplayLevelUpStatsPg2(u8 taskId)
+{
+ if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ DisplayLevelUpStatsPg2(taskId);
+ gTasks[taskId].func = Task_TryLearnNewMoves;
+ }
+}
+
+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);
+}
+
+void DisplayLevelUpStatsPg2(u8 taskId)
+{
+ s16 *arrayPtr = sPartyMenuInternal->data;
+
+ DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], 1, 2, 3);
+ CopyWindowToVram(arrayPtr[12], 2);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+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;
+ }
+ }
+}
+
+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;
+ }
+}
+
+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;
+ }
+}
+
+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;
+}
+
+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);
+}
+
+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;
+}
+
+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);
+ }
+ }
+}
+
+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);
+ }
+}
+
+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);
+}
+
+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;
+}
+
+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;
+}
+
+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;
+ }
+}
+
+void GiveItemOrMailToSelectedMon(u8 taskId)
+{
+ if (ItemIsMail(gPartyMenu.bagItem))
+ {
+ RemoveItemToGiveFromBag(gPartyMenu.bagItem);
+ sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMonFromBag;
+ Task_ClosePartyMenu(taskId);
+ }
+ else
+ {
+ GiveItemToSelectedMon(taskId);
+ }
+}
+
+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;
+ }
+}
+
+void Task_UpdateHeldItemSpriteAndClosePartyMenu(u8 taskId)
+{
+ s8 slot = gPartyMenu.slotId;
+
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ UpdatePartyMonHeldItemSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ Task_ClosePartyMenu(taskId);
+ }
+}
+
+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);
+}
+
+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);
+ }
+}
+
+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;
+ }
+}
+
+void Task_SwitchItemsFromBagYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleSwitchItemsFromBagYesNoInput;
+ }
+}
+
+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;
+ }
+}
+
+void DisplayItemMustBeRemovedFirstMessage(u8 taskId)
+{
+ DisplayPartyMenuMessage(gText_RemoveMailBeforeItem, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
+}
+
+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
+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);
+}
+
+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 maxBattlers)
+{
+ 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 = maxBattlers;
+ gPartyMenu.task = Task_ValidateChosenHalfParty;
+}
+
+void ClearSelectedPartyOrder(void)
+{
+ memset(gSelectedOrderFromParty, 0, sizeof(gSelectedOrderFromParty));
+}
+
+u8 GetPartySlotEntryStatus(s8 slot)
+{
+ if (GetBattleEntryEligibility(&gPlayerParty[slot]) == FALSE)
+ return 2;
+ if (HasPartySlotAlreadyBeenSelected(slot + 1) == TRUE)
+ return 1;
+ return 0;
+}
+
+#ifdef NONMATCHING
+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 TRUE;
+ return FALSE;
+ case 0:
+ if (GetMonData(mon, MON_DATA_HP) != 0)
+ return TRUE;
+ return FALSE;
+ case 1:
+ if (gSaveBlock2Ptr->battleTower.battleTowerLevelType != 0 // level 100
+ || GetMonData(mon, MON_DATA_LEVEL) <= 50)
+ {
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ // Although i is always 0, the compiler still computes the offset of
+ // gBattleTowerBannedSpecies[i] by shifting i.
+ // It's also in emerald, but for whatever reason it's generated.
+ for (; gBattleTowerBannedSpecies[i] != 0xFFFF; ++i)
+ if (gBattleTowerBannedSpecies[i] == species)
+ return FALSE;
+ return TRUE;
+ }
+ return FALSE;
+ }
+}
+#else
+NAKED
+bool8 GetBattleEntryEligibility(struct Pokemon *mon)
+{
+ asm_unified("push {r4,r5,lr}\n\
+ adds r4, r0, 0\n\
+ movs r5, 0\n\
+ movs r1, 0x2D\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _0812757A\n\
+ ldr r0, _08127580 @ =gPartyMenu\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsrs r1, r0, 6\n\
+ cmp r1, 0\n\
+ beq _08127584\n\
+ cmp r1, 0x1\n\
+ beq _08127592\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ cmp r0, 0x1E\n\
+ bls _081275E0\n\
+ _0812757A:\n\
+ movs r0, 0\n\
+ b _081275E2\n\
+ .align 2, 0\n\
+ _08127580: .4byte gPartyMenu\n\
+ _08127584:\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _081275E0\n\
+ b _0812757A\n\
+ _08127592:\n\
+ ldr r0, _081275E8 @ =gSaveBlock2Ptr\n\
+ ldr r0, [r0]\n\
+ ldr r2, _081275EC @ =0x0000055c\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _081275AE\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ cmp r0, 0x32\n\
+ bhi _0812757A\n\
+ _081275AE:\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ ldr r3, _081275F0 @ =gBattleTowerBannedSpecies\n\
+ lsls r1, r5, 1\n\
+ adds r0, r1, r3\n\
+ ldrh r0, [r0]\n\
+ ldr r2, _081275F4 @ =0x0000ffff\n\
+ cmp r0, r2\n\
+ beq _081275E0\n\
+ _081275C8:\n\
+ adds r0, r1, r3\n\
+ ldrh r0, [r0]\n\
+ cmp r0, r4\n\
+ beq _0812757A\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ lsls r1, r5, 1\n\
+ adds r0, r1, r3\n\
+ ldrh r0, [r0]\n\
+ cmp r0, r2\n\
+ bne _081275C8\n\
+ _081275E0:\n\
+ movs r0, 0x1\n\
+ _081275E2:\n\
+ pop {r4,r5}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+ _081275E8: .4byte gSaveBlock2Ptr\n\
+ _081275EC: .4byte 0x0000055c\n\
+ _081275F0: .4byte gBattleTowerBannedSpecies\n\
+ _081275F4: .4byte 0x0000ffff\n\
+ ");
+}
+#endif
+
+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;
+}
+
+bool8 HasPartySlotAlreadyBeenSelected(u8 slot)
+{
+ u8 i;
+
+ for (i = 0; i < NELEMS(gSelectedOrderFromParty); ++i)
+ if (gSelectedOrderFromParty[i] == slot)
+ return TRUE;
+ return FALSE;
+}
+
+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;
+ }
+ }
+}
+
+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);
+}
+
+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();
+}
+
+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;
+}
+
+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());
+}
+
+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
+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];
+ }
+ }
+}
+
+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;
+}
+
+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;
+}
+
+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);
+}
+
+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
+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;
+ }
+ }
+}
+
+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]
+
+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;
+}
+
+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;
+ }
+ }
+}
+
+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);
+}
+
+void MoveMultiPartyMenuBoxSprite(u8 spriteId, s16 x)
+{
+ if (x >= 0)
+ gSprites[spriteId].pos2.x = x;
+}
+
+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);
+}
+
+bool8 CB2_FadeFromPartyMenu(void)
+{
+ sub_807DC00();
+ CreateTask(Task_PartyMenuWaitForFade, 10);
+ return TRUE;
+}
+
+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 c3dc81dd2..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)
@@ -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;
@@ -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);
}
@@ -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..33a3f387e 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -4117,7 +4117,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
if (sp34 != 4)
{
gAbsentBattlerFlags &= ~gBitTable[sp34];
- CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlerPartyIndexes[sp34]));
+ CopyPlayerPartyMonToBattleData(sp34, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[sp34]));
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255)
gBattleResults.numRevivesUsed++;
}
@@ -4405,7 +4405,7 @@ static bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask,
}
}
-bool8 PokemonUseItemEffects2(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex)
+bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex)
{
u32 data;
s32 tmp;
@@ -5179,7 +5179,7 @@ void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]);
}
-bool8 sub_80435E0(void)
+bool8 GetPlayerFlankId(void)
{
bool8 retVal = FALSE;
switch (gLinkPlayers[GetMultiplayerId()].id)
@@ -5813,11 +5813,11 @@ void SetMonPreventsSwitchingString(void)
gBattleTextBuff1[4] = B_BUFF_EOS;
if (GetBattlerSide(gBattleStruct->battlerPreventingSwitchout) == B_SIDE_PLAYER)
- gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]);
+ gBattleTextBuff1[3] = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]);
else
gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout];
- PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]))
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattlerInMenuId]))
BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4);
}