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 01/17] 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 777b174a4e..39fcc7aee2 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 f58b69b547..abd1ff72f6 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 46c5283024..d471a92a8d 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) { From 55b61313a4cd1c394bb27e83c28c3100a1d9dabb Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Wed, 29 Sep 2021 00:48:03 -0300 Subject: [PATCH 02/17] PSS uses form change table for holding items. # Conflicts: # src/pokemon.c --- include/party_menu.h | 1 + include/pokemon.h | 1 + src/party_menu.c | 12 ++++++++++ src/pokemon.c | 15 ++++++++---- src/pokemon_storage_system.c | 46 ++++++++++++++++++++++++++++++++++++ 5 files changed, 70 insertions(+), 5 deletions(-) diff --git a/include/party_menu.h b/include/party_menu.h index 75fe7b9583..23a17d7534 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -55,6 +55,7 @@ void ItemUseCB_PPUp(u8 taskId, TaskFunc task); u16 ItemIdToBattleMoveId(u16 item); bool8 IsMoveHm(u16 move); bool8 MonKnowsMove(struct Pokemon *mon, u16 move); +bool8 BoxMonKnowsMove(struct BoxPokemon *mon, u16 move); void ItemUseCB_TMHM(u8 taskId, TaskFunc task); void ItemUseCB_RareCandy(u8 taskId, TaskFunc task); void ItemUseCB_SacredAsh(u8 taskId, TaskFunc task); diff --git a/include/pokemon.h b/include/pokemon.h index 6a13f7432d..e55e2e7ecb 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -439,4 +439,5 @@ u8 *sub_806F4F8(u8 id, u8 arg1); u16 GetFormSpeciesId(u16 speciesId, u8 formId); u8 GetFormIdFromFormSpeciesId(u16 formSpeciesId); u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg); +u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg); #endif // GUARD_POKEMON_H diff --git a/src/party_menu.c b/src/party_menu.c index d471a92a8d..86e443f766 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4640,6 +4640,18 @@ bool8 MonKnowsMove(struct Pokemon *mon, u16 move) return FALSE; } +bool8 BoxMonKnowsMove(struct BoxPokemon *mon, u16 move) +{ + u8 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (GetMonData(mon, MON_DATA_MOVE1 + i) == move) + return TRUE; + } + return FALSE; +} + static void DisplayLearnMoveMessage(const u8 *str) { StringExpandPlaceholders(gStringVar4, str); diff --git a/src/pokemon.c b/src/pokemon.c index bc04c42f9c..021eca1d19 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8049,12 +8049,17 @@ u8 GetFormIdFromFormSpeciesId(u16 formSpeciesId) return targetFormId; } -// returns SPECIES_NONE if no form change is possible u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg) +{ + return GetFormChangeTargetSpeciesBoxMon(&mon->box, method, arg); +} + +// returns SPECIES_NONE if no form change is possible +u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg) { u32 i; u16 targetSpecies = SPECIES_NONE; - u16 originalSpecies = GetMonData(mon, MON_DATA_SPECIES, NULL); + u16 originalSpecies = GetBoxMonData(mon, MON_DATA_SPECIES, NULL); const struct FormChange *formChanges = gFormChangeTablePointers[originalSpecies]; if (formChanges == NULL) @@ -8064,11 +8069,11 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg) { if (method == formChanges[i].method) { - u32 ability = GetAbilityBySpecies(originalSpecies, GetMonData(mon, MON_DATA_ABILITY_NUM, NULL)); + u32 ability = GetAbilityBySpecies(originalSpecies, GetBoxMonData(mon, MON_DATA_ABILITY_NUM, NULL)); switch (method) { case FORM_ITEM_HOLD: - if (GetMonData(mon, MON_DATA_HELD_ITEM, NULL) == formChanges[i].param1 && (ability == formChanges[i].param2 || formChanges[i].param2 == ABILITY_NONE)) + if (GetBoxMonData(mon, MON_DATA_HELD_ITEM, NULL) == formChanges[i].param1 && (ability == formChanges[i].param2 || formChanges[i].param2 == ABILITY_NONE)) targetSpecies = formChanges[i].targetSpecies; break; case FORM_ITEM_USE: @@ -8076,7 +8081,7 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg) targetSpecies = formChanges[i].targetSpecies; break; case FORM_MOVE: - if (MonKnowsMove(mon, formChanges[i].param1) != formChanges[i].param2) + if (BoxMonKnowsMove(mon, formChanges[i].param1) != formChanges[i].param2) targetSpecies = formChanges[i].targetSpecies; break; case FORM_ITEM_USE_DAY: diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 92f45cb28a..9029fa4257 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -870,6 +870,10 @@ static void UnkUtil_Run(void); static void UnkUtil_CpuRun(struct UnkUtilData *); static void UnkUtil_DmaRun(struct UnkUtilData *); +// Form changing +void SetArceusFormPSS(struct BoxPokemon *boxMon); +void UpdateSpeciesSpritePSS(struct BoxPokemon *boxmon); + struct { const u8 *text; const u8 *desc; @@ -6866,6 +6870,34 @@ static void ReshowDisplayMon(void) TryRefreshDisplayMon(); } +void SetArceusFormPSS(struct BoxPokemon *boxMon) +{ + u16 species = GetMonData(boxMon, MON_DATA_SPECIES); + u16 targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD, 0); + if (targetSpecies != SPECIES_NONE) + { + //PlayCry2(targetSpecies, 0, 0x7D, 0xA); + SetBoxMonData(boxMon, MON_DATA_SPECIES, &targetSpecies); + UpdateSpeciesSpritePSS(boxMon); + } + /* +#ifdef POKEMON_EXPANSION + u16 species = GetMonData(boxMon, MON_DATA_SPECIES); + u16 forme; + u8 abilityNum = GetMonData(boxMon, MON_DATA_ABILITY_NUM); + u16 ability = GetAbilityBySpecies(species, abilityNum); + + if (GET_BASE_SPECIES_ID(species) == SPECIES_ARCEUS + && ability == ABILITY_MULTITYPE) + { + forme = GetArceusFormPSS(boxMon); + SetBoxMonData(boxMon, MON_DATA_SPECIES, &forme); + UpdateSpeciesSpritePSS(boxMon); + } +#endif +*/ +} + static void SetDisplayMonData(void *pokemon, u8 mode) { u8 *txtPtr; @@ -6952,6 +6984,8 @@ static void SetDisplayMonData(void *pokemon, u8 mode) { if (sStorage->displayMonSpecies == SPECIES_NIDORAN_F || sStorage->displayMonSpecies == SPECIES_NIDORAN_M) gender = MON_GENDERLESS; + + SetArceusFormPSS(pokemon); StringCopyPadded(sStorage->displayMonNameText, sStorage->displayMonName, CHAR_SPACE, 5); @@ -10078,3 +10112,15 @@ static void UnkUtil_DmaRun(struct UnkUtilData *data) data->dest += 64; } } + +void UpdateSpeciesSpritePSS(struct BoxPokemon *boxMon) +{ + u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES); + u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); + u32 pid = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); + + // Update front sprite + sStorage->displayMonSpecies = species; + sStorage->displayMonPalette = GetMonSpritePalFromSpeciesAndPersonality(species, otId, pid); + LoadDisplayMonGfx(species, pid); +} From 9ad505d7e809a3d472d1348a9c2f7ff981f7be6e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Wed, 29 Sep 2021 00:58:41 -0300 Subject: [PATCH 03/17] Mosaic effect when changing forms --- src/pokemon_storage_system.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 9029fa4257..91f19b8d0e 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -10120,6 +10120,7 @@ void UpdateSpeciesSpritePSS(struct BoxPokemon *boxMon) u32 pid = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); // Update front sprite + StartDisplayMonMosaicEffect(); sStorage->displayMonSpecies = species; sStorage->displayMonPalette = GetMonSpritePalFromSpeciesAndPersonality(species, otId, pid); LoadDisplayMonGfx(species, pid); From 7c9a3f338a5cf402491c4cac961efd2fa0cf23e4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Wed, 29 Sep 2021 01:49:18 -0300 Subject: [PATCH 04/17] Updates icon in box menu --- src/pokemon_storage_system.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 91f19b8d0e..2fce20a6c0 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -10124,4 +10124,35 @@ void UpdateSpeciesSpritePSS(struct BoxPokemon *boxMon) sStorage->displayMonSpecies = species; sStorage->displayMonPalette = GetMonSpritePalFromSpeciesAndPersonality(species, otId, pid); LoadDisplayMonGfx(species, pid); + + // Recreate icon sprite + //DestroyPartyMonIcon(sCursorPosition); + if (sInPartyMenu) + { + /* + CreatePartyMonsSprites(TRUE); + if (GetMonData(&boxMon, MON_DATA_HELD_ITEM) == ITEM_NONE) + SetPartyMonIconObjMode(sCursorPosition, 1); + else + SetBoxMonIconObjMode(sCursorPosition, 0); + */ + } + else + { + DestroyBoxMonIcon(sStorage->boxMonsSprites[sCursorPosition]); + CreateBoxMonIconAtPos(sCursorPosition); + SetBoxMonIconObjMode(sCursorPosition, GetMonData(boxMon, MON_DATA_HELD_ITEM) == ITEM_NONE); + + } + // + /* + sStorage->boxMonsSprites[sCursorPosition] = CreateMonIconSprite(sStorage->boxSpecies[sCursorPosition], + sStorage->boxPersonalities[sCursorPosition], + x, y, 2, subpriority + sStorage->boxMonsSprites[sCursorPosition] = CreateMonIconSprite(species, personality, x, y, 2, 19 - (sCursorPosition % IN_BOX_COLUMNS)); + */ + //DestroyBoxMonIcon(sStorage->partySprites[i]) + //sStorage->partySprites[0] = CreateMonIconSprite(species, personality, 104, 64, 1, 12); + //DestroyBoxMonIconAtPosition(boxPosition); + } From 52781969ab773bd40bad5c9e6eb5d8623eb37708 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Wed, 29 Sep 2021 01:59:31 -0300 Subject: [PATCH 05/17] Update icon in party menu --- src/pokemon_storage_system.c | 38 ++---------------------------------- 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 2fce20a6c0..827ee7b3eb 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -6880,22 +6880,6 @@ void SetArceusFormPSS(struct BoxPokemon *boxMon) SetBoxMonData(boxMon, MON_DATA_SPECIES, &targetSpecies); UpdateSpeciesSpritePSS(boxMon); } - /* -#ifdef POKEMON_EXPANSION - u16 species = GetMonData(boxMon, MON_DATA_SPECIES); - u16 forme; - u8 abilityNum = GetMonData(boxMon, MON_DATA_ABILITY_NUM); - u16 ability = GetAbilityBySpecies(species, abilityNum); - - if (GET_BASE_SPECIES_ID(species) == SPECIES_ARCEUS - && ability == ABILITY_MULTITYPE) - { - forme = GetArceusFormPSS(boxMon); - SetBoxMonData(boxMon, MON_DATA_SPECIES, &forme); - UpdateSpeciesSpritePSS(boxMon); - } -#endif -*/ } static void SetDisplayMonData(void *pokemon, u8 mode) @@ -8589,7 +8573,7 @@ static void MultiMove_RemoveMonsFromBox(void) u8 boxPosition = (IN_BOX_COLUMNS * i) + sMultiMove->minColumn; for (j = sMultiMove->minColumn; j < columnCount; j++) { - DestroyBoxMonIconAtPosition(boxPosition); + DestroyBoxMonIconAtPosition(boxPosition);//bookmark ZeroBoxMonAt(boxId, boxPosition); boxPosition++; } @@ -10126,33 +10110,15 @@ void UpdateSpeciesSpritePSS(struct BoxPokemon *boxMon) LoadDisplayMonGfx(species, pid); // Recreate icon sprite - //DestroyPartyMonIcon(sCursorPosition); if (sInPartyMenu) { - /* + DestroyAllPartyMonIcons(); CreatePartyMonsSprites(TRUE); - if (GetMonData(&boxMon, MON_DATA_HELD_ITEM) == ITEM_NONE) - SetPartyMonIconObjMode(sCursorPosition, 1); - else - SetBoxMonIconObjMode(sCursorPosition, 0); - */ } else { DestroyBoxMonIcon(sStorage->boxMonsSprites[sCursorPosition]); CreateBoxMonIconAtPos(sCursorPosition); SetBoxMonIconObjMode(sCursorPosition, GetMonData(boxMon, MON_DATA_HELD_ITEM) == ITEM_NONE); - } - // - /* - sStorage->boxMonsSprites[sCursorPosition] = CreateMonIconSprite(sStorage->boxSpecies[sCursorPosition], - sStorage->boxPersonalities[sCursorPosition], - x, y, 2, subpriority - sStorage->boxMonsSprites[sCursorPosition] = CreateMonIconSprite(species, personality, x, y, 2, 19 - (sCursorPosition % IN_BOX_COLUMNS)); - */ - //DestroyBoxMonIcon(sStorage->partySprites[i]) - //sStorage->partySprites[0] = CreateMonIconSprite(species, personality, 104, 64, 1, 12); - //DestroyBoxMonIconAtPosition(boxPosition); - } From 1f559df27d3f313747017fd8dd89e8020a058c49 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Wed, 29 Sep 2021 02:01:08 -0300 Subject: [PATCH 06/17] Final function name --- src/pokemon_storage_system.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 827ee7b3eb..e4b529b7ac 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -871,7 +871,7 @@ static void UnkUtil_CpuRun(struct UnkUtilData *); static void UnkUtil_DmaRun(struct UnkUtilData *); // Form changing -void SetArceusFormPSS(struct BoxPokemon *boxMon); +void SetMonFormPSS(struct BoxPokemon *boxMon); void UpdateSpeciesSpritePSS(struct BoxPokemon *boxmon); struct { @@ -6870,7 +6870,7 @@ static void ReshowDisplayMon(void) TryRefreshDisplayMon(); } -void SetArceusFormPSS(struct BoxPokemon *boxMon) +void SetMonFormPSS(struct BoxPokemon *boxMon) { u16 species = GetMonData(boxMon, MON_DATA_SPECIES); u16 targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD, 0); @@ -6969,7 +6969,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) if (sStorage->displayMonSpecies == SPECIES_NIDORAN_F || sStorage->displayMonSpecies == SPECIES_NIDORAN_M) gender = MON_GENDERLESS; - SetArceusFormPSS(pokemon); + SetMonFormPSS(pokemon); StringCopyPadded(sStorage->displayMonNameText, sStorage->displayMonName, CHAR_SPACE, 5); From 9114f3d1dc26c75eecc90184834ab7edd402a00a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Wed, 29 Sep 2021 19:40:26 -0300 Subject: [PATCH 07/17] Fixed lag and icons getting stuck when giving an item from the bag --- src/pokemon_storage_system.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index e4b529b7ac..da24f9b9a6 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -569,6 +569,7 @@ EWRAM_DATA static bool8 sIsMonBeingMoved = 0; EWRAM_DATA static u8 sMovingMonOrigBoxId = 0; EWRAM_DATA static u8 sMovingMonOrigBoxPos = 0; EWRAM_DATA static bool8 sAutoActionOn = 0; +EWRAM_DATA static bool8 sJustOpenedBag = 0; // Main tasks static void EnterPokeStorage(u8); @@ -3100,6 +3101,7 @@ static void Task_TakeItemForMoving(u8 taskId) StartCursorAnim(CURSOR_ANIM_OPEN); TakeItemFromMon(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetCursorPosition()); sStorage->state++; + sJustOpenedBag = FALSE; break; case 2: if (!IsItemIconAnimActive()) @@ -3619,6 +3621,7 @@ static void Task_GiveItemFromBag(u8 taskId) sWhichToReshow = SCREEN_CHANGE_ITEM_FROM_BAG - 1; sStorage->screenChangeType = SCREEN_CHANGE_ITEM_FROM_BAG; SetPokeStorageTask(Task_ChangeScreen); + sJustOpenedBag = TRUE; } break; } @@ -6968,8 +6971,6 @@ static void SetDisplayMonData(void *pokemon, u8 mode) { if (sStorage->displayMonSpecies == SPECIES_NIDORAN_F || sStorage->displayMonSpecies == SPECIES_NIDORAN_M) gender = MON_GENDERLESS; - - SetMonFormPSS(pokemon); StringCopyPadded(sStorage->displayMonNameText, sStorage->displayMonName, CHAR_SPACE, 5); @@ -7019,6 +7020,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) StringCopyPadded(sStorage->displayMonItemName, ItemId_GetName(sStorage->displayMonItemId), CHAR_SPACE, 8); else StringFill(sStorage->displayMonItemName, CHAR_SPACE, 8); + SetMonFormPSS(pokemon); } } @@ -10110,15 +10112,19 @@ void UpdateSpeciesSpritePSS(struct BoxPokemon *boxMon) LoadDisplayMonGfx(species, pid); // Recreate icon sprite - if (sInPartyMenu) + if (!sJustOpenedBag) { - DestroyAllPartyMonIcons(); - CreatePartyMonsSprites(TRUE); - } - else - { - DestroyBoxMonIcon(sStorage->boxMonsSprites[sCursorPosition]); - CreateBoxMonIconAtPos(sCursorPosition); - SetBoxMonIconObjMode(sCursorPosition, GetMonData(boxMon, MON_DATA_HELD_ITEM) == ITEM_NONE); + if (sInPartyMenu) + { + DestroyAllPartyMonIcons(); + CreatePartyMonsSprites(TRUE); + } + else + { + DestroyBoxMonIcon(sStorage->boxMonsSprites[sCursorPosition]); + CreateBoxMonIconAtPos(sCursorPosition); + SetBoxMonIconObjMode(sCursorPosition, GetMonData(boxMon, MON_DATA_HELD_ITEM) == ITEM_NONE); + } } + sJustOpenedBag = FALSE; } From e6c81d2862536d396bb69f5910f2d089384fc319 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Wed, 29 Sep 2021 21:30:54 -0300 Subject: [PATCH 08/17] Fixed form change when swapping items --- src/pokemon.c | 3 ++- src/pokemon_storage_system.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index 021eca1d19..0ac67f0cf2 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8073,7 +8073,8 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg switch (method) { case FORM_ITEM_HOLD: - if (GetBoxMonData(mon, MON_DATA_HELD_ITEM, NULL) == formChanges[i].param1 && (ability == formChanges[i].param2 || formChanges[i].param2 == ABILITY_NONE)) + if ((GetBoxMonData(mon, MON_DATA_HELD_ITEM, NULL) == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) + && (ability == formChanges[i].param2 || formChanges[i].param2 == ABILITY_NONE)) targetSpecies = formChanges[i].targetSpecies; break; case FORM_ITEM_USE: diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index da24f9b9a6..0626fcd0b0 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -8575,7 +8575,7 @@ static void MultiMove_RemoveMonsFromBox(void) u8 boxPosition = (IN_BOX_COLUMNS * i) + sMultiMove->minColumn; for (j = sMultiMove->minColumn; j < columnCount; j++) { - DestroyBoxMonIconAtPosition(boxPosition);//bookmark + DestroyBoxMonIconAtPosition(boxPosition); ZeroBoxMonAt(boxId, boxPosition); boxPosition++; } From b60aab1f6a232ca00fcd925fd27e94e1fa1303c2 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 30 Sep 2021 20:34:42 -0300 Subject: [PATCH 09/17] Fixed crash --- src/pokemon_storage_system.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 0626fcd0b0..7768f4e32d 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -10106,14 +10106,14 @@ void UpdateSpeciesSpritePSS(struct BoxPokemon *boxMon) u32 pid = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); // Update front sprite - StartDisplayMonMosaicEffect(); sStorage->displayMonSpecies = species; sStorage->displayMonPalette = GetMonSpritePalFromSpeciesAndPersonality(species, otId, pid); LoadDisplayMonGfx(species, pid); - - // Recreate icon sprite if (!sJustOpenedBag) { + StartDisplayMonMosaicEffect(); + + // Recreate icon sprite if (sInPartyMenu) { DestroyAllPartyMonIcons(); From 0fd9d2c0d5bb5b4bf9ac624eddb965aefa7cbc24 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 30 Sep 2021 21:55:21 -0300 Subject: [PATCH 10/17] Optimized so it only changes forms when moving items. --- src/pokemon_storage_system.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 7768f4e32d..3c7051e169 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -3799,9 +3799,16 @@ static void GiveChosenBagItem(void) { u8 pos = GetCursorPosition(); if (sInPartyMenu) + { + struct Pokemon *mon = &gPlayerParty[pos]; SetMonData(&gPlayerParty[pos], MON_DATA_HELD_ITEM, &itemId); + SetMonFormPSS(&mon->box); + } else + { SetCurrentBoxMonData(pos, MON_DATA_HELD_ITEM, &itemId); + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][pos]); + } RemoveBagItem(itemId, 1); } @@ -7020,7 +7027,6 @@ static void SetDisplayMonData(void *pokemon, u8 mode) StringCopyPadded(sStorage->displayMonItemName, ItemId_GetName(sStorage->displayMonItemId), CHAR_SPACE, 8); else StringFill(sStorage->displayMonItemName, CHAR_SPACE, 8); - SetMonFormPSS(pokemon); } } @@ -8860,11 +8866,14 @@ static void TakeItemFromMon(u8 cursorArea, u8 cursorPos) { SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &itemId); SetBoxMonIconObjMode(cursorPos, 1); + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][cursorPos]); } else { + struct Pokemon *mon = &gPlayerParty[cursorPos]; SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &itemId); SetPartyMonIconObjMode(cursorPos, 1); + SetMonFormPSS(&mon->box); } sStorage->movingItemId = sStorage->displayMonItemId; @@ -8899,12 +8908,15 @@ static void SwapItemsWithMon(u8 cursorArea, u8 cursorPos) itemId = GetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM); SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &sStorage->movingItemId); sStorage->movingItemId = itemId; + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][cursorPos]); } else { + struct Pokemon *mon = &gPlayerParty[cursorPos]; itemId = GetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM); SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &sStorage->movingItemId); sStorage->movingItemId = itemId; + SetMonFormPSS(&mon->box); } id = GetItemIconIdxByPosition(CURSOR_AREA_IN_HAND, 0); @@ -8926,11 +8938,14 @@ static void GiveItemToMon(u8 cursorArea, u8 cursorPos) { SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &sStorage->movingItemId); SetBoxMonIconObjMode(cursorPos, 0); + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][cursorPos]); } else { + struct Pokemon *mon = &gPlayerParty[cursorPos]; SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &sStorage->movingItemId); SetPartyMonIconObjMode(cursorPos, 0); + SetMonFormPSS(&mon->box); } } @@ -8950,11 +8965,14 @@ static void MoveItemFromMonToBag(u8 cursorArea, u8 cursorPos) { SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &itemId); SetBoxMonIconObjMode(cursorPos, 1); + SetMonFormPSS(&gPokemonStoragePtr->boxes[StorageGetCurrentBox()][cursorPos]); } else { + struct Pokemon *mon = &gPlayerParty[cursorPos]; SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &itemId); SetPartyMonIconObjMode(cursorPos, 1); + SetMonFormPSS(&mon->box); } } From 5bf300f97c2f4f1aeefb7f9424fe502c08313404 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 30 Sep 2021 22:12:02 -0300 Subject: [PATCH 11/17] Fixed issue where by default mon would change into the last form due to the IE items being defined as ITEM_NONE --- include/constants/pokemon_config.h | 278 ++++++++++++++--------------- 1 file changed, 139 insertions(+), 139 deletions(-) diff --git a/include/constants/pokemon_config.h b/include/constants/pokemon_config.h index c6e6a269f7..4bbb9e7de5 100644 --- a/include/constants/pokemon_config.h +++ b/include/constants/pokemon_config.h @@ -20,153 +20,153 @@ #ifndef ITEM_EXPANSION //Item Definitions for gEvolutionTable -//EVO_MEGA_EVOLUTION -#define ITEM_VENUSAURITE ITEM_NONE -#define ITEM_CHARIZARDITE_X ITEM_NONE -#define ITEM_CHARIZARDITE_Y ITEM_NONE -#define ITEM_BLASTOISINITE ITEM_NONE -#define ITEM_BEEDRILLITE ITEM_NONE -#define ITEM_PIDGEOTITE ITEM_NONE -#define ITEM_ALAKAZITE ITEM_NONE -#define ITEM_SLOWBRONITE ITEM_NONE -#define ITEM_GENGARITE ITEM_NONE -#define ITEM_KANGASKHANITE ITEM_NONE -#define ITEM_PINSIRITE ITEM_NONE -#define ITEM_GYARADOSITE ITEM_NONE -#define ITEM_AERODACTYLITE ITEM_NONE -#define ITEM_MEWTWONITE_X ITEM_NONE -#define ITEM_MEWTWONITE_Y ITEM_NONE -#define ITEM_AMPHAROSITE ITEM_NONE -#define ITEM_STEELIXITE ITEM_NONE -#define ITEM_SCIZORITE ITEM_NONE -#define ITEM_HERACRONITE ITEM_NONE -#define ITEM_HOUNDOOMINITE ITEM_NONE -#define ITEM_TYRANITARITE ITEM_NONE -#define ITEM_SCEPTILITE ITEM_NONE -#define ITEM_BLAZIKENITE ITEM_NONE -#define ITEM_SWAMPERTITE ITEM_NONE -#define ITEM_SABLENITE ITEM_NONE -#define ITEM_SHARPEDONITE ITEM_NONE -#define ITEM_MANECTITE ITEM_NONE -#define ITEM_CAMERUPTITE ITEM_NONE -#define ITEM_GLALITITE ITEM_NONE -#define ITEM_MAWILITE ITEM_NONE -#define ITEM_MEDICHAMITE ITEM_NONE -#define ITEM_ALTARIANITE ITEM_NONE -#define ITEM_ABSOLITE ITEM_NONE -#define ITEM_BANETTITE ITEM_NONE -#define ITEM_AGGRONITE ITEM_NONE -#define ITEM_GARDEVOIRITE ITEM_NONE -#define ITEM_SALAMENCITE ITEM_NONE -#define ITEM_METAGROSSITE ITEM_NONE -#define ITEM_LATIASITE ITEM_NONE -#define ITEM_LATIOSITE ITEM_NONE -#define ITEM_LOPUNNITE ITEM_NONE -#define ITEM_GARCHOMPITE ITEM_NONE -#define ITEM_LUCARIONITE ITEM_NONE -#define ITEM_ABOMASITE ITEM_NONE -#define ITEM_GALLADITE ITEM_NONE -#define ITEM_AUDINITE ITEM_NONE -#define ITEM_DIANCITE ITEM_NONE + //EVO_MEGA_EVOLUTION + #define ITEM_VENUSAURITE 10001 + #define ITEM_CHARIZARDITE_X 10002 + #define ITEM_CHARIZARDITE_Y 10003 + #define ITEM_BLASTOISINITE 10004 + #define ITEM_BEEDRILLITE 10005 + #define ITEM_PIDGEOTITE 10006 + #define ITEM_ALAKAZITE 10007 + #define ITEM_SLOWBRONITE 10008 + #define ITEM_GENGARITE 10009 + #define ITEM_KANGASKHANITE 10010 + #define ITEM_PINSIRITE 10011 + #define ITEM_GYARADOSITE 10012 + #define ITEM_AERODACTYLITE 10013 + #define ITEM_MEWTWONITE_X 10014 + #define ITEM_MEWTWONITE_Y 10015 + #define ITEM_AMPHAROSITE 10016 + #define ITEM_STEELIXITE 10017 + #define ITEM_SCIZORITE 10018 + #define ITEM_HERACRONITE 10019 + #define ITEM_HOUNDOOMINITE 10020 + #define ITEM_HOUNDOOMINITE 10021 + #define ITEM_SCEPTILITE 10022 + #define ITEM_BLAZIKENITE 10023 + #define ITEM_SWAMPERTITE 10024 + #define ITEM_SABLENITE 10025 + #define ITEM_SHARPEDONITE 10026 + #define ITEM_MANECTITE 10027 + #define ITEM_CAMERUPTITE 10028 + #define ITEM_GLALITITE 10029 + #define ITEM_MAWILITE 10030 + #define ITEM_MEDICHAMITE 10031 + #define ITEM_ALTARIANITE 10032 + #define ITEM_ABSOLITE 10033 + #define ITEM_BANETTITE 10034 + #define ITEM_AGGRONITE 10035 + #define ITEM_GARDEVOIRITE 10036 + #define ITEM_SALAMENCITE 10037 + #define ITEM_METAGROSSITE 10038 + #define ITEM_LATIASITE 10039 + #define ITEM_LATIOSITE 10040 + #define ITEM_LOPUNNITE 10041 + #define ITEM_GARCHOMPITE 10042 + #define ITEM_LUCARIONITE 10043 + #define ITEM_ABOMASITE 10044 + #define ITEM_GALLADITE 10045 + #define ITEM_AUDINITE 10046 + #define ITEM_DIANCITE 10047 -//EVO_TRADE_ITEM -#define ITEM_PROTECTOR ITEM_NONE -#define ITEM_ELECTIRIZER ITEM_NONE -#define ITEM_MAGMARIZER ITEM_NONE -#define ITEM_DUBIOUS_DISC ITEM_NONE -#define ITEM_PRISM_SCALE ITEM_NONE -#define ITEM_REAPER_CLOTH ITEM_NONE -#define ITEM_SACHET ITEM_NONE -#define ITEM_WHIPPED_DREAM ITEM_NONE + //EVO_TRADE_ITEM + #define ITEM_PROTECTOR 10048 + #define ITEM_ELECTIRIZER 10049 + #define ITEM_MAGMARIZER 10050 + #define ITEM_DUBIOUS_DISC 10051 + #define ITEM_PRISM_SCALE 10052 + #define ITEM_REAPER_CLOTH 10053 + #define ITEM_SACHET 10054 + #define ITEM_WHIPPED_DREAM 10055 -//EVO_ITEM -#define ITEM_ICE_STONE ITEM_NONE -#define ITEM_SHINY_STONE ITEM_NONE -#define ITEM_DUSK_STONE ITEM_NONE -#define ITEM_DAWN_STONE ITEM_NONE -#define ITEM_TART_APPLE ITEM_NONE -#define ITEM_SWEET_APPLE ITEM_NONE -#define ITEM_CRACKED_POT ITEM_NONE -#define ITEM_GALARICA_CUFF ITEM_NONE -#define ITEM_GALARICA_WREATH ITEM_NONE -#define ITEM_CHIPPED_POT ITEM_NONE + //EVO_ITEM + #define ITEM_ICE_STONE 10056 + #define ITEM_SHINY_STONE 10057 + #define ITEM_DUSK_STONE 10058 + #define ITEM_DAWN_STONE 10059 + #define ITEM_TART_APPLE 10060 + #define ITEM_SWEET_APPLE 10061 + #define ITEM_CRACKED_POT 10062 + #define ITEM_GALARICA_CUFF 10063 + #define ITEM_GALARICA_WREATH 10064 + #define ITEM_CHIPPED_POT 10065 -//EVO_ITEM_HOLD -#define ITEM_RAZOR_FANG ITEM_NONE -#define ITEM_RAZOR_CLAW ITEM_NONE -#define ITEM_OVAL_STONE ITEM_NONE + //EVO_ITEM_HOLD + #define ITEM_RAZOR_FANG 10066 + #define ITEM_RAZOR_CLAW 10067 + #define ITEM_OVAL_STONE 10068 -//FORM_ITEM_HOLD -#define ITEM_GRISEOUS_ORB ITEM_NONE -#define ITEM_DRACO_PLATE ITEM_NONE -#define ITEM_DREAD_PLATE ITEM_NONE -#define ITEM_EARTH_PLATE ITEM_NONE -#define ITEM_FIST_PLATE ITEM_NONE -#define ITEM_FLAME_PLATE ITEM_NONE -#define ITEM_ICICLE_PLATE ITEM_NONE -#define ITEM_INSECT_PLATE ITEM_NONE -#define ITEM_IRON_PLATE ITEM_NONE -#define ITEM_MEADOW_PLATE ITEM_NONE -#define ITEM_MIND_PLATE ITEM_NONE -#define ITEM_PIXIE_PLATE ITEM_NONE -#define ITEM_SKY_PLATE ITEM_NONE -#define ITEM_SPLASH_PLATE ITEM_NONE -#define ITEM_SPOOKY_PLATE ITEM_NONE -#define ITEM_STONE_PLATE ITEM_NONE -#define ITEM_TOXIC_PLATE ITEM_NONE -#define ITEM_ZAP_PLATE ITEM_NONE -#define ITEM_FIGHTINIUM_Z ITEM_NONE -#define ITEM_FLYINIUM_Z ITEM_NONE -#define ITEM_POISONIUM_Z ITEM_NONE -#define ITEM_GROUNDIUM_Z ITEM_NONE -#define ITEM_ROCKIUM_Z ITEM_NONE -#define ITEM_BUGINIUM_Z ITEM_NONE -#define ITEM_GHOSTIUM_Z ITEM_NONE -#define ITEM_STEELIUM_Z ITEM_NONE -#define ITEM_FIRIUM_Z ITEM_NONE -#define ITEM_WATERIUM_Z ITEM_NONE -#define ITEM_GRASSIUM_Z ITEM_NONE -#define ITEM_ELECTRIUM_Z ITEM_NONE -#define ITEM_PSYCHIUM_Z ITEM_NONE -#define ITEM_ICIUM_Z ITEM_NONE -#define ITEM_DRAGONIUM_Z ITEM_NONE -#define ITEM_DARKINIUM_Z ITEM_NONE -#define ITEM_FAIRIUM_Z ITEM_NONE -#define ITEM_DOUSE_DRIVE ITEM_NONE -#define ITEM_SHOCK_DRIVE ITEM_NONE -#define ITEM_BURN_DRIVE ITEM_NONE -#define ITEM_CHILL_DRIVE ITEM_NONE -#define ITEM_BUG_MEMORY ITEM_NONE -#define ITEM_DARK_MEMORY ITEM_NONE -#define ITEM_DRAGON_MEMORY ITEM_NONE -#define ITEM_ELECTRIC_MEMORY ITEM_NONE -#define ITEM_FAIRY_MEMORY ITEM_NONE -#define ITEM_FIGHTING_MEMORY ITEM_NONE -#define ITEM_FIRE_MEMORY ITEM_NONE -#define ITEM_FLYING_MEMORY ITEM_NONE -#define ITEM_GHOST_MEMORY ITEM_NONE -#define ITEM_GRASS_MEMORY ITEM_NONE -#define ITEM_GROUND_MEMORY ITEM_NONE -#define ITEM_ICE_MEMORY ITEM_NONE -#define ITEM_POISON_MEMORY ITEM_NONE -#define ITEM_PSYCHIC_MEMORY ITEM_NONE -#define ITEM_ROCK_MEMORY ITEM_NONE -#define ITEM_STEEL_MEMORY ITEM_NONE -#define ITEM_WATER_MEMORY ITEM_NONE + //FORM_ITEM_HOLD + #define ITEM_GRISEOUS_ORB 10069 + #define ITEM_DRACO_PLATE 10070 + #define ITEM_DREAD_PLATE 10071 + #define ITEM_EARTH_PLATE 10072 + #define ITEM_FIST_PLATE 10073 + #define ITEM_FLAME_PLATE 10074 + #define ITEM_ICICLE_PLATE 10075 + #define ITEM_INSECT_PLATE 10076 + #define ITEM_IRON_PLATE 10077 + #define ITEM_MEADOW_PLATE 10078 + #define ITEM_MIND_PLATE 10079 + #define ITEM_PIXIE_PLATE 10080 + #define ITEM_SKY_PLATE 10081 + #define ITEM_SPLASH_PLATE 10082 + #define ITEM_SPOOKY_PLATE 10083 + #define ITEM_STONE_PLATE 10084 + #define ITEM_TOXIC_PLATE 10085 + #define ITEM_ZAP_PLATE 10086 + #define ITEM_FIGHTINIUM_Z 10087 + #define ITEM_FLYINIUM_Z 10088 + #define ITEM_POISONIUM_Z 10089 + #define ITEM_GROUNDIUM_Z 10090 + #define ITEM_ROCKIUM_Z 10091 + #define ITEM_BUGINIUM_Z 10092 + #define ITEM_GHOSTIUM_Z 10093 + #define ITEM_STEELIUM_Z 10094 + #define ITEM_FIRIUM_Z 10095 + #define ITEM_WATERIUM_Z 10096 + #define ITEM_GRASSIUM_Z 10097 + #define ITEM_ELECTRIUM_Z 10098 + #define ITEM_PSYCHIUM_Z 10099 + #define ITEM_ICIUM_Z 10100 + #define ITEM_DRAGONIUM_Z 10101 + #define ITEM_DARKINIUM_Z 10102 + #define ITEM_FAIRIUM_Z 10103 + #define ITEM_DOUSE_DRIVE 10104 + #define ITEM_SHOCK_DRIVE 10105 + #define ITEM_BURN_DRIVE 10106 + #define ITEM_CHILL_DRIVE 10107 + #define ITEM_BUG_MEMORY 10108 + #define ITEM_DARK_MEMORY 10109 + #define ITEM_DRAGON_MEMORY 10110 + #define ITEM_ELECTRIC_MEMORY 10111 + #define ITEM_FAIRY_MEMORY 10112 + #define ITEM_FIGHTING_MEMORY 10113 + #define ITEM_FIRE_MEMORY 10114 + #define ITEM_FLYING_MEMORY 10115 + #define ITEM_GHOST_MEMORY 10116 + #define ITEM_GRASS_MEMORY 10117 + #define ITEM_GROUND_MEMORY 10118 + #define ITEM_ICE_MEMORY 10119 + #define ITEM_POISON_MEMORY 10120 + #define ITEM_PSYCHIC_MEMORY 10121 + #define ITEM_ROCK_MEMORY 10122 + #define ITEM_STEEL_MEMORY 10123 + #define ITEM_WATER_MEMORY 10124 -//FORM_ITEM_USE -#define ITEM_GRACIDEA ITEM_NONE -// #define ITEM_REVEAL_GLASS ITEM_NONE -// #define ITEM_PRISON_BOTTLE ITEM_NONE -#define ITEM_RED_NECTAR ITEM_NONE -#define ITEM_YELLOW_NECTAR ITEM_NONE -#define ITEM_PINK_NECTAR ITEM_NONE -#define ITEM_PURPLE_NECTAR ITEM_NONE + //FORM_ITEM_USE + #define ITEM_GRACIDEA 10125 + // #define ITEM_REVEAL_GLASS 10126 + // #define ITEM_PRISON_BOTTLE 10127 + #define ITEM_RED_NECTAR 10128 + #define ITEM_YELLOW_NECTAR 10129 + #define ITEM_PINK_NECTAR 10130 + #define ITEM_PURPLE_NECTAR 10131 #endif // ITEM_EXPANSION #ifndef BATTLE_ENGINE -#define ABILITY_MULTITYPE ABILITY_NONE -#define ABILITY_RKS_SYSTEM ABILITY_NONE + #define ABILITY_MULTITYPE ABILITY_NONE + #define ABILITY_RKS_SYSTEM ABILITY_NONE #endif // BATTLE_ENGINE #endif // GUARD_CONSTANTS_POKEMON_CONFIG_H From 5593a8378349b11409e9c68c13ca9e6a202ef9a2 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 30 Sep 2021 22:35:28 -0300 Subject: [PATCH 12/17] Fixed compile --- include/constants/pokemon_config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/pokemon_config.h b/include/constants/pokemon_config.h index 4bbb9e7de5..53bc6c526f 100644 --- a/include/constants/pokemon_config.h +++ b/include/constants/pokemon_config.h @@ -41,7 +41,7 @@ #define ITEM_SCIZORITE 10018 #define ITEM_HERACRONITE 10019 #define ITEM_HOUNDOOMINITE 10020 - #define ITEM_HOUNDOOMINITE 10021 + #define ITEM_TYRANITARITE 10021 #define ITEM_SCEPTILITE 10022 #define ITEM_BLAZIKENITE 10023 #define ITEM_SWAMPERTITE 10024 From 4ba03a6d54381378b7bf741b965029b6d3365724 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 30 Sep 2021 22:47:25 -0300 Subject: [PATCH 13/17] Fixed corruption bug when giving too many items from bag into boxes. --- src/pokemon_storage_system.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 3c7051e169..bf07fb5844 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -10126,9 +10126,9 @@ void UpdateSpeciesSpritePSS(struct BoxPokemon *boxMon) // Update front sprite sStorage->displayMonSpecies = species; sStorage->displayMonPalette = GetMonSpritePalFromSpeciesAndPersonality(species, otId, pid); - LoadDisplayMonGfx(species, pid); if (!sJustOpenedBag) { + LoadDisplayMonGfx(species, pid); StartDisplayMonMosaicEffect(); // Recreate icon sprite From af5ff0533862d95dd147c69bcaa0eacf727e06ef Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Tue, 5 Oct 2021 21:25:56 -0300 Subject: [PATCH 14/17] Fixed FORM_ITEM_HOLD_ABILITY check --- src/party_menu.c | 4 +++- src/pokemon.c | 5 +++-- src/pokemon_storage_system.c | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index 4d472a92e6..6c3d813faa 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5314,7 +5314,9 @@ void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task) void TryItemHoldFormChange(struct Pokemon *mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES); - u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_HOLD, 0); + u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_HOLD_ABILITY, 0); + if (targetSpecies == SPECIES_NONE) + targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_HOLD, 0); if (targetSpecies != SPECIES_NONE) { PlayCry2(targetSpecies, 0, 0x7D, 0xA); diff --git a/src/pokemon.c b/src/pokemon.c index c88443ccb6..a6b07dbf57 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8076,7 +8076,7 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg switch (method) { case FORM_ITEM_HOLD: - if (heldItem == formChanges[i].param1) + if (heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) targetSpecies = formChanges[i].targetSpecies; break; case FORM_ITEM_USE: @@ -8088,7 +8088,8 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg targetSpecies = formChanges[i].targetSpecies; break; case FORM_ITEM_HOLD_ABILITY: - if (heldItem == formChanges[i].param1 && ability == formChanges[i].param2) + if ((heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) + && ability == formChanges[i].param2) targetSpecies = formChanges[i].targetSpecies; break; case FORM_ITEM_USE_TIME: diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index bf07fb5844..3f358becbd 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -6883,7 +6883,9 @@ static void ReshowDisplayMon(void) void SetMonFormPSS(struct BoxPokemon *boxMon) { u16 species = GetMonData(boxMon, MON_DATA_SPECIES); - u16 targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD, 0); + u16 targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD_ABILITY, 0); + if (targetSpecies == SPECIES_NONE) + targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD, 0); if (targetSpecies != SPECIES_NONE) { //PlayCry2(targetSpecies, 0, 0x7D, 0xA); From aec4d78bd4d9736aa35ffbfd77b1736d1ee26d70 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 4 Nov 2021 21:22:03 -0300 Subject: [PATCH 15/17] Fixed edge case with givemon --- src/script_pokemon_util.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index 93a7477720..c24255ccdf 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -64,11 +64,23 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u int sentToPc; u8 heldItem[2]; struct Pokemon mon; + u16 targetSpecies; CreateMon(&mon, species, level, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); heldItem[0] = item; heldItem[1] = item >> 8; SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); + + // In case a mon with a form changing item is given. Eg: SPECIES_ARCEUS with ITEM_SPLASH_PLATE will transform into SPECIES_ARCEUS_WATER upon gifted. + targetSpecies = GetFormChangeTargetSpecies(&mon, FORM_ITEM_HOLD_ABILITY, 0); + if (targetSpecies == SPECIES_NONE) + targetSpecies = GetFormChangeTargetSpecies(&mon, FORM_ITEM_HOLD, 0); + if (targetSpecies != SPECIES_NONE) + { + SetMonData(&mon, MON_DATA_SPECIES, &targetSpecies); + CalculateMonStats(&mon); + } + sentToPc = GiveMonToPlayer(&mon); nationalDexNum = SpeciesToNationalPokedexNum(species); From 262569845ae60f2468ede190d05a83bfa730b112 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Fri, 5 Nov 2021 17:01:15 -0300 Subject: [PATCH 16/17] Comment capitalise Co-authored-by: BuffelSaft --- src/pokemon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pokemon.c b/src/pokemon.c index a6b07dbf57..8324041c3e 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8054,7 +8054,7 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg) return GetFormChangeTargetSpeciesBoxMon(&mon->box, method, arg); } -// returns SPECIES_NONE if no form change is possible +// Returns SPECIES_NONE if no form change is possible u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg) { u32 i; From 793de700683454343e1b4e18f41681746511386c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Sun, 19 Dec 2021 13:09:01 -0300 Subject: [PATCH 17/17] Fixed reference to PlayCry2 --- src/party_menu.c | 2 +- src/pokemon_storage_system.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index 1e071a081c..7c24eeb7a7 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5317,7 +5317,7 @@ void TryItemHoldFormChange(struct Pokemon *mon) targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_HOLD, 0); if (targetSpecies != SPECIES_NONE) { - PlayCry2(targetSpecies, 0, 0x7D, 0xA); + PlayCry_NormalNoDucking(targetSpecies, 0, CRY_VOLUME_RS, CRY_VOLUME_RS); SetMonData(mon, MON_DATA_SPECIES, &targetSpecies); FreeAndDestroyMonIconSprite(&gSprites[sPartyMenuBoxes[gPartyMenu.slotId].monSpriteId]); CreatePartyMonIconSpriteParameterized(targetSpecies, GetMonData(mon, MON_DATA_PERSONALITY, NULL), &sPartyMenuBoxes[gPartyMenu.slotId], 1); diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 639c4f7fc0..1a3e8f0fea 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -6911,7 +6911,6 @@ void SetMonFormPSS(struct BoxPokemon *boxMon) targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD, 0); if (targetSpecies != SPECIES_NONE) { - //PlayCry2(targetSpecies, 0, 0x7D, 0xA); SetBoxMonData(boxMon, MON_DATA_SPECIES, &targetSpecies); UpdateSpeciesSpritePSS(boxMon); }