Skip to content

Repeated Field Medicine Use

Eduardo Quezada D'Ottone edited this page Nov 11, 2020 · 13 revisions

Keep Party Menu Open During Field Medicine Use

Credit: ghoulslash

If you're using a lot of potions at once, it can be annoying to keep returning to the bag after use. This simple fix keeps the menu open unless you run out of potions. The user will have to select Cancel or press B to exit the party menu. But this is intuitive.

Let's start by opening src/party_menu.c

1.

First, find the function ItemUseCB_Medicine. Inside the code block that starts with if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0)), replace gTasks[taskId].func = task; with:

if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD)
    gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
else
    gTasks[taskId].func = task;

2.

Next, stay in the function ItemUseCB_Medicine. Towards the end of the function, replace

    .....
    else
    {
        GetMonNickname(mon, gStringVar1);
        GetMedicineItemEffectMessage(item);
        DisplayPartyMenuMessage(gStringVar4, TRUE);
        ScheduleBgCopyTilemapToVram(2);
        gTasks[taskId].func = task;
    }

with

    .....
    else
    {
        GetMonNickname(mon, gStringVar1);
        GetMedicineItemEffectMessage(item);
        DisplayPartyMenuMessage(gStringVar4, TRUE);
        ScheduleBgCopyTilemapToVram(2);
        if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(item, 1))
            gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
        else
            gTasks[taskId].func = task;
    }

3.

Finally, find Task_DisplayHPRestoredMessage. Replace gTasks[taskId].func = Task_ClosePartyMenuAfterText; with:

    if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1))
        gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
    else
        gTasks[taskId].func = Task_ClosePartyMenuAfterText;

Addendum: Rare Candies

Credit: AsparagusEduardo

You may also want to use this for Rare Candies, so all you have to do is find PartyMenuTryEvolution and replace gTasks[taskId].func = Task_ClosePartyMenuAfterText; with:

    if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD && CheckBagHasItem(gSpecialVar_ItemId, 1))
        gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
    else
        gTasks[taskId].func = Task_ClosePartyMenuAfterText;

And finally, when using a Rare Candy on a Level 100 Pokémon it would normally go back to the Bag menu. To avoid that, we search for ItemUseCB_RareCandy and replace gTasks[taskId].func = task; with:

    if (gPartyMenu.menuType == PARTY_MENU_TYPE_FIELD)
        gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
    else
        gTasks[taskId].func = task;
Clone this wiki locally