Hold Item party menu

This commit is contained in:
Eduardo Quezada D'Ottone 2021-09-28 23:44:22 -03:00
parent d220d25aab
commit fdd284b50b
3 changed files with 19 additions and 0 deletions

View File

@ -1,6 +1,7 @@
const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
{ {
[SPECIES_GIRATINA] = sGiratinaFormChangeTable, [SPECIES_GIRATINA] = sGiratinaFormChangeTable,
[SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable,
[SPECIES_SHAYMIN] = sShayminFormChangeTable, [SPECIES_SHAYMIN] = sShayminFormChangeTable,
[SPECIES_SHAYMIN_SKY] = sShayminSkyFormChangeTable, [SPECIES_SHAYMIN_SKY] = sShayminSkyFormChangeTable,
[SPECIES_ARCEUS] = sArceusFormChangeTable, [SPECIES_ARCEUS] = sArceusFormChangeTable,

View File

@ -27,6 +27,7 @@ FORM_ITEM_USE_DAY:
#define WHEN_FORGOTTEN TRUE #define WHEN_FORGOTTEN TRUE
static const struct FormChange sGiratinaFormChangeTable[] = { static const struct FormChange sGiratinaFormChangeTable[] = {
{FORM_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE},
{FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB},
{FORM_CHANGE_END}, {FORM_CHANGE_END},
}; };

View File

@ -404,6 +404,7 @@ static bool8 SetUpFieldMove_Surf(void);
static bool8 SetUpFieldMove_Fly(void); static bool8 SetUpFieldMove_Fly(void);
static bool8 SetUpFieldMove_Waterfall(void); static bool8 SetUpFieldMove_Waterfall(void);
static bool8 SetUpFieldMove_Dive(void); static bool8 SetUpFieldMove_Dive(void);
void TryItemHoldFormChange(struct Pokemon *mon);
// static const data // static const data
#include "data/pokemon/tutor_learnsets.h" #include "data/pokemon/tutor_learnsets.h"
@ -1734,6 +1735,7 @@ static void GiveItemToMon(struct Pokemon *mon, u16 item)
itemBytes[0] = item; itemBytes[0] = item;
itemBytes[1] = item >> 8; itemBytes[1] = item >> 8;
SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes); SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes);
TryItemHoldFormChange(&gPlayerParty[gPartyMenu.slotId]);
} }
static u8 TryTakeMonItem(struct Pokemon* mon) static u8 TryTakeMonItem(struct Pokemon* mon)
@ -1747,6 +1749,7 @@ static u8 TryTakeMonItem(struct Pokemon* mon)
item = ITEM_NONE; item = ITEM_NONE;
SetMonData(mon, MON_DATA_HELD_ITEM, &item); SetMonData(mon, MON_DATA_HELD_ITEM, &item);
TryItemHoldFormChange(&gPlayerParty[gPartyMenu.slotId]);
return 2; return 2;
} }
@ -5213,6 +5216,20 @@ void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task)
RemoveBagItem(gSpecialVar_ItemId, 1); RemoveBagItem(gSpecialVar_ItemId, 1);
} }
} }
void TryItemHoldFormChange(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES);
u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_HOLD, 0);
if (targetSpecies != SPECIES_NONE)
{
PlayCry2(targetSpecies, 0, 0x7D, 0xA);
SetMonData(mon, MON_DATA_SPECIES, &targetSpecies);
FreeAndDestroyMonIconSprite(&gSprites[sPartyMenuBoxes[gPartyMenu.slotId].monSpriteId]);
CreatePartyMonIconSpriteParameterized(targetSpecies, GetMonData(mon, MON_DATA_PERSONALITY, NULL), &sPartyMenuBoxes[gPartyMenu.slotId], 1);
CalculateMonStats(mon);
UpdatePartyMonHeldItemSprite(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
}
}
u8 GetItemEffectType(u16 item) u8 GetItemEffectType(u16 item)
{ {