From fd8570640c12ae743b8ab5097ad84dc970f026f1 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 12 May 2023 15:29:03 +0200 Subject: [PATCH] Implement Repeated Medicine --- src/party_menu.c | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index aa37b1c691..ba7a5ff130 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4490,7 +4490,7 @@ void ItemUseCB_BattleChooseMove(u8 taskId, TaskFunc task) gTasks[taskId].func = Task_HandleWhichMoveInput; } -void ItemUseCB_Medicine(u8 taskId, TaskFunc task) +void ItemUsevoid ItemUseCB_Medicine(u8 taskId, TaskFunc task) { u16 hp = 0; struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; @@ -4520,7 +4520,11 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) PlaySE(SE_SELECT); DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = task; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD) + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + else + gTasks[taskId].func = task; + return; } else { @@ -4552,7 +4556,10 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) GetMedicineItemEffectMessage(item, oldStatus); DisplayPartyMenuMessage(gStringVar4, TRUE); ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = task; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(item, 1)) + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + else + gTasks[taskId].func = task; } } } @@ -4752,7 +4759,10 @@ static void Task_DisplayHPRestoredMessage(u8 taskId) DisplayPartyMenuMessage(gStringVar4, FALSE); ScheduleBgCopyTilemapToVram(2); HandleBattleLowHpMusicChange(); - gTasks[taskId].func = Task_ClosePartyMenuAfterText; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + else + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } static void Task_ClosePartyMenuAfterText(u8 taskId) @@ -5170,7 +5180,10 @@ static void CB2_ReturnToPartyMenuWhileLearningMove(void) { if (sFinalLevel != 0) SetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_LEVEL, &sFinalLevel); // to avoid displaying incorrect level - InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback); + if (gSpecialVar_ItemId >= ITEM_RARE_CANDY && gSpecialVar_ItemId <= ITEM_DYNAMAX_CANDY && gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_USE_ITEM, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback); + else + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback); } static void Task_ReturnToPartyMenuWhileLearningMove(u8 taskId) @@ -5480,6 +5493,12 @@ static void Task_TryLearningNextMove(u8 taskId) } } +static void CB2_ReturnToPartyMenuUsingRareCandy(void) +{ + gItemUseCB = ItemUseCB_RareCandy; + SetMainCallback2(CB2_ShowPartyMenuForItemUse); +} + static void PartyMenuTryEvolution(u8 taskId) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; @@ -5492,13 +5511,19 @@ static void PartyMenuTryEvolution(u8 taskId) if (targetSpecies != SPECIES_NONE) { FreePartyPointers(); - gCB2_AfterEvolution = gPartyMenu.exitCallback; + if (gSpecialVar_ItemId >= ITEM_RARE_CANDY && gSpecialVar_ItemId <= ITEM_DYNAMAX_CANDY && gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + gCB2_AfterEvolution = CB2_ReturnToPartyMenuUsingRareCandy; + else + gCB2_AfterEvolution = gPartyMenu.exitCallback; BeginEvolutionScene(mon, targetSpecies, TRUE, gPartyMenu.slotId); DestroyTask(taskId); } else { - gTasks[taskId].func = Task_ClosePartyMenuAfterText; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + else + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } }