diff --git a/src/party_menu.c b/src/party_menu.c index 2050cb3fb9f..dd1d143d635 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1424,6 +1424,15 @@ void Task_HandleChooseMonInput(u8 taskId) MoveCursorToConfirm(); } break; + case R_BUTTON: + DestroyTask(taskId); + break; + case SELECT_BUTTON: + gPartyMenu.slotId = *slotPtr; + gPartyMenu.slotId2 = 0; + gPartyMenu.action = PARTY_ACTION_SWITCH; + HandleChooseMonSelection(taskId, slotPtr); + break; } } } @@ -1618,6 +1627,22 @@ static void Task_HandleCancelChooseMonYesNoInput(u8 taskId) } } +static bool8 IsInvalidPartyMenuActionType(u8 partyMenuType) +{ + return (partyMenuType == PARTY_ACTION_SEND_OUT + || partyMenuType == PARTY_ACTION_CANT_SWITCH + || partyMenuType == PARTY_ACTION_USE_ITEM + || partyMenuType == PARTY_ACTION_ABILITY_PREVENTS + || partyMenuType == PARTY_ACTION_GIVE_ITEM + || partyMenuType == PARTY_ACTION_GIVE_PC_ITEM + || partyMenuType == PARTY_ACTION_GIVE_MAILBOX_MAIL + || partyMenuType == PARTY_ACTION_SOFTBOILED + || partyMenuType == PARTY_ACTION_CHOOSE_AND_CLOSE + || partyMenuType == PARTY_ACTION_MOVE_TUTOR + || partyMenuType == PARTY_ACTION_MINIGAME + || partyMenuType == PARTY_ACTION_REUSABLE_ITEM); +} + static u16 PartyMenuButtonHandler(s8 *slotPtr) { s8 movementDir; @@ -1655,6 +1680,29 @@ static u16 PartyMenuButtonHandler(s8 *slotPtr) if (JOY_NEW(START_BUTTON)) return START_BUTTON; + if (JOY_NEW(R_BUTTON) && CalculatePlayerPartyCount() >= 2 && !IsInvalidPartyMenuActionType(gPartyMenu.action)) + { + if (gPartyMenu.menuType != PARTY_MENU_TYPE_FIELD) + return 0; + if (*slotPtr == PARTY_SIZE + 1) + return 0; + if (gPartyMenu.action != PARTY_ACTION_SWITCH) + { + CreateTask(CursorCb_Switch, 1); + return R_BUTTON; + } + return A_BUTTON; // R is allowed to act as the A Button while CursorCb_Switch is active. + } + + if (JOY_NEW(SELECT_BUTTON) && CalculatePlayerPartyCount() >= 2 && gPartyMenu.action == PARTY_ACTION_CHOOSE_MON) + { + if (gPartyMenu.menuType != PARTY_MENU_TYPE_FIELD) + return 0; + if (*slotPtr == PARTY_SIZE + 1 || *slotPtr == 0) + return 0; + return SELECT_BUTTON; + } + if (movementDir) { UpdateCurrentPartySelection(slotPtr, movementDir);