Jack busca curro: una aventura gráfica nacida en un tren

Ayer, 18 de octubre, mi hija Anna y yo íbamos en un TGV de París a Brest, de vuelta a Bretaña tras un fin de semana en familia. Unas cuantas horas de tren, mi portátil, y Anna, que tiene 12 años, sentada a mi lado.
No era nuestro primer juego del fin de semana. A la ida, de Bretaña a París, ya habíamos hecho uno juntos en el TGV: un juego al estilo Temple Run, basado en uno de los sets de LEGO que nos dieron en el TGV. Así que para la vuelta Anna también quería un juego, pero de otro tipo: sin combates, sin modo arcade, algo más de pensar. Me acordé de las viejas aventuras gráficas de LucasArts, y luego del proyecto de mi compañero Erwan, Web-SCUMM. Era la ocasión ideal para probarlo por fin.
Ella se inventó una historia: Jack, un esqueleto con cabeza de calabaza, se queda sin trabajo justo antes de Halloween y tiene que encontrar un curro nuevo. Al llegar a Bretaña, Jack tenía un jefe vampiro tacaño, un alcalde Frankenstein que ha perdido su tornillo, una momia en la oficina de empleo y un blob verde que se lo traga todo. Y vivía en un juego. Una aventura gráfica de verdad, como las que me vieron crecer, ya jugable, con unas formas provisionales bastante feas en lugar de dibujos. Hoy le hemos añadido el pixel art, un segundo episodio y una banda sonora, y lo hemos publicado: Jack cherche un taf («Jack busca curro»), jugable en el navegador y en el móvil.
Lo hemos construido con Claude Code, sobre un motor que se llama Web-SCUMM. Y quiero dejarlo claro desde el principio: este post no habla de un juego hecho a pesar de la IA, habla de lo que la IA ha hecho posible. La historia de una niña de 12 años convertida en una aventura gráfica jugable entre dos estaciones de tren es justo el tipo de locura que estas herramientas permiten hoy, y todavía estoy un poco alucinado.
Web-SCUMM, o cómo un juego se convierte en datos
Si tenéis cierta edad, Day of the Tentacle o Monkey Island 2 seguro que os dicen algo. Verbos en la parte de abajo de la pantalla (Mirar, Coger, Usar, Dar…), puzles absurdos, personajes que recuerdas treinta años después. LucasArts construía esos juegos sobre SCUMM, su motor de la casa.
Web-SCUMM es un motor libre (licencia MIT) para ese tipo de juegos, en el navegador. Lo ha hecho mi compañero Erwan (wanoo en GitHub), VP International Growth en Clever Cloud.
Lo interesante no es que reproduzca el género, sino cómo lo hace:
- El juego son datos, no código. Los escenarios, los objetos, los personajes, el inventario, los diálogos, los puzles y las pistas son simples objetos TypeScript, sin ninguna lógica. Una regla es un verbo, un objetivo, una condición y una lista de comandos. Y ya está.
- Como son datos, se pueden comprobar. Un validador encuentra las referencias rotas y las cosas visibles que no se pueden mirar. Un solver hace funcionar el motor real para demostrar que el juego se puede terminar desde «Nueva partida». Un test de recorrido lo vuelve a jugar después de cada cambio.
- Un Studio visual: el motor real con un editor encima, para colocar las cosas en un escenario, editar cada frase en su sitio y relanzar las comprobaciones en cada guardado.
- Genera un juego web que se instala en el móvil y se juega sin conexión.
- Está pensado para escribirse con un asistente de IA. El repositorio tiene un
AGENTS.mdcon las reglas, y skills para Claude Code (/storyboard,/new-room,/new-character…) que siguen el método del motor paso a paso.
Ese último punto es el corazón de esta historia. Anna y yo dedicamos el tiempo a lo importante: la historia, los chistes y los puzles. Claude Code convertía nuestras ideas en escenarios, diálogos y puzles, siguiendo las reglas del motor, y el motor nos avisaba (a nosotros y a Claude) cuando algo se rompía. Así es como una historia imaginada al principio del viaje se convirtió en un juego al que Anna pudo jugar antes de llegar.
La historia de Jack
Jack es un esqueleto con una calabaza tallada por cabeza, inspirado en otro de los sets de LEGO que nos dieron en el TGV, el 30717 «Fun Halloween Skeleton». Pero en el juego, Jack es pixel art, no un juguete.
Jack trabaja como asustador en la mansión encantada, Le Manoir Frissonnant. Hace muy bien su trabajo. Demasiado bien: ayer, un autocar entero de turistas salió huyendo a gritos. Sin pagar. Así que el Conde Radinoff, un vampiro tan tacaño como pálido, lo despide. A tres días de Halloween.
El Conde marca el tono desde la primera frase:
« Jack, mon petit. Asseyez-vous. Ah non, pas sur la chaise, elle est neuve. »
«Jack, chaval. Siéntese. Ah no, en la silla no, que es nueva.»
Y cuando Jack se atreve a hablar de la indemnización:
« Votre quoi ? Je ne connais pas ce mot. Il n'existe pas en transylvanien. »
«¿Su qué? No conozco esa palabra. No existe en transilvano.»
Jack tiene hasta el 31 para encontrar trabajo. Primera parada: la plaza del pueblo y Pôle Frousse, la oficina de empleo (un juego de palabras con Pôle Emploi, el antiguo servicio público de empleo francés, y frousse, «canguelo»). En la ventanilla, Mme Bandelette, una momia muy, muy lenta. Para montar el expediente, Jack necesita una foto de carné y una carta de recomendación del Alcalde.
Por supuesto, nada es sencillo. El Alcalde, Franck Enstein, ha perdido el tornillo del cuello, y la cabeza se le inclina peligrosamente hacia un lado. El tornillo se lo tragó Gloubi, el basurero, un gran blob verde que se lo traga todo y no devuelve nada, salvo si está tan contento que eructa. Y el camino a la feria lo vigila el Brigadier Sans-Tête, un caballero sin cabeza con una lógica aplastante:
« HALTE ! Personne ne passe sans que je le voie ! »
«¡ALTO! ¡Aquí no pasa nadie sin que yo lo vea!»
No tiene cabeza. Así que no ve a nadie. Así que no pasa nadie. Es el reglamento.
En la feria, Jack prueba algunos trabajillos para conseguir lo que necesita: vender algodón de azúcar para Mémé Guimauve, una bruja jubilada, y calmar a Pépite, el dragoncito de M. Carrousel, que tiene miedo de los niños. Lo consigue las dos veces. Y lo despiden las dos veces, porque los niños le tienen miedo a él. De ahí un gag recurrente:
« Troisième licenciement de la journée. Record personnel. »
«Tercer despido del día. Récord personal.»
El segundo episodio transcurre en el tren fantasma de Wolfgang, un hombre lobo que es contable cuando no hay luna llena. Jack entra a prueba, pero nada funciona: los fantasmas están en huelga (Ginette la delegada sindical, Gaston con sus cadenas, y Bouh el becario, que solo dice «bouh»), no hay luz, y nadie sabe que el tren vuelve a abrir. Este último problema lo resuelve la foto fallida de Jack: la que asustó tanto al fotomatón que se puso a toser humo acaba siendo el cartel. Y luego llega la venganza del Conde, que no voy a destripar, salvo para decir que un vampiro tacaño acaba pagando. Dos veces.
Por el camino hay cuatro pequeños minijuegos en la tradición de LucasArts: servir el algodón de azúcar del color correcto, acariciar muy despacito a un dragón asustado, desenredar los cables del cuadro eléctrico y elegir dónde esconderse para el ensayo general.
Y si te atascas, puedes hablar con Mireille, la pequeña araña que vive en la cabeza de Jack (está en el inventario). Sus pistas van de lo más vago a lo más preciso. Porque hay una regla que tomamos directamente de LucasArts: nunca mueres y nunca te quedas atascado.
El juego está en francés, y se juega en el ordenador o en el móvil en horizontal.
Cómo trabajamos
El brief inicial cabe en tres líneas: un primer alcance pequeño de 3 o 4 lugares, pixel art, espíritu LucasArts.
La historia es de Anna: Jack despedido antes de Halloween, buscando curro nuevo. El alcalde Frankenstein, Gloubi y varios personajes más también son ideas suyas. Algunas situaciones son suyas, otras mías, otras de los dos, y otras salieron de nuestras conversaciones con Claude. Porque Claude no se limitaba a teclear el código: era la tercera persona en la mesa, la que convertía una idea lanzada al aire en un escenario jugable en pocos minutos. Trabajamos juntos en mi portátil, codo con codo, con Claude Code trabajando dentro del repositorio de Web-SCUMM y siguiendo su método. El TGV no nos lo puso fácil (el wifi no dejó de cortarse y volver hasta Bretaña), pero lo conseguimos.
Mi momento favorito fue en el tren, la primera vez que Anna jugó. Los dibujos todavía eran unas feas formas SVG provisionales, pero ella estaba alucinada de ver sus ideas convertidas en un juego.
Ese método es lo que más me gustó, porque mantiene un juego sano incluso cuando lo escribes deprisa, en un tren:
- Primero el storyboard. Cada frase del juego vive en un único fichero de storyboard, escenario por escenario, escena por escena, con las pistas. Es la fuente de verdad: cuando queríamos cambiar un chiste, cambiábamos el storyboard y luego el escenario.
- Los escenarios son datos. Un fichero por escenario, con lo que pasa cuando miras, coges, das o usas algo. Nada de código en la carpeta del juego.
- Comprobaciones después de cada cambio.
npm run validatedetecta los identificadores rotos y las frases que faltan,npm run solvedemuestra que el juego se sigue pudiendo terminar desde «Nueva partida», y un test de recorrido vuelve a jugar el juego entero. Cuando añades gags a toda velocidad, saber que una errata no puede romper el juego es una tranquilidad.
Todo lo demás llegó al día siguiente, es decir, hoy: el pixel art, el segundo episodio en el tren fantasma, la banda sonora y la publicación.
Para el arte, las herramientas del motor escriben los prompts de cada hoja de sprites, cada objeto y cada fondo con un mismo estilo (npm run prompts). Las hojas las generó un modelo de imágenes a partir de esos prompts, y luego se recortaron en sprites con la herramienta cut-sheet.py del motor y se limpiaron con un par de scripts. La hoja de Jack se hizo la primera, y sirvió de referencia de estilo para todas las demás.
El juego está publicado en GitHub Pages, con un workflow de GitHub Actions que lo construye y lo despliega.
Una banda sonora de Mega Drive para Halloween
Una aventura gráfica sin música es triste, así que el juego tiene una banda sonora de Halloween al estilo Mega Drive. Web-SCUMM incluye una cadena de audio que convierte un fichero MIDI en un arreglo para Sega Mega Drive (síntesis FM y PSG, renderizada con el tracker chiptune Furnace), y que genera los efectos de sonido a partir de la misma paleta de sonidos, para que todo suene a un mismo juego.
Así que en la mansión suena la Tocata en re menor de Bach (¿qué si no?), en el tren fantasma suena En la gruta del rey de la montaña de Grieg, y hay temas originales para la plaza del pueblo, un vals para la feria y una pequeña sintonía para el final. Sin olvidar los efectos de sonido: el trueno, una puerta que chirría, una taquilla que se abre y, por supuesto, el eructo de Gloubi.
Jugar, leer, hacer un fork
- Jugar online: lostinbrittany.github.io/web-scumm-jack-cherche-un-taf, en el ordenador o en el móvil en horizontal.
- El repositorio del juego: LostInBrittany/web-scumm-jack-cherche-un-taf, un fork del motor que solo contiene el juego de Jack. Toda la historia se puede leer en el storyboard, y se puede ver cómo se escribe un escenario.
- El motor Web-SCUMM: wanoo/web-scumm, con licencia MIT. Gracias, Erwan, por construir un motor tan bonito, y por pensar con tanto cuidado en cómo funciona con un asistente de IA. Si alguna vez habéis soñado con hacer vuestra propia aventura gráfica, es un punto de partida estupendo.
Los créditos del juego dicen «Anna et Horacio», y es mi frase favorita de todo el juego. He disfrutado como un enano pudiendo hacer esto con mi hija, ayudándola a ver sus ideas convertidas en un juego. ¿Y Jack? Ha encontrado trabajo. Asustar, en su justa medida.