Creatividad, videojuegos y preservación del software

GB Studio: una herramienta para crear videojuegos de Game Boy

Hay un algo embriagador en todo lo relacionado con la Game Boy original. No por nada, la máquina de Nintendo ostenta un puesto de honor en el movimiento aesthetic, ese constructo social que intenta hacer creer a la Gen Z que a principios de los 90 escuchábamos música lo-fi y teníamos una monstera en el dormitorio. Desde luego, la nostalgia mueve montañas, y más allá de que el revival de los últimos años nos haya hecho meterle a nuestra vieja portátil un mod con pantalla IPS, lo cierto es que la scene está más viva que nunca a tenor de la enorme cantidad de juegos amateur que aparecen hoy día para dicha consola. Eso sí, hay una razón detrás de todo esto mucho más fundado que las modas pasajeras.

La creación de videojuegos para máquinas clásicas suele estar vetada para la mayoría hasta que aparecen herramientas que hagan menos tediosa la tarea. En el caso de Game Boy, GB Studio ha resultado ser una puerta de entrada para potenciales gamedevs con ganas de marcha al ofrecer un entorno de desarrollo de alto nivel mucho más asequible que las propuestas existentes hasta su lanzamiento. No es lo mismo devanarse los sesos con punteros, registros y direcciones de memoria que montar diagramas de flujo con una interfaz drag & drop. Pero antes de nada, las presentaciones.

Consola Game Boy real mostrando un fangame de Castlevania

Qué es GB Studio

GB Studio es una herramienta gratuita para Windows, Mac y Linux con la que es posible crear videojuegos de Game Boy y Game Boy Color. Esto no es una forma de hablar: una vez compilados los juegos, estos pueden exportarse como una rom que correrá a la perfección tanto en una consola real vía flashcart como en cualquier emulador. Para ello, dispondremos de un entorno amigable muy en la línea de lo que ofrecen otras propuestas de diseño asistido como GameMaker, con una bonita interfaz visual, plantillas que podremos modificar a nuestro antojo, y mucho margen de maniobra en caso de que se nos antoje malear la estructura que dialoga a bajo nivel con las tripas de la consola.

El proyecto se fraguó a partir del trabajo previo de su desarrollador Chris Maltby, quien había estado creando una implementación javascript para GBDK, uno de los kits de desarrollo más famosos para crear videojuegos en consolas clásicas basadas en el sempiterno procesador Z80 y otros chips de la época. Untitled GB Game fue el jueguecillo que desarrolló para la Bored Pixels Jam 3, una obra meta sobre el propio proceso de desarrollo de videojuegos que se inspiraba estéticamente nada menos que en el The Legend of Zelda: Links Awakening. Tras ser el juego mejor valorado del certamen, Maltby decidió refinar y compartir las herramientas visuales que había estado construyendo para desarrollar públicamente su proyecto, dando pie a la creación de GB Studio, cuya versión 1.0 se lanzó en abril de 2019.

Captura de pantalla de l juego para Game Boy Untitled GB Game
Untitled GB Game (2019)

Al no existir hasta entonces un framework como Pajitnov manda, las alternativas disponibles pasaban irremediablemente por tener conocimientos de Ensamblador (RGBDS) o C (el mencionado GBDK-2020 y proyectos derivados de este como ZGB o el propio GB Studio). La cosa era comunicarse de la forma más fácil posible con el chip SHARP LR35902, corazón de la vieja Game Boy DMG en el que se incluye tanto su procesador principal SM83 como otros de gestión de gráficos y sonido. Pero claro, no todo el mundo tiene cuerpo para meterse a picar código, por lo que del mismo modo que los asentadísimos entornos de desarrollo asistido vigentes recurren a la abstracción para dejarnos trabajar desde una capa visual ajena a lo que se mueve por debajo, GB Studio logra su propósito sacrificando el rendimiento general del software resultante a cambio de una facilidad extrema. Un doble tirabuzón con varias capas superpuestas que, aunque no sea necesario dominar, viene bien conocer para saber cómo puñetas vas a acabar haciendo un clon de Pokemon Rojo en dos tardes arrastrando sprites en un programa de Windows. Más adelante vemos eso.

Placa principal de Game Boy mostrando sus chips

Cómo crear videojuegos con GB Studio

Como ya existen muchas guías y tutoriales que desgranan todas las bondades de este software, creo que lo más útil es ilustrar con un ejemplo propio el proceso de creación de juegos en GB Studio. Hace unos días intenté saciar el impulso creativo de mis filias personales que afloran con la crisis de los 40 creando un prototipo inspirado en las ilustres entregas portátiles de la saga Castlevania. Quizás no era una buena elección como proyecto iniciático al tener que montar un pequeño cristo para elaborar funcionalidades no contempladas por defecto en la herramienta, pero al programa hemos venido a pasarlo bien y llevarnos el coche. Con lograr que mi «Ramón Belmonte» pegue latigazos y se mueva por el escenario me daba con un canto en los dientes.

Selector de tipo de escena en GB Studio

En GB Studio, los proyectos se estructuran en escenas, unidades básicas de juego autosuficientes a las que asociaremos una serie de reglas predefinidas según el género del videojuego a crear. Mediante la conexión de varias escenas que se disparan ante acciones concretas iremos componiendo el esqueleto de nuestro juego.

Actualmente, los tipos de escenas disponibles son:

  • Top Down 2D: juegos con vista elevada y movimiento en cuatro direcciones limitado por una matriz de movimiento invisible. Las primeras entregas de la saga Pokémon son buen ejemplo de ello.
  • Platformer: juegos de plataformas con vista lateral y físicas para controlar saltos.
  • Adventure: juegos con vista elevada de forma similar al Top Down 2D pero movimiento en nueve direcciones no limitado por cuadrícula.
  • Shoot Em’Up: juegos de movimiento libre similar a la modalidad Adventure pero con la orientación del actor que controlamos fijada en una dirección.
  • Point and Click: juegos en los que controlamos un cursor de forma libre por la pantalla para interactuar con los distintos elementos.
  • Logo: escena especial con mayor libertad para mostrar sprites simultáneamente en pantalla. Tan solo puede haber una escena de este tipo en cada juego.

A su vez, una escena está construida a partir de un background que definirá el espacio visible de esa área y que, obviamente, tiene una serie de limitaciones funcionales más allá de mostrarse en pantalla con una resolución de 160×144 pixeles y cuatro colores en el caso del modelo DMG. Game Boy trabaja con sprites chiquiticos de 8×8 que hacen las veces de tiles para componer fondos complejos a partir de pocos elementos, y GB Studio gestiona esto a lo bruto. Esto es, nosotros le damos una imagen png con la composición entera del fondo para que, de forma interna y ajena a nosotros, sea dividida y almacenada en memoria como trozos no repetidos. La forma de recortar ese fondo para meterlo en memoria y acceder a esos pedazos de forma eficiente ya no es cosa nuestra. Debido a esto, se hace imprescindible disponer de una herramienta de teselado para componer nuestros mapeados con facilidad. El software gratuito Tiled es una de las mejores opciones que podemos encontrar.

Para la creación de sprites en sí necesitaremos también de una herramienta externa. Si bien nos vale con cualquiera que permita adaptar la imagen a una paleta de color dada, lo ideal es tirar de algún programita pensado para trabajar con pixel art y agilizar las cosas a la hora de crear tiles y elementos que funcionen como mosaico. Aseprite (y su fork gratuito Libresprite) o Piskel son de lo mejorcito que te puedes encontrar.

Interfaz de la herramienta Libresprite mostrando sprites de un personaje para un juego de Game Boy
Interfaz de Libresprite 1.1

Vale, ya tenemos las escenas, así que ahora toca pintar monigotes. Los sprites también se insertan en GB Studio a las bravas, por lo que no tenemos más que ubicar en la carpeta correspondiente de su estructura de archivos una imagen png que incluya todos los sprites que conforman las animaciones de un mismo personaje. Posteriormente, y desde el propio editor integrado, iremos eligiendo qué bloques de 8×8 compondrán los fotogramas de las animaciones que necesitemos, la cuales, además, tendrán ciertos requerimientos según la naturaleza de la escena en la que se emplace: no es lo mismo tener que dibujar animaciones para el movimiento en cuatro direcciones en la modalidad Top Down 2D que el avance lateral, salto y escalada del Platformer. En los ajustes de animación elegiremos el formato que más nos convenga.

La única desventaja de estos sistemas tan simplificados es que debemos tener cuidado a la hora de optimizar la carga de assets que metemos en nuestro juego. Cada escena soporta un número limitado de elementos simultáneos, de ahí la necesidad de controlar muy bien los fondos y sprites recurriendo a la repetición por tiles. En el caso de mi Ramón Belmont, reutilizo las partes de su cuerpo de cintura para arriba en las animaciones de cuando ataca o se agacha. Recodemos que, aunque un sprite pueda ser más grande, se almacena en memoria en forma de bloques de 8×8.

Editor de Sprites de GB Studio

Hasta ahora estoy mencionando cómo ir insertando los diferentes recursos de independiente, por lo que la duda sigue en el aire: ¿cómo conecto todos estos elementos para construir un juego? Ahí por fin toca referirse al montador de escenas en el que emplazaremos todos los sprites sobre el background además de poder hacer lo más importante: asignar comportamientos concretos a elementos o zonas del escenario mediante un comodísimo sistema de arrastrar y soltar scripts que cubren la mayoría de necesidades.

Caja de scripts en GB Studio

De nuevo, mejor un ejemplo explicativo que soltar todo lo que ya está pormenorizado en otros sitios. El script de aquí al lado define el comportamiento de un pajarillo que recorre el escenario moviéndose de forma cíclica entre dos puntos. La pestaña On Update indica que el bucle se va a ejecutar constantemente hasta que se dictamine lo contrario incluso si el sprite no está en pantalla.

Inicialmente defino una dirección mediante el script Set Direction, para acto seguido decirle a la entidad que se mueva 31 tiles a la derecha mediante el comando Move Relative. Inmediatamente después cambio la orientación del sprite y le pido que se mueva 31 espacios de forma negativa acorde a los ejes de movimiento que definen los escenarios, para acto seguido volver a empezar el ciclo.

Hay otra pestaña no marcada llamada On Hit, en la que defino qué sucederá cuando mi personaje impacte con su látigo en el pájaro, en este caso mostrar una animación de explosión y destruir la entidad «pájaro».

Hasta aquí todo correcto; ahora toca tirar de inventiva y aprovecharse de las opciones disponibles para hacer cosas que no están contempladas en el juego de comandos predefinidos. Sin ir más lejos, he tenido que inventarme un script que se mantiene a la escucha cada pocos milisegundos para comprobar manualmente si la dirección de la cruceta está pulsada hacia abajo y si está atacando para mantener al personaje en posición agachada. Y no hablemos del lote de 20 scripts en una maraña de estructuras de control para implementar el uso del látigo al atacar, cuyas cajas de colisión he tenido que falsear mediante proyectiles invisibles que salen del personaje ante la imposibilidad de que un sprite replique las coordenadas relativas del protagonista mientras salta. Todos estos apaños salen solos una vez entiendes las posibilidades de la herramienta, pero el periodo de aprendizaje hasta que sabes kung fu no te lo quita nadie. Eso sí, luego ves esto y merece la pena el esfuerzo:

Queda claro que si no meas fuera del tiesto, cualquiera con ganas de experimentar es capaz de hacer su jueguecillo. Dejo sin mencionar otras funcionalidades como el tracker integrado para crear música chip, el gestor de paletas de color para Game Boy Color o todos los ajustes asociados a cada plantilla de escena. De nuevo, encomiendo a cualquier persona interesada a que visite los enlaces que he recopilado al final de este texto.

Ahora bien, llegados a este punto, es buena idea volver a mencionar el tema de las capas de abstracción, piedra angular sobre la que se erige cualquier entorno asistido de desarrollo de videojuegos y que, en el caso de GB Studio, se hace imprescindible entender si queremos lograr que nuestro proyecto pase de ser un mero pasatiempo y se convierta en un videojuego de los que ganan jams y salen en Kotaku.

Exprimiendo el hardware con GBVM

Capas de abstracción usadas por GB Studio

Ya he mencionado antes un par de veces el GBDK-2020, un kit de desarrollo que incluye compilador, toolchain y librerías que permiten desarrollar videojuegos para consolas y ordenadores basados en los chips MOS 6502 (Commodore VIC-20, Atari 2600), Zilog Z80 (Spectrum, MSX, Amstrad CPC) o el también ya mentado Sharp SM83 que integra el procesador de Game Boy.

Empezando por los cimientos, la base de GB Studio a bajo nivel está en su implementación con GBDK, que se comunica con el propio hardware y define los principales elementos que he enumerado hasta ahora: las escenas, los backgrounds, los sprites y demás elementos del entorno son definidos aquí para su posterior manipulación simplificada. Más arriba está el núcleo de GB Studio y los llamados «game states», elementos personalizables que nos ofrece la herramienta por defecto y que, entre otras cosas, se refieren a los «géneros» que podemos asignar a una escena. Por ejemplo, si elegimos la plantilla Adventure tenemos un submenú para calibrar la gravedad, fricción y potencia de salto de nuestro personaje. Todo eso se controla aquí.

Y tras esto viene lo interesante, ya que con la versión 3.0 de GB Studio se incluyó una nueva capa llamada GBVM (Game Boy Virtual Machine), un conjunto de funciones que podemos ejecutar en forma de script encastrado entre los comandos estándar definidos hace un rato para añadir features no incluidas por defecto en el editor. Un gran ejemplo de su potencial es la posibilidad de usarlo para implementar fondos animados. Para realizar estas modificaciones haremos uso de un trasunto de lenguaje ensamblador legible con el que podremos interactuar con los niveles inferiores del núcleo. La ventaja de esto es que nos mantendremos en un entorno de ejecución seguro, evitando cargarnos algo si tuviéramos que hacer algo con el código directamente en el nivel del GBDK.

Ejemplo de fondo con animación para el juego Ducktales de Game Boy
Ejemplo de tile swapping con GBVM (fuente)

La única desventaja, tanto de esta capa adicional de experimentación como del propio GB Studio en su conjunto es que, como sucede con cualquier entorno de alto nivel con tantas filigranas, perdemos eficiencia y optimización en el software resultante, problemilla algo limitante teniendo en cuenta que estamos trabajando con un procesador pequeñito de 8 bits que no llega al millón de instrucciones por segundo. Un sacrificio que a día de hoy casi se da por sentado al utilizar este tipo de «makers». Al final todo pasa por equilibrar entre comodidad y rendimiento. La de damnificados que habrá por ahí tras haber tenido que crear un Pac-Man en ensamblador para Estructura de Computadores en 2º de carrera.

Game Boy: Eres un fenómeno

GB Studio permite exportar los juegos en HTML5 y encastrarlos en cualquier página web, por lo que sus posibilidades van mucho más allá de uso en emuladores, aunque hay un buen puñado de desarrolladores que se embarcan incluso en la producción masiva de cartuchos para máquinas originales. Hay desde joyas completamente gratuitas hasta barbaridades que te instan a tirar dinero a la pantalla, pasando por títulos que incluso se comercializan en Steam.

Cuando te pones a escarbar te das cuenta de que las limitaciones técnicas de la plataforma son tales. Realmente, el regusto a Game Boy es una baza creativa a la hora de plasmar ideas que resuenan mejor en el marco que engloba las vivencias y percepciones relacionadas con la consola. Le pasa lo mismito que a la música lo-fi. No es la canción en sí, sino el constructo de un momento vital idealizado en el que nuestro lugar feliz resulta ser nuestro dormitorio adolescente jugando al Mario Land 2 mientras merendamos Phoskitos. Y da igual si no es real.

Enlaces

4 comentarios

  1. Mordamir

    Magnífico analisis

    • Raul Rosso

      ¡Gracias! 🙂

  2. hujikogari

    Gracias Raúl, nuevo altar desbloqueado en el que sacrificar horas de sueño.
    Lo de poder intervenir en el desarrollo haciéndole cosquillitas a bajo nivel a la GB suena de fábula.
    Y lo de desarrollar con las limitaciones de los 8 bits, puede sonar raro, pero puede ser algo liberador también según se mire…

    Enorme!

    • Raul Rosso

      ¡Gracias! Siempre me lo he pasado mejor ideando mecánicas con recursos limitados que con todo el potencial del mundo. Y siento estar promoviendo esto de «12 meses, 12 filias». Así no se puede vivir 🙂

Deja un comentario

© 2024 Metalúdica

Tema por Anders Noren