From c7a2ef337197ae1acfd6cd3cf8577b6b4a904a4f Mon Sep 17 00:00:00 2001 From: iriv24 <40581123+iriv24@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:04:06 -0500 Subject: [PATCH] Prevent Key Items that open other menus from causing a crash if registered and used from the field (#5810) --- src/item_use.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/item_use.c b/src/item_use.c index c04d9b9911..c9be4f5caa 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1400,9 +1400,17 @@ void ItemUseOutOfBattle_ZygardeCube(u8 taskId) void ItemUseOutOfBattle_Fusion(u8 taskId) { - gItemUseCB = ItemUseCB_Fusion; - gTasks[taskId].data[0] = FALSE; - SetUpItemUseCallback(taskId); + if (!gTasks[taskId].tUsingRegisteredKeyItem) + { + gItemUseCB = ItemUseCB_Fusion; + gTasks[taskId].data[0] = FALSE; + SetUpItemUseCallback(taskId); + } + else + { + // TODO: handle key items with callbacks to menus allow to be used by registering them. + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + } } void Task_UseHoneyOnField(u8 taskId) @@ -1552,10 +1560,18 @@ static void ItemUseOnFieldCB_TownMap(u8 taskId) void ItemUseOutOfBattle_TownMap(u8 taskId) { - sItemUseOnFieldCB = ItemUseOnFieldCB_TownMap; - gFieldCallback = FieldCB_UseItemOnField; - gBagMenu->newScreenCallback = CB2_ReturnToField; - Task_FadeAndCloseBagMenu(taskId); + if (!gTasks[taskId].tUsingRegisteredKeyItem) + { + sItemUseOnFieldCB = ItemUseOnFieldCB_TownMap; + gFieldCallback = FieldCB_UseItemOnField; + gBagMenu->newScreenCallback = CB2_ReturnToField; + Task_FadeAndCloseBagMenu(taskId); + } + else + { + // TODO: handle key items with callbacks to menus allow to be used by registering them. + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + } } #undef tUsingRegisteredKeyItem