Registrarse

[Otros] Cómo compilar proyectos de decompilación en un PC 32 bits

Rubire4

Usuario mítico
Introcucción

Hasta ahora pensé que me sería imposible compilar alguno de estos juegos de decompilación debido a la necesaria utilización de devkitPro, un programa solo disponible para ordenadores con una arquitectura de 64 bits; y el uso de Cygwin, cuyo uso está desaconsejado en sistemas operativos de 32 bits.
Hay un recurso de devkitARM de 32 bits, pero este solo sirve para insertar rutinas en C en ROM Hacking, ya que para compilar pokeruby o pokeemerald se necesita devkitPro completo.
Sin embargo, ahora que Cygwin está obsoleto y ya no se usa, y que existe un paquete de devkitPro para MSYS2, decompilación es posible para ordenadores 32 bits. El único requisito es tener Windows Vista o superior, ya que el programa que usaremos ya no admite Windows XP u otro SO anterior.
Yo estoy trabajando en un PC de 32 bits con Windows 7, 3GB de RAM y un procesador con dos hilos de procesamiento. He conseguido instalar pokemeerald en él, por lo que en prácticamente cualquier PC sirve (aunque la compilación será evidentemente más lenta y engorrosa).



Instalar MSYS2

Lo normal es instalar el programa devkitPro pues ya incluye MSYS2 totalmente configurado y preparado para compilar juegos de GBA, pero como nosotros no podemos instalar devkitPro tendremos que descargar, instalar y configurar MSYS2 en nuestro PC manualmente.
Se puede instalar directamente desde la página de MSYS2, pero os dejo aquí el link de descarga oficial para ir más rápido: msys2-i686-20190524.exe
El proceso de instalación es tan simple como cualquier otro, abrimos el instalador y hacemos Next > Next > Finish.

1587034522881.png




Abrir MSYS2

En cuanto instalemos el programa se nos abrirá automáticamente, pero tendremos que usarlo cada vez que queramos compilar nuestro juego, por lo que tendremos que saber cómo abrirlo.
Tenemos que acceder al lugar de la instalación de MSYS2, que por defecto es C:\msys2, y abrir el archivo "msys2_shell.cmd":

1587034733067.png
Sí, lo que tendremos que abrir siempre es el archivo .cmd, no los .exe. Si queréis tenerlo más a mano podés crear un acceso directo al programa y dejarlo en el escritorio o donde veáis más cómodo.

Cada vez que queramos escribir comandos en él tendremos que esperar a que aparezca nuestro nombre de usuario de Windows en color verde:

1587035029006.png




Actualizar MSYS2

En la página oficial se recomienda actualizar MSYS2 en cuanto abramos el programa. Para actualizarlo tendremos que insertar en él el siguiente código:
Código:
pacman -Syu
Si se nos pregunta si instalar algo escribimos S o Y, dependiendo del idioma. Al terminar puede que tengamos que cerrar y volver a abrir el programa. Si creéis que ha terminado de actualizarse cerradlo sin miedo.
Una vez acabe hacemos lo siguiente:
Código:
pacman -Su


Instalar paquetes en MSYS2

Para que nuestro programa funcione necesitaremos instalar manualmente los paquetes necesarios para la compilación.
Para instalar los paquetes copiaremos y pegaremos los siguientes comandos por orden: (para pegar en MSYS2 hay que pulsar la tecla Insert en vez de CTRL+V)
Código:
pacman -S make
pacman -S git
pacman -S base-devel gcc vim cmake
pacman -S development
pacman -S mingw-w64-i686-libpng
pacman -S base
pacman -S base-devel
Si se nos pregunta qué paquetes de un grupo instalar hacemos enter directamente para instalar todos.

Lo siguiente que debemos hacer es:



Instalar devkitPro en MSYS2

Como no tenemos acceso a los recursos del programa directamente tendremos que instalar un paquete que le sustituya.
Primero tendremos que declarar unas variables, por lo que copiaremos y pegamos en MSYS2 lo siguiente por orden:
Código:
DEVKITPRO=/opt/devkitpro
DEVKITARM=/opt/devkitpro/devkitARM
DEVKITPPC=/opt/devkitpro/devkitPPC
Después de ello escribiremos estas keys en MSYS2 en orden:
Código:
pacman-key --recv F7FD5492264BB9D0
pacman-key --lsign F7FD5492264BB9D0
Ahora instalaremos devkitPro utilizando el comando:
Código:
pacman -U https://downloads.devkitpro.org/devkitpro-keyring-r1.787e015-2-any.pkg.tar.xz
Ya podemos cerrar MSYS2, pero tendremos que seguir configurando MSYS2 manualmente. Para este paso tendremos que tener instalado Notepad++ para editar archivos. No solo sirve para esto, tiene un montón de funciones para editar código, por lo que lo recomiendo bastante.
Accedemos a nuestra carpeta donde tenemos instalado MSYS2, que como dije antes, por defecto es "C:\msys2". Allí abrimos la carpeta llamada "etc".
Deberíamos ver allí un archivo llamado "pacman.conf":

1587037314763.png
Hacemos click derecho en el archivo > Edit with Notepad++.
En el editor de código bajamos hasta la línea 80, y después de las variables [mingw32], [mingw64] y [msys] añadimos lo siguiente:
Código:
[dkp-libs]
Server = https://downloads.devkitpro.org/packages

[dkp-win32]
Server = https://downloads.devkitpro.org/packages/win32
Debería quedar algo así:

1587037572777.png

Abrimos MSYS2 de nuevo y lo actualizamos con "pacman -Syu" y "pacman -Su".
Por último tendremos que instalar los paquetes de devkitPro que necesitaremos para compilar juegos de GBA. Una vez en MSYS2 escribimos:
Código:
pacman -S gp32-dev
pacman -S gba-dev
Con todo esto ya tenemos instalado devkitPro con devkitARM en nuestro PC para poder compilar juegos de GBA. Hacemos un último "pacman -Syu" y "pacman -Su" para actualizar nuestros paquetes y ya está.

Ahora nos queda un último paquete algo más engorroso de instalar:



Instalar libpng

Este paquete es completamente necesario para compilar las imágenes png que se utilizan en GBA.
Para instalarlo simplemente accedemos a esta página y tras 5 segundos se iniciará la descarga: https://sourceforge.net/projects/libpng/files/libpng16/1.6.34/libpng-1.6.34.tar.gz/download
Descomprimimos con WinRAR o nuestro programa favorito el archivo y nos dará una carpeta llamada "libpng-1.6.34".
Abrimos en MSYS2 y nos metemos en la carpeta con el programa. Para acceder a una ruta con MSYS2 el proceso es muy similar a hacerlo con cmd, solo que con las barras en sentido contrario. Es decir, si para acceder a una carpeta con cmd hacemos "cd C:\Users\LoQueSea\", aquí hacemos "cd C:/Users/LoQueSea".
Si tenemos la carpeta libpng-1.6.34 en el escritorio como suele ser común entonces tendremos que escribir:
Código:
cd C:/Users/NombreDeUsuario/Desktop/libpng-1.6.34/
Una vez allí escribimos los siguientes comandos en este orden:
Código:
./configure --prefix=/usr
make check
make install
Es probable que tarden en terminarse algunos comandos.
Después de que termine podremos borrar la carpeta, libpng se habrá instalado correctamente y no la necesitaremos más.
Ya hemos instalado todos los elementos necesarios para compilar pokeruby o pokeemerald en nuestro PC 32 bits, ahora nos queda lo último que es igual en PCs de 32 bits que en 64 bits.



Descargar los repositorios y compilar el juego

Abrimos MSYS2 y accedemos como lo hicimos antes a una ruta en la que queramos guardar los archivos del juego. Recomiendo una ruta corta donde guardar las cosas como C:/decomp/ para no tener que estar escribiendo largas líneas de comandos para acceder a nuestros archivos.
Una vez en la ruta en la que queramos guardar los archivos tendremos que escribir lo siguiente:
Código:
git clone https://github.com/pret/agbcc
Cuando termine tendremos que hacer lo mismo pero para descargar el repositorio de pokeruby o pokeemerald. Esto será lo que tendremos que escribir, la primera línea es para pokeruby, la segunda para pokeemerald y la tercera para pokefirered. Escribid la línea para el juego que queráis descargar o ambas si así lo queréis:
Código:
git clone https://github.com/pret/pokeruby
git clone https://github.com/pret/pokeemerald
git clone https://github.com/pret/pokefirered
Se nos habrán creado varias carpetas, una llamada agbcc, y las carpetas con los proyectos de decompilación que hayamos elegido.
Ahora ejecutamos lo siguiente por orden:
Código:
cd ./agbcc
./build.sh
./install.sh ../pokeruby, pokeemerald o pokefirered (depende de lo que tengamos)
cd ../pokeruby, pokeemerald o pokefirered
La acción de build puede tardar unas decenas de minutos en terminarse, así que paciencia, el resto son prácticamente instantáneas.
Por último queda el paso final, que es compilar el juego. Escribimos "nproc" y nos devolverá un número, este es el número de hilos de procesamiento que tiene nuestro procesador, cuantos más más rápido será.
Escribimos:
Código:
make -jn
Sustituyendo "n" por el número que se nos ha devuelto en el paso anterior.


Y voilà, ya estará compilándose nuestro juego. Tardará más o menos una hora si el número de hilos de procesamiento es muy bajo como 1 o 2, pero al final nos creará en la carpeta de nuestro juego un archivo llamado pokeruby.gba o pokeemerald.gba.
Comprobamos con mGBA o VBA que nuestro juego funciona y habremos terminado, tendremos un juego completamente idéntico byte por byte a los originales de game freak y ahora además tendremos el código fuente original que podemos editar a antojo.

1587043473417.png
 
Última edición:

Edo

You've met with a terrible fate, haven't you?
Miembro de honor
Te amo, weón. Sos lo más grande del planeta.

Ayer me había resignado al hackeo binario porque no encontré la forma de hacer funcionar el DevKitPro en mi SO de 32 bits. ¡Y ahora aparecés con esto! Te juro que sos lo más.

Aportazo.
 

Storm320

Archmage
Me aparece un error al poner el comando: pacman -Syu

error: no se pudo obtener el archivo «pacman-5.2.1-6-i686.pkg.tar.xz» desde repo.msys2.org: Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
error: no se pudo obtener el archivo «pacman-5.2.1-6-i686.pkg.tar.xz» desde sourceforge.net: Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
error: no se pudo obtener el archivo «pacman-5.2.1-6-i686.pkg.tar.xz» desde www2.futureware.at: Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
error: no se pudo obtener el archivo «pacman-5.2.1-6-i686.pkg.tar.xz» desde mirror.yandex.ru: Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
advertencia: no se pudieron recibir algunos archivos
error: no se pudo realizar la operación (error de la biblioteca de descarga)
Ocurrieron errores, por lo que no se actualizaron los paquetes
Me podrías ayudar? o me toca descargar el archivo manualmente desde la pagina?

Saludos
 

Edo

You've met with a terrible fate, haven't you?
Miembro de honor
Me aparece un error al poner el comando: pacman -Syu

error: no se pudo obtener el archivo «pacman-5.2.1-6-i686.pkg.tar.xz» desde repo.msys2.org: Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
error: no se pudo obtener el archivo «pacman-5.2.1-6-i686.pkg.tar.xz» desde sourceforge.net: Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
error: no se pudo obtener el archivo «pacman-5.2.1-6-i686.pkg.tar.xz» desde www2.futureware.at: Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
error: no se pudo obtener el archivo «pacman-5.2.1-6-i686.pkg.tar.xz» desde mirror.yandex.ru: Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
advertencia: no se pudieron recibir algunos archivos
error: no se pudo realizar la operación (error de la biblioteca de descarga)
Ocurrieron errores, por lo que no se actualizaron los paquetes
Me podrías ayudar? o me toca descargar el archivo manualmente desde la pagina?

Saludos
Para quitar el time out, tenés que ejecutar el siguiente comando:
-Syu --disable-download-timeout
 

StunxFS

Profesional de WaH
Al igual que @Luisi yo también soy de Venezuela, y tengo una PC de 32bits, pero uso Linux.
Esto me hubiera venido muy bien cuando usaba el Windows xD.
Pero se agradece el tutorial, ya que les servirá a aquellos que tengan una PC de 32bits nada mas a la mano. Thanks ;)!
 

Sonic_1

Crimson Warrior
Eh intentado instalar el MSYS2, pero cuando esta cerca de terminarlo dice error en las herramientas de mantenimiento; no estoy seguro si es mi PC ya que es de 32 bits y windows 7, alguna posible causa seria de mucha ayuda (y si tiene solución claro xd)
1591379668931.png
 
Última edición:

Rubire4

Usuario mítico
Eh intentado instalar el MSYS2, pero cuando esta cerca de terminarlo dice error en las herramientas de mantenimiento; no estoy seguro si es mi PC ya que es de 32 bits y windows 7, alguna posible causa seria de mucha ayuda (y si tiene solución claro xd)
Ver el archivo adjunto 851
Prueba a mirar este hilo. Aquí han dado varias soluciones para ese problema:
 

Fran

Profesional de WaH
Hola, después de ejecutar el "pacman -Syu" y tener que cerrar el msys2 no me deja abrirlo, o sea se abre y se cierra al instante, alguien tiene una solución?
 

Lunos

Enfrentando a La Organización
Miembro insignia
Hola, después de ejecutar el "pacman -Syu" y tener que cerrar el msys2 no me deja abrirlo, o sea se abre y se cierra al instante, alguien tiene una solución?
El hecho de que "se haya roto" así me suena a que MSys2 no se instaló correctamente en tu computadora.
 

Jlvs22

Usuario de oro
hola, me sale un error y es que, cuando voy a actualizar el MSYS2, me dice que no se pudo sincronizar con ninguna base de datos y ahi queda, hay alguna solucion?
 

Adjuntos

Lunos

Enfrentando a La Organización
Miembro insignia
Ver el archivo adjunto 14713
Lo mismo...

@Rubire4, help me
También te invoco todopoderoso @Lunos.
Yo nunca intenté compilar los decomps en un SO de 32 bits.
No tengo experiencia con los paquetes o las herramientas usados, y el proceso que se sigue.
Veo que se usan paquetes distintos a los habituales de un SO de 64 bits como "base" o una versión de libpng obtenida directamente desde un servidor, cuando lo que yo enseño en mi tutorial sobre compilar con MSys2 es a construir libpng desde el codigo fuente.
Debido a mi falta de conocimiento en la materia, prefiero no involucrarme.
 
Arriba