A ver, esto también lo estuve investigando un poco por encima hace algún tiempo y ayer y hoy también lo he estado mirando por un comentario de Eing. Aquí van mis conclusiones y algunas informaciones que he obtenidos, algunas yo mismo y otras que he encontrado por ahí.
Muchas cosas como el PP de los ataques, los ataques o la especie del pokémon, por ejemplo, se encuentran en una zona dentro de la estructura del pokémon en la Ram. Es una zona muy amplía. El problema es que está encriptado y si cambias un byte, bad egg. Es decir, adiós pokémon xD.
La clave principal creo que reside en 2 bytes que preceden (casi xD) a los datos encriptados del pokémon.
La imagen la he tomado de fire red, pero da igual, la estructura de los pokémon es básicamente la misma, o por lo menos, esta parte, porque también lo he mirado en ruby xD. Bueno, los 2 bytes que digo son los marcados en rojo. Los verdes no sé qué son, pero parecen irrelevantes, ya que siempre mantienen esos valores. Aunque es posible que tengan alguna función, quizás en pokémon especiales. Y lo azul son los datos del pokémon, 48 bytes exactamente. Después de eso va otra serie de bytes en "00", que no sé lo que son y el quinto byte (07) corresponde al nivel del pokémon, por situarnos xD.
El caso es que siempre, siempre, siempre que cambia algo dentro de lo marcado en azul, ya sea porque el pokémon aprende un nuevo ataque, baja el PP de cualquiera de ellos o lo que sae, esa combinación cambia. Por lo que si cambiamos cualquier dato de la zona azul sin cambiar los bytes de la zona roja a sus valores correctos, nuestro pokémon será interpretado como un bad egg.
En mi opinión, hay que averiguar como cambia la zona roja en función de los cambios que sufra la zona azul, de esa manera, podremos manipular completamente al pokémon en cuestión.
También quiero aclarar que los bytes fuera de la zona azul no están encriptados y son mucho más manipulables, pero pueden dar problemas. Por ejemplo, si le cambias el nivel a un pokémon, cuando va a subir de nivel tras una batalla (lo normal xD), se queda pillado el juego.
Bueno, eso es todo, seguiré aportando información según la vaya consiguiendo :D
Interesante, pienso que la relacion entre la zona azul y la roja se puede sacar sudando un poco, viendo como se ven con distintos pokemons, niveles, ataques, ect...
Si se hace asi, tarde o temprano se puede encontrar un patron que permita digamos "Decodificar" lo azul, de manera que si cambiamos algo, sabremos exactamente que poner en la seccion roja :)
En fin, suerte para ambos, y Gershel, la info que llevas investigado es muy buena, de verdad te felicito :D