diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-11-23 08:09:06 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-11-23 08:09:23 +0800 |
commit | 5c1bdd0eb54b4159e4d66d9f733b0f66697a2436 (patch) | |
tree | 4f424d1f724867ead5bd9341f531f19ec0c3b0ba | |
parent | 49eb3504620af68314628eb945c14be4afd441cf (diff) |
party_menu third quarter
-rw-r--r-- | asm/item_menu.s | 4 | ||||
-rw-r--r-- | asm/naming_screen.s | 20 | ||||
-rw-r--r-- | asm/overworld.s | 6 | ||||
-rw-r--r-- | asm/party_menu.s | 5102 | ||||
-rw-r--r-- | asm/pokedex_screen.s | 4 | ||||
-rw-r--r-- | asm/region_map.s | 6 | ||||
-rw-r--r-- | data/strings.s | 8 | ||||
-rw-r--r-- | include/constants/easy_chat.h | 22 | ||||
-rw-r--r-- | include/easy_chat.h | 1 | ||||
-rw-r--r-- | include/field_player_avatar.h | 2 | ||||
-rw-r--r-- | include/field_screen_effect.h | 1 | ||||
-rw-r--r-- | include/global.h | 2 | ||||
-rw-r--r-- | include/link_rfu.h | 4 | ||||
-rw-r--r-- | include/overworld.h | 2 | ||||
-rw-r--r-- | include/pokemon_special_anim.h | 4 | ||||
-rw-r--r-- | include/quest_log.h | 2 | ||||
-rw-r--r-- | include/region_map.h | 1 | ||||
-rw-r--r-- | include/strings.h | 38 | ||||
-rw-r--r-- | include/trade.h | 3 | ||||
-rw-r--r-- | include/union_room.h | 4 | ||||
-rw-r--r-- | src/option_menu.c | 2 | ||||
-rw-r--r-- | src/party_menu.c | 1660 | ||||
-rw-r--r-- | src/start_menu.c | 6 | ||||
-rw-r--r-- | src/trade.c | 2 |
24 files changed, 1752 insertions, 5154 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s index 6967a7876..c2c1925f2 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -141,14 +141,14 @@ _08107EB4: .4byte gUnknown_203ACFC thumb_func_start CB2_BagMenuFromStartMenu CB2_BagMenuFromStartMenu: @ 8107EB8 push {lr} - ldr r2, _08107EC8 @ =CB2_ReturnToStartMenu + ldr r2, _08107EC8 @ =CB2_ReturnToFieldWithOpenMenu movs r0, 0 movs r1, 0x3 bl GoToBagMenu pop {r0} bx r0 .align 2, 0 -_08107EC8: .4byte CB2_ReturnToStartMenu +_08107EC8: .4byte CB2_ReturnToFieldWithOpenMenu thumb_func_end CB2_BagMenuFromStartMenu thumb_func_start sub_8107ECC diff --git a/asm/naming_screen.s b/asm/naming_screen.s index a42d6e4ab..49ab9164f 100644 --- a/asm/naming_screen.s +++ b/asm/naming_screen.s @@ -4490,7 +4490,7 @@ sub_809FC90: @ 809FC90 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FCB4 @ =CB2_ReturnToStartMenu + ldr r0, _0809FCB4 @ =CB2_ReturnToFieldWithOpenMenu str r0, [sp, 0x4] movs r0, 0 movs r3, 0 @@ -4500,7 +4500,7 @@ sub_809FC90: @ 809FC90 bx r0 .align 2, 0 _0809FCB0: .4byte gSaveBlock2Ptr -_0809FCB4: .4byte CB2_ReturnToStartMenu +_0809FCB4: .4byte CB2_ReturnToFieldWithOpenMenu thumb_func_end sub_809FC90 thumb_func_start sub_809FCB8 @@ -4512,7 +4512,7 @@ sub_809FCB8: @ 809FCB8 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FCDC @ =CB2_ReturnToStartMenu + ldr r0, _0809FCDC @ =CB2_ReturnToFieldWithOpenMenu str r0, [sp, 0x4] movs r0, 0x1 movs r3, 0 @@ -4522,7 +4522,7 @@ sub_809FCB8: @ 809FCB8 bx r0 .align 2, 0 _0809FCD8: .4byte gSaveBlock2Ptr -_0809FCDC: .4byte CB2_ReturnToStartMenu +_0809FCDC: .4byte CB2_ReturnToFieldWithOpenMenu thumb_func_end sub_809FCB8 thumb_func_start sub_809FCE0 @@ -4534,7 +4534,7 @@ sub_809FCE0: @ 809FCE0 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FD04 @ =CB2_ReturnToStartMenu + ldr r0, _0809FD04 @ =CB2_ReturnToFieldWithOpenMenu str r0, [sp, 0x4] movs r0, 0x2 movs r3, 0 @@ -4544,7 +4544,7 @@ sub_809FCE0: @ 809FCE0 bx r0 .align 2, 0 _0809FD00: .4byte gSaveBlock2Ptr -_0809FD04: .4byte CB2_ReturnToStartMenu +_0809FD04: .4byte CB2_ReturnToFieldWithOpenMenu thumb_func_end sub_809FCE0 thumb_func_start sub_809FD08 @@ -4556,7 +4556,7 @@ sub_809FD08: @ 809FD08 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FD2C @ =CB2_ReturnToStartMenu + ldr r0, _0809FD2C @ =CB2_ReturnToFieldWithOpenMenu str r0, [sp, 0x4] movs r0, 0x3 movs r3, 0 @@ -4566,7 +4566,7 @@ sub_809FD08: @ 809FD08 bx r0 .align 2, 0 _0809FD28: .4byte gSaveBlock2Ptr -_0809FD2C: .4byte CB2_ReturnToStartMenu +_0809FD2C: .4byte CB2_ReturnToFieldWithOpenMenu thumb_func_end sub_809FD08 thumb_func_start sub_809FD30 @@ -4578,7 +4578,7 @@ sub_809FD30: @ 809FD30 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FD54 @ =CB2_ReturnToStartMenu + ldr r0, _0809FD54 @ =CB2_ReturnToFieldWithOpenMenu str r0, [sp, 0x4] movs r0, 0x4 movs r3, 0 @@ -4588,7 +4588,7 @@ sub_809FD30: @ 809FD30 bx r0 .align 2, 0 _0809FD50: .4byte gSaveBlock2Ptr -_0809FD54: .4byte CB2_ReturnToStartMenu +_0809FD54: .4byte CB2_ReturnToFieldWithOpenMenu thumb_func_end sub_809FD30 .align 2, 0 @ Don't pad with nop. diff --git a/asm/overworld.s b/asm/overworld.s index 29c676060..370aa054d 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3754,8 +3754,8 @@ _080568A0: .4byte gFieldCallback _080568A4: .4byte sub_807DDD0 thumb_func_end c2_8056854 - thumb_func_start CB2_ReturnToStartMenu -CB2_ReturnToStartMenu: @ 80568A8 + thumb_func_start CB2_ReturnToFieldWithOpenMenu +CB2_ReturnToFieldWithOpenMenu: @ 80568A8 push {lr} bl sub_80569BC ldr r1, _080568BC @ =gFieldCallback2 @@ -3767,7 +3767,7 @@ CB2_ReturnToStartMenu: @ 80568A8 .align 2, 0 _080568BC: .4byte gFieldCallback2 _080568C0: .4byte FieldCB2_ReturnToStartMenuInit - thumb_func_end CB2_ReturnToStartMenu + thumb_func_end CB2_ReturnToFieldWithOpenMenu thumb_func_start sub_80568C4 sub_80568C4: @ 80568C4 diff --git a/asm/party_menu.s b/asm/party_menu.s index 32674fea2..0e68a23b2 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -5,5098 +5,6 @@ .text - thumb_func_start Task_SwitchHoldItemsPrompt -Task_SwitchHoldItemsPrompt: @ 81238A4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _081238E4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081238DC - ldr r0, _081238E8 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081238EC @ =gPlayerParty - adds r0, r1 - ldr r1, _081238F0 @ =sPartyMenuItemId - ldrh r1, [r1] - movs r2, 0x1 - bl DisplayAlreadyHoldingItemSwitchMessage - ldr r1, _081238F4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _081238F8 @ =Task_SwitchItemsYesNo - str r1, [r0] -_081238DC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081238E4: .4byte gPaletteFade -_081238E8: .4byte gPartyMenu -_081238EC: .4byte gPlayerParty -_081238F0: .4byte sPartyMenuItemId -_081238F4: .4byte gTasks -_081238F8: .4byte Task_SwitchItemsYesNo - thumb_func_end Task_SwitchHoldItemsPrompt - - thumb_func_start Task_SwitchItemsYesNo -Task_SwitchItemsYesNo: @ 81238FC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08123920 - bl PartyMenuDisplayYesNoMenu - ldr r0, _08123928 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _0812392C @ =Task_HandleSwitchItemsYesNoInput - str r0, [r1] -_08123920: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08123928: .4byte gTasks -_0812392C: .4byte Task_HandleSwitchItemsYesNoInput - thumb_func_end Task_SwitchItemsYesNo - - thumb_func_start Task_HandleSwitchItemsYesNoInput -Task_HandleSwitchItemsYesNoInput: @ 8123930 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08123956 - cmp r1, 0 - bgt _08123950 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08123A2C - b _08123A40 -_08123950: - cmp r1, 0x1 - beq _08123A32 - b _08123A40 -_08123956: - ldr r5, _08123998 @ =gSpecialVar_ItemId - ldrh r0, [r5] - movs r1, 0x1 - bl RemoveBagItem - ldr r6, _0812399C @ =sPartyMenuItemId - ldrh r0, [r6] - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - cmp r0, 0 - bne _081239AC - ldrh r0, [r5] - movs r1, 0x1 - bl AddBagItem - ldrh r0, [r6] - bl BufferBagFullCantTakeItemMessage - ldr r0, _081239A0 @ =gStringVar4 - movs r1, 0 - bl DisplayPartyMenuMessage - ldr r1, _081239A4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _081239A8 @ =Task_ReturnToChooseMonAfterText - str r1, [r0] - b _08123A40 - .align 2, 0 -_08123998: .4byte gSpecialVar_ItemId -_0812399C: .4byte sPartyMenuItemId -_081239A0: .4byte gStringVar4 -_081239A4: .4byte gTasks -_081239A8: .4byte Task_ReturnToChooseMonAfterText -_081239AC: - ldrh r0, [r5] - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - beq _081239EC - ldr r0, _081239DC @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081239E0 @ =gPlayerParty - adds r0, r1 - ldrh r1, [r5] - bl GiveItemToMon - ldr r1, _081239E4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _081239E8 @ =Task_WriteMailToGiveMonAfterText - str r1, [r0] - b _08123A40 - .align 2, 0 -_081239DC: .4byte gPartyMenu -_081239E0: .4byte gPlayerParty -_081239E4: .4byte gTasks -_081239E8: .4byte Task_WriteMailToGiveMonAfterText -_081239EC: - ldr r0, _08123A1C @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08123A20 @ =gPlayerParty - adds r0, r1 - ldrh r1, [r5] - bl GiveItemToMon - ldrh r0, [r5] - ldrh r1, [r6] - movs r2, 0x1 - bl DisplaySwitchedHeldItemMessage - ldr r1, _08123A24 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08123A28 @ =Task_UpdateHeldItemSprite - str r1, [r0] - b _08123A40 - .align 2, 0 -_08123A1C: .4byte gPartyMenu -_08123A20: .4byte gPlayerParty -_08123A24: .4byte gTasks -_08123A28: .4byte Task_UpdateHeldItemSprite -_08123A2C: - movs r0, 0x5 - bl PlaySE -_08123A32: - ldr r0, _08123A48 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08123A4C @ =Task_ReturnToChooseMonAfterText - str r0, [r1] -_08123A40: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08123A48: .4byte gTasks -_08123A4C: .4byte Task_ReturnToChooseMonAfterText - thumb_func_end Task_HandleSwitchItemsYesNoInput - - thumb_func_start Task_WriteMailToGiveMonAfterText -Task_WriteMailToGiveMonAfterText: @ 8123A50 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08123A70 - ldr r0, _08123A78 @ =sPartyMenuInternal - ldr r1, [r0] - ldr r0, _08123A7C @ =CB2_WriteMailToGiveMon - str r0, [r1, 0x4] - adds r0, r4, 0 - bl Task_ClosePartyMenu -_08123A70: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08123A78: .4byte sPartyMenuInternal -_08123A7C: .4byte CB2_WriteMailToGiveMon - thumb_func_end Task_WriteMailToGiveMonAfterText - - thumb_func_start CB2_WriteMailToGiveMon -CB2_WriteMailToGiveMon: @ 8123A80 - push {lr} - ldr r0, _08123AB8 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08123ABC @ =gPlayerParty - adds r0, r1 - movs r1, 0x40 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08123AC0 @ =gSaveBlock1Ptr - lsls r2, r0, 3 - adds r2, r0 - lsls r2, 2 - ldr r0, _08123AC4 @ =0x00002cd0 - adds r2, r0 - ldr r1, [r1] - adds r1, r2 - ldr r2, _08123AC8 @ =CB2_ReturnToPartyMenuFromWritingMail - movs r0, 0x4 - bl DoEasyChatScreen - pop {r0} - bx r0 - .align 2, 0 -_08123AB8: .4byte gPartyMenu -_08123ABC: .4byte gPlayerParty -_08123AC0: .4byte gSaveBlock1Ptr -_08123AC4: .4byte 0x00002cd0 -_08123AC8: .4byte CB2_ReturnToPartyMenuFromWritingMail - thumb_func_end CB2_WriteMailToGiveMon - - thumb_func_start CB2_ReturnToPartyMenuFromWritingMail -CB2_ReturnToPartyMenuFromWritingMail: @ 8123ACC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - ldr r6, _08123B38 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r6, r1] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08123B3C @ =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r0, _08123B40 @ =gSpecialVar_Result - ldrh r7, [r0] - cmp r7, 0 - bne _08123B4C - adds r0, r5, 0 - bl TakeMailFromMon - ldr r4, _08123B44 @ =sPartyMenuItemId - adds r0, r5, 0 - movs r1, 0xC - adds r2, r4, 0 - bl SetMonData - ldrh r0, [r4] - movs r1, 0x1 - bl RemoveBagItem - mov r0, r8 - movs r1, 0x1 - bl AddBagItem - ldrb r0, [r6, 0x8] - lsls r0, 28 - lsrs r0, 28 - ldrb r2, [r6, 0xB] - str r7, [sp] - ldr r1, _08123B48 @ =Task_TryCreateSelectionWindow - str r1, [sp, 0x4] - ldr r1, [r6] - str r1, [sp, 0x8] - movs r1, 0xFF - movs r3, 0x1 - bl InitPartyMenu - b _08123B68 - .align 2, 0 -_08123B38: .4byte gPartyMenu -_08123B3C: .4byte gPlayerParty -_08123B40: .4byte gSpecialVar_Result -_08123B44: .4byte sPartyMenuItemId -_08123B48: .4byte Task_TryCreateSelectionWindow -_08123B4C: - ldrb r0, [r6, 0x8] - lsls r0, 28 - lsrs r0, 28 - ldrb r2, [r6, 0xB] - movs r1, 0 - str r1, [sp] - ldr r1, _08123B74 @ =Task_DisplayGaveMailFromPartyMessage - str r1, [sp, 0x4] - ldr r1, [r6] - str r1, [sp, 0x8] - movs r1, 0xFF - movs r3, 0x1 - bl InitPartyMenu -_08123B68: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08123B74: .4byte Task_DisplayGaveMailFromPartyMessage - thumb_func_end CB2_ReturnToPartyMenuFromWritingMail - - thumb_func_start Task_DisplayGaveMailFromPartyMessage -Task_DisplayGaveMailFromPartyMessage: @ 8123B78 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08123BB0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08123BDE - ldr r1, _08123BB4 @ =sPartyMenuItemId - ldrh r0, [r1] - cmp r0, 0 - bne _08123BC4 - ldr r0, _08123BB8 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08123BBC @ =gPlayerParty - adds r0, r1 - ldr r1, _08123BC0 @ =gSpecialVar_ItemId - ldrh r1, [r1] - movs r2, 0 - movs r3, 0 - bl DisplayGaveHeldItemMessage - b _08123BD0 - .align 2, 0 -_08123BB0: .4byte gPaletteFade -_08123BB4: .4byte sPartyMenuItemId -_08123BB8: .4byte gPartyMenu -_08123BBC: .4byte gPlayerParty -_08123BC0: .4byte gSpecialVar_ItemId -_08123BC4: - ldr r0, _08123BE4 @ =gSpecialVar_ItemId - ldrh r0, [r0] - ldrh r1, [r1] - movs r2, 0 - bl DisplaySwitchedHeldItemMessage -_08123BD0: - ldr r0, _08123BE8 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08123BEC @ =Task_UpdateHeldItemSprite - str r0, [r1] -_08123BDE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08123BE4: .4byte gSpecialVar_ItemId -_08123BE8: .4byte gTasks -_08123BEC: .4byte Task_UpdateHeldItemSprite - thumb_func_end Task_DisplayGaveMailFromPartyMessage - - thumb_func_start Task_UpdateHeldItemSprite -Task_UpdateHeldItemSprite: @ 8123BF0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _08123C2C @ =gPartyMenu - ldrb r4, [r0, 0x9] - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08123C24 - lsls r2, r4, 24 - asrs r2, 24 - movs r0, 0x64 - muls r0, r2 - ldr r1, _08123C30 @ =gPlayerParty - adds r0, r1 - ldr r1, _08123C34 @ =sPartyMenuBoxes - lsls r2, 4 - ldr r1, [r1] - adds r1, r2 - bl UpdatePartyMonHeldItemSprite - adds r0, r5, 0 - bl Task_ReturnToChooseMonAfterText -_08123C24: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08123C2C: .4byte gPartyMenu -_08123C30: .4byte gPlayerParty -_08123C34: .4byte sPartyMenuBoxes - thumb_func_end Task_UpdateHeldItemSprite - - thumb_func_start CursorCB_TakeItem -CursorCB_TakeItem: @ 8123C38 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08123C90 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08123C94 @ =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - movs r0, 0x5 - bl PlaySE - ldr r4, _08123C98 @ =sPartyMenuInternal - ldr r0, [r4] - adds r0, 0xC - bl PartyMenuRemoveWindow - ldr r0, [r4] - adds r0, 0xD - bl PartyMenuRemoveWindow - adds r0, r5, 0 - bl TryTakeMonItem - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08123C9C - cmp r0, 0x1 - beq _08123CC0 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x1 - bl DisplayTookHeldItemMessage - b _08123CCE - .align 2, 0 -_08123C90: .4byte gPartyMenu -_08123C94: .4byte gPlayerParty -_08123C98: .4byte sPartyMenuInternal -_08123C9C: - ldr r1, _08123CB4 @ =gStringVar1 - adds r0, r5, 0 - bl GetMonNickname - ldr r4, _08123CB8 @ =gStringVar4 - ldr r1, _08123CBC @ =gUnknown_8416C8F - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - b _08123CC8 - .align 2, 0 -_08123CB4: .4byte gStringVar1 -_08123CB8: .4byte gStringVar4 -_08123CBC: .4byte gUnknown_8416C8F -_08123CC0: - adds r0, r6, 0 - bl BufferBagFullCantTakeItemMessage - ldr r0, _08123CE8 @ =gStringVar4 -_08123CC8: - movs r1, 0x1 - bl DisplayPartyMenuMessage -_08123CCE: - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r0, _08123CEC @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r0 - ldr r0, _08123CF0 @ =Task_UpdateHeldItemSprite - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08123CE8: .4byte gStringVar4 -_08123CEC: .4byte gTasks -_08123CF0: .4byte Task_UpdateHeldItemSprite - thumb_func_end CursorCB_TakeItem - - thumb_func_start CursorCB_Mail -CursorCB_Mail: @ 8123CF4 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0x5 - bl PlaySE - ldr r4, _08123D44 @ =sPartyMenuInternal - ldr r0, [r4] - adds r0, 0xC - bl PartyMenuRemoveWindow - ldr r0, [r4] - adds r0, 0xD - bl PartyMenuRemoveWindow - ldr r0, _08123D48 @ =gPlayerParty - ldr r1, _08123D4C @ =gPartyMenu - ldrb r1, [r1, 0x9] - movs r2, 0x9 - bl SetPartyMonSelectionActions - movs r0, 0x2 - bl DisplaySelectionWindow - movs r0, 0x1A - bl DisplayPartyMenuStdMessage - ldr r1, _08123D50 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r1, 0xFF - strh r1, [r0, 0x8] - ldr r1, _08123D54 @ =Task_HandleSelectionMenuInput - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08123D44: .4byte sPartyMenuInternal -_08123D48: .4byte gPlayerParty -_08123D4C: .4byte gPartyMenu -_08123D50: .4byte gTasks -_08123D54: .4byte Task_HandleSelectionMenuInput - thumb_func_end CursorCB_Mail - - thumb_func_start CursorCB_Read -CursorCB_Read: @ 8123D58 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x5 - bl PlaySE - ldr r0, _08123D7C @ =sPartyMenuInternal - ldr r1, [r0] - ldr r0, _08123D80 @ =CB2_ReadHeldMail - str r0, [r1, 0x4] - adds r0, r4, 0 - bl Task_ClosePartyMenu - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08123D7C: .4byte sPartyMenuInternal -_08123D80: .4byte CB2_ReadHeldMail - thumb_func_end CursorCB_Read - - thumb_func_start CB2_ReadHeldMail -CB2_ReadHeldMail: @ 8123D84 - push {lr} - ldr r0, _08123DB8 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08123DBC @ =gPlayerParty - adds r0, r1 - movs r1, 0x40 - bl GetMonData - ldr r2, _08123DC0 @ =gSaveBlock1Ptr - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08123DC4 @ =0x00002cd0 - adds r1, r0 - ldr r0, [r2] - adds r0, r1 - ldr r1, _08123DC8 @ =CB2_ReturnToPartyMenuFromReadingMail - movs r2, 0x1 - bl ReadMail - pop {r0} - bx r0 - .align 2, 0 -_08123DB8: .4byte gPartyMenu -_08123DBC: .4byte gPlayerParty -_08123DC0: .4byte gSaveBlock1Ptr -_08123DC4: .4byte 0x00002cd0 -_08123DC8: .4byte CB2_ReturnToPartyMenuFromReadingMail - thumb_func_end CB2_ReadHeldMail - - thumb_func_start CB2_ReturnToPartyMenuFromReadingMail -CB2_ReturnToPartyMenuFromReadingMail: @ 8123DCC - push {lr} - sub sp, 0xC - ldr r2, _08123E00 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r3, _08123E04 @ =gPartyMenu - ldrb r0, [r3, 0x8] - lsls r0, 28 - lsrs r0, 28 - ldrb r2, [r3, 0xB] - movs r1, 0x16 - str r1, [sp] - ldr r1, _08123E08 @ =Task_TryCreateSelectionWindow - str r1, [sp, 0x4] - ldr r1, [r3] - str r1, [sp, 0x8] - movs r1, 0xFF - movs r3, 0x1 - bl InitPartyMenu - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_08123E00: .4byte gPaletteFade -_08123E04: .4byte gPartyMenu -_08123E08: .4byte Task_TryCreateSelectionWindow - thumb_func_end CB2_ReturnToPartyMenuFromReadingMail - - thumb_func_start CursorCB_TakeMail -CursorCB_TakeMail: @ 8123E0C - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x5 - bl PlaySE - ldr r5, _08123E48 @ =sPartyMenuInternal - ldr r0, [r5] - adds r0, 0xD - bl PartyMenuRemoveWindow - ldr r0, [r5] - adds r0, 0xC - bl PartyMenuRemoveWindow - ldr r0, _08123E4C @ =gText_SendMailToPC - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r1, _08123E50 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08123E54 @ =Task_SendMailToPCYesNo - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08123E48: .4byte sPartyMenuInternal -_08123E4C: .4byte gText_SendMailToPC -_08123E50: .4byte gTasks -_08123E54: .4byte Task_SendMailToPCYesNo - thumb_func_end CursorCB_TakeMail - - thumb_func_start Task_SendMailToPCYesNo -Task_SendMailToPCYesNo: @ 8123E58 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08123E7C - bl PartyMenuDisplayYesNoMenu - ldr r0, _08123E84 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08123E88 @ =Task_HandleSendMailToPCYesNoInput - str r0, [r1] -_08123E7C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08123E84: .4byte gTasks -_08123E88: .4byte Task_HandleSendMailToPCYesNoInput - thumb_func_end Task_SendMailToPCYesNo - - thumb_func_start Task_HandleSendMailToPCYesNoInput -Task_HandleSendMailToPCYesNoInput: @ 8123E8C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08123EB2 - cmp r1, 0 - bgt _08123EAC - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08123F1C - b _08123F38 -_08123EAC: - cmp r1, 0x1 - beq _08123F22 - b _08123F38 -_08123EB2: - ldr r0, _08123EE4 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08123EE8 @ =gPlayerParty - adds r0, r1 - bl TakeMailFromMon2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _08123EF8 - ldr r0, _08123EEC @ =gText_MailSentToPC - movs r1, 0 - bl DisplayPartyMenuMessage - ldr r1, _08123EF0 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08123EF4 @ =Task_UpdateHeldItemSprite - b _08123F36 - .align 2, 0 -_08123EE4: .4byte gPartyMenu -_08123EE8: .4byte gPlayerParty -_08123EEC: .4byte gText_MailSentToPC -_08123EF0: .4byte gTasks -_08123EF4: .4byte Task_UpdateHeldItemSprite -_08123EF8: - ldr r0, _08123F10 @ =gText_PCMailboxFull - movs r1, 0 - bl DisplayPartyMenuMessage - ldr r1, _08123F14 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08123F18 @ =Task_ReturnToChooseMonAfterText - b _08123F36 - .align 2, 0 -_08123F10: .4byte gText_PCMailboxFull -_08123F14: .4byte gTasks -_08123F18: .4byte Task_ReturnToChooseMonAfterText -_08123F1C: - movs r0, 0x5 - bl PlaySE -_08123F22: - ldr r0, _08123F40 @ =gText_MailMessageWillBeLost - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r1, _08123F44 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08123F48 @ =Task_LoseMailMessageYesNo -_08123F36: - str r1, [r0] -_08123F38: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08123F40: .4byte gText_MailMessageWillBeLost -_08123F44: .4byte gTasks -_08123F48: .4byte Task_LoseMailMessageYesNo - thumb_func_end Task_HandleSendMailToPCYesNoInput - - thumb_func_start Task_LoseMailMessageYesNo -Task_LoseMailMessageYesNo: @ 8123F4C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08123F70 - bl PartyMenuDisplayYesNoMenu - ldr r0, _08123F78 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08123F7C @ =Task_HandleLoseMailMessageYesNoInput - str r0, [r1] -_08123F70: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08123F78: .4byte gTasks -_08123F7C: .4byte Task_HandleLoseMailMessageYesNoInput - thumb_func_end Task_LoseMailMessageYesNo - - thumb_func_start Task_HandleLoseMailMessageYesNoInput -Task_HandleLoseMailMessageYesNoInput: @ 8123F80 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08123FAA - cmp r1, 0 - bgt _08123FA4 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0812403C - b _08124050 -_08123FA4: - cmp r1, 0x1 - beq _08124042 - b _08124050 -_08123FAA: - ldr r0, _08123FFC @ =gPartyMenu - mov r8, r0 - ldrb r0, [r0, 0x9] - lsls r0, 24 - asrs r0, 24 - movs r7, 0x64 - muls r0, r7 - ldr r6, _08124000 @ =gPlayerParty - adds r0, r6 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08124010 - mov r1, r8 - movs r0, 0x9 - ldrsb r0, [r1, r0] - muls r0, r7 - adds r0, r6 - bl TakeMailFromMon - ldr r0, _08124004 @ =gText_MailTakenFromPkmn - movs r1, 0 - bl DisplayPartyMenuMessage - ldr r1, _08124008 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _0812400C @ =Task_UpdateHeldItemSprite - str r1, [r0] - b _08124050 - .align 2, 0 -_08123FFC: .4byte gPartyMenu -_08124000: .4byte gPlayerParty -_08124004: .4byte gText_MailTakenFromPkmn -_08124008: .4byte gTasks -_0812400C: .4byte Task_UpdateHeldItemSprite -_08124010: - adds r0, r4, 0 - bl BufferBagFullCantTakeItemMessage - ldr r0, _08124030 @ =gStringVar4 - movs r1, 0 - bl DisplayPartyMenuMessage - ldr r1, _08124034 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _08124038 @ =Task_ReturnToChooseMonAfterText - str r1, [r0] - b _08124050 - .align 2, 0 -_08124030: .4byte gStringVar4 -_08124034: .4byte gTasks -_08124038: .4byte Task_ReturnToChooseMonAfterText -_0812403C: - movs r0, 0x5 - bl PlaySE -_08124042: - ldr r0, _0812405C @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _08124060 @ =Task_ReturnToChooseMonAfterText - str r0, [r1] -_08124050: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812405C: .4byte gTasks -_08124060: .4byte Task_ReturnToChooseMonAfterText - thumb_func_end Task_HandleLoseMailMessageYesNoInput - - thumb_func_start CursorCB_Cancel2 -CursorCB_Cancel2: @ 8124064 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _081240E0 @ =gPartyMenu - mov r8, r0 - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - adds r5, r1, 0 - muls r5, r0 - ldr r0, _081240E4 @ =gPlayerParty - mov r9, r0 - add r5, r9 - movs r0, 0x5 - bl PlaySE - ldr r4, _081240E8 @ =sPartyMenuInternal - ldr r0, [r4] - adds r0, 0xC - bl PartyMenuRemoveWindow - ldr r0, [r4] - adds r0, 0xD - bl PartyMenuRemoveWindow - mov r0, r8 - ldrb r4, [r0, 0x9] - adds r0, r5, 0 - bl GetPartyMenuActionsType - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - mov r0, r9 - adds r1, r4, 0 - bl SetPartyMonSelectionActions - movs r0, 0 - bl DisplaySelectionWindow - movs r0, 0x16 - bl DisplayPartyMenuStdMessage - ldr r1, _081240EC @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - movs r1, 0xFF - strh r1, [r0, 0x8] - ldr r1, _081240F0 @ =Task_HandleSelectionMenuInput - str r1, [r0] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081240E0: .4byte gPartyMenu -_081240E4: .4byte gPlayerParty -_081240E8: .4byte sPartyMenuInternal -_081240EC: .4byte gTasks -_081240F0: .4byte Task_HandleSelectionMenuInput - thumb_func_end CursorCB_Cancel2 - - thumb_func_start CursorCB_SendMon -CursorCB_SendMon: @ 81240F4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x5 - bl PlaySE - ldr r5, _08124120 @ =sPartyMenuInternal - ldr r0, [r5] - adds r0, 0xC - bl PartyMenuRemoveWindow - bl TrySwitchInPokemon - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08124124 - adds r0, r4, 0 - bl Task_ClosePartyMenu - b _08124142 - .align 2, 0 -_08124120: .4byte sPartyMenuInternal -_08124124: - ldr r0, [r5] - adds r0, 0xD - bl PartyMenuRemoveWindow - ldr r0, _08124148 @ =gStringVar4 - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r1, _0812414C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08124150 @ =Task_ReturnToChooseMonAfterText - str r1, [r0] -_08124142: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08124148: .4byte gStringVar4 -_0812414C: .4byte gTasks -_08124150: .4byte Task_ReturnToChooseMonAfterText - thumb_func_end CursorCB_SendMon - - thumb_func_start CursorCB_Enter -CursorCB_Enter: @ 8124154 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _0812417C @ =gPartyMenu - ldrb r1, [r0, 0x8] - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0x80 - bne _08124184 - movs r0, 0x2 - mov r8, r0 - ldr r1, _08124180 @ =gUnknown_8416B3E - str r1, [sp] - b _0812418C - .align 2, 0 -_0812417C: .4byte gPartyMenu -_08124180: .4byte gUnknown_8416B3E -_08124184: - movs r2, 0x3 - mov r8, r2 - ldr r0, _081241FC @ =gUnknown_8416B16 - str r0, [sp] -_0812418C: - ldr r4, _08124200 @ =sPartyMenuInternal - ldr r0, [r4] - adds r0, 0xC - bl PartyMenuRemoveWindow - ldr r0, [r4] - adds r0, 0xD - bl PartyMenuRemoveWindow - movs r5, 0 - lsls r1, r7, 2 - mov r9, r1 - cmp r5, r8 - bcs _08124222 - ldr r6, _08124204 @ =gPartyMenu - ldr r1, _08124208 @ =gTasks - mov r2, r9 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - mov r10, r0 -_081241B6: - ldr r0, _0812420C @ =gSelectedOrderFromParty - adds r4, r5, r0 - ldrb r0, [r4] - cmp r0, 0 - bne _08124218 - movs r0, 0x5 - bl PlaySE - ldrb r0, [r6, 0x9] - adds r0, 0x1 - strb r0, [r4] - adds r0, r5, 0x2 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08124210 @ =sPartyMenuBoxes - movs r2, 0x9 - ldrsb r2, [r6, r2] - lsls r2, 4 - ldr r1, [r1] - adds r1, r2 - movs r2, 0x1 - bl DisplayPartyPokemonDescriptionText - mov r0, r8 - subs r0, 0x1 - cmp r5, r0 - bne _081241F0 - bl MoveCursorToConfirm -_081241F0: - movs r0, 0 - bl DisplayPartyMenuStdMessage - ldr r0, _08124214 @ =Task_HandleChooseMonInput - mov r1, r10 - b _0812423C - .align 2, 0 -_081241FC: .4byte gUnknown_8416B16 -_08124200: .4byte sPartyMenuInternal -_08124204: .4byte gPartyMenu -_08124208: .4byte gTasks -_0812420C: .4byte gSelectedOrderFromParty -_08124210: .4byte sPartyMenuBoxes -_08124214: .4byte Task_HandleChooseMonInput -_08124218: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, r8 - bcc _081241B6 -_08124222: - movs r0, 0x1A - bl PlaySE - ldr r0, [sp] - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r0, _08124250 @ =gTasks - mov r2, r9 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldr r0, _08124254 @ =Task_ReturnToChooseMonAfterText -_0812423C: - str r0, [r1] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08124250: .4byte gTasks -_08124254: .4byte Task_ReturnToChooseMonAfterText - thumb_func_end CursorCB_Enter - - thumb_func_start MoveCursorToConfirm -MoveCursorToConfirm: @ 8124258 - push {r4,lr} - ldr r4, _08124274 @ =gPartyMenu - ldrb r0, [r4, 0x9] - movs r1, 0 - bl AnimatePartySlot - movs r0, 0x6 - strb r0, [r4, 0x9] - movs r1, 0x1 - bl AnimatePartySlot - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08124274: .4byte gPartyMenu - thumb_func_end MoveCursorToConfirm - - thumb_func_start CursorCB_NoEntry -CursorCB_NoEntry: @ 8124278 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - movs r0, 0x5 - bl PlaySE - ldr r4, _081242BC @ =sPartyMenuInternal - ldr r0, [r4] - adds r0, 0xC - bl PartyMenuRemoveWindow - ldr r0, [r4] - adds r0, 0xD - bl PartyMenuRemoveWindow - movs r4, 0 - ldr r3, _081242C0 @ =gSelectedOrderFromParty - ldr r6, _081242C4 @ =gPartyMenu - adds r5, r6, 0 -_0812429E: - adds r2, r4, r3 - ldrb r1, [r2] - movs r0, 0x9 - ldrsb r0, [r5, r0] - adds r0, 0x1 - cmp r1, r0 - bne _081242DC - movs r1, 0 - strb r1, [r2] - cmp r4, 0 - beq _081242C8 - cmp r4, 0x1 - beq _081242D4 - b _081242E6 - .align 2, 0 -_081242BC: .4byte sPartyMenuInternal -_081242C0: .4byte gSelectedOrderFromParty -_081242C4: .4byte gPartyMenu -_081242C8: - ldrb r0, [r3, 0x1] - strb r0, [r3] - ldrb r0, [r3, 0x2] - strb r0, [r3, 0x1] - strb r4, [r3, 0x2] - b _081242E6 -_081242D4: - ldrb r0, [r3, 0x2] - strb r0, [r3, 0x1] - strb r1, [r3, 0x2] - b _081242E6 -_081242DC: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _0812429E -_081242E6: - ldr r5, _08124344 @ =sPartyMenuBoxes - movs r0, 0x9 - ldrsb r0, [r6, r0] - lsls r0, 4 - ldr r1, [r5] - adds r1, r0 - movs r0, 0x1 - movs r2, 0x1 - bl DisplayPartyPokemonDescriptionText - ldr r4, _08124348 @ =gSelectedOrderFromParty - ldrb r0, [r4] - cmp r0, 0 - beq _08124312 - lsls r0, 4 - subs r0, 0x10 - ldr r1, [r5] - adds r1, r0 - movs r0, 0x2 - movs r2, 0x1 - bl DisplayPartyPokemonDescriptionText -_08124312: - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08124328 - lsls r0, 4 - subs r0, 0x10 - ldr r1, [r5] - adds r1, r0 - movs r0, 0x3 - movs r2, 0x1 - bl DisplayPartyPokemonDescriptionText -_08124328: - movs r0, 0 - bl DisplayPartyMenuStdMessage - ldr r0, _0812434C @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r0 - ldr r0, _08124350 @ =Task_HandleChooseMonInput - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08124344: .4byte sPartyMenuBoxes -_08124348: .4byte gSelectedOrderFromParty -_0812434C: .4byte gTasks -_08124350: .4byte Task_HandleChooseMonInput - thumb_func_end CursorCB_NoEntry - - thumb_func_start CursorCB_Store -CursorCB_Store: @ 8124354 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x5 - bl PlaySE - ldr r1, _0812437C @ =gSpecialVar_0x8004 - ldr r0, _08124380 @ =gPartyMenu - ldrb r0, [r0, 0x9] - lsls r0, 24 - asrs r0, 24 - strh r0, [r1] - adds r0, r4, 0 - bl Task_ClosePartyMenu - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812437C: .4byte gSpecialVar_0x8004 -_08124380: .4byte gPartyMenu - thumb_func_end CursorCB_Store - - thumb_func_start CursorCB_Register -CursorCB_Register: @ 8124384 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08124410 @ =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 r4, _08124414 @ =gPlayerParty - adds r0, r4 - movs r1, 0x41 - bl GetMonData - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 16 - mov r1, r9 - movs r0, 0x9 - ldrsb r0, [r1, r0] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r4 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - mov r1, r9 - movs r0, 0x9 - ldrsb r0, [r1, r0] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r4 - movs r1, 0x50 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80F9800 - ldr r0, [r0] - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl Trade_CanTradeSelectedMon - cmp r0, 0x1 - beq _08124418 - cmp r0, 0x2 - beq _0812442C - movs r0, 0x5 - bl PlaySE - adds r0, r7, 0 - bl Task_ClosePartyMenu - b _0812446C - .align 2, 0 -_08124410: .4byte gPartyMenu -_08124414: .4byte gPlayerParty -_08124418: - ldr r0, _08124424 @ =gStringVar4 - ldr r1, _08124428 @ =gText_PkmnCantBeTradedNow - bl StringExpandPlaceholders - b _08124434 - .align 2, 0 -_08124424: .4byte gStringVar4 -_08124428: .4byte gText_PkmnCantBeTradedNow -_0812442C: - ldr r0, _08124478 @ =gStringVar4 - ldr r1, _0812447C @ =gText_EggCantBeTradedNow - bl StringExpandPlaceholders -_08124434: - movs r0, 0x1A - bl PlaySE - ldr r4, _08124480 @ =sPartyMenuInternal - ldr r0, [r4] - adds r0, 0xC - bl PartyMenuRemoveWindow - ldr r0, [r4] - adds r0, 0xD - bl PartyMenuRemoveWindow - ldr r4, _08124478 @ =gStringVar4 - ldr r1, _08124484 @ =gText_PauseUntilPress - adds r0, r4, 0 - bl StringAppend - adds r0, r4, 0 - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r1, _08124488 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldr r1, _0812448C @ =Task_ReturnToChooseMonAfterText - str r1, [r0] -_0812446C: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08124478: .4byte gStringVar4 -_0812447C: .4byte gText_EggCantBeTradedNow -_08124480: .4byte sPartyMenuInternal -_08124484: .4byte gText_PauseUntilPress -_08124488: .4byte gTasks -_0812448C: .4byte Task_ReturnToChooseMonAfterText - thumb_func_end CursorCB_Register - - thumb_func_start CursorCB_Trade1 -CursorCB_Trade1: @ 8124490 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08124558 @ =gPartyMenu - mov r8, r0 - ldrb r0, [r0, 0x9] - lsls r0, 24 - asrs r0, 24 - movs r6, 0x64 - muls r0, r6 - ldr r4, _0812455C @ =gPlayerParty - adds r0, r4 - movs r1, 0x41 - bl GetMonData - mov r9, r0 - mov r1, r9 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - mov r1, r8 - movs r0, 0x9 - ldrsb r0, [r1, r0] - muls r0, r6 - adds r0, r4 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - mov r1, r8 - movs r0, 0x9 - ldrsb r0, [r1, r0] - muls r0, r6 - adds r0, r4 - movs r1, 0x50 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80F9800 - ldr r0, [r0] - ldr r1, _08124560 @ =gUnknown_203B064 - ldr r1, [r1] - ldr r2, _08124564 @ =gUnionRoomOfferedSpecies - ldrh r3, [r2] - ldr r2, _08124568 @ =gUnionRoomRequestedMonType - ldrb r2, [r2] - str r2, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - mov r2, r9 - bl GetUnionRoomTradeMessageId - cmp r0, 0 - beq _08124584 - ldr r5, _0812456C @ =gStringVar4 - ldr r1, _08124570 @ =sUnionRoomTradeMessages - subs r0, 0x1 - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r5, 0 - bl StringExpandPlaceholders - movs r0, 0x1A - bl PlaySE - ldr r4, _08124574 @ =sPartyMenuInternal - ldr r0, [r4] - adds r0, 0xC - bl PartyMenuRemoveWindow - ldr r0, [r4] - adds r0, 0xD - bl PartyMenuRemoveWindow - ldr r1, _08124578 @ =gText_PauseUntilPress - adds r0, r5, 0 - bl StringAppend - adds r0, r5, 0 - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r1, _0812457C @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldr r1, _08124580 @ =Task_ReturnToChooseMonAfterText - str r1, [r0] - b _08124590 - .align 2, 0 -_08124558: .4byte gPartyMenu -_0812455C: .4byte gPlayerParty -_08124560: .4byte gUnknown_203B064 -_08124564: .4byte gUnionRoomOfferedSpecies -_08124568: .4byte gUnionRoomRequestedMonType -_0812456C: .4byte gStringVar4 -_08124570: .4byte sUnionRoomTradeMessages -_08124574: .4byte sPartyMenuInternal -_08124578: .4byte gText_PauseUntilPress -_0812457C: .4byte gTasks -_08124580: .4byte Task_ReturnToChooseMonAfterText -_08124584: - movs r0, 0x5 - bl PlaySE - adds r0, r7, 0 - bl Task_ClosePartyMenu -_08124590: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end CursorCB_Trade1 - - thumb_func_start CursorCB_Trade2 -CursorCB_Trade2: @ 81245A0 - bx lr - thumb_func_end CursorCB_Trade2 - - thumb_func_start CursorCB_FieldMove -CursorCB_FieldMove: @ 81245A4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - bl Menu_GetCursorPos - ldr r5, _08124610 @ =sPartyMenuInternal - ldr r1, [r5] - lsls r0, 24 - lsrs r0, 24 - adds r1, 0xF - adds r1, r0 - ldrb r0, [r1] - subs r0, 0x12 - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x5 - bl PlaySE - ldr r1, _08124614 @ =sFieldMoveCursorCallbacks - lsls r0, r4, 3 - adds r7, r0, r1 - ldr r0, [r7] - cmp r0, 0 - bne _081245D6 - b _081247B4 -_081245D6: - ldr r0, [r5] - adds r0, 0xC - bl PartyMenuRemoveWindow - ldr r0, [r5] - adds r0, 0xD - bl PartyMenuRemoveWindow - bl MenuHelpers_LinkSomething - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081245FA - bl InUnionRoom - cmp r0, 0x1 - bne _0812461C -_081245FA: - adds r0, r4, 0 - subs r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08124618 - movs r0, 0xD - bl DisplayPartyMenuStdMessage - b _081247A6 - .align 2, 0 -_08124610: .4byte sPartyMenuInternal -_08124614: .4byte sFieldMoveCursorCallbacks -_08124618: - ldrb r0, [r7, 0x4] - b _081247A2 -_0812461C: - cmp r4, 0x6 - bhi _08124658 - movs r1, 0x82 - lsls r1, 4 - adds r0, r4, r1 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08124658 - ldr r0, _0812464C @ =gText_CantUseUntilNewBadge - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r1, _08124650 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08124654 @ =Task_ReturnToChooseMonAfterText - str r1, [r0] - b _081247B4 - .align 2, 0 -_0812464C: .4byte gText_CantUseUntilNewBadge -_08124650: .4byte gTasks -_08124654: .4byte Task_ReturnToChooseMonAfterText -_08124658: - ldr r1, _08124680 @ =sFieldMoveCursorCallbacks - lsls r0, r4, 3 - adds r5, r0, r1 - ldr r0, [r5] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0812466E - b _0812478C -_0812466E: - subs r0, r4, 0x2 - cmp r0, 0x8 - bhi _0812475C - lsls r0, 2 - ldr r1, _08124684 @ =_08124688 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08124680: .4byte sFieldMoveCursorCallbacks -_08124684: .4byte _08124688 - .align 2, 0 -_08124688: - .4byte _0812474C - .4byte _0812475C - .4byte _0812475C - .4byte _0812475C - .4byte _0812475C - .4byte _081246B4 - .4byte _081246F0 - .4byte _081246AC - .4byte _081246AC -_081246AC: - adds r0, r6, 0 - bl ChooseMonForSoftboiled - b _081247B4 -_081246B4: - ldr r0, _081246E0 @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x1C - ldrsb r0, [r1, r0] - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1, 0x1D] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r1, r0, 0 - ldr r0, _081246E4 @ =gStringVar1 - ldrb r1, [r1, 0x14] - bl GetMapNameGeneric - ldr r0, _081246E8 @ =gStringVar4 - ldr r1, _081246EC @ =gUnknown_8417640 - b _08124720 - .align 2, 0 -_081246E0: .4byte gSaveBlock1Ptr -_081246E4: .4byte gStringVar1 -_081246E8: .4byte gStringVar4 -_081246EC: .4byte gUnknown_8417640 -_081246F0: - ldr r0, _08124738 @ =gSaveBlock1Ptr - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x24 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r0, 16 - adds r1, 0x25 - ldrb r1, [r1] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r1, r0, 0 - ldr r0, _0812473C @ =gStringVar1 - ldrb r1, [r1, 0x14] - bl GetMapNameGeneric - ldr r0, _08124740 @ =gStringVar4 - ldr r1, _08124744 @ =gUnknown_8417615 -_08124720: - bl StringExpandPlaceholders - adds r0, r6, 0 - bl DisplayFieldMoveExitAreaMessage - ldr r0, _08124748 @ =sPartyMenuInternal - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 2 - adds r0, r1 - strh r4, [r0] - b _081247B4 - .align 2, 0 -_08124738: .4byte gSaveBlock1Ptr -_0812473C: .4byte gStringVar1 -_08124740: .4byte gStringVar4 -_08124744: .4byte gUnknown_8417615 -_08124748: .4byte sPartyMenuInternal -_0812474C: - ldr r1, _08124754 @ =gPartyMenu - ldr r0, _08124758 @ =sub_80C4EF8 - str r0, [r1] - b _08124778 - .align 2, 0 -_08124754: .4byte gPartyMenu -_08124758: .4byte sub_80C4EF8 -_0812475C: - ldr r1, _08124780 @ =gPartyMenu - ldr r0, _08124784 @ =CB2_ReturnToField - str r0, [r1] - bl GetCursorSelectionMonId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldr r1, _08124788 @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - bl sub_8124BB0 -_08124778: - adds r0, r6, 0 - bl Task_ClosePartyMenu - b _081247B4 - .align 2, 0 -_08124780: .4byte gPartyMenu -_08124784: .4byte CB2_ReturnToField -_08124788: .4byte gPlayerParty -_0812478C: - cmp r4, 0 - beq _0812479A - cmp r4, 0x4 - bne _081247A0 - bl DisplayCantUseSurfMessage - b _081247A6 -_0812479A: - bl DisplayCantUseFlashMessage - b _081247A6 -_081247A0: - ldrb r0, [r5, 0x4] -_081247A2: - bl DisplayPartyMenuStdMessage -_081247A6: - ldr r0, _081247BC @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _081247C0 @ =Task_CancelAfterAorBPress - str r0, [r1] -_081247B4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081247BC: .4byte gTasks -_081247C0: .4byte Task_CancelAfterAorBPress - thumb_func_end CursorCB_FieldMove - - thumb_func_start DisplayFieldMoveExitAreaMessage -DisplayFieldMoveExitAreaMessage: @ 81247C4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _081247E8 @ =gStringVar4 - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r1, _081247EC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _081247F0 @ =Task_FieldMoveExitAreaYesNo - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081247E8: .4byte gStringVar4 -_081247EC: .4byte gTasks -_081247F0: .4byte Task_FieldMoveExitAreaYesNo - thumb_func_end DisplayFieldMoveExitAreaMessage - - thumb_func_start Task_FieldMoveExitAreaYesNo -Task_FieldMoveExitAreaYesNo: @ 81247F4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08124818 - bl PartyMenuDisplayYesNoMenu - ldr r0, _08124820 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08124824 @ =Task_HandleFieldMoveExitAreaYesNoInput - str r0, [r1] -_08124818: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08124820: .4byte gTasks -_08124824: .4byte Task_HandleFieldMoveExitAreaYesNoInput - thumb_func_end Task_FieldMoveExitAreaYesNo - - thumb_func_start Task_HandleFieldMoveExitAreaYesNoInput -Task_HandleFieldMoveExitAreaYesNoInput: @ 8124828 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0812484E - cmp r1, 0 - bgt _08124848 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0812488C - b _081248A2 -_08124848: - cmp r1, 0x1 - beq _08124892 - b _081248A2 -_0812484E: - ldr r1, _0812487C @ =gPartyMenu - ldr r0, _08124880 @ =CB2_ReturnToField - str r0, [r1] - bl GetCursorSelectionMonId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldr r1, _08124884 @ =gPlayerParty - adds r0, r1 - ldr r1, _08124888 @ =sPartyMenuInternal - ldr r1, [r1] - movs r2, 0x86 - lsls r2, 2 - adds r1, r2 - ldrb r1, [r1] - bl sub_8124BB0 - adds r0, r4, 0 - bl Task_ClosePartyMenu - b _081248A2 - .align 2, 0 -_0812487C: .4byte gPartyMenu -_08124880: .4byte CB2_ReturnToField -_08124884: .4byte gPlayerParty -_08124888: .4byte sPartyMenuInternal -_0812488C: - movs r0, 0x5 - bl PlaySE -_08124892: - ldr r0, _081248A8 @ =gFieldCallback2 - movs r1, 0 - str r1, [r0] - ldr r0, _081248AC @ =gPostMenuFieldCallback - str r1, [r0] - adds r0, r4, 0 - bl Task_ReturnToChooseMonAfterText -_081248A2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081248A8: .4byte gFieldCallback2 -_081248AC: .4byte gPostMenuFieldCallback - thumb_func_end Task_HandleFieldMoveExitAreaYesNoInput - - thumb_func_start FieldCallback_PrepareFadeInFromMenu -FieldCallback_PrepareFadeInFromMenu: @ 81248B0 - push {lr} - bl sub_807DC00 - ldr r0, _081248C4 @ =Task_FieldMoveWaitForFade - movs r1, 0x8 - bl CreateTask - movs r0, 0x1 - pop {r1} - bx r1 - .align 2, 0 -_081248C4: .4byte Task_FieldMoveWaitForFade - thumb_func_end FieldCallback_PrepareFadeInFromMenu - - thumb_func_start Task_FieldMoveWaitForFade -Task_FieldMoveWaitForFade: @ 81248C8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsWeatherNotFadingIn - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _081248F4 - bl GetFieldMoveMonSpecies - ldr r1, _081248FC @ =gFieldEffectArguments - lsls r0, 16 - lsrs r0, 16 - str r0, [r1] - ldr r0, _08124900 @ =gPostMenuFieldCallback - ldr r0, [r0] - bl _call_via_r0 - adds r0, r4, 0 - bl DestroyTask -_081248F4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081248FC: .4byte gFieldEffectArguments -_08124900: .4byte gPostMenuFieldCallback - thumb_func_end Task_FieldMoveWaitForFade - - thumb_func_start GetFieldMoveMonSpecies -GetFieldMoveMonSpecies: @ 8124904 - push {lr} - ldr r0, _08124924 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08124928 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_08124924: .4byte gPartyMenu -_08124928: .4byte gPlayerParty - thumb_func_end GetFieldMoveMonSpecies - - thumb_func_start Task_CancelAfterAorBPress -Task_CancelAfterAorBPress: @ 812492C - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08124950 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08124946 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0812494C -_08124946: - adds r0, r2, 0 - bl CursorCB_Cancel1 -_0812494C: - pop {r0} - bx r0 - .align 2, 0 -_08124950: .4byte gMain - thumb_func_end Task_CancelAfterAorBPress - - thumb_func_start DisplayCantUseFlashMessage -DisplayCantUseFlashMessage: @ 8124954 - push {lr} - ldr r0, _0812496C @ =0x00000806 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08124970 - movs r0, 0xC - bl DisplayPartyMenuStdMessage - b _08124976 - .align 2, 0 -_0812496C: .4byte 0x00000806 -_08124970: - movs r0, 0xD - bl DisplayPartyMenuStdMessage -_08124976: - pop {r0} - bx r0 - thumb_func_end DisplayCantUseFlashMessage - - thumb_func_start FieldCallback_Surf -FieldCallback_Surf: @ 812497C - push {lr} - bl GetCursorSelectionMonId - ldr r1, _08124994 @ =gFieldEffectArguments - lsls r0, 24 - lsrs r0, 24 - str r0, [r1] - movs r0, 0x9 - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_08124994: .4byte gFieldEffectArguments - thumb_func_end FieldCallback_Surf - - thumb_func_start SetUpFieldMove_Surf -SetUpFieldMove_Surf: @ 8124998 - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsSemiDeepWater - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08124A00 - bl PartyHasMonWithSurf - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08124A00 - bl IsPlayerFacingSurfableFishableWater - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08124A00 - ldr r1, _081249F0 @ =gFieldCallback2 - ldr r0, _081249F4 @ =FieldCallback_PrepareFadeInFromMenu - str r0, [r1] - ldr r1, _081249F8 @ =gPostMenuFieldCallback - ldr r0, _081249FC @ =FieldCallback_Surf - str r0, [r1] - movs r0, 0x1 - b _08124A02 - .align 2, 0 -_081249F0: .4byte gFieldCallback2 -_081249F4: .4byte FieldCallback_PrepareFadeInFromMenu -_081249F8: .4byte gPostMenuFieldCallback -_081249FC: .4byte FieldCallback_Surf -_08124A00: - movs r0, 0 -_08124A02: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end SetUpFieldMove_Surf - - thumb_func_start DisplayCantUseSurfMessage -DisplayCantUseSurfMessage: @ 8124A0C - push {r4,lr} - sub sp, 0x4 - movs r0, 0x8 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _08124A24 - movs r0, 0x9 - bl DisplayPartyMenuStdMessage - b _08124A82 -_08124A24: - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsSemiDeepWater - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08124A56 - movs r0, 0xA - bl DisplayPartyMenuStdMessage - b _08124A82 -_08124A56: - ldr r0, _08124A78 @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x4 - ldrsb r0, [r1, r0] - cmp r0, 0x3 - bne _08124A7C - ldrb r0, [r1, 0x5] - subs r0, 0x23 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08124A7C - movs r0, 0xB - bl DisplayPartyMenuStdMessage - b _08124A82 - .align 2, 0 -_08124A78: .4byte gSaveBlock1Ptr -_08124A7C: - movs r0, 0x8 - bl DisplayPartyMenuStdMessage -_08124A82: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end DisplayCantUseSurfMessage - - thumb_func_start SetUpFieldMove_Fly -SetUpFieldMove_Fly: @ 8124A8C - push {lr} - ldr r0, _08124AA4 @ =gMapHeader - ldrb r0, [r0, 0x17] - bl Overworld_MapTypeAllowsTeleportAndFly - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08124AA8 - movs r0, 0 - b _08124AAA - .align 2, 0 -_08124AA4: .4byte gMapHeader -_08124AA8: - movs r0, 0x1 -_08124AAA: - pop {r1} - bx r1 - thumb_func_end SetUpFieldMove_Fly - - thumb_func_start CB2_ReturnToPartyMenuFromFlyMap -CB2_ReturnToPartyMenuFromFlyMap: @ 8124AB0 - push {lr} - sub sp, 0xC - movs r0, 0 - str r0, [sp] - ldr r0, _08124AD4 @ =Task_HandleChooseMonInput - str r0, [sp, 0x4] - ldr r0, _08124AD8 @ =CB2_ReturnToStartMenu - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl InitPartyMenu - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_08124AD4: .4byte Task_HandleChooseMonInput -_08124AD8: .4byte CB2_ReturnToStartMenu - thumb_func_end CB2_ReturnToPartyMenuFromFlyMap - - thumb_func_start FieldCallback_Waterfall -FieldCallback_Waterfall: @ 8124ADC - push {lr} - bl GetCursorSelectionMonId - ldr r1, _08124AF4 @ =gFieldEffectArguments - lsls r0, 24 - lsrs r0, 24 - str r0, [r1] - movs r0, 0x2B - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_08124AF4: .4byte gFieldEffectArguments - thumb_func_end FieldCallback_Waterfall - - thumb_func_start SetUpFieldMove_Waterfall -SetUpFieldMove_Waterfall: @ 8124AF8 - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsWaterfall - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08124B54 - bl IsPlayerSurfingNorth - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08124B54 - ldr r1, _08124B44 @ =gFieldCallback2 - ldr r0, _08124B48 @ =FieldCallback_PrepareFadeInFromMenu - str r0, [r1] - ldr r1, _08124B4C @ =gPostMenuFieldCallback - ldr r0, _08124B50 @ =FieldCallback_Waterfall - str r0, [r1] - movs r0, 0x1 - b _08124B56 - .align 2, 0 -_08124B44: .4byte gFieldCallback2 -_08124B48: .4byte FieldCallback_PrepareFadeInFromMenu -_08124B4C: .4byte gPostMenuFieldCallback -_08124B50: .4byte FieldCallback_Waterfall -_08124B54: - movs r0, 0 -_08124B56: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end SetUpFieldMove_Waterfall - - thumb_func_start sub_8124B60 -sub_8124B60: @ 8124B60 - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - movs r0, 0x8 - bl Alloc - adds r7, r0, 0 - adds r0, r6, 0 - movs r1, 0x41 - bl GetMonData - strh r0, [r7, 0x4] - strh r4, [r7] - strh r5, [r7, 0x2] - ldr r0, _08124B98 @ =gPartyMenu - ldrb r0, [r0, 0xB] - cmp r0, 0x6 - bne _08124B9C - movs r0, 0xA - adds r1, r7, 0 - bl sub_8113550 - b _08124BA4 - .align 2, 0 -_08124B98: .4byte gPartyMenu -_08124B9C: - movs r0, 0x9 - adds r1, r7, 0 - bl sub_8113550 -_08124BA4: - adds r0, r7, 0 - bl Free - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8124B60 - - thumb_func_start sub_8124BB0 -sub_8124BB0: @ 8124BB0 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - movs r0, 0x4 - bl Alloc - adds r6, r0, 0 - adds r0, r5, 0 - movs r1, 0x41 - bl GetMonData - strh r0, [r6] - strb r4, [r6, 0x2] - ldrb r0, [r6, 0x2] - cmp r0, 0x7 - beq _08124BDA - cmp r0, 0x8 - beq _08124BFC - movs r0, 0xFF - b _08124C00 -_08124BDA: - ldr r0, _08124BF8 @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x1C - ldrsb r0, [r1, r0] - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1, 0x1D] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - b _08124BFE - .align 2, 0 -_08124BF8: .4byte gSaveBlock1Ptr -_08124BFC: - ldr r0, _08124C18 @ =gMapHeader -_08124BFE: - ldrb r0, [r0, 0x14] -_08124C00: - strb r0, [r6, 0x3] - movs r0, 0x24 - adds r1, r6, 0 - bl sub_8113550 - adds r0, r6, 0 - bl Free - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08124C18: .4byte gMapHeader - thumb_func_end sub_8124BB0 - - thumb_func_start sub_8124C1C -sub_8124C1C: @ 8124C1C - push {r4,r5,lr} - adds r5, r0, 0 - movs r0, 0x8 - bl Alloc - adds r4, r0, 0 - ldrb r0, [r5] - strb r0, [r4] - ldrb r0, [r5, 0x1] - strb r0, [r4, 0x1] - movs r0, 0 - ldrsb r0, [r4, r0] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ldrsb r1, [r4, r1] - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r5, r0, 0 - adds r0, r4, 0 - bl Free - movs r0, 0x4 - bl Alloc - adds r4, r0, 0 - bl GetCursorSelectionMonId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldr r1, _08124C88 @ =gPlayerParty - adds r0, r1 - movs r1, 0x41 - bl GetMonData - strh r0, [r4] - movs r0, 0x2 - strb r0, [r4, 0x2] - ldrb r0, [r5, 0x14] - strb r0, [r4, 0x3] - movs r0, 0x24 - adds r1, r4, 0 - bl sub_8113550 - adds r0, r4, 0 - bl Free - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08124C88: .4byte gPlayerParty - thumb_func_end sub_8124C1C - - thumb_func_start CB2_ShowPartyMenuForItemUse -CB2_ShowPartyMenuForItemUse: @ 8124C8C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - ldr r6, _08124CB4 @ =CB2_ReturnToBagMenu - ldr r0, _08124CB8 @ =gMain - ldr r1, _08124CBC @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08124CCC - movs r0, 0x1 - mov r8, r0 - bl GetPartyLayoutFromBattleType - lsls r0, 24 - lsrs r7, r0, 24 - b _08124CD2 - .align 2, 0 -_08124CB4: .4byte CB2_ReturnToBagMenu -_08124CB8: .4byte gMain -_08124CBC: .4byte 0x00000439 -_08124CC0: - ldr r0, _08124CC8 @ =gPartyMenu - strb r5, [r0, 0x9] - b _08124D16 - .align 2, 0 -_08124CC8: .4byte gPartyMenu -_08124CCC: - movs r1, 0 - mov r8, r1 - movs r7, 0 -_08124CD2: - ldr r4, _08124D30 @ =gSpecialVar_ItemId - ldrh r0, [r4] - bl GetItemEffectType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xA - bne _08124D44 - ldr r1, _08124D34 @ =gPartyMenu - movs r0, 0 - strb r0, [r1, 0x9] - movs r5, 0 -_08124CEA: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08124D38 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08124D0C - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _08124CC0 -_08124D0C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _08124CEA -_08124D16: - ldr r0, _08124D30 @ =gSpecialVar_ItemId - ldrh r0, [r0] - bl GetPocketByItemId - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bne _08124D28 - ldr r6, _08124D3C @ =sub_8124DB0 -_08124D28: - ldr r1, _08124D40 @ =Task_SetSacredAshCB - movs r0, 0x7F - b _08124D6A - .align 2, 0 -_08124D30: .4byte gSpecialVar_ItemId -_08124D34: .4byte gPartyMenu -_08124D38: .4byte gPlayerParty -_08124D3C: .4byte sub_8124DB0 -_08124D40: .4byte Task_SetSacredAshCB -_08124D44: - ldrh r0, [r4] - bl GetPocketByItemId - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - beq _08124D5A - cmp r0, 0x5 - beq _08124D64 - movs r0, 0x5 - b _08124D68 -_08124D5A: - movs r0, 0x4 - ldr r6, _08124D60 @ =sub_8124DA0 - b _08124D68 - .align 2, 0 -_08124D60: .4byte sub_8124DA0 -_08124D64: - movs r0, 0x5 - ldr r6, _08124D88 @ =sub_8124DB0 -_08124D68: - ldr r1, _08124D8C @ =Task_HandleChooseMonInput -_08124D6A: - str r0, [sp] - str r1, [sp, 0x4] - str r6, [sp, 0x8] - mov r0, r8 - adds r1, r7, 0 - movs r2, 0x3 - movs r3, 0x1 - bl InitPartyMenu - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08124D88: .4byte sub_8124DB0 -_08124D8C: .4byte Task_HandleChooseMonInput - thumb_func_end CB2_ShowPartyMenuForItemUse - - thumb_func_start CB2_ReturnToBagMenu -CB2_ReturnToBagMenu: @ 8124D90 - push {lr} - movs r0, 0xB - movs r1, 0x3 - movs r2, 0 - bl GoToBagMenu - pop {r0} - bx r0 - thumb_func_end CB2_ReturnToBagMenu - - thumb_func_start sub_8124DA0 -sub_8124DA0: @ 8124DA0 - push {lr} - movs r0, 0x5 - movs r1, 0 - movs r2, 0xFF - bl InitTMCase - pop {r0} - bx r0 - thumb_func_end sub_8124DA0 - - thumb_func_start sub_8124DB0 -sub_8124DB0: @ 8124DB0 - push {lr} - movs r0, 0x6 - movs r1, 0 - movs r2, 0xFF - bl InitBerryPouch - pop {r0} - bx r0 - thumb_func_end sub_8124DB0 - - thumb_func_start sub_8124DC0 -sub_8124DC0: @ 8124DC0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08124DD8 @ =sPartyMenuInternal - ldr r2, [r1] - ldr r1, _08124DDC @ =sub_8124DE0 - str r1, [r2, 0x4] - bl Task_ClosePartyMenu - pop {r0} - bx r0 - .align 2, 0 -_08124DD8: .4byte sPartyMenuInternal -_08124DDC: .4byte sub_8124DE0 - thumb_func_end sub_8124DC0 - - thumb_func_start sub_8124DE0 -sub_8124DE0: @ 8124DE0 - push {r4,lr} - ldr r4, _08124E0C @ =gSpecialVar_ItemId - ldrh r0, [r4] - bl CheckIfItemIsTMHMOrEvolutionStone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _08124E2C - bl sub_8126C24 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08124E18 - ldr r0, _08124E10 @ =gPartyMenu - ldrb r0, [r0, 0x9] - ldrh r1, [r4] - ldr r2, _08124E14 @ =ItemUseCB_EvolutionStone - bl sub_811C540 - b _08124E38 - .align 2, 0 -_08124E0C: .4byte gSpecialVar_ItemId -_08124E10: .4byte gPartyMenu -_08124E14: .4byte ItemUseCB_EvolutionStone -_08124E18: - ldr r2, _08124E28 @ =gPartyMenu - ldrb r0, [r2, 0x9] - ldrh r1, [r4] - ldr r2, [r2] - bl sub_811C5AC - b _08124E38 - .align 2, 0 -_08124E28: .4byte gPartyMenu -_08124E2C: - ldr r0, _08124E40 @ =gPartyMenu - ldrb r0, [r0, 0x9] - ldrh r1, [r4] - ldr r2, _08124E44 @ =sub_8124E48 - bl sub_811C540 -_08124E38: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08124E40: .4byte gPartyMenu -_08124E44: .4byte sub_8124E48 - thumb_func_end sub_8124DE0 - - thumb_func_start sub_8124E48 -sub_8124E48: @ 8124E48 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - ldr r7, _08124EBC @ =gSpecialVar_ItemId - ldrh r0, [r7] - bl ItemId_GetPocket - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _08124EC8 - bl sub_811D178 - cmp r0, 0x1 - bne _08124EC8 - ldr r0, _08124EC0 @ =gPartyMenu - mov r8, r0 - ldrb r0, [r0, 0x9] - lsls r0, 24 - asrs r0, 24 - movs r6, 0x64 - adds r4, r0, 0 - muls r4, r6 - ldr r5, _08124EC4 @ =gPlayerParty - adds r4, r5 - ldrh r0, [r7] - bl ItemIdToBattleMoveId - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl GiveMoveToMon - mov r1, r8 - movs r0, 0x9 - ldrsb r0, [r1, r0] - muls r0, r6 - adds r0, r5 - movs r1, 0x4 - bl AdjustFriendship - ldrh r1, [r7] - movs r0, 0xA9 - lsls r0, 1 - cmp r1, r0 - bhi _08124EB0 - adds r0, r1, 0 - movs r1, 0x1 - bl RemoveBagItem -_08124EB0: - mov r1, r8 - ldr r0, [r1] - bl SetMainCallback2 - b _08124EE6 - .align 2, 0 -_08124EBC: .4byte gSpecialVar_ItemId -_08124EC0: .4byte gPartyMenu -_08124EC4: .4byte gPlayerParty -_08124EC8: - ldr r2, _08124EF4 @ =gPartyMenu - ldrb r0, [r2, 0x8] - lsls r0, 28 - lsrs r0, 28 - ldrb r3, [r2, 0x9] - movs r1, 0x7F - str r1, [sp] - ldr r1, _08124EF8 @ =Task_SetSacredAshCB - str r1, [sp, 0x4] - ldr r1, [r2] - str r1, [sp, 0x8] - movs r1, 0xFF - movs r2, 0 - bl InitPartyMenu -_08124EE6: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08124EF4: .4byte gPartyMenu -_08124EF8: .4byte Task_SetSacredAshCB - thumb_func_end sub_8124E48 - - thumb_func_start sub_8124EFC -sub_8124EFC: @ 8124EFC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - bl sub_811D178 - cmp r0, 0x1 - bne _08124F94 - ldr r0, _08124F88 @ =gPartyMenu - mov r8, r0 - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - adds r5, r1, 0 - muls r5, r0 - ldr r0, _08124F8C @ =gPlayerParty - adds r5, r0 - bl GetMoveSlotToReplace - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r1, r4, 0 - adds r1, 0xD - adds r0, r5, 0 - bl GetMonData - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 16 - adds r0, r5, 0 - adds r1, r4, 0 - bl RemoveMonPPBonus - ldr r7, _08124F90 @ =gSpecialVar_ItemId - ldrh r0, [r7] - bl ItemIdToBattleMoveId - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - adds r2, r4, 0 - bl SetMonMoveSlot - adds r0, r5, 0 - movs r1, 0x4 - bl AdjustFriendship - ldrh r2, [r7] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r6, 0 - bl ItemUse_SetQuestLogEvent - ldrh r1, [r7] - movs r0, 0xA9 - lsls r0, 1 - cmp r1, r0 - bhi _08124F7C - adds r0, r1, 0 - movs r1, 0x1 - bl RemoveBagItem -_08124F7C: - mov r1, r8 - ldr r0, [r1] - bl SetMainCallback2 - b _08124FB2 - .align 2, 0 -_08124F88: .4byte gPartyMenu -_08124F8C: .4byte gPlayerParty -_08124F90: .4byte gSpecialVar_ItemId -_08124F94: - ldr r4, _08124FC0 @ =gPartyMenu - ldrb r0, [r4, 0x8] - lsls r0, 28 - lsrs r0, 28 - ldrb r2, [r4, 0xB] - ldrb r3, [r4, 0x9] - movs r1, 0x7F - str r1, [sp] - ldr r1, _08124FC4 @ =Task_SetSacredAshCB - str r1, [sp, 0x4] - ldr r1, [r4] - str r1, [sp, 0x8] - movs r1, 0xFF - bl InitPartyMenu -_08124FB2: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08124FC0: .4byte gPartyMenu -_08124FC4: .4byte Task_SetSacredAshCB - thumb_func_end sub_8124EFC - - thumb_func_start Task_SetSacredAshCB -Task_SetSacredAshCB: @ 8124FC8 - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r0, _08125000 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08124FFA - ldr r0, _08125004 @ =gPartyMenu - ldrb r1, [r0, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - bne _08124FEE - ldr r0, _08125008 @ =sPartyMenuInternal - ldr r1, [r0] - ldr r0, _0812500C @ =CB2_SetUpExitToBattleScreen - str r0, [r1, 0x4] -_08124FEE: - ldr r0, _08125010 @ =gItemUseCB - ldr r1, _08125014 @ =Task_ClosePartyMenuAfterText - ldr r2, [r0] - adds r0, r3, 0 - bl _call_via_r2 -_08124FFA: - pop {r0} - bx r0 - .align 2, 0 -_08125000: .4byte gPaletteFade -_08125004: .4byte gPartyMenu -_08125008: .4byte sPartyMenuInternal -_0812500C: .4byte CB2_SetUpExitToBattleScreen -_08125010: .4byte gItemUseCB -_08125014: .4byte Task_ClosePartyMenuAfterText - thumb_func_end Task_SetSacredAshCB - - thumb_func_start IsHPRecoveryItem -IsHPRecoveryItem: @ 8125018 - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xAF - bne _08125034 - ldr r0, _0812502C @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _08125030 @ =0x00003108 - adds r0, r1 - b _0812503E - .align 2, 0 -_0812502C: .4byte gSaveBlock1Ptr -_08125030: .4byte 0x00003108 -_08125034: - ldr r1, _0812504C @ =gItemEffectTable - subs r0, 0xD - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] -_0812503E: - ldrb r1, [r0, 0x4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _08125050 - movs r0, 0 - b _08125052 - .align 2, 0 -_0812504C: .4byte gItemEffectTable -_08125050: - movs r0, 0x1 -_08125052: - pop {r1} - bx r1 - thumb_func_end IsHPRecoveryItem - - thumb_func_start GetMedicineItemEffectMessage -GetMedicineItemEffectMessage: @ 8125058 - push {lr} - lsls r0, 16 - lsrs r0, 16 - bl GetItemEffectType - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x3 - cmp r0, 0x12 - bls _0812506E - b _08125204 -_0812506E: - lsls r0, 2 - ldr r1, _08125078 @ =_0812507C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08125078: .4byte _0812507C - .align 2, 0 -_0812507C: - .4byte _081250C8 - .4byte _081250DC - .4byte _081250F0 - .4byte _08125104 - .4byte _08125118 - .4byte _0812512C - .4byte _08125140 - .4byte _08125204 - .4byte _08125154 - .4byte _08125178 - .4byte _08125168 - .4byte _081251A8 - .4byte _081251B8 - .4byte _08125198 - .4byte _08125188 - .4byte _08125204 - .4byte _081251DC - .4byte _081251DC - .4byte _081251F0 -_081250C8: - ldr r0, _081250D4 @ =gStringVar4 - ldr r1, _081250D8 @ =gText_PkmnCuredOfPoison - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_081250D4: .4byte gStringVar4 -_081250D8: .4byte gText_PkmnCuredOfPoison -_081250DC: - ldr r0, _081250E8 @ =gStringVar4 - ldr r1, _081250EC @ =gText_PkmnWokeUp2 - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_081250E8: .4byte gStringVar4 -_081250EC: .4byte gText_PkmnWokeUp2 -_081250F0: - ldr r0, _081250FC @ =gStringVar4 - ldr r1, _08125100 @ =gText_PkmnBurnHealed - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_081250FC: .4byte gStringVar4 -_08125100: .4byte gText_PkmnBurnHealed -_08125104: - ldr r0, _08125110 @ =gStringVar4 - ldr r1, _08125114 @ =gText_PkmnThawedOut - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_08125110: .4byte gStringVar4 -_08125114: .4byte gText_PkmnThawedOut -_08125118: - ldr r0, _08125124 @ =gStringVar4 - ldr r1, _08125128 @ =gText_PkmnCuredOfParalysis - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_08125124: .4byte gStringVar4 -_08125128: .4byte gText_PkmnCuredOfParalysis -_0812512C: - ldr r0, _08125138 @ =gStringVar4 - ldr r1, _0812513C @ =gText_PkmnSnappedOutOfConfusion - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_08125138: .4byte gStringVar4 -_0812513C: .4byte gText_PkmnSnappedOutOfConfusion -_08125140: - ldr r0, _0812514C @ =gStringVar4 - ldr r1, _08125150 @ =gText_PkmnGotOverInfatuation - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_0812514C: .4byte gStringVar4 -_08125150: .4byte gText_PkmnGotOverInfatuation -_08125154: - ldr r0, _08125160 @ =gStringVar4 - ldr r1, _08125164 @ =gText_PkmnBecameHealthy - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_08125160: .4byte gStringVar4 -_08125164: .4byte gText_PkmnBecameHealthy -_08125168: - ldr r0, _08125170 @ =gStringVar2 - ldr r1, _08125174 @ =gText_HP3 - b _081251BC - .align 2, 0 -_08125170: .4byte gStringVar2 -_08125174: .4byte gText_HP3 -_08125178: - ldr r0, _08125180 @ =gStringVar2 - ldr r1, _08125184 @ =gText_Attack3 - b _081251BC - .align 2, 0 -_08125180: .4byte gStringVar2 -_08125184: .4byte gText_Attack3 -_08125188: - ldr r0, _08125190 @ =gStringVar2 - ldr r1, _08125194 @ =gText_Defense3 - b _081251BC - .align 2, 0 -_08125190: .4byte gStringVar2 -_08125194: .4byte gText_Defense3 -_08125198: - ldr r0, _081251A0 @ =gStringVar2 - ldr r1, _081251A4 @ =gText_Speed2 - b _081251BC - .align 2, 0 -_081251A0: .4byte gStringVar2 -_081251A4: .4byte gText_Speed2 -_081251A8: - ldr r0, _081251B0 @ =gStringVar2 - ldr r1, _081251B4 @ =gText_SpAtk3 - b _081251BC - .align 2, 0 -_081251B0: .4byte gStringVar2 -_081251B4: .4byte gText_SpAtk3 -_081251B8: - ldr r0, _081251CC @ =gStringVar2 - ldr r1, _081251D0 @ =gText_SpDef3 -_081251BC: - bl StringCopy - ldr r0, _081251D4 @ =gStringVar4 - ldr r1, _081251D8 @ =gText_PkmnBaseVar2StatIncreased - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_081251CC: .4byte gStringVar2 -_081251D0: .4byte gText_SpDef3 -_081251D4: .4byte gStringVar4 -_081251D8: .4byte gText_PkmnBaseVar2StatIncreased -_081251DC: - ldr r0, _081251E8 @ =gStringVar4 - ldr r1, _081251EC @ =gText_MovesPPIncreased - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_081251E8: .4byte gStringVar4 -_081251EC: .4byte gText_MovesPPIncreased -_081251F0: - ldr r0, _081251FC @ =gStringVar4 - ldr r1, _08125200 @ =gText_PPWasRestored - bl StringExpandPlaceholders - b _0812520C - .align 2, 0 -_081251FC: .4byte gStringVar4 -_08125200: .4byte gText_PPWasRestored -_08125204: - ldr r0, _08125210 @ =gStringVar4 - ldr r1, _08125214 @ =gText_WontHaveEffect - bl StringExpandPlaceholders -_0812520C: - pop {r0} - bx r0 - .align 2, 0 -_08125210: .4byte gStringVar4 -_08125214: .4byte gText_WontHaveEffect - thumb_func_end GetMedicineItemEffectMessage - - thumb_func_start NotUsingHPEVItemOnShedinja -NotUsingHPEVItemOnShedinja: @ 8125218 - push {r4,lr} - adds r4, r0, 0 - lsls r0, r1, 16 - lsrs r0, 16 - bl GetItemEffectType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xD - bne _08125244 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - ldr r1, _08125240 @ =0x0000012f - cmp r0, r1 - bne _08125244 - movs r0, 0 - b _08125246 - .align 2, 0 -_08125240: .4byte 0x0000012f -_08125244: - movs r0, 0x1 -_08125246: - pop {r4} - pop {r1} - bx r1 - thumb_func_end NotUsingHPEVItemOnShedinja - - thumb_func_start IsItemFlute -IsItemFlute: @ 812524C - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x27 - beq _0812525E - cmp r0, 0x29 - beq _0812525E - cmp r0, 0x28 - bne _08125262 -_0812525E: - movs r0, 0x1 - b _08125264 -_08125262: - movs r0, 0 -_08125264: - pop {r1} - bx r1 - thumb_func_end IsItemFlute - - thumb_func_start ExecuteTableBasedItemEffect_ -ExecuteTableBasedItemEffect_: @ 8125268 - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 16 - lsrs r5, r1, 16 - lsls r2, 24 - lsrs r6, r2, 24 - ldr r0, _08125294 @ =gMain - ldr r1, _08125298 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _081252A0 - movs r0, 0x64 - muls r0, r3 - ldr r1, _0812529C @ =gPlayerParty - adds r0, r1 - adds r1, r5, 0 - adds r2, r3, 0 - b _081252BA - .align 2, 0 -_08125294: .4byte gMain -_08125298: .4byte 0x00000439 -_0812529C: .4byte gPlayerParty -_081252A0: - movs r0, 0x64 - adds r4, r3, 0 - muls r4, r0 - ldr r0, _081252CC @ =gPlayerParty - adds r4, r0 - adds r0, r3, 0 - bl GetPartyIdFromBattleSlot - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r5, 0 -_081252BA: - adds r3, r6, 0 - bl ExecuteTableBasedItemEffect - lsls r0, 24 - lsrs r0, 24 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081252CC: .4byte gPlayerParty - thumb_func_end ExecuteTableBasedItemEffect_ - - thumb_func_start sub_81252D0 -sub_81252D0: @ 81252D0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r1 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08125300 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08125304 @ =gPlayerParty - adds r5, r1, r0 - ldr r0, _08125308 @ =gSpecialVar_ItemId - ldrh r6, [r0] - adds r0, r5, 0 - adds r1, r6, 0 - bl NotUsingHPEVItemOnShedinja - lsls r0, 24 - cmp r0, 0 - bne _0812530C - movs r4, 0x1 - b _08125342 - .align 2, 0 -_08125300: .4byte gPartyMenu -_08125304: .4byte gPlayerParty -_08125308: .4byte gSpecialVar_ItemId -_0812530C: - adds r0, r6, 0 - bl IsHPRecoveryItem - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08125330 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - movs r1, 0x3A - bl GetMonData -_08125330: - ldr r0, _08125370 @ =gPartyMenu - ldrb r2, [r0, 0x9] - adds r0, r5, 0 - adds r1, r6, 0 - movs r3, 0 - bl PokemonUseItemEffects2 - lsls r0, 24 - lsrs r4, r0, 24 -_08125342: - movs r0, 0x5 - bl PlaySE - cmp r4, 0 - beq _08125380 - ldr r1, _08125374 @ =gPartyMenuUseExitCallback - movs r0, 0 - strb r0, [r1] - ldr r0, _08125378 @ =gText_WontHaveEffect - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _0812537C @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - mov r1, r8 - str r1, [r0] - b _08125398 - .align 2, 0 -_08125370: .4byte gPartyMenu -_08125374: .4byte gPartyMenuUseExitCallback -_08125378: .4byte gText_WontHaveEffect -_0812537C: .4byte gTasks -_08125380: - ldr r3, _081253A4 @ =0x0000ffff - movs r0, 0x4 - adds r1, r5, 0 - adds r2, r6, 0 - bl ItemUse_SetQuestLogEvent - adds r0, r7, 0 - bl sub_8124DC0 - ldr r1, _081253A8 @ =gItemUseCB - ldr r0, _081253AC @ =ItemUseCB_Medicine - str r0, [r1] -_08125398: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081253A4: .4byte 0x0000ffff -_081253A8: .4byte gItemUseCB -_081253AC: .4byte ItemUseCB_Medicine - thumb_func_end sub_81252D0 - - thumb_func_start ItemUseCB_Medicine -ItemUseCB_Medicine: @ 81253B0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - str r1, [sp, 0x4] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - movs r0, 0 - mov r10, r0 - ldr r0, _08125438 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r1, r0 - ldr r0, _0812543C @ =gPlayerParty - adds r5, r1, r0 - ldr r0, _08125440 @ =gSpecialVar_ItemId - ldrh r6, [r0] - adds r0, r5, 0 - adds r1, r6, 0 - bl NotUsingHPEVItemOnShedinja - lsls r0, 24 - cmp r0, 0 - beq _08125428 - adds r0, r6, 0 - bl IsHPRecoveryItem - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x1 - bne _08125416 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - adds r0, r5, 0 - movs r1, 0x3A - bl GetMonData - cmp r10, r0 - bne _08125416 - movs r1, 0 - mov r8, r1 -_08125416: - ldr r4, _08125438 @ =gPartyMenu - ldrb r0, [r4, 0x9] - adds r1, r6, 0 - movs r2, 0 - bl ExecuteTableBasedItemEffect_ - lsls r0, 24 - cmp r0, 0 - beq _0812544C -_08125428: - ldr r1, _08125444 @ =gPartyMenuUseExitCallback - movs r0, 0 - strb r0, [r1] - movs r0, 0x5 - bl PlaySE - ldr r0, _08125448 @ =gText_WontHaveEffect - b _0812551C - .align 2, 0 -_08125438: .4byte gPartyMenu -_0812543C: .4byte gPlayerParty -_08125440: .4byte gSpecialVar_ItemId -_08125444: .4byte gPartyMenuUseExitCallback -_08125448: .4byte gText_WontHaveEffect -_0812544C: - ldr r1, _08125474 @ =gPartyMenuUseExitCallback - movs r0, 0x1 - strb r0, [r1] - adds r0, r6, 0 - bl IsItemFlute - lsls r0, 24 - cmp r0, 0 - bne _08125478 - movs r0, 0x1 - bl PlaySE - ldrb r0, [r4, 0xB] - cmp r0, 0xE - beq _0812547E - adds r0, r6, 0 - movs r1, 0x1 - bl RemoveBagItem - b _0812547E - .align 2, 0 -_08125474: .4byte gPartyMenuUseExitCallback -_08125478: - movs r0, 0x6E - bl PlaySE -_0812547E: - ldr r4, _081254FC @ =sPartyMenuBoxes - ldr r7, _08125500 @ =gPartyMenu - movs r0, 0x9 - ldrsb r0, [r7, r0] - lsls r0, 4 - ldr r1, [r4] - adds r1, r0 - adds r0, r5, 0 - bl SetPartyMonAilmentGfx - ldr r2, _08125504 @ =gSprites - movs r0, 0x9 - ldrsb r0, [r7, r0] - ldr r1, [r4] - lsls r0, 4 - adds r3, r0, r1 - ldrb r1, [r3, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 29 - cmp r0, 0 - bge _081254BC - adds r0, r5, 0 - adds r1, r3, 0 - movs r2, 0x1 - bl DisplayPartyPokemonLevelCheck -_081254BC: - mov r2, r8 - cmp r2, 0x1 - bne _0812550C - mov r0, r10 - cmp r0, 0 - bne _081254D0 - ldrb r0, [r7, 0x9] - movs r1, 0x1 - bl AnimatePartySlot -_081254D0: - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - adds r3, r0, 0 - mov r1, r10 - subs r3, r1 - lsls r3, 16 - asrs r3, 16 - ldrb r1, [r7, 0x9] - ldr r0, _08125508 @ =Task_DisplayHPRestoredMessage - str r0, [sp] - mov r0, r9 - movs r2, 0x1 - bl PartyMenuModifyHP - mov r0, r9 - movs r1, 0 - mov r2, r10 - bl ResetHPTaskData - b _08125538 - .align 2, 0 -_081254FC: .4byte sPartyMenuBoxes -_08125500: .4byte gPartyMenu -_08125504: .4byte gSprites -_08125508: .4byte Task_DisplayHPRestoredMessage -_0812550C: - ldr r1, _08125548 @ =gStringVar1 - adds r0, r5, 0 - bl GetMonNickname - adds r0, r6, 0 - bl GetMedicineItemEffectMessage - ldr r0, _0812554C @ =gStringVar4 -_0812551C: - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _08125550 @ =gTasks - mov r2, r9 - lsls r0, r2, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - ldr r1, [sp, 0x4] - str r1, [r0] -_08125538: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08125548: .4byte gStringVar1 -_0812554C: .4byte gStringVar4 -_08125550: .4byte gTasks - thumb_func_end ItemUseCB_Medicine - - thumb_func_start Task_DisplayHPRestoredMessage -Task_DisplayHPRestoredMessage: @ 8125554 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _081255A0 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081255A4 @ =gPlayerParty - adds r0, r1 - ldr r1, _081255A8 @ =gStringVar1 - bl GetMonNickname - ldr r4, _081255AC @ =gStringVar4 - ldr r1, _081255B0 @ =gText_PkmnHPRestoredByVar2 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - bl HandleBattleLowHpMusicChange - ldr r1, _081255B4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _081255B8 @ =Task_ClosePartyMenuAfterText - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081255A0: .4byte gPartyMenu -_081255A4: .4byte gPlayerParty -_081255A8: .4byte gStringVar1 -_081255AC: .4byte gStringVar4 -_081255B0: .4byte gText_PkmnHPRestoredByVar2 -_081255B4: .4byte gTasks -_081255B8: .4byte Task_ClosePartyMenuAfterText - thumb_func_end Task_DisplayHPRestoredMessage - - thumb_func_start Task_ClosePartyMenuAfterText -Task_ClosePartyMenuAfterText: @ 81255BC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081255E2 - ldr r0, _081255E8 @ =gPartyMenuUseExitCallback - ldrb r1, [r0] - cmp r1, 0 - bne _081255DC - ldr r0, _081255EC @ =sPartyMenuInternal - ldr r0, [r0] - str r1, [r0, 0x4] -_081255DC: - adds r0, r4, 0 - bl Task_ClosePartyMenu -_081255E2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081255E8: .4byte gPartyMenuUseExitCallback -_081255EC: .4byte sPartyMenuInternal - thumb_func_end Task_ClosePartyMenuAfterText - - thumb_func_start ShowMoveSelectWindow -ShowMoveSelectWindow: @ 81255F0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - mov r10, r0 - movs r1, 0x2 - mov r8, r1 - movs r0, 0x3 - bl DisplaySelectionWindow - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - movs r6, 0 - movs r0, 0x64 - adds r2, r4, 0 - muls r2, r0 - str r2, [sp, 0xC] -_08125620: - ldr r0, _081256B8 @ =gPlayerParty - adds r1, r6, 0 - adds r1, 0xD - ldr r2, [sp, 0xC] - adds r0, r2, r0 - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - mov r0, r8 - movs r1, 0 - bl GetFontAttribute - adds r4, r0, 0 - mov r0, r8 - movs r1, 0x2 - bl GetFontAttribute - adds r4, r0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0xD - adds r2, r5, 0 - muls r2, r0 - ldr r0, _081256BC @ =gMoveNames - adds r2, r0 - lsls r0, r6, 4 - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r7, 0 - str r7, [sp, 0x8] - mov r0, r9 - mov r1, r8 - adds r3, r4, 0 - bl AddTextPrinterParameterized - cmp r5, 0 - beq _08125680 - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 -_08125680: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _08125620 - movs r0, 0x10 - str r0, [sp] - mov r0, r10 - str r0, [sp, 0x4] - str r7, [sp, 0x8] - mov r0, r9 - mov r1, r8 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081256B8: .4byte gPlayerParty -_081256BC: .4byte gMoveNames - thumb_func_end ShowMoveSelectWindow - - thumb_func_start Task_HandleWhichMoveInput -Task_HandleWhichMoveInput: @ 81256C0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl Menu_ProcessInput - lsls r0, 24 - asrs r1, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r1, r0 - beq _081256F2 - adds r0, 0x1 - cmp r1, r0 - bne _081256EC - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl ReturnToUseOnWhichMon - b _081256F2 -_081256EC: - adds r0, r5, 0 - bl SetSelectedMoveForPPItem -_081256F2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end Task_HandleWhichMoveInput - - thumb_func_start ItemUseCB_PPRecovery -ItemUseCB_PPRecovery: @ 81256F8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08125710 @ =gSpecialVar_ItemId - ldrh r0, [r0] - cmp r0, 0xAF - bne _0812571C - ldr r0, _08125714 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _08125718 @ =0x00003108 - adds r0, r1 - b _08125726 - .align 2, 0 -_08125710: .4byte gSpecialVar_ItemId -_08125714: .4byte gSaveBlock1Ptr -_08125718: .4byte 0x00003108 -_0812571C: - ldr r1, _0812574C @ =gItemEffectTable - subs r0, 0xD - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] -_08125726: - ldrb r1, [r0, 0x4] - movs r0, 0x10 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _0812575C - ldr r0, _08125750 @ =gPartyMenu - strh r1, [r0, 0xE] - ldrb r1, [r0, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - bne _08125754 - adds r0, r4, 0 - bl TryUsePPItem - b _0812577E - .align 2, 0 -_0812574C: .4byte gItemEffectTable -_08125750: .4byte gPartyMenu -_08125754: - adds r0, r4, 0 - bl sub_812580C - b _0812577E -_0812575C: - movs r0, 0x5 - bl PlaySE - movs r0, 0x17 - bl DisplayPartyMenuStdMessage - ldr r0, _08125784 @ =gPartyMenu - ldrb r0, [r0, 0x9] - bl ShowMoveSelectWindow - ldr r1, _08125788 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0812578C @ =Task_HandleWhichMoveInput - str r1, [r0] -_0812577E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08125784: .4byte gPartyMenu -_08125788: .4byte gTasks -_0812578C: .4byte Task_HandleWhichMoveInput - thumb_func_end ItemUseCB_PPRecovery - - thumb_func_start SetSelectedMoveForPPItem -SetSelectedMoveForPPItem: @ 8125790 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _081257C0 @ =sPartyMenuInternal - ldr r0, [r0] - adds r0, 0xC - bl PartyMenuRemoveWindow - bl Menu_GetCursorPos - ldr r1, _081257C4 @ =gPartyMenu - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0xE] - ldrb r1, [r1, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - bne _081257C8 - adds r0, r4, 0 - bl TryUsePPItem - b _081257CE - .align 2, 0 -_081257C0: .4byte sPartyMenuInternal -_081257C4: .4byte gPartyMenu -_081257C8: - adds r0, r4, 0 - bl sub_812580C -_081257CE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end SetSelectedMoveForPPItem - - thumb_func_start ReturnToUseOnWhichMon -ReturnToUseOnWhichMon: @ 81257D4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08125800 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _08125804 @ =Task_HandleChooseMonInput - str r0, [r1] - ldr r0, _08125808 @ =sPartyMenuInternal - ldr r0, [r0] - movs r1, 0 - str r1, [r0, 0x4] - adds r0, 0xC - bl PartyMenuRemoveWindow - movs r0, 0x5 - bl DisplayPartyMenuStdMessage - pop {r0} - bx r0 - .align 2, 0 -_08125800: .4byte gTasks -_08125804: .4byte Task_HandleChooseMonInput -_08125808: .4byte sPartyMenuInternal - thumb_func_end ReturnToUseOnWhichMon - - thumb_func_start sub_812580C -sub_812580C: @ 812580C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r3, _08125860 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r3, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08125864 @ =gPlayerParty - adds r0, r1 - ldr r1, _08125868 @ =gSpecialVar_ItemId - ldrh r1, [r1] - ldrb r2, [r3, 0x9] - ldrb r3, [r3, 0xE] - bl PokemonUseItemEffects2 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x5 - bl PlaySE - cmp r4, 0 - beq _0812587C - ldr r1, _0812586C @ =gPartyMenuUseExitCallback - movs r0, 0 - strb r0, [r1] - ldr r0, _08125870 @ =gText_WontHaveEffect - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _08125874 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _08125878 @ =Task_ClosePartyMenuAfterText - str r1, [r0] - b _08125888 - .align 2, 0 -_08125860: .4byte gPartyMenu -_08125864: .4byte gPlayerParty -_08125868: .4byte gSpecialVar_ItemId -_0812586C: .4byte gPartyMenuUseExitCallback -_08125870: .4byte gText_WontHaveEffect -_08125874: .4byte gTasks -_08125878: .4byte Task_ClosePartyMenuAfterText -_0812587C: - adds r0, r5, 0 - bl sub_8124DC0 - ldr r1, _08125890 @ =gItemUseCB - ldr r0, _08125894 @ =sub_8125898 - str r0, [r1] -_08125888: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08125890: .4byte gItemUseCB -_08125894: .4byte sub_8125898 - thumb_func_end sub_812580C - - thumb_func_start sub_8125898 -sub_8125898: @ 8125898 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r5, _08125930 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r5, r1] - movs r0, 0x64 - adds r4, r1, 0 - muls r4, r0 - ldr r0, _08125934 @ =gPlayerParty - adds r4, r0 - ldrb r0, [r5, 0x9] - ldr r6, _08125938 @ =gSpecialVar_ItemId - ldrh r1, [r6] - ldrb r2, [r5, 0xE] - bl ExecuteTableBasedItemEffect_ - ldr r1, _0812593C @ =gPartyMenuUseExitCallback - movs r0, 0x1 - strb r0, [r1] - ldrh r2, [r6] - ldr r3, _08125940 @ =0x0000ffff - movs r0, 0x4 - adds r1, r4, 0 - bl ItemUse_SetQuestLogEvent - movs r0, 0x1 - bl PlaySE - ldrh r0, [r6] - movs r1, 0x1 - bl RemoveBagItem - movs r2, 0xE - ldrsh r1, [r5, r2] - adds r1, 0xD - adds r0, r4, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08125944 @ =gStringVar1 - movs r1, 0xD - muls r1, r0 - ldr r0, _08125948 @ =gMoveNames - adds r1, r0 - adds r0, r2, 0 - bl StringCopy - ldrh r0, [r6] - bl GetMedicineItemEffectMessage - ldr r0, _0812594C @ =gStringVar4 - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _08125950 @ =gTasks - mov r2, r8 - lsls r0, r2, 2 - add r0, r8 - lsls r0, 3 - adds r0, r1 - ldr r1, _08125954 @ =Task_ClosePartyMenuAfterText - str r1, [r0] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08125930: .4byte gPartyMenu -_08125934: .4byte gPlayerParty -_08125938: .4byte gSpecialVar_ItemId -_0812593C: .4byte gPartyMenuUseExitCallback -_08125940: .4byte 0x0000ffff -_08125944: .4byte gStringVar1 -_08125948: .4byte gMoveNames -_0812594C: .4byte gStringVar4 -_08125950: .4byte gTasks -_08125954: .4byte Task_ClosePartyMenuAfterText - thumb_func_end sub_8125898 - - thumb_func_start TryUsePPItem -TryUsePPItem: @ 8125958 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - movs r4, 0 - ldr r7, _08125990 @ =gPartyMenu + 14 - ldr r0, _08125994 @ =gSpecialVar_ItemId - ldrh r5, [r0] - movs r0, 0xE - negs r0, r0 - adds r0, r7 - mov r8, r0 - ldrb r0, [r0, 0x9] - ldrb r2, [r7] - adds r1, r5, 0 - bl ExecuteTableBasedItemEffect_ - lsls r0, 24 - cmp r0, 0 - beq _081259A0 - ldr r0, _08125998 @ =gPartyMenuUseExitCallback - strb r4, [r0] - movs r0, 0x5 - bl PlaySE - ldr r0, _0812599C @ =gText_WontHaveEffect - b _081259F6 - .align 2, 0 -_08125990: .4byte gPartyMenu + 14 -_08125994: .4byte gSpecialVar_ItemId -_08125998: .4byte gPartyMenuUseExitCallback -_0812599C: .4byte gText_WontHaveEffect -_081259A0: - ldr r1, _08125A1C @ =gPartyMenuUseExitCallback - movs r0, 0x1 - strb r0, [r1] - mov r0, r8 - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - adds r4, r1, 0 - muls r4, r0 - ldr r0, _08125A20 @ =gPlayerParty - adds r4, r0 - ldr r3, _08125A24 @ =0x0000ffff - movs r0, 0x4 - adds r1, r4, 0 - adds r2, r5, 0 - bl ItemUse_SetQuestLogEvent - movs r0, 0x1 - bl PlaySE - adds r0, r5, 0 - movs r1, 0x1 - bl RemoveBagItem - movs r0, 0 - ldrsh r1, [r7, r0] - adds r1, 0xD - adds r0, r4, 0 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _08125A28 @ =gStringVar1 - movs r1, 0xD - muls r1, r4 - ldr r2, _08125A2C @ =gMoveNames - adds r1, r2 - bl StringCopy - adds r0, r5, 0 - bl GetMedicineItemEffectMessage - ldr r0, _08125A30 @ =gStringVar4 -_081259F6: - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _08125A34 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08125A38 @ =Task_ClosePartyMenuAfterText - str r1, [r0] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08125A1C: .4byte gPartyMenuUseExitCallback -_08125A20: .4byte gPlayerParty -_08125A24: .4byte 0x0000ffff -_08125A28: .4byte gStringVar1 -_08125A2C: .4byte gMoveNames -_08125A30: .4byte gStringVar4 -_08125A34: .4byte gTasks -_08125A38: .4byte Task_ClosePartyMenuAfterText - thumb_func_end TryUsePPItem - - thumb_func_start ItemUseCB_PPUp -ItemUseCB_PPUp: @ 8125A3C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x5 - bl PlaySE - movs r0, 0x18 - bl DisplayPartyMenuStdMessage - ldr r0, _08125A6C @ =gPartyMenu - ldrb r0, [r0, 0x9] - bl ShowMoveSelectWindow - ldr r1, _08125A70 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08125A74 @ =Task_HandleWhichMoveInput - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08125A6C: .4byte gPartyMenu -_08125A70: .4byte gTasks -_08125A74: .4byte Task_HandleWhichMoveInput - thumb_func_end ItemUseCB_PPUp - - thumb_func_start ItemIdToBattleMoveId -ItemIdToBattleMoveId: @ 8125A78 - lsls r0, 16 - ldr r1, _08125A88 @ =0xfedf0000 - adds r0, r1 - ldr r1, _08125A8C @ =sTMHMMoves - lsrs r0, 15 - adds r0, r1 - ldrh r0, [r0] - bx lr - .align 2, 0 -_08125A88: .4byte 0xfedf0000 -_08125A8C: .4byte sTMHMMoves - thumb_func_end ItemIdToBattleMoveId - - thumb_func_start IsMoveHm -IsMoveHm: @ 8125A90 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - movs r1, 0 - ldr r3, _08125AAC @ =sTMHMMoves -_08125A9A: - adds r0, r1, 0 - adds r0, 0x32 - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - cmp r0, r2 - bne _08125AB0 - movs r0, 0x1 - b _08125ABC - .align 2, 0 -_08125AAC: .4byte sTMHMMoves -_08125AB0: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x6 - bls _08125A9A - movs r0, 0 -_08125ABC: - pop {r1} - bx r1 - thumb_func_end IsMoveHm - - thumb_func_start MonKnowsMove -MonKnowsMove: @ 8125AC0 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - movs r4, 0 -_08125ACA: - adds r1, r4, 0 - adds r1, 0xD - adds r0, r6, 0 - bl GetMonData - cmp r0, r5 - bne _08125ADC - movs r0, 0x1 - b _08125AE8 -_08125ADC: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _08125ACA - movs r0, 0 -_08125AE8: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end MonKnowsMove - - thumb_func_start DisplayLearnMoveMessage -DisplayLearnMoveMessage: @ 8125AF0 - push {r4,lr} - adds r1, r0, 0 - ldr r4, _08125B10 @ =gStringVar4 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08125B10: .4byte gStringVar4 - thumb_func_end DisplayLearnMoveMessage - - thumb_func_start DisplayLearnMoveMessageAndClose -DisplayLearnMoveMessageAndClose: @ 8125B14 - push {r4,lr} - adds r4, r0, 0 - adds r0, r1, 0 - lsls r4, 24 - lsrs r4, 24 - bl DisplayLearnMoveMessage - ldr r1, _08125B38 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08125B3C @ =Task_ClosePartyMenuAfterText - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08125B38: .4byte gTasks -_08125B3C: .4byte Task_ClosePartyMenuAfterText - thumb_func_end DisplayLearnMoveMessageAndClose - - thumb_func_start ItemUseCB_TMHM -ItemUseCB_TMHM: @ 8125B40 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0x5 - bl PlaySE - ldr r7, _08125BD0 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r7, r1] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08125BD4 @ =gPlayerParty - adds r4, r1, r0 - movs r0, 0xE - adds r0, r7 - mov r8, r0 - ldr r0, _08125BD8 @ =gSpecialVar_ItemId - ldrh r5, [r0] - ldr r1, _08125BDC @ =gStringVar1 - adds r0, r4, 0 - bl GetMonNickname - adds r0, r5, 0 - bl ItemIdToBattleMoveId - strh r0, [r7, 0xE] - ldr r0, _08125BE0 @ =gStringVar2 - movs r1, 0xE - ldrsh r2, [r7, r1] - movs r1, 0xD - muls r1, r2 - ldr r2, _08125BE4 @ =gMoveNames - adds r1, r2 - bl StringCopy - movs r0, 0 - mov r1, r8 - strh r0, [r1, 0x2] - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl CanMonLearnTMTutor - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08125BF4 - cmp r0, 0x2 - beq _08125BFC - ldrh r1, [r7, 0xE] - adds r0, r4, 0 - bl GiveMoveToMon - lsls r0, 16 - lsrs r0, 16 - ldr r3, _08125BE8 @ =0x0000ffff - cmp r0, r3 - beq _08125C0C - movs r0, 0x4 - adds r1, r4, 0 - adds r2, r5, 0 - bl ItemUse_SetQuestLogEvent - adds r0, r6, 0 - bl sub_8124DC0 - ldr r1, _08125BEC @ =gItemUseCB - ldr r0, _08125BF0 @ =Task_LearnedMove_ - str r0, [r1] - b _08125C20 - .align 2, 0 -_08125BD0: .4byte gPartyMenu -_08125BD4: .4byte gPlayerParty -_08125BD8: .4byte gSpecialVar_ItemId -_08125BDC: .4byte gStringVar1 -_08125BE0: .4byte gStringVar2 -_08125BE4: .4byte gMoveNames -_08125BE8: .4byte 0x0000ffff -_08125BEC: .4byte gItemUseCB -_08125BF0: .4byte Task_LearnedMove_ -_08125BF4: - ldr r1, _08125BF8 @ =gText_PkmnCantLearnMove - b _08125BFE - .align 2, 0 -_08125BF8: .4byte gText_PkmnCantLearnMove -_08125BFC: - ldr r1, _08125C08 @ =gText_PkmnAlreadyKnows -_08125BFE: - adds r0, r6, 0 - bl DisplayLearnMoveMessageAndClose - b _08125C20 - .align 2, 0 -_08125C08: .4byte gText_PkmnAlreadyKnows -_08125C0C: - ldr r0, _08125C2C @ =gText_PkmnNeedsToReplaceMove - bl DisplayLearnMoveMessage - ldr r1, _08125C30 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08125C34 @ =Task_ReplaceMoveYesNo - str r1, [r0] -_08125C20: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08125C2C: .4byte gText_PkmnNeedsToReplaceMove -_08125C30: .4byte gTasks -_08125C34: .4byte Task_ReplaceMoveYesNo - thumb_func_end ItemUseCB_TMHM - - thumb_func_start Task_LearnedMove_ -Task_LearnedMove_: @ 8125C38 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl Task_LearnedMove - pop {r0} - bx r0 - thumb_func_end Task_LearnedMove_ - - thumb_func_start Task_LearnedMove -Task_LearnedMove: @ 8125C48 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, _08125CCC @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r2, r1] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08125CD0 @ =gPlayerParty - adds r5, r1, r0 - adds r6, r2, 0 - adds r6, 0xE - ldr r0, _08125CD4 @ =gSpecialVar_ItemId - ldrh r4, [r0] - movs r1, 0x2 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _08125C84 - adds r0, r5, 0 - movs r1, 0x4 - bl AdjustFriendship - movs r0, 0xA9 - lsls r0, 1 - cmp r4, r0 - bhi _08125C84 - adds r0, r4, 0 - movs r1, 0x1 - bl RemoveBagItem -_08125C84: - ldr r1, _08125CD8 @ =gStringVar1 - adds r0, r5, 0 - bl GetMonNickname - ldr r0, _08125CDC @ =gStringVar2 - movs r1, 0 - ldrsh r2, [r6, r1] - movs r1, 0xD - muls r1, r2 - ldr r2, _08125CE0 @ =gMoveNames - adds r1, r2 - bl StringCopy - ldr r4, _08125CE4 @ =gStringVar4 - ldr r1, _08125CE8 @ =gText_PkmnLearnedMove3 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _08125CEC @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldr r1, _08125CF0 @ =Task_DoLearnedMoveFanfareAfterText - str r1, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08125CCC: .4byte gPartyMenu -_08125CD0: .4byte gPlayerParty -_08125CD4: .4byte gSpecialVar_ItemId -_08125CD8: .4byte gStringVar1 -_08125CDC: .4byte gStringVar2 -_08125CE0: .4byte gMoveNames -_08125CE4: .4byte gStringVar4 -_08125CE8: .4byte gText_PkmnLearnedMove3 -_08125CEC: .4byte gTasks -_08125CF0: .4byte Task_DoLearnedMoveFanfareAfterText - thumb_func_end Task_LearnedMove - - thumb_func_start Task_DoLearnedMoveFanfareAfterText -Task_DoLearnedMoveFanfareAfterText: @ 8125CF4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08125D1A - ldr r0, _08125D20 @ =0x00000101 - bl PlayFanfare - ldr r1, _08125D24 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08125D28 @ =Task_LearnNextMoveOrClosePartyMenu - str r1, [r0] -_08125D1A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08125D20: .4byte 0x00000101 -_08125D24: .4byte gTasks -_08125D28: .4byte Task_LearnNextMoveOrClosePartyMenu - thumb_func_end Task_DoLearnedMoveFanfareAfterText - - thumb_func_start Task_LearnNextMoveOrClosePartyMenu -Task_LearnNextMoveOrClosePartyMenu: @ 8125D2C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _08125D7E - ldr r0, _08125D68 @ =gMain - ldrh r1, [r0, 0x2E] - movs r2, 0x1 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _08125D54 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08125D7E -_08125D54: - ldr r0, _08125D6C @ =gPartyMenu - movs r1, 0x10 - ldrsh r0, [r0, r1] - cmp r0, 0x1 - bne _08125D70 - adds r0, r4, 0 - bl Task_TryLearningNextMove - b _08125D7E - .align 2, 0 -_08125D68: .4byte gMain -_08125D6C: .4byte gPartyMenu -_08125D70: - cmp r0, 0x2 - bne _08125D78 - ldr r0, _08125D84 @ =gSpecialVar_Result - strh r2, [r0] -_08125D78: - adds r0, r5, 0 - bl Task_ClosePartyMenu -_08125D7E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08125D84: .4byte gSpecialVar_Result - thumb_func_end Task_LearnNextMoveOrClosePartyMenu - - thumb_func_start Task_ReplaceMoveYesNo -Task_ReplaceMoveYesNo: @ 8125D88 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08125DAC - bl PartyMenuDisplayYesNoMenu - ldr r0, _08125DB4 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08125DB8 @ =Task_HandleReplaceMoveYesNoInput - str r0, [r1] -_08125DAC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08125DB4: .4byte gTasks -_08125DB8: .4byte Task_HandleReplaceMoveYesNoInput - thumb_func_end Task_ReplaceMoveYesNo - - thumb_func_start Task_HandleReplaceMoveYesNoInput -Task_HandleReplaceMoveYesNoInput: @ 8125DBC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08125DE2 - cmp r1, 0 - bgt _08125DDC - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08125E08 - b _08125E14 -_08125DDC: - cmp r1, 0x1 - beq _08125E0E - b _08125E14 -_08125DE2: - ldr r0, _08125DFC @ =gText_WhichMoveToForget - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r1, _08125E00 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08125E04 @ =Task_ShowSummaryScreenToForgetMove - str r1, [r0] - b _08125E14 - .align 2, 0 -_08125DFC: .4byte gText_WhichMoveToForget -_08125E00: .4byte gTasks -_08125E04: .4byte Task_ShowSummaryScreenToForgetMove -_08125E08: - movs r0, 0x5 - bl PlaySE -_08125E0E: - adds r0, r4, 0 - bl StopLearningMovePrompt -_08125E14: - pop {r4} - pop {r0} - bx r0 - thumb_func_end Task_HandleReplaceMoveYesNoInput - - thumb_func_start Task_ShowSummaryScreenToForgetMove -Task_ShowSummaryScreenToForgetMove: @ 8125E1C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08125E3C - ldr r0, _08125E44 @ =sPartyMenuInternal - ldr r1, [r0] - ldr r0, _08125E48 @ =CB2_ShowSummaryScreenToForgetMove - str r0, [r1, 0x4] - adds r0, r4, 0 - bl Task_ClosePartyMenu -_08125E3C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08125E44: .4byte sPartyMenuInternal -_08125E48: .4byte CB2_ShowSummaryScreenToForgetMove - thumb_func_end Task_ShowSummaryScreenToForgetMove - - thumb_func_start CB2_ShowSummaryScreenToForgetMove -CB2_ShowSummaryScreenToForgetMove: @ 8125E4C - push {r4,lr} - sub sp, 0x4 - ldr r0, _08125E74 @ =gPlayerParty - ldr r4, _08125E78 @ =gPartyMenu - ldrb r1, [r4, 0x9] - ldr r2, _08125E7C @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _08125E80 @ =CB2_ReturnToPartyMenuWhileLearningMove - ldrh r4, [r4, 0xE] - str r4, [sp] - bl ShowSelectMovePokemonSummaryScreen - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08125E74: .4byte gPlayerParty -_08125E78: .4byte gPartyMenu -_08125E7C: .4byte gPlayerPartyCount -_08125E80: .4byte CB2_ReturnToPartyMenuWhileLearningMove - thumb_func_end CB2_ShowSummaryScreenToForgetMove - - thumb_func_start CB2_ReturnToPartyMenuWhileLearningMove -CB2_ReturnToPartyMenuWhileLearningMove: @ 8125E84 - push {r4,r5,lr} - sub sp, 0xC - bl GetMoveSlotToReplace - lsls r0, 24 - lsrs r2, r0, 24 - ldr r4, _08125ED0 @ =gPartyMenu - movs r0, 0x10 - ldrsh r5, [r4, r0] - cmp r5, 0 - bne _08125EE8 - cmp r2, 0x4 - beq _08125EE8 - movs r1, 0x9 - ldrsb r1, [r4, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08125ED4 @ =gPlayerParty - adds r0, r1 - adds r1, r2, 0 - adds r1, 0xD - bl GetMonData - adds r2, r0, 0 - lsls r2, 16 - lsrs r2, 16 - ldrb r0, [r4, 0x9] - ldr r1, _08125ED8 @ =gSpecialVar_ItemId - ldrh r1, [r1] - ldr r3, _08125EDC @ =sub_8124EFC - bl sub_811C568 - ldr r1, _08125EE0 @ =gItemUseCB - ldr r0, _08125EE4 @ =sub_8125F4C - str r0, [r1] - strb r5, [r4, 0xB] - b _08125F02 - .align 2, 0 -_08125ED0: .4byte gPartyMenu -_08125ED4: .4byte gPlayerParty -_08125ED8: .4byte gSpecialVar_ItemId -_08125EDC: .4byte sub_8124EFC -_08125EE0: .4byte gItemUseCB -_08125EE4: .4byte sub_8125F4C -_08125EE8: - movs r0, 0x7F - str r0, [sp] - ldr r0, _08125F0C @ =Task_ReturnToPartyMenuWhileLearningMove - str r0, [sp, 0x4] - ldr r0, _08125F10 @ =gPartyMenu - ldr r0, [r0] - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl InitPartyMenu -_08125F02: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08125F0C: .4byte Task_ReturnToPartyMenuWhileLearningMove -_08125F10: .4byte gPartyMenu - thumb_func_end CB2_ReturnToPartyMenuWhileLearningMove - - thumb_func_start Task_ReturnToPartyMenuWhileLearningMove -Task_ReturnToPartyMenuWhileLearningMove: @ 8125F14 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - ldr r0, _08125F3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08125F46 - bl GetMoveSlotToReplace - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - beq _08125F40 - adds r0, r4, 0 - bl DisplayPartyMenuForgotMoveMessage - b _08125F46 - .align 2, 0 -_08125F3C: .4byte gPaletteFade -_08125F40: - adds r0, r5, 0 - bl StopLearningMovePrompt -_08125F46: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end Task_ReturnToPartyMenuWhileLearningMove - - thumb_func_start sub_8125F4C -sub_8125F4C: @ 8125F4C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_8125F5C - pop {r0} - bx r0 - thumb_func_end sub_8125F4C - - thumb_func_start sub_8125F5C -sub_8125F5C: @ 8125F5C - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - mov r8, r0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _08125FE4 @ =gPartyMenu - mov r9, r0 - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - adds r6, r1, 0 - muls r6, r0 - ldr r0, _08125FE8 @ =gPlayerParty - adds r6, r0 - bl GetMoveSlotToReplace - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - adds r1, r5, 0 - adds r1, 0xD - adds r0, r6, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08125FEC @ =gSpecialVar_ItemId - ldrh r2, [r0] - movs r0, 0x4 - adds r1, r6, 0 - adds r3, r4, 0 - bl ItemUse_SetQuestLogEvent - ldr r1, _08125FF0 @ =gStringVar1 - adds r0, r6, 0 - bl GetMonNickname - ldr r0, _08125FF4 @ =gStringVar2 - movs r1, 0xD - muls r1, r4 - ldr r2, _08125FF8 @ =gMoveNames - adds r1, r2 - bl StringCopy - adds r0, r6, 0 - adds r1, r5, 0 - bl RemoveMonPPBonus - mov r0, r9 - ldrh r1, [r0, 0xE] - adds r0, r6, 0 - adds r2, r5, 0 - bl SetMonMoveSlot - mov r0, r8 - bl Task_LearnedMove - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08125FE4: .4byte gPartyMenu -_08125FE8: .4byte gPlayerParty -_08125FEC: .4byte gSpecialVar_ItemId -_08125FF0: .4byte gStringVar1 -_08125FF4: .4byte gStringVar2 -_08125FF8: .4byte gMoveNames - thumb_func_end sub_8125F5C - - thumb_func_start DisplayPartyMenuForgotMoveMessage -DisplayPartyMenuForgotMoveMessage: @ 8125FFC - push {r4-r6,lr} - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _0812605C @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - adds r5, r1, 0 - muls r5, r0 - ldr r0, _08126060 @ =gPlayerParty - adds r5, r0 - bl GetMoveSlotToReplace - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r1, 0xD - adds r0, r5, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r1, _08126064 @ =gStringVar1 - adds r0, r5, 0 - bl GetMonNickname - ldr r0, _08126068 @ =gStringVar2 - movs r1, 0xD - muls r1, r4 - ldr r2, _0812606C @ =gMoveNames - adds r1, r2 - bl StringCopy - ldr r0, _08126070 @ =gUnknown_8416EC6 - bl DisplayLearnMoveMessage - ldr r1, _08126074 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08126078 @ =Task_PartyMenuReplaceMove - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812605C: .4byte gPartyMenu -_08126060: .4byte gPlayerParty -_08126064: .4byte gStringVar1 -_08126068: .4byte gStringVar2 -_0812606C: .4byte gMoveNames -_08126070: .4byte gUnknown_8416EC6 -_08126074: .4byte gTasks -_08126078: .4byte Task_PartyMenuReplaceMove - thumb_func_end DisplayPartyMenuForgotMoveMessage - - thumb_func_start Task_PartyMenuReplaceMove -Task_PartyMenuReplaceMove: @ 812607C - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081260C8 - ldr r5, _081260D0 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r5, r1] - movs r0, 0x64 - adds r4, r1, 0 - muls r4, r0 - ldr r0, _081260D4 @ =gPlayerParty - adds r4, r0 - bl GetMoveSlotToReplace - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl RemoveMonPPBonus - ldrh r5, [r5, 0xE] - bl GetMoveSlotToReplace - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl SetMonMoveSlot - adds r0, r6, 0 - bl Task_LearnedMove -_081260C8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081260D0: .4byte gPartyMenu -_081260D4: .4byte gPlayerParty - thumb_func_end Task_PartyMenuReplaceMove - - thumb_func_start StopLearningMovePrompt -StopLearningMovePrompt: @ 81260D8 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _08126120 @ =gStringVar2 - ldr r1, _08126124 @ =gPartyMenu - movs r3, 0xE - ldrsh r2, [r1, r3] - movs r1, 0xD - muls r1, r2 - ldr r2, _08126128 @ =gMoveNames - adds r1, r2 - bl StringCopy - ldr r4, _0812612C @ =gStringVar4 - ldr r1, _08126130 @ =gText_StopLearningMove2 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _08126134 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _08126138 @ =Task_StopLearningMoveYesNo - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08126120: .4byte gStringVar2 -_08126124: .4byte gPartyMenu -_08126128: .4byte gMoveNames -_0812612C: .4byte gStringVar4 -_08126130: .4byte gText_StopLearningMove2 -_08126134: .4byte gTasks -_08126138: .4byte Task_StopLearningMoveYesNo - thumb_func_end StopLearningMovePrompt - - thumb_func_start Task_StopLearningMoveYesNo -Task_StopLearningMoveYesNo: @ 812613C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08126160 - bl PartyMenuDisplayYesNoMenu - ldr r0, _08126168 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _0812616C @ =Task_HandleStopLearningMoveYesNoInput - str r0, [r1] -_08126160: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08126168: .4byte gTasks -_0812616C: .4byte Task_HandleStopLearningMoveYesNoInput - thumb_func_end Task_StopLearningMoveYesNo - - thumb_func_start Task_HandleStopLearningMoveYesNoInput -Task_HandleStopLearningMoveYesNoInput: @ 8126170 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r7, _081261A0 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r7, r1] - movs r0, 0x64 - muls r1, r0 - ldr r0, _081261A4 @ =gPlayerParty - adds r4, r1, r0 - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r5, r0, 24 - cmp r5, 0 - beq _081261AE - cmp r5, 0 - bgt _081261A8 - movs r0, 0x1 - negs r0, r0 - cmp r5, r0 - beq _08126234 - b _0812626A - .align 2, 0 -_081261A0: .4byte gPartyMenu -_081261A4: .4byte gPlayerParty -_081261A8: - cmp r5, 0x1 - beq _0812623A - b _0812626A -_081261AE: - ldr r1, _081261F4 @ =gStringVar1 - adds r0, r4, 0 - bl GetMonNickname - ldr r0, _081261F8 @ =gStringVar2 - movs r1, 0xE - ldrsh r2, [r7, r1] - movs r1, 0xD - muls r1, r2 - ldr r2, _081261FC @ =gMoveNames - adds r1, r2 - bl StringCopy - ldr r4, _08126200 @ =gStringVar4 - ldr r1, _08126204 @ =gText_MoveNotLearned - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r3, 0x10 - ldrsh r0, [r7, r3] - cmp r0, 0x1 - bne _08126210 - ldr r0, _08126208 @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _0812620C @ =Task_TryLearningNextMoveAfterText - str r0, [r1] - b _0812626A - .align 2, 0 -_081261F4: .4byte gStringVar1 -_081261F8: .4byte gStringVar2 -_081261FC: .4byte gMoveNames -_08126200: .4byte gStringVar4 -_08126204: .4byte gText_MoveNotLearned -_08126208: .4byte gTasks -_0812620C: .4byte Task_TryLearningNextMoveAfterText -_08126210: - cmp r0, 0x2 - bne _08126218 - ldr r0, _08126228 @ =gSpecialVar_Result - strh r5, [r0] -_08126218: - ldr r0, _0812622C @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _08126230 @ =Task_ClosePartyMenuAfterText - str r0, [r1] - b _0812626A - .align 2, 0 -_08126228: .4byte gSpecialVar_Result -_0812622C: .4byte gTasks -_08126230: .4byte Task_ClosePartyMenuAfterText -_08126234: - movs r0, 0x5 - bl PlaySE -_0812623A: - ldr r1, _08126270 @ =gStringVar1 - adds r0, r4, 0 - bl GetMonNickname - ldr r0, _08126274 @ =gStringVar2 - ldr r1, _08126278 @ =gPartyMenu - movs r3, 0xE - ldrsh r2, [r1, r3] - movs r1, 0xD - muls r1, r2 - ldr r2, _0812627C @ =gMoveNames - adds r1, r2 - bl StringCopy - ldr r0, _08126280 @ =gText_PkmnNeedsToReplaceMove - bl DisplayLearnMoveMessage - ldr r1, _08126284 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08126288 @ =Task_ReplaceMoveYesNo - str r1, [r0] -_0812626A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08126270: .4byte gStringVar1 -_08126274: .4byte gStringVar2 -_08126278: .4byte gPartyMenu -_0812627C: .4byte gMoveNames -_08126280: .4byte gText_PkmnNeedsToReplaceMove -_08126284: .4byte gTasks -_08126288: .4byte Task_ReplaceMoveYesNo - thumb_func_end Task_HandleStopLearningMoveYesNoInput - thumb_func_start Task_TryLearningNextMoveAfterText Task_TryLearningNextMoveAfterText: @ 812628C push {r4,lr} @@ -6211,8 +1119,8 @@ _08126BCE: bx r0 thumb_func_end sub_8126B60 - thumb_func_start ItemUseCB_EvolutionStone -ItemUseCB_EvolutionStone: @ 8126BD4 + thumb_func_start sub_8126BD4 +sub_8126BD4: @ 8126BD4 push {r4,r5,lr} ldr r1, _08126C10 @ =gCB2_AfterEvolution ldr r4, _08126C14 @ =gPartyMenu @@ -6245,7 +1153,7 @@ _08126C14: .4byte gPartyMenu _08126C18: .4byte gSpecialVar_ItemId _08126C1C: .4byte gPlayerParty _08126C20: .4byte 0x0000ffff - thumb_func_end ItemUseCB_EvolutionStone + thumb_func_end sub_8126BD4 thumb_func_start sub_8126C24 sub_8126C24: @ 8126C24 @@ -6600,7 +1508,7 @@ CB2_PartyMenuFromStartMenu: @ 8126EB0 str r0, [sp] ldr r0, _08126ED4 @ =Task_HandleChooseMonInput str r0, [sp, 0x4] - ldr r0, _08126ED8 @ =CB2_ReturnToStartMenu + ldr r0, _08126ED8 @ =CB2_ReturnToFieldWithOpenMenu str r0, [sp, 0x8] movs r0, 0 movs r1, 0 @@ -6612,7 +1520,7 @@ CB2_PartyMenuFromStartMenu: @ 8126EB0 bx r0 .align 2, 0 _08126ED4: .4byte Task_HandleChooseMonInput -_08126ED8: .4byte CB2_ReturnToStartMenu +_08126ED8: .4byte CB2_ReturnToFieldWithOpenMenu thumb_func_end CB2_PartyMenuFromStartMenu thumb_func_start CB2_ChooseMonToGiveItem diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index 8320c5809..9c57cff88 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -428,13 +428,13 @@ sub_8102858: @ 8102858 lsls r1, 7 movs r0, 0 bl SetGpuRegBits - ldr r0, _08102878 @ =CB2_ReturnToStartMenu + ldr r0, _08102878 @ =CB2_ReturnToFieldWithOpenMenu bl SetMainCallback2 _08102874: pop {r0} bx r0 .align 2, 0 -_08102878: .4byte CB2_ReturnToStartMenu +_08102878: .4byte CB2_ReturnToFieldWithOpenMenu thumb_func_end sub_8102858 thumb_func_start sub_810287C diff --git a/asm/region_map.s b/asm/region_map.s index 7b23cf1e3..662c65fa7 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -9893,15 +9893,15 @@ _080C4EF2: bx r0 thumb_func_end sub_80C4ED0 - thumb_func_start sub_80C4EF8 -sub_80C4EF8: @ 80C4EF8 + thumb_func_start MCB2_FlyMap +MCB2_FlyMap: @ 80C4EF8 push {lr} bl sub_80C51E8 movs r0, 0x2 bl sub_80BFEDC pop {r0} bx r0 - thumb_func_end sub_80C4EF8 + thumb_func_end MCB2_FlyMap thumb_func_start sub_80C4F08 sub_80C4F08: @ 80C4F08 diff --git a/data/strings.s b/data/strings.s index 547005fd6..35548d0dc 100644 --- a/data/strings.s +++ b/data/strings.s @@ -922,7 +922,7 @@ gText_PkmnAlreadyHoldingItemSwitch:: @ 8416C49 .string "Would you like to switch the\n" .string "two items?$" -gUnknown_8416C8F:: @ 8416C8F +gText_PkmnNotHolding:: @ 8416C8F .string "{STR_VAR_1} isn't holding\n" .string "anything.{PAUSE_UNTIL_PRESS}$" @@ -979,7 +979,7 @@ gText_MoveNotLearned:: @ 8416E84 gText_WhichMoveToForget:: @ 8416EA4 .string "Which move should be forgotten?{PAUSE_UNTIL_PRESS}$" -gUnknown_8416EC6:: @ 8416EC6 +gText_12PoofForgotMove:: @ 8416EC6 .string "1, {PAUSE 0x0F}2, and{PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}{PLAY_SE SE_KON}Poof!\p" .string "{STR_VAR_1} forgot how to\n" .string "use {STR_VAR_2}.\p" @@ -1233,11 +1233,11 @@ gText_ShareHp:: @ 0x84175F1 gText_ReturnToAHealingSpot:: @ 0x84175FB .string "Return to a healing spot.$" -gUnknown_8417615:: @ 8417615 +gText_EscapeFromHereAndReturnTo:: @ 8417615 .string "Want to escape from here and return\n" .string "to {STR_VAR_1}?$" -gUnknown_8417640:: @ 8417640 +gText_ReturnToHealingSpot:: @ 8417640 .string "Want to return to the healing spot\n" .string "used last in {STR_VAR_1}?$" diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h index 746f10679..4ef90ed60 100644 --- a/include/constants/easy_chat.h +++ b/include/constants/easy_chat.h @@ -1,6 +1,28 @@ #ifndef GUARD_CONSTANTS_EASY_CHAT_H #define GUARD_CONSTANTS_EASY_CHAT_H +#define EASY_CHAT_TYPE_PROFILE 0 +#define EASY_CHAT_TYPE_BATTLE_START 1 +#define EASY_CHAT_TYPE_BATTLE_WON 2 +#define EASY_CHAT_TYPE_BATTLE_LOST 3 +#define EASY_CHAT_TYPE_MAIL 4 +#define EASY_CHAT_TYPE_INTERVIEW 5 +#define EASY_CHAT_TYPE_BARD_SONG 6 +#define EASY_CHAT_TYPE_FAN_CLUB 7 +#define EASY_CHAT_TYPE_UNK_8 8 +#define EASY_CHAT_TYPE_TRENDY_PHRASE 9 +#define EASY_CHAT_TYPE_GABBY_AND_TY 10 +#define EASY_CHAT_TYPE_CONTEST_INTERVIEW 11 +#define EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW 12 +#define EASY_CHAT_TYPE_GOOD_SAYING 13 +#define EASY_CHAT_TYPE_FAN_QUESTION 14 +#define EASY_CHAT_TYPE_QUIZ_ANSWER 15 +#define EASY_CHAT_TYPE_QUIZ_QUESTION 16 +#define EASY_CHAT_TYPE_QUIZ_SET_QUESTION 17 +#define EASY_CHAT_TYPE_QUIZ_SET_ANSWER 18 +#define EASY_CHAT_TYPE_APPRENTICE 19 +#define EASY_CHAT_TYPE_QUESTIONNAIRE 20 + #define EC_GROUP_POKEMON_2 0x0 #define EC_GROUP_TRAINER 0x1 #define EC_GROUP_STATUS 0x2 diff --git a/include/easy_chat.h b/include/easy_chat.h index 765758035..9c642bb36 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -45,5 +45,6 @@ u16 GetDisplayedWordByIndex(u16 index); u16 GetNumDisplayedWords(void); const u8 *GetEasyChatWordGroupName(u8); u8 *CopyEasyChatWordPadded(u8 *, u16, u16); +void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback); // TODO: currently in link_rfu.s. further file split needed? #endif // GUARD_EASYCHAT_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 1d431771b..ec1a077be 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -33,5 +33,7 @@ void sub_805DC04(void); void sub_805DAB0(void); bool32 sub_805DAD0(void); bool32 sub_805DC24(void); +bool8 PartyHasMonWithSurf(void); +bool8 IsPlayerSurfingNorth(void); #endif //GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 1b8044592..86fab62e0 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -9,5 +9,6 @@ void sub_80B0244(void); void sub_807E3EC(void); void sub_807F114(void); void sub_807F204(u8 taskId); +void sub_807DC00(void); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/include/global.h b/include/global.h index 744d23eb3..3d6049d64 100644 --- a/include/global.h +++ b/include/global.h @@ -742,7 +742,7 @@ struct SaveBlock1 /*0x000C*/ struct WarpData warp1; /*0x0014*/ struct WarpData warp2; /*0x001C*/ struct WarpData lastHealLocation; - /*0x0024*/ struct WarpData warp4; + /*0x0024*/ struct WarpData escapeWarp; /*0x002C*/ u16 savedMusic; /*0x002E*/ u8 weather; /*0x002F*/ u8 filler_2F; diff --git a/include/link_rfu.h b/include/link_rfu.h index 671488be0..d1bc2b2bc 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -1,6 +1,9 @@ #ifndef GUARD_LINK_RFU_H #define GUARD_LINK_RFU_H +#include "global.h" +#include "librfu.h" + struct Padded_U8 { u8 value; @@ -42,6 +45,7 @@ void sub_80F8DC0(void); void sub_80FBB20(void); bool8 sub_80FA484(bool32 a0); void var_800D_set_xB(void); +struct UnkLinkRfuStruct_02022B14 *sub_80F9800(void); #include "mevent_server.h" extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; diff --git a/include/overworld.h b/include/overworld.h index d893899eb..ab20d9ff0 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -140,7 +140,7 @@ bool32 Overworld_DoScrollSceneForCredits(u8 *, const struct CreditsOverworldCmd bool32 sub_8058318(void); -void CB2_ReturnToStartMenu(void); +void CB2_ReturnToFieldWithOpenMenu(void); void CB2_WhiteOut(void); void c2_8056854(void); void sub_8054F38(u32 newKey); diff --git a/include/pokemon_special_anim.h b/include/pokemon_special_anim.h index 8dbf0efa4..d2580552d 100644 --- a/include/pokemon_special_anim.h +++ b/include/pokemon_special_anim.h @@ -8,5 +8,9 @@ bool8 sub_811E680(void); void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); +void sub_811C540(u8 slotId, u16 itemId, MainCallback callback); +void sub_811C5AC(u8 slotId, u16 itemId, MainCallback callback); +u32 sub_811D178(void); +void sub_811C568(u8 slotId, u16 itemId, u16 moveId, MainCallback callback); #endif // GUARD_POKEMON_SPECIAL_ANIM_H diff --git a/include/quest_log.h b/include/quest_log.h index 4040ed4c9..3dfd5f35c 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -49,6 +49,4 @@ void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value); void sub_8110840(void *oldSave); void sub_8112F18(u8 windowId); -extern u8 gUnknown_203ADFA; - #endif //GUARD_QUEST_LOG_H diff --git a/include/region_map.h b/include/region_map.h index 8d609f104..67287b6c4 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -96,5 +96,6 @@ u8 *GetMapName(u8 *, u16, u16); bool32 sub_8124668(u8 mapSecId); void GetMapNameGeneric(u8 *, u8); void sub_80BFF50(u8 a0, void (*a1)(void)); +void MCB2_FlyMap(void); #endif //GUARD_REGION_MAP_H diff --git a/include/strings.h b/include/strings.h index 16a107de7..8c082ccb4 100644 --- a/include/strings.h +++ b/include/strings.h @@ -350,6 +350,44 @@ extern const u8 gText_MaleSymbol[]; extern const u8 gText_FemaleSymbol[]; extern const u8 gText_Slash[]; extern const u8 gUnknown_8417457[]; +extern const u8 gText_PkmnNotHolding[]; +extern const u8 gText_PCMailboxFull[]; +extern const u8 gText_MailSentToPC[]; +extern const u8 gText_MailMessageWillBeLost[]; +extern const u8 gText_SendMailToPC[]; +extern const u8 gText_MailTakenFromPkmn[]; +extern const u8 gUnknown_8416B3E[]; +extern const u8 gUnknown_8416B16[]; +extern const u8 gText_PauseUntilPress[]; +extern const u8 gText_CantUseUntilNewBadge[]; +extern const u8 gText_ReturnToHealingSpot[]; +extern const u8 gText_EscapeFromHereAndReturnTo[]; +extern const u8 gText_PkmnCuredOfPoison[]; +extern const u8 gText_PkmnWokeUp2[]; +extern const u8 gText_PkmnBurnHealed[]; +extern const u8 gText_PkmnThawedOut[]; +extern const u8 gText_PkmnCuredOfParalysis[]; +extern const u8 gText_PkmnSnappedOutOfConfusion[]; +extern const u8 gText_PkmnGotOverInfatuation[]; +extern const u8 gText_PkmnBecameHealthy[]; +extern const u8 gText_HP3[]; +extern const u8 gText_Attack3[]; +extern const u8 gText_Defense3[]; +extern const u8 gText_Speed2[]; +extern const u8 gText_SpAtk3[]; +extern const u8 gText_SpDef3[]; +extern const u8 gText_PkmnBaseVar2StatIncreased[]; +extern const u8 gText_MovesPPIncreased[]; +extern const u8 gText_PPWasRestored[]; +extern const u8 gText_PkmnHPRestoredByVar2[]; +extern const u8 gText_PkmnNeedsToReplaceMove[]; +extern const u8 gText_PkmnCantLearnMove[]; +extern const u8 gText_PkmnAlreadyKnows[]; +extern const u8 gText_PkmnLearnedMove3[]; +extern const u8 gText_WhichMoveToForget[]; +extern const u8 gText_12PoofForgotMove[]; +extern const u8 gText_StopLearningMove2[]; +extern const u8 gText_MoveNotLearned[]; // credits extern const u8 gString_Dummy[]; diff --git a/include/trade.h b/include/trade.h index 3c42be3ea..b3b1de23b 100644 --- a/include/trade.h +++ b/include/trade.h @@ -2,6 +2,7 @@ #define GUARD_TRADE_H #include "global.h" +#include "librfu.h" #include "constants/trade.h" extern struct MailStruct gLinkPartnerMail[6]; @@ -10,5 +11,7 @@ extern u8 gSelectedTradeMonPositions[2]; extern const u16 gUnknown_826601C[]; void CB2_ReturnFromLinkTrade(void); s32 sub_804FB34(void); +s32 CanRegisterMonForTradingBoard(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, u16 species2, u16 species, u8 isObedientBitSet); // TODO: currently in link_rfu_2.s. further file split needed? +s32 GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, struct UnkLinkRfuStruct_02022B14Substruct rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isObedientBitSet); #endif //GUARD_TRADE_H diff --git a/include/union_room.h b/include/union_room.h index 00354ff31..03628441b 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -149,4 +149,8 @@ struct TradeUnkStruct u32 personality; }; +extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_203B064; +extern u16 gUnionRoomOfferedSpecies; +extern u8 gUnionRoomRequestedMonType; + #endif //GUARD_UNION_ROOM_H diff --git a/src/option_menu.c b/src/option_menu.c index 35fe957be..5453dfa9e 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -206,7 +206,7 @@ void CB2_OptionsMenuFromStartMenu(void) u8 i; if (gMain.savedCallback == NULL) - gMain.savedCallback = CB2_ReturnToStartMenu; + gMain.savedCallback = CB2_ReturnToFieldWithOpenMenu; sOptionMenuPtr = AllocZeroed(sizeof(struct OptionMenu)); sOptionMenuPtr->state3 = 0; sOptionMenuPtr->state2 = 0; diff --git a/src/party_menu.c b/src/party_menu.c index 08600229a..f88f2f6fc 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 "berry_pouch.h" #include "bg.h" #include "data.h" #include "decompress.h" @@ -42,6 +43,7 @@ #include "pokemon.h" #include "pokemon_icon.h" #include "pokemon_jump.h" +#include "pokemon_special_anim.h" #include "pokemon_storage_system.h" #include "pokemon_summary_screen.h" #include "quest_log.h" @@ -58,6 +60,7 @@ #include "teachy_tv.h" #include "text.h" #include "text_window.h" +#include "tm_case.h" #include "trade.h" #include "union_room.h" #include "window.h" @@ -69,6 +72,7 @@ #include "constants/items.h" #include "constants/maps.h" #include "constants/moves.h" +#include "constants/pokemon.h" #include "constants/songs.h" #include "constants/species.h" #include "constants/vars.h" @@ -250,24 +254,6 @@ void Task_HandleCancelParticipationYesNoInput(u8 taskId); void Task_TryCreateSelectionWindow(u8 taskId); u16 GetTutorMove(u8 tutor); bool8 CanLearnTutorMove(u16 species, u8 tutor); -void sub_8120C6C(u8 taskId); -void sub_8120CA8(u8 taskId); -void sub_8120CD8(u8 taskId); -void sub_8120D08(u8 taskId); -void sub_8120D40(u8 taskId); -void sub_8120D7C(u8 taskId); -void sub_8120DAC(u8 taskId); -void sub_8120DE0(u8 taskId); -void sub_8120E1C(u8 taskId); -void sub_8120E58(u8 taskId); -void sub_8120EE0(u8 taskId); -void sub_8120FF0(u8 taskId); -void sub_8120FB0(void); -bool8 sub_8120F78(u8 taskId); -u8 sub_81220D4(void); -void sub_8122084(u8 windowId, const u8 *str); -void sub_8122110(u8 windowId); -void sub_812358C(void); void CreateSelectionWindow(void); bool8 ShouldUseChooseMonText(void); void UpdatePartyMonHPBar(u8 spriteId, struct Pokemon *mon); @@ -294,6 +280,81 @@ void CB2_WriteMailToGiveMon(void); void Task_SwitchHoldItemsPrompt(u8 taskId); void Task_GiveHoldItem(u8 taskId); void Task_UpdateHeldItemSprite(u8 taskId); +void Task_HandleSwitchItemsYesNoInput(u8 taskId); +void Task_SwitchItemsYesNo(u8 taskId); +void Task_WriteMailToGiveMonAfterText(u8 taskId); +void CB2_ReturnToPartyMenuFromWritingMail(void); +void CB2_ReturnToPartyMenuFromWritingMail(void); +void Task_DisplayGaveMailFromPartyMessage(u8 taskId); +void CB2_ReadHeldMail(void); +void CB2_ReturnToPartyMenuFromReadingMail(void); +void Task_SendMailToPCYesNo(u8 taskId); +void Task_HandleSendMailToPCYesNoInput(u8 taskId); +void Task_LoseMailMessageYesNo(u8 taskId); +void Task_HandleLoseMailMessageYesNoInput(u8 taskId); +bool8 TrySwitchInPokemon(void); +void DisplayCantUseFlashMessage(void); +void DisplayCantUseSurfMessage(void); +void Task_CancelAfterAorBPress(u8 taskId); +void DisplayFieldMoveExitAreaMessage(u8 taskId); +void Task_FieldMoveExitAreaYesNo(u8 taskId); +void Task_HandleFieldMoveExitAreaYesNoInput(u8 taskId); +void Task_FieldMoveWaitForFade(u8 taskId); +u16 GetFieldMoveMonSpecies(void); +u8 GetPartyLayoutFromBattleType(void); +void Task_SetSacredAshCB(u8 taskId); +void CB2_ReturnToBagMenu(void); +u8 GetPartyIdFromBattleSlot(u8 slot); +void Task_DisplayHPRestoredMessage(u8 taskId); +void SetSelectedMoveForPPItem(u8 taskId); +void ReturnToUseOnWhichMon(u8 taskId); +void TryUsePPItem(u8 taskId); +void ItemUseCB_LearnedMove(u8 taskId, UNUSED TaskFunc func); +void Task_LearnedMove(u8 taskId); +void Task_ReplaceMoveYesNo(u8 taskId); +void Task_DoLearnedMoveFanfareAfterText(u8 taskId); +void Task_TryLearningNextMove(u8 taskId); +void Task_LearnNextMoveOrClosePartyMenu(u8 taskId); +void Task_HandleReplaceMoveYesNoInput(u8 taskId); +void StopLearningMovePrompt(u8 taskId); +void Task_ShowSummaryScreenToForgetMove(u8 taskId); +void CB2_ShowSummaryScreenToForgetMove(void); +void CB2_ReturnToPartyMenuWhileLearningMove(void); +void Task_ReturnToPartyMenuWhileLearningMove(u8 taskId); +void DisplayPartyMenuForgotMoveMessage(u8 taskId); +void Task_PartyMenuReplaceMove(u8 taskId); +void Task_StopLearningMoveYesNo(u8 taskId); +void Task_HandleStopLearningMoveYesNoInput(u8 taskId); +void Task_TryLearningNextMoveAfterText(u8 taskId); +void sub_8120C6C(u8 taskId); +void sub_8120CA8(u8 taskId); +void sub_8120CD8(u8 taskId); +void sub_8120D08(u8 taskId); +void sub_8120D40(u8 taskId); +void sub_8120D7C(u8 taskId); +void sub_8120DAC(u8 taskId); +void sub_8120DE0(u8 taskId); +void sub_8120E1C(u8 taskId); +void sub_8120E58(u8 taskId); +void sub_8120EE0(u8 taskId); +void sub_8120FF0(u8 taskId); +bool8 sub_8120F78(u8 taskId); +void sub_8120FB0(void); +void sub_8122084(u8 windowId, const u8 *str); +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); +void sub_8125898(u8 taskId, UNUSED TaskFunc func); +void sub_8125F4C(u8 taskId, UNUSED TaskFunc func); +void sub_8125F5C(u8 taskId); +void sub_8126BD4(void); +bool8 sub_8126C24(void); EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL; EWRAM_DATA struct PartyMenu gPartyMenu = {0}; @@ -712,7 +773,7 @@ void DisplayPartyPokemonDataForChooseHalf(u8 slot) u8 i; struct Pokemon *mon = &gPlayerParty[slot]; u8 *order = gSelectedOrderFromParty; - u8 r3; + u8 maxBattlers; if (!GetBattleEntryEligibility(mon)) { @@ -721,10 +782,10 @@ void DisplayPartyPokemonDataForChooseHalf(u8 slot) else { if (gPartyMenu.unk_8_6 == 2) - r3 = 2; + maxBattlers = 2; else - r3 = 3; - for (i = 0; i < r3; ++i) + maxBattlers = 3; + for (i = 0; i < maxBattlers; ++i) { if (order[i] != 0 && (order[i] - 1) == slot) { @@ -2570,7 +2631,7 @@ void sub_8122138(u8 action) ptr->windowId[2] = AddWindow(&gUnknown_845A178); sub_8112F18(ptr->windowId[2]); attr = GetFontAttribute(2, FONTATTR_LETTER_SPACING); - AddTextPrinterParameterized4(ptr->windowId[2], 2, 3, 6, attr, 0, sFontColorTable[5], 0, sHMDescriptionTable[action - 18]); + AddTextPrinterParameterized4(ptr->windowId[2], 2, 3, 6, attr, 0, sFontColorTable[5], 0, sHMDescriptionTable[action - MENU_FIELD_MOVES]); PutWindowTilemap(ptr->windowId[2]); ScheduleBgCopyTilemapToVram(2); } @@ -3224,7 +3285,7 @@ void Task_SlideSelectedSlotsOnscreen(u8 taskId) PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId); PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId); ScheduleBgCopyTilemapToVram(0); - // memory leak + // BUG: memory leak // Free(sSlot1TilemapBuffer); // Free(sSlot2TilemapBuffer); FinishTwoMonAction(taskId); @@ -3396,3 +3457,1554 @@ void Task_GiveHoldItem(u8 taskId) gTasks[taskId].func = Task_UpdateHeldItemSprite; } } + +void Task_SwitchHoldItemsPrompt(u8 taskId) +{ + if (!gPaletteFade.active) + { + DisplayAlreadyHoldingItemSwitchMessage(&gPlayerParty[gPartyMenu.slotId], sPartyMenuItemId, TRUE); + gTasks[taskId].func = Task_SwitchItemsYesNo; + } +} + +void Task_SwitchItemsYesNo(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleSwitchItemsYesNoInput; + } +} + +void Task_HandleSwitchItemsYesNoInput(u8 taskId) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: // Yes, switch items + RemoveBagItem(gSpecialVar_ItemId, 1); + + // No room to return held item to bag + if (AddBagItem(sPartyMenuItemId, 1) == FALSE) + { + AddBagItem(gSpecialVar_ItemId, 1); + BufferBagFullCantTakeItemMessage(sPartyMenuItemId); + DisplayPartyMenuMessage(gStringVar4, FALSE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + } + // Giving mail + else if (ItemIsMail(gSpecialVar_ItemId)) + { + GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId); + gTasks[taskId].func = Task_WriteMailToGiveMonAfterText; + } + // Giving item + else + { + GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId); + DisplaySwitchedHeldItemMessage(gSpecialVar_ItemId, sPartyMenuItemId, TRUE); + gTasks[taskId].func = Task_UpdateHeldItemSprite; + } + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + // fallthrough + case 1: // No + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + break; + } +} + +void Task_WriteMailToGiveMonAfterText(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMon; + Task_ClosePartyMenu(taskId); + } +} + +void CB2_WriteMailToGiveMon(void) +{ + u8 mail = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL); + + DoEasyChatScreen(EASY_CHAT_TYPE_MAIL, + gSaveBlock1Ptr->mail[mail].words, + CB2_ReturnToPartyMenuFromWritingMail); +} + +void CB2_ReturnToPartyMenuFromWritingMail(void) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); + + // Canceled writing mail + if (gSpecialVar_Result == FALSE) + { + TakeMailFromMon(mon); + SetMonData(mon, MON_DATA_HELD_ITEM, &sPartyMenuItemId); + RemoveBagItem(sPartyMenuItemId, 1); + AddBagItem(item, 1); + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_CHOOSE_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback); + } + // Wrote mail + else + { + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_CHOOSE_MON, Task_DisplayGaveMailFromPartyMessage, gPartyMenu.exitCallback); + } +} + +// Nearly redundant with Task_DisplayGaveMailFromBagMessgae +void Task_DisplayGaveMailFromPartyMessage(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (sPartyMenuItemId == ITEM_NONE) + DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId, FALSE, 0); + else + DisplaySwitchedHeldItemMessage(gSpecialVar_ItemId, sPartyMenuItemId, FALSE); + gTasks[taskId].func = Task_UpdateHeldItemSprite; + } +} + +void Task_UpdateHeldItemSprite(u8 taskId) +{ + s8 slotId = gPartyMenu.slotId; + + if (IsPartyMenuTextPrinterActive() != TRUE) + { + UpdatePartyMonHeldItemSprite(&gPlayerParty[slotId], &sPartyMenuBoxes[slotId]); + Task_ReturnToChooseMonAfterText(taskId); + } +} + +void CursorCB_TakeItem(u8 taskId) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); + + PlaySE(SE_SELECT); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + switch (TryTakeMonItem(mon)) + { + case 0: // Not holding item + GetMonNickname(mon, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding); + DisplayPartyMenuMessage(gStringVar4, TRUE); + break; + case 1: // No room to take item + BufferBagFullCantTakeItemMessage(item); + DisplayPartyMenuMessage(gStringVar4, TRUE); + break; + default: // Took item + DisplayTookHeldItemMessage(mon, item, TRUE); + break; + } + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_UpdateHeldItemSprite; +} + +void CursorCB_Mail(u8 taskId) +{ + PlaySE(SE_SELECT); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_MAIL); + DisplaySelectionWindow(SELECTWINDOW_MAIL); + DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MAIL); + gTasks[taskId].data[0] = 0xFF; + gTasks[taskId].func = Task_HandleSelectionMenuInput; +} + +void CursorCB_Read(u8 taskId) +{ + PlaySE(SE_SELECT); + sPartyMenuInternal->exitCallback = CB2_ReadHeldMail; + Task_ClosePartyMenu(taskId); +} + +void CB2_ReadHeldMail(void) +{ + ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL)], CB2_ReturnToPartyMenuFromReadingMail, 1); +} + +void CB2_ReturnToPartyMenuFromReadingMail(void) +{ + gPaletteFade.bufferTransferDisabled = TRUE; + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_DO_WHAT_WITH_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback); +} + +void CursorCB_TakeMail(u8 taskId) +{ + PlaySE(SE_SELECT); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + DisplayPartyMenuMessage(gText_SendMailToPC, TRUE); + gTasks[taskId].func = Task_SendMailToPCYesNo; +} + +void Task_SendMailToPCYesNo(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleSendMailToPCYesNoInput; + } +} + +void Task_HandleSendMailToPCYesNoInput(u8 taskId) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: // Yes, send to PC + if (TakeMailFromMon2(&gPlayerParty[gPartyMenu.slotId]) != 0xFF) + { + DisplayPartyMenuMessage(gText_MailSentToPC, FALSE); + gTasks[taskId].func = Task_UpdateHeldItemSprite; + } + else + { + DisplayPartyMenuMessage(gText_PCMailboxFull, FALSE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + } + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + // fallthrough + case 1: + DisplayPartyMenuMessage(gText_MailMessageWillBeLost, TRUE); + gTasks[taskId].func = Task_LoseMailMessageYesNo; + break; + } +} + +void Task_LoseMailMessageYesNo(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleLoseMailMessageYesNoInput; + } +} + +void Task_HandleLoseMailMessageYesNoInput(u8 taskId) +{ + u16 item; + + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: // Yes, lose mail message + item = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM); + if (AddBagItem(item, 1) == TRUE) + { + TakeMailFromMon(&gPlayerParty[gPartyMenu.slotId]); + DisplayPartyMenuMessage(gText_MailTakenFromPkmn, FALSE); + gTasks[taskId].func = Task_UpdateHeldItemSprite; + } + else + { + BufferBagFullCantTakeItemMessage(item); + DisplayPartyMenuMessage(gStringVar4, FALSE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + } + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + // fallthrough + case 1: + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + break; + } +} + +void CursorCB_Cancel2(u8 taskId) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + + PlaySE(SE_SELECT); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon)); + DisplaySelectionWindow(SELECTWINDOW_ACTIONS); + DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MON); + gTasks[taskId].data[0] = 0xFF; + gTasks[taskId].func = Task_HandleSelectionMenuInput; +} + +void CursorCB_SendMon(u8 taskId) +{ + PlaySE(SE_SELECT); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + if (TrySwitchInPokemon() == TRUE) + { + Task_ClosePartyMenu(taskId); + } + else + { + // gStringVar4 below is the error message buffered by TrySwitchInPokemon + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + } +} + +void CursorCB_Enter(u8 taskId) +{ + u8 maxBattlers; + u8 i; + const u8 *str; + + if (gPartyMenu.unk_8_6 == 2) + { + maxBattlers = 2; + str = gUnknown_8416B3E; + } + else + { + maxBattlers = 3; + str = gUnknown_8416B16; + } + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + for (i = 0; i < maxBattlers; ++i) + { + if (gSelectedOrderFromParty[i] == 0) + { + PlaySE(SE_SELECT); + gSelectedOrderFromParty[i] = gPartyMenu.slotId + 1; + DisplayPartyPokemonDescriptionText(i + PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gPartyMenu.slotId], 1); + if (i == (maxBattlers - 1)) + MoveCursorToConfirm(); + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; + return; + } + } + PlaySE(SE_HAZURE); + DisplayPartyMenuMessage(str, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; +} + +void MoveCursorToConfirm(void) +{ + AnimatePartySlot(gPartyMenu.slotId, 0); + gPartyMenu.slotId = PARTY_SIZE; + AnimatePartySlot(gPartyMenu.slotId, 1); +} + +void CursorCB_NoEntry(u8 taskId) +{ + u8 i; + + PlaySE(SE_SELECT); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + for (i = 0; i < 3; ++i) + { + if (gSelectedOrderFromParty[i] == gPartyMenu.slotId + 1) + { + gSelectedOrderFromParty[i] = 0; + switch (i) + { + case 0: + gSelectedOrderFromParty[0] = gSelectedOrderFromParty[1]; + gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2]; + gSelectedOrderFromParty[2] = 0; + break; + case 1: + gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2]; + gSelectedOrderFromParty[2] = 0; + break; + } + break; + } + } + DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_ABLE_3, &sPartyMenuBoxes[gPartyMenu.slotId], 1); + if (gSelectedOrderFromParty[0] != 0) + DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gSelectedOrderFromParty[0] - 1], 1); + if (gSelectedOrderFromParty[1] != 0) + DisplayPartyPokemonDescriptionText(1 + PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gSelectedOrderFromParty[1] - 1], 1); + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; +} + +void CursorCB_Store(u8 taskId) +{ + PlaySE(SE_SELECT); + gSpecialVar_0x8004 = gPartyMenu.slotId; + Task_ClosePartyMenu(taskId); +} + +// Register mon for the Trading Board in Union Room +void CursorCB_Register(u8 taskId) +{ + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); + u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); + + switch (CanRegisterMonForTradingBoard(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_80F9800(), species2, species, obedience)) + { + case CANT_REGISTER_MON: + StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); + break; + case CANT_REGISTER_EGG: + StringExpandPlaceholders(gStringVar4, gText_EggCantBeTradedNow); + break; + default: + PlaySE(SE_SELECT); + Task_ClosePartyMenu(taskId); + return; + } + PlaySE(SE_HAZURE); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + StringAppend(gStringVar4, gText_PauseUntilPress); + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; +} + +void CursorCB_Trade1(u8 taskId) +{ + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); + u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); + u32 stringId = GetUnionRoomTradeMessageId(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_80F9800(), gUnknown_203B064, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience); + + if (stringId != UR_TRADE_MSG_NONE) + { + StringExpandPlaceholders(gStringVar4, sUnionRoomTradeMessages[stringId - 1]); + PlaySE(SE_HAZURE); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + StringAppend(gStringVar4, gText_PauseUntilPress); + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + } + else + { + PlaySE(SE_SELECT); + Task_ClosePartyMenu(taskId); + } +} + +// Spin Trade (based on the translation of the Japanese trade prompt) +// Not implemented, and normally unreachable because PARTY_MENU_TYPE_SPIN_TRADE is never used +void CursorCB_Trade2(u8 taskId) +{ +} + +void CursorCB_FieldMove(u8 taskId) +{ + u8 fieldMove = sPartyMenuInternal->actions[Menu_GetCursorPos()] - MENU_FIELD_MOVES; + const struct MapHeader *mapHeader; + + PlaySE(SE_SELECT); + if (sFieldMoveCursorCallbacks[fieldMove].fieldMoveFunc == NULL) + return; + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) + { + if (fieldMove == FIELD_MOVE_MILK_DRINK || fieldMove == FIELD_MOVE_SOFT_BOILED) + DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE); + else + DisplayPartyMenuStdMessage(sFieldMoveCursorCallbacks[fieldMove].msgId); + gTasks[taskId].func = Task_CancelAfterAorBPress; + } + else + { + // All field moves before WATERFALL are HMs. + if (fieldMove <= FIELD_MOVE_WATERFALL && FlagGet(FLAG_BADGE01_GET + fieldMove) != TRUE) + { + DisplayPartyMenuMessage(gText_CantUseUntilNewBadge, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + } + else if (sFieldMoveCursorCallbacks[fieldMove].fieldMoveFunc() == TRUE) + { + switch (fieldMove) + { + case FIELD_MOVE_MILK_DRINK: + case FIELD_MOVE_SOFT_BOILED: + ChooseMonForSoftboiled(taskId); + break; + case FIELD_MOVE_TELEPORT: + mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum); + GetMapNameGeneric(gStringVar1, mapHeader->regionMapSectionId); + StringExpandPlaceholders(gStringVar4, gText_ReturnToHealingSpot); + DisplayFieldMoveExitAreaMessage(taskId); + sPartyMenuInternal->data[0] = fieldMove; + break; + case FIELD_MOVE_DIG: + mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum); + GetMapNameGeneric(gStringVar1, mapHeader->regionMapSectionId); + StringExpandPlaceholders(gStringVar4, gText_EscapeFromHereAndReturnTo); + DisplayFieldMoveExitAreaMessage(taskId); + sPartyMenuInternal->data[0] = fieldMove; + break; + case FIELD_MOVE_FLY: + gPartyMenu.exitCallback = MCB2_FlyMap; + Task_ClosePartyMenu(taskId); + break; + default: + gPartyMenu.exitCallback = CB2_ReturnToField; + sub_8124BB0(&gPlayerParty[GetCursorSelectionMonId()], fieldMove); + Task_ClosePartyMenu(taskId); + break; + } + } + // Cant use Field Move + else + { + switch (fieldMove) + { + case FIELD_MOVE_SURF: + DisplayCantUseSurfMessage(); + break; + case FIELD_MOVE_FLASH: + DisplayCantUseFlashMessage(); + break; + default: + DisplayPartyMenuStdMessage(sFieldMoveCursorCallbacks[fieldMove].msgId); + break; + } + gTasks[taskId].func = Task_CancelAfterAorBPress; + } + } +} + +void DisplayFieldMoveExitAreaMessage(u8 taskId) +{ + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_FieldMoveExitAreaYesNo; +} + +void Task_FieldMoveExitAreaYesNo(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleFieldMoveExitAreaYesNoInput; + } +} + +void Task_HandleFieldMoveExitAreaYesNoInput(u8 taskId) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + gPartyMenu.exitCallback = CB2_ReturnToField; + sub_8124BB0(&gPlayerParty[GetCursorSelectionMonId()], sPartyMenuInternal->data[0]); + Task_ClosePartyMenu(taskId); + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + // fallthrough + case 1: + gFieldCallback2 = NULL; + gPostMenuFieldCallback = NULL; + Task_ReturnToChooseMonAfterText(taskId); + break; + } +} + +bool8 FieldCallback_PrepareFadeInFromMenu(void) +{ + sub_807DC00(); + CreateTask(Task_FieldMoveWaitForFade, 8); + return TRUE; +} + +void Task_FieldMoveWaitForFade(u8 taskId) +{ + if (IsWeatherNotFadingIn() == TRUE) + { + gFieldEffectArguments[0] = GetFieldMoveMonSpecies(); + gPostMenuFieldCallback(); + DestroyTask(taskId); + } +} + +u16 GetFieldMoveMonSpecies(void) +{ + return GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); +} + +void Task_CancelAfterAorBPress(u8 taskId) +{ + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + CursorCB_Cancel1(taskId); +} + +void DisplayCantUseFlashMessage(void) +{ + if (FlagGet(FLAG_SYS_FLASH_ACTIVE) == TRUE) + DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_IN_USE); + else + DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE); +} + +void FieldCallback_Surf(void) +{ + gFieldEffectArguments[0] = GetCursorSelectionMonId(); + FieldEffectStart(FLDEFF_USE_SURF); +} + +bool8 SetUpFieldMove_Surf(void) +{ + s16 x, y; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + if (MetatileBehavior_IsSemiDeepWater(MapGridGetMetatileBehaviorAt(x, y)) != TRUE + && PartyHasMonWithSurf() == TRUE + && IsPlayerFacingSurfableFishableWater() == TRUE) + { + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = FieldCallback_Surf; + return TRUE; + } + return FALSE; +} + +void DisplayCantUseSurfMessage(void) +{ + s16 x, y; + + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + { + DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_SURFING); + } + else + { + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + if (MetatileBehavior_IsSemiDeepWater(MapGridGetMetatileBehaviorAt(x, y)) == TRUE) + DisplayPartyMenuStdMessage(PARTY_MSG_CURRENT_TOO_FAST); + else if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE17)) + && ((gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE17)) + || (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE18)))) + DisplayPartyMenuStdMessage(PARTY_MSG_ENJOY_CYCLING); + else + DisplayPartyMenuStdMessage(PARTY_MSG_CANT_SURF_HERE); + } +} + +bool8 SetUpFieldMove_Fly(void) +{ + if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE) + return TRUE; + else + return FALSE; +} + +void CB2_ReturnToPartyMenuFromFlyMap(void) +{ + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToFieldWithOpenMenu); +} + +void FieldCallback_Waterfall(void) +{ + gFieldEffectArguments[0] = GetCursorSelectionMonId(); + FieldEffectStart(FLDEFF_USE_WATERFALL); +} + +bool8 SetUpFieldMove_Waterfall(void) +{ + s16 x, y; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE && IsPlayerSurfingNorth() == TRUE) + { + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = FieldCallback_Waterfall; + return TRUE; + } + return FALSE; +} + +void sub_8124B60(struct Pokemon *mon, u16 item, u16 item2) +{ + u16 *ptr = Alloc(4 * sizeof(u16)); + + ptr[2] = GetMonData(mon, MON_DATA_SPECIES2); + ptr[0] = item; + ptr[1] = item2; + if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM) + sub_8113550(10, ptr); + else + sub_8113550(9, ptr); + Free(ptr); +} + +struct FieldMoveWarpParams +{ + u16 species; + u8 fieldMove; + u8 regionMapSectionId; +}; + +void sub_8124BB0(struct Pokemon *mon, u8 fieldMove) +{ + struct FieldMoveWarpParams *ptr = Alloc(sizeof(*ptr)); + + ptr->species = GetMonData(mon, MON_DATA_SPECIES2); + ptr->fieldMove = fieldMove; + switch (ptr->fieldMove) + { + case FIELD_MOVE_TELEPORT: + ptr->regionMapSectionId = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum)->regionMapSectionId; + break; + case FIELD_MOVE_DIG: + ptr->regionMapSectionId = gMapHeader.regionMapSectionId; + break; + default: + ptr->regionMapSectionId = 0xFF; + } + sub_8113550(36, (u16 *)ptr); + Free(ptr); +} + +void sub_8124C1C(const u8 *healLocCtrlData) // TODO: confirm the type of data chunk at 0x83F2EE0 +{ + const struct MapHeader *mapHeader; + struct FieldMoveWarpParams *ptr2; + struct + { + s8 mapGroup; + s8 mapNum; + u32 unk_4; + } *ptr = Alloc(sizeof(*ptr)); + + ptr->mapGroup = healLocCtrlData[0]; + ptr->mapNum = healLocCtrlData[1]; + mapHeader = Overworld_GetMapHeaderByGroupAndId(ptr->mapGroup, ptr->mapNum); + Free(ptr); + ptr2 = Alloc(4); + ptr2->species = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_SPECIES2); + ptr2->fieldMove = FIELD_MOVE_FLY; + ptr2->regionMapSectionId = mapHeader->regionMapSectionId; + sub_8113550(36, (u16 *)ptr2); + Free(ptr2); +} + +void CB2_ShowPartyMenuForItemUse(void) +{ + MainCallback callback = CB2_ReturnToBagMenu; + u8 partyLayout; + u8 menuType; + u8 i; + u8 msgId; + TaskFunc task; + + if (gMain.inBattle) + { + menuType = PARTY_MENU_TYPE_IN_BATTLE; + partyLayout = GetPartyLayoutFromBattleType(); + } + else + { + menuType = PARTY_MENU_TYPE_FIELD; + partyLayout = PARTY_LAYOUT_SINGLE; + } + + if (GetItemEffectType(gSpecialVar_ItemId) == ITEM_EFFECT_SACRED_ASH) + { + gPartyMenu.slotId = 0; + for (i = 0; i < PARTY_SIZE; ++i) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + { + gPartyMenu.slotId = i; + break; + } + } + if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) + callback = sub_8124DB0; + task = Task_SetSacredAshCB; + msgId = PARTY_MSG_NONE; + } + else + { + switch (GetPocketByItemId(gSpecialVar_ItemId)) + { + default: + msgId = PARTY_MSG_USE_ON_WHICH_MON; + break; + case POCKET_TM_CASE: + msgId = PARTY_MSG_TEACH_WHICH_MON; + callback = sub_8124DA0; + break; + case POCKET_BERRY_POUCH: + msgId = PARTY_MSG_USE_ON_WHICH_MON; + callback = sub_8124DB0; + break; + } + task = Task_HandleChooseMonInput; + } + InitPartyMenu(menuType, partyLayout, PARTY_ACTION_USE_ITEM, TRUE, msgId, task, callback); +} + +void CB2_ReturnToBagMenu(void) +{ + GoToBagMenu(11, 3, NULL); +} + +void sub_8124DA0(void) +{ + InitTMCase(5, NULL, 0xFF); +} + +void sub_8124DB0(void) +{ + InitBerryPouch(BERRYPOUCH_NA, NULL, 0xFF); +} + +void sub_8124DC0(u8 taskId) +{ + sPartyMenuInternal->exitCallback = sub_8124DE0; + Task_ClosePartyMenu(taskId); +} + +void sub_8124DE0(void) +{ + if (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId) == 2) // Evolution stone + { + if (sub_8126C24() == TRUE) + sub_811C540(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8126BD4); + else + sub_811C5AC(gPartyMenu.slotId, gSpecialVar_ItemId, gPartyMenu.exitCallback); + } + else + { + sub_811C540(gPartyMenu.slotId, gSpecialVar_ItemId, sub_8124E48); + } +} + +void sub_8124E48(void) +{ + if (ItemId_GetPocket(gSpecialVar_ItemId) == POCKET_TM_CASE + && sub_811D178() == 1) + { + GiveMoveToMon(&gPlayerParty[gPartyMenu.slotId], ItemIdToBattleMoveId(gSpecialVar_ItemId)); + AdjustFriendship(&gPlayerParty[gPartyMenu.slotId], 4); + if (gSpecialVar_ItemId <= ITEM_TM50) + RemoveBagItem(gSpecialVar_ItemId, 1); + SetMainCallback2(gPartyMenu.exitCallback); + } + else + { + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, PARTY_ACTION_CHOOSE_MON, gPartyMenu.slotId, PARTY_MSG_NONE, Task_SetSacredAshCB, gPartyMenu.exitCallback); + } +} + +void sub_8124EFC(void) +{ + if (sub_811D178() == 1) + { + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u8 moveIdx = GetMoveSlotToReplace(); + u16 move = GetMonData(mon, moveIdx + MON_DATA_MOVE1); + + RemoveMonPPBonus(mon, moveIdx); + SetMonMoveSlot(mon, ItemIdToBattleMoveId(gSpecialVar_ItemId), moveIdx); + AdjustFriendship(mon, 4); + ItemUse_SetQuestLogEvent(4, mon, gSpecialVar_ItemId, move); + if (gSpecialVar_ItemId <= ITEM_TM50) + RemoveBagItem(gSpecialVar_ItemId, 1); + SetMainCallback2(gPartyMenu.exitCallback); + } + else + { + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, gPartyMenu.slotId, PARTY_MSG_NONE, Task_SetSacredAshCB, gPartyMenu.exitCallback); + } +} + +void Task_SetSacredAshCB(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) + sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen; + gItemUseCB(taskId, Task_ClosePartyMenuAfterText); // ItemUseCB_SacredAsh in this case + } +} + +bool8 IsHPRecoveryItem(u16 item) +{ + const u8 *effect; + + if (item == ITEM_ENIGMA_BERRY) + effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; + else + effect = gItemEffectTable[item - ITEM_POTION]; + if (effect[4] & ITEM4_HEAL_HP) + return TRUE; + else + return FALSE; +} + +void GetMedicineItemEffectMessage(u16 item) +{ + switch (GetItemEffectType(item)) + { + case ITEM_EFFECT_CURE_POISON: + StringExpandPlaceholders(gStringVar4, gText_PkmnCuredOfPoison); + break; + case ITEM_EFFECT_CURE_SLEEP: + StringExpandPlaceholders(gStringVar4, gText_PkmnWokeUp2); + break; + case ITEM_EFFECT_CURE_BURN: + StringExpandPlaceholders(gStringVar4, gText_PkmnBurnHealed); + break; + case ITEM_EFFECT_CURE_FREEZE: + StringExpandPlaceholders(gStringVar4, gText_PkmnThawedOut); + break; + case ITEM_EFFECT_CURE_PARALYSIS: + StringExpandPlaceholders(gStringVar4, gText_PkmnCuredOfParalysis); + break; + case ITEM_EFFECT_CURE_CONFUSION: + StringExpandPlaceholders(gStringVar4, gText_PkmnSnappedOutOfConfusion); + break; + case ITEM_EFFECT_CURE_INFATUATION: + StringExpandPlaceholders(gStringVar4, gText_PkmnGotOverInfatuation); + break; + case ITEM_EFFECT_CURE_ALL_STATUS: + StringExpandPlaceholders(gStringVar4, gText_PkmnBecameHealthy); + break; + case ITEM_EFFECT_HP_EV: + StringCopy(gStringVar2, gText_HP3); + StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased); + break; + case ITEM_EFFECT_ATK_EV: + StringCopy(gStringVar2, gText_Attack3); + StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased); + break; + case ITEM_EFFECT_DEF_EV: + StringCopy(gStringVar2, gText_Defense3); + StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased); + break; + case ITEM_EFFECT_SPEED_EV: + StringCopy(gStringVar2, gText_Speed2); + StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased); + break; + case ITEM_EFFECT_SPATK_EV: + StringCopy(gStringVar2, gText_SpAtk3); + StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased); + break; + case ITEM_EFFECT_SPDEF_EV: + StringCopy(gStringVar2, gText_SpDef3); + StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased); + break; + case ITEM_EFFECT_PP_UP: + case ITEM_EFFECT_PP_MAX: + StringExpandPlaceholders(gStringVar4, gText_MovesPPIncreased); + break; + case ITEM_EFFECT_HEAL_PP: + StringExpandPlaceholders(gStringVar4, gText_PPWasRestored); + break; + default: + StringExpandPlaceholders(gStringVar4, gText_WontHaveEffect); + break; + } +} + +bool8 NotUsingHPEVItemOnShedinja(struct Pokemon *mon, u16 item) +{ + if (GetItemEffectType(item) == ITEM_EFFECT_HP_EV && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_SHEDINJA) + return FALSE; + return TRUE; +} + +bool8 IsItemFlute(u16 item) +{ + if (item == ITEM_BLUE_FLUTE || item == ITEM_RED_FLUTE || item == ITEM_YELLOW_FLUTE) + return TRUE; + return FALSE; +} + +bool8 ExecuteTableBasedItemEffect_(u8 partyMonIndex, u16 item, u8 monMoveIndex) +{ + if (gMain.inBattle) + return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex); + else + return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex); +} + +void sub_81252D0(u8 taskId, TaskFunc func) +{ + u16 hp; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u16 item = gSpecialVar_ItemId; + bool8 canHeal; + + if (!NotUsingHPEVItemOnShedinja(mon, item)) + { + canHeal = TRUE; + } + else + { + if (IsHPRecoveryItem(item) == TRUE) + { + hp = GetMonData(mon, MON_DATA_HP); + if (hp == GetMonData(mon, MON_DATA_MAX_HP)) + canHeal = FALSE; + } + canHeal = PokemonUseItemEffects2(mon, item, gPartyMenu.slotId, 0); + } + PlaySE(SE_SELECT); + if (canHeal) + { + gPartyMenuUseExitCallback = FALSE; + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = func; + } + else + { + ItemUse_SetQuestLogEvent(4, mon, item, 0xFFFF); + sub_8124DC0(taskId); + gItemUseCB = ItemUseCB_Medicine; + } +} + +void ItemUseCB_Medicine(u8 taskId, TaskFunc func) +{ + u16 hp = 0; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u16 item = gSpecialVar_ItemId; + bool8 canHeal; + + if (NotUsingHPEVItemOnShedinja(mon, item)) + { + canHeal = IsHPRecoveryItem(item); + if (canHeal == TRUE) + { + hp = GetMonData(mon, MON_DATA_HP); + if (hp == GetMonData(mon, MON_DATA_MAX_HP)) + canHeal = FALSE; + } + if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0)) + { + WONT_HAVE_EFFECT: + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = func; + return; + } + } + else + { + goto WONT_HAVE_EFFECT; // even loop wrap won't work + } + gPartyMenuUseExitCallback = TRUE; + if (!IsItemFlute(item)) + { + PlaySE(SE_KAIFUKU); + if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM) + RemoveBagItem(item, 1); + } + else + { + PlaySE(SE_BIDORO); + } + SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); + if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible) + DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1); + if (canHeal == TRUE) + { + if (hp == 0) + AnimatePartySlot(gPartyMenu.slotId, 1); + PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage); + ResetHPTaskData(taskId, 0, hp); + return; + } + else + { + GetMonNickname(mon, gStringVar1); + GetMedicineItemEffectMessage(item); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = func; + } +} + +void Task_DisplayHPRestoredMessage(u8 taskId) +{ + GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2); + DisplayPartyMenuMessage(gStringVar4, FALSE); + ScheduleBgCopyTilemapToVram(2); + HandleBattleLowHpMusicChange(); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; +} + +void Task_ClosePartyMenuAfterText(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + if (gPartyMenuUseExitCallback == FALSE) + sPartyMenuInternal->exitCallback = NULL; + Task_ClosePartyMenu(taskId); + } +} + +void ShowMoveSelectWindow(u8 slot) +{ + u8 i; + u8 moveCount = 0; + u8 fontId = 2; + u8 windowId = DisplaySelectionWindow(SELECTWINDOW_MOVES); + u16 move; + + for (i = 0; i < MAX_MON_MOVES; ++i) + { + move = GetMonData(&gPlayerParty[slot], MON_DATA_MOVE1 + i); + AddTextPrinterParameterized(windowId, + fontId, + gMoveNames[move], + GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH) + GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), + (i * 16) + 2, + TEXT_SPEED_FF, + NULL); + if (move != MOVE_NONE) + ++moveCount; + } + Menu_InitCursor(windowId, fontId, 0, 2, 16, moveCount, FALSE); + ScheduleBgCopyTilemapToVram(2); +} + +void Task_HandleWhichMoveInput(u8 taskId) +{ + s8 input = Menu_ProcessInput(); + + if (input != MENU_NOTHING_CHOSEN) + { + if (input == MENU_B_PRESSED) + { + PlaySE(SE_SELECT); + ReturnToUseOnWhichMon(taskId); + } + else + { + SetSelectedMoveForPPItem(taskId); + } + } +} + +void ItemUseCB_PPRecovery(u8 taskId, UNUSED TaskFunc func) +{ + const u8 *effect; + u16 item = gSpecialVar_ItemId; + + if (item == ITEM_ENIGMA_BERRY) + effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; + else + effect = gItemEffectTable[item - ITEM_POTION]; + + if (!(effect[4] & ITEM4_HEAL_PP_ONE)) + { + gPartyMenu.data1 = 0; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) + TryUsePPItem(taskId); + else + sub_812580C(taskId); + } + else + { + PlaySE(SE_SELECT); + DisplayPartyMenuStdMessage(PARTY_MSG_RESTORE_WHICH_MOVE); + ShowMoveSelectWindow(gPartyMenu.slotId); + gTasks[taskId].func = Task_HandleWhichMoveInput; + } +} + +void SetSelectedMoveForPPItem(u8 taskId) +{ + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + gPartyMenu.data1 = Menu_GetCursorPos(); + if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) + TryUsePPItem(taskId); + else + sub_812580C(taskId); +} + +void ReturnToUseOnWhichMon(u8 taskId) +{ + gTasks[taskId].func = Task_HandleChooseMonInput; + sPartyMenuInternal->exitCallback = NULL; + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON); +} + +void sub_812580C(u8 taskId) +{ + bool8 noEffect = PokemonUseItemEffects2(&gPlayerParty[gPartyMenu.slotId], + gSpecialVar_ItemId, + gPartyMenu.slotId, + gPartyMenu.data1); + PlaySE(SE_SELECT); + if (noEffect) + { + gPartyMenuUseExitCallback = FALSE; + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } + else + { + sub_8124DC0(taskId); + gItemUseCB = sub_8125898; + } +} + +void sub_8125898(u8 taskId, UNUSED TaskFunc func) +{ + u16 move; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + + ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, (u8)gPartyMenu.data1); + gPartyMenuUseExitCallback = TRUE; + ItemUse_SetQuestLogEvent(4, mon, gSpecialVar_ItemId, 0xFFFF); + PlaySE(SE_KAIFUKU); + RemoveBagItem(gSpecialVar_ItemId, 1); + move = GetMonData(mon, gPartyMenu.data1 + MON_DATA_MOVE1); + StringCopy(gStringVar1, gMoveNames[move]); + GetMedicineItemEffectMessage(gSpecialVar_ItemId); + DisplayPartyMenuMessage(gStringVar4, 1); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; +} + +void TryUsePPItem(u8 taskId) +{ + u16 move = MOVE_NONE; + s16 *moveSlot = &gPartyMenu.data1; + u16 item = gSpecialVar_ItemId; + struct PartyMenu *ptr = &gPartyMenu; + struct Pokemon *mon; + + if (ExecuteTableBasedItemEffect_(ptr->slotId, item, *moveSlot)) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } + else + { + gPartyMenuUseExitCallback = TRUE; + mon = &gPlayerParty[ptr->slotId]; + ItemUse_SetQuestLogEvent(4, mon, item, 0xFFFF); + PlaySE(SE_KAIFUKU); + RemoveBagItem(item, 1); + move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot); + StringCopy(gStringVar1, gMoveNames[move]); + GetMedicineItemEffectMessage(item); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } +} + +void ItemUseCB_PPUp(u8 taskId, UNUSED TaskFunc func) +{ + PlaySE(SE_SELECT); + DisplayPartyMenuStdMessage(PARTY_MSG_BOOST_PP_WHICH_MOVE); + ShowMoveSelectWindow(gPartyMenu.slotId); + gTasks[taskId].func = Task_HandleWhichMoveInput; +} + +u16 ItemIdToBattleMoveId(u16 item) +{ + u16 tmNumber = item - ITEM_TM01_FOCUS_PUNCH; + + return sTMHMMoves[tmNumber]; +} + +bool8 IsMoveHm(u16 move) +{ + u8 i; + + for (i = 0; i < NUM_HIDDEN_MACHINES - 1; ++i) // no dive + if (sTMHMMoves[i + NUM_TECHNICAL_MACHINES] == move) + return TRUE; + return FALSE; +} + +bool8 MonKnowsMove(struct Pokemon *mon, u16 move) +{ + u8 i; + + for (i = 0; i < MAX_MON_MOVES; ++i) + { + if (GetMonData(mon, MON_DATA_MOVE1 + i) == move) + return TRUE; + } + return FALSE; +} + +void DisplayLearnMoveMessage(const u8 *str) +{ + StringExpandPlaceholders(gStringVar4, str); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); +} + +void DisplayLearnMoveMessageAndClose(u8 taskId, const u8 *str) +{ + DisplayLearnMoveMessage(str); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; +} + +void ItemUseCB_TMHM(u8 taskId, UNUSED TaskFunc func) +{ + struct Pokemon *mon; + s16 *move; + u16 item; + + PlaySE(SE_SELECT); + mon = &gPlayerParty[gPartyMenu.slotId]; + move = &gPartyMenu.data1; + item = gSpecialVar_ItemId; + GetMonNickname(mon, gStringVar1); + move[0] = ItemIdToBattleMoveId(item); + StringCopy(gStringVar2, gMoveNames[move[0]]); + move[1] = 0; + switch (CanMonLearnTMTutor(mon, item, 0)) + { + case CANNOT_LEARN_MOVE: + DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove); + return; + case ALREADY_KNOWS_MOVE: + DisplayLearnMoveMessageAndClose(taskId, gText_PkmnAlreadyKnows); + return; + } + if (GiveMoveToMon(mon, move[0]) != MON_HAS_MAX_MOVES) + { + ItemUse_SetQuestLogEvent(4, mon, item, 0xFFFF); + sub_8124DC0(taskId); + gItemUseCB = ItemUseCB_LearnedMove; + } + else + { + DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove); + gTasks[taskId].func = Task_ReplaceMoveYesNo; + } +} + +void ItemUseCB_LearnedMove(u8 taskId, UNUSED TaskFunc func) +{ + Task_LearnedMove(taskId); +} + +void Task_LearnedMove(u8 taskId) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + s16 *move = &gPartyMenu.data1; + u16 item = gSpecialVar_ItemId; + + if (move[1] == 0) + { + AdjustFriendship(mon, 4); + if (item < ITEM_HM01_CUT) + RemoveBagItem(item, 1); + } + GetMonNickname(mon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[move[0]]); + StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_DoLearnedMoveFanfareAfterText; +} + +void Task_DoLearnedMoveFanfareAfterText(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + PlayFanfare(MUS_FANFA1); + gTasks[taskId].func = Task_LearnNextMoveOrClosePartyMenu; + } +} + +void Task_LearnNextMoveOrClosePartyMenu(u8 taskId) +{ + if (IsFanfareTaskInactive() && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) + { + if (gPartyMenu.learnMoveState == 1) + Task_TryLearningNextMove(taskId); + else + { + if (gPartyMenu.learnMoveState == 2) // never occurs + gSpecialVar_Result = TRUE; + Task_ClosePartyMenu(taskId); + } + } +} + +void Task_ReplaceMoveYesNo(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleReplaceMoveYesNoInput; + } +} + +void Task_HandleReplaceMoveYesNoInput(u8 taskId) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + DisplayPartyMenuMessage(gText_WhichMoveToForget, TRUE); + gTasks[taskId].func = Task_ShowSummaryScreenToForgetMove; + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + // fallthrough + case 1: + StopLearningMovePrompt(taskId); + break; + } +} + +void Task_ShowSummaryScreenToForgetMove(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + sPartyMenuInternal->exitCallback = CB2_ShowSummaryScreenToForgetMove; + Task_ClosePartyMenu(taskId); + } +} + +void CB2_ShowSummaryScreenToForgetMove(void) +{ + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuWhileLearningMove, gPartyMenu.data1); +} + +void CB2_ReturnToPartyMenuWhileLearningMove(void) +{ + u8 moveIdx = GetMoveSlotToReplace(); + u16 move; + s32 learnMoveState = gPartyMenu.learnMoveState; + + if (learnMoveState == 0 && moveIdx != MAX_MON_MOVES) + { + move = GetMonData(&gPlayerParty[gPartyMenu.slotId], moveIdx + MON_DATA_MOVE1); + sub_811C568(gPartyMenu.slotId, gSpecialVar_ItemId, move, sub_8124EFC); + gItemUseCB = sub_8125F4C; + gPartyMenu.action = learnMoveState; + } + else + { + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback); + } +} + +void Task_ReturnToPartyMenuWhileLearningMove(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (GetMoveSlotToReplace() != MAX_MON_MOVES) + DisplayPartyMenuForgotMoveMessage(taskId); + else + StopLearningMovePrompt(taskId); + } +} + +void sub_8125F4C(u8 taskId, UNUSED TaskFunc func) +{ + sub_8125F5C(taskId); +} + +void sub_8125F5C(u8 taskId) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u8 moveIdx = GetMoveSlotToReplace(); + u16 move = GetMonData(mon, moveIdx + MON_DATA_MOVE1); + + ItemUse_SetQuestLogEvent(4, mon, gSpecialVar_ItemId, move); + GetMonNickname(mon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[move]); + RemoveMonPPBonus(mon, moveIdx); + SetMonMoveSlot(mon, gPartyMenu.data1, moveIdx); + Task_LearnedMove(taskId); +} + +void DisplayPartyMenuForgotMoveMessage(u8 taskId) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u16 move = GetMonData(mon, MON_DATA_MOVE1 + GetMoveSlotToReplace()); + + GetMonNickname(mon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[move]); + DisplayLearnMoveMessage(gText_12PoofForgotMove); + gTasks[taskId].func = Task_PartyMenuReplaceMove; +} + +void Task_PartyMenuReplaceMove(u8 taskId) +{ + struct Pokemon *mon; + u16 move; + + if (IsPartyMenuTextPrinterActive() != TRUE) + { + mon = &gPlayerParty[gPartyMenu.slotId]; + RemoveMonPPBonus(mon, GetMoveSlotToReplace()); + move = gPartyMenu.data1; + SetMonMoveSlot(mon, move, GetMoveSlotToReplace()); + Task_LearnedMove(taskId); + } +} + +void StopLearningMovePrompt(u8 taskId) +{ + StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]); + StringExpandPlaceholders(gStringVar4, gText_StopLearningMove2); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_StopLearningMoveYesNo; +} + +void Task_StopLearningMoveYesNo(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleStopLearningMoveYesNoInput; + } +} + +void Task_HandleStopLearningMoveYesNoInput(u8 taskId) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + GetMonNickname(mon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]); + StringExpandPlaceholders(gStringVar4, gText_MoveNotLearned); + DisplayPartyMenuMessage(gStringVar4, TRUE); + if (gPartyMenu.learnMoveState == 1) + { + gTasks[taskId].func = Task_TryLearningNextMoveAfterText; + } + else + { + if (gPartyMenu.learnMoveState == 2) // never occurs + gSpecialVar_Result = FALSE; + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + // fallthrough + case 1: + GetMonNickname(mon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]); + DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove); + gTasks[taskId].func = Task_ReplaceMoveYesNo; + break; + } +} diff --git a/src/start_menu.c b/src/start_menu.c index 4a4fe52e3..2a1713902 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -504,7 +504,7 @@ static bool8 StartMenuPlayerCallback(void) PlayRainStoppingSoundEffect(); DestroySafariZoneStatsWindow(); CleanupOverworldWindowsAndTilemaps(); - InitTrainerCard(CB2_ReturnToStartMenu); + InitTrainerCard(CB2_ReturnToFieldWithOpenMenu); return TRUE; } return FALSE; @@ -524,7 +524,7 @@ static bool8 StartMenuOptionCallback(void) DestroySafariZoneStatsWindow(); CleanupOverworldWindowsAndTilemaps(); SetMainCallback2(CB2_OptionsMenuFromStartMenu); - gMain.savedCallback = CB2_ReturnToStartMenu; + gMain.savedCallback = CB2_ReturnToFieldWithOpenMenu; return TRUE; } return FALSE; @@ -554,7 +554,7 @@ static bool8 StartMenuLinkPlayerCallback(void) { PlayRainStoppingSoundEffect(); CleanupOverworldWindowsAndTilemaps(); - InitLinkPartnerTrainerCard(gUnknown_300502C, CB2_ReturnToStartMenu); + InitLinkPartnerTrainerCard(gUnknown_300502C, CB2_ReturnToFieldWithOpenMenu); return TRUE; } return FALSE; diff --git a/src/trade.c b/src/trade.c index 537a5503b..4921a1ba3 100644 --- a/src/trade.c +++ b/src/trade.c @@ -4474,7 +4474,7 @@ int GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct a0, str return 0; } -int Trade_CanTradeSelectedMon(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) +int CanRegisterMonForTradingBoard(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) { u8 canTradeEggAndNational = a0.unk_01_0; |