Bueno, debido a uno de los retos que me pusieron, me puse a investigar acerca del cambio de forma, y visto que lo que quería era cumplir el reto y poco más, he decidido compartir lo que averigüé por el camino, creo que puede ser interesante para más de una persona, y desde luego, quita bastante trabajo de encima.
Soy consciente de que es algo hecho de una forma bastante chapucera, pero es funcional, que al final es lo que buscamos, si alguien prefiere hacerle con más perfección, está en la libertad de hacerlo (y postearlo si gusta)
Voy al grano, lo único que he cambiado son un par de líneas del archivo "src/party_menu.c"
Concrétamente, la función "party_menu_link_mon_held_item_object" que se encuentra aproximadamente en la línea 3696.
He añadido esto:
Lo que resumiendo, sirve para "actualizar" el icono cada vez que das o quitas un objeto, esta es la parte que peor está del código, y de la que si se tuviera que tocar algo, sería esto, pues tiene diversos fallos. Lo principal sería que en lugar de eliminar el icono original, y crear uno nuevo, se editara tan sólo el icono que se carga, sin eliminar el propio objeto. Pero visto que es algo tedioso, prefiero no hacerlo por el momento.
Lo siguiente, es cambiar la función "PartyMenuUpdateMonHeldItem", en la que añadí:
Aquí estamos preguntando si el Pokémon lleva equipada una poción, y si además, dicho Pokémon es Torchic. En caso de que ambas condiciones se cumplan, se cambiará la especie de Torchic, por la de Pikachu (que es la número 25 en la Pokédex, es decir, el número de "monDexValue")
Por útimo, la función "PartyMenuTryGiveMonHeldItem", que está justo abajo de la anterior. En esta, tan sólo he añadido esto:
Básicamente, en el condicional (if), pregunto si el objeto que se le va a equipar ahora al Pokémon es diferente de una poción, y además, que si dicho Pokémon es Pikachu, en caso de que si, se cambia su especie por la que corresponda en la Pokedex al número de la variable "monDexValue", en este caso, lo que ocurre es que si nuestro Pikachu tiene equipada una poción, y si se la quitamos, pasa a ser Torchic.
Si cabe lugar a dudas, aquí dejo un vídeo de demostración de lo que hace
Siento ser tan breve, pero no me da tiempo a más, espero que de verdad tratéis de investigarlo un pelín más
Chao <3
Soy consciente de que es algo hecho de una forma bastante chapucera, pero es funcional, que al final es lo que buscamos, si alguien prefiere hacerle con más perfección, está en la libertad de hacerlo (y postearlo si gusta)
Voy al grano, lo único que he cambiado son un par de líneas del archivo "src/party_menu.c"
Concrétamente, la función "party_menu_link_mon_held_item_object" que se encuentra aproximadamente en la línea 3696.
He añadido esto:
Código:
void party_menu_link_mon_held_item_object(u8 taskId)
{
if (gUnknown_0202E8F6 == 0)
{
SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.primarySelectedMonIndex);
gTasks[ewram1C000.unk4].func = ewram1C000.unk10;
[B][COLOR="#ff5252"]DestroySprite(&gSprites[ewram1C000.primarySelectedMonIndex]);
TryCreatePartyMenuMonIcon(taskId, ewram1C000.primarySelectedMonIndex, &gPlayerParty[ewram1C000.primarySelectedMonIndex]);[/COLOR][/B]
DestroyTask(taskId);
}
}
Lo siguiente, es cambiar la función "PartyMenuUpdateMonHeldItem", en la que añadí:
Código:
bool8 PartyMenuUpdateMonHeldItem(struct Pokemon *pkmn, u16 item)
{
u8 itemData[2];
[COLOR="#ff5252"]u16 monDexValue;[/COLOR]
if (ItemIsMail(item) == TRUE)
{
if (GiveMailToMon(pkmn, item) == 0xFF)
return TRUE;
gUnknown_0202E8F4 = 2;
}
else
{
gUnknown_0202E8F4 = 1;
}
itemData[0] = item;
itemData[1] = item >> 8;
SetMonData(pkmn, MON_DATA_HELD_ITEM, itemData);
[COLOR="#ff5252"]if (item == ITEM_POTION && GetMonData(ewram1C000.pokemon, MON_DATA_SPECIES) == SPECIES_TORCHIC){
monDexValue = 25;
SetMonData(&gPlayerParty[ewram1C000.primarySelectedMonIndex], MON_DATA_SPECIES, &monDexValue);
}[/COLOR]
return FALSE;
}
}
Por útimo, la función "PartyMenuTryGiveMonHeldItem", que está justo abajo de la anterior. En esta, tan sólo he añadido esto:
Código:
void PartyMenuTryGiveMonHeldItem(u8 taskId, u16 newItem, TaskFunc c)
{
u16 currentItem;
[COLOR="#ff5252"]u16 monDexValue;[/COLOR]
gTasks[taskId].func = TaskDummy;
sub_806E8D0(taskId, newItem, c);
currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM);
gUnknown_0202E8F4 = 0;
gUnknown_0202E8F8 = 0;
[COLOR="#ff5252"]if (newItem != ITEM_POTION && GetMonData(ewram1C000.pokemon, MON_DATA_SPECIES) == SPECIES_PIKACHU){
monDexValue = 280;
SetMonData(&gPlayerParty[ewram1C000.primarySelectedMonIndex], MON_DATA_SPECIES, &monDexValue);
}[/COLOR]
if (currentItem != 0)
{
if (ItemIsMail(currentItem) == TRUE)
{
sub_806E834(gOtherText_MailMustBeRemoved, 1);
CreateTask(party_menu_link_mon_held_item_object, 5);
}
else
{
GetMonNickname(ewram1C000.pokemon, gStringVar1);
CopyItemName(currentItem, gStringVar2);
StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyHolding);
sub_806E834(gStringVar4, 1);
CreateTask(Task_ConfirmGiveHeldItem, 5);
if (ItemIsMail(newItem) == TRUE)
gUnknown_0202E8F8 = currentItem;
}
}
else
{
PartyMenuUpdateMonHeldItem(ewram1C000.pokemon, newItem);
RemoveBagItem(newItem, 1);
if (ItemIsMail(newItem))
{
gTasks[taskId].func = c;
}
else
{
DisplayGiveHeldItemMessage(ewram1C000.primarySelectedMonIndex, newItem, 1);
CreateTask(party_menu_link_mon_held_item_object, 5);
}
}
}
Si cabe lugar a dudas, aquí dejo un vídeo de demostración de lo que hace
Siento ser tan breve, pero no me da tiempo a más, espero que de verdad tratéis de investigarlo un pelín más
Chao <3