Implement using party menu items from field (#7481)
This commit is contained in:
parent
729abca058
commit
bf68865e0d
@ -16,10 +16,12 @@ struct PartyMenu
|
||||
s8 slotId2;
|
||||
u8 action;
|
||||
u16 bagItem;
|
||||
s16 data1; // used variously as a move, counter, moveSlotId, or cursorPos
|
||||
s16 data1; // used variously as a move, counter, moveSlotId, cursorPos, or indicator that the menu is opened from the field
|
||||
s16 learnMoveState; // data2, used only as a learn move state
|
||||
};
|
||||
|
||||
#define DATA1_PARTY_MENU_FROM_FIELD -1
|
||||
|
||||
extern struct PartyMenu gPartyMenu;
|
||||
extern bool8 gPartyMenuUseExitCallback;
|
||||
extern u8 gSelectedMonPartyId;
|
||||
|
||||
101
src/item_use.c
101
src/item_use.c
@ -50,6 +50,7 @@
|
||||
static void SetUpItemUseCallback(u8);
|
||||
static void FieldCB_UseItemOnField(void);
|
||||
static void Task_CallItemUseOnFieldCallback(u8);
|
||||
static void Task_PartyMenuItemUseFromField(u8);
|
||||
static void Task_UseItemfinder(u8);
|
||||
static void Task_CloseItemfinderMessage(u8);
|
||||
static void Task_HiddenItemNearby(u8);
|
||||
@ -128,15 +129,25 @@ static void SetUpItemUseCallback(u8 taskId)
|
||||
type = gTasks[taskId].tEnigmaBerryType - 1;
|
||||
else
|
||||
type = GetItemType(gSpecialVar_ItemId) - 1;
|
||||
if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE)
|
||||
|
||||
if (gTasks[taskId].tUsingRegisteredKeyItem && type == (ITEM_USE_PARTY_MENU - 1))
|
||||
{
|
||||
gBagMenu->newScreenCallback = sItemUseCallbacks[type];
|
||||
Task_FadeAndCloseBagMenu(taskId);
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
gPartyMenu.data1 = DATA1_PARTY_MENU_FROM_FIELD;
|
||||
gTasks[taskId].func = Task_PartyMenuItemUseFromField;
|
||||
}
|
||||
else
|
||||
{
|
||||
gPyramidBagMenu->newScreenCallback = sItemUseCallbacks[type];
|
||||
CloseBattlePyramidBag(taskId);
|
||||
if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE)
|
||||
{
|
||||
gBagMenu->newScreenCallback = sItemUseCallbacks[type];
|
||||
Task_FadeAndCloseBagMenu(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
gPyramidBagMenu->newScreenCallback = sItemUseCallbacks[type];
|
||||
CloseBattlePyramidBag(taskId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -165,6 +176,16 @@ static void Task_CallItemUseOnFieldCallback(u8 taskId)
|
||||
sItemUseOnFieldCB(taskId);
|
||||
}
|
||||
|
||||
static void Task_PartyMenuItemUseFromField(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
SetMainCallback2(CB2_ShowPartyMenuForItemUse);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField, const u8 *str)
|
||||
{
|
||||
StringExpandPlaceholders(gStringVar4, str);
|
||||
@ -1380,77 +1401,37 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
|
||||
|
||||
void ItemUseOutOfBattle_FormChange(u8 taskId)
|
||||
{
|
||||
if (!gTasks[taskId].tUsingRegisteredKeyItem)
|
||||
{
|
||||
gItemUseCB = ItemUseCB_FormChange;
|
||||
gTasks[taskId].data[0] = FALSE;
|
||||
SetUpItemUseOnFieldCallback(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: handle key items with callbacks to menus allow to be used by registering them.
|
||||
DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
|
||||
}
|
||||
gItemUseCB = ItemUseCB_FormChange;
|
||||
gTasks[taskId].data[0] = FALSE;
|
||||
SetUpItemUseCallback(taskId);
|
||||
}
|
||||
|
||||
void ItemUseOutOfBattle_FormChange_ConsumedOnUse(u8 taskId)
|
||||
{
|
||||
if (!gTasks[taskId].tUsingRegisteredKeyItem)
|
||||
{
|
||||
gItemUseCB = ItemUseCB_FormChange_ConsumedOnUse;
|
||||
gTasks[taskId].data[0] = TRUE;
|
||||
SetUpItemUseOnFieldCallback(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: handle key items with callbacks to menus allow to be used by registering them.
|
||||
DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
|
||||
}
|
||||
gItemUseCB = ItemUseCB_FormChange_ConsumedOnUse;
|
||||
gTasks[taskId].data[0] = TRUE;
|
||||
SetUpItemUseCallback(taskId);
|
||||
}
|
||||
|
||||
void ItemUseOutOfBattle_RotomCatalog(u8 taskId)
|
||||
{
|
||||
if (!gTasks[taskId].tUsingRegisteredKeyItem)
|
||||
{
|
||||
gItemUseCB = ItemUseCB_RotomCatalog;
|
||||
gTasks[taskId].data[0] = TRUE;
|
||||
SetUpItemUseOnFieldCallback(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: handle key items with callbacks to menus allow to be used by registering them.
|
||||
DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
|
||||
}
|
||||
gItemUseCB = ItemUseCB_RotomCatalog;
|
||||
gTasks[taskId].data[0] = TRUE;
|
||||
SetUpItemUseCallback(taskId);
|
||||
}
|
||||
|
||||
void ItemUseOutOfBattle_ZygardeCube(u8 taskId)
|
||||
{
|
||||
if (!gTasks[taskId].tUsingRegisteredKeyItem)
|
||||
{
|
||||
gItemUseCB = ItemUseCB_ZygardeCube;
|
||||
gTasks[taskId].data[0] = TRUE;
|
||||
SetUpItemUseOnFieldCallback(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: handle key items with callbacks to menus allow to be used by registering them.
|
||||
DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
|
||||
}
|
||||
gItemUseCB = ItemUseCB_ZygardeCube;
|
||||
gTasks[taskId].data[0] = TRUE;
|
||||
SetUpItemUseCallback(taskId);
|
||||
}
|
||||
|
||||
void ItemUseOutOfBattle_Fusion(u8 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);
|
||||
}
|
||||
gItemUseCB = ItemUseCB_Fusion;
|
||||
gTasks[taskId].data[0] = FALSE;
|
||||
SetUpItemUseCallback(taskId);
|
||||
}
|
||||
|
||||
void Task_UseHoneyOnField(u8 taskId)
|
||||
|
||||
@ -4559,6 +4559,12 @@ void CB2_ShowPartyMenuForItemUse(void)
|
||||
u8 msgId;
|
||||
TaskFunc task;
|
||||
|
||||
if (gPartyMenu.data1 == DATA1_PARTY_MENU_FROM_FIELD)
|
||||
{
|
||||
callback = CB2_ReturnToField;
|
||||
gPartyMenu.data1 = 0;
|
||||
}
|
||||
|
||||
if (gMain.inBattle)
|
||||
{
|
||||
menuType = PARTY_MENU_TYPE_IN_BATTLE;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user