Kaixo,

He creado el repositorio 'moon' en el GitHub de Itsas:
https://github.com/itsas-taldea/moon

MOON: 1110011 es un juego de mesa que diseño Txipi hace unos años en el
contexto de https://compus.deusto.es. Además de tener copias físicas, tengo
instalada en el móvil la versión para Android que se hizo como resultado de
la campaña de Kickstarter (
https://www.kickstarter.com/projects/garaizar/moon-0?lang=en). Suelo jugar
cuando hago viajes en avión. Tengo instalada la versión 0.1 y echo en falta
opciones de juego que estan en el manual y en el activity book. No debería
ser tan difícil reimplementarlo y así poder añadir las opciones que
faltan... Al ponerme a ello, me he dado cuenta de que hay varias versiones
posteriores (hasta la 1.0) XD. Sea como fuere, el año pasado me puse en
contacto con Txipi y me facilitó las fuentes de todas las cartas en SVG,
además de confirmarme que todo el juego (y el arte) es tan copyleft como
imposible que no lo fuera.

Por otro lado, llevo varios años siguiendo el proyecto Godot (
https://godotengine.org/), un "engine" open source para hacer videojuegos y
apps 2D y 3D.
*En realidad, llevo una década buscando alguna herramienta para poder hacer
software con GUIs invirtiendo un esfuerzo "razonable" para alguien que no
tiene formación en desarrollo de software. He probado Gtk con Ruby, Qt con
QML, tkinter (Python), el toolkit de Matlab, Ogre3D, Horde3D, Urho3D,
three.js, D3.js, Vue.js (con varios toolkits CSS)... Cada una funciona en
su contexto, pero no sirven para aprender una herramienta y poder hacer
GUIs que funcionen en escritorio (GNU/Linux o Windows), en Web (HTML5 o
WASM), y en móviles/tablets (Android). Lo más parecido es (era) hacer
aplicaciones web y opcionalmente complementarlas con un proceso
ejecutándose en local (o meterlas en electron para 'estandarizar' el
navegador). Demasiado JS para mi estómago.*
Godot es algo... diferente. Permite exportar a escritorio (GNU/Linux,
Windows, macOS), Web o Android prácticamente sin esfuerzo. También se puede
exportar a consolas con NDAs y dinero de por medio. Internamente no es muy
diferente del resto de "2D/3D (game) engines" escritas en C++/C#, pero
tiene un enfoque muy centrado en ser usable para quienes no saben programar
o quienes tenemos conocimientos limitados de software, y tiene el plus de
exportar a WASM. De forma similar a Blender, FreeCAD y otras herramientas
de diseño, se ha complementado la forma "tradicional" de hacer las cosas
con un lenguaje de scripting (muy inspirado en Python, pero más simple). De
hecho, hasta la versión 3.x había "Visual Scripting" también:
https://docs.godotengine.org/en/3.0/getting_started/scripting/visual_script/getting_started.html
(ver
https://godotengine.org/article/godot-4-will-discontinue-visual-scripting/).
Para funciones avanzadas, se puede compilar contra otros lenguajes usando
la semántica de C, o se pueden utilizar puertos TCP/IP de forma similar a
como se comunica un frontend web con un backend local. Aunque tiene sus
limitaciones (como no heredar el estilo nativo del explorador de archivos),
las ventajas parecen compensar.

El año pasado decidí probar Godot 3.x utilizando Moon como contenido. Me
dejó muy buen sabor de boca, pero sabiendo que la versión 4 estaba "cerca",
decidí posponerlo (para evitar trabajo de reescritura posterior). ¡Hace
unas semanas publicaron Godot 4.0! Ya empieza a ser muy comparable a Unity
y Unreal Engine no sólo en "físicas y efectos chulos que te cagas" (
https://godotengine.org/showcase/) sino en madurez de las APIs y
posibilidades de importación.

Así, el repositorio que he creado contiene:

- blueprints: los SVG de las "cartas", y la fuente.
- container: Dockerfile para usar Godot en integración continua (debería
ser upstreameado eventualmente; estoy en ello).
- doc: texto en restructuredtext y markdown para ser procesado con Sphinx.
- godot: proyecto del juego para Godot 4.x.

Las fuentes de las cartas y la documentación (que incluye las reglas, FAQ,
etc.) están bajo CC-BY-SA. El juego para Godot 4.x está bajo Apache 2.0.

En integración continua (por ejemplo:
https://github.com/itsas-taldea/moon/actions/runs/4618392973):

- Se exporta el juego para GNU/Linux, Windows y macOS, y se actualizan los
assets de la pre-release tip:
https://github.com/itsas-taldea/moon/releases/tag/tip
- Se exporta el juego para Web, se genera la documentación en HTML con
Sphinx, se combinan ambos resultados y se publican/actualizan en:
  - https://itsas-taldea.github.io/moon/ (la documentación)
  - https://itsas-taldea.github.io/moon/play/ (el juego)

Como el desarrollo de videojuegos "está de moda", creo que es interesante
disponer de un ejemplo a mano que ilustre lo fácil que es empezar con
herramientas open source. Porque, además de ser software libre y gratis, y
no tener royalties asociados, estoy convencido de que difícilmente puede
ser tan sencillo hacerlo con Unity/UE . El commit inicial del repositorio (
https://github.com/itsas-taldea/moon/commit/c3af5fee1f0ea9e0c9fbeeda74a69c153886df48)
incluye un "pipeline" de 100 líneas. Eso (que se puede copiar tal cual) es
todo lo que hace falta para "publicar" un juego/app para cuatro plataformas
(linux, windows, macos y web). Y 50 líneas más (
https://github.com/itsas-taldea/moon/blob/main/.github/workflows/Pipeline.yml)
para publicar al mismo tiempo la documentación en HTML (o PDF, o epub, o
man o...). También hay muchos juegos "indie" publicados en https://itch.io/,
que es un alternativa muy interesante si se quiere dar a conocer el juego
(y no sólo hacerlo).

Con respecto al juego en sí (la versión web en
https://itsas-taldea.github.io/moon/play/ o las de escritorio descargables
de https://github.com/itsas-taldea/moon/releases/tag/tip) es un prototipo
muy básico. El código es lo suficientemente funcional para cargar las
"cartas" y cromprobar que la lógica de hacer operaciones y actualizar los
elementos respondiendo a eventos funciona. Es un pasatiempo, por lo que no
tengo ninguna prisa, y puede que esté meses sin tocarlo. Pero como ya llevo
un par de años haciendo alguna que otra cosa con ello de vez en cuando, me
ha parecido pertinente ordenarlo un poco y compartirlo.

Si la "plantilla" (integración continua, documentación y proyecto Godot)
sirve para que algun alumno que quiera hacer un TFG o un proyecto en su
tiempo libre se plantee usar herramientas open source, bienvenido sea. Si a
cualquiera os apetece ojear el código y preguntar o corregir, bienvenido es
también. Ponerlo en GitHub es para facilitar que se pueda leer el código,
hacer forks y opcionalmente proponer modificaciones. Pero ya digo que por
el momento tiene poco interés didáctico el código del subdiretorio `godot/`
porque no he puesto esfuerzo en usar clases debidamente.

A mayores, Txipi me ha comentado que la versión disponible en Google Play y
en https://moon.deusto.es/ está hecha con libGDX, y por tanto entiendo que
en Java. Aunque no han publicado las fuentes todavía, tienen intención de
hacerlo. Eventualmente, incluiré esa versión en un subdirectorio del
repositoro y trataré de añadir a la integración continua la compilación en
paralelo con la versión hecha con Godot. Creo que dada la simplicidad de
las reglas de Moon, puede ser interesante ver las similitudes y diferencias
entre dos implementaciones en diferentes lenguajes y por diferentes
personas.

Salud

Unai
_______________________________________________
ITSAS mailing list
[email protected]
http://list.ehu.eus/mailman/listinfo/itsas

Responder a