10064-NDS_Hacking
#0
Javi4315♪ 13374
Bueno, no estoy 100% seguro de que esto vaya aquí, pero bueno, me pareció el mejor lugar.

Después de ver el tema de Eing en área técnica ("¿Problemas?" o algo así xD), en el que se hablaba sobre el hacking en NDS, entre otras cosas, me vi inspirado para empezar con una pequeña investigación. Ya hay dos generaciones más de pokémon (4ª y 5ª) que a penas hemos podido hackear. Eso es preocupante, no podemos estar toda la vida hackeando GBA. Así que mostraré el pequeño avance que he obtenido desde que empecé (ayer, sí, es que la inspiración no viene de momento xD).

Lo que he estado investigando, básicamente, son los eventos. Aquí dejo la estructura que tiene un overworld:



Por ejemplo, aquí tenéis un evento (overworld):

0000090003000000000009000200000000000000010001007B005603000001


Podéis saber que simboliza cada byte o, mejor dicho, cada grupo de ellos, pues sólo el último "desconocido" consta de 1 byte. Pero quizás lo más interesante sea lo marcado en violeta. ¿Qué simbolizan esos bytes? Pues simbolizan el script que tiene el overworld en cuestión. Esto ya es lo complicado, "0900" está permutado, el script sería "0009", es decir, el 9. ¿Pero el 9 de dónde? Pues del mapa en el que se encuentra el overworld.

Si bien en GBA un evento tenía asignado un script por medio de un puntero de 4 bytes, aquí no hay nada de eso. Digamos que un Rom de NDS va por compartimentos, por decirlo de alguna forma. El rom debe estar dividido por mapas, es decir, un mapa tiene sus eventos, sus scripts, etc. El primer evento de cada mapa siempre será el evento 0, al igual que el script, si es el primero de ese mapa, será el 0. Por tanto, cada mapa tiene sus eventos y scripts "propios", podría decirse.

Básicamente, lo que habría que averiguar es cómo se distribuyen los eventos y scripts en cada mapa, es decir, comprender su estructura de forma que podamos, editar o añadir scripts y que se puedan asignar al evento y que este los reconozca perfectamente. En la zona en la que los eventos se distribuyen, debería tener una estructura que indicara donde se encuentra el script de X mapa y la longitud que tiene, ya que añadí un comando a un script y no lo reconoce ¿Por qué? Porque el rom indica la longitud del script, sin embargo, si sólo cambias un comando por otro sin afectar a la longitud del script, sí lo reconoce, por eso he podido deducir que se tiene que indicar la longitud. ¿Pero cómo es esta estructura? ¿Por punteros cómo en GBA? ¿O tiene otro sistema?

En fin, lo dejo ahí, podéis opinar o dar información. Ya sea propia o que encontréis por internet. También podéis colaborar en la investigación de NDS, este post sólo es un paso.

Saludos!!

IMPORTANTE: Lo que he dicho en este post no es 100% verdad, es decir, yo he estado estudiando el rom de pokémon diamond y he expuesto mis propias conclusiones.