EDITO: En este tema lo que se enseña es a compilar Pokeruby.
Para aprender a compilar Pokeemerald, visiten este tema.
Para aprender a compilar Pokefirered visiten este otro tema.
Holi. Por fin me armé de valor para escribir este pedazo de tema.
Lo cierto es que tras haberlo escrito, me siento un poco nervioso.
Quiero decir, esto es grande y es un tema quizá un tanto pesado.
Pero bueh, en el peor de los casos pasará al fondo de esta sección del foro sin pena ni gloria
El dia de hoy, niños y niñas de todas las edades, quiero hablarles sobre Pokeruby, el proyecto de desensamblaje y decompilación de Pokémon Ruby & Sapphire.

Introducción - ¿Qué es Pokeruby?
Tutorial - Compilando Pokeruby
Extra - Otros Comandos
Extra 2 - Herramientas como gbagfx en Cygwin.bat o Mintty.exe
Y por ahora, yo creo que esto es todo.
Tengo un grupo de pequeños tutoriales escritos por mi que pienso traer y algunos escritos por otras personas tambien.
Antes de partir, quiero abrirme un poco con ustedes sobre todo esto.
Actualmente, como habran podido notar por el hecho de que soy practicamente el unico en esta comunidad que se atreve a hablar fuerte y claro sobre Pokeruby y sus equivalentes, no existe una comunidad solida para estas magnificas obras de arte.
Con el paso del tiempo, eso va a ir cambiando. Varios miembros y ex-miembros de PokeCommunity poquito a poco ya estamos empezando a explorar Pokeruby, nos estamos intentando familiarizar con los nuevos metodos para hacer las cosas, estamos curioseando y probando a cambiar distintas cosas, de hecho ya hay hasta proyectos planificados que pretenden usarlos llegado el momento.
Lo que personas como ProjectRevoTPP, Ax6, ShantyTown, Padz y otros están haciendo es voltear la Comunidad de ROM Hacking Pokémon de pies a cabeza. Sacarnos del agujero negro lleno de herramientas abandonadas y de codigo cerrado, herramientas que funcionan mal o herramientas que rompen nuestras ROMs.
Yo, Lunos, tengo un sueño.
Ese sueño es que un dia, esta comunidad explore estos proyectos de desensamblaje y/o decompilación, de la misma forma en la que ha estado explorando Rojo Fuego en Español recientemente.
Yo tengo fé ciega en que con estas preciosuras se puede llegar muchisimo mas lejos de lo que el ROM Hacking mediante metodos convencionales jamas podrá llegar, y quiero dar el primer paso hacia ese sueño justo aqui, hoy, porque me sale de las pelotas.
Y eso es todo.
Para aprender a compilar Pokeemerald, visiten este tema.
Para aprender a compilar Pokefirered visiten este otro tema.
Holi. Por fin me armé de valor para escribir este pedazo de tema.
Lo cierto es que tras haberlo escrito, me siento un poco nervioso.
Quiero decir, esto es grande y es un tema quizá un tanto pesado.
Pero bueh, en el peor de los casos pasará al fondo de esta sección del foro sin pena ni gloria
El dia de hoy, niños y niñas de todas las edades, quiero hablarles sobre Pokeruby, el proyecto de desensamblaje y decompilación de Pokémon Ruby & Sapphire.

Introducción - ¿Qué es Pokeruby?
¿Qué es Pokeruby?
Pokeruby es el proyecto de desensamblaje y decompilación de los videojuegos Pokémon Ruby y Pokémon Sapphire para la GBA.
Existen equivalentes para otros varios juegos de Pokémon, siendo Pokered y Pokecrystal los mas conocidos.
¿Qué es la decompilación?
Decompilación es el proceso de tomar una pieza de codigo ASM y correrla a traves del compilador original con el fin de obtener el codigo en C que los desarrolladores de Game Freak escribieron.
En este caso, empezando con la tercera generación y hasta la quinta, los juegos de Pokémon fueron escritos en el lenguaje de programación C y fueron compilados en el Lenguaje Ensamblador que puedes apreciar en las distintas ROMs mediante programas como IDA Pro (detalles al respecto en el tutorial escrito por @Sonicarvalho justo aqui).
¿Como sabemos que el compilador utilizado para construir el contenido de Pokeruby es el que fue usado por Game Freak?
Basicamente, al mirar en el Kit de Desarrollo de Software de la GBA, los miembros del Equipo Pret se dieron cuenta al instante que el compilador usado fue uno de codigo abierto y con licencia GPL (especificamente gcc) y este es el motivo por el que ellos pudieron transmitir ese conocimiento sin riesgos legales de ningun tipo.
Asi que, decompilar estos juegos, fue cuestión de probar compiladores hasta encontrar el correcto y encontrar la configuración que Game Freak usó o probablemente usó.
¿Por qué empezar con Rubi y Zafiro?
Game Freak empezó la tercera generación de videojuegos de Pokémon con Rubi y Zafiro, pero internamente, la base usada para crearlos fue modificada constantemente y convertida en nuevos juegos durante el curso de los años en los que la tercera generación estuvo activa.
Especificamente, Rubi y Zafiro fue parcialmente re-escrito y convertido en Pokémon Fire Red & Leaf Green, que luego fue re-convertido otra vez en Pokémon Emerald, ultimo juego principal de la tercera generación.
Debido a esto, hay diferencias muy notables en cuanto a codigo entre las 3 entregas. Especificamente, el sistema que controla las ventanas, menús y textos es extremadamente diferente en R/S, comparado con FR/LG/Em. Resulta que el nuevo sistema usado en estos ultimos es extremadamente complejo de decompilar (para el momento en que este mensaje fue escrito originalmente, 26 de Mayo del 2017, los miembros del Equipo Pret solo habian logrado decompilar el archivo text.c [sistema que maneja los textos] de Emerald, mas no pudieron decompilar el archivo window.c, el sistema que controla las ventanas).
Por este motivo el foco principal fueron Pokémon Ruby and Sapphire, para conseguir la experiencia y conocimiento necesarios sobre la forma en la que Game Freak escribió el codigo que formaron los juegos originalmente, y poder tacklear facilmente a Pokémon Fire Red, Leaf Green & Emerald.
Dicho esto, actualmente Pokeemerald es el foco principal del Equipo Pret y dia a dia hacen importantes avances.
En el momento en el que escribí este post originalmente (26 de Mayo del 2017), Pokeemerald aun no podia compilar una ROM de Pokémon Emerald por si sola.
Las "llamadas a la ROM Base" fueron neutralizadas el 21 de Enero del 2018 y desde entonces, se ha podido compilar una ROM de Pokémon Emerald usando nada mas que Pokeemerald.
¿Por qué utilizar estos proyectos en lugar de las herramientas que usamos hoy en dia?
Bueno, para empezar, editar C es 10 veces mas facil que editar codigo escrito en el lenguaje ensamblador. Puedes implementar sistemas a nivel de codigo de una forma mucho mas eficaz y veloz que con los editores de mapas y scripts estandares.
Tomemos como ejemplo la posibilidad de tener una velocidad de texto instantanea: conseguir que el texto de Pokémon Rubi y Zafiro se muestre instantaneamente en la pantalla probablemente requeriria re-escribir la mayoria de funciones manejadas normalmente por el archivo text.c del juego mediante metodos convencionales, pero teniendo un acceso directo hacia el archivo text.c, hacer esa modificación no toma mas que unas pocas lineas de codigo y a compilar.
Pokeruby es el proyecto de desensamblaje y decompilación de los videojuegos Pokémon Ruby y Pokémon Sapphire para la GBA.
Existen equivalentes para otros varios juegos de Pokémon, siendo Pokered y Pokecrystal los mas conocidos.
¿Qué es la decompilación?
Decompilación es el proceso de tomar una pieza de codigo ASM y correrla a traves del compilador original con el fin de obtener el codigo en C que los desarrolladores de Game Freak escribieron.
En este caso, empezando con la tercera generación y hasta la quinta, los juegos de Pokémon fueron escritos en el lenguaje de programación C y fueron compilados en el Lenguaje Ensamblador que puedes apreciar en las distintas ROMs mediante programas como IDA Pro (detalles al respecto en el tutorial escrito por @Sonicarvalho justo aqui).
¿Como sabemos que el compilador utilizado para construir el contenido de Pokeruby es el que fue usado por Game Freak?
Basicamente, al mirar en el Kit de Desarrollo de Software de la GBA, los miembros del Equipo Pret se dieron cuenta al instante que el compilador usado fue uno de codigo abierto y con licencia GPL (especificamente gcc) y este es el motivo por el que ellos pudieron transmitir ese conocimiento sin riesgos legales de ningun tipo.
Asi que, decompilar estos juegos, fue cuestión de probar compiladores hasta encontrar el correcto y encontrar la configuración que Game Freak usó o probablemente usó.
¿Por qué empezar con Rubi y Zafiro?
Game Freak empezó la tercera generación de videojuegos de Pokémon con Rubi y Zafiro, pero internamente, la base usada para crearlos fue modificada constantemente y convertida en nuevos juegos durante el curso de los años en los que la tercera generación estuvo activa.
Especificamente, Rubi y Zafiro fue parcialmente re-escrito y convertido en Pokémon Fire Red & Leaf Green, que luego fue re-convertido otra vez en Pokémon Emerald, ultimo juego principal de la tercera generación.
Debido a esto, hay diferencias muy notables en cuanto a codigo entre las 3 entregas. Especificamente, el sistema que controla las ventanas, menús y textos es extremadamente diferente en R/S, comparado con FR/LG/Em. Resulta que el nuevo sistema usado en estos ultimos es extremadamente complejo de decompilar (para el momento en que este mensaje fue escrito originalmente, 26 de Mayo del 2017, los miembros del Equipo Pret solo habian logrado decompilar el archivo text.c [sistema que maneja los textos] de Emerald, mas no pudieron decompilar el archivo window.c, el sistema que controla las ventanas).
Por este motivo el foco principal fueron Pokémon Ruby and Sapphire, para conseguir la experiencia y conocimiento necesarios sobre la forma en la que Game Freak escribió el codigo que formaron los juegos originalmente, y poder tacklear facilmente a Pokémon Fire Red, Leaf Green & Emerald.
Dicho esto, actualmente Pokeemerald es el foco principal del Equipo Pret y dia a dia hacen importantes avances.
En el momento en el que escribí este post originalmente (26 de Mayo del 2017), Pokeemerald aun no podia compilar una ROM de Pokémon Emerald por si sola.
Las "llamadas a la ROM Base" fueron neutralizadas el 21 de Enero del 2018 y desde entonces, se ha podido compilar una ROM de Pokémon Emerald usando nada mas que Pokeemerald.
¿Por qué utilizar estos proyectos en lugar de las herramientas que usamos hoy en dia?
Bueno, para empezar, editar C es 10 veces mas facil que editar codigo escrito en el lenguaje ensamblador. Puedes implementar sistemas a nivel de codigo de una forma mucho mas eficaz y veloz que con los editores de mapas y scripts estandares.
Tomemos como ejemplo la posibilidad de tener una velocidad de texto instantanea: conseguir que el texto de Pokémon Rubi y Zafiro se muestre instantaneamente en la pantalla probablemente requeriria re-escribir la mayoria de funciones manejadas normalmente por el archivo text.c del juego mediante metodos convencionales, pero teniendo un acceso directo hacia el archivo text.c, hacer esa modificación no toma mas que unas pocas lineas de codigo y a compilar.
Tutorial - Compilando Pokeruby
Bueno, acá es cuando ya me siento mas a gustito.
Volvemos a mi formato tradicional con el que escribo tutoriales, hahaha.
Requisitos:
Paciencia y ganas de aprender.
Instrucciones:
1) Vamos a descargar devkitPro haciendo click aqui.
Ejecutamos devkitProUpdater-3.0.3.exe y procedemos a instalar devkitPro como si fuera un programa cualquiera.
¿A que me refiero con esto? A que clickeen en siguiente, siguiente, siguiente sin tocar nada. Instalenlo en su ruta por defecto.
ATENCIÓN: Si el instalador falla por cualquier motivo, haz click aquí para leer una posible solución.
Por cierto, si quieren guardar un poco de espacio en su disco duro, sugiero unicamente instalar las Herramientas de Desarrollo de GBA a la hora de seleccionar los componentes que van a instalar. Son las unicas que vamos a necesitar, realmente.
2) Habiendo quitado esa roca del camino, descargaremos Cygwin haciendo click aqui.
3) Abrimos el instalador y le damos a Siguiente, Siguiente, Siguiente hasta llegar a esta ventana.

Nota: Sugiero encarecidamente no cambiar el directorio donde Cygwin se instalará.
Dejenlo tranquilito en "C:" al igual que devkitPro, que no molesta y se porta bien.
4) Lo que haremos aqui es cambiar el Modo de Vista de "Pending" a "Full", asi veremos todos los paquetes que Cygwin posee.
Despues de hacer eso, buscaremos y seleccionaremos los paquetes que muestro aqui abajo:

No se preocupen por los 2 que oculté, yo los necesito para compilar Pokecrystal.
5) Tras seleccionarlos a todos, volvemos a clickear Siguiente, Siguiente, Siguiente y esperamos a que el proceso termine normalmente.
Una vez finalizado todo, salimos del instalador normalmente.
6) Vamos a C:\cygwin64, abrimos Cygwin.bat (que por cierto, será la consola de comandos que yo usaré el dia de hoy) y dejamos a que haga su magia semi-instantanea.
Lo que basicamente hará al correrlo por primera vez, es crear archivos y carpetas necesarios dentro de Cygwin.
7) Cerramos cygwin.bat y lo volvemos a abrir. Ahora es cuando nos ponemos serios.
Vamos a escribir y ejecutar los siguientes codigos, uno por uno:
Repito, escriben un comando, lo ejecutan presionando Enter, escriben el siguiente, lo ejecutan y asi.
Los que tomarán mas tiempo definitivamente son ./build.sh e ./install.sh ../pokeruby, asi que sean pacientes.
8) Despues del Paso 7, estaremos situados en la carpeta donde tenemos los archivos de Pokeruby, gracias al comando "cd ../pokeruby". Basicamente, dentro de la consola de comandos estaremos en "C:\cygwin64\home\USER\pokeruby".
Estamos ahi, llegando a la linea de meta. Podemos saborear el premio como si fuera nuestro, las ROMs están a un paso de nosotros. Lo siguiente que haremos será tomarlas y llevarnoslas a casa como unos campeones.
¡Usaremos el comando "make" para crear nuestra ROM!
.... Y ya.
No, en serio, escribí "make" y espera un rato hasta que el proceso de compilación finalice con un suculento
Tal que asi:

Volvemos a mi formato tradicional con el que escribo tutoriales, hahaha.
Requisitos:
Paciencia y ganas de aprender.
Instrucciones:
1) Vamos a descargar devkitPro haciendo click aqui.
Ejecutamos devkitProUpdater-3.0.3.exe y procedemos a instalar devkitPro como si fuera un programa cualquiera.
¿A que me refiero con esto? A que clickeen en siguiente, siguiente, siguiente sin tocar nada. Instalenlo en su ruta por defecto.
ATENCIÓN: Si el instalador falla por cualquier motivo, haz click aquí para leer una posible solución.
Por cierto, si quieren guardar un poco de espacio en su disco duro, sugiero unicamente instalar las Herramientas de Desarrollo de GBA a la hora de seleccionar los componentes que van a instalar. Son las unicas que vamos a necesitar, realmente.
2) Habiendo quitado esa roca del camino, descargaremos Cygwin haciendo click aqui.
3) Abrimos el instalador y le damos a Siguiente, Siguiente, Siguiente hasta llegar a esta ventana.

Nota: Sugiero encarecidamente no cambiar el directorio donde Cygwin se instalará.
Dejenlo tranquilito en "C:" al igual que devkitPro, que no molesta y se porta bien.
4) Lo que haremos aqui es cambiar el Modo de Vista de "Pending" a "Full", asi veremos todos los paquetes que Cygwin posee.
Despues de hacer eso, buscaremos y seleccionaremos los paquetes que muestro aqui abajo:

No se preocupen por los 2 que oculté, yo los necesito para compilar Pokecrystal.
5) Tras seleccionarlos a todos, volvemos a clickear Siguiente, Siguiente, Siguiente y esperamos a que el proceso termine normalmente.
Una vez finalizado todo, salimos del instalador normalmente.
6) Vamos a C:\cygwin64, abrimos Cygwin.bat (que por cierto, será la consola de comandos que yo usaré el dia de hoy) y dejamos a que haga su magia semi-instantanea.
Lo que basicamente hará al correrlo por primera vez, es crear archivos y carpetas necesarios dentro de Cygwin.
7) Cerramos cygwin.bat y lo volvemos a abrir. Ahora es cuando nos ponemos serios.
Vamos a escribir y ejecutar los siguientes codigos, uno por uno:
Código:
export DEVKITPRO=/cygdrive/c/devkitPro
echo export DEVKITPRO=$DEVKITPRO >> ~/.bashrc
export DEVKITARM=$DEVKITPRO/devkitARM
echo export DEVKITARM=$DEVKITARM >> ~/.bashrc
git clone https://github.com/pret/pokeruby
git clone https://github.com/pret/agbcc
cd agbcc
./build.sh
./install.sh ../pokeruby
cd ../pokeruby
Los que tomarán mas tiempo definitivamente son ./build.sh e ./install.sh ../pokeruby, asi que sean pacientes.
8) Despues del Paso 7, estaremos situados en la carpeta donde tenemos los archivos de Pokeruby, gracias al comando "cd ../pokeruby". Basicamente, dentro de la consola de comandos estaremos en "C:\cygwin64\home\USER\pokeruby".
Estamos ahi, llegando a la linea de meta. Podemos saborear el premio como si fuera nuestro, las ROMs están a un paso de nosotros. Lo siguiente que haremos será tomarlas y llevarnoslas a casa como unos campeones.
¡Usaremos el comando "make" para crear nuestra ROM!
.... Y ya.
No, en serio, escribí "make" y espera un rato hasta que el proceso de compilación finalice con un suculento

Tal que asi:

Extra - Otros Comandos
Bueno, esto es bastante sencillo.
"make" creará una ROM de Pokémon Ruby v1.0, make ruby_rev1 creará una ROM de Pokémon Ruby v1.1, et cetera, et cetera.
Ahora, estos no son los unicos comandos que hay.
Si por ejemplo tenemos una CPU de 4 nucleos (como un i5 4440) y queremos sacarle ventaja, podemos usar el comando "make -j3 ruby_rev1".
Basicamente es un proceso de compilación para obtener una ROM de Pokémon Ruby v1.1 a la que asignariamos 3 de los 4 nucleos que nuestro i5 posee.
Yo no pondria los 4 por decisión personal, prefiero mantener el SO lo mas estable posible.
Como pueden observar, el comando utilizado define la versión del juego que vamos a compilar.make: Utilizado para compilar una ROM de Pokémon Ruby v1.0
make ruby_rev1: Utilizado para compilar una ROM de Pokémon Ruby v1.1
make ruby_rev2: Utilizado para compilar una ROM de Pokémon Ruby v1.2
make sapphire: Utilizado para compilar una ROM de Pokémon Sapphire v1.0
make sapphire_rev1: Utilizado para compilar una ROM de Pokémon Sapphire v1.1
make sapphire_rev2: Utilizado para compilar una ROM de Pokémon Sapphire v1.2
"make" creará una ROM de Pokémon Ruby v1.0, make ruby_rev1 creará una ROM de Pokémon Ruby v1.1, et cetera, et cetera.
Ahora, estos no son los unicos comandos que hay.
Antes de cerrar esta parte del tema, supongo que dejar un ejemplo de lo recien presentado está bien.make clear: Elimina todos los archivos generados por el compilador, permitiendote compilar una ROM desde 0.
make -j(numero): Asigna hilos de la CPU al proceso de compilación. Entre hilos se asignen, mas rapido se creará la ROM.
nproc: Nos da la cantidad total de hilos que tiene nuestra CPU.
make NODEP=1: Si solo has hecho cambios en archivos .c o .s tras la ultima compilación, puedes usar este comando para aplicarlos casi instantaneamente.
Si por ejemplo tenemos una CPU de 4 nucleos (como un i5 4440) y queremos sacarle ventaja, podemos usar el comando "make -j3 ruby_rev1".
Basicamente es un proceso de compilación para obtener una ROM de Pokémon Ruby v1.1 a la que asignariamos 3 de los 4 nucleos que nuestro i5 posee.
Yo no pondria los 4 por decisión personal, prefiero mantener el SO lo mas estable posible.
Extra 2 - Herramientas como gbagfx en Cygwin.bat o Mintty.exe
Atención: Por como escribí este tutorial y por la manera en la que hago las cosas, no me percaté de que Windows 10 ya no posee la opción "Abrir ventana de comandos aqui", entonces, si por algun motivo necesitan usar las herramientas dentro de pokeruby\tools y no pueden/saben usar el CMD de Windows por X motivo viendose forzados a usar las lineas de comando de Cygwin como lo son Bash (la que utiliza c:\cygwin64\cygwin.bat) o Mintty, muevan su carpeta con Pokeruby a "C:" y cada vez que usen cygwin.bat o Mintty empiecen con "cd C:\pokeruby".
Esto en si no es un problema, a mi parecer. Una minima busqueda en Google mostrará cientos de resultados sobre como reincorporar esa opción que parece haber sido removida en Windows 10, y si no, usar el Command Prompt de Windows no tiene ningun misterio tampoco, es cuestión de usar el comando "cd" seguido por la ruta hacia la herramienta a usar.
Esta advertencia nace de un inconveniente que un usuario tuvo, y pensé que estaria bien mencionarlo.
Esto en si no es un problema, a mi parecer. Una minima busqueda en Google mostrará cientos de resultados sobre como reincorporar esa opción que parece haber sido removida en Windows 10, y si no, usar el Command Prompt de Windows no tiene ningun misterio tampoco, es cuestión de usar el comando "cd" seguido por la ruta hacia la herramienta a usar.
Esta advertencia nace de un inconveniente que un usuario tuvo, y pensé que estaria bien mencionarlo.
Y por ahora, yo creo que esto es todo.
Tengo un grupo de pequeños tutoriales escritos por mi que pienso traer y algunos escritos por otras personas tambien.
Antes de partir, quiero abrirme un poco con ustedes sobre todo esto.
Actualmente, como habran podido notar por el hecho de que soy practicamente el unico en esta comunidad que se atreve a hablar fuerte y claro sobre Pokeruby y sus equivalentes, no existe una comunidad solida para estas magnificas obras de arte.
Con el paso del tiempo, eso va a ir cambiando. Varios miembros y ex-miembros de PokeCommunity poquito a poco ya estamos empezando a explorar Pokeruby, nos estamos intentando familiarizar con los nuevos metodos para hacer las cosas, estamos curioseando y probando a cambiar distintas cosas, de hecho ya hay hasta proyectos planificados que pretenden usarlos llegado el momento.
Lo que personas como ProjectRevoTPP, Ax6, ShantyTown, Padz y otros están haciendo es voltear la Comunidad de ROM Hacking Pokémon de pies a cabeza. Sacarnos del agujero negro lleno de herramientas abandonadas y de codigo cerrado, herramientas que funcionan mal o herramientas que rompen nuestras ROMs.
Yo, Lunos, tengo un sueño.
Ese sueño es que un dia, esta comunidad explore estos proyectos de desensamblaje y/o decompilación, de la misma forma en la que ha estado explorando Rojo Fuego en Español recientemente.
Yo tengo fé ciega en que con estas preciosuras se puede llegar muchisimo mas lejos de lo que el ROM Hacking mediante metodos convencionales jamas podrá llegar, y quiero dar el primer paso hacia ese sueño justo aqui, hoy, porque me sale de las pelotas.
Y eso es todo.
Última edición: