Introducción | Proyecto de Decompilación de Pokémon R/S

Avisos


Like Tree60Gracias
Respuesta
 
Herramientas Desplegado
  #1  
16/07/2018
Corazón Introducción | Proyecto de Decompilación de Pokémon R/S
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?

Spoiler

¿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.


Tutorial - Compilando Pokeruby

Spoiler

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:
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
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:


Extra - Otros Comandos

Spoiler

Bueno, esto es bastante sencillo.
Código:
Versión      | Comando
-------------|---------------------
Ruby 1.0     | make
Ruby 1.1     | make ruby_rev1
Ruby 1.2     | make ruby_rev2
Sapphire 1.0 | make sapphire
Sapphire 1.1 | make sapphire_rev1
Sapphire 1.2 | make sapphire_rev2
Como pueden observar, el comando utilizado define la versión del juego que vamos a compilar.
"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.
make clear: Revierte todos y cada uno de los cambios hechos a pokeruby.
make -j(numero): Asigna nucleos de la CPU al proceso de compilación.
nproc: Nos da la cantidad de nucleos fisicos 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.
Antes de cerrar esta parte del tema, supongo que dejar un ejemplo de lo recien presentado está bien.
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

Spoiler

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.


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 por Lunos; 10/09/2018 a las 06:08
  #2  
16/07/2018
Predeterminado Respuesta: Introducción a Pokeruby | Proyecto de Decompilación de Pokémon R/S
Desde ya te lo digo: muchísimas gracias por traer esto aquí, te lo acabo de fijar porque este tema es crucial ahora mismo.
Los proyectos de "descompilación" son ahora mismo el futuro del hacking, sin ninguna duda, es pasar de modificar una ROM a crearla tu mismo con las modificaciones ya añadidas, desde el día que vi el proyecto supe que claramente iba a ser el gran salto del hacking, porque después de 15 años está empezando a llegar a un límite que solo esto se puede saltar.

Mira que yo nunca he sido de hacking pero estuve experimentando con esto hace meses y es que de verdad es algo espectacular, con una buena documentación (sobre todo de todas las funciones) se podrían lograr proyectos alucinantes sin salir de Pokémon Ruby.
  #3  
16/07/2018
Predeterminado Re: Introducción a Pokeruby | Proyecto de Decompilación de Pokémon R/S
Hace unos meses vi algo similar que querían hacer con Platino (no sé cómo va el proyecto, la verdad), y me sirvió básicamente porque tienen localizadas algunas funciones del arm9 y algunos overlays que luego puedo investigar en HGSS.

Yo creo que en GBA sí, es el futuro, pero en NDS nos puede servir no solo para el desarrollo, sino para la propia investigación, y espero que el desensamblado sea una práctica cada vez mayor entre los ROM hackers. De hecho estoy escribiendo un libro sobre RH, y ten por seguro que a esto le voy a dedicar más de una página ;D
QUIERO MI PREMIO WAH DE NDS

¡Los hacks de NDS también se merecen un PWaH!
¡Estas cosas con Lon NO PASABAN!
  #4  
16/07/2018
Predeterminado Respuesta: Introducción a Pokeruby | Proyecto de Decompilación de Pokémon R/S
Yo soy un simple spriter, pero me parece un tema interesante. Recuerdo hackear hace tiempo, y dejarlo por la de errores que conllevaba (no tengo mucha paciencia la verdad). Sin conocer mucho sobre hackear y sobre programación, me parece muy interesante, sobre todo por el gran potencial que tiene para romper con las limitaciones tradicionales.

Espero que no caiga en el olvido porque me parece un proyecto muy interesante.

Conoces algún hack nuevo basado en este tipo de sistema?

Un saludo!

Spoiler



Si quieres ir a mi canal de YouTube, haz click sobre la imagen del Spoiler :3
  #5  
16/07/2018
Corazón Respuesta: Introducción a Pokeruby | Proyecto de Decompilación de Pokémon R/S
Dicho por Lite Omega Ver mensaje
Yo soy un simple spriter, pero me parece un tema interesante. Recuerdo hackear hace tiempo, y dejarlo por la de errores que conllevaba (no tengo mucha paciencia la verdad). Sin conocer mucho sobre hackear y sobre programación, me parece muy interesante, sobre todo por el gran potencial que tiene para romper con las limitaciones tradicionales.

Espero que no caiga en el olvido porque me parece un proyecto muy interesante.

Conoces algún hack nuevo basado en este tipo de sistema?

Un saludo!
Nada grande de momento, por desgracia.
Se lo mencioné a Klein hace un rato, los proyectos que hacen uso de Pokeruby/Pokeemerald que yo conozco son el RS-Speedchoice de ProjectRevoTPP y el Emerald Battle Engine Upgrade que DizzyEgg está recreando usando Pokeemerald.
Gracias: Lite Omega y Stunx
  #6  
17/07/2018
Predeterminado Respuesta: Introducción a Pokeruby | Proyecto de Decompilación de Pokémon R/S
Me parece muy interesante este tema, y pienso que este es el futuro del hacking, ademas me interesa cada vez mas en ayudar en el proyecto
  #7  
19/07/2018
Predeterminado Respuesta: Introducción a Pokeruby | Proyecto de Decompilación de Pokémon R/S
Muy interesante @Lunos !
lo he estad probando, y logre esto:

por si a alguien le interesa, parche aqui.
Visita mi pagina web para ver algunos de mis proyectos y tech demos.
  #8  
19/07/2018
Corazón Respuesta: Introducción a Pokeruby | Proyecto de Decompilación de Pokémon R/S
Dicho por L!nOS Ver mensaje
Muy interesante @Lunos !
lo he estad probando, y logre esto:

por si a alguien le interesa, parche aqui.
Como dicen, grandes mentes piensan igual. Yo tambien me puse a traducir cosas, jajaja.
Una cosa llevó a la otra, me emocioné con la idea de traducir textos tan sencillamente y sin pensarlo mucho traducí un montón de dialogos en Littleroot Town, el evento inicial en la Ruta 101 y los distintos menús incluyendo el sumario pokémon (dejando de lado los graficos pero, que soy un asco para eso).
Si alguien está interesado: https://github.com/LOuroboros/pokerubi


Hay ciertas cosas que requieren de conocimientos basicos sobre C que yo no poseo.
Por ejemplo, ajustar el tamaño de la font dentro del Menú Opciones tal y como en la traducción oficial, que aparezca la naturaleza despues de la palabra "Naturaleza" misma en lugar de antes, o que aparezca "¡[pokémon] salvaje usó [ataque]!".
Gracias: Jon.
  #9  
19/07/2018
Predeterminado Respuesta: Introducción a Pokeruby | Proyecto de Decompilación de Pokémon R/S
no se si esto se habia hecho ya, pero si no:

zelda
Visita mi pagina web para ver algunos de mis proyectos y tech demos.
  #10  
19/07/2018
Predeterminado Respuesta: Introducción a Pokeruby | Proyecto de Decompilación de Pokémon R/S
Reprogramar una ROM sigue estando por encima del conocimiento medio del rom hacker, yo seguiré haciendo mis mapitas vale
Sometimes you win, sometimes you lose
Respuesta

Herramientas
Desplegado

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Desactivado



Extra
Estilo clásico
La franja horaria es GMT +1. Ahora son las 02:53.