summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiegoisawesome <Diegoisawesome@users.noreply.github.com>2018-01-30 15:41:43 -0600
committerGitHub <noreply@github.com>2018-01-30 15:41:43 -0600
commitb3315b64a1ecefc04f36ed50dd341f1f90d3ba97 (patch)
tree078ba592f084b1593f80bbc0afe33a52cf32aa97
parent232dea1a63929ce10f000ddc18c36c22a72827a4 (diff)
parent231b69451bb4421ab33906040b04d386ed93cf65 (diff)
Merge pull request #187 from golemgalvanize/decompile_item_use
decompile item_use
-rw-r--r--asm/item_use.s2863
-rw-r--r--ld_script.txt2
-rwxr-xr-xsrc/item_use.c1271
3 files changed, 1272 insertions, 2864 deletions
diff --git a/asm/item_use.s b/asm/item_use.s
deleted file mode 100644
index 8c9e854c7..000000000
--- a/asm/item_use.s
+++ /dev/null
@@ -1,2863 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SetUpItemUseCallback
-@ void SetUpItemUseCallback(u8 taskId)
-SetUpItemUseCallback: @ 80FD060
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gSpecialVar_ItemId
- ldrh r0, [r1]
- cmp r0, 0xAF
- bne _080FD084
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldrb r0, [r1, 0x10]
- b _080FD08A
- .pool
-_080FD084:
- ldrh r0, [r1]
- bl ItemId_GetType
-_080FD08A:
- subs r0, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FD0B8
- ldr r0, =gUnknown_0203CE54
- ldr r2, [r0]
- ldr r1, =gUnknown_085920D8
- lsls r0, r4, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [r2]
- adds r0, r5, 0
- bl unknown_ItemMenu_Confirm
- b _080FD0CC
- .pool
-_080FD0B8:
- ldr r0, =gUnknown_0203CF2C
- ldr r2, [r0]
- ldr r1, =gUnknown_085920D8
- lsls r0, r4, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [r2]
- adds r0, r5, 0
- bl sub_81C5B14
-_080FD0CC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end SetUpItemUseCallback
-
- thumb_func_start SetUpItemUseOnFieldCallback
-@ void SetUpItemUseOnFieldCallback()
-SetUpItemUseOnFieldCallback: @ 80FD0DC
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- movs r1, 0xE
- ldrsh r0, [r0, r1]
- cmp r0, 0x1
- beq _080FD110
- ldr r1, =gFieldCallback
- ldr r0, =MapPostLoadHook_UseItem
- str r0, [r1]
- adds r0, r2, 0
- bl SetUpItemUseCallback
- b _080FD11A
- .pool
-_080FD110:
- ldr r0, =gUnknown_0203A0F4
- ldr r1, [r0]
- adds r0, r2, 0
- bl _call_via_r1
-_080FD11A:
- pop {r0}
- bx r0
- .pool
- thumb_func_end SetUpItemUseOnFieldCallback
-
- thumb_func_start MapPostLoadHook_UseItem
-@ void MapPostLoadHook_UseItem()
-MapPostLoadHook_UseItem: @ 80FD124
- push {lr}
- bl pal_fill_black
- ldr r0, =Task_CallItemUseOnFieldCallback
- movs r1, 0x8
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end MapPostLoadHook_UseItem
-
- thumb_func_start Task_CallItemUseOnFieldCallback
-@ void Task_CallItemUseOnFieldCallback(u8 taskId)
-Task_CallItemUseOnFieldCallback: @ 80FD13C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_80ABDFC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FD158
- ldr r0, =gUnknown_0203A0F4
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
-_080FD158:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_CallItemUseOnFieldCallback
-
- thumb_func_start DisplayCannotUseItemMessage
-@ void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField, u8 *str)
-DisplayCannotUseItemMessage: @ 80FD164
- push {r4-r6,lr}
- adds r4, r1, 0
- adds r1, r2, 0
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r4, 24
- lsrs r4, 24
- ldr r6, =gStringVar4
- adds r0, r6, 0
- bl StringExpandPlaceholders
- cmp r4, 0
- bne _080FD1B4
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FD1A0
- ldr r3, =bag_menu_inits_lists_menu
- adds r0, r5, 0
- movs r1, 0x1
- adds r2, r6, 0
- bl DisplayItemMessage
- b _080FD1BE
- .pool
-_080FD1A0:
- ldr r1, =gText_DadsAdvice
- ldr r2, =sub_81C6714
- adds r0, r5, 0
- bl DisplayItemMessageInBattlePyramid
- b _080FD1BE
- .pool
-_080FD1B4:
- ldr r2, =CleanUpAfterFailingToUseRegisteredKeyItemOnField
- adds r0, r5, 0
- adds r1, r6, 0
- bl DisplayItemMessageOnField
-_080FD1BE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DisplayCannotUseItemMessage
-
- thumb_func_start DisplayDadsAdviceCannotUseItemMessage
-@ void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField)
-DisplayDadsAdviceCannotUseItemMessage: @ 80FD1C8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r2, =gText_DadsAdvice
- bl DisplayCannotUseItemMessage
- pop {r0}
- bx r0
- .pool
- thumb_func_end DisplayDadsAdviceCannotUseItemMessage
-
- thumb_func_start DisplayCannotDismountBikeMessage
-@ void DisplayCannotDismountBikeMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField)
-DisplayCannotDismountBikeMessage: @ 80FD1E0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r2, =gText_CantDismountBike
- bl DisplayCannotUseItemMessage
- pop {r0}
- bx r0
- .pool
- thumb_func_end DisplayCannotDismountBikeMessage
-
- thumb_func_start CleanUpAfterFailingToUseRegisteredKeyItemOnField
-@ void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId)
-CleanUpAfterFailingToUseRegisteredKeyItemOnField: @ 80FD1F8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0x1
- bl sub_8197434
- adds r0, r4, 0
- bl DestroyTask
- bl sub_80984F4
- bl ScriptContext2_Disable
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end CleanUpAfterFailingToUseRegisteredKeyItemOnField
-
- thumb_func_start CheckIfItemIsTMHMOrEvolutionStone
-@ u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId)
-CheckIfItemIsTMHMOrEvolutionStone: @ 80FD21C
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl ItemId_GetFieldFunc
- ldr r1, =ItemUseOutOfBattle_TMHM
- cmp r0, r1
- bne _080FD238
- movs r0, 0x1
- b _080FD24E
- .pool
-_080FD238:
- adds r0, r4, 0
- bl ItemId_GetFieldFunc
- ldr r1, =ItemUseOutOfBattle_EvolutionStone
- cmp r0, r1
- beq _080FD24C
- movs r0, 0
- b _080FD24E
- .pool
-_080FD24C:
- movs r0, 0x2
-_080FD24E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end CheckIfItemIsTMHMOrEvolutionStone
-
- thumb_func_start sub_80FD254
-sub_80FD254: @ 80FD254
- push {lr}
- sub sp, 0x24
- mov r1, sp
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- strh r0, [r1, 0x20]
- ldr r1, =bag_menu_mail_related
- mov r0, sp
- movs r2, 0
- bl ReadMail
- add sp, 0x24
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FD254
-
- thumb_func_start ItemUseOutOfBattle_Mail
-@ void ItemUseOutOfBattle_Mail(int taskId)
-ItemUseOutOfBattle_Mail: @ 80FD278
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_0203CE54
- ldr r2, [r1]
- ldr r1, =sub_80FD254
- str r1, [r2]
- bl unknown_ItemMenu_Confirm
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_Mail
-
- thumb_func_start ItemUseOutOfBattle_Bike
-@ void ItemUseOutOfBattle_Bike(int taskId)
-ItemUseOutOfBattle_Bike: @ 80FD298
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r6, r0, r1
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =0x0000088b
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080FD30E
- adds r0, r4, 0
- bl MetatileBehavior_IsVerticalRail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080FD30E
- adds r0, r4, 0
- bl MetatileBehavior_IsHorizontalRail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080FD30E
- adds r0, r4, 0
- bl MetatileBehavior_IsIsolatedVerticalRail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080FD30E
- adds r0, r4, 0
- bl MetatileBehavior_IsIsolatedHorizontalRail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FD320
-_080FD30E:
- ldrb r1, [r6, 0x6]
- adds r0, r5, 0
- bl DisplayCannotDismountBikeMessage
- b _080FD350
- .pool
-_080FD320:
- bl sav1_map_is_biking_allowed
- cmp r0, 0x1
- bne _080FD348
- bl IsBikingDisallowedByPlayer
- lsls r0, 24
- cmp r0, 0
- bne _080FD348
- ldr r1, =gUnknown_0203A0F4
- ldr r0, =ItemUseOnFieldCB_Bike
- str r0, [r1]
- adds r0, r5, 0
- bl SetUpItemUseOnFieldCallback
- b _080FD350
- .pool
-_080FD348:
- ldrb r1, [r6, 0x6]
- adds r0, r5, 0
- bl DisplayDadsAdviceCannotUseItemMessage
-_080FD350:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end ItemUseOutOfBattle_Bike
-
- thumb_func_start ItemUseOnFieldCB_Bike
-ItemUseOnFieldCB_Bike: @ 80FD358
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl ItemId_GetSecondaryId
- lsls r0, 24
- cmp r0, 0
- bne _080FD378
- movs r0, 0x2
- bl GetOnOffBike
- b _080FD37E
- .pool
-_080FD378:
- movs r0, 0x4
- bl GetOnOffBike
-_080FD37E:
- bl sub_80984F4
- bl ScriptContext2_Disable
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ItemUseOnFieldCB_Bike
-
- thumb_func_start CanFish
-@ bool8 CanFish()
-CanFish: @ 80FD394
- push {r4-r6,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, 16
- lsrs r6, r0, 16
- lsls r0, r6, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- bl MetatileBehavior_IsWaterfall
- lsls r0, 24
- cmp r0, 0
- bne _080FD41C
- movs r0, 0x10
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- bne _080FD41C
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- bne _080FD3EC
- bl IsPlayerFacingSurfableFishableWater
- lsls r0, 24
- cmp r0, 0
- beq _080FD41C
-_080FD3E8:
- movs r0, 0x1
- b _080FD41E
-_080FD3EC:
- adds r0, r5, 0
- bl MetatileBehavior_IsSurfableWaterOrUnderwater
- lsls r0, 24
- cmp r0, 0
- beq _080FD40C
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridIsImpassableAt
- lsls r0, 24
- cmp r0, 0
- beq _080FD3E8
-_080FD40C:
- lsls r0, r6, 24
- lsrs r0, 24
- bl MetatileBehavior_8089510
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080FD3E8
-_080FD41C:
- movs r0, 0
-_080FD41E:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end CanFish
-
- thumb_func_start ItemUseOutOfBattle_Rod
-ItemUseOutOfBattle_Rod: @ 80FD428
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl CanFish
- cmp r0, 0x1
- bne _080FD44C
- ldr r1, =gUnknown_0203A0F4
- ldr r0, =ItemUseOnFieldCB_Rod
- str r0, [r1]
- adds r0, r4, 0
- bl SetUpItemUseOnFieldCallback
- b _080FD45E
- .pool
-_080FD44C:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrb r1, [r1, 0xE]
- adds r0, r4, 0
- bl DisplayDadsAdviceCannotUseItemMessage
-_080FD45E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_Rod
-
- thumb_func_start ItemUseOnFieldCB_Rod
-ItemUseOnFieldCB_Rod: @ 80FD468
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl ItemId_GetSecondaryId
- lsls r0, 24
- lsrs r0, 24
- bl StartFishing
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOnFieldCB_Rod
-
- thumb_func_start ItemUseOutOfBattle_Itemfinder
-ItemUseOutOfBattle_Itemfinder: @ 80FD490
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x27
- bl IncrementGameStat
- ldr r1, =gUnknown_0203A0F4
- ldr r0, =ItemUseOnFieldCB_Itemfinder
- str r0, [r1]
- adds r0, r4, 0
- bl SetUpItemUseOnFieldCallback
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_Itemfinder
-
- thumb_func_start ItemUseOnFieldCB_Itemfinder
-ItemUseOnFieldCB_Itemfinder: @ 80FD4B8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gMapHeader
- ldr r0, [r0, 0x4]
- adds r1, r4, 0
- bl ItemfinderCheckForHiddenItems
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FD4EC
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_80FD504
- str r0, [r1]
- b _080FD4F6
- .pool
-_080FD4EC:
- ldr r1, =gText_ItemFinderNothing
- ldr r2, =sub_80FD5CC
- adds r0, r4, 0
- bl DisplayItemMessageOnField
-_080FD4F6:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOnFieldCB_Itemfinder
-
- thumb_func_start sub_80FD504
-sub_80FD504: @ 80FD504
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r6, r5, 2
- adds r0, r6, r5
- lsls r7, r0, 3
- ldr r0, =gTasks + 0x8
- mov r8, r0
- adds r4, r7, r0
- movs r1, 0x6
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080FD5B8
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- cmp r0, 0x4
- bne _080FD5AC
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- bl sub_80FD9B0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080FD564
- ldr r1, =gUnknown_085920E4
- subs r0, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80FDA24
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, =sub_80FDA94
- str r1, [r0]
- b _080FD5C2
- .pool
-_080FD564:
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- adds r3, r6, 0
- ldr r7, =gUnknown_085920E4
- movs r6, 0x3
-_080FD574:
- adds r0, r1, r7
- adds r1, 0x1
- ldrb r0, [r0]
- cmp r2, r0
- bne _080FD584
- adds r0, r1, 0
- ands r0, r6
- strh r0, [r4, 0xA]
-_080FD584:
- lsls r0, r1, 24
- lsrs r1, r0, 24
- cmp r1, 0x3
- bls _080FD574
- ldr r1, =gTasks
- adds r0, r3, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_80FDADC
- str r1, [r0]
- movs r0, 0
- strh r0, [r4, 0x6]
- strh r0, [r4, 0x4]
- b _080FD5C2
- .pool
-_080FD5AC:
- movs r0, 0x48
- bl PlaySE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080FD5B8:
- ldrh r0, [r4, 0x6]
- adds r0, 0x1
- movs r1, 0x1F
- ands r0, r1
- strh r0, [r4, 0x6]
-_080FD5C2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80FD504
-
- thumb_func_start sub_80FD5CC
-sub_80FD5CC: @ 80FD5CC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0x1
- bl sub_8197434
- bl sub_80984F4
- bl ScriptContext2_Disable
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80FD5CC
-
- thumb_func_start ItemfinderCheckForHiddenItems
-@ bool8 ItemfinderCheckForHiddenItems(struct map_events *events, u8 taskId)
-ItemfinderCheckForHiddenItems: @ 80FD5F0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0xC]
- movs r3, 0
- mov r9, r4
- ldrb r0, [r5, 0x3]
- cmp r3, r0
- bge _080FD6A4
- subs r1, 0x5
- mov r8, r1
-_080FD628:
- lsls r3, 16
- asrs r1, r3, 16
- ldr r2, [r5, 0x10]
- lsls r0, r1, 1
- adds r0, r1
- lsls r4, r0, 2
- adds r1, r4, r2
- ldrb r0, [r1, 0x5]
- adds r7, r3, 0
- cmp r0, 0x7
- bne _080FD694
- movs r2, 0xFA
- lsls r2, 1
- adds r0, r2, 0
- ldrh r1, [r1, 0xA]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080FD694
- ldr r1, [r5, 0x10]
- adds r1, r4, r1
- ldrh r2, [r1]
- adds r2, 0x7
- mov r0, sp
- ldrh r0, [r0]
- subs r2, r0
- ldrh r0, [r1, 0x2]
- adds r0, 0x7
- mov r3, r9
- ldrh r1, [r3]
- subs r0, r1
- lsls r0, 16
- lsrs r0, 16
- lsls r2, 16
- asrs r1, r2, 16
- movs r3, 0xE0
- lsls r3, 11
- adds r2, r3
- lsrs r2, 16
- cmp r2, 0xE
- bhi _080FD694
- lsls r0, 16
- asrs r2, r0, 16
- cmp r2, r8
- blt _080FD694
- cmp r2, 0x5
- bgt _080FD694
- adds r0, r6, 0
- bl sub_80FD8E0
-_080FD694:
- movs r1, 0x80
- lsls r1, 9
- adds r0, r7, r1
- lsrs r3, r0, 16
- asrs r0, 16
- ldrb r2, [r5, 0x3]
- cmp r0, r2
- blt _080FD628
-_080FD6A4:
- adds r0, r6, 0
- bl sub_80FD7C8
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- movs r3, 0xC
- ldrsh r0, [r1, r3]
- cmp r0, 0x1
- beq _080FD6C4
- movs r0, 0
- b _080FD6C6
- .pool
-_080FD6C4:
- movs r0, 0x1
-_080FD6C6:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end ItemfinderCheckForHiddenItems
-
- thumb_func_start sub_80FD6D4
-sub_80FD6D4: @ 80FD6D4
- push {r4-r6,lr}
- lsls r1, 16
- lsrs r3, r1, 16
- lsls r2, 16
- lsrs r4, r2, 16
- ldrb r2, [r0, 0x3]
- ldr r5, [r0, 0x10]
- movs r1, 0
- cmp r1, r2
- bge _080FD728
- lsls r0, r3, 16
- asrs r6, r0, 16
- lsls r0, r4, 16
- asrs r4, r0, 16
- adds r3, r5, 0
-_080FD6F2:
- ldrb r0, [r3, 0x5]
- cmp r0, 0x7
- bne _080FD720
- ldrh r0, [r3]
- cmp r6, r0
- bne _080FD720
- ldrh r0, [r3, 0x2]
- cmp r4, r0
- bne _080FD720
- movs r1, 0xFA
- lsls r1, 1
- adds r0, r1, 0
- ldrh r3, [r3, 0xA]
- adds r0, r3
- lsls r0, 16
- lsrs r0, 16
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080FD728
- movs r0, 0x1
- b _080FD72A
-_080FD720:
- adds r3, 0xC
- adds r1, 0x1
- cmp r1, r2
- blt _080FD6F2
-_080FD728:
- movs r0, 0
-_080FD72A:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80FD6D4
-
- thumb_func_start sub_80FD730
-sub_80FD730: @ 80FD730
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- bl mapconnection_get_mapheader
- adds r3, r0, 0
- ldrb r0, [r4]
- cmp r0, 0x2
- beq _080FD758
- cmp r0, 0x2
- bgt _080FD74E
- cmp r0, 0x1
- beq _080FD76C
- b _080FD7AC
-_080FD74E:
- cmp r0, 0x3
- beq _080FD784
- cmp r0, 0x4
- beq _080FD78E
- b _080FD7AC
-_080FD758:
- ldr r0, [r4, 0x4]
- adds r0, 0x7
- subs r0, r5, r0
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, [r3]
- ldr r0, [r0, 0x4]
- subs r0, 0x7
- adds r0, r6
- b _080FD7A2
-_080FD76C:
- ldr r0, [r4, 0x4]
- adds r0, 0x7
- subs r0, r5, r0
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, =gMapHeader
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- b _080FD79E
- .pool
-_080FD784:
- ldr r0, [r3]
- ldr r0, [r0]
- subs r0, 0x7
- adds r0, r5
- b _080FD798
-_080FD78E:
- ldr r0, =gMapHeader
- ldr r0, [r0]
- ldr r0, [r0]
- adds r0, 0x7
- subs r0, r5, r0
-_080FD798:
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, [r4, 0x4]
-_080FD79E:
- adds r0, 0x7
- subs r0, r6, r0
-_080FD7A2:
- lsls r0, 16
- lsrs r2, r0, 16
- b _080FD7B0
- .pool
-_080FD7AC:
- movs r0, 0
- b _080FD7C2
-_080FD7B0:
- ldr r0, [r3, 0x4]
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- bl sub_80FD6D4
- lsls r0, 24
- lsrs r0, 24
-_080FD7C2:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80FD730
-
- thumb_func_start sub_80FD7C8
-sub_80FD7C8: @ 80FD7C8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- ldr r0, =gMapHeader
- ldr r1, [r0]
- ldr r0, [r1]
- adds r0, 0x7
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x8]
- ldr r0, [r1, 0x4]
- adds r0, 0x7
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r0, sp
- ldrh r0, [r0]
- subs r0, 0x7
- lsls r0, 16
- lsrs r3, r0, 16
- asrs r0, 16
- mov r1, sp
- movs r2, 0
- ldrsh r1, [r1, r2]
- adds r1, 0x7
- cmp r0, r1
- bgt _080FD8CC
-_080FD816:
- mov r5, sp
- ldrh r0, [r5, 0x2]
- subs r0, 0x5
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r2, r4, 16
- asrs r1, r2, 16
- movs r6, 0x2
- ldrsh r0, [r5, r6]
- adds r0, 0x5
- lsls r3, 16
- mov r8, r3
- cmp r1, r0
- bgt _080FD8B6
- movs r0, 0x7
- str r0, [sp, 0x10]
- mov r1, r8
- asrs r1, 16
- mov r9, r1
- mov r10, r0
-_080FD83E:
- ldr r3, [sp, 0x10]
- cmp r3, r9
- bgt _080FD860
- ldr r5, [sp, 0x8]
- lsls r0, r5, 16
- asrs r0, 16
- cmp r9, r0
- bge _080FD860
- asrs r1, r2, 16
- cmp r10, r1
- bgt _080FD860
- ldr r6, [sp, 0xC]
- lsls r0, r6, 16
- asrs r0, 16
- lsls r7, r4, 16
- cmp r1, r0
- blt _080FD89E
-_080FD860:
- mov r0, r8
- asrs r5, r0, 16
- lsls r4, 16
- asrs r6, r4, 16
- adds r0, r5, 0
- adds r1, r6, 0
- bl sub_8088A8C
- adds r7, r4, 0
- cmp r0, 0
- beq _080FD89E
- adds r1, r5, 0
- adds r2, r6, 0
- bl sub_80FD730
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FD89E
- mov r0, sp
- ldrh r1, [r0]
- subs r1, r5, r1
- lsls r1, 16
- asrs r1, 16
- ldrh r2, [r0, 0x2]
- subs r2, r6, r2
- lsls r2, 16
- asrs r2, 16
- ldr r0, [sp, 0x4]
- bl sub_80FD8E0
-_080FD89E:
- movs r1, 0x80
- lsls r1, 9
- adds r0, r7, r1
- lsrs r4, r0, 16
- lsls r2, r4, 16
- asrs r1, r2, 16
- mov r3, sp
- movs r5, 0x2
- ldrsh r0, [r3, r5]
- adds r0, 0x5
- cmp r1, r0
- ble _080FD83E
-_080FD8B6:
- movs r1, 0x80
- lsls r1, 9
- add r1, r8
- lsrs r3, r1, 16
- asrs r1, 16
- mov r0, sp
- movs r6, 0
- ldrsh r0, [r0, r6]
- adds r0, 0x7
- cmp r1, r0
- ble _080FD816
-_080FD8CC:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FD7C8
-
- thumb_func_start sub_80FD8E0
-sub_80FD8E0: @ 80FD8E0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 16
- lsrs r2, 16
- mov r12, r2
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r3, r1, r0
- movs r1, 0x4
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bne _080FD918
- strh r7, [r3]
- mov r0, r12
- strh r0, [r3, 0x2]
- movs r0, 0x1
- strh r0, [r3, 0x4]
- b _080FD9A2
- .pool
-_080FD918:
- movs r1, 0
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bge _080FD928
- negs r0, r0
- lsls r0, 16
- lsrs r4, r0, 16
- b _080FD92A
-_080FD928:
- ldrh r4, [r3]
-_080FD92A:
- movs r1, 0x2
- ldrsh r0, [r3, r1]
- ldrh r1, [r3, 0x2]
- mov r9, r1
- cmp r0, 0
- bge _080FD93E
- negs r0, r0
- lsls r0, 16
- lsrs r2, r0, 16
- b _080FD940
-_080FD93E:
- ldrh r2, [r3, 0x2]
-_080FD940:
- lsls r1, r7, 16
- asrs r0, r1, 16
- cmp r0, 0
- bge _080FD950
- negs r0, r0
- lsls r0, 16
- lsrs r6, r0, 16
- b _080FD952
-_080FD950:
- lsrs r6, r1, 16
-_080FD952:
- mov r1, r12
- lsls r0, r1, 16
- asrs r1, r0, 16
- mov r8, r0
- cmp r1, 0
- bge _080FD964
- negs r0, r1
- lsls r0, 16
- b _080FD966
-_080FD964:
- mov r0, r8
-_080FD966:
- lsrs r5, r0, 16
- lsls r0, r4, 16
- asrs r0, 16
- lsls r1, r2, 16
- asrs r2, r1, 16
- adds r4, r0, r2
- lsls r0, r6, 16
- asrs r0, 16
- lsls r1, r5, 16
- asrs r1, 16
- adds r0, r1
- cmp r4, r0
- ble _080FD988
- strh r7, [r3]
- mov r1, r12
- strh r1, [r3, 0x2]
- b _080FD9A2
-_080FD988:
- cmp r4, r0
- bne _080FD9A2
- cmp r2, r1
- bgt _080FD99C
- cmp r2, r1
- bne _080FD9A2
- mov r1, r9
- lsls r0, r1, 16
- cmp r0, r8
- bge _080FD9A2
-_080FD99C:
- strh r7, [r3]
- mov r0, r12
- strh r0, [r3, 0x2]
-_080FD9A2:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80FD8E0
-
- thumb_func_start sub_80FD9B0
-sub_80FD9B0: @ 80FD9B0
- push {r4,r5,lr}
- lsls r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsrs r2, r0, 16
- cmp r0, 0
- bne _080FD9C2
- cmp r1, 0
- beq _080FDA1C
-_080FD9C2:
- lsls r0, r2, 16
- asrs r2, r0, 16
- adds r5, r0, 0
- cmp r2, 0
- bge _080FD9D4
- negs r0, r2
- lsls r0, 16
- lsrs r4, r0, 16
- b _080FD9D6
-_080FD9D4:
- lsrs r4, r5, 16
-_080FD9D6:
- lsls r0, r1, 16
- asrs r2, r0, 16
- adds r1, r0, 0
- cmp r2, 0
- bge _080FD9E8
- negs r0, r2
- lsls r0, 16
- lsrs r3, r0, 16
- b _080FD9EA
-_080FD9E8:
- lsrs r3, r1, 16
-_080FD9EA:
- lsls r0, r4, 16
- asrs r2, r0, 16
- lsls r0, r3, 16
- asrs r0, 16
- cmp r2, r0
- ble _080FDA02
- cmp r5, 0
- bge _080FD9FE
- movs r0, 0x4
- b _080FDA1E
-_080FD9FE:
- movs r0, 0x2
- b _080FDA1E
-_080FDA02:
- cmp r2, r0
- bge _080FDA0C
- cmp r1, 0
- blt _080FDA14
- b _080FDA18
-_080FDA0C:
- cmp r2, r0
- bne _080FDA1C
- cmp r1, 0
- bge _080FDA18
-_080FDA14:
- movs r0, 0x1
- b _080FDA1E
-_080FDA18:
- movs r0, 0x3
- b _080FDA1E
-_080FDA1C:
- movs r0, 0
-_080FDA1E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80FD9B0
-
- thumb_func_start sub_80FDA24
-sub_80FDA24: @ 80FDA24
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- bl GetFieldObjectIdByLocalIdAndMap
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r4, =gMapObjects
- adds r0, r4
- bl FieldObjectClearAnimIfSpecialAnimFinished
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- bl GetFieldObjectIdByLocalIdAndMap
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl FieldObjectClearAnim
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- bl GetFieldObjectIdByLocalIdAndMap
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl npc_sync_anim_pause_bits
- adds r0, r5, 0
- bl PlayerTurnInPlace
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDA24
-
- thumb_func_start sub_80FDA94
-sub_80FDA94: @ 80FDA94
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- bl GetFieldObjectIdByLocalIdAndMap
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FDACA
- ldr r1, =gText_ItemFinderNearby
- ldr r2, =sub_80FD5CC
- adds r0, r4, 0
- bl DisplayItemMessageOnField
-_080FDACA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDA94
-
- thumb_func_start sub_80FDADC
-sub_80FDADC: @ 80FDADC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- bl GetFieldObjectIdByLocalIdAndMap
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080FDB1C
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080FDB50
-_080FDB1C:
- ldr r1, =gUnknown_085920E4
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80FDA24
- movs r0, 0x1
- strh r0, [r4, 0x4]
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0x6]
- adds r0, 0x1
- strh r0, [r4, 0x6]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _080FDB50
- ldr r1, =gText_ItemFinderOnTop
- ldr r2, =sub_80FD5CC
- adds r0, r5, 0
- bl DisplayItemMessageOnField
-_080FDB50:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDADC
-
- thumb_func_start ItemUseOutOfBattle_PokeblockCase
-ItemUseOutOfBattle_PokeblockCase: @ 80FDB6C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_81221AC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FDB98
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrb r1, [r1, 0xE]
- adds r0, r4, 0
- bl DisplayDadsAdviceCannotUseItemMessage
- b _080FDBDA
- .pool
-_080FDB98:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r5, r1, r0
- movs r1, 0xE
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _080FDBC8
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- ldr r0, =sub_80FDBEC
- str r0, [r1]
- adds r0, r4, 0
- bl unknown_ItemMenu_Confirm
- b _080FDBDA
- .pool
-_080FDBC8:
- ldr r0, =gFieldCallback
- ldr r1, =sub_80AF6D4
- str r1, [r0]
- movs r0, 0x1
- movs r1, 0
- bl FadeScreen
- ldr r0, =sub_80FDC00
- str r0, [r5]
-_080FDBDA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_PokeblockCase
-
- thumb_func_start sub_80FDBEC
-sub_80FDBEC: @ 80FDBEC
- push {lr}
- ldr r1, =bag_menu_mail_related
- movs r0, 0
- bl OpenPokeblockCase
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDBEC
-
- thumb_func_start sub_80FDC00
-sub_80FDC00: @ 80FDC00
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080FDC24
- bl overworld_free_bg_tilemaps
- ldr r1, =c2_exit_to_overworld_2_switch
- movs r0, 0
- bl OpenPokeblockCase
- adds r0, r4, 0
- bl DestroyTask
-_080FDC24:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDC00
-
- thumb_func_start ItemUseOutOfBattle_CoinCase
-ItemUseOutOfBattle_CoinCase: @ 80FDC34
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gStringVar1
- bl GetCoins
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_CoinCase
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0xE
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080FDC90
- ldr r3, =bag_menu_inits_lists_menu
- adds r0, r5, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl DisplayItemMessage
- b _080FDC9A
- .pool
-_080FDC90:
- ldr r2, =CleanUpAfterFailingToUseRegisteredKeyItemOnField
- adds r0, r5, 0
- adds r1, r4, 0
- bl DisplayItemMessageOnField
-_080FDC9A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_CoinCase
-
- thumb_func_start ItemUseOutOfBattle_PowderJar
-ItemUseOutOfBattle_PowderJar: @ 80FDCA4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gStringVar1
- bl sub_80247BC
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x5
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_PowderQty
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0xE
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080FDCFC
- ldr r3, =bag_menu_inits_lists_menu
- adds r0, r5, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl DisplayItemMessage
- b _080FDD06
- .pool
-_080FDCFC:
- ldr r2, =CleanUpAfterFailingToUseRegisteredKeyItemOnField
- adds r0, r5, 0
- adds r1, r4, 0
- bl DisplayItemMessageOnField
-_080FDD06:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_PowderJar
-
- thumb_func_start sub_80FDD10
-sub_80FDD10: @ 80FDD10
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsPlayerFacingPlantedBerryTree
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FDD58
- ldr r1, =gUnknown_0203A0F4
- ldr r0, =sub_80FDD74
- str r0, [r1]
- ldr r1, =gFieldCallback
- ldr r0, =MapPostLoadHook_UseItem
- str r0, [r1]
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
- str r0, [r1]
- adds r0, r4, 0
- bl unknown_ItemMenu_Confirm
- b _080FDD68
- .pool
-_080FDD58:
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl ItemId_GetFieldFunc
- adds r1, r0, 0
- adds r0, r4, 0
- bl _call_via_r1
-_080FDD68:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDD10
-
- thumb_func_start sub_80FDD74
-sub_80FDD74: @ 80FDD74
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- movs r1, 0x1
- bl RemoveBagItem
- bl ScriptContext2_Enable
- ldr r0, =Route102_EventScript_274482
- bl ScriptContext1_SetupScript
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDD74
-
- thumb_func_start ItemUseOutOfBattle_WailmerPail
-ItemUseOutOfBattle_WailmerPail: @ 80FDDA4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl sub_80FDE2C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FDDC8
- ldr r1, =gUnknown_0203A0F4
- ldr r0, =sub_80FDE7C
- b _080FDDD8
- .pool
-_080FDDC8:
- bl TryToWaterBerryTree
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FDDEC
- ldr r1, =gUnknown_0203A0F4
- ldr r0, =sub_80FDE08
-_080FDDD8:
- str r0, [r1]
- adds r0, r4, 0
- bl SetUpItemUseOnFieldCallback
- b _080FDDFE
- .pool
-_080FDDEC:
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldrb r1, [r1, 0xE]
- adds r0, r5, 0
- bl DisplayDadsAdviceCannotUseItemMessage
-_080FDDFE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_WailmerPail
-
- thumb_func_start sub_80FDE08
-sub_80FDE08: @ 80FDE08
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl ScriptContext2_Enable
- ldr r0, =Route102_EventScript_2744C0
- bl ScriptContext1_SetupScript
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDE08
-
- thumb_func_start sub_80FDE2C
-sub_80FDE2C: @ 80FDE2C
- push {r4,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- bl PlayerGetZCoord
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- mov r0, sp
- ldrh r0, [r0]
- ldrh r1, [r4]
- bl GetFieldObjectIdByXYZ
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x10
- beq _080FDE68
- ldr r0, =gMapObjects
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x5]
- cmp r0, 0xE4
- beq _080FDE70
-_080FDE68:
- movs r0, 0
- b _080FDE72
- .pool
-_080FDE70:
- movs r0, 0x1
-_080FDE72:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80FDE2C
-
- thumb_func_start sub_80FDE7C
-sub_80FDE7C: @ 80FDE7C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl ScriptContext2_Enable
- ldr r0, =BattleFrontier_OutsideEast_EventScript_242CFC
- bl ScriptContext1_SetupScript
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDE7C
-
- thumb_func_start ItemUseOutOfBattle_Medicine
-ItemUseOutOfBattle_Medicine: @ 80FDEA0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =ItemUseCB_Medicine
- str r1, [r2]
- bl SetUpItemUseCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_Medicine
-
- thumb_func_start ItemUseOutOfBattle_ReduceEV
-ItemUseOutOfBattle_ReduceEV: @ 80FDEBC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =sub_81B67C8
- str r1, [r2]
- bl SetUpItemUseCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_ReduceEV
-
- thumb_func_start ItemUseOutOfBattle_SacredAsh
-ItemUseOutOfBattle_SacredAsh: @ 80FDED8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =sub_81B79E8
- str r1, [r2]
- bl SetUpItemUseCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_SacredAsh
-
- thumb_func_start ItemUseOutOfBattle_PPRecovery
-ItemUseOutOfBattle_PPRecovery: @ 80FDEF4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =dp05_ether
- str r1, [r2]
- bl SetUpItemUseCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_PPRecovery
-
- thumb_func_start ItemUseOutOfBattle_PPUp
-ItemUseOutOfBattle_PPUp: @ 80FDF10
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =dp05_pp_up
- str r1, [r2]
- bl SetUpItemUseCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_PPUp
-
- thumb_func_start ItemUseOutOfBattle_RareCandy
-ItemUseOutOfBattle_RareCandy: @ 80FDF2C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =dp05_rare_candy
- str r1, [r2]
- bl SetUpItemUseCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_RareCandy
-
- thumb_func_start ItemUseOutOfBattle_TMHM
-ItemUseOutOfBattle_TMHM: @ 80FDF48
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gSpecialVar_ItemId
- ldrh r1, [r0]
- movs r0, 0xA9
- lsls r0, 1
- cmp r1, r0
- bls _080FDF74
- ldr r2, =gText_BootedUpHM
- ldr r3, =sub_80FDF90
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _080FDF80
- .pool
-_080FDF74:
- ldr r2, =gText_BootedUpTM
- ldr r3, =sub_80FDF90
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayItemMessage
-_080FDF80:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_TMHM
-
- thumb_func_start sub_80FDF90
-sub_80FDF90: @ 80FDF90
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x2
- bl PlaySE
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task08_0809AD8C
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FDF90
-
- thumb_func_start task08_0809AD8C
-task08_0809AD8C: @ 80FDFBC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _080FE000
- ldr r4, =gStringVar1
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl ItemIdToBattleMoveId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xD
- muls r1, r0
- ldr r0, =gMoveNames
- adds r1, r0
- adds r0, r4, 0
- bl StringCopy
- ldr r4, =gStringVar4
- ldr r1, =gText_TMHMContainedVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r3, =sub_80FE024
- adds r0, r5, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl DisplayItemMessage
-_080FE000:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task08_0809AD8C
-
- thumb_func_start sub_80FE024
-sub_80FE024: @ 80FE024
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_085920E8
- movs r1, 0x6
- bl bag_menu_yes_no
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FE024
-
- thumb_func_start sub_80FE03C
-sub_80FE03C: @ 80FE03C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =sub_81B6DC4
- str r1, [r2]
- bl SetUpItemUseCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FE03C
-
- thumb_func_start sub_80FE058
-sub_80FE058: @ 80FE058
- push {r4,lr}
- ldr r4, =gSpecialVar_ItemId
- ldrh r0, [r4]
- movs r1, 0x1
- bl RemoveBagItem
- ldrh r0, [r4]
- ldr r1, =gStringVar2
- bl CopyItemName
- ldr r0, =gStringVar4
- ldr r1, =gText_PlayerUsedVar2
- bl StringExpandPlaceholders
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE0AC
- ldrh r0, [r4]
- bl ItemId_GetPocket
- lsls r0, 24
- lsrs r0, 24
- bl sub_81AB9A8
- ldrh r0, [r4]
- bl ItemId_GetPocket
- lsls r0, 24
- lsrs r0, 24
- bl sub_81ABA88
- b _080FE0B4
- .pool
-_080FE0AC:
- bl sub_81C5924
- bl sub_81C59BC
-_080FE0B4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80FE058
-
- thumb_func_start ItemUseOutOfBattle_Repel
-ItemUseOutOfBattle_Repel: @ 80FE0BC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, =0x00004021
- bl VarGet
- lsls r0, 16
- cmp r0, 0
- bne _080FE0EC
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_80FE124
- str r0, [r1]
- b _080FE116
- .pool
-_080FE0EC:
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE10C
- ldr r2, =gText_RepelEffectsLingered
- ldr r3, =bag_menu_inits_lists_menu
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _080FE116
- .pool
-_080FE10C:
- ldr r1, =gText_RepelEffectsLingered
- ldr r2, =sub_81C6714
- adds r0, r5, 0
- bl DisplayItemMessageInBattlePyramid
-_080FE116:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_Repel
-
- thumb_func_start sub_80FE124
-sub_80FE124: @ 80FE124
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r4, r1, 3
- ldr r5, =gTasks + 0x8
- adds r1, r4, r5
- ldrh r0, [r1, 0x10]
- adds r0, 0x1
- strh r0, [r1, 0x10]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080FE156
- movs r0, 0
- strh r0, [r1, 0x10]
- movs r0, 0x2F
- bl PlaySE
- adds r0, r5, 0
- subs r0, 0x8
- adds r0, r4, r0
- ldr r1, =sub_80FE164
- str r1, [r0]
-_080FE156:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FE124
-
- thumb_func_start sub_80FE164
-sub_80FE164: @ 80FE164
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080FE1C2
- ldr r4, =0x00004021
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl ItemId_GetHoldEffectParam
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl VarSet
- bl sub_80FE058
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE1B8
- ldr r2, =gStringVar4
- ldr r3, =bag_menu_inits_lists_menu
- adds r0, r5, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _080FE1C2
- .pool
-_080FE1B8:
- ldr r1, =gStringVar4
- ldr r2, =sub_81C6714
- adds r0, r6, 0
- bl DisplayItemMessageInBattlePyramid
-_080FE1C2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FE164
-
- thumb_func_start sub_80FE1D0
-sub_80FE1D0: @ 80FE1D0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- strh r0, [r1, 0x18]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080FE226
- movs r0, 0x75
- bl PlaySE
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE21C
- ldr r2, =gStringVar4
- ldr r3, =bag_menu_inits_lists_menu
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _080FE226
- .pool
-_080FE21C:
- ldr r1, =gStringVar4
- ldr r2, =sub_81C6714
- adds r0, r5, 0
- bl DisplayItemMessageInBattlePyramid
-_080FE226:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FE1D0
-
- thumb_func_start ItemUseOutOfBattle_BlackWhiteFlute
-ItemUseOutOfBattle_BlackWhiteFlute: @ 80FE234
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gSpecialVar_ItemId
- ldrh r0, [r4]
- ldr r1, =gStringVar2
- bl CopyItemName
- ldrh r0, [r4]
- cmp r0, 0x2B
- bne _080FE278
- ldr r0, =0x000008ad
- bl FlagSet
- ldr r0, =0x000008ae
- bl FlagClear
- ldr r0, =gStringVar4
- ldr r1, =gText_UsedVar2WildLured
- bl StringExpandPlaceholders
- b _080FE28C
- .pool
-_080FE278:
- ldr r0, =0x000008ae
- bl FlagSet
- ldr r0, =0x000008ad
- bl FlagClear
- ldr r0, =gStringVar4
- ldr r1, =gText_UsedVar2WildRepelled
- bl StringExpandPlaceholders
-_080FE28C:
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x18]
- ldr r1, =sub_80FE1D0
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_BlackWhiteFlute
-
- thumb_func_start task08_080A1C44
-task08_080A1C44: @ 80FE2BC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl player_avatar_init_params_reset
- bl sub_80B7CC8
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end task08_080A1C44
-
- thumb_func_start re_escape_rope
-re_escape_rope: @ 80FE2D8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl flagmods_08054D70
- bl sub_80FE058
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x8]
- ldr r1, =gStringVar4
- ldr r2, =task08_080A1C44
- adds r0, r4, 0
- bl DisplayItemMessageOnField
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end re_escape_rope
-
- thumb_func_start sub_80FE314
-sub_80FE314: @ 80FE314
- push {lr}
- ldr r0, =gMapHeader
- ldrb r1, [r0, 0x1A]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080FE32C
- movs r0, 0
- b _080FE32E
- .pool
-_080FE32C:
- movs r0, 0x1
-_080FE32E:
- pop {r1}
- bx r1
- thumb_func_end sub_80FE314
-
- thumb_func_start ItemUseOutOfBattle_EscapeRope
-ItemUseOutOfBattle_EscapeRope: @ 80FE334
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_80FE314
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FE35C
- ldr r1, =gUnknown_0203A0F4
- ldr r0, =re_escape_rope
- str r0, [r1]
- adds r0, r4, 0
- bl SetUpItemUseOnFieldCallback
- b _080FE36E
- .pool
-_080FE35C:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrb r1, [r1, 0xE]
- adds r0, r4, 0
- bl DisplayDadsAdviceCannotUseItemMessage
-_080FE36E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_EscapeRope
-
- thumb_func_start ItemUseOutOfBattle_EvolutionStone
-ItemUseOutOfBattle_EvolutionStone: @ 80FE378
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =sub_81B7C74
- str r1, [r2]
- bl SetUpItemUseCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_EvolutionStone
-
- thumb_func_start ItemUseInBattle_PokeBall
-ItemUseInBattle_PokeBall: @ 80FE394
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl IsPlayerPartyAndPokemonStorageFull
- lsls r0, 24
- cmp r0, 0
- bne _080FE3D0
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- movs r1, 0x1
- bl RemoveBagItem
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE3C8
- adds r0, r4, 0
- bl unknown_ItemMenu_Confirm
- b _080FE3FA
- .pool
-_080FE3C8:
- adds r0, r4, 0
- bl sub_81C5B14
- b _080FE3FA
-_080FE3D0:
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE3F0
- ldr r2, =gText_BoxFull
- ldr r3, =bag_menu_inits_lists_menu
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _080FE3FA
- .pool
-_080FE3F0:
- ldr r1, =gText_BoxFull
- ldr r2, =sub_81C6714
- adds r0, r5, 0
- bl DisplayItemMessageInBattlePyramid
-_080FE3FA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseInBattle_PokeBall
-
- thumb_func_start sub_80FE408
-sub_80FE408: @ 80FE408
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _080FE43A
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE434
- adds r0, r4, 0
- bl unknown_ItemMenu_Confirm
- b _080FE43A
- .pool
-_080FE434:
- adds r0, r5, 0
- bl sub_81C5B14
-_080FE43A:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80FE408
-
- thumb_func_start sub_80FE440
-sub_80FE440: @ 80FE440
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- strh r0, [r1, 0x18]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080FE4AC
- movs r0, 0x1
- bl PlaySE
- ldr r4, =gSpecialVar_ItemId
- ldrh r0, [r4]
- movs r1, 0x1
- bl RemoveBagItem
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE49C
- ldrh r0, [r4]
- bl sub_806CF78
- adds r2, r0, 0
- ldr r3, =sub_80FE408
- adds r0, r5, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _080FE4AC
- .pool
-_080FE49C:
- ldrh r0, [r4]
- bl sub_806CF78
- adds r1, r0, 0
- ldr r2, =sub_80FE408
- adds r0, r6, 0
- bl DisplayItemMessageInBattlePyramid
-_080FE4AC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FE440
-
- thumb_func_start ItemUseInBattle_StatIncrease
-ItemUseInBattle_StatIncrease: @ 80FE4B8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, =gBattlePartyID
- ldr r0, =gBankInMenu
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gSpecialVar_ItemId
- ldrh r1, [r1]
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0
- bl ExecuteTableBasedItemEffect_
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _080FE52C
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE518
- ldr r2, =gText_WontHaveEffect
- ldr r3, =bag_menu_inits_lists_menu
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _080FE53C
- .pool
-_080FE518:
- ldr r1, =gText_WontHaveEffect
- ldr r2, =sub_81C6714
- adds r0, r4, 0
- bl DisplayItemMessageInBattlePyramid
- b _080FE53C
- .pool
-_080FE52C:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_80FE440
- str r0, [r1]
- strh r2, [r1, 0x18]
-_080FE53C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseInBattle_StatIncrease
-
- thumb_func_start sub_80FE54C
-sub_80FE54C: @ 80FE54C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE574
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- ldr r0, =sub_81B89F0
- str r0, [r1]
- adds r0, r4, 0
- bl unknown_ItemMenu_Confirm
- b _080FE582
- .pool
-_080FE574:
- ldr r0, =gUnknown_0203CF2C
- ldr r1, [r0]
- ldr r0, =sub_81B89F0
- str r0, [r1]
- adds r0, r4, 0
- bl sub_81C5B14
-_080FE582:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FE54C
-
- thumb_func_start ItemUseInBattle_Medicine
-ItemUseInBattle_Medicine: @ 80FE590
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =ItemUseCB_Medicine
- str r1, [r2]
- bl sub_80FE54C
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseInBattle_Medicine
-
- thumb_func_start sub_80FE5AC
-sub_80FE5AC: @ 80FE5AC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =sub_81B79E8
- str r1, [r2]
- bl sub_80FE54C
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FE5AC
-
- thumb_func_start ItemUseInBattle_PPRecovery
-ItemUseInBattle_PPRecovery: @ 80FE5C8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_03006328
- ldr r1, =dp05_ether
- str r1, [r2]
- bl sub_80FE54C
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseInBattle_PPRecovery
-
- thumb_func_start ItemUseInBattle_Escape
-ItemUseInBattle_Escape: @ 80FE5E4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- bne _080FE634
- bl sub_80FE058
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080FE620
- ldr r2, =gStringVar4
- ldr r3, =unknown_ItemMenu_Confirm
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _080FE646
- .pool
-_080FE620:
- ldr r1, =gStringVar4
- ldr r2, =sub_81C5B14
- adds r0, r4, 0
- bl DisplayItemMessageInBattlePyramid
- b _080FE646
- .pool
-_080FE634:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrb r1, [r1, 0xE]
- adds r0, r4, 0
- bl DisplayDadsAdviceCannotUseItemMessage
-_080FE646:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseInBattle_Escape
-
- thumb_func_start ItemUseOutOfBattle_EnigmaBerry
-ItemUseOutOfBattle_EnigmaBerry: @ 80FE650
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- cmp r0, 0x14
- bls _080FE66A
- b _080FE75C
-_080FE66A:
- lsls r0, 2
- ldr r1, =_080FE67C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080FE67C:
- .4byte _080FE708
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE75C
- .4byte _080FE75C
- .4byte _080FE6EC
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE6D0
- .4byte _080FE75C
- .4byte _080FE724
- .4byte _080FE724
- .4byte _080FE740
-_080FE6D0:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x10]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_Medicine
- b _080FE770
- .pool
-_080FE6EC:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x10]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_SacredAsh
- b _080FE770
- .pool
-_080FE708:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x10]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_RareCandy
- b _080FE770
- .pool
-_080FE724:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x10]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_PPUp
- b _080FE770
- .pool
-_080FE740:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x10]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_PPRecovery
- b _080FE770
- .pool
-_080FE75C:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x4
- strh r0, [r1, 0x10]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_CannotUse
-_080FE770:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_EnigmaBerry
-
- thumb_func_start ItemUseInBattle_EnigmaBerry
-ItemUseInBattle_EnigmaBerry: @ 80FE77C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x15
- bhi _080FE814
- lsls r0, 2
- ldr r1, =_080FE7A4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080FE7A4:
- .4byte _080FE7FC
- .4byte _080FE814
- .4byte _080FE804
- .4byte _080FE804
- .4byte _080FE804
- .4byte _080FE804
- .4byte _080FE804
- .4byte _080FE804
- .4byte _080FE804
- .4byte _080FE804
- .4byte _080FE814
- .4byte _080FE804
- .4byte _080FE814
- .4byte _080FE814
- .4byte _080FE814
- .4byte _080FE814
- .4byte _080FE814
- .4byte _080FE814
- .4byte _080FE814
- .4byte _080FE814
- .4byte _080FE814
- .4byte _080FE80C
-_080FE7FC:
- adds r0, r4, 0
- bl ItemUseInBattle_StatIncrease
- b _080FE81A
-_080FE804:
- adds r0, r4, 0
- bl ItemUseInBattle_Medicine
- b _080FE81A
-_080FE80C:
- adds r0, r4, 0
- bl ItemUseInBattle_PPRecovery
- b _080FE81A
-_080FE814:
- adds r0, r4, 0
- bl ItemUseOutOfBattle_CannotUse
-_080FE81A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ItemUseInBattle_EnigmaBerry
-
- thumb_func_start ItemUseOutOfBattle_CannotUse
-ItemUseOutOfBattle_CannotUse: @ 80FE820
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrb r1, [r1, 0xE]
- bl DisplayDadsAdviceCannotUseItemMessage
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemUseOutOfBattle_CannotUse
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/ld_script.txt b/ld_script.txt
index c16575379..1b3ff16ef 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -162,7 +162,7 @@ SECTIONS {
asm/rotating_gate.o(.text);
src/safari_zone.o(.text);
asm/contest_link_80FC4F4.o(.text);
- asm/item_use.o(.text);
+ src/item_use.o(.text);
asm/battle_anim_80FE840.o(.text);
src/bike.o(.text);
asm/easy_chat.o(.text);
diff --git a/src/item_use.c b/src/item_use.c
new file mode 100755
index 000000000..4c7276bb8
--- /dev/null
+++ b/src/item_use.c
@@ -0,0 +1,1271 @@
+#include "global.h"
+#include "battle.h"
+#include "berry.h"
+#include "bike.h"
+#include "coins.h"
+#include "constants/flags.h"
+#include "constants/items.h"
+#include "constants/songs.h"
+#include "constants/vars.h"
+#include "data2.h"
+#include "event_data.h"
+#include "fieldmap.h"
+#include "field_map_obj.h"
+#include "field_player_avatar.h"
+#include "field_screen.h"
+#include "field_weather.h"
+#include "item.h"
+#include "map_obj_8097404.h"
+#include "mail.h"
+#include "metatile_behavior.h"
+#include "overworld.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "rom_818CFC8.h"
+#include "script.h"
+#include "sound.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+
+extern u16 gSpecialVar_ItemId;
+extern void(**gUnknown_0203CE54)(void);
+extern void(**gUnknown_0203CF2C)(void);
+extern void(*gUnknown_0203A0F4)(u8 taskId);
+extern void(*gUnknown_085920D8[])(void);
+extern void (*gUnknown_03006328)(u8, u16, TaskFunc);
+extern void unknown_ItemMenu_Confirm(u8 taskId);
+extern void sub_81C5B14(u8 taskId);
+extern u8 gText_DadsAdvice[];
+extern u8 gText_CantDismountBike[];
+extern void sub_8197434(u8 a, u8 b);
+extern void sub_80984F4(void);
+extern void ItemUseOutOfBattle_TMHM(u8 a);
+extern void ItemUseOutOfBattle_EvolutionStone(u8 b);
+extern void bag_menu_mail_related(void);
+extern void OpenPokeblockCase(u8 a, void(*b)(void));
+extern void overworld_free_bg_tilemaps(void);
+extern bool32 sav1_map_is_biking_allowed(void);
+extern bool8 IsPlayerFacingSurfableFishableWater(void);
+extern bool8 sub_81221AC(void);
+extern u8 gText_ItemFinderNothing[];
+extern u8 gText_ItemFinderNearby[];
+extern u8 gText_ItemFinderOnTop[];
+extern u8 gText_CoinCase[];
+extern u8 gText_PowderQty[];
+extern u8 gUnknown_085920E4[];
+extern u8 Route102_EventScript_274482[];
+extern u8 Route102_EventScript_2744C0[];
+extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[];
+extern u8 gText_BootedUpHM[];
+extern u8 gText_BootedUpTM[];
+extern u8 gText_TMHMContainedVar1[];
+extern u8 gText_PlayerUsedVar2[];
+extern u8 gText_RepelEffectsLingered[];
+extern u8 gText_UsedVar2WildLured[];
+extern u8 gText_UsedVar2WildRepelled[];
+extern u8 gText_BoxFull[];
+extern u8 gText_WontHaveEffect[];
+extern int sub_80247BC(void);
+extern struct MapHeader* mapconnection_get_mapheader(struct MapConnection *connection);
+extern void SetUpItemUseCallback(u8 taskId);
+extern void ItemUseCB_Medicine(u8, u16, TaskFunc);
+extern void sub_81B67C8(u8, u16, TaskFunc);
+extern void sub_81B79E8(u8, u16, TaskFunc);
+extern void dp05_ether(u8, u16, TaskFunc);
+extern void dp05_pp_up(u8, u16, TaskFunc);
+extern void dp05_rare_candy(u8, u16, TaskFunc);
+extern void sub_81B6DC4(u8, u16, TaskFunc);
+extern void sub_81B7C74(u8, u16, TaskFunc);
+extern u16 ItemIdToBattleMoveId(u16);
+extern void bag_menu_yes_no(u8, u8, void(**)(u8 taskId));
+extern void (*gUnknown_085920E8[])(u8 taskId);
+extern void sub_81C5924(void);
+extern void sub_81C59BC(void);
+extern void sub_81AB9A8(u8);
+extern void sub_81ABA88(u8);
+extern void sub_80B7CC8(void);
+extern void flagmods_08054D70(void);
+extern u8* sub_806CF78(u16);
+extern bool8 ExecuteTableBasedItemEffect_(struct Pokemon*, u16, u8, u8);
+extern u8 gBankInMenu;
+extern u16 gBattlePartyID[];
+extern void sub_81B89F0(void);
+extern u8 GetItemEffectType(u16);
+
+void MapPostLoadHook_UseItem(void);
+extern void sub_80AF6D4(void);
+void Task_CallItemUseOnFieldCallback(u8 taskId);
+void bag_menu_inits_lists_menu(u8 taskId);
+void ItemUseOnFieldCB_Bike(u8 taskId);
+void ItemUseOnFieldCB_Rod(u8 taskId);
+void ItemUseOnFieldCB_Itemfinder(u8 taskId);
+void sub_80FD504(u8 taskId);
+void sub_80FD5CC(u8 taskId);
+void sub_80FDA94(u8 taskId);
+void sub_80FDADC(u8 taskId);
+void sub_80FD7C8(u8 taskId);
+void sub_80FDC00(u8 taskId);
+void sub_80FDD74(u8 taskId);
+void sub_80FDE08(u8 taskId);
+void sub_80FDE7C(u8 taskId);
+void sub_80FDF90(u8 taskId);
+void task08_0809AD8C(u8 taskId);
+void sub_80FE024(u8 taskId);
+void sub_80FE124(u8 taskId);
+void sub_80FE164(u8 taskId);
+
+void DisplayItemMessage(u8 taskId, u8 a, u8* str, void(*callback)(u8 taskId));
+void DisplayItemMessageInBattlePyramid(u8 taskId, u8* str, void(*callback)(u8 taskId));
+void DisplayItemMessageOnField(u8 taskId, u8* str, void(*callback)(u8 taskId));
+void sub_81C6714(u8 taskId);
+void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId);
+void StartFishing(u8 a);
+bool8 ItemfinderCheckForHiddenItems(struct MapEvents *, u8);
+u8 sub_80FD9B0(s16 a, s16 b);
+void sub_80FDA24(u8 a);
+void sub_80FD8E0(u8 taskId, s16 x, s16 y);
+void sub_80FDBEC(void);
+bool8 sub_80FDE2C(void);
+void ItemUseOutOfBattle_CannotUse(u8 taskId);
+
+void SetUpItemUseCallback(u8 taskId)
+{
+ u8 type;
+ if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY)
+ type = gTasks[taskId].data[4] - 1;
+ else
+ type = ItemId_GetType(gSpecialVar_ItemId) - 1;
+ if (!InBattlePyramid())
+ {
+ *gUnknown_0203CE54 = gUnknown_085920D8[type];
+ unknown_ItemMenu_Confirm(taskId);
+ }
+ else
+ {
+ *gUnknown_0203CF2C = gUnknown_085920D8[type];
+ sub_81C5B14(taskId);
+ }
+}
+
+void SetUpItemUseOnFieldCallback(u8 taskId)
+{
+ if (gTasks[taskId].data[3] != 1)
+ {
+ gFieldCallback = MapPostLoadHook_UseItem;
+ SetUpItemUseCallback(taskId);
+ }
+ else
+ gUnknown_0203A0F4(taskId);
+}
+
+void MapPostLoadHook_UseItem(void)
+{
+ pal_fill_black();
+ CreateTask(Task_CallItemUseOnFieldCallback, 8);
+}
+
+void Task_CallItemUseOnFieldCallback(u8 taskId)
+{
+ if (sub_80ABDFC() == 1)
+ gUnknown_0203A0F4(taskId);
+}
+
+void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField, const u8 *str)
+{
+ StringExpandPlaceholders(gStringVar4, str);
+ if (!isUsingRegisteredKeyItemOnField)
+ {
+ if (!InBattlePyramid())
+ DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, sub_81C6714);
+ }
+ else
+ DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField);
+}
+
+void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField)
+{
+ DisplayCannotUseItemMessage(taskId, isUsingRegisteredKeyItemOnField, gText_DadsAdvice);
+}
+
+void DisplayCannotDismountBikeMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField)
+{
+ DisplayCannotUseItemMessage(taskId, isUsingRegisteredKeyItemOnField, gText_CantDismountBike);
+}
+
+void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId)
+{
+ sub_8197434(0, 1);
+ DestroyTask(taskId);
+ sub_80984F4();
+ ScriptContext2_Disable();
+}
+
+u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId)
+{
+ if (ItemId_GetFieldFunc(itemId) == ItemUseOutOfBattle_TMHM)
+ return 1;
+ else if (ItemId_GetFieldFunc(itemId) == ItemUseOutOfBattle_EvolutionStone)
+ return 2;
+ else
+ return 0;
+}
+
+void sub_80FD254()
+{
+ struct MailStruct mail;
+ mail.itemId = gSpecialVar_ItemId;
+ ReadMail(&mail, bag_menu_mail_related, 0);
+}
+
+void ItemUseOutOfBattle_Mail(u8 taskId)
+{
+ *gUnknown_0203CE54 = sub_80FD254;
+ unknown_ItemMenu_Confirm(taskId);
+}
+
+void ItemUseOutOfBattle_Bike(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ s16 coordsY;
+ s16 coordsX;
+ u8 behavior;
+ PlayerGetDestCoords(&coordsX, &coordsY);
+ behavior = MapGridGetMetatileBehaviorAt(coordsX, coordsY);
+ if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE || MetatileBehavior_IsVerticalRail(behavior) == TRUE || MetatileBehavior_IsHorizontalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE)
+ DisplayCannotDismountBikeMessage(taskId, data[3]);
+ else
+ {
+ if (sav1_map_is_biking_allowed() == TRUE && IsBikingDisallowedByPlayer() == 0)
+ {
+ gUnknown_0203A0F4 = ItemUseOnFieldCB_Bike;
+ SetUpItemUseOnFieldCallback(taskId);
+ }
+ else
+ DisplayDadsAdviceCannotUseItemMessage(taskId, data[3]);
+ }
+}
+
+void ItemUseOnFieldCB_Bike(u8 taskId)
+{
+ if (!ItemId_GetSecondaryId(gSpecialVar_ItemId))
+ GetOnOffBike(2);
+ else
+ GetOnOffBike(4);
+ sub_80984F4();
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+}
+
+bool32 CanFish()
+{
+ s16 x, y;
+ u16 tileBehavior;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
+
+ if (MetatileBehavior_IsWaterfall(tileBehavior))
+ return FALSE;
+
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4))
+ return FALSE;
+
+ if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ {
+ if (IsPlayerFacingSurfableFishableWater())
+ return TRUE;
+ }
+ else
+ {
+ if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) && !MapGridIsImpassableAt(x, y))
+ return TRUE;
+ if (MetatileBehavior_8089510(tileBehavior) == TRUE)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void ItemUseOutOfBattle_Rod(u8 taskId)
+{
+ if (CanFish() == TRUE)
+ {
+ gUnknown_0203A0F4 = ItemUseOnFieldCB_Rod;
+ SetUpItemUseOnFieldCallback(taskId);
+ }
+ else
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+}
+
+void ItemUseOnFieldCB_Rod(u8 taskId)
+{
+ StartFishing(ItemId_GetSecondaryId(gSpecialVar_ItemId));
+ DestroyTask(taskId);
+}
+
+void ItemUseOutOfBattle_Itemfinder(u8 var)
+{
+ IncrementGameStat(0x27);
+ gUnknown_0203A0F4 = ItemUseOnFieldCB_Itemfinder;
+ SetUpItemUseOnFieldCallback(var);
+}
+
+void ItemUseOnFieldCB_Itemfinder(u8 taskId)
+{
+ if (ItemfinderCheckForHiddenItems(gMapHeader.events, taskId) == TRUE)
+ gTasks[taskId].func = sub_80FD504;
+ else
+ DisplayItemMessageOnField(taskId, gText_ItemFinderNothing, sub_80FD5CC);
+}
+
+void sub_80FD504(u8 taskId)
+{
+ u8 playerDir;
+ u8 playerDirToItem;
+ u8 i;
+ s16* data = gTasks[taskId].data;
+ if (!data[3])
+ {
+ if (data[4] == 4)
+ {
+ playerDirToItem = sub_80FD9B0(data[0], data[1]);
+ if (playerDirToItem)
+ {
+ sub_80FDA24(gUnknown_085920E4[playerDirToItem - 1]);
+ gTasks[taskId].func = sub_80FDA94;
+ }
+ else
+ {
+ playerDir = player_get_direction_lower_nybble();
+ for (i = 0; i < 4; i++)
+ {
+ if (playerDir == gUnknown_085920E4[i])
+ data[5] = (i + 1) & 3;
+ }
+ gTasks[taskId].func = sub_80FDADC;
+ data[3] = 0;
+ data[2] = 0;
+ }
+ return;
+ }
+ PlaySE(SE_DAUGI);
+ data[4]++;
+ }
+ data[3] = (data[3] + 1) & 0x1F;
+}
+
+void sub_80FD5CC(u8 taskId)
+{
+ sub_8197434(0, 1);
+ sub_80984F4();
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+}
+
+bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId)
+{
+ int distanceX, distanceY;
+ s16 x, y, i, newDistanceX, newDistanceY;
+ PlayerGetDestCoords(&x, &y);
+ gTasks[taskId].data[2] = FALSE;
+ for (i = 0; i < events->bgEventCount; i++)
+ {
+ if (events->bgEvents[i].kind == 7 && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4))
+ {
+ distanceX = (u16)events->bgEvents[i].x + 7;
+ newDistanceX = distanceX - x;
+ distanceY = (u16)events->bgEvents[i].y + 7;
+ newDistanceY = distanceY - y;
+
+ if ((u16)(newDistanceX + 7) < 15 && (newDistanceY >= -5) && (newDistanceY < 6))
+ sub_80FD8E0(taskId, newDistanceX, newDistanceY);
+ }
+ }
+
+ sub_80FD7C8(taskId);
+ if (gTasks[taskId].data[2] == TRUE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 sub_80FD6D4(struct MapEvents *events, s16 x, s16 y)
+{
+ u8 bgEventCount = events->bgEventCount;
+ struct BgEvent *bgEvent = events->bgEvents;
+ int i;
+
+ for (i = 0; i < bgEventCount; i++)
+ {
+ if (bgEvent[i].kind == 7 && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed?
+ {
+ if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4))
+ return TRUE;
+ else
+ return FALSE;
+ }
+ }
+ return FALSE;
+}
+
+bool8 sub_80FD730(struct MapConnection *connection, int x, int y)
+{
+ struct MapHeader *mapHeader;
+ u16 localX, localY;
+ u32 localOffset;
+ s32 localLength;
+
+ mapHeader = mapconnection_get_mapheader(connection);
+
+ switch (connection->direction)
+ {
+ // same weird temp variable behavior seen in sub_80FD6D4
+ case 2:
+ localOffset = connection->offset + 7;
+ localX = x - localOffset;
+ localLength = mapHeader->mapData->height - 7;
+ localY = localLength + y; // additions are reversed for some reason
+ break;
+ case 1:
+ localOffset = connection->offset + 7;
+ localX = x - localOffset;
+ localLength = gMapHeader.mapData->height + 7;
+ localY = y - localLength;
+ break;
+ case 3:
+ localLength = mapHeader->mapData->width - 7;
+ localX = localLength + x; // additions are reversed for some reason
+ localOffset = connection->offset + 7;
+ localY = y - localOffset;
+ break;
+ case 4:
+ localLength = gMapHeader.mapData->width + 7;
+ localX = x - localLength;
+ localOffset = connection->offset + 7;
+ localY = y - localOffset;
+ break;
+ default:
+ return FALSE;
+ }
+ return sub_80FD6D4(mapHeader->events, localX, localY);
+}
+
+// weird math
+#ifdef NONMATCHING
+void sub_80FD7C8(u8 taskId)
+{
+ s16 x, y;
+ s16 curX, curY;
+ s16 width = gMapHeader.mapData->width + 7;
+ s16 height = gMapHeader.mapData->height + 7;
+
+ PlayerGetDestCoords(&x, &y);
+
+ for (curX = x - 7; curX <= x + 7; curX++)
+ {
+ for (curY = y - 5; curY <= y + 5; curY++)
+ {
+ if (7 > curX
+ || curX >= width
+ || 7 > curY
+ || curY >= height)
+ {
+ struct MapConnection *conn = sub_8088A8C(curX, curY);
+ if (conn && sub_80FD730(conn, curX, curY) == TRUE)
+ sub_80FD8E0(taskId, curX - x, curY - y);
+ }
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_80FD7C8(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x14\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x4]\n\
+ ldr r0, =gMapHeader\n\
+ ldr r1, [r0]\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x7\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x8]\n\
+ ldr r0, [r1, 0x4]\n\
+ adds r0, 0x7\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0xC]\n\
+ mov r4, sp\n\
+ adds r4, 0x2\n\
+ mov r0, sp\n\
+ adds r1, r4, 0\n\
+ bl PlayerGetDestCoords\n\
+ mov r0, sp\n\
+ ldrh r0, [r0]\n\
+ subs r0, 0x7\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ asrs r0, 16\n\
+ mov r1, sp\n\
+ movs r2, 0\n\
+ ldrsh r1, [r1, r2]\n\
+ adds r1, 0x7\n\
+ cmp r0, r1\n\
+ bgt _080FD8CC\n\
+_080FD816:\n\
+ mov r5, sp\n\
+ ldrh r0, [r5, 0x2]\n\
+ subs r0, 0x5\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ lsls r2, r4, 16\n\
+ asrs r1, r2, 16\n\
+ movs r6, 0x2\n\
+ ldrsh r0, [r5, r6]\n\
+ adds r0, 0x5\n\
+ lsls r3, 16\n\
+ mov r8, r3\n\
+ cmp r1, r0\n\
+ bgt _080FD8B6\n\
+ movs r0, 0x7\n\
+ str r0, [sp, 0x10]\n\
+ mov r1, r8\n\
+ asrs r1, 16\n\
+ mov r9, r1\n\
+ mov r10, r0\n\
+_080FD83E:\n\
+ ldr r3, [sp, 0x10]\n\
+ cmp r3, r9\n\
+ bgt _080FD860\n\
+ ldr r5, [sp, 0x8]\n\
+ lsls r0, r5, 16\n\
+ asrs r0, 16\n\
+ cmp r9, r0\n\
+ bge _080FD860\n\
+ asrs r1, r2, 16\n\
+ cmp r10, r1\n\
+ bgt _080FD860\n\
+ ldr r6, [sp, 0xC]\n\
+ lsls r0, r6, 16\n\
+ asrs r0, 16\n\
+ lsls r7, r4, 16\n\
+ cmp r1, r0\n\
+ blt _080FD89E\n\
+_080FD860:\n\
+ mov r0, r8\n\
+ asrs r5, r0, 16\n\
+ lsls r4, 16\n\
+ asrs r6, r4, 16\n\
+ adds r0, r5, 0\n\
+ adds r1, r6, 0\n\
+ bl sub_8088A8C\n\
+ adds r7, r4, 0\n\
+ cmp r0, 0\n\
+ beq _080FD89E\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ bl sub_80FD730\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _080FD89E\n\
+ mov r0, sp\n\
+ ldrh r1, [r0]\n\
+ subs r1, r5, r1\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ ldrh r2, [r0, 0x2]\n\
+ subs r2, r6, r2\n\
+ lsls r2, 16\n\
+ asrs r2, 16\n\
+ ldr r0, [sp, 0x4]\n\
+ bl sub_80FD8E0\n\
+_080FD89E:\n\
+ movs r1, 0x80\n\
+ lsls r1, 9\n\
+ adds r0, r7, r1\n\
+ lsrs r4, r0, 16\n\
+ lsls r2, r4, 16\n\
+ asrs r1, r2, 16\n\
+ mov r3, sp\n\
+ movs r5, 0x2\n\
+ ldrsh r0, [r3, r5]\n\
+ adds r0, 0x5\n\
+ cmp r1, r0\n\
+ ble _080FD83E\n\
+_080FD8B6:\n\
+ movs r1, 0x80\n\
+ lsls r1, 9\n\
+ add r1, r8\n\
+ lsrs r3, r1, 16\n\
+ asrs r1, 16\n\
+ mov r0, sp\n\
+ movs r6, 0\n\
+ ldrsh r0, [r0, r6]\n\
+ adds r0, 0x7\n\
+ cmp r1, r0\n\
+ ble _080FD816\n\
+_080FD8CC:\n\
+ add sp, 0x14\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_80FD8E0(u8 taskId, s16 x, s16 y)
+{
+ s16 *data = gTasks[taskId].data;
+ s16 var1, var2, var3, var4;
+
+ if (data[2] == FALSE)
+ {
+ data[0] = x;
+ data[1] = y;
+ data[2] = TRUE;
+ }
+ else
+ {
+ // data[0] and data[1] contain the player's coordinates.
+ // x and y contain the item's coordinates.
+ if (data[0] < 0)
+ var1 = data[0] * -1; // item is to the left
+ else
+ var1 = data[0]; // item is to the right
+
+ if (data[1] < 0)
+ var2 = data[1] * -1; // item is to the north
+ else
+ var2 = data[1]; // item is to the south
+
+ if (x < 0)
+ var3 = x * -1;
+ else
+ var3 = x;
+
+ if (y < 0)
+ var4 = y * -1;
+ else
+ var4 = y;
+
+ if (var1 + var2 > var3 + var4)
+ {
+ data[0] = x;
+ data[1] = y;
+ }
+ else
+ {
+ if (var1 + var2 == var3 + var4 && (var2 > var4 || (var2 == var4 && data[1] < y)))
+ {
+ data[0] = x;
+ data[1] = y;
+ }
+ }
+ }
+}
+
+u8 sub_80FD9B0(s16 itemX, s16 itemY)
+{
+ s16 abX, abY;
+
+ if (itemX == 0 && itemY == 0)
+ return DIR_NONE; // player is standing on the item.
+
+ // get absolute X distance.
+ if (itemX < 0)
+ abX = itemX * -1;
+ else
+ abX = itemX;
+
+ // get absolute Y distance.
+ if (itemY < 0)
+ abY = itemY * -1;
+ else
+ abY = itemY;
+
+ if (abX > abY)
+ {
+ if (itemX < 0)
+ return DIR_EAST;
+ else
+ return DIR_NORTH;
+ }
+ else
+ {
+ if (abX < abY)
+ {
+ if (itemY < 0)
+ return DIR_SOUTH;
+ else
+ return DIR_WEST;
+ }
+ if (abX == abY)
+ {
+ if (itemY < 0)
+ return DIR_SOUTH;
+ else
+ return DIR_WEST;
+ }
+ return DIR_NONE; // should never get here. return something so it doesnt crash.
+ }
+}
+
+void sub_80FDA24(u8 direction)
+{
+ FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]);
+ FieldObjectClearAnim(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]);
+ npc_sync_anim_pause_bits(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]);
+ PlayerTurnInPlace(direction);
+}
+
+void sub_80FDA94(u8 taskId)
+{
+ if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE)
+ DisplayItemMessageOnField(taskId, gText_ItemFinderNearby, sub_80FD5CC);
+}
+
+void sub_80FDADC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE
+ || data[2] == FALSE)
+ {
+ sub_80FDA24(gUnknown_085920E4[data[5]]);
+ data[2] = 1;
+ data[5] = (data[5] + 1) & 3;
+ data[3]++;
+
+ if (data[3] == 4)
+ DisplayItemMessageOnField(taskId, gText_ItemFinderOnTop, sub_80FD5CC);
+ }
+}
+
+void ItemUseOutOfBattle_PokeblockCase(u8 taskId)
+{
+ if (sub_81221AC() == TRUE)
+ {
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ }
+ else if (gTasks[taskId].data[3] != TRUE)
+ {
+ *gUnknown_0203CE54 = sub_80FDBEC;
+ unknown_ItemMenu_Confirm(taskId);
+ }
+ else
+ {
+ gFieldCallback = sub_80AF6D4;
+ FadeScreen(1, 0);
+ gTasks[taskId].func = sub_80FDC00;
+ }
+}
+
+void sub_80FDBEC(void)
+{
+ OpenPokeblockCase(0, bag_menu_mail_related);
+}
+
+void sub_80FDC00(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ overworld_free_bg_tilemaps();
+ OpenPokeblockCase(0, c2_exit_to_overworld_2_switch);
+ DestroyTask(taskId);
+ }
+}
+
+void ItemUseOutOfBattle_CoinCase(u8 taskId)
+{
+ ConvertIntToDecimalStringN(gStringVar1, GetCoins(), 0, 4);
+ StringExpandPlaceholders(gStringVar4, gText_CoinCase);
+
+ if (!gTasks[taskId].data[3])
+ {
+ DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu);
+ }
+ else
+ {
+ DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField);
+ }
+}
+
+void ItemUseOutOfBattle_PowderJar(u8 taskId)
+{
+ ConvertIntToDecimalStringN(gStringVar1, sub_80247BC(), 0, 5);
+ StringExpandPlaceholders(gStringVar4, gText_PowderQty);
+
+ if (!gTasks[taskId].data[3])
+ {
+ DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu);
+ }
+ else
+ {
+ DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField);
+ }
+}
+
+void sub_80FDD10(u8 taskId)
+{
+ if (IsPlayerFacingPlantedBerryTree() == TRUE)
+ {
+ gUnknown_0203A0F4 = sub_80FDD74;
+ gFieldCallback = MapPostLoadHook_UseItem;
+ *gUnknown_0203CE54 = c2_exit_to_overworld_2_switch;
+ unknown_ItemMenu_Confirm(taskId);
+ }
+ else
+ {
+ ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
+ }
+}
+
+void sub_80FDD74(u8 taskId)
+{
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ ScriptContext2_Enable();
+ ScriptContext1_SetupScript(Route102_EventScript_274482);
+ DestroyTask(taskId);
+}
+
+void ItemUseOutOfBattle_WailmerPail(u8 taskId)
+{
+ if (sub_80FDE2C() == TRUE)
+ {
+ gUnknown_0203A0F4 = sub_80FDE7C;
+ SetUpItemUseOnFieldCallback(taskId);
+ }
+ else if (TryToWaterBerryTree() == TRUE)
+ {
+ gUnknown_0203A0F4 = sub_80FDE08;
+ SetUpItemUseOnFieldCallback(taskId);
+ }
+ else
+ {
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ }
+}
+
+void sub_80FDE08(u8 taskId)
+{
+ ScriptContext2_Enable();
+ ScriptContext1_SetupScript(Route102_EventScript_2744C0);
+ DestroyTask(taskId);
+}
+
+bool8 sub_80FDE2C(void)
+{
+ u16 x, y;
+ u8 z;
+ u8 objId;
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ z = PlayerGetZCoord();
+ objId = GetFieldObjectIdByXYZ(x, y, z);
+ if (objId == 16 || gMapObjects[objId].graphicsId != 0xE4)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void sub_80FDE7C(u8 taskId)
+{
+ ScriptContext2_Enable();
+ ScriptContext1_SetupScript(BattleFrontier_OutsideEast_EventScript_242CFC);
+ DestroyTask(taskId);
+}
+
+void ItemUseOutOfBattle_Medicine(u8 taskId)
+{
+ gUnknown_03006328 = ItemUseCB_Medicine;
+ SetUpItemUseCallback(taskId);
+}
+
+void ItemUseOutOfBattle_ReduceEV(u8 taskId)
+{
+ gUnknown_03006328 = sub_81B67C8;
+ SetUpItemUseCallback(taskId);
+}
+
+void ItemUseOutOfBattle_SacredAsh(u8 taskId)
+{
+ gUnknown_03006328 = sub_81B79E8;
+ SetUpItemUseCallback(taskId);
+}
+
+void ItemUseOutOfBattle_PPRecovery(u8 taskId)
+{
+ gUnknown_03006328 = dp05_ether;
+ SetUpItemUseCallback(taskId);
+}
+
+void ItemUseOutOfBattle_PPUp(u8 taskId)
+{
+ gUnknown_03006328 = dp05_pp_up;
+ SetUpItemUseCallback(taskId);
+}
+
+void ItemUseOutOfBattle_RareCandy(u8 taskId)
+{
+ gUnknown_03006328 = dp05_rare_candy;
+ SetUpItemUseCallback(taskId);
+}
+
+void ItemUseOutOfBattle_TMHM(u8 taskId)
+{
+ if (gSpecialVar_ItemId >= ITEM_HM01)
+ DisplayItemMessage(taskId, 1, gText_BootedUpHM, sub_80FDF90); // HM
+ else
+ DisplayItemMessage(taskId, 1, gText_BootedUpTM, sub_80FDF90); // TM
+}
+
+void sub_80FDF90(u8 taskId)
+{
+ PlaySE(SE_PC_LOGIN);
+ gTasks[taskId].func = task08_0809AD8C;
+}
+
+void task08_0809AD8C(u8 taskId)
+{
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]);
+ StringExpandPlaceholders(gStringVar4, gText_TMHMContainedVar1);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_80FE024);
+ }
+}
+
+void sub_80FE024(u8 taskId)
+{
+ bag_menu_yes_no(taskId, 6, gUnknown_085920E8);
+}
+
+void sub_80FE03C(u8 taskId)
+{
+ gUnknown_03006328 = sub_81B6DC4;
+ SetUpItemUseCallback(taskId);
+}
+
+void sub_80FE058(void)
+{
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2);
+ if (!InBattlePyramid())
+ {
+ sub_81AB9A8(ItemId_GetPocket(gSpecialVar_ItemId));
+ sub_81ABA88(ItemId_GetPocket(gSpecialVar_ItemId));
+ }
+ else
+ {
+ sub_81C5924();
+ sub_81C59BC();
+ }
+}
+
+void ItemUseOutOfBattle_Repel(u8 taskId)
+{
+ if (VarGet(VAR_REPEL_STEP_COUNT) == 0)
+ gTasks[taskId].func = sub_80FE124;
+ else if (!InBattlePyramid())
+ DisplayItemMessage(taskId, 1, gText_RepelEffectsLingered, bag_menu_inits_lists_menu);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, sub_81C6714);
+}
+
+void sub_80FE124(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (++data[8] > 7)
+ {
+ data[8] = 0;
+ PlaySE(SE_TU_SAA);
+ gTasks[taskId].func = sub_80FE164;
+ }
+}
+
+void sub_80FE164(u8 taskId)
+{
+ if (!IsSEPlaying())
+ {
+ VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId));
+ sub_80FE058();
+ if (!InBattlePyramid())
+ DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714);
+ }
+}
+
+void sub_80FE1D0(u8 taskId)
+{
+ if(++gTasks[taskId].data[8] > 7)
+ {
+ PlaySE(SE_BIDORO);
+ if (!InBattlePyramid())
+ DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714);
+ }
+}
+
+void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId)
+{
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ if (gSpecialVar_ItemId == ITEM_WHITE_FLUTE)
+ {
+ FlagSet(FLAG_SYS_ENC_UP_ITEM);
+ FlagClear(FLAG_SYS_ENC_DOWN_ITEM);
+ StringExpandPlaceholders(gStringVar4, gText_UsedVar2WildLured);
+ }
+ else
+ {
+ FlagSet(FLAG_SYS_ENC_DOWN_ITEM);
+ FlagClear(FLAG_SYS_ENC_UP_ITEM);
+ StringExpandPlaceholders(gStringVar4, gText_UsedVar2WildRepelled);
+ }
+ gTasks[taskId].data[8] = 0;
+ gTasks[taskId].func = sub_80FE1D0;
+}
+
+void task08_080A1C44(u8 taskId)
+{
+ player_avatar_init_params_reset();
+ sub_80B7CC8();
+ DestroyTask(taskId);
+}
+
+void re_escape_rope(u8 taskId)
+{
+ flagmods_08054D70();
+ sub_80FE058();
+ gTasks[taskId].data[0] = 0;
+ DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44);
+}
+
+bool8 sub_80FE314(void)
+{
+ if (gMapHeader.flags & 2)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void ItemUseOutOfBattle_EscapeRope(u8 taskId)
+{
+ if (sub_80FE314() == TRUE)
+ {
+ gUnknown_0203A0F4 = re_escape_rope;
+ SetUpItemUseOnFieldCallback(taskId);
+ }
+ else
+ {
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ }
+}
+
+void ItemUseOutOfBattle_EvolutionStone(u8 taskId)
+{
+ gUnknown_03006328 = sub_81B7C74;
+ SetUpItemUseCallback(taskId);
+}
+
+void ItemUseInBattle_PokeBall(u8 taskId)
+{
+ if (IsPlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon?
+ {
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ if (!InBattlePyramid())
+ unknown_ItemMenu_Confirm(taskId);
+ else
+ sub_81C5B14(taskId);
+ }
+ else if (!InBattlePyramid())
+ {
+ DisplayItemMessage(taskId, 1, gText_BoxFull, bag_menu_inits_lists_menu);
+ }
+ else
+ DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, sub_81C6714);
+}
+
+void sub_80FE408(u8 taskId)
+{
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ if (!InBattlePyramid())
+ unknown_ItemMenu_Confirm(taskId);
+ else
+ sub_81C5B14(taskId);
+ }
+}
+
+void sub_80FE440(u8 taskId)
+{
+ if(++gTasks[taskId].data[8] > 7)
+ {
+ PlaySE(SE_KAIFUKU);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ if (!InBattlePyramid())
+ DisplayItemMessage(taskId, 1, sub_806CF78(gSpecialVar_ItemId), sub_80FE408);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, sub_806CF78(gSpecialVar_ItemId), sub_80FE408);
+ }
+}
+
+void ItemUseInBattle_StatIncrease(u8 taskId)
+{
+ u16 partyId = gBattlePartyID[gBankInMenu];
+
+ if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE)
+ {
+ if (!InBattlePyramid())
+ DisplayItemMessage(taskId, 1, gText_WontHaveEffect, bag_menu_inits_lists_menu);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, sub_81C6714);
+ }
+ else
+ {
+ gTasks[taskId].func = sub_80FE440;
+ gTasks[taskId].data[8] = 0;
+ }
+}
+
+void sub_80FE54C(u8 taskId)
+{
+ if (!InBattlePyramid())
+ {
+ *gUnknown_0203CE54 = sub_81B89F0;
+ unknown_ItemMenu_Confirm(taskId);
+ }
+ else
+ {
+ *gUnknown_0203CF2C = sub_81B89F0;
+ sub_81C5B14(taskId);
+ }
+}
+
+void ItemUseInBattle_Medicine(u8 taskId)
+{
+ gUnknown_03006328 = ItemUseCB_Medicine;
+ sub_80FE54C(taskId);
+}
+
+void sub_80FE5AC(u8 taskId)
+{
+ gUnknown_03006328 = sub_81B79E8;
+ sub_80FE54C(taskId);
+}
+
+void ItemUseInBattle_PPRecovery(u8 taskId)
+{
+ gUnknown_03006328 = dp05_ether;
+ sub_80FE54C(taskId);
+}
+
+void ItemUseInBattle_Escape(u8 taskId)
+{
+
+ if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE)
+ {
+ sub_80FE058();
+ if (!InBattlePyramid())
+ DisplayItemMessage(taskId, 1, gStringVar4, unknown_ItemMenu_Confirm);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C5B14);
+ }
+ else
+ {
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ }
+}
+
+void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
+{
+ switch (GetItemEffectType(gSpecialVar_ItemId) - 1)
+ {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ gTasks[taskId].data[4] = 1;
+ ItemUseOutOfBattle_Medicine(taskId);
+ break;
+ case 9:
+ gTasks[taskId].data[4] = 1;
+ ItemUseOutOfBattle_SacredAsh(taskId);
+ break;
+ case 0:
+ gTasks[taskId].data[4] = 1;
+ ItemUseOutOfBattle_RareCandy(taskId);
+ break;
+ case 18:
+ case 19:
+ gTasks[taskId].data[4] = 1;
+ ItemUseOutOfBattle_PPUp(taskId);
+ break;
+ case 20:
+ gTasks[taskId].data[4] = 1;
+ ItemUseOutOfBattle_PPRecovery(taskId);
+ break;
+ default:
+ gTasks[taskId].data[4] = 4;
+ ItemUseOutOfBattle_CannotUse(taskId);
+ }
+}
+
+void ItemUseInBattle_EnigmaBerry(u8 taskId)
+{
+ switch (GetItemEffectType(gSpecialVar_ItemId))
+ {
+ case 0:
+ ItemUseInBattle_StatIncrease(taskId);
+ break;
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 11:
+ ItemUseInBattle_Medicine(taskId);
+ break;
+ case 21:
+ ItemUseInBattle_PPRecovery(taskId);
+ break;
+ default:
+ ItemUseOutOfBattle_CannotUse(taskId);
+ }
+}
+
+void ItemUseOutOfBattle_CannotUse(u8 taskId)
+{
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+}