From fd8570640c12ae743b8ab5097ad84dc970f026f1 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 12 May 2023 15:29:03 +0200 Subject: [PATCH 1/3] 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; } } From 0266d3ff82b5a4e22ebaf0d703e638261148f164 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Mon, 15 May 2023 11:46:26 +0200 Subject: [PATCH 2/3] Fix a sloppy copy paste --- src/party_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/party_menu.c b/src/party_menu.c index ba7a5ff130..cef162b88f 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 ItemUsevoid ItemUseCB_Medicine(u8 taskId, TaskFunc task) +void ItemUseCB_Medicine(u8 taskId, TaskFunc task) { u16 hp = 0; struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; From 07a4576ff364246b04343bb92353d6dfbefcb3d7 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 5 Oct 2023 22:35:44 -0300 Subject: [PATCH 3/3] Apply suggestions from code review --- src/party_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index cef162b88f..a290ef42c5 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5180,7 +5180,7 @@ static void CB2_ReturnToPartyMenuWhileLearningMove(void) { if (sFinalLevel != 0) SetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_LEVEL, &sFinalLevel); // to avoid displaying incorrect level - if (gSpecialVar_ItemId >= ITEM_RARE_CANDY && gSpecialVar_ItemId <= ITEM_DYNAMAX_CANDY && gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + if (ItemId_GetFieldFunc(gSpecialVar_ItemId) == ItemUseOutOfBattle_RareCandy && 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); @@ -5511,7 +5511,7 @@ static void PartyMenuTryEvolution(u8 taskId) if (targetSpecies != SPECIES_NONE) { FreePartyPointers(); - if (gSpecialVar_ItemId >= ITEM_RARE_CANDY && gSpecialVar_ItemId <= ITEM_DYNAMAX_CANDY && gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) + if (ItemId_GetFieldFunc(gSpecialVar_ItemId) == ItemUseOutOfBattle_RareCandy && gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1)) gCB2_AfterEvolution = CB2_ReturnToPartyMenuUsingRareCandy; else gCB2_AfterEvolution = gPartyMenu.exitCallback;