dynamax candy functionality

This commit is contained in:
cawtds
2024-06-01 21:12:29 +02:00
parent b20c4638e5
commit d7519b540e
6 changed files with 74 additions and 3 deletions

View File

@@ -131,6 +131,7 @@ ViridianCity_Mart_Items::
.2byte ITEM_BOLD_MINT
.2byte ITEM_ADAMANT_MINT
.2byte ITEM_SERIOUS_MINT
.2byte ITEM_DYNAMAX_CANDY
.2byte ITEM_NONE
release
end

View File

@@ -13,6 +13,7 @@ void ItemUseOutOfBattle_BerryPouch(u8 taskId);
void ItemUseOutOfBattle_Bike(u8 taskId);
void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId);
void ItemUseOutOfBattle_CoinCase(u8 taskId);
void ItemUseOutOfBattle_DynamaxCandy(u8);
void ItemUseOutOfBattle_EscapeRope(u8 taskId);
void ItemUseOutOfBattle_EnigmaBerry(u8 taskId);
void ItemUseOutOfBattle_EvolutionStone(u8 taskId);

View File

@@ -65,6 +65,7 @@ bool8 MonKnowsMove(struct Pokemon *mon, u16 move);
bool8 BoxMonKnowsMove(struct BoxPokemon *boxMon, u16 move);
void ItemUseCB_TMHM(u8 taskId, TaskFunc func);
void ItemUseCB_RareCandy(u8 taskId, TaskFunc func);
void ItemUseCB_DynamaxCandy(u8 taskId, TaskFunc task);
void ItemUseCB_SacredAsh(u8 taskId, TaskFunc func);
void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc func);
u8 GetItemEffectType(u16 item);
@@ -88,8 +89,6 @@ u8 GetPartyIdFromBattlePartyId(u8 battlePartyId);
void ShowPartyMenuToShowcaseMultiBattleParty(void);
void ChooseMonForDaycare(void);
void ChoosePartyMonByMenuType(u8 menuType);
// pokeemerald
void ItemUseCB_BattleChooseMove(u8 taskId, TaskFunc task);
const u8* GetItemEffect(u16 item);

View File

@@ -1806,7 +1806,7 @@ const struct Item gItemsInfo[] =
"Pokémon by one."),
.pocket = POCKET_ITEMS,
.type = ITEM_TYPE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.fieldUseFunc = ItemUseOutOfBattle_DynamaxCandy,
.flingPower = 30,
},

View File

@@ -301,6 +301,12 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId)
DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField);
}
void ItemUseOutOfBattle_DynamaxCandy(u8 taskId)
{
gItemUseCB = ItemUseCB_DynamaxCandy;
SetUpItemUseCallback(taskId);
}
void ItemUseOutOfBattle_PowderJar(u8 taskId)
{
ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), STR_CONV_MODE_LEFT_ALIGN, 5);

View File

@@ -5751,6 +5751,70 @@ static void DisplayMonLearnedMove(u8 taskId, u16 move)
#define tHadEffect data[1]
#define tLastSlotUsed data[2]
#define tState data[0]
#define tMonId data[1]
#define tDynamaxLevel data[2]
#define tOldFunc 4
void Task_DynamaxCandy(u8 taskId)
{
static const u8 doneText[] = _("{STR_VAR_1}'s Dynamax Level\nincreased by 1!{PAUSE_UNTIL_PRESS}");
s16 *data = gTasks[taskId].data;
switch (tState)
{
case 0:
// Can't use.
if (tDynamaxLevel == MAX_DYNAMAX_LEVEL)
{
gPartyMenuUseExitCallback = FALSE;
PlaySE(SE_SELECT);
DisplayPartyMenuMessage(gText_WontHaveEffect, 1);
ScheduleBgCopyTilemapToVram(2);
gTasks[taskId].func = Task_ClosePartyMenuAfterText;
return;
}
gPartyMenuUseExitCallback = TRUE;
GetMonNickname(&gPlayerParty[tMonId], gStringVar1);
CopyItemName(gSpecialVar_ItemId, gStringVar2);
tState++;
break;
case 1:
PlaySE(SE_USE_ITEM);
StringExpandPlaceholders(gStringVar4, doneText);
DisplayPartyMenuMessage(gStringVar4, 1);
ScheduleBgCopyTilemapToVram(2);
tState++;
break;
case 2:
if (!IsPartyMenuTextPrinterActive())
tState++;
break;
case 3:
tDynamaxLevel++;
SetMonData(&gPlayerParty[tMonId], MON_DATA_DYNAMAX_LEVEL, &tDynamaxLevel);
RemoveBagItem(gSpecialVar_ItemId, 1);
gTasks[taskId].func = Task_ClosePartyMenu;
break;
}
}
void ItemUseCB_DynamaxCandy(u8 taskId, TaskFunc task)
{
s16 *data = gTasks[taskId].data;
tState = 0;
tMonId = gPartyMenu.slotId;
tDynamaxLevel = GetMonData(&gPlayerParty[tMonId], MON_DATA_DYNAMAX_LEVEL);
SetWordTaskArg(taskId, tOldFunc, (uintptr_t)(gTasks[taskId].func));
gTasks[taskId].func = Task_DynamaxCandy;
}
#undef tState
#undef tMonId
#undef tDynamaxLevel
#undef tOldFunc
void ItemUseCB_SacredAsh(u8 taskId, TaskFunc func)
{
sPartyMenuInternal->tUsedOnSlot = FALSE;