summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_fadetransition.s (renamed from asm/field_doortransition.s)0
-rw-r--r--asm/field_screeneffect.s (renamed from asm/weather.s)0
-rw-r--r--asm/item_use.s2029
-rw-r--r--data/field_screeneffect.s (renamed from data/weather.s)0
-rw-r--r--include/berry.h4
-rw-r--r--include/field_map_obj_helpers.h1
-rw-r--r--include/field_screeneffect.h (renamed from include/weather.h)0
-rw-r--r--include/pokemon.h2
-rw-r--r--ld_script.txt11
-rw-r--r--src/battle_setup.c2
-rw-r--r--src/berry.c6
-rw-r--r--src/field_effect.c2
-rw-r--r--src/field_fadetransition.c (renamed from src/field_doortransition.c)2
-rw-r--r--src/field_screeneffect.c (renamed from src/weather.c)2
-rw-r--r--src/item_use.c948
-rw-r--r--src/player_pc.c2
-rw-r--r--src/rom4.c2
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/shop.c2
-rw-r--r--src/start_menu.c2
20 files changed, 920 insertions, 2099 deletions
diff --git a/asm/field_doortransition.s b/asm/field_fadetransition.s
index 798285a45..798285a45 100644
--- a/asm/field_doortransition.s
+++ b/asm/field_fadetransition.s
diff --git a/asm/weather.s b/asm/field_screeneffect.s
index 01190c75e..01190c75e 100644
--- a/asm/weather.s
+++ b/asm/field_screeneffect.s
diff --git a/asm/item_use.s b/asm/item_use.s
deleted file mode 100644
index 66b9d7800..000000000
--- a/asm/item_use.s
+++ /dev/null
@@ -1,2029 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80C9720
-sub_80C9720: @ 80C9720
- 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, _080C9834 @ =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 _080C9824
-_080C976E:
- 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 _080C980E
- movs r0, 0x7
- str r0, [sp, 0x10]
- mov r1, r8
- asrs r1, 16
- mov r9, r1
- mov r10, r0
-_080C9796:
- ldr r3, [sp, 0x10]
- cmp r3, r9
- bgt _080C97B8
- ldr r5, [sp, 0x8]
- lsls r0, r5, 16
- asrs r0, 16
- cmp r9, r0
- bge _080C97B8
- asrs r1, r2, 16
- cmp r10, r1
- bgt _080C97B8
- ldr r6, [sp, 0xC]
- lsls r0, r6, 16
- asrs r0, 16
- lsls r7, r4, 16
- cmp r1, r0
- blt _080C97F6
-_080C97B8:
- mov r0, r8
- asrs r5, r0, 16
- lsls r4, 16
- asrs r6, r4, 16
- adds r0, r5, 0
- adds r1, r6, 0
- bl sub_8056BA0
- adds r7, r4, 0
- cmp r0, 0
- beq _080C97F6
- adds r1, r5, 0
- adds r2, r6, 0
- bl sub_80C9688
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080C97F6
- 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_80C9838
-_080C97F6:
- 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 _080C9796
-_080C980E:
- 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 _080C976E
-_080C9824:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9834: .4byte gMapHeader
- thumb_func_end sub_80C9720
-
- thumb_func_start sub_80C9838
-sub_80C9838: @ 80C9838
- 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, _080C986C @ =gTasks + 0x8
- adds r3, r1, r0
- movs r1, 0x4
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bne _080C9870
- strh r7, [r3]
- mov r0, r12
- strh r0, [r3, 0x2]
- movs r0, 0x1
- strh r0, [r3, 0x4]
- b _080C98FA
- .align 2, 0
-_080C986C: .4byte gTasks + 0x8
-_080C9870:
- movs r1, 0
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bge _080C9880
- negs r0, r0
- lsls r0, 16
- lsrs r4, r0, 16
- b _080C9882
-_080C9880:
- ldrh r4, [r3]
-_080C9882:
- movs r1, 0x2
- ldrsh r0, [r3, r1]
- ldrh r1, [r3, 0x2]
- mov r9, r1
- cmp r0, 0
- bge _080C9896
- negs r0, r0
- lsls r0, 16
- lsrs r2, r0, 16
- b _080C9898
-_080C9896:
- ldrh r2, [r3, 0x2]
-_080C9898:
- lsls r1, r7, 16
- asrs r0, r1, 16
- cmp r0, 0
- bge _080C98A8
- negs r0, r0
- lsls r0, 16
- lsrs r6, r0, 16
- b _080C98AA
-_080C98A8:
- lsrs r6, r1, 16
-_080C98AA:
- mov r1, r12
- lsls r0, r1, 16
- asrs r1, r0, 16
- mov r8, r0
- cmp r1, 0
- bge _080C98BC
- negs r0, r1
- lsls r0, 16
- b _080C98BE
-_080C98BC:
- mov r0, r8
-_080C98BE:
- 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 _080C98E0
- strh r7, [r3]
- mov r1, r12
- strh r1, [r3, 0x2]
- b _080C98FA
-_080C98E0:
- cmp r4, r0
- bne _080C98FA
- cmp r2, r1
- bgt _080C98F4
- cmp r2, r1
- bne _080C98FA
- mov r1, r9
- lsls r0, r1, 16
- cmp r0, r8
- bge _080C98FA
-_080C98F4:
- strh r7, [r3]
- mov r0, r12
- strh r0, [r3, 0x2]
-_080C98FA:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80C9838
-
- thumb_func_start GetPlayerDirectionTowardsHiddenItem
-GetPlayerDirectionTowardsHiddenItem: @ 80C9908
- push {r4,r5,lr}
- lsls r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsrs r2, r0, 16
- cmp r0, 0
- bne _080C991A
- cmp r1, 0
- beq _080C9974
-_080C991A:
- lsls r0, r2, 16
- asrs r2, r0, 16
- adds r5, r0, 0
- cmp r2, 0
- bge _080C992C
- negs r0, r2
- lsls r0, 16
- lsrs r4, r0, 16
- b _080C992E
-_080C992C:
- lsrs r4, r5, 16
-_080C992E:
- lsls r0, r1, 16
- asrs r2, r0, 16
- adds r1, r0, 0
- cmp r2, 0
- bge _080C9940
- negs r0, r2
- lsls r0, 16
- lsrs r3, r0, 16
- b _080C9942
-_080C9940:
- lsrs r3, r1, 16
-_080C9942:
- lsls r0, r4, 16
- asrs r2, r0, 16
- lsls r0, r3, 16
- asrs r0, 16
- cmp r2, r0
- ble _080C995A
- cmp r5, 0
- bge _080C9956
- movs r0, 0x4
- b _080C9976
-_080C9956:
- movs r0, 0x2
- b _080C9976
-_080C995A:
- cmp r2, r0
- bge _080C9964
- cmp r1, 0
- blt _080C996C
- b _080C9970
-_080C9964:
- cmp r2, r0
- bne _080C9974
- cmp r1, 0
- bge _080C9970
-_080C996C:
- movs r0, 0x1
- b _080C9976
-_080C9970:
- movs r0, 0x3
- b _080C9976
-_080C9974:
- movs r0, 0
-_080C9976:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetPlayerDirectionTowardsHiddenItem
-
- thumb_func_start SetPlayerDirectionTowardsItem
-SetPlayerDirectionTowardsItem: @ 80C997C
- 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, _080C99E8 @ =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 UnfreezeMapObject
- adds r0, r5, 0
- bl PlayerTurnInPlace
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C99E8: .4byte gMapObjects
- thumb_func_end SetPlayerDirectionTowardsItem
-
- thumb_func_start DisplayItemRespondingMessageAndExitItemfinder
-DisplayItemRespondingMessageAndExitItemfinder: @ 80C99EC
- 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, _080C9A2C @ =gMapObjects
- adds r0, r1
- bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080C9A24
- ldr r1, _080C9A30 @ =gOtherText_ItemfinderResponding
- ldr r2, _080C9A34 @ =ExitItemfinder
- adds r0, r4, 0
- movs r3, 0
- bl DisplayItemMessageOnField
-_080C9A24:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9A2C: .4byte gMapObjects
-_080C9A30: .4byte gOtherText_ItemfinderResponding
-_080C9A34: .4byte ExitItemfinder
- thumb_func_end DisplayItemRespondingMessageAndExitItemfinder
-
- thumb_func_start RotatePlayerAndExitItemfinder
-RotatePlayerAndExitItemfinder: @ 80C9A38
- 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, _080C9AB4 @ =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, _080C9AB8 @ =gMapObjects
- adds r0, r1
- bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080C9A78
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080C9AAE
-_080C9A78:
- ldr r1, _080C9ABC @ =gItemFinderDirections
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- adds r0, r1
- ldrb r0, [r0]
- bl SetPlayerDirectionTowardsItem
- 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 _080C9AAE
- ldr r1, _080C9AC0 @ =gOtherText_ItemfinderItemUnderfoot
- ldr r2, _080C9AC4 @ =ExitItemfinder
- adds r0, r5, 0
- movs r3, 0
- bl DisplayItemMessageOnField
-_080C9AAE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9AB4: .4byte gTasks + 0x8
-_080C9AB8: .4byte gMapObjects
-_080C9ABC: .4byte gItemFinderDirections
-_080C9AC0: .4byte gOtherText_ItemfinderItemUnderfoot
-_080C9AC4: .4byte ExitItemfinder
- thumb_func_end RotatePlayerAndExitItemfinder
-
- thumb_func_start ItemUseOutOfBattle_PokeblockCase
-ItemUseOutOfBattle_PokeblockCase: @ 80C9AC8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080C9AF4
- ldr r0, _080C9AF0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrb r1, [r1, 0xC]
- adds r0, r4, 0
- bl DisplayDadsAdviceCannotUseItemMessage
- b _080C9B2A
- .align 2, 0
-_080C9AF0: .4byte gTasks
-_080C9AF4:
- ldr r0, _080C9B14 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r2, 0xC
- ldrsh r0, [r1, r2]
- cmp r0, 0x1
- beq _080C9B18
- movs r0, 0
- bl sub_810BA7C
- adds r0, r4, 0
- bl ItemMenu_ConfirmNormalFade
- b _080C9B2A
- .align 2, 0
-_080C9B14: .4byte gTasks
-_080C9B18:
- ldr r1, _080C9B30 @ =gUnknown_0300485C
- ldr r0, _080C9B34 @ =sub_8080E28
- str r0, [r1]
- movs r0, 0x1
- bl sub_810BA7C
- adds r0, r5, 0
- bl ItemMenu_ConfirmComplexFade
-_080C9B2A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9B30: .4byte gUnknown_0300485C
-_080C9B34: .4byte sub_8080E28
- thumb_func_end ItemUseOutOfBattle_PokeblockCase
-
- thumb_func_start ItemUseOutOfBattle_CoinCase
-ItemUseOutOfBattle_CoinCase: @ 80C9B38
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _080C9B8C @ =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, _080C9B90 @ =gStringVar4
- ldr r1, _080C9B94 @ =gOtherText_Coins3
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r1, _080C9B98 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0xC
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080C9BA0
- movs r0, 0
- movs r1, 0xD
- movs r2, 0xD
- movs r3, 0x14
- bl MenuZeroFillWindowRect
- ldr r2, _080C9B9C @ =CleanUpItemMenuMessage
- adds r0, r5, 0
- adds r1, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
- b _080C9BAC
- .align 2, 0
-_080C9B8C: .4byte gStringVar1
-_080C9B90: .4byte gStringVar4
-_080C9B94: .4byte gOtherText_Coins3
-_080C9B98: .4byte gTasks
-_080C9B9C: .4byte CleanUpItemMenuMessage
-_080C9BA0:
- ldr r2, _080C9BB4 @ =CleanUpOverworldMessage
- adds r0, r5, 0
- adds r1, r4, 0
- movs r3, 0
- bl DisplayItemMessageOnField
-_080C9BAC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9BB4: .4byte CleanUpOverworldMessage
- thumb_func_end ItemUseOutOfBattle_CoinCase
-
- thumb_func_start sub_80C9BB8
-sub_80C9BB8: @ 80C9BB8
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080C9BD4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080C9BD0
- adds r0, r2, 0
- bl CleanUpItemMenuMessage
-_080C9BD0:
- pop {r0}
- bx r0
- .align 2, 0
-_080C9BD4: .4byte gMain
- thumb_func_end sub_80C9BB8
-
- thumb_func_start sub_80C9BD8
-sub_80C9BD8: @ 80C9BD8
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080C9BF4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080C9BF0
- adds r0, r2, 0
- bl CleanUpOverworldMessage
-_080C9BF0:
- pop {r0}
- bx r0
- .align 2, 0
-_080C9BF4: .4byte gMain
- thumb_func_end sub_80C9BD8
-
- thumb_func_start unref_sub_80C9BF8
-unref_sub_80C9BF8: @ 80C9BF8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080C9C3C @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0xC
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080C9C4C
- movs r0, 0
- movs r1, 0xD
- movs r2, 0xD
- movs r3, 0x14
- bl MenuZeroFillWindowRect
- ldr r4, _080C9C40 @ =gUnknown_083D61DC
- ldr r0, _080C9C44 @ =gScriptItemId
- ldrh r0, [r0]
- bl ItemId_GetSecondaryId
- lsls r0, 24
- lsrs r0, 22
- adds r0, r4
- ldr r1, [r0]
- ldr r2, _080C9C48 @ =sub_80C9BB8
- adds r0, r5, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
- b _080C9C68
- .align 2, 0
-_080C9C3C: .4byte gTasks
-_080C9C40: .4byte gUnknown_083D61DC
-_080C9C44: .4byte gScriptItemId
-_080C9C48: .4byte sub_80C9BB8
-_080C9C4C:
- ldr r4, _080C9C70 @ =gUnknown_083D61DC
- ldr r0, _080C9C74 @ =gScriptItemId
- ldrh r0, [r0]
- bl ItemId_GetSecondaryId
- lsls r0, 24
- lsrs r0, 22
- adds r0, r4
- ldr r1, [r0]
- ldr r2, _080C9C78 @ =sub_80C9BD8
- adds r0, r5, 0
- movs r3, 0
- bl DisplayItemMessageOnField
-_080C9C68:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9C70: .4byte gUnknown_083D61DC
-_080C9C74: .4byte gScriptItemId
-_080C9C78: .4byte sub_80C9BD8
- thumb_func_end unref_sub_80C9BF8
-
- thumb_func_start sub_80C9C7C
-sub_80C9C7C: @ 80C9C7C
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsPlayerFacingPlantedBerryTree
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080C9CE4
- ldr r1, _080C9CC8 @ =gUnknown_03005D00
- ldr r0, _080C9CCC @ =sub_80C9D00
- str r0, [r1]
- ldr r1, _080C9CD0 @ =gUnknown_0300485C
- ldr r0, _080C9CD4 @ =ExecuteItemUseFromBlackPalette
- str r0, [r1]
- ldr r1, _080C9CD8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r2, _080C9CDC @ =c2_exit_to_overworld_2_switch
- lsrs r1, r2, 16
- movs r3, 0
- strh r1, [r0, 0x18]
- strh r2, [r0, 0x1A]
- ldr r1, _080C9CE0 @ =HandleItemMenuPaletteFade
- str r1, [r0]
- movs r0, 0x1
- negs r0, r0
- str r3, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _080C9CF4
- .align 2, 0
-_080C9CC8: .4byte gUnknown_03005D00
-_080C9CCC: .4byte sub_80C9D00
-_080C9CD0: .4byte gUnknown_0300485C
-_080C9CD4: .4byte ExecuteItemUseFromBlackPalette
-_080C9CD8: .4byte gTasks
-_080C9CDC: .4byte c2_exit_to_overworld_2_switch
-_080C9CE0: .4byte HandleItemMenuPaletteFade
-_080C9CE4:
- ldr r0, _080C9CFC @ =gScriptItemId
- ldrh r0, [r0]
- bl ItemId_GetFieldFunc
- adds r1, r0, 0
- adds r0, r4, 0
- bl _call_via_r1
-_080C9CF4:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9CFC: .4byte gScriptItemId
- thumb_func_end sub_80C9C7C
-
- thumb_func_start sub_80C9D00
-sub_80C9D00: @ 80C9D00
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080C9D28 @ =gScriptItemId
- ldrh r0, [r0]
- movs r1, 0x1
- bl RemoveBagItem
- bl ScriptContext2_Enable
- ldr r0, _080C9D2C @ =gUnknown_081A1654
- bl ScriptContext1_SetupScript
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9D28: .4byte gScriptItemId
-_080C9D2C: .4byte gUnknown_081A1654
- thumb_func_end sub_80C9D00
-
- thumb_func_start ItemUseOutOfBattle_WailmerPail
-ItemUseOutOfBattle_WailmerPail: @ 80C9D30
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl TryToWaterBerryTree
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080C9D58
- ldr r1, _080C9D50 @ =gUnknown_03005D00
- ldr r0, _080C9D54 @ =sub_80C9D74
- str r0, [r1]
- adds r0, r4, 0
- bl SetUpItemUseOnFieldCallback
- b _080C9D6A
- .align 2, 0
-_080C9D50: .4byte gUnknown_03005D00
-_080C9D54: .4byte sub_80C9D74
-_080C9D58:
- ldr r0, _080C9D70 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrb r1, [r1, 0xC]
- adds r0, r4, 0
- bl DisplayDadsAdviceCannotUseItemMessage
-_080C9D6A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9D70: .4byte gTasks
- thumb_func_end ItemUseOutOfBattle_WailmerPail
-
- thumb_func_start sub_80C9D74
-sub_80C9D74: @ 80C9D74
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl ScriptContext2_Enable
- ldr r0, _080C9D94 @ =gUnknown_081A168F
- bl ScriptContext1_SetupScript
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9D94: .4byte gUnknown_081A168F
- thumb_func_end sub_80C9D74
-
- thumb_func_start sub_80C9D98
-sub_80C9D98: @ 80C9D98
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9DAC @ =gUnknown_02038561
- movs r1, 0
- strb r1, [r2]
- bl ItemMenu_ConfirmNormalFade
- pop {r0}
- bx r0
- .align 2, 0
-_080C9DAC: .4byte gUnknown_02038561
- thumb_func_end sub_80C9D98
-
- thumb_func_start ItemUseOutOfBattle_Medicine
-ItemUseOutOfBattle_Medicine: @ 80C9DB0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9DC4 @ =gUnknown_03004AE4
- ldr r1, _080C9DC8 @ =UseMedicine
- str r1, [r2]
- bl sub_80C9D98
- pop {r0}
- bx r0
- .align 2, 0
-_080C9DC4: .4byte gUnknown_03004AE4
-_080C9DC8: .4byte UseMedicine
- thumb_func_end ItemUseOutOfBattle_Medicine
-
- thumb_func_start ItemUseOutOfBattle_SacredAsh
-ItemUseOutOfBattle_SacredAsh: @ 80C9DCC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _080C9DDC @ =gLastFieldPokeMenuOpened
- movs r0, 0
- strb r0, [r1]
- movs r5, 0
- b _080C9DE6
- .align 2, 0
-_080C9DDC: .4byte gLastFieldPokeMenuOpened
-_080C9DE0:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_080C9DE6:
- cmp r5, 0x5
- bhi _080C9E10
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _080C9E28 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _080C9DE0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _080C9DE0
- ldr r0, _080C9E2C @ =gLastFieldPokeMenuOpened
- strb r5, [r0]
-_080C9E10:
- ldr r1, _080C9E30 @ =gUnknown_03004AE4
- ldr r0, _080C9E34 @ =sub_8070048
- str r0, [r1]
- ldr r1, _080C9E38 @ =gUnknown_02038561
- movs r0, 0x4
- strb r0, [r1]
- adds r0, r6, 0
- bl ItemMenu_ConfirmNormalFade
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9E28: .4byte gPlayerParty
-_080C9E2C: .4byte gLastFieldPokeMenuOpened
-_080C9E30: .4byte gUnknown_03004AE4
-_080C9E34: .4byte sub_8070048
-_080C9E38: .4byte gUnknown_02038561
- thumb_func_end ItemUseOutOfBattle_SacredAsh
-
- thumb_func_start ItemUseOutOfBattle_PPRecovery
-ItemUseOutOfBattle_PPRecovery: @ 80C9E3C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9E50 @ =gUnknown_03004AE4
- ldr r1, _080C9E54 @ =DoPPRecoveryItemEffect
- str r1, [r2]
- bl sub_80C9D98
- pop {r0}
- bx r0
- .align 2, 0
-_080C9E50: .4byte gUnknown_03004AE4
-_080C9E54: .4byte DoPPRecoveryItemEffect
- thumb_func_end ItemUseOutOfBattle_PPRecovery
-
- thumb_func_start ItemUseOutOfBattle_PPUp
-ItemUseOutOfBattle_PPUp: @ 80C9E58
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9E6C @ =gUnknown_03004AE4
- ldr r1, _080C9E70 @ =DoPPUpItemEffect
- str r1, [r2]
- bl sub_80C9D98
- pop {r0}
- bx r0
- .align 2, 0
-_080C9E6C: .4byte gUnknown_03004AE4
-_080C9E70: .4byte DoPPUpItemEffect
- thumb_func_end ItemUseOutOfBattle_PPUp
-
- thumb_func_start ItemUseOutOfBattle_RareCandy
-ItemUseOutOfBattle_RareCandy: @ 80C9E74
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9E88 @ =gUnknown_03004AE4
- ldr r1, _080C9E8C @ =DoRareCandyItemEffect
- str r1, [r2]
- bl sub_80C9D98
- pop {r0}
- bx r0
- .align 2, 0
-_080C9E88: .4byte gUnknown_03004AE4
-_080C9E8C: .4byte DoRareCandyItemEffect
- thumb_func_end ItemUseOutOfBattle_RareCandy
-
- thumb_func_start ItemUseOutOfBattle_TMHM
-ItemUseOutOfBattle_TMHM: @ 80C9E90
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0
- movs r1, 0xD
- movs r2, 0xD
- movs r3, 0x14
- bl MenuZeroFillWindowRect
- ldr r0, _080C9EBC @ =gScriptItemId
- ldrh r1, [r0]
- movs r0, 0xA9
- lsls r0, 1
- cmp r1, r0
- bls _080C9EC8
- ldr r1, _080C9EC0 @ =gOtherText_BootedHM
- ldr r2, _080C9EC4 @ =sub_80C9EE4
- adds r0, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
- b _080C9ED4
- .align 2, 0
-_080C9EBC: .4byte gScriptItemId
-_080C9EC0: .4byte gOtherText_BootedHM
-_080C9EC4: .4byte sub_80C9EE4
-_080C9EC8:
- ldr r1, _080C9EDC @ =gOtherText_BootedTM
- ldr r2, _080C9EE0 @ =sub_80C9EE4
- adds r0, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
-_080C9ED4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9EDC: .4byte gOtherText_BootedTM
-_080C9EE0: .4byte sub_80C9EE4
- thumb_func_end ItemUseOutOfBattle_TMHM
-
- thumb_func_start sub_80C9EE4
-sub_80C9EE4: @ 80C9EE4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x2
- bl PlaySE
- ldr r1, _080C9F08 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C9F0C @ =sub_80C9F10
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9F08: .4byte gTasks
-_080C9F0C: .4byte sub_80C9F10
- thumb_func_end sub_80C9EE4
-
- thumb_func_start sub_80C9F10
-sub_80C9F10: @ 80C9F10
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080C9F64 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080C9F2A
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080C9F5C
-_080C9F2A:
- ldr r4, _080C9F68 @ =gStringVar1
- ldr r0, _080C9F6C @ =gScriptItemId
- ldrh r0, [r0]
- bl ItemIdToBattleMoveId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xD
- muls r1, r0
- ldr r0, _080C9F70 @ =gMoveNames
- adds r1, r0
- adds r0, r4, 0
- bl StringCopy
- ldr r4, _080C9F74 @ =gStringVar4
- ldr r1, _080C9F78 @ =gOtherText_ContainsMove
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r2, _080C9F7C @ =sub_80C9F80
- adds r0, r5, 0
- adds r1, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
-_080C9F5C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9F64: .4byte gMain
-_080C9F68: .4byte gStringVar1
-_080C9F6C: .4byte gScriptItemId
-_080C9F70: .4byte gMoveNames
-_080C9F74: .4byte gStringVar4
-_080C9F78: .4byte gOtherText_ContainsMove
-_080C9F7C: .4byte sub_80C9F80
- thumb_func_end sub_80C9F10
-
- thumb_func_start sub_80C9F80
-sub_80C9F80: @ 80C9F80
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x7
- movs r1, 0x7
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _080C9FB8 @ =gBGTilemapBuffers + 0x800
- movs r1, 0x4
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- movs r1, 0x8
- movs r2, 0x8
- movs r3, 0x5
- bl sub_80A3FA0
- ldr r1, _080C9FBC @ =gUnknown_083D61F4
- adds r0, r4, 0
- bl sub_80F914C
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9FB8: .4byte gBGTilemapBuffers + 0x800
-_080C9FBC: .4byte gUnknown_083D61F4
- thumb_func_end sub_80C9F80
-
- thumb_func_start sub_80C9FC0
-sub_80C9FC0: @ 80C9FC0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9FD4 @ =gUnknown_03004AE4
- ldr r1, _080C9FD8 @ =TeachMonTMMove
- str r1, [r2]
- bl sub_80C9D98
- pop {r0}
- bx r0
- .align 2, 0
-_080C9FD4: .4byte gUnknown_03004AE4
-_080C9FD8: .4byte TeachMonTMMove
- thumb_func_end sub_80C9FC0
-
- thumb_func_start sub_80C9FDC
-sub_80C9FDC: @ 80C9FDC
- push {r4,lr}
- ldr r4, _080CA004 @ =gScriptItemId
- ldrh r0, [r4]
- movs r1, 0x1
- bl RemoveBagItem
- bl sub_80A3E0C
- ldrh r0, [r4]
- ldr r1, _080CA008 @ =gStringVar2
- bl CopyItemName
- ldr r0, _080CA00C @ =gStringVar4
- ldr r1, _080CA010 @ =gOtherText_UsedItem
- bl StringExpandPlaceholders
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA004: .4byte gScriptItemId
-_080CA008: .4byte gStringVar2
-_080CA00C: .4byte gStringVar4
-_080CA010: .4byte gOtherText_UsedItem
- thumb_func_end sub_80C9FDC
-
- thumb_func_start ItemUseOutOfBattle_Repel
-ItemUseOutOfBattle_Repel: @ 80CA014
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, _080CA050 @ =0x00004021
- adds r0, r5, 0
- bl VarGet
- lsls r0, 16
- cmp r0, 0
- bne _080CA060
- ldr r0, _080CA054 @ =gScriptItemId
- ldrh r0, [r0]
- bl ItemId_GetHoldEffectParam
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl VarSet
- bl sub_80C9FDC
- ldr r1, _080CA058 @ =gStringVar4
- ldr r2, _080CA05C @ =CleanUpItemMenuMessage
- adds r0, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
- b _080CA06C
- .align 2, 0
-_080CA050: .4byte 0x00004021
-_080CA054: .4byte gScriptItemId
-_080CA058: .4byte gStringVar4
-_080CA05C: .4byte CleanUpItemMenuMessage
-_080CA060:
- ldr r1, _080CA074 @ =gOtherText_RepelLingers
- ldr r2, _080CA078 @ =CleanUpItemMenuMessage
- adds r0, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
-_080CA06C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA074: .4byte gOtherText_RepelLingers
-_080CA078: .4byte CleanUpItemMenuMessage
- thumb_func_end ItemUseOutOfBattle_Repel
-
- thumb_func_start sub_80CA07C
-sub_80CA07C: @ 80CA07C
- push {lr}
- bl sub_80A3E0C
- ldr r0, _080CA090 @ =gScriptItemId
- ldrh r0, [r0]
- ldr r1, _080CA094 @ =gStringVar2
- bl CopyItemName
- pop {r0}
- bx r0
- .align 2, 0
-_080CA090: .4byte gScriptItemId
-_080CA094: .4byte gStringVar2
- thumb_func_end sub_80CA07C
-
- thumb_func_start sub_80CA098
-sub_80CA098: @ 80CA098
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080CA0D0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080CA0C8
- movs r0, 0x75
- bl PlaySE
- ldr r1, _080CA0D4 @ =gStringVar4
- ldr r2, _080CA0D8 @ =CleanUpItemMenuMessage
- adds r0, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
-_080CA0C8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA0D0: .4byte gTasks
-_080CA0D4: .4byte gStringVar4
-_080CA0D8: .4byte CleanUpItemMenuMessage
- thumb_func_end sub_80CA098
-
- thumb_func_start ItemUseOutOfBattle_BlackWhiteFlute
-ItemUseOutOfBattle_BlackWhiteFlute: @ 80CA0DC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, _080CA10C @ =gScriptItemId
- ldrh r0, [r0]
- cmp r0, 0x2B
- bne _080CA124
- ldr r0, _080CA110 @ =0x0000084d
- bl FlagSet
- ldr r0, _080CA114 @ =0x0000084e
- bl FlagReset
- bl sub_80CA07C
- ldr r0, _080CA118 @ =gStringVar4
- ldr r1, _080CA11C @ =gOtherText_UsedFlute
- bl StringExpandPlaceholders
- ldr r1, _080CA120 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- b _080CA146
- .align 2, 0
-_080CA10C: .4byte gScriptItemId
-_080CA110: .4byte 0x0000084d
-_080CA114: .4byte 0x0000084e
-_080CA118: .4byte gStringVar4
-_080CA11C: .4byte gOtherText_UsedFlute
-_080CA120: .4byte gTasks
-_080CA124:
- cmp r0, 0x2A
- bne _080CA152
- ldr r0, _080CA158 @ =0x0000084e
- bl FlagSet
- ldr r0, _080CA15C @ =0x0000084d
- bl FlagReset
- bl sub_80CA07C
- ldr r0, _080CA160 @ =gStringVar4
- ldr r1, _080CA164 @ =gOtherText_UsedRepel
- bl StringExpandPlaceholders
- ldr r1, _080CA168 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
-_080CA146:
- lsls r0, 3
- adds r0, r1
- ldr r1, _080CA16C @ =sub_80CA098
- str r1, [r0]
- movs r1, 0
- strh r1, [r0, 0x26]
-_080CA152:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA158: .4byte 0x0000084e
-_080CA15C: .4byte 0x0000084d
-_080CA160: .4byte gStringVar4
-_080CA164: .4byte gOtherText_UsedRepel
-_080CA168: .4byte gTasks
-_080CA16C: .4byte sub_80CA098
- thumb_func_end ItemUseOutOfBattle_BlackWhiteFlute
-
- thumb_func_start task08_080A1C44
-task08_080A1C44: @ 80CA170
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl player_avatar_init_params_reset
- bl sub_80878A8
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end task08_080A1C44
-
- thumb_func_start sub_80CA18C
-sub_80CA18C: @ 80CA18C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8053014
- bl sub_80C9FDC
- ldr r1, _080CA1BC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x8]
- ldr r1, _080CA1C0 @ =gStringVar4
- ldr r2, _080CA1C4 @ =task08_080A1C44
- adds r0, r4, 0
- movs r3, 0
- bl DisplayItemMessageOnField
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA1BC: .4byte gTasks
-_080CA1C0: .4byte gStringVar4
-_080CA1C4: .4byte task08_080A1C44
- thumb_func_end sub_80CA18C
-
- thumb_func_start sub_80CA1C8
-sub_80CA1C8: @ 80CA1C8
- push {lr}
- ldr r0, _080CA1D8 @ =gMapHeader
- ldrb r0, [r0, 0x17]
- cmp r0, 0x4
- beq _080CA1DC
- movs r0, 0
- b _080CA1DE
- .align 2, 0
-_080CA1D8: .4byte gMapHeader
-_080CA1DC:
- movs r0, 0x1
-_080CA1DE:
- pop {r1}
- bx r1
- thumb_func_end sub_80CA1C8
-
- thumb_func_start ItemUseOutOfBattle_EscapeRope
-ItemUseOutOfBattle_EscapeRope: @ 80CA1E4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_80CA1C8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080CA20C
- ldr r1, _080CA204 @ =gUnknown_03005D00
- ldr r0, _080CA208 @ =sub_80CA18C
- str r0, [r1]
- adds r0, r4, 0
- bl SetUpItemUseOnFieldCallback
- b _080CA21E
- .align 2, 0
-_080CA204: .4byte gUnknown_03005D00
-_080CA208: .4byte sub_80CA18C
-_080CA20C:
- ldr r0, _080CA224 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrb r1, [r1, 0xC]
- adds r0, r4, 0
- bl DisplayDadsAdviceCannotUseItemMessage
-_080CA21E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA224: .4byte gTasks
- thumb_func_end ItemUseOutOfBattle_EscapeRope
-
- thumb_func_start ItemUseOutOfBattle_EvolutionStone
-ItemUseOutOfBattle_EvolutionStone: @ 80CA228
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CA23C @ =gUnknown_03004AE4
- ldr r1, _080CA240 @ =DoEvolutionStoneItemEffect
- str r1, [r2]
- bl sub_80C9D98
- pop {r0}
- bx r0
- .align 2, 0
-_080CA23C: .4byte gUnknown_03004AE4
-_080CA240: .4byte DoEvolutionStoneItemEffect
- thumb_func_end ItemUseOutOfBattle_EvolutionStone
-
- thumb_func_start ItemUseInBattle_PokeBall
-ItemUseInBattle_PokeBall: @ 80CA244
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl PlayerPartyAndPokemonStorageFull
- lsls r0, 24
- cmp r0, 0
- bne _080CA26C
- ldr r0, _080CA268 @ =gScriptItemId
- ldrh r0, [r0]
- movs r1, 0x1
- bl RemoveBagItem
- adds r0, r4, 0
- bl sub_80A7094
- b _080CA284
- .align 2, 0
-_080CA268: .4byte gScriptItemId
-_080CA26C:
- movs r0, 0
- movs r1, 0xD
- movs r2, 0xD
- movs r3, 0x14
- bl MenuZeroFillWindowRect
- ldr r1, _080CA28C @ =gOtherText_BoxIsFull
- ldr r2, _080CA290 @ =CleanUpItemMenuMessage
- adds r0, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
-_080CA284:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA28C: .4byte gOtherText_BoxIsFull
-_080CA290: .4byte CleanUpItemMenuMessage
- thumb_func_end ItemUseInBattle_PokeBall
-
- thumb_func_start sub_80CA294
-sub_80CA294: @ 80CA294
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080CA2B8 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080CA2AE
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080CA2B4
-_080CA2AE:
- adds r0, r2, 0
- bl sub_80A7094
-_080CA2B4:
- pop {r0}
- bx r0
- .align 2, 0
-_080CA2B8: .4byte gMain
- thumb_func_end sub_80CA294
-
- thumb_func_start sub_80CA2BC
-sub_80CA2BC: @ 80CA2BC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080CA304 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080CA2FC
- movs r0, 0x1
- bl PlaySE
- ldr r4, _080CA308 @ =gScriptItemId
- ldrh r0, [r4]
- movs r1, 0x1
- bl RemoveBagItem
- ldrh r0, [r4]
- bl sub_803F378
- adds r1, r0, 0
- ldr r2, _080CA30C @ =sub_80CA294
- adds r0, r5, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
-_080CA2FC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA304: .4byte gTasks
-_080CA308: .4byte gScriptItemId
-_080CA30C: .4byte sub_80CA294
- thumb_func_end sub_80CA2BC
-
- thumb_func_start ItemUseInBattle_StatIncrease
-ItemUseInBattle_StatIncrease: @ 80CA310
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080CA35C @ =gUnknown_02024A6A
- ldr r0, _080CA360 @ =gUnknown_02024E6C
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r4, [r0]
- movs r0, 0
- movs r1, 0xD
- movs r2, 0xD
- movs r3, 0x14
- bl MenuZeroFillWindowRect
- movs r0, 0x64
- muls r0, r4
- ldr r1, _080CA364 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080CA368 @ =gScriptItemId
- ldrh r1, [r1]
- lsls r4, 24
- lsrs r4, 24
- adds r2, r4, 0
- movs r3, 0
- bl ExecuteTableBasedItemEffect_
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _080CA374
- ldr r1, _080CA36C @ =gOtherText_WontHaveAnyEffect
- ldr r2, _080CA370 @ =CleanUpItemMenuMessage
- adds r0, r5, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
- b _080CA384
- .align 2, 0
-_080CA35C: .4byte gUnknown_02024A6A
-_080CA360: .4byte gUnknown_02024E6C
-_080CA364: .4byte gPlayerParty
-_080CA368: .4byte gScriptItemId
-_080CA36C: .4byte gOtherText_WontHaveAnyEffect
-_080CA370: .4byte CleanUpItemMenuMessage
-_080CA374:
- ldr r0, _080CA38C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _080CA390 @ =sub_80CA2BC
- str r0, [r1]
- strh r2, [r1, 0x26]
-_080CA384:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA38C: .4byte gTasks
-_080CA390: .4byte sub_80CA2BC
- thumb_func_end ItemUseInBattle_StatIncrease
-
- thumb_func_start sub_80CA394
-sub_80CA394: @ 80CA394
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080CA3BC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080CA3B4
- bl sub_8094E4C
- bl gpu_pal_allocator_reset__manage_upper_four
- adds r0, r4, 0
- bl DestroyTask
-_080CA3B4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA3BC: .4byte gPaletteFade
- thumb_func_end sub_80CA394
-
- thumb_func_start sub_80CA3C0
-sub_80CA3C0: @ 80CA3C0
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CA3EC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _080CA3F0 @ =sub_80CA394
- str r0, [r1]
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080CA3EC: .4byte gTasks
-_080CA3F0: .4byte sub_80CA394
- thumb_func_end sub_80CA3C0
-
- thumb_func_start ItemUseInBattle_Medicine
-ItemUseInBattle_Medicine: @ 80CA3F4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CA408 @ =gUnknown_03004AE4
- ldr r1, _080CA40C @ =UseMedicine
- str r1, [r2]
- bl sub_80CA3C0
- pop {r0}
- bx r0
- .align 2, 0
-_080CA408: .4byte gUnknown_03004AE4
-_080CA40C: .4byte UseMedicine
- thumb_func_end ItemUseInBattle_Medicine
-
- thumb_func_start unref_sub_80CA410
-unref_sub_80CA410: @ 80CA410
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CA424 @ =gUnknown_03004AE4
- ldr r1, _080CA428 @ =sub_8070048
- str r1, [r2]
- bl sub_80CA3C0
- pop {r0}
- bx r0
- .align 2, 0
-_080CA424: .4byte gUnknown_03004AE4
-_080CA428: .4byte sub_8070048
- thumb_func_end unref_sub_80CA410
-
- thumb_func_start ItemUseInBattle_PPRecovery
-ItemUseInBattle_PPRecovery: @ 80CA42C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CA440 @ =gUnknown_03004AE4
- ldr r1, _080CA444 @ =DoPPRecoveryItemEffect
- str r1, [r2]
- bl sub_80CA3C0
- pop {r0}
- bx r0
- .align 2, 0
-_080CA440: .4byte gUnknown_03004AE4
-_080CA444: .4byte DoPPRecoveryItemEffect
- thumb_func_end ItemUseInBattle_PPRecovery
-
- thumb_func_start unref_sub_80CA448
-unref_sub_80CA448: @ 80CA448
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0
- movs r1, 0xD
- movs r2, 0xD
- movs r3, 0x14
- bl MenuZeroFillWindowRect
- ldr r4, _080CA494 @ =gScriptItemId
- ldrh r1, [r4]
- movs r0, 0
- movs r2, 0
- bl ExecuteTableBasedItemEffect__
- lsls r0, 24
- cmp r0, 0
- bne _080CA4AC
- ldrh r0, [r4]
- movs r1, 0x1
- bl RemoveBagItem
- ldr r0, _080CA498 @ =gPlayerParty
- ldr r1, _080CA49C @ =gStringVar1
- bl GetMonNickname
- ldr r4, _080CA4A0 @ =gStringVar4
- ldr r1, _080CA4A4 @ =gOtherText_SnapConfusion
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r2, _080CA4A8 @ =sub_80A7094
- adds r0, r5, 0
- adds r1, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
- b _080CA4B8
- .align 2, 0
-_080CA494: .4byte gScriptItemId
-_080CA498: .4byte gPlayerParty
-_080CA49C: .4byte gStringVar1
-_080CA4A0: .4byte gStringVar4
-_080CA4A4: .4byte gOtherText_SnapConfusion
-_080CA4A8: .4byte sub_80A7094
-_080CA4AC:
- ldr r1, _080CA4C0 @ =gOtherText_WontHaveAnyEffect
- ldr r2, _080CA4C4 @ =CleanUpItemMenuMessage
- adds r0, r5, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
-_080CA4B8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA4C0: .4byte gOtherText_WontHaveAnyEffect
-_080CA4C4: .4byte CleanUpItemMenuMessage
- thumb_func_end unref_sub_80CA448
-
- thumb_func_start ItemUseInBattle_Escape
-ItemUseInBattle_Escape: @ 80CA4C8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0
- movs r1, 0xD
- movs r2, 0xD
- movs r3, 0x14
- bl MenuZeroFillWindowRect
- ldr r0, _080CA4F8 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _080CA504
- bl sub_80C9FDC
- ldr r1, _080CA4FC @ =gStringVar4
- ldr r2, _080CA500 @ =sub_80A7094
- adds r0, r4, 0
- movs r3, 0x1
- bl DisplayItemMessageOnField
- b _080CA516
- .align 2, 0
-_080CA4F8: .4byte gBattleTypeFlags
-_080CA4FC: .4byte gStringVar4
-_080CA500: .4byte sub_80A7094
-_080CA504:
- ldr r0, _080CA51C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrb r1, [r1, 0xC]
- adds r0, r4, 0
- bl DisplayDadsAdviceCannotUseItemMessage
-_080CA516:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA51C: .4byte gTasks
- thumb_func_end ItemUseInBattle_Escape
-
- thumb_func_start ItemUseOutOfBattle_EnigmaBerry
-ItemUseOutOfBattle_EnigmaBerry: @ 80CA520
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080CA544 @ =gScriptItemId
- ldrh r0, [r0]
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- cmp r0, 0x14
- bls _080CA53A
- b _080CA62C
-_080CA53A:
- lsls r0, 2
- ldr r1, _080CA548 @ =_080CA54C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CA544: .4byte gScriptItemId
-_080CA548: .4byte _080CA54C
- .align 2, 0
-_080CA54C:
- .4byte _080CA5D8
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA62C
- .4byte _080CA62C
- .4byte _080CA5BC
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA5A0
- .4byte _080CA62C
- .4byte _080CA5F4
- .4byte _080CA5F4
- .4byte _080CA610
-_080CA5A0:
- ldr r0, _080CA5B8 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x26]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_Medicine
- b _080CA640
- .align 2, 0
-_080CA5B8: .4byte gTasks
-_080CA5BC:
- ldr r0, _080CA5D4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x26]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_SacredAsh
- b _080CA640
- .align 2, 0
-_080CA5D4: .4byte gTasks
-_080CA5D8:
- ldr r0, _080CA5F0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x26]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_RareCandy
- b _080CA640
- .align 2, 0
-_080CA5F0: .4byte gTasks
-_080CA5F4:
- ldr r0, _080CA60C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x26]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_PPUp
- b _080CA640
- .align 2, 0
-_080CA60C: .4byte gTasks
-_080CA610:
- ldr r0, _080CA628 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x26]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_PPRecovery
- b _080CA640
- .align 2, 0
-_080CA628: .4byte gTasks
-_080CA62C:
- ldr r0, _080CA648 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x4
- strh r0, [r1, 0x26]
- adds r0, r4, 0
- bl ItemUseOutOfBattle_CannotUse
-_080CA640:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA648: .4byte gTasks
- thumb_func_end ItemUseOutOfBattle_EnigmaBerry
-
- thumb_func_start ItemUseInBattle_EnigmaBerry
-ItemUseInBattle_EnigmaBerry: @ 80CA64C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080CA66C @ =gScriptItemId
- ldrh r0, [r0]
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x15
- bhi _080CA6E4
- lsls r0, 2
- ldr r1, _080CA670 @ =_080CA674
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CA66C: .4byte gScriptItemId
-_080CA670: .4byte _080CA674
- .align 2, 0
-_080CA674:
- .4byte _080CA6CC
- .4byte _080CA6E4
- .4byte _080CA6D4
- .4byte _080CA6D4
- .4byte _080CA6D4
- .4byte _080CA6D4
- .4byte _080CA6D4
- .4byte _080CA6D4
- .4byte _080CA6D4
- .4byte _080CA6D4
- .4byte _080CA6E4
- .4byte _080CA6D4
- .4byte _080CA6E4
- .4byte _080CA6E4
- .4byte _080CA6E4
- .4byte _080CA6E4
- .4byte _080CA6E4
- .4byte _080CA6E4
- .4byte _080CA6E4
- .4byte _080CA6E4
- .4byte _080CA6E4
- .4byte _080CA6DC
-_080CA6CC:
- adds r0, r4, 0
- bl ItemUseInBattle_StatIncrease
- b _080CA6EA
-_080CA6D4:
- adds r0, r4, 0
- bl ItemUseInBattle_Medicine
- b _080CA6EA
-_080CA6DC:
- adds r0, r4, 0
- bl ItemUseInBattle_PPRecovery
- b _080CA6EA
-_080CA6E4:
- adds r0, r4, 0
- bl ItemUseOutOfBattle_CannotUse
-_080CA6EA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ItemUseInBattle_EnigmaBerry
-
- thumb_func_start ItemUseOutOfBattle_CannotUse
-ItemUseOutOfBattle_CannotUse: @ 80CA6F0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CA70C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrb r1, [r1, 0xC]
- bl DisplayDadsAdviceCannotUseItemMessage
- pop {r0}
- bx r0
- .align 2, 0
-_080CA70C: .4byte gTasks
- thumb_func_end ItemUseOutOfBattle_CannotUse
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/weather.s b/data/field_screeneffect.s
index 44ef8a8da..44ef8a8da 100644
--- a/data/weather.s
+++ b/data/field_screeneffect.s
diff --git a/include/berry.h b/include/berry.h
index f17799870..0013b4dba 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -18,8 +18,8 @@ bool32 IsEnigmaBerryValid(void);
const struct Berry *GetBerryInfo(u8 berry);
struct BerryTree *GetBerryTreeInfo(u8 id);
bool32 FieldObjectInteractionWaterBerryTree(void);
-bool32 IsPlayerFacingPlantedBerryTree(void);
-u8 TryToWaterBerryTree(void);
+bool8 IsPlayerFacingPlantedBerryTree(void);
+bool8 TryToWaterBerryTree(void);
void ClearBerryTrees(void);
bool32 BerryTreeGrow(struct BerryTree *tree);
void BerryTreeTimeUpdate(int time);
diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h
index 5498bde12..daae74ae9 100644
--- a/include/field_map_obj_helpers.h
+++ b/include/field_map_obj_helpers.h
@@ -7,5 +7,6 @@ void FreezeMapObjectsExceptOne(u8);
void UnfreezeMapObjects(void);
void sub_806487C(struct Sprite *sprite, bool8 invisible);
void sub_8064990(u8, u8);
+void UnfreezeMapObject(struct MapObject *mapObject);
#endif
diff --git a/include/weather.h b/include/field_screeneffect.h
index af07c970d..af07c970d 100644
--- a/include/weather.h
+++ b/include/field_screeneffect.h
diff --git a/include/pokemon.h b/include/pokemon.h
index 3987bada6..e0ad7136c 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -455,4 +455,6 @@ u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex);
void sub_8040B1C(void *);
+u8 *sub_803F378(u16 itemId);
+
#endif // GUARD_POKEMON_H
diff --git a/ld_script.txt b/ld_script.txt
index 03b434ea1..91a6d01de 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -121,10 +121,10 @@ SECTIONS {
asm/rom5.o(.text);
asm/battle_anim_807B69C.o(.text);
src/title_screen.o(.text);
- src/weather.o(.text);
- asm/weather.o(.text);
- src/field_doortransition.o(.text);
- asm/field_doortransition.o(.text);
+ src/field_screeneffect.o(.text);
+ asm/field_screeneffect.o(.text);
+ src/field_fadetransition.o(.text);
+ asm/field_fadetransition.o(.text);
asm/rom_8080874.o(.text);
src/battle_setup.o(.text);
asm/cable_club.o(.text);
@@ -186,7 +186,6 @@ SECTIONS {
src/safari_zone.o(.text);
asm/contest_link_80C857C.o(.text);
src/item_use.o(.text);
- asm/item_use.o(.text);
asm/battle_anim_80CA710.o(.text);
src/bike.o(.text);
asm/easy_chat.o(.text);
@@ -366,7 +365,7 @@ SECTIONS {
data/task.o(.rodata);
data/battle_anim_807B69C.o(.rodata);
src/title_screen.o(.rodata);
- data/weather.o(.rodata);
+ data/field_screeneffect.o(.rodata);
data/rom_8080874.o(.rodata);
src/battle_setup.o(.rodata);
data/cable_club.o(.rodata);
diff --git a/src/battle_setup.c b/src/battle_setup.c
index c9839bb87..a8f94baed 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -20,7 +20,7 @@
#include "task.h"
#include "text.h"
#include "trainer.h"
-#include "weather.h"
+#include "field_screeneffect.h"
#include "map_constants.h"
#include "opponent_constants.h"
#include "script_pokemon_80C4.h"
diff --git a/src/berry.c b/src/berry.c
index e81c7a5ff..99c9f6342 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -897,7 +897,7 @@ bool32 FieldObjectInteractionWaterBerryTree(void)
return TRUE;
}
-bool32 IsPlayerFacingPlantedBerryTree(void)
+bool8 IsPlayerFacingPlantedBerryTree(void)
{
if (GetFieldObjectScriptPointerForComparison() == &BerryTreeScript
&& GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0)
@@ -906,10 +906,10 @@ bool32 IsPlayerFacingPlantedBerryTree(void)
return FALSE;
}
-u8 TryToWaterBerryTree(void)
+bool8 TryToWaterBerryTree(void)
{
if (GetFieldObjectScriptPointerForComparison() != &BerryTreeScript)
- return 0;
+ return FALSE;
else
return FieldObjectInteractionWaterBerryTree();
}
diff --git a/src/field_effect.c b/src/field_effect.c
index b0c028c8d..4727aba54 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -2,7 +2,7 @@
#include "field_effect.h"
#include "sprite.h"
#include "text.h"
-#include "weather.h"
+#include "field_screeneffect.h"
typedef bool8 (*FldEffCmd)(u8 **, u32 *);
diff --git a/src/field_doortransition.c b/src/field_fadetransition.c
index 261ed46c9..3f86299df 100644
--- a/src/field_doortransition.c
+++ b/src/field_fadetransition.c
@@ -3,7 +3,7 @@
#include "global.fieldmap.h"
#include "script.h"
#include "task.h"
-#include "weather.h"
+#include "field_screeneffect.h"
void palette_bg_fill_white(void);
void palette_bg_fill_black(void);
diff --git a/src/weather.c b/src/field_screeneffect.c
index 5d9553836..6cae0c18a 100644
--- a/src/weather.c
+++ b/src/field_screeneffect.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "weather.h"
+#include "field_screeneffect.h"
#include "asm.h"
#include "palette.h"
#include "sprite.h"
diff --git a/src/item_use.c b/src/item_use.c
index b68b72b26..309fa5b98 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -2,8 +2,9 @@
#include "asm.h"
#include "event_data.h"
#include "field_player_avatar.h"
-#include "field_player_avatar.h"
+#include "field_map_obj_helpers.h"
#include "item.h"
+#include "items.h"
#include "mail.h"
#include "map_obj_lock.h"
#include "menu.h"
@@ -15,44 +16,103 @@
#include "sound.h"
#include "string_util.h"
#include "task.h"
-#include "weather.h"
+#include "field_screeneffect.h"
#include "fieldmap.h"
+#include "coins.h"
+#include "berry.h"
+#include "vars.h"
+#include "battle.h"
extern void (* const gExitToOverworldFuncList[])();
extern void (* gUnknown_03005D00)(u8);
extern void (* gUnknown_0300485C)(void);
+extern void (* gUnknown_03004AE4)(u8);
+extern void (* const gUnknown_083D61F4[])();
+
+extern u8 *gUnknown_083D61DC[];
+
+extern u8 gMoveNames[][13];
+
+extern u8 gUnknown_02038561;
+extern u8 gLastFieldPokeMenuOpened;
+extern u8 gUnknown_02024E6C;
+
+extern u8 gItemFinderDirections[];
+extern u8 gUnknown_081A1654[];
+extern u8 gUnknown_081A168F[];
+
+extern u16 gUnknown_02024A6A[];
extern void HandleItemMenuPaletteFade(u8);
extern void ExecuteItemUseFromBlackPalette(void);
extern void DisplayItemMessageOnField(u8, u8*, TaskFunc, u16);
extern void CleanUpItemMenuMessage(u8);
extern void CleanUpOverworldMessage(u8);
-extern void ItemUseOutOfBattle_TMHM(u8);
-extern void ItemUseOutOfBattle_EvolutionStone(u8);
extern void ItemUseOnFieldCB_Bike(u8);
extern void ItemUseOnFieldCB_Rod(u8);
extern void ItemUseOnFieldCB_Itemfinder(u8);
extern void sub_80A5D04(void);
extern bool8 IsBikingDisallowedByPlayer(void);
extern void GetOnOffBike(u8);
-extern u8 GetPlayerDirectionTowardsHiddenItem(s16, s16);
-extern void SetPlayerDirectionTowardsItem(u8);
-extern void DisplayItemRespondingMessageAndExitItemfinder(u8);
-extern void RotatePlayerAndExitItemfinder(u8);
-extern void sub_80C9838(u8, s16, s16);
+extern struct MapConnection *sub_8056BA0(s16 x, s16 y); // fieldmap.c
+extern void sub_810BA7C(u8);
+extern void sub_8080E28(void);
+extern void UseMedicine(u8);
+extern void sub_8070048(u8);
+extern void DoPPRecoveryItemEffect(u8);
+extern void DoPPUpItemEffect(u8);
+extern void DoRareCandyItemEffect(u8);
+extern void DoEvolutionStoneItemEffect(u8);
+extern u16 ItemIdToBattleMoveId(u16);
+extern void sub_80A3FA0(u16 *, u32, u32, u32, u32, u32);
+extern void sub_80F914C(u8, void const *);
+extern void sub_80A3E0C(void);
+extern void TeachMonTMMove(u8);
+extern void sub_80878A8(void);
+extern void sub_8053014(void);
+extern void sub_80A7094(u8);
+extern bool8 ExecuteTableBasedItemEffect_(struct Pokemon *mon, u16, u8, u16);
+extern void sub_8094E4C(void);
+extern u8 ExecuteTableBasedItemEffect__(u8 u8, u16 u16, int i);
+extern u8 GetItemEffectType();
extern u8 gOtherText_DadsAdvice[];
extern u8 gOtherText_CantGetOffBike[];
extern u8 gOtherText_NoResponse[];
-
-extern u8 gItemFinderDirections[];
+extern u8 gOtherText_ItemfinderResponding[];
+extern u8 gOtherText_ItemfinderItemUnderfoot[];
+extern u8 gOtherText_Coins3[];
+extern u8 gOtherText_BootedHM[];
+extern u8 gOtherText_BootedTM[];
+extern u8 gOtherText_ContainsMove[];
+extern u8 gOtherText_UsedItem[];
+extern u8 gOtherText_RepelLingers[];
+extern u8 gOtherText_UsedFlute[];
+extern u8 gOtherText_UsedRepel[];
+extern u8 gOtherText_BoxIsFull[];
+extern u8 gOtherText_WontHaveAnyEffect[];
+extern u8 gOtherText_SnapConfusion[];
extern u16 gScriptItemId;
+extern u16 gBattleTypeFlags;
bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId);
void RunItemfinderResults(u8);
void ExitItemfinder(u8);
void sub_80C9720(u8);
+void sub_80C9838(u8, s16, s16);
+u8 GetPlayerDirectionTowardsHiddenItem(s16, s16);
+void SetPlayerDirectionTowardsItem(u8);
+void DisplayItemRespondingMessageAndExitItemfinder(u8);
+void RotatePlayerAndExitItemfinder(u8);
+void sub_80C9D00(u8);
+void sub_80C9D74(u8);
+void sub_80C9EE4(u8);
+void sub_80C9F10(u8);
+void sub_80C9F80(u8);
+void ItemUseOutOfBattle_TMHM(u8);
+void ItemUseOutOfBattle_EvolutionStone(u8);
+void ItemUseOutOfBattle_CannotUse(u8);
void ExecuteSwitchToOverworldFromItemUse(u8 taskId)
{
@@ -295,7 +355,7 @@ void ExitItemfinder(u8 taskId)
bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId)
{
- int distanceX, distanceY;
+ int distanceX, distanceY;
u16 x, y;
s16 newDistanceX, newDistanceY, i;
@@ -347,42 +407,830 @@ bool8 HiddenItemAtPos(struct MapEvents *events, s16 x, s16 y)
bool8 sub_80C9688(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 HiddenItemAtPos
- 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 HiddenItemAtPos(mapHeader->events, localX, localY);
+ 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 HiddenItemAtPos
+ 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 HiddenItemAtPos(mapHeader->events, localX, localY);
+}
+
+// weird math
+#ifdef NONMATCHING
+void sub_80C9720(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_8056BA0(curX, curY);
+ if (conn && sub_80C9688(conn, curX, curY) == TRUE)
+ sub_80C9838(taskId, curX - x, curY - y);
+ }
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_80C9720(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, _080C9834 @ =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 _080C9824\n\
+_080C976E:\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 _080C980E\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\
+_080C9796:\n\
+ ldr r3, [sp, 0x10]\n\
+ cmp r3, r9\n\
+ bgt _080C97B8\n\
+ ldr r5, [sp, 0x8]\n\
+ lsls r0, r5, 16\n\
+ asrs r0, 16\n\
+ cmp r9, r0\n\
+ bge _080C97B8\n\
+ asrs r1, r2, 16\n\
+ cmp r10, r1\n\
+ bgt _080C97B8\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 _080C97F6\n\
+_080C97B8:\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_8056BA0\n\
+ adds r7, r4, 0\n\
+ cmp r0, 0\n\
+ beq _080C97F6\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ bl sub_80C9688\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _080C97F6\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_80C9838\n\
+_080C97F6:\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 _080C9796\n\
+_080C980E:\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 _080C976E\n\
+_080C9824:\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\
+ .align 2, 0\n\
+_080C9834: .4byte gMapHeader\n\
+ .syntax divided");
+}
+#endif
+
+void sub_80C9838(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 GetPlayerDirectionTowardsHiddenItem(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 SetPlayerDirectionTowardsItem(u8 direction)
+{
+ FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]);
+ FieldObjectClearAnim(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]);
+ UnfreezeMapObject(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]);
+ PlayerTurnInPlace(direction);
+}
+
+void DisplayItemRespondingMessageAndExitItemfinder(u8 taskId)
+{
+ if(FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE)
+ DisplayItemMessageOnField(taskId, gOtherText_ItemfinderResponding, ExitItemfinder, 0);
+}
+
+void RotatePlayerAndExitItemfinder(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if(FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE
+ || data[2] == FALSE)
+ {
+ SetPlayerDirectionTowardsItem(gItemFinderDirections[data[5]]);
+ data[2] = 1;
+ data[5] = (data[5] + 1) & 3;
+ data[3]++;
+
+ if(data[3] == 4)
+ DisplayItemMessageOnField(taskId, gOtherText_ItemfinderItemUnderfoot, ExitItemfinder, 0);
+ }
+}
+
+void ItemUseOutOfBattle_PokeblockCase(u8 taskId)
+{
+ if(sub_80F9344() == TRUE)
+ {
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]);
+ }
+ else if(gTasks[taskId].data[2] != TRUE)
+ {
+ sub_810BA7C(0);
+ ItemMenu_ConfirmNormalFade(taskId);
+ }
+ else
+ {
+ gUnknown_0300485C = (void *)sub_8080E28;
+ sub_810BA7C(1);
+ ItemMenu_ConfirmComplexFade(taskId);
+ }
+}
+
+void ItemUseOutOfBattle_CoinCase(u8 taskId)
+{
+ ConvertIntToDecimalStringN(gStringVar1, GetCoins(), 0, 4);
+ StringExpandPlaceholders(gStringVar4, gOtherText_Coins3);
+
+ if(!gTasks[taskId].data[2])
+ {
+ MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
+ DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1);
+ }
+ else
+ {
+ DisplayItemMessageOnField(taskId, gStringVar4, CleanUpOverworldMessage, 0);
+ }
+}
+
+void sub_80C9BB8(u8 var)
+{
+ if(gMain.newKeys & A_BUTTON)
+ CleanUpItemMenuMessage(var);
+}
+
+void sub_80C9BD8(u8 var)
+{
+ if(gMain.newKeys & A_BUTTON)
+ CleanUpOverworldMessage(var);
+}
+
+// unused
+void ItemUseOutOfBattle_SSTicket(u8 taskId)
+{
+ if(gTasks[taskId].data[2] == 0)
+ {
+ MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
+ DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BB8, 1);
+ }
+ else
+ {
+ DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BD8, 0);
+ }
+}
+
+void sub_80C9C7C(u8 taskId)
+{
+ if(IsPlayerFacingPlantedBerryTree() == TRUE)
+ {
+ gUnknown_03005D00 = sub_80C9D00;
+ gUnknown_0300485C = ExecuteItemUseFromBlackPalette;
+ gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16;
+ gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch;
+ gTasks[taskId].func = HandleItemMenuPaletteFade;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
+ }
+ else
+ {
+ ItemId_GetFieldFunc(gScriptItemId)(taskId);
+ }
+}
+
+void sub_80C9D00(u8 taskId)
+{
+ RemoveBagItem(gScriptItemId, 1);
+ ScriptContext2_Enable();
+ ScriptContext1_SetupScript(gUnknown_081A1654);
+ DestroyTask(taskId);
+}
+
+void ItemUseOutOfBattle_WailmerPail(u8 taskId)
+{
+ if(TryToWaterBerryTree() == TRUE)
+ {
+ gUnknown_03005D00 = sub_80C9D74;
+ SetUpItemUseOnFieldCallback(taskId);
+ }
+ else
+ {
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]);
+ }
+}
+
+void sub_80C9D74(u8 taskId)
+{
+ ScriptContext2_Enable();
+ ScriptContext1_SetupScript(gUnknown_081A168F);
+ DestroyTask(taskId);
+}
+
+void sub_80C9D98(u8 taskId)
+{
+ gUnknown_02038561 = 0;
+ ItemMenu_ConfirmNormalFade(taskId);
+}
+
+void ItemUseOutOfBattle_Medicine(u8 taskId)
+{
+ gUnknown_03004AE4 = UseMedicine;
+ sub_80C9D98(taskId);
+}
+
+void ItemUseOutOfBattle_SacredAsh(u8 taskId)
+{
+ u8 i;
+
+ gLastFieldPokeMenuOpened = 0;
+
+ for(i = 0; i < 6; i++)
+ {
+ if(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0 && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
+ {
+ gLastFieldPokeMenuOpened = i;
+ break;
+ }
+ }
+ gUnknown_03004AE4 = sub_8070048;
+ gUnknown_02038561 = 4;
+ ItemMenu_ConfirmNormalFade(taskId);
+}
+
+void ItemUseOutOfBattle_PPRecovery(u8 taskId)
+{
+ gUnknown_03004AE4 = DoPPRecoveryItemEffect;
+ sub_80C9D98(taskId);
+}
+
+void ItemUseOutOfBattle_PPUp(u8 taskId)
+{
+ gUnknown_03004AE4 = DoPPUpItemEffect;
+ sub_80C9D98(taskId);
+}
+
+void ItemUseOutOfBattle_RareCandy(u8 taskId)
+{
+ gUnknown_03004AE4 = DoRareCandyItemEffect;
+ sub_80C9D98(taskId);
+}
+
+void ItemUseOutOfBattle_TMHM(u8 taskId)
+{
+ MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
+
+ if(gScriptItemId >= ITEM_HM01)
+ DisplayItemMessageOnField(taskId, gOtherText_BootedHM, sub_80C9EE4, 1); // HM
+ else
+ DisplayItemMessageOnField(taskId, gOtherText_BootedTM, sub_80C9EE4, 1); // TM
+}
+
+void sub_80C9EE4(u8 taskId)
+{
+ PlaySE(2);
+ gTasks[taskId].func = sub_80C9F10;
+}
+
+void sub_80C9F10(u8 taskId)
+{
+ if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
+ {
+ StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gScriptItemId)]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_ContainsMove);
+ DisplayItemMessageOnField(taskId, gStringVar4, sub_80C9F80, 1);
+ }
+}
+
+void sub_80C9F80(u8 var)
+{
+ DisplayYesNoMenu(7, 7, 1);
+ sub_80A3FA0(gBGTilemapBuffers[1], 8, 8, 5, 4, 1);
+ sub_80F914C(var, gUnknown_083D61F4);
+}
+
+void sub_80C9FC0(u8 var)
+{
+ gUnknown_03004AE4 = TeachMonTMMove;
+ sub_80C9D98(var);
+}
+
+void sub_80C9FDC(void)
+{
+ RemoveBagItem(gScriptItemId, 1);
+ sub_80A3E0C();
+ CopyItemName(gScriptItemId, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gOtherText_UsedItem);
+}
+
+void ItemUseOutOfBattle_Repel(u8 var)
+{
+ if(VarGet(VAR_REPEL_STEP_COUNT) == FALSE)
+ {
+ VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gScriptItemId));
+ sub_80C9FDC();
+ DisplayItemMessageOnField(var, gStringVar4, CleanUpItemMenuMessage, 1);
+ }
+ else
+ {
+ DisplayItemMessageOnField(var, gOtherText_RepelLingers, CleanUpItemMenuMessage, 1);
+ }
+}
+
+void sub_80CA07C(void)
+{
+ sub_80A3E0C();
+ CopyItemName(gScriptItemId, gStringVar2);
+}
+
+void sub_80CA098(u8 taskId)
+{
+ if(++gTasks[taskId].data[15] > 7)
+ {
+ PlaySE(0x75);
+ DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1);
+ }
+}
+
+void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId)
+{
+ if(gScriptItemId == 43)
+ {
+ FlagSet(SYS_ENC_UP_ITEM);
+ FlagReset(SYS_ENC_DOWN_ITEM);
+ sub_80CA07C();
+ StringExpandPlaceholders(gStringVar4, gOtherText_UsedFlute);
+ gTasks[taskId].func = sub_80CA098;
+ gTasks[taskId].data[15] = 0;
+ }
+ else if(gScriptItemId == 42)
+ {
+ FlagSet(SYS_ENC_DOWN_ITEM);
+ FlagReset(SYS_ENC_UP_ITEM);
+ sub_80CA07C();
+ StringExpandPlaceholders(gStringVar4, gOtherText_UsedRepel);
+ gTasks[taskId].func = sub_80CA098;
+ gTasks[taskId].data[15] = 0;
+ }
+}
+
+void task08_080A1C44(u8 taskId)
+{
+ player_avatar_init_params_reset();
+ sub_80878A8();
+ DestroyTask(taskId);
+}
+
+void sub_80CA18C(u8 taskId)
+{
+ sub_8053014();
+ sub_80C9FDC();
+ gTasks[taskId].data[0] = 0;
+ DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44, 0);
+}
+
+bool8 sub_80CA1C8(void)
+{
+ if(gMapHeader.mapType == MAP_TYPE_UNDERGROUND)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void ItemUseOutOfBattle_EscapeRope(u8 taskId)
+{
+ if(sub_80CA1C8() == TRUE) // is map type an area you can use escape rope?
+ {
+ gUnknown_03005D00 = sub_80CA18C;
+ SetUpItemUseOnFieldCallback(taskId);
+ }
+ else
+ {
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]);
+ }
+}
+
+void ItemUseOutOfBattle_EvolutionStone(u8 var)
+{
+ gUnknown_03004AE4 = DoEvolutionStoneItemEffect;
+ sub_80C9D98(var);
+}
+
+void ItemUseInBattle_PokeBall(u8 var)
+{
+ if(PlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon?
+ {
+ RemoveBagItem(gScriptItemId, 1);
+ sub_80A7094(var);
+ }
+ else
+ {
+ MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
+ DisplayItemMessageOnField(var, gOtherText_BoxIsFull, CleanUpItemMenuMessage, 1);
+ }
+}
+
+void sub_80CA294(u8 var)
+{
+ if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
+ sub_80A7094(var);
+}
+
+void sub_80CA2BC(u8 taskId)
+{
+ if(++gTasks[taskId].data[15] > 7)
+ {
+ PlaySE(1);
+ RemoveBagItem(gScriptItemId, 1);
+ DisplayItemMessageOnField(taskId, sub_803F378(gScriptItemId), sub_80CA294, 1);
+ }
+}
+
+void ItemUseInBattle_StatIncrease(u8 taskId)
+{
+ u16 partyId = gUnknown_02024A6A[gUnknown_02024E6C];
+
+ MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
+
+ if(ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gScriptItemId, partyId, 0) != FALSE)
+ {
+ DisplayItemMessageOnField(taskId, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1);
+ }
+ else
+ {
+ gTasks[taskId].func = sub_80CA2BC;
+ gTasks[taskId].data[15] = 0;
+ }
+}
+
+void sub_80CA394(u8 taskId)
+{
+ if(!gPaletteFade.active)
+ {
+ sub_8094E4C();
+ gpu_pal_allocator_reset__manage_upper_four();
+ DestroyTask(taskId);
+ }
+}
+
+void sub_80CA3C0(u8 taskId)
+{
+ gTasks[taskId].func = sub_80CA394;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+}
+
+void ItemUseInBattle_Medicine(u8 var)
+{
+ gUnknown_03004AE4 = UseMedicine;
+ sub_80CA3C0(var);
+}
+
+void unref_sub_80CA410(u8 var)
+{
+ gUnknown_03004AE4 = sub_8070048;
+ sub_80CA3C0(var);
+}
+
+void ItemUseInBattle_PPRecovery(u8 var)
+{
+ gUnknown_03004AE4 = DoPPRecoveryItemEffect;
+ sub_80CA3C0(var);
+}
+
+void unref_sub_80CA448(u8 var)
+{
+ MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
+
+ if(ExecuteTableBasedItemEffect__(0, gScriptItemId, 0) == FALSE)
+ {
+ RemoveBagItem(gScriptItemId, 1);
+ GetMonNickname(&gPlayerParty[0], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion);
+ DisplayItemMessageOnField(var, gStringVar4, sub_80A7094, 1);
+ }
+ else
+ {
+ DisplayItemMessageOnField(var, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1);
+ }
+}
+
+void ItemUseInBattle_Escape(u8 taskId)
+{
+ MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
+
+ if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE)
+ {
+ sub_80C9FDC();
+ DisplayItemMessageOnField(taskId, gStringVar4, sub_80A7094, 1);
+ }
+ else
+ {
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]);
+ }
+}
+
+void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
+{
+ switch(GetItemEffectType(gScriptItemId) - 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[15] = 1;
+ ItemUseOutOfBattle_Medicine(taskId);
+ break;
+ case 9:
+ gTasks[taskId].data[15] = 1;
+ ItemUseOutOfBattle_SacredAsh(taskId);
+ break;
+ case 0:
+ gTasks[taskId].data[15] = 1;
+ ItemUseOutOfBattle_RareCandy(taskId);
+ break;
+ case 18:
+ case 19:
+ gTasks[taskId].data[15] = 1;
+ ItemUseOutOfBattle_PPUp(taskId);
+ break;
+ case 20:
+ gTasks[taskId].data[15] = 1;
+ ItemUseOutOfBattle_PPRecovery(taskId);
+ break;
+ default:
+ gTasks[taskId].data[15] = 4;
+ ItemUseOutOfBattle_CannotUse(taskId);
+ }
+}
+
+void ItemUseInBattle_EnigmaBerry(u8 taskId)
+{
+ switch(GetItemEffectType(gScriptItemId))
+ {
+ 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[2]);
}
diff --git a/src/player_pc.c b/src/player_pc.c
index 6ea169713..cb70539bf 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -8,7 +8,7 @@
#include "sound.h"
#include "string_util.h"
#include "task.h"
-#include "weather.h"
+#include "field_screeneffect.h"
extern void DisplayItemMessageOnField(u8, u8*, TaskFunc, u16);
extern void ItemStorageMenuProcessInput(u8);
diff --git a/src/rom4.c b/src/rom4.c
index 9d7fec115..cc734cad9 100644
--- a/src/rom4.c
+++ b/src/rom4.c
@@ -28,7 +28,7 @@
#include "start_menu.h"
#include "task.h"
#include "tileset_anim.h"
-#include "weather.h"
+#include "field_screeneffect.h"
#include "wild_encounter.h"
#include "script_pokemon_80C4.h"
#include "clock.h"
diff --git a/src/scrcmd.c b/src/scrcmd.c
index b780cc6b4..8d35def5c 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -24,7 +24,7 @@
#include "script.h"
#include "sound.h"
#include "string_util.h"
-#include "weather.h"
+#include "field_screeneffect.h"
#include "script_menu.h"
#include "script_pokemon_80F9.h"
#include "script_pokemon_80C4.h"
diff --git a/src/shop.c b/src/shop.c
index 5148ddcca..3a0554e15 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -4,7 +4,7 @@
#include "task.h"
#include "main.h"
#include "sound.h"
-#include "weather.h"
+#include "field_screeneffect.h"
#include "palette.h"
#include "sprite.h"
#include "asm.h"
diff --git a/src/start_menu.c b/src/start_menu.c
index d1344ce90..1fc9b6363 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -21,7 +21,7 @@
#include "string_util.h"
#include "task.h"
#include "trainer_card.h"
-#include "weather.h"
+#include "field_screeneffect.h"
#include "field_map_obj_helpers.h"
//Menu actions