From fdd284b50bfd40c27803aa7c76eae2a65cc7d56c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Tue, 28 Sep 2021 23:44:22 -0300 Subject: [PATCH] Hold Item party menu --- src/data/pokemon/form_change_table_pointers.h | 1 + src/data/pokemon/form_change_tables.h | 1 + src/party_menu.c | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 777b174a4..39fcc7aee 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -1,6 +1,7 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = { [SPECIES_GIRATINA] = sGiratinaFormChangeTable, + [SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable, [SPECIES_SHAYMIN] = sShayminFormChangeTable, [SPECIES_SHAYMIN_SKY] = sShayminSkyFormChangeTable, [SPECIES_ARCEUS] = sArceusFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index f58b69b54..abd1ff72f 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -27,6 +27,7 @@ FORM_ITEM_USE_DAY: #define WHEN_FORGOTTEN TRUE static const struct FormChange sGiratinaFormChangeTable[] = { + {FORM_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, {FORM_CHANGE_END}, }; diff --git a/src/party_menu.c b/src/party_menu.c index 46c528302..d471a92a8 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -404,6 +404,7 @@ static bool8 SetUpFieldMove_Surf(void); static bool8 SetUpFieldMove_Fly(void); static bool8 SetUpFieldMove_Waterfall(void); static bool8 SetUpFieldMove_Dive(void); +void TryItemHoldFormChange(struct Pokemon *mon); // static const data #include "data/pokemon/tutor_learnsets.h" @@ -1734,6 +1735,7 @@ static void GiveItemToMon(struct Pokemon *mon, u16 item) itemBytes[0] = item; itemBytes[1] = item >> 8; SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes); + TryItemHoldFormChange(&gPlayerParty[gPartyMenu.slotId]); } static u8 TryTakeMonItem(struct Pokemon* mon) @@ -1747,6 +1749,7 @@ static u8 TryTakeMonItem(struct Pokemon* mon) item = ITEM_NONE; SetMonData(mon, MON_DATA_HELD_ITEM, &item); + TryItemHoldFormChange(&gPlayerParty[gPartyMenu.slotId]); return 2; } @@ -5213,6 +5216,20 @@ void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task) 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) {