diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-11-24 03:03:29 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-11-24 03:03:29 +0800 |
commit | 972c044d71a870128d2ac41b5b407a1db41d60de (patch) | |
tree | 597c13c139566d6923bd5ee9b83a9c8dc357664a | |
parent | 5c1bdd0eb54b4159e4d66d9f733b0f66697a2436 (diff) |
party_menu fourth quarter
-rw-r--r-- | asm/item_menu.s | 4 | ||||
-rw-r--r-- | asm/link_rfu_3.s | 4 | ||||
-rw-r--r-- | asm/party_menu.s | 4264 | ||||
-rw-r--r-- | asm/pokemon_special_anim.s | 6 | ||||
-rw-r--r-- | data/event_scripts.s | 2 | ||||
-rw-r--r-- | data/specials.inc | 2 | ||||
-rw-r--r-- | data/strings.s | 14 | ||||
-rw-r--r-- | include/battle_tower.h | 2 | ||||
-rw-r--r-- | include/constants/party_menu.h | 4 | ||||
-rw-r--r-- | include/item.h | 3 | ||||
-rw-r--r-- | include/party_menu.h | 12 | ||||
-rw-r--r-- | include/player_pc.h | 5 | ||||
-rw-r--r-- | include/pokemon.h | 4 | ||||
-rw-r--r-- | include/pokemon_special_anim.h | 2 | ||||
-rw-r--r-- | include/strings.h | 10 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_gfx_sfx_util.c | 4 | ||||
-rw-r--r-- | src/battle_main.c | 4 | ||||
-rw-r--r-- | src/battle_script_commands.c | 4 | ||||
-rw-r--r-- | src/item.c | 2 | ||||
-rw-r--r-- | src/item_pc.c | 2 | ||||
-rw-r--r-- | src/item_use.c | 8 | ||||
-rw-r--r-- | src/mailbox_pc.c | 4 | ||||
-rw-r--r-- | src/party_menu.c | 1491 | ||||
-rw-r--r-- | src/player_pc.c | 24 | ||||
-rw-r--r-- | src/pokemon.c | 10 |
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); } |