#GameDevSimple: Una lista de herramientas para hacer juegos

Este artículo surgió inicialmente como un hilo en Twitter, pero dado que la información útil en Twitter tiende a perderse, creo que es mejor traer este hilo al blog en forma de artículo.

El desarrollo de videojuegos es una actividad que tiene fama (justificadamente) de ser compleja. Sin embargo, día a día surgen herramientas que permiten hacer juegos simples. Estas herramientas lo logran aplicando restricciones que obligan a pensar en cómo usar la herramienta efectivamente.

Este artículo es un listado incompleto de las herramientas que he logrado descubrir (o que me han mencionado) hasta ahora.

Antes de comenzar a reseñarlas, vale la pena destacar que para poder aprovechar estas herramientas, tanto como desarrollador como jugador, tenemos que pensar de manera muy distinta a los videojuegos de última generación. No estamos hablando de videojuegos 3D, de última generación. Hablamos de herramientas que cautivan a la audiencia a través de su narrativa o temática, con la mecánica pasando a un segundo lugar.

Con estas expectativas, pasemos a las reseñas.

Bitsy

Screenshot de Bitsy

Bitsy (gratuito, web) es la herramienta que inspiró esta lista. Bitsy ofrece un editor con un mapa 2D, cuyos bloques son solo de 2 colores. El personaje que controlas y los elementos con los que interactúas son de otro color, para un gran total de 3 colores.

La fortaleza de Bitsy está en su sistema de diálogos, que es completamente visual y que permite un alto grado de control acerca de cómo fluye la conversación y del aspecto del texto.

A la hora de lanzar el juego, la herramienta permite descargar un archivo HTML, que se puede publicar en cualquier servidor web. itch.io un destino muy popular para estos juegos.

Bitsy ha permitido a decenas de personas sacar sus propias historias, y es un proyecto sumamente popular, con proyectos muy interesantes. De aquí les dejo un juego que hice: Video Call.

Flickgame

Screenshot de Flickgame

Flickgame (gratuito, web) es una herramienta con muchísimas opiniones acerca de lo que es un juego. Es hecho por Increpare.

En Flickgame tienes 16 imágenes, cada una con una paleta de 16 colores. Tienes posibilidades simples de dibujar sobre estas imágenes con las herramientas que ofrece. Lo importante es que puedes establecer que al hacer click sobre un color, esto te lleva a otra imagen. Así, puedes elaborar una narrativa no lineal que te interese escribir.

Dejo como ejemplo When I Saw It, un juego que hice para el Global Game Jam 2018.

Flicksy

Screenshot de Flicksy

Flicksy (gratuito, web) es una herramienta que se sitúa entre Bitsy y Flickgame. Es hecho por candle.

La idea central de Flicksy es poder dibujar y ensamblar juegos basados en hipertexto gráfico. El sistema de diálogo es muy similar al de Bitsy (de ahí la inspiración).

La mejor manera de entender esta herramienta es viendo el tutorial o jugando un juego completo hecho en Flicksy.

InkleWriter y Twine

Screenshot de InkleWriter

Menciono InkleWriter y Twine en el mismo apartado porque ya he escrito sobre ficción interactiva. Ambas excelentes herramientas para aquellos que quieran publicar algo basado en texto.

PuzzleScript

Screenshot de PuzzleScript

PuzzleScript (gratuito, web) es una herramienta muy específica, y sus juegos se basan en el famoso Sokoban. Es mantenida por el buen Increpare, el mismo de Flickgame.

Se programa en ella usando un lenguaje que describe las reglas. Por ejemplo, si hay un bloque, y el personaje empuja el bloque de una dirección, el resultado es que tanto el personaje como el bloque se mueven en esa dirección.

Es a partir de estas reglas que se pueden escribir variantes de Sokoban que no se parecen en nada al juego original. El resultado se puede exportar a una página HTML, y este archivo puede hospedarse en cualquier servidor web.

El excelente puzzle Cosmic Express comenzó como un prototipo hecho en PuzzleScript. Alan Hazelden, su creador, ha tenido a bien publicar el prototipo completo en GitHub. Esto es código que puedes copiar y pegar en el editor de PuzzleScript y ver cómo funciona el juego.

PICO-8

Screenshot de la página de PICO-8

PICO-8 (pago, descarga) es una de las consolas de fantasía más populares actualmente. Existen suficientes de estas como para justificar un artículo separado, pero en general una consola de fantasía es una herramienta programable que tiene restricciones artificialmente limitadas, con el objetivo de enfocarse hacia la creatividad que impulsan estas restricciones. Sin embargo, PICO-8 corre en PC, Linux y Mac como cualquier otro programa.

En el caso de PICO-8, la pantalla es de 128×128 pixeles, y solo 16 colores de una paleta variada. PICO-8 trae todas las herramientas para escribir código (en Lua), música y sprites en un solo lugar. El resultado se puede exportar en una imagen .PNG que se puede compartir, pero también se puede exportar a HTML. Esto permite publicar tu juego para navegadores.

PICO-8 se ha utilizado en proyectos sumamente interesantes, y es increíble lo que se ha logrado con esta herramienta, incluyendo una versión de DOOM llamada POOM.

Otro uso maravilloso que tiene son los llamados #tweetcarts, donde la gente trata de escribir programas gráficos que quepan en un tweet. Esto es simple de hacer gracias a la capacidad que tiene PICO de grabar GIFs.

LIKO-12

Presentación de LIKO-12

LIKO-12 es una consola de fantasía libre inspirada en PICO-8. La pantalla que ofrece es de 192×128, y usa Lua como lenguaje para programar, aunque la librería es ligeramente diferente a la de PICO-8. Tampoco cuenta con la habilidad para exportar a páginas web como PICO-8, pero ofrece el código fuente completo, y es posible colaborar con su desarrollo.

Esta consola también promete ofrecer todas las herramientas necesarias para hacer gráficos y música, aunque su cumplimiento ha sido más lento debido a que es una sola persona manteniendo este programa. Rami Sabbagh es su creador y el que lo sigue manteniendo, y suele ser muy diligente con la comunidad, respondiendo cuando puede.

De LIKO-12 les dejo Sapper, un clon de Frogger que hice. LIKO, por cierto, también permite grabar GIFs fácilmente.

SCRIPT-8

GIF animado demostrativo de SCRIPT-8

SCRIPT-8 es una consola de fantasía, al igual que las otras dos herramientas que he mencionado. Esta está hecha completamente para el navegador, y utiliza Javascript para programar.

Esta herramienta está inspirada en PICO-8 y en las ideas de Bret Victor acerca de inventar sobre principios, una charla excelente que recomiendo ver. Así, esta consola tiene un editor de código que permite al mismo tiempo visualizar los cambios que se hacen inmediatamente. También ofrece una línea de tiempo para visualizar esos cambios en el tiempo.

La propia página tiene buenos ejemplos seleccionando el apartado SHELF.

LÖVE

Screenshot de la página de LÖVE

LÖVE (gratuito, descarga) es un framework con el que se pueden hacer juegos en 2D con el lenguaje de programación Lua. Los juegos se pueden sacar para Windows, Mac, Linux, Android y iOS.

La promesa de Lua es la de un lenguaje flexible y simple de entender. A diferencia de PICO-8 o LIKO-12, no hay restricciones de resolución o de tamaño del programa, por lo que se pueden hacer juegos más complejos.

Hay que considerar también que aunque los 3 comparten el mismo lenguaje de programación, sus librerías son distintas, por lo que el código que escribas en una herramienta no es completamente portable a otra.

Dejo como ejemplo Labyrinth of Legendary Loot, un juego hecho con este framework.

Ren’Py

Screenshot del juego de ejemplo de RenPy

Ren’Py (gratuito, descarga) es una herramienta orientada a producir novelas visuales. La novela visual es un género sumamente popular en Japón, y suelen seguir la estructura de una conversación mantenida con un personaje en pantalla, tal como se ve en el screenshot.

La idea de Ren’Py es ofrecer una herramienta y un lenguaje para escribir los diálogos, controlar lo que se ve en pantalla y la apariencia del texto y, si es necesario, escribir la lógica del juego. Si tienes experiencia con Python, Ren’Py te puede parecer familiar. El resultado se exporta en un ejecutable para Windows, Mac, Linux, y opcionalmente Android y iOS. Ren’Py también permite exportar para la web.

Ren’Py tiene un listado de juegos que puedes consultar para tener una idea de lo que se puede hacer.

Monogatari

Screenshot de Warm Marble

Monogatari (gratuito, web) es una herramienta orientada a producir novelas visuales. A diferencia de Ren’Py, Monogatari es esencialmente una página web, y el resultado se hospeda en una página web. En Monogatari hay que editar páginas web para lograr resultados.

Monogatari tiene documentación, la cual incluye instrucciones para establecer el ambiente de desarrollo. Si lo tuyo son novelas visuales, y además quieres que se puedan jugar en el navegador, Monogatari es una buena opción.

Aquí dejo como ejemplo Warm Marble, una novela visual donde tienes una cita con Bruce Lee.

Playscii

Screenshot de Playscii

Debo ser honesto y mencionar que Playscii (gratuito, descarga) es una de mis herramientas favoritas de todos los tiempos. Es hecha por JP LeBreton.

Es principalmente un editor de imágenes. Ofrece una paleta de colores personalizable (y trae presets nostálgicos), y una paleta de caracteres. Y uno dibuja usando esa paleta de caracteres. Los presets de caracteres incluyen varios conjuntos famosos, como los de MS-DOS, los de la BBC Micro, la Commodore 64, etc. etc.

Como editor se puede aprender a usar fácilmente y una vez que lo conoces las posibilidades son inmensas.

Otra funcionalidad (que no he explorado) de Playscii es el modo juego, en el que es posible elaborar juegos escritos en Python que usan las imágenes que editas en Playscii.

Les dejo una de las ilustraciones que he hecho con Playscii. Me sigo divirtiendo bastante con esta herramienta.

Ilustración hecha por Ciro para el Drawtober 2020

Kenney y el PROCJAM

Screenshot de la página Kenney.nlMenciono a Kenney en esta lista como una página que se ha dedicado a sacar packs de recursos 2D y 3D gratuitos. Esta página es un buen punto de partida para tener arte para prototipos, o incluso juegos comerciales, pues ellos lo permiten.

Por otro lado, menciono la sección de arte del PROCJAM. El PROCJAM es un jam orientado a la generación procedimental (o procedural generation en inglés). El evento ha podido financiar la producción de recursos para poder usar gratuitamente durante el jam u otro objetivo.

MagicaVoxel

Screenshot de Magicavoxel

MagicaVoxel (gratuito, descarga) es una herramienta para editar modelos 3D basados en voxeles. Piensa que son como los pixeles, pero en 3D. Es mantenido por ephtracy.

MagicaVoxel puede en principio parecer sencillo, pero las ilustraciones que he visto hechas con esta herramienta nunca dejan de sorprenderme con su calidad. La herramienta constantemente mejora su sistema de rendering, lo que le permite ofrecer cosas como materiales traslúcidos, iluminación muy convincente, y mucho más.

SpriteStack

Animación exportada de SpriteStack

SpriteStack (pago, web) es una herramienta para construir modelos 3D basado en voxeles, aunque su aproximación se parece más a editar una pila de imágenes (de ahí el nombre sprite stack). Visualmente tiene muchas ayudas para poder razonar la construcción de los modelos, y es una herramienta bastante competente. Su creador lo ha estado manteniendo activamente, y es posible exportar e importar modelos hechos con otras herramientas.

También es posible publicar tus modelos a la galería de la página. El barco que aparece anteriormente es un modelo de esta galería y la animación fue exportada con la herramienta.

Chiptone

Screenshot de Chiptone

La muerte de Flash nos dejó sin una de las mejores herramientas para producir sonidos rápidamente, as3sfxr. Así que la misma gente hizo otra herramienta similar, que corre en el navegador. Esto es Chiptone (paga-lo-que-quieras/gratuito, web).

Chiptone es una herramienta más completa que as3sfxr, ya que ofrece mayor control del sintetizador de sonido. Los desarrolladores prometen más funcionalidades, como un sampler y un secuenciador, pero por ahora, esto es lo que hay. Y lo que hay es muy bueno para hacer sonidos rápidamente y que se entienden inmediatamente.

Beepbox

Screenshot de Beepbox

Beepbox (gratuito, web) es un secuenciador de música. Ofrece algunas facilidades para producir música que suene agradable.

Una de las características que más me gusta de Beepbox es que es posible compartir tus composiciones a través del enlace que genera la página. Si compartes el enlace completo, cualquier otra persona puede escuchar esa canción.

¿Algo más?

Diversas herramientas salen cada día, y esta no es una lista exhaustiva. No soy tampoco el primero que hace esta lista, así que dejo dos enlaces a la página de Natalie Lawhead, que ha listado otras herramientas interesantes.

15 años de El Chigüire Literario

El 8 de enero de 2006 publiqué el primer artículo de este blog, hace 3 lustros. El Chigüire Literario era en ese momento una forma de escribir sobre videojuegos y desarrollo de videojuegos, y alcanzar a otras personas que pudiesen estar interesadas en ello. El nombre proviene de un animal propio de Venezuela y otras regiones (donde se conoce como capibara), más un adjetivo que puse como aspiración al medio sobre el cual estaba escribiendo.

Mi vida cambió inmensamente cuando me fui de Venezuela en 2013. Progresivamente, lo que era mi hobby se transformó realmente en mi profesión. Y eso es un cambio que toma tiempo procesar. Yo ya había hablado con amigos que habían hecho esta transición, y en aquél entonces me costaba creer que fuese tan dificil.

Pero justamente así de dificil fue. Mis participaciones en el Global Game Jam dejaron de ser videojuegos para convertirse en juegos físicos (1, 2, 3). Y mis más recientes esfuerzos relacionados al tema han sido en herramientas simples que permitan a cualquier persona desarrollar un juego. Esto lo he hecho a través de un hilo de Twitter vivo llamado #Gamedevsimple (que debería tener casa aquí). Mis lanzamientos más recientes han sido bots de Twitter (@ImaginaryTubes, Chance A: Me, @wilfribotvargas, @ConstitubotVe99). Sigo publicando cosas en mi cuenta de itch.io de vez en cuando, pero han sido mayormente usando las herramientas que mencioné anteriormente. Mi último post anual fue en 2017, hace 4 años. Tuve que buscar un nuevo hobby, y hacer música es lo que me ha salvado la vida en muchos aspectos.

Es pertinente aclarar que trabajar en la industria no es la única razón por la que dejé de hacer juegos al ritmo como lo hacía antes. Hace pocos días el soporte a Adobe Flash se terminó oficialmente. Hacer juegos para navegador, aunque sigue siendo factible, es ahora una actividad mucho más difícil en un panorama donde hay que desarrollar para dispositivos móviles. No es lo mismo desarrollar para una plataforma que para seis, plataformas que pueden cambiar en cualquier momento y echar a perder tu proyecto. Disfruté inmensamente la época de Flash, y saber Flash no sólo me permitió divertirme inmensamente, fue lo que me permitió ganarme una vida, y hasta irme de Venezuela. Así de importante fue esta plataforma para mí. Pero con el panorama actual, desarrollar para navegadores más allá de proyectos sencillos no me parece un uso efectivo de mi tiempo.

Aún así, me siento con la satisfacción de ayudar a aquellos que han querido entrar en la industria, o tener la experiencia de desarrollar videojuegos. Recibir una nota, por más pequeña que sea, de aquellos que hoy en día trabajan en la industria o inician un proyecto, ya sea porque les enseñé algún conocimiento o porque hablamos en el momento adecuado, me ha conmovido inmensamente. Están en mi pared mental donde me recuerdan que vale la pena seguir insistiendo. El Caracas Game Jam ha estado en excelentes y diversas manos, y ha seguido dando resultados en forma de juegos y de desarrolladores de videojuegos. No puedo sino agradecer a aquellos que tomaron la tarea de organizar un evento que sigue influenciando a muchas personas.

El mundo ha cambiado radicalmente. La gente jóven o la gente que está comenzando de cero se le ha dado una mano dificil de jugar. Confío en el ingenio humano para no sólo salir de esta situación, sino también para mantenernos unidos, sanos y salvos, con una calidad de vida con la que podamos seguir adelante. Confío en que la creatividad humana saldrá con cosas que no hubiésemos imaginado jamás, como ya lo he visto a lo largo de 2020, que mejorará nuestras vidas o, al menos, nos hará ver la vida con una perspectiva diferente.

Gracias Flash. Gracias a todos aquellos que de una u otra forma han formado parte de mi vida. Mucho éxito para los que me leen. Sigamos adelante.

Lilibeth’s Parade: un postmortem y una guía para juegos físicos

El pasado Global Game Jam 2017 fue un buen jam para mí y para Yole, con quien participé. Los game jams son una ocasión propicia para ensayar nuevas ideas, esto es algo fundamental en el evento, y nosotros lo aplicamos sobre el concepto propio del videojuego.


Revelando el tema del GGJ 2017

El tema del GGJ 2017 fue Waves (ondas) pero decidimos tomar otro significado de la palabra, el verbo saludar (to wave). Así, nos inspiramos en el icónico saludo de la Reina Isabel de Inglaterra como mecánica principal de juego. Dos jugadores deben saludar en una forma específica, compitiendo entre ellos.


La Reina de Inglaterra saluda

Habíamos establecido previo al inicio del evento que íbamos a hacer un juego con Arduinos y un Raspberry Pi. Esto es un cambio sustancial con respecto a años anteriores. Ya con Yole había hecho un juego de mesa y un videojuego. Anteriormente, fui colaborador en su proyecto final como estudiante que combinó fotografía, escultura y tecnología, usando ambas tecnologías. Pero en esta ocasión la idea implicaba usar estos componentes a una escala que no habíamos intentado antes.

Ya llevábamos entonces la idea al evento: no solamente reemplazar la entrada, el control, sino también la salida, la pantalla. Teníamos la idea de hacer un juego «autocontenido», algo que pudiésemos mostrar como un modelo de cartón con partes movibles, que no mostrase partes de computadora obvias. No lo pudimos lograr del todo: el juego aún requiere una computadora con mayor capacidad que el Raspberry Pi, pero la idea está ahí y se puede abordar para otro proyecto.

Al finalizar el evento presentamos «Lilibeth’s Parade», un juego electrónico para dos jugadores. En un modelo de cartón de la torre del palacio de Westminster están dos carros, y cada jugador debe saludar como la Reina de Inglaterra para avanzar su carro, ganando el primero que llegue a la torre. A continuación un video del primer gameplay, y aquí el repositorio en GitHub del código tal cual lo entregamos.


Demostración de Lilibeth’s Parade

Nuestro juego causó mucha curiosidad al finalizar el jam. Fuimos prácticamente el único equipo que utilizó una combinación de computación y electrónica, y muchas de las preguntas iban orientadas hacia esa parte.

Creo que esta reacción valida nuestra idea de que hay oportunidades para hacer juegos que no impliquen interactuar con una pantalla o con un control usual de videojuegos (teclado, mouse o controlador).

Por esto, en el resto del artículo estaré explicando a manera introductoria cómo funciona «Lilibeth’s Parade» y el proceso de cómo llegamos hasta este concepto.

Computación física para todos

Algunos de ustedes estarán leyendo los términos Arduino o Raspberry Pi por primera vez, o probablemente no le vean sentido en un blog de desarrollo de videojuegos. A continuación daré una introducción a la computación física, y explicar un poco de dónde viene todo esto. Si estás familiarizado con el campo, puedes saltar a la siguiente sección.

La computación física es un campo en el que la computación y la electrónica se reencuentran. A través de tableros electrónicos programables se pueden hacer prototipos de circuitos electrónicos muy rápidamente. El tablero se conecta a la computadora a través de un cable USB y se programa con lenguaje C. Los programas se escriben, se compilan, y se descargan al tablero. Después de haber descargado el código, el tablero se puede desconectar de la computadora y sólo requiere electricidad para funcionar.

Estos tableros consumen muy poca energía comparado con una computadora, pudiendo funcionar por horas con una batería de 9 voltios. Son dispositivos relativamente sencillos y limitados, por lo que no corren un sistema operativo completo, pero esto los hace funcionar muchísimo más rápido que una computadora.

Los tableros disponen de conexiones para componentes electrónicos, llamados pines. Se pueden conectar componentes electrónicos a estos pines, y el tablero tiene la capacidad de «leer» y «escribir» voltajes a estos pines. Al leer un valor de un pin, se convierte un impulso eléctrico a un número que el código puede entender y procesar. Al escribir un valor se puede operar sobre un componente electrónico, por ejemplo, encender una luz, mover un motor. Los valores pueden ser literalmente ceros y unos (o bajo y alto voltaje), o puede ser un valor análogo.

La gran ventaja que tienen los tableros electrónicos es que existen muchos componentes electrónicos que se pueden conectar y usar instantáneamente. Los más complejos, como pantallas, servos, luces, traen librerías que permiten usarlos muy fácilmente; usualmente con una llamada para inicializar el componente, y otra llamada para llevarlo a algún estado. Otros componentes traducen alguna condición del ambiente en impulsos eléctricos, como sensores de luz, de distancia, temperatura, sonido, humedad, lo que amplía el campo de lo que puede hacer una computadora. Existen otros componentes que permiten al tablero comunicarse con otros dispositivos, a través de una red con cables o inalámbrica o a través de transmisión de radio.

La computación física así permite usar cómputos para una variedad de campos: desde las artes hasta cosas más prácticas, como botánica, o proyectos de automatización casera. Siendo este un sitio de videojuegos, nos orientaremos a cómo aplicar computación física para esto, pero que quede claro que existe muchísima gente trabajando en computación física que no está haciendo videojuegos (agarra la pista: mira lo que están haciendo en otros campos).

A continuación explicaremos tres componentes que utilizamos durante el jam, lo que dará la base para explicar el funcionamiento del juego al final del artículo.

Arduino

Una marca reconocida de tableros es Arduino, y es casi el nombre genérico que se ha adoptado en la comunidad para los tableros. Su diseño es open source, y otros fabricantes han desarrollado tableros «compatibles con Arduino», lo que te permite conectarlo y usarlo con la computadora casi de la misma manera. Existen muchos modelos, cada uno con formas y disposiciones de pines diferentes para necesidades diferentes. Algunos de ellos, como el Gemma de Adafruit, tienen forma de botón y están hechos para coserse en la ropa con un hilo conductor, combinando moda y electrónica.

Los tableros Arduino se conectan con la computadora a través de un cable USB. En la computadora instalas el ambiente de desarrollo de Arduino que tiene la capacidad de compilar el código que escribas y descargarlo al tablero. El cable también permite comunicarse con la computadora a través de la emulación de un puerto serial. Esto es necesario para que el Arduino pueda comunicarse con la computadora, y viceversa, aunque algunos tableros no tienen esta capacidad. Así, puedes hacer circuitos que lean algún dato del ambiente y lo puedan pasar a la computadora para un proceso más complejo.

Los tableros Arduino también cuentan con una gama amplia de accesorios que se suelen llamar shields (escudos). Los shields ofrecen funcionalidades al tablero que se complementan con una librería de código para hacerlos funcionar. Ejemplos: una pantalla con touch screen, conexión por cable ethernet, wi-fi, u ondas de radio, higrómetros, termómetros, sensores de distancia, etc. Uno mismo puede elaborar circuitos para conectar estos componentes, sólo que el shield ofrece la ventaja de ser un producto compacto, muy fácil de conectar al tablero.


Ejemplo del shield de pantalla touch conectado a un Arduino Uno. El Arduino corre un programa que permite dibujar.

Raspberry Pi

El Raspberry Pi es uno de los proyectos de educación en computación más exitosos de los últimos años. Se describe a sí mismo como la computadora del tamaño de una tarjeta de crédito de 35 USD.

Existen varios modelos del Pi, pero en general posee un procesador ARM como el de los dispositivos smarthphone, una tarjeta gráfica que tiene capacidad de mostrar video de alta resolución a una velocidad razonable, un puerto HDMI, puerto para sonido, puerto de red, wifi, y puertos USB. Posee también conexiones para dispositivos propios del Pi, como una pantalla touch y una cámara, y posee también un puerto con pines para conectar componentes electrónicos, llamado puerto GPIO. Los pines funcionan a un voltaje diferente del Arduino, los pines del Pi corren a 3 voltios, y los del Arduino a 5 voltios, cosa que hay que tener en cuenta a la hora de conectar

El Raspberry Pi no tiene disco duro, emplea un puerto para tarjetas microSD para almacenamiento. El Pi tiene la capacidad de correr el sistema operativo Linux, y la distribución más usual es una variantes de Debian llamada Raspbian. Esta distribución contiene casi todo lo necesario para escribir, compilar y correr código en el Pi, con una variedad de lenguajes de programación: Python, C++ y otros más didácticos.


Un Raspberry Pi en funcionamiento, conectado a una TV.

Leap Motion

Aparto el Leap Motion de la categoría que hemos estado hablando, pero igual debo hacerle mención pues es un componente esencial de «Lilibeth’s Parade». El Leap Motion es un dispositivo que es capaz de capturar y estructurar manos en tiempo real. El programador luego puede crear toda clase de gestos con una o dos manos, ya que lo que obtiene son vectores en el espacio. Por ejemplo, es posible saber la posición de los dedos con respecto a la mano, el vector normal de la palma, si es una mano derecha o una mano izquierda, entre otros datos. Para esto, el Leap Motion tiene dos cámaras infrarrojas de alcance limitado, y sintetizan una estructura 3D de la o las manos.

La gente que produce el Leap Motion ha especificado hasta ahora que el Raspberry Pi no tiene la suficiente potencia para correr su software, por lo que no es una plataforma oficialmente soportada.


Aplicación de ejemplo que muestra lo que ve el Leap Motion y una representación de la mano reconstruida

Cómo funciona Lilibeth’s Parade

Modelo

Lilibeth’s Parade emplea un modelo de cartón, con algunas partes hechas en madera balsa. El modelo se construyó a partir de una caja de cartón, la cual se modificó para hacer la base para la torre y el arco, que representa un puente hacia la torre. Los carros están hechos a partir de madera balsa, con una base que los conecta a los servos. Cuando los servos giran hacia cierto ángulo, la base mueve el carro hasta la posición deseada.


Time lapse de la construcción

La torre del palacio tiene huecos en su parte frontal, donde van montados los neopixels. Los neopixels son unos componentes LED hechos por Adafruit, muy convenientes para trabajar con el Arduino, que pueden mostrar una amplia gama de colores a partir del rojo, verde y azul. Estos se pueden conectar en serie, y cada uno posee cuatro pines, dos que le permiten conectarse a una fuente de electricidad, y los otros dos que reciben los datos para desplegar los colores. Se puede elaborar una cadena de neopixels, y al final se usa un solo pin del tablero para comunicarse con toda la cadena. Adafruit provee sin costo extra una librería que permite comunicarse con una cadena de neopixels a partir de llamadas simples.

La torre del palacio también tiene un hueco circular en el tope donde se monta la pantalla.

Estructura

La salida de Lilibeth’s Parade consiste en una PC conectada a dos tableros Arduino. Uno de los tablero tiene una pantalla conectada, y otro tablero establece la posición de los servos y el estado de las dos cadenas de neopixels. Ambos tableros reciben la información de la PC a la que están conectados. La PC también tiene conectado el Leap Motion. La PC corre un programa escrito en Processing que une todo esto. Consideramos utilizar un Raspberry Pi con una cámara, y un script escrito en Python, el cual mediante OpenCV tuviese la capacidad de reconocer una mano en tiempo real.

Processing es un lenguaje, una librería y un ambiente de código basados en Java, hecho con el fin específico de ofrecer un ambiente grato y didáctico para artistas. El programa se encarga también de leer el estado del Leap Motion, a través de una de las tantas librerías que hay para Processing que permiten usar dispositivos desde Processing.

Pantalla

Un tablero Arduino tiene un shield de pantalla, el cual muestra unas instrucciones a los jugadores. Este tablero contiene algunas imágenes, y el código es una máquina de estados que muestra estas imágenes dependiendo del estado del juego, el cual se comunica desde la PC con un número. Por ejemplo, un primer estado muestra dos manos claras, indicando que los jugadores deben poner su mano enfrente del juego para que la mano sea reconocida. Los siguientes dos estados muestran unas manos opacas, comunicándole al jugador que sus respectivas manos han sido reconocidas.

Algunos de estos estados tienen unas animaciones burdas hechas superponiendo imágenes en la pantalla. El Arduino tiene limitaciones con respecto a la velocidad como puede comunicar los cambios a la pantalla, y la velocidad para dibujar la imagen es de casi un segundo, por lo que no se puede hacer algo extremadamente sofisticado. La solución para esto fue emplear imágenes lo más pequeña posibles, para que se dibujasen rápidamente, y que se pudiese entender el significado de la animación al mismo tiempo.

Servos

Los servos son componentes muy sencillos. Pueden rotar a un ángulo específico ordenado por un tablero, y existe una librería que hace esto de manera simple. Al emplear servos, la dificultad consiste en poder traducir el ángulo al que se desea rotar el servo a la realidad, de manera que el modelo funcione bien. Calibrarlo, pues. Lleva tiempo poder calibrar el modelo de tal manera que la base de los carros no pegue con otras partes del modelo.


Servos al momento de la prueba

OpenCV

La entrada de Lilibeth’s Parade inicialmente consistió en un Raspberry Pi que tuviese instalado OpenCV, con un script de Python que controlase tanto esto como la comunicación con los Arduinos. OpenCV es una librería que ofrece un conjunto de rutinas conocidas para «mejorar» imágenes, ya sea tomadas de un archivo, de un video o de una cámara, facilitando la construcción de estructuras sobre las que se puede razonar en código. En el caso de este juego, nos propusimos hacer reconocimiento del color de la piel para detectar la forma de una mano.

La instalación de OpenCV en el Raspberry Pi requiere compilar código en C++, lo cual constituyó una gran inversión de tiempo para lo limitado del jam. El Raspberry Pi tiene la capacidad de compilar código, pero suele tomar mucho tiempo debido a la limitación de velocidad de procesamiento. El Raspberry Pi puede tomar horas en completar la compilación. Disponemos de un Raspberry Pi 3, el cual tiene 4 núcleos, los cuales se pueden utilizar simultáneamente. Esto lo intentamos, pero el Gigabyte de memoria RAM no fue suficiente, por lo que entró en swap, y además teniendo solo 8 GB en la memoria microSD que utilizamos toda la computadora se detuvo, por lo que tuvimos que reiniciar. Sin embargo, se logró compilar la librería y los bindings a Python.

Utilizamos la guía de Pyimagesearch para hacer la instalación, y fue sumamente efectiva, por lo que la recomiendo para cualquier proyecto que quieras hacer con OpenCV y Raspberry Pi.

Al final, la detección de piel depende mucho de las condiciones de iluminación del lugar, y era un cuanto inconstante con respecto al reconocimiento de la forma de la mano. Habiendo empleado casi 20 horas desde el inicio del evento, y sin haber trabajado hasta ese momento con el código del Arduino, concluimos que esta vía no nos iba a resultar en un juego a la hora de entregar.

Sin embargo, quedó como un ejercicio interesante, y una introducción al uso de OpenCV. El Raspberry Pi junto con la Raspberry Pi Camera posee suficiente desempeño para poder hacer reconocimiento visual en tiempo real. Con la posibilidad de poder obtener la imagen raw de la cámara, sin pasar por compresión JPEG, se tiene una velocidad de al menos 15FPS, lo que hace al reconocimiento factible.


OpenCV + Raspberry Pi + Raspberry Pi Camera

Leap Motion

El Leap Motion fue muy sencillo de configurar, y posee una variedad de software que permite explorar la percepción del dispositivo, y las estructuras de datos que forma a partir del reconocimiento de la mano. Processing facilita la instalación de una librería que sirve de binding al manejador del Leap Motion.

El programador lo que ve son vectores de la mano cuyo origen está en el centro del Leap Motion, por lo que se hace sencillo el razonamiento geométrico de lo que haya que hacer. En el caso específico del juego, detectamos el rango de rotación de la muñeca (máximo y mínimo), y la forma de avanzar en el juego es moviendo la mano de tal manera que la rotación pase por el medio de ese rango. Así que tiene sentido moverla lo menos posible, aunque el gesto de hacerlo es gracioso.

Uno de los particularidades de la librería es que deja al programador con la responsabilidad de identificar la mano que reconoce. Esto quiere decir, la librería ofrece información sobre lo que reconoce en cada frame del sketch de Processing, y sólo es válida para ese frame. Uno puede identificar una mano a través de los frames debido a que tiene un número identificador que es el mismo mientras el Leap Motion reconozca la mano. Cuando la mano sale de la vista del Leap Motion y entra nuevamente, en el frame aparece una mano con un identificador diferente.

No nos dio tiempo de estabilizar el reconocimiento de las manos, por lo que tuvimos que pedirles a los jugadores que no sacaran la mano una vez comenzaran a jugar. De continuar con el proyecto este debería ser una de las primeras tareas a completar.

Coda

«Lilibeth’s Parade» fue un proyecto surgido de la necesidad de hacer algo diferente a un videojuego tradicional, en un ambiente como el de un game jam que está tan orientado al desarrollo de videojuegos. Existen otros eventos llamados hackathones, que tienen una filosofía similar, pero la mayoría de estos eventos suelen ser de naturaleza competitiva. La filosofía de colaboración y experimentación del Global Game Jam es uno de los aspectos más importantes y mejor defendidos desde sus inicios, y bajo ese espíritu esta clase de ideas afloran. Para mi fue una excelente experiencia con computación física, y me anima a seguir explorando las posibilidades de este campo.

11 años de El Chigüire Literario: el artículo anual

Hace 11 años comencé a escribir sobre videojuegos en Venezuela, en ese entonces como una manera de escribir sobre lo que me gustaba: no solamente escribir sobre juegos, sino escribir sobre desarrollo de juegos.

En ese entonces tuve que hacer una decisión que sabía que iba a tener impacto en el blog para siempre: escribir en inglés para poder contactar a otros desarrolladores alrededor del mundo, o escribir en español para poder contactar a otros desarrolladores en el país (el mío o cualquier otro hispanohablante).

Esta decisión la tomé considerando entre compartir experiencias entre desarrolladores que vivían en otros lados, probablemente en una situación muy distinta a la mía, o compartir entre desarrolladores que vivimos en el mismo espacio geográfico, tal vez con realidades similares. Aún con la capacidad para poder escribir en ambos idiomas, traducir es escribir dos veces. Esto es algo muy difícil y costoso en tiempo, por lo que me fui por una sola opción. Por las conversaciones y las oportunidades que he tenido a lo largo del tiempo, creo que ha sido la decisión correcta.

El blog fue en sus inicios un diario de viaje y un intento de formalizar el pensamiento sobre videojuegos. No solamente se trataba de encontrar o escribir tutoriales: era también sobre poder reseñar juegos, pensar sobre ellos, y tomar lecciones para aplicar en futuros juegos. Pero por mucho que uno piense y analice críticamente a los videojuegos, hacerlos es un asunto completamente diferente. Es un proceso constante, que evoluciona a la par con los juegos que uno hace. Me tomó tiempo mejorar en muchos aspectos la práctica de hacer videojuegos. Y me tomó aún mucho más tiempo tomar en serio mis propios resultados.

A lo largo de estos años, ustedes han tomado interés en mi trabajo, algunos de ustedes han tomado inspiración en él para hacer sus carreras. Esto me alegra inmensamente, y me hace pensar que hacerlo vale la pena. Solo espero que en algún momento tengan la posibilidad de que ustedes puedan hacerlo con su gente, con los nuevos que vendrán más adelante.

Se me hace dificil escribir en en blog. No por falta de cosas que he estado haciendo. Más bien lo contrario: escribir requiere establecer un bloque de tiempo, y es una actividad solitaria. Sin embargo, creo que he podido responder a la mayoría que me ha escrito por mi correo, y mantengo al menos el compromiso personal de continuar escribiendo, aunque no siempre sea a través del blog.

Desde el 8 de enero de 2006 llevo 845 entradas publicadas. Espero aprovechar la oportunidad para tener más. Deseo lo mejor para todos lo que me leen por acá.

10 años de El Chigüire Literario

«Los días son largos, pero las décadas son cortas» — Sam Altman

««Este es un mundo como otro cualquiera»» — Luis Mateo Díez

El 8 de enero de 2006, hace exactamente 10 años, publiqué un post en un blog de Blogspot donde comencé a hablar sobre videojuegos. A medida que escribo estas palabras, pienso en la frase de Sam Altman. Pienso también en qué son 10 años como medida de tiempo, en lo que estaré viviendo dentro de 10 años, y un balance sobre lo que ha pasado. De eso hablaré hoy.

Diferentes diseños del blog
El blog a lo largo del tiempo

Perspectiva

10 años puede ser una medida de tiempo que pone muchas cosas en perspectiva.

Cuando publiqué por primera vez y hablé de Quake (que para la fecha ya tenía 10 años), no existían los smartphones como los conocemos ahora.

Steam ya existía pero estaba apenas naciendo como plataforma de ventas digitales.

El hardware de las consolas no se parecía tanto al de la PC como ahora y, en consecuencia, los procesos de desarrollo eran muy diferentes entre sí en comparación con hoy en día. Hoy en día algunos fabricantes ofrecen sus kits de desarrollo para mucha más gente, y en consecuencia hay una mayor variedad en videojuegos.

En 2006 estábamos pasando de usar MSN a usar Google Talk. Ninguno de los dos existe actualmente, al menos no en su forma original.

En MSN me gustaba poder extender el nombre que mostraba a mis contactos para poner alguna frase u ocurrencia del momento. En esos días quería hacer un archivo automatizado de las frases que ponía en «mi nick de MSN». En 2007 ese archivo se materializó en Twitter.

En 10 años co-fundé una empresa que continúa funcionando hoy, me di una segunda oportunidad de estudiar, y estoy actualmente trabajando en la industria del videojuego (más sobre esto más adelante). Nada de esto podía ver yo en 2006.

En 2006 existía una extensa comunidad de blogueros. Ellos fueron los que inicialmente me impulsaron a abrir un blog. Sigo manteniendo contacto con algunos de ellos, y inclusive me casé con alguien de la comunidad y me cambió la vida 🙂 . Sin embargo, la popularidad de los blogs decayó a medida que otras redes sociales tomaron nuestras interacciones.

Hoy

Escribo los siguientes párrafos con el objetivo de poderlos leer más adelante, y poder compararlos, espero, dentro de 10 años.

Actualmente tenemos un mercado móvil que pareciera que se come a sí mismo, con precios que sólo garantizan la supervivencia a los que están en el Top 5.

Tenemos un mercado para navegadores que cambió y que espera a que HTML5 sea una solución fácil de utilizar y que sea multiplataforma.

Las consolas se han abierto poco a poco a más desarrolladores, pero siguen siendo en general tímidos.

Finalmente tenemos un mercado para PC gigantesco, con las descargas digitales casi tan grandes como las ventas físicas, pero ante un estancamiento a nivel de contenido que nos obliga a todos los desarrolladores a replantear muchas cosas que damos por sentado.

El correo electrónico sigue siendo imbatible en la forma de comunicarnos por Internet. Slack ha acumulado muchísima popularidad como un chat y herramienta colaborativa. El streaming se ha popularizado cada vez más y es ahora una forma de transmitir conocimiento a muchas personas.

Nada de esto reemplaza tener una buena conversación y el contacto personal. Es importantísimo conseguir a las personas con la que compartes intereses en tu propia ciudad. Internet facilita este proceso, pero hay que saberlo utilizar para luego poder hablar cara a cara.

Extraño a mis padres y a mi familia, que están más lejos de lo que yo quisiera. Espero verlos muy pronto y más seguido.

Comunidad

En 10 años tuve la oportunidad de conectar con otros desarrolladores, y convencer a muchos más de que tenían en sus manos la posibilidad de crear algo desde cero.

Esta labor y, más importante aún, la curiosidad de ver si se podía hacer un game jam en Venezuela, me llevó a crear el Caracas Game Jam.

Cada enero desde 2009 se han dado cita desarrolladores noveles y experimentados, y todos los eneros termino completamente complacido de la calidad de los juegos que se hacen con los recursos que tienen los caraqueños y demás visitantes de otras ciudades, que se lanzan ese viaje sólo para estar en el evento.

Confieso que cada vez que se termina una edición, me entra un cierto miedo a no poder repetirlo el año siguiente debido al deterioro de las condiciones de vida de mucha gente en el país.

Este miedo se ha incrementado desde que me fui de la ciudad, pero ese miedo ha sido reemplazado por una satisfacción que nadie me puede quitar: la propia comunidad que creció con el Caracas Game Jam se ha encargado de organizar y llevar adelante hasta ahora dos ediciones.

Gracias al blog y al esfuerzo de estudiantes de la Universidad Católica Andrés Bello, di clases. La única vez donde me levantaba con el mayor de los gustos a las 4:45AM un día a la semana para dar clases. Conocí gente maravillosa y trabajadora. Espero haberlos inspirado, así como ellos me han inspirado.

Todo esto va más allá de lo que había esperado o había soñado en 2006 cuando esto comenzó.

Por lo tanto, no me queda más que decirles a todos ustedes, estudiantes, los organizadores y participantes del Caracas Game Jam: gracias. No tengo para ustedes sino el agradecimiento de querer formar parte de esto. Deseo que les dé el impulso para seguir adelante con sus propios emprendimientos.

Arte

Muchas veces esas buenas películas, buenas canciones o buenos juegos que disfrutamos llevan un mensaje implícito de que no vale la pena crear tu propio arte. Lo que consumes está en cierta forma tan bien hecho que no hace falta criticarle, más allá de algunos meros aspectos técnicos o superficiales.

Se piensa que la crítica es decir que algo está mal hecho, y por lo tanto el acto de criticar se convierte en una afrenta. A la afrenta se le responde visceralmente: «si me critican es porque me envidian», y se pierde una oportunidad fantástica para mejorar.

La crítica comienza cuando después de presenciar algo te preguntas: «¿qué tal si…?», y cuestionas lo que estás viendo, la idea que hay detrás de ello. Lo que se deja de decir es tan importante como lo que se dice. Otros mundos pueden existir, no limitemos nuestra imaginación a ser un mero reflejo de nuestra vida cotidiana.

Nuestra propia sociedad contribuye a la inaccesibilidad del arte, diciendo (y aquí voy a parafrasear a un querido profesor) que lo que tienes que decir no le interesa a nadie. Buena parte de la sociedad piensa que el arte es un lujo, algo que sólo los ricos pueden hacer y/o pueden pagar.

Pero el arte nos rodea, día a día, cada hora que estamos despiertos. Y podemos participar en ella. Y podemos participar en ella porque es lo que nos permite sentir empatía y que somos más parecidos de lo que aparentamos, aún cuando el mundo de hoy nos obliga a especializarnos. También nos permite desahogarnos, sentir que no somos perfectos, y eso es perfectamente válido.

En 2006 el subtítulo de este blog era «el videojuego es la nueva literatura, el MP3 es cultura». La literatura la define la RAE, entre otras cosas, como el «arte de la expresión verbal». ¿Qué se hace con la expresión verbal? Contar historias.

Contar historias es sólo una parte del arte. Hay gente que cuenta emociones, o cuenta impresiones. Pero contar historias es algo que siempre me ha gustado, aunque los juegos me han impulsado hacia analizar sistemas de reglas y ver cómo funcionan.

Contar historias es ofrecerte para que otros se sientan solidarios contigo. Cuando dos o más personas se unen con una idea en común, es cuando adquirimos la capacidad de crear un mundo propio. Entre grupos nos podemos llevar adelante para impulsarnos y tener una vida mejor.

Eso es lo que hace el arte. Y el arte comienza sincerándote con tus gustos.

El ejercicio para 2016 es, entonces, aprender a criticar, y aprender a disfrutar tus gustos.

Lo que viene

El Chigüire Literario para mí representa lo que ocurre cuando uno pone algo de sí para alguien, y encuentras respuesta de parte de ese alguien. Es una interacción que me nutre, y que espero nutra a los que me leen.

Esto no siempre ocurre con todo lo que haces, e incluso pueden haber períodos donde no pasa nada, períodos en los que uno, honestamente, se siente como el culo.

Sin embargo, todo esto pasa y uno trata de encontrarle una explicación, una narrativa. Seas profundamente religioso, o seas obstinadamente ateo, esto ocurre porque somos seres humanos.

Estamos hechos para ver patrones en la vida, y nuestros cerebros desean tanto ver esos patrones que a veces comienzan a ver cosas donde no hay. Esto no es malo, ni es bueno. Simplemente es así. Y mientras más conscientes seamos de eso, creo que seremos capaces de llevar una mejor vida.

En 10 años tuve la oportunidad de comenzar a trabajar en la industria del videojuego. He sido desarrollador de juegos desde cero, y ahora soy desarrollador de algo que es muchísimo más grande que un equipo pequeño, o yo solo.

El repertorio de habilidades técnicas es diferente, y a lo largo de estos años he tenido la oportunidad de aprender una parte de este repertorio.

Pero lo más importante sigue siendo el pensamiento crítico, la capacidad de resolver problemas, los que te vengan, y la capacidad de empatizar con otros y ver su punto de vista.

Ver hacia adelante es muy difícil. Siempre lo ha sido. Uno tiene que ir por la vida con una mezcla de optimismo y ansiedad, y a veces ni siquiera el optimismo. Creo en el agradecimiento como antídoto para esa sensación. A ti, por todo: gracias.

Revisa los posts de años anteriores: 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006.

La Ficción Interactiva y sus playas

elije

Una de mis inspiraciones en todo esto de hacer videojuegos es la serie «Elige tu propia aventura». Esta serie de libros no se leen de principio a fin, sino que comenzando desde la primera página, el libro te plantea una elección al final de cada segmento (que generalmente se extiende por una sola página). Dependiendo de la elección que hagas, el libro te instruye saltar a una página u otra.

Este formato es uno de los primeros que surgió cuando los videojuegos se popularizaron, y se llama Ficción Interactiva (o Interactive Fiction, en inglés). No hay casi nada nuevo en este formato, tan solo que las herramientas para escribir ficción interactiva se han simplificado muchísimo. El objetivo de este artículo es hacer una introducción al tema y sugerir una herramienta que puedes utilizar para crear tus propias historias.

Hace un par de meses me di la oportunidad de escribir una historia interactiva, se llama La Línea. Era algo que había querido hacer desde hace ya algún tiempo, y había escuchado una herramienta que permitía hacer esto fácilmente, en un formato muy simple de distribuir, páginas en HTML.

Uno podría ciertamente escribir la historia con HTML, pero esto implica concentrarse en los detalles del formato, cuando lo que hace falta realmente es concentrarse en los detalles de la historia que uno quiere contar. Lo ideal es tener una herramienta donde puedes escribir, y sin muchas vueltas poder establecer las partes que quieres que enlacen con otras. Si ya has tenido suficiente práctica con la herramienta, hasta podrías pensar en que quieres establecer algunas condiciones para ofrecer una opción (por ejemplo, digamos que quieres revisar toda una habitación antes de seguir adelante).

Lo bueno es que estas herramientas existen, y voy a listarlas a continuación. Eso sí, una buena práctica antes de comenzar a escribir es revisar y ver qué han hecho otras personas con estas herramientas. Este es un listado de sitios () donde puedes leer buena ficción interactiva:

Para escribir ficción interactiva:

  • Twine, esta es la herramienta que utilicé para La Línea, y hablaré un poco sobre ella más adelante. Tiene una versión que puedes usar en línea, por lo que puedes comenzar ahora mismo, incluso en un dispositivo móvil.
  • inklewriter, de la misma gente de Inkle. Tuve la oportunidad de probar un poco esta herramienta, y me pareció muchísimo más simple de utilizar que Twine, ya que tiene una interfaz mejor lograda para escribir y agregar opciones. Sin embargo, Twine ofrece un poco más de flexibilidad en comparación. Como es una página web, lo puedes utilizar en un dispositivo móvil.
  • Seltani, permite también la participación colectiva para escribir. Permite también un poco de código.
  • Inform, es un sistema de programación hecho para que los jugadores escriban instrucciones para avanzar en la historia.

Un poco sobre Twine

De todas estas opciones sólo he podido probar las dos primeras que mencioné, y en ambas me encontré con herramientas que insisten en salirse de tu camino a lo que es realmente importante: escribir una historia. Una ventaja de Twine es la posibilidad de descargarlo a la computadora y poderlo utilizar completamente fuera de línea, utilizando solamente un navegador moderno.

Para escribir una historia en Twine debes crear pasajes de texto, representados visualmente como recuadros), y luego enlazas los pasajes de texto con hiperenlaces, rodeándolos con doble corchete [[así]], muy al estilo Wikipedia

Lo otro interesante de Twine es la posibilidad de utilizar macros para hacer un mínimo de programación para la historia. Por ejemplo, podrías tener un contador para saber cuántas veces ha leído el jugador un cierto texto, almacenar el nombre de alguien y mostrarlo dentro del texto, mostrar variaciones de un mismo texto para que no se haga monótono. Lo importante del asunto es que no requiere algo por separado, lo puedes escribir ahí mismo junto a tu historia.

Espero que este artículo te anime a escribir historias. Y si tienes alguna hecha, puedes subirla a algún lugar al estilo neocities y enlazarla en los comentarios. ¡Buena suerte!

(†) Este listado fue tomado de un taller corto sobre el tema con Emily Short, síguela en Twitter para buena información sobre ficción interactiva. He aquí otros enlaces interesantes:

¿Por qué el control de versiones es crucial para programar (entre otras cosas)?

Si has tenido que entregar un trabajo escrito, o un proyecto para la universidad, muy probablemente has tenido esto en tu escritorio:

tesis

Es muy importante darse cuenta de que un documento que escribes, ya sea código fuente, documentación, un libro, una tesis, no es solamente el producto que entregas al final. Es también el proceso de pensamiento por el que pasas para poder llegar a ese producto.

Ese proceso muy rara vez es lineal. Muy pocos libros se escriben comenzando desde la introducción, y escribiendo cada capítulo en orden. Muy pocos proyectos de software comienzan con la pantalla de inicio.

El proceso de pensamiento en muchas ocasiones es caótico y desordenado. Pero sobre todas las cosas, los pensamientos son orgánicos, tenemos decenas de pensamientos cada día, pero solo algunos de estos se quedan en la mente. Algunos de estos pensamientos son difíciles de concebir, de hacer crecer, mientras que otros parecieran que crecen más rápido que nuestra misma capacidad de concebirlos.

Cada idea que tenemos es el resultado de ensayar varias posibilidades. No podemos escogerlas todas, hay que tomar decisiones en el camino. Algunas veces es muy conveniente poder ir atrás en el tiempo, y explorar otra posibilidad, lo que lleva la idea por otro camino.

Un control de versiones es un software que facilita este proceso. Es capaz de tomar fotos de un documento y compararlos en el tiempo. En cada comparación podemos ver qué cosas se agregaron, se quitaron o se cambiaron. Es capaz de tomar una de esas fotos y formar una línea de tiempo. Todo lo escrito va para un repositorio, el cual preserva toda esta información.

Pero de todas las funcionalidades, la más importante es tener la capacidad de comunicar y compartir cambios en el documento/código a otras personas que están trabajando sobre el mismo proyecto. En casi todos los sistemas el proceso es similar: cada integrante descarga una copia del proyecto a un «directorio de trabajo», allí hace los cambios, y luego manda los cambios de vuelta al repositorio. El sistema incorpora los cambios hechos por otros participantes de la manera más transparente posible, pero si no es posible integrar los cambios (por ejemplo, dos personas cambiaron la misma línea de texto), entonces el sistema deja al usuario el trabajo de seleccionar cuáles cambios continúan o se revierten.

No es mi objetivo enseñar específicamente cómo utilizar un control de versiones. Creo que hay recursos en línea que son mucho mejores y están disponibles inmediatamente, y a los que haré referencia al final del artículo.

Si escribo esto, es para animar a aquellos interesados en programar a que aprendan también a manejar un control de versiones. Esto es algo que muchas veces se aprende en una oficina y no en una universidad (donde supuestamente se aprende esta clase de cosas).

Por otro lado, muchos escritores no tienen el conocimiento tecnológico para incorporar un control de versiones en su trabajo (¿instalar un servidor?, ¿cómo guardo mis cosas?). Sin embargo, ver un recurso como GitBook me hace pensar que es posible traer a los escritores las ventajas del control de versiones sin pagar tanta penalidad en el aprendizaje de su manejo. Si eres escritor regular me gustaría saber tus opiniones al respecto.

Si necesitas saber más sobre el control de versiones, el libro Version Control By Example, de Eric Sink, es una de los mejores libros que he leído sobre el tema, e incluye los sistemas más populares. Si tu intención es, además, ser desarrollador profesional de videojuegos, en algún momento te encontrarás con Perforce, el cual es un servidor centralizado, similar a Subversion. Cuenta además con una versión gratuita para un límite de usuarios, lo que te permite probarlo sin costo alguno.

Las herramientas son solamente herramientas

Foto por Lenore Edman
Foto por Lenore Edman

Últimamente he observado en varias comunidades de desarrolladores de videojuegos la tendencia a idealizar las herramientas que utilizamos, quizás hasta el punto de excluir la posibilidad de que existan otros puntos de vista.

Comparamos engines, lenguajes de programación, hasta pipelines completos de desarrollo. No es que esto sea malo, la verdad es que aprender a utilizar alguna de estas herramientas (o conjunto de herramientas) requiere invertir tanto esfuerzo que entiendo la necesidad de sentir que hemos hecho la elección correcta y, por lo tanto, destacar las bondades de la herramienta.

También es cierto que es muy difícil anticipar cómo se va a comportar una herramienta ante un proyecto. No es lo mismo hacer un juguete que algo que sea entregable. La herramienta puede tener limitaciones que no eran conocidas al momento de comenzar, o se comporta lentamente, o la recolección de basura pone el juego lento en momentos al azar.

Pero uno de los vicios, si así lo puedo llamar, es hacer la comparación de las herramientas empleando el material de marketing o los juegos más exitosos del momento. Dado el nivel de muchos desarrolladores noveles, no creo que les sean útiles muchas de las últimas características novedosas de tal o cual herramienta, pues suelen ser cosas que en cada versión van aumentando en complejidad. Son características que multiplican la productividad o los resultados si has hecho el trabajo indicado al momento en que aparecen, pero no agregan beneficios si apenas estás comenzando.

Cada desarrollo es un proceso largo y complejo, conformado por muchos pequeños momentos que se suman y forman algo más grande. Ese material de marketing que vemos está hecho precisamente para eso, para difundir las bondades del engine que se te está vendiendo, muy probablemente sin cubrir tu caso de uso, que suele ser más complejo u oscuro de lo que parece. El juego que estás alabando muy probablemente tuvo que tomar más de un atajo para lograr el resultado que estás viendo. Quizás todo esto sea porque me gustaría ver más juegos hechos, y no tanto «mira qué maravilla [tal característica] de [tal engine]».

Mi recomendación, si es que quieres seguirla, es que siempre cuestiones lo nuevo que sale. Si has visto un juego hecho con una determinada herramienta, sea cual sea, significa que existe la posibilidad de hacerlo. Por tanto, lánzate a hacer tu juego con esa herramienta que conoces. Verás que esa herramienta que alabas tanto tendrá sus dificultades y sus achaques. Eso es algo bueno, significa que esa herramienta tiene posibilidades de mejoras. Si es un producto hecho en comunidad, significa que puedes ingresar a la comunidad de desarrolladores y participar allí, sugiriendo mejoras, e incluso hacerlas tu mismo y subirlas.

3D Avenue post mortem

nanomites1
A dos años de su publicación, 3D Avenue decidió publicar un postmortem de su juego Nanomites (link del juego en iTunes) en inglés. Así que con su permiso lo traduje al español y lo pueden leer a continuación.

Nanomites fue nuestro primer juego, y sentimos que aprendimos muchísimo de su desarrollo. No solamente fue el primer juego que desarrollamos en 3D Avenue, pero para la mayoría de nosotros, fue el primer juego completo que hayamos desarrollado. Como programador, mi única experiencia fue siguiendo un tutorial para hacer un juego de explotar globos (un Balloon Popper) para el iPhone, y algunos intentos fallidos de hacer mods de Half Life y Quake, en la época que todos los chicos cool lo estaban haciendo. Y digo fallido, pues realmente nunca le dediqué suficiente tiempo. Nuestro artista era el que había tenido más experiencia trabajando en proyectos más grandes de juegos, habiendo trabajado en un par de mods populares de Half Life (Sabaneta 2050 y Front Line Force). Su trabajo con esos mods, sin embargo, fue haciendo cosas en 3D. Nanomites era un proyecto 2D, así que esto también era nuevo para él. Para nuestro diseñador de juegos, era la primera vez que el tomaba las decisiones sobre la dirección del juego, la jugabilidad, la mecánica, la adaptación a las restricciones técnicas, muchas cosas de un documento inicial de diseño de Nanomites que no lograron quedar en el juego, debido a restricciones de tiempo y limitaciones de la experiencia del equipo, y esto juego algo a lo que el diseñador de juegos tuvo que adaptarse y aprender.

Con respecto a las limitaciones de hardware, tengo que mencionar que, aunque el poder que tienen los dispositivos móviles hoy en día es increíble, no está aún donde nos hubiese gustado que estuviese para Nanomites, en especial no para dispositivos viejos como el iPhone 4 y sus generaciones previas. Pero esto fue algo que no sabíamos en ese momento. De hecho, la razón por la que queríamos que Nanomites fuese 2D es porque pensamos que sería más sencillo hacer un juego 2D. Pero después de lidiar con texturas, limitaciones de memoria para archivos grandes de texturas, atlases, sprites, animaciones fotograma por fotograma, ahora sabemos que no es necesariamente más sencillo hacer 2D en vez de 2D. Habían muchas cosas que no sabíamos. La idea original de Nanomites no incluía a los personajes, y era mucho más simple. Se llamaba Nanosplit. Pero cuando nos dedicamos a tiempo completo sobre el juego, en vez de trabajar en «horas posteriores», es decir, después de nuestros trabajos diurnos, pensamos que podríamos agregar más cosas, así que el documento de diseño creció.

El plan era que nuestro primer juego sería sencillo. Un juego que pudiésemos desarrollar rápidamente, uno que no tomara demasiado tiempo finalizar. La idea detrás de Nanomites era «un juego donde tuvieses que dibujar líneas para separar bolas que rebotan», SUENA simple, pero después de tres meses de desarrollo, lo único que teníamos era un bonito salvapantallas sin casi ninguna jugabilidad aparte de las «bolas que rebotan». Durante ese tiempo el equipo se frustró mucho. Uno de nuestros programadores nos dejó a causa de esto. Y no progresó tan rápido como nos hubiese gustado, pero afortunadamente, gracias a la asombrosa comunidad de Unity 3D, pudimos conseguir ayuda en los foros. Así, el primer mite fue finalmente capturado, con las reglas correctas, tres meses después de que el desarrollo comenzó. Si no hubiese sido por la increíble contribución de los foros, Nanomites no hubiese sucedido. Y estamos sumamente agradecidos por su ayuda.

Los siguientes cuatro meses transcurrieron entre pulir el juego, agregar más mites y comportamientos, la mecánica de dibujar la línea (la cual en algún punto tendrá su propio artículo, porque es algo que me han preguntado otros programadores, y tengo que decir que fue bastante complejo), los sonidos, la interfaz, resolver bugs, el tutorial, la música… Tantas cosas que incluye hacer un juego, y no es hasta que lo completas que te das cuenta de la cantidad de trabajo que requiere. Amar lo que hicimos ayudó bastante. Creo que la frustración inicial fue porque lo queríamos tanto, que nos adaptamos y aprendimos. Y es probablemente como el inicio de una relación a largo plazo: vas a pelear, vas a estar en desacuerdo, pero eventualmente, con esperanza, puedes hacer que funcione, y terminar de hacer cosas.

¿Qué estuvo bien?

Logramos de verdad hacer el juego. Para ser honestos, después del primer par de meses de desarrollo, pensamos que no íbamos a ser capaces de lograrlo, no era jugable y no teníamos idea de cómo hacerlo todo, pero persistimos, lo hicimos funcionar y estamos extremadamente orgullosos de cómo resultó.

Aprendimos un montón del desarrollo de Nanomites, cómo planificar mejor, tenemos una mejor idea de lo que significa más pequeño y más simple en términos de proyectos, muchas cosas que hacer y que no hacer en el lado técnico, cómo de verdad hacer juegos (lo cual fue muy emocionante). Aprendimos un montón acerca de nosotros mismos y acerca de cada uno de nosotros, y aunque aún tenemos mucho por aprender, nos sentimos más confiados, tenemos una mejor idea de qué hacer, y lo que tomará para terminarlo.

¿Qué estuvo mal?

Sentimos que el principal problema con Nanomites fue que el desarrollo de la mecánica del juego era demasiado difícil y retador para la experiencia y conocimiento que teníamos, no era definitivamente para principiantes. Durante el desarrollo el proyecto también se volvió muy ambicioso y al final tuvimos que recortar muchas características del mismo. Originalmente (cuando no era ambicioso) habíamos planeado un ciclo de desarrollo de 6 meses, y ya nos acercábamos a los 12 meses cuando salió el juego. Algunas de estas características incluyen modo de aventura, muchos más comportamientos de los mites, y peleas con jefes. Pensamos que la idea sonaba simple, pero eso fue un gran error.

Si estás apenas comenzando, trata de hacer lo más que puedas para saber en qué te estás metiendo del lado técnico, que fue lo principal que nos retrasó. Mas, afortunadamente, al final, lo hicimos funcionar. Para hacer eso, tienes que investigar en las mecánicas que quieres implementar, en todas ellas, antes de escribir la primera línea de código, eso debería ayudar un montón.

También hicimos algunos errores con relación al marketing y la publicación, lo cual resultó en que Nanomites no se desempeñara en las ventas también como hubiésemos querido, pero estamos trabajando en arreglar eso para nuestro próximo título.

¿Qué más estuvo bien?

Nanomites recibió muchas reseñas positivas, y la gente realmente disfrutó el juego. Las puntuaciones topes en los leader boards no son nisiquiera de nosotros, y eso nos hace muy felices. Todo el que lo ha jugado, lo ha disfrutado, y el juego tiene evaluaciones sólidas, tanto en el AppStore como en el Play Store.

¿Qué queda para Nanomites?

Nos gusta Nanomites, los personajes, el juego, y nos encanta que la gente haya disfrutado tanto el juego. Haremos una actualización del juego para soportar algunas resoluciones en algunos dispositivos que han salido desde el que juego se publicó.

Una de las cosas que más nos piden es continuar jugando desde la ola donde moriste, y estamos pensando en formas de permitirlo, así que eso debería llegar en algún momento. Ahora mismo estamos concentrados en Spectrum, así que puede pasar algún tiempo antes de que hagamos más cosas con nanomites, pero no nos vamos a olvidar de él. Ya hemos actualizado el proyecto para usar la última versión de Unity 3D, y hemos arreglado algunos bugs que surgieron a partir de ello, así que viene una actualización. Pero como lo mencioné, nuestro enfoque principal ahora mismo es en Spectrum.

Si tienen alguna pregunta, por favor déjenla en la sección de comentarios. ¡Gracias por leer!

PD: Agregaré algunos bosquejos conceptuales y screenshots del inicio del desarrollo a este artículo en el futuro.