Registrarse

[pokeemerald] [Win10] Decomp desde cero! Compilando nuestra ROM y configurando VSCode

Jaizu

Decomp user
Introducción
¡Bienvenidos al maravilloso mundo de la decompilación! Yo soy Jaizu y con esta guía (¡y las que quedan por venir!) pretendo que todo el mundo, independientemente de la experiencia previa en el Rom Hacking puedan dejar su PC listo para trabajar con decompilación.

En esta guía lo que haremos será dejar nuestro PC listo para que podamos compilar nuestra ROM, haciendo los cambios que veamos oportunos a nuestro proyecto.

Está enfocada para Windows 10 64 bits, pues la única versión de Windows que soporta decomp con WSL.
En un futuro intentaré traeros otras guías (de otros usuarios, pues yo no tengo experiencia) en cómo instalarla para otros sistemas operativos. Aunque también planeo hacer una para Linux, concretamente Ubuntu, así que estaros atentos si sois usuarios de Linux.


Herramientas necesarias
Antes de empezar creo que estaría bien que nos bajemos y dejemos instaladas ciertas herramientas. Descargándolas siempre desde sus sitios oficiales. Para ir a los enlaces dad click en los nombres del programa.
  1. mGBA - Este será nuestro emulador de GBA. Es más fiel a hardware real y a una GBA que otros emuladores como VBA. Si nuestro proyecto funciona aquí funcionará en el resto de emuladores y hardware real.
  2. Visual Studio Code - Este será nuestro editor de código por excelencia. El motivo por el cual lo usaremos vs otras alternativas, como Notepad++, Atom o Brackets es que este, hasta donde yo sé, es el único que nos permite tener integrado nuestra consola de WSL dentro del mismo programa, así no tendremos que andar con ventanas extras para compilar nuestro proyecto.

Empezando con la instalación
Lo primero que tenemos que hacer es activar WSL en nuestro ordenador. En la página oficial de Microsoft dice cómo hacerlo… Pero ya que estoy haciendo un tutorial, ¿ya os lo explico yo mismo no?

Lo único que tenemos que hacer es abrir una PowerShell con permisos de administrador.
Vamos, pulsamos la tecla de Windows/menú de Windows, escribimos PowerShell y la ejecutamos como Administrador. Bastante sencillo, ¿no?


Una vez abierta ejecutamos el siguiente comando, solo tenemos que pegarlo (Control + V) y pulsar Intro.
Código:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Y con eso ya tendríamos WSL activado, o casi… ¡Tenemos que reiniciar nuestro ordenador!


Instalando y configurando Ubuntu

Vamos abrir la Microsoft Store y buscaremos Ubuntu.
Yo instalaré Ubuntu 20.04 LTS, pues es la más reciente.

Una vez esté terminada la instalación abriremos Ubuntu.
Pulsando la tecla de Windows o dando click en el menú de Windows escribiremos Ubuntu y abriremos el programa.


Una vez abierto pondrá que se está instalando, y que eso puede tardar unos minutos, esperamos pacientemente hasta que obtengamos lo siguiente:




Ahí nos está diciendo que pongamos un nombre de usuario para nuestro Linux, en mi caso pondré jaizu. Este nombre no tiene por qué ser igual de Windows y deberá contener sólo minúsculas y números. Luego nos pedirá una contraseña, la pondremos.
La contraseña no la veréis mientras la escribís por motivos de seguridad.
Finalmente os dirá que la pongáis una vez más y listo, ya tendremos Ubuntu listo para trabajar en él.


Configurando Ubuntu para que compile nuestras ROMs
Lo primero que haremos será actualizarlo para que tenga los últimos paquetes.
Muy sencillamente pegamos (con el click derecho del ratón se pegan las cosas en esa terminal) este comando y pulsamos Intro.
Código:
sudo apt-get update
Nos pedirá la contraseña que introdujimos hace nada, la escribimos y pulsamos Intro.
Eso actualizará el listado de paquetes sin que tengamos que hacer nada más que esperar a que esté listo.
Ahora actualizaremos los paquetes escribiendo el siguiente comando:
Código:
sudo apt-get upgrade
Te dará los datos de las actualizaciones y te dirá si quieres continuar dándote a elegir entre dos letras. En mi caso, como lo tengo en inglés, tengo que escribir Y, no estoy seguro de cuál os da si lo tenéis en Español.


Una vez terminado ya estamos listo para empezar a instalar las herramientas necesarias para compilar nuestra rom.

Primero empezamos por instalar lo básico para buildear, el compilador.
Código:
sudo apt-get install build-essential
También os dirá que si queréis instalarlo, le decís que sí y ya.

Y una vez terminado instalamos la librería, la cual es necesaria para compilar nuestras imágenes (tranquilos, el compilador lo hará todo sin que tengamos que decirle qué es es cada cosa)
Código:
sudo apt-get install libpng-dev
Ahora lo que haremos será instalar pacman, lo cual nos permitirá instalar devkitARM, el cual necesitamos para compilar nuestra rom. (Agradecimientos a Klein por esta parte del tutorial)
Vamos poniendo estos comandos, uno a uno.
Código:
PACMAN_DEB="$(mktemp)"

Una vez enviado ese programa no te preocupes, no tiene que salir nada en la consola.
Luego ejecutamos el siguiente comando
Código:
wget -O "$PACMAN_DEB" 'https://github.com/devkitPro/pacman/releases/download/v1.0.2/devkitpro-pacman.amd64.deb'
Si el enlace no funciona buscadlo aquí: https://github.com/devkitPro/pacman/releases/


Y luego este
Código:
sudo dpkg -i "$PACMAN_DEB"
Y finalmente:
Código:
rm -f "$PACMAN_DEB"
Este tampoco nos devuelve nada, así que no os preocupéis de si ha funcionado o no.

Ya casi hemos terminado de configurar todo lo que necesitamos para compilar nuestra primera rom.
Lo que acabamos de hacer es instalar pacman para poder instalar devkitARM, así que vamos a instalar devkitARM con el siguiente comando:
Código:
dkp-pacman -S gba-dev
Nos preguntará qué queremos instalar, le damos a ENTER para que instale todo y le decimos que sí, que queremos instalar todo eso.

Por últimos le diremos a nuestro bash dos variables para que sepa qué hacer, ejecutamos estos comandos, uno a uno:
Código:
export DEVKITPRO=/opt/devkitpro
echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc
export DEVKITARM=$DEVKITPRO/devkitARM
echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc
Estos comandos tampoco te devuelven nada, así que no te preocupes por eso tampoco.


¡Compilando nuestra primera ROM!
Pokemeerald está en un repositorio de github, así que instalamos git, ejecutando el siguiente comando:
Código:
sudo apt-get install git
En mi caso ya lo tenía instalado, pero es posible que a vosotros no, dependiendo de la versión de ubuntu que tengáis.

Lo que haremos ahora será crear una carpeta para decompilación en algún directorio de Windows.
En mi caso, para tenerlo todo ordenado, en Documents he creado una carpeta llamada Decomp.


Volvemos a nuestra consola de Ubuntu, y lo que haremos será ir hacia el directorio que hemos creado.

Entrando en mi carpeta de Decomp desde el explorador de Windows puedo ver que mi carpeta está en: C:\Users\Jaizu\Documents\Decomp

Así que tendremos que ir a esa carpeta desde Ubuntu.
En ubuntu los discos de windows se encuentran en /mnt/X, donde X es la letra de tu disco duro.
En mi caso lo tengo en el disco duro C, así que tendré que ir a /mnt/c
Para hacerlo solo tengo que escribir
Código:
cd /mnt/c

Ahora solo tengo que ir al resto de carpetas hasta llegar a decomp, en mi caso sería algo así:


Ahora lo que haremos será copiar el repositorio de pokeemerald y las herramientas (no confundir con herramientas para modificar nuestro proyecto) necesarias para editar nuestro proyecto.
Primero clonamos las herramientas, que las clonará a una carpeta llamada agbcc dentro de nuestra carpeta de decompilación
Código:
git clone https://github.com/pret/agbcc
¡Diablos mi primer error!


Por defecto no tenemos los permisos adecuados para trabajar en los archivos de Windows, así que lo que haremos será remontar nuestro disco.
Ejecutamos estos tres comandos, uno a uno
Código:
cd ~
sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata
Si usáis otro disco duro que no sea c cambiad las letras correspondientes en el último comando.

Ahora sí, a intentarlo otra vez.
Navegamos a nuestra carpeta de Decomp de Windows, en mi caso tengo que hacer:
Código:
sudo umount /mnt/c sudo mount -t drvfs C: /mnt/c -o metadata
Y ahora sí, ejecutamos el git clone de las herramientas:
Código:
git clone https://github.com/pret/agbcc
Una vez terminado veréis que tenemos una carpeta llamada agbcc dentro de nuestra carpeta.
No tocaremos nada de ella por ahora, primero clonemos pokeemerald también:
Código:
git clone https://github.com/pret/pokeemerald
Una vez terminado tendremos que navegar a nuestra carpeta de las tools, haciendo el siguiente comando:
Código:
cd agbcc
Una vez dentro ejecutaremos la build de nuestras herramientas, haciendo:
Código:
./build.sh

La consola hará muchas cosas que para nosotros quizás parezca magia o algo salido de una película de matrix pero no os preocupéis, no debería tardar mucho (dependerá de la CPU de cada uno)

Una vez terminado lo que te tenemos que hacer es instalar esas herramientas en nuestro pokeemerald.
Nosotros no le pusimos ningún nombre a nuestra carpeta de pokeemerald, así que se llama pokeemerald por defecto.
Manteniéndonos dentro de la carpeta de agbcc enviamos el siguiente comando:
Código:
./install.sh ../pokeemerald
El comando no debería devolvernos nada, así que ya estaría listo

Ahora navegamos a nuestra carpeta de pokeemerald, en mi caso escribiendo:
Código:
cd ../pokeemerald/
Ahora lo que necesitamos es saber cuántos hilos tiene nuestro procesador para poder compilar usando todo esos.
Eso lo podemos buscar las especificaciones de nuestro PC, o más sencillamente yendo al Administrador de Tareas, y en la segunda pestaña, la de Performance/Rendimiento cambiamos la vista a esta:

Ahí podremos ver cuántos hilo tenemos, en mi caso son 16:

Bien, pues vamos a la consola de Ubuntu y escribimos:
Código:
make -j16
Cambiando el 16 por el número de hilos.
Esto empezará a compilar nuestra rom!
No os preocupéis, la primera vez tarda lo suyo pues tiene que compilar todo por primera vez, dependiendo de la velocidad de vuestro procesador. Yo tengo un procesador con mucha potencia, así que solo me tardará 2 minutos, aunque lo normal es que tarde hasta 10 minutos o incluso más si tenéis procesadores más honestos o laptops.

Una vez que termine el make vamos a la carpeta de pokeemerald en Windows y…


¡Victoria! Tenemos nuestra primera rom compilada :)


La abrimos con mGBA y magia, funciona!


Configurando VSCODE con WSL integrado
Abrimos VSCode, y en la izquierda del programa tendremos unos iconos, damos click al último, que es el de las extensiones, y ahí escribimos WSL

Damos click en Remote - WSL y damos click en Install

Ahora abriremos nuestra carpeta de pokeemerald

Una vez abierta, abajo a la izquierda en nuestra ventana de WSL daremos click a este botón verde:

Y ahí le daremos a reabrir nuestra carpeta usando WSL

Quizá la primera vez tarde un poco, pero abajo a la derecha tenemos una barra de progreso:

En mi caso me ha pedido permisos para el firewall, se los damos sin problema

Ahora es donde viene la magia de VSCode.
Cerramos nuestra ventana de Ubuntu para siempre, no la necesitaremos más (pero no la desinstaléis ni borréis nada)

Lo que haremos será abrir una nueva terminal en WSL

Y ya deberíamos tener una terminal en nuestro VSCode con la carpeta en la que estamos cargada

Para terminar el tutorial probaremos a hacer un cambio en nuestro proyecto y compilando.
En mi caso cambiaré el texto del profesor Abedul en la intro.
Primero buscaré el texto a modificar en el buscador de VSCode
Guardamos el archivo con Control + S; y, abajo, en la terminal, ejecutamos nuestro comando para compilar la rom:
Código:
make -j16
¡No os olvidéis de cerrar el emulador antes de compilar!
Y también recordad que tenéis que cambiar el 16 por el número de hilos que tenga vuestro procesador.
Abrimos nuestra ROM y…
 
Última edición:

eing

Miembro de honor
Miembro de honor
La ostia en bicicleta, ahora no hay excusas para ponerse a cacharrear.
Hacen falta mas tutoriales para tontos, y poco a poco se empezará a ganar mas adeptos.
 

Edo

You've met with a terrible fate, haven't you?
Miembro de honor
Como dijiste, se ve bastante largo. No te lo voy a negar. Aún así, esto nos viene súper bien a las personas que estamos interesadas en empezar con decomp; después de todo, se ve bastante detallado y cuenta con un montón de imágenes ilustrativas que seguro favorecen el proceso de asimilación de toda la información que conlleva este proceso.
En cualquier caso, muy buen aporte. Cuando me llegue el momento voy a estar siguiéndolo para ver qué tal me va. Así que, bueno, gracias por tomarte el tiempo de actualizar esta info y aportarlo a la comunidad.

Saludos.
 

FarioMan

Héroe de WaH
Enmarquen este tutorial,

Todo aquel que desee iniciarse en decomp debería leerlo si o si para poder tener claro como instalar las herramientas. Además, el proceso de preparación a su vez te deja buenos conocimientos que te pueden servir de base si deseas desarrollar otra clase de aplicaciones para linux desde windows, así como configurar el VSCODE (Que es uno de los IDES más usados para programar hoy en día).

Mis dieces, ¡Y que viva Decomp!
 

ReoNeky

Héroe de WaH
Miembro del equipo
Community Manager
Redactor/a
¡Muchísimas gracias por la aportación!
Esto es el inicio de lo que se avecina, y justo es lo que uno necesita para saber un poco más sobre Decomp. Como Rom Hacker no he tenido ningún tipo de contacto con el mundillo hasta leer este tutorial.

¡Es genial como mi Pandawan favorito de pie a que los demás se metan en el mundillo!
 

Cheve_X

MoonLover~
Miembro de honor
Está perfectirijillo, me encanta la cantidad de imágenes que tiene, ideal para no perderse :3
 

Juanjo

Hacker del pasado...
Hola amigo Jaizu!

Un tutorial hermoso y sumamente notable.

El bash de Ubuntu lo llevo usando desde que veía los lectures de Deep Learning en el master y ando trabajando en mi tesis con el Visual Code y Git-Hub por lo que el hecho que la técnica de decomp en el RH prometa tanto y esté creciendo en investigación, no se me hace raro que terminemos todos trabajando en algún proyecto...

He seguido el tutorial y me ha sorprendido la facilidad con lo que lo has explicado. Felicidades!! ¡He hecho mi primer diálogo en Emerald! y logrado que este viejo robot volviera a sentir esa chispa cuando era niño.

Hace muchos años era un niño que encontró WaH de causalidad y me cambió la vida. Me hizo aprender de gráficos, de RAWs, de como funcionan los ROM. Del binario, de scripting (pre-programación), de HEX, de ASM... Esto me permitió ser bastante bueno en programación en la universidad, me hizo amarla desde antes de conocerla...

De la misma manera, con excusa de plasmar tus deseos más íntimos en un juego de Pokémon, las nuevas generaciones (y las viejas de toda la vida) también aprenderán sobre IDE (Como Visual Studio), a usar el Bash de Ubuntu y lo más importante aprender a usar y trabajar con Git. Créanme, saber de esto es importantísimo en el estado de arte de la investigación ciéntifica actual. Habilidades en Git, C++ Y Ubuntu es perfecta para el CV.

Gracias a este hermoso arte del RH por permitir gamificar nuestra creatividad y habilidades profesionales y científicas


Sinceramente,

Juanjo
 

Samu

Usuario de Platino
Gracias por hacer un tutorial actualizado con esto de la forma más clara posible, ahora solo queda fijarlo y quitarle la chincheta a los temas viejos que no sirven.

Para hacer que sea más fácil de seguir quizá tendrías que separar las cosas un poco con más espacio o spoilers.

PD: vengo aquí a comentar para que el pesado de Jaizu se calle, como sospecho que hemos hecho varios.
 
Última edición:

Sparky

Pásense a Decompilación, romhackers
¡Genial! Ya es hora de decirle adiós a Cygwin/Msys y a Notepad++. Lo único que falta es esperar a instalar Windows 10 en mi PC 😓.
 

Milotix

Hacker Rom desde 2007
Muy buen tutorial, me funcionó 10 puntos.

Como comentario, que para instalarlo en ubuntu simplemente hay que saltearse los puntos de permisos de discos e instalar el VSC como deb.
 

Rata

Veterano en Gráficos
Este post está lleno de usuarios leyendas, ¿que me dices? Parece que varios ya hemos empezado a animarnos con decomp como base para nuestros juegos. Gracias por el tutorial, ha funcionado todo al 100%!!
 

~Criisss

Héroe de WaH
Qué buen trabajo Jaizu, esto se estaba pidiendo a gritos.

Los tutos que hay en el foro estan casi todos orientados a Cygwin y varias veces discutimos en #decomp que era hora que alguien los actualice. Está todo explicado de maravilla, y para colmo me entero recién que se puede compilar directo desde la consola en el VSCode, siempre se aprende algo nuevo.

¡Seguí así!
 

Jaizu

Decomp user
Supongo que debo seguir estos pasos cierto? pero en lugar de pokeemerald seria pokeruby no?.
El tutorial vale para ambas bases, solo debes cambiar el enlace en el git clone al que desees. He puesto pokeemerald en el título porque es lo que yo usé y a lo que yo doy soporte, pues el desarrollo de decomp está centrado en pokeemerald y ruby se dejó de lado pues no ofrece nada vs emerald.
 

mostazaniikkkk

On my way
consulta men, veo que usas la terminal de linux que metieron en win10 hace relativamente poco, se podria hacer solo en windows (a punta de powershell)? pregunto porque sigo habitando en win7 (al menos hasta que me compre un ssd, pille un oferton de win10 ltsc y jubile mi viejo hdd) y me gustaria probar esto
 

Jaizu

Decomp user
consulta men, veo que usas la terminal de linux que metieron en win10 hace relativamente poco, se podria hacer solo en windows (a punta de powershell)? pregunto porque sigo habitando en win7 (al menos hasta que me compre un ssd, pille un oferton de win10 ltsc y jubile mi viejo hdd) y me gustaria probar esto
Nop, esto es literalmente Linux. Lo que tú buscas es cygwin o msys2, busca si hay algún tutorial por el foro.
 

Katherine

Omnipresente
Miembro de honor
Oh, qué joyita me he encontrado por aquí.
Me alegra ver que cada vez hay formas más cómodas de hacer funcar todo el tema de decomp desde Windows. WSL es una maravilla :) y el tutorial más sencillo imposible.

Lo que faltaría, ya puestos, para terminar de cerrar el ciclo, sería crear alguna task en VSCode que te buildee la propia ROM no vaya a ser que nos canse ya tener que escribir un comando en la terminal de vez en cuando.

En fin, ¡es un muy lindo aporte! ¡Se agradece!
 
Arriba