diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-04-09 01:05:20 +0000 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-04-08 18:05:20 -0700 |
commit | 83d7f52f2cadd4232ee674947a93e93fc18e483a (patch) | |
tree | a7b36f471848a276c896ea874515b4ddb37e96d2 | |
parent | 30310871d369055715374958e5244f84c028da7f (diff) |
finish decompiling item_use.c (#244)
* nonmatching sub_80C9720 and decompile sub_80C9838
* finish decompiling Itemfinder functions.
* decompile ItemUseOutOfBattle_PokeblockCase and ItemUseOutOfBattle_CoinCase
* rename field_doortransition
* rename weather file
* decompile more of item_use.c
* decompile up to repel code
* decompile up to stat increase code
* finish decompiling item_use.c
* remove item_use from ld_script
-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.s | 2029 | ||||
-rw-r--r-- | data/field_screeneffect.s (renamed from data/weather.s) | 0 | ||||
-rw-r--r-- | include/berry.h | 4 | ||||
-rw-r--r-- | include/field_map_obj_helpers.h | 1 | ||||
-rw-r--r-- | include/field_screeneffect.h (renamed from include/weather.h) | 0 | ||||
-rw-r--r-- | include/pokemon.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 11 | ||||
-rw-r--r-- | src/battle_setup.c | 2 | ||||
-rw-r--r-- | src/berry.c | 6 | ||||
-rw-r--r-- | src/field_effect.c | 2 | ||||
-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.c | 948 | ||||
-rw-r--r-- | src/player_pc.c | 2 | ||||
-rw-r--r-- | src/rom4.c | 2 | ||||
-rw-r--r-- | src/scrcmd.c | 2 | ||||
-rw-r--r-- | src/shop.c | 2 | ||||
-rw-r--r-- | src/start_menu.c | 2 |
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 |