De Whack a Hack Wiki!

Esta sección está orientada a dar información general sobre las principales plataformas existentes por lo que el tema debería ser de utilidad para personas que lleven poco tiempo aquí y no sepan cual elegir. Si acabas de empezar ¡Lee con atención!

  • ROM Hacking binario: consiste en la modificación de uno de los juegos oficiales. Estos juegos pueden pertenecer asimismo a diferentes plataformas (GBA, NDS, etc), siendo GBA la más popular. Las modificaciones hechas sobre la ROM suelen llevarse a cabo utilizando herramientas existentes, o procesos de ingeniería inversa.
  • Pokémon Essentials: es una extensión (o base) preparada para el desarrollo de juegos de Pokémon en RPG Maker, que es un programa pensado para el desarrollo de videojuegos RPG clásicos.
  • PSDK: o Pokemon Software Development Kit es similar a Pokémon Essentials en el sentido de que está preparado para ser usado en RPG Maker. En este caso, se trata de un sistema con mejoras respecto a Essentials en rendimiento, número de funcionalidades, facilidad...). Actualmente está en desarrollo y hay muchas cosas sin terminar, o con placeholders.
  • Decompilación: esta plataforma se asemeja al ROM Hacking binario, ya que se está modificando uno de los juegos creados por Nintendo, pero en este caso no se modifica el ROM en sí, sino el código fuente, que esta "decompilado". Esto permite tener mucho más control sobre las funcionalidades que se modifican y el contenido del propio juego, así como reducir los errores y que estos sean más fáciles de solucionar que en ROM Hacking binario. Existen proyectos de decompilación de juegos de GBC, GBA y NDS. Podéis encontrarlos en distintos repositorios de GitHub, bajo el usuario pret (Pokemon Reverse Engineering Team).
  • Otras plataformas: Existen muchas plataformas que permiten hacer un juego 3D desde cero, pero entre estas, destacan 4. Todas ellas son motores profesionales y aunque la curva de aprendizaje puede variar, estas plataformas te van a servir para hacer cualquier videojuego, sea de Pokémon o no. Requieren bastante más esfuerzo y dedicación en algunas cosas que las previas alternativas, pero ofrece muchas más posibilidades:

Diferencias entre plataformas

Ahora que conocéis cada una de las plataformas os asaltará la siguiente duda: ¿Cuál debería escoger yo? La respuesta, aunque algo obvia, es que depende de tus preferencias. Para ayudarte a elegir, aquí se ofrece un desglose de las diferencias en cada punto.

Rendimiento

El rendimiento de GBA es bastante bueno, tanto con ROM Hacking binario, como con decompilación. Tiene un frame rate estable de 60 fps con vsync. No obstante, puede variar dependiendo del emulador usado. Con Pokémon Essentials, el rendimiento es bastante peor, el frame rate es más bajo y no es estable. Además, no cuenta con vsync, partiéndose la pantalla constantemente (screen tearing). PSDK soluciona estos problemas.

Sistemas operativos compatibles

Los juegos realizados en GBA, podrán ser ejecutados en cualquier plataforma que tenga un emulador de la consola. Esto viene a ser prácticamente cualquier sistema operativo y versión. En cuanto a Pokémon Essentials, la plataforma de ejecución serán únicamente equipos con Windows, aunque puede llegar a portearse a otras plataformas con bastante trabajo.

Facilidad para insertar y modificar gráficos

En Rom Hacking binario, cambiar los gráficos es un proceso pesado, que en muchos casos requiere de un proceso de ingeniería inversa para conocer el lugar en el que se encuentra la imagen, o el uso de multitud de herramientas externas. Además, modificar según que imagen, puede requerir conocimientos bastante técnicos. En RPG Maker, el motor de Pokémon Essentials, la sustitución de imágenes es muy sencilla. Únicamente hay que buscar la imagen dentro de las carpetas del proyecto y sustituirla. En decompilación, se agiliza mucho respecto al ROM Hacking binario, siendo muy similar al que se realiza usando Pokémon Essentials. Se busca la carpeta con la imagen y se sustituye.

Limitaciones en los gráficos

Este es, sin duda, el punto más negativo de utilizar GBA, ya sea en ROM Hacking binario o decompilación, pues tiene un apartado gráfico muy restringido, aunque, pese a todo, se pueden hacer cosas bonitas, simplemente tendremos que asumir ciertas limitaciones.

Las limitaciones gráficas de GBA son bastante grandes. En primer lugar existe una limitación en la profundidad de color, que es RGB de 15 bits (32 768 posibles colores diferentes). Además, existe una limitación en cuanto a la cantidad de colores que pueden mostrarse a la vez por pantalla. La GBA utiliza un sistema de paletas, generalmente de 16 colores (aunque pueden ir de 16 a 256), contando con 16 paletas para los sprites (u objetos) y 16 paletas para el fondo (escena o interfaz). Esto limita los colores de los tiles y los sprites de nuestro juego, ya que un mismo tile o sprite, no podrá de tener más de 15 colores diferentes más el color de fondo que será transparente.

Por otro lado, el espacio de los tilesets también es limitado (128x256 píxeles) y la cantidad de tilesets disponibles al mismo tiempo está limitiada a dos. Por este motivo, en muchas ocasiones se termina haciendo malabares con el tileset, en un intento de que entre todo lo deseado.

RPG Maker, sin embargo, dispone de mucha más libertad gráfica. Para empezar la profundidad de color es de 24 bits RGB (16 777 216 posibles colores), e incluye transparencias y semitransparencias. No existe ningún sistema de paletas, por lo que no hay limitación de colores en las imágenes. El tileset puede ser tan extenso como se necesite (aunque un tileset enorme puede causar problemas de rendimiento si no se optimiza correctamente). Por otro lado, dispone también de los llamados fogs, que aportan efectos de iluminación a la escena.

Edición de mapas (escenarios)

En todas las plataformas la edición de mapas es bastante similar, aunque hay algunas pequeñas diferencias.

  • Al trabajar con ROM Hacking binario, la edición de los mapas se realiza a través de Advance Map, programa que tiene varios bugs y limitaciones, y que no puede ser arreglado al no ser de código abierto. Es fácil corromper la ROM debido a los bugs, perdiendo todo el trabajo hecho.
  • Cuando se desarrolla mediante Pokémon Essentials, la edición se realiza a través del propio RPG Maker, y la herramienta funciona sin ningún problema.
  • Para los proyectos de decompilación, se utiliza una herramienta externa multiplataforma de código abierto llamada PoryMap. Es bastante más cómodo de usar que el Advance Map, tiene más funcionalidades y no tiene los problemas de éste. Está en constante desarrollo, por lo que se añaden mejoras frecuentemente por parte de la comunidad.

Cantidad de herramientas

Para modificar un juego mediante ROM Hacking binario hace falta una gran cantidad de herramientas. Muchas de ellas no son realmente necesarias, pues son herramientas muy específicas, cuya funcionalidad se puede ser llevada a cabo por una herramienta más amplia. La mayor parte de las herramientas de RH están generalmente hechas por programadores aficionados, inexpertos o con muy poco tiempo, sin muchas pruebas, sin control de ningún tipo de excepciones y con muchos fallos, etc. En definitiva, pueden presentar bugs que pueden corromper la ROM. Trabajar con Pokémon Essentials es mucho más sencillo en este aspecto, pues RPG Maker es prácticamente la única herramienta necesaria. Es un plus contar con un editor de texto para el código y un editor de imágenes. Desarrollar con decompilación mejora mucho la situación respecto al ROM Hacking binario, pues con un editor de texto decente (Visual Studio Code, Notepad++, etc.), las herramientas para compilar y Porymap es suficiente para un desarrollo normal.

Insertar nuevos sistemas

A la hora de insertar nuevos sistemas todas las plataformas tienen el mismo problema. O el sistema ya esta hecho (en cuyo caso no debería ser muy complicado añadirlo) o tienes que saber programar para hacer el nuevo sistema. Por lo que, a la hora de la verdad lo importante es: ¿Cómo de fácil es programar para esa plataforma? ¿Cómo de fácil es modificar el código?

En ROM Hacking binario es muy complicado. Aquí no contamos con el código fuente, si no con el binario/hexadecimal. Lo más similar que podemos hacer es consultar las instrucciones del procesador equivalentes a código de ensamblador (ASM), con un nivel de abstracción muy bajo y difíciles de entender (se puede programar en C para un proyecto de ROM Hacking binario e insertar el sistema en la ROM, pero aún así hay que hacer modificaciones en ASM/Hex que no dejarían de ser meros parches). Modificar una función sería muy laborioso. De forma muy simple, sería algo como esto:

  1. Encontrar la función en cuestión en el desorden de código ASM con el debugger.
  2. Analizar el código de ensamblador y decidir como modificarlo.
  3. Escribir las modificaciones y el código ASM nuevo.
  4. Insertar el código y las modificaciones en el binario.
  5. Si no ha salido correctamente, repite todo el proceso.

El código de Pokémon Essentials está escrito en Ruby distribuido en distintos archivos, el cuál es un lenguaje relativamente sencillo. Lamentablemente el código de Pokémon Essentials está mal estructurado, es muy desordenado y comete muchas malas prácticas. Modificar el código de Pokémon Essentials, en ocasiones, no es tan fácil como debiera, pudiendo llevar una pequeña modificación varias horas. A esto hay que sumarle, que, aunque la parte de Pokémon Essentials es una capa modificable, la parte de RPG Maker XP como tal es una capa cerrada que nos establecerá ciertas restricciones.

Por otro lado, el código de decompilación está escrito en lenguaje C y está muy bien estructurado. Puede resultar un poco complejo al principio, pero una vez se entiende el patrón que sigue, se coge el ritmo, por tanto, resulta muy fácil y rápido de modificar al coger soltura. Cabe recordar que se tiene acceso a todo el código del ROM, y siendo C un lenguaje tan versátil, se puede llegar a tener control total para hacer lo que sea con la Game Boy Advance. No hay nada que no se pueda modificar de un proyecto de decompilación, puedes hacer absolutamente todo lo que te permitan las limitaciones GBA.

Tamaño del juego resultante

Realmente, en ningún caso el juego es pesado para los estándares actuales.

  • En GBA, debido a las limitaciones de la consola, no puede pesar más de 32MB.
  • Un juego realizado con Pokémon Essentials puede pesar desde unos 40MB a varios cientos, dependiendo del proyecto.

Audio y música

En RPG Maker, añadir nuevas canciones y efectos de sonido es tan sencillo como arrastrar un fichero de audio en una carpeta. En ROM Hacking binario el proceso es bastante difícil, las canciones deben de estar en un formato MIDI y debes de tener los samples de los instrumentos, así como configurarlos completamente. En decompilación el sistema de audio funciona esencialmente igual que en ROM Hacking binario, pero el proceso es mucho más sencillo, más claro y más rápido.

Resumen

Finalmente, aquí se presenta una tabla resumen con los aspectos más destacados de los apartados anteriores:

Característica GBA Binario GBA Decompilación Pokémon Essentials
Rendimiento Icon wiki level3.png Icon wiki level3.png Icon wiki level1.png
Multiplataforma Icon wiki level3.png Icon wiki level3.png Icon wiki level1.png
Facilidad para insertar gráficos Icon wiki level0.png Icon wiki level2.png Icon wiki level3.png
Libertad gráfica Icon wiki level0.png Icon wiki level1.png Icon wiki level3.png
Edición de mapas (lugares) Icon wiki level2.png Icon wiki level3.png Icon wiki level3.png
Herramientas simples Icon wiki level1.png Icon wiki level2.png Icon wiki level3.png
Programación sencilla Icon wiki level0.png Icon wiki level2.png Icon wiki level1.png
Juego ligero Icon wiki level3.png Icon wiki level3.png Icon wiki level1.png