Parece que luego de un lanzamiento medio incompleto, pero con muchísima promoción, O3DE ha entrado en la fase en que casi nadie se interesa por él. No han salido muchos tutoriales en Youtube, ni reacciones, e incluso las noticias han decaído. Lo último que supimos esta semana fue de la inclusión de Cesium, que es una herramienta muy, pero muy específica para asuntos que la mayoría de los desarrolladores no pensamos ni mirar.
No he podido seguir las pruebas porque como ya les dije, es muy complicado usar O3DE si no tienes una conexión rápida y permamente, algo tan escaso acá como... bueno, como todo. Pero no desesperen. O3DE es simplemente un caso raro dentro de los motores libres. Es una herramienta AAA que acaba de venir al mundo como Atenea, toda crecidita y armada, por lo que es un poco difícil que sume desarrolladores que hagan grandes aportes. Aparte del equipo de Amazon, dudo mucho que alguien entienda lo que tiene dentro.
Considerando que New World lo utiliza, no deberíamos temer por su futuro. Quizás no vaya rápido y haya que esperar un año antes de tener una versión más amigable, pero abandonado no va a qeudar, mientras Amazon lo necesite. Sin olvidarnos de que Deadhaus Sonata también lo usa y Star Citizen debería haber migrado desde Lumberyard.
O sea, que mejor nos olvidamos de él por unos meses y retomamos el tema más adelante. Hay cosas más interesantes a corto plazo, como el primer beta de Godot 4, que posiblemente nos llegue antes.
¿Y cómo le va a O3DE? Bien, gracias
Reporte de progreso
¿Cuál es el estado del proyecto actual a día de hoy? A pesar del atraso acumulado por fallos de hardware y cambios de diseño, hemos logrado avanzar en el último mes y medio. Las mecánicas básicas de juego están implementadas, aunque necesitan una revisión a fondo. Pero digamos que el 80% está ahí. La parte de contenido es la que necesita más trabajo y aún seguimos encontrando problemas. Se trata de un juego que podemos calificar de mediano, nada que ver con El Laberinto del Saber, que ha servido para descubrir las muchas cosas que no sabíamos hacer.
Así que les dejo un consejo: solo un proyecto de verdad te prepara como desarrollador de juegos (y supongo que esto aplique para todas las ramas de la programación). No es lo mismo hacer un par de tutoriales y creer que dominas todo lo necesario, a integrar mecánicas de juego con animaciones, sonidos, salva de partidas, y todo lo que lleva un proyecto completo. Parece irrelevante, pero cosas como la organización de los assets y las buenas prácticas pueden influir en la productividad.
Un pequeño ejemplo: el artista decidió que era más organizado nombras las cosas con números. A primera vista, parece lógico, pero cuando necesitas probar un objeto dentro del juego, ¿cómo sabes que si el rifle_001 es el Phaser Super Mk 2 o el Blaster Aniquilador con Famagusta? ¿El mecha_012 es el Leviatán Modelo 1955 o el Interceptor V-5? Son detalles que en proyectos más grandes con equipos más numerosos podrían degenerar en un reguero incomprensible. Y no voy a hablar a fondo del Problema de las Tres Escalas, baste decir que he invertido mucho tiempo en busca de errores que eran causados por objetos cuyas proporciones no coinciden con las del resto de los modelos.
En fin, que este juego que aún no puedo nombrar ha sido una escuela. Más o menos, primer grado, para ser exactos.
El otro proyecto que llevo paralelo a este es la esritura de una nueva novela breve. Es bastante difícil trabajar en ambas cosas a la vez, por lo que he terminado sacrificando parte del tiempo del segundo. Es que después de hora y media de programar y ya rayando las 10 de la noche, no quedan muchos deseos de dedicar treinta minutos a escribir. Sin embargo, luego de sacar unas cuentas chinas, creo que podría terminar para septiembre, dedicar octubre a revisiones y tenerla lista en diciembre, a tiempo para el Concurso Hydra.
El juego sí debería entrar en fase beta en dos meses. Pronto empezarán a ver algunas imágenes y quizás hasta un video. Si todo sale según lo planificado, en agosto ya tendríamos una versión más completa, a tiempo para un evento de videojuegos que se piensa celebrar en esa fecha.
Ha sido un año que casi podríamos dar por perdido, pero algunas cosas interesantes sucedieron por acá. Por ejemplo, salió La Pira, nuestro primer indie cubano con micropagos, algo que hace un par de añitos se hubiera catalogado de imposible. Pero los muchachos de ConWiro, que desde hace un tiempito vienen a la vanguardia de la naciente industria nacional, demostraron que sí era posible. Más o menos para esas fechas presenté oficialmente el remake de El Laberinto del Saber, un homenaje a ese viejo clásico, abuelo de los videojuegos hechos en Cuba. Y ya a mediados de año se rompió otro "imposible": Dungeons and Honor, de Jorge Sires, nuestro primer multijugador creado por un equipo independiente. Con gran éxito, hay que añadir. Nota de historiador pedante: nótese que digo primer multijugador indie, porque el primer multijugador cubano sería Netris Kombat, para más referencia véase mi conferencia sobre el tema.
Parece poco, pero para un país que hace dos años no tenía nada, es un buen punto de partida.
El 2022 se inició con la reanudación de los GameJams (una experiencia muy especial para mí) y con intenciones de hacer otro evento dedicado a los videojuegos a mediados de año. Veremos si se logra concretar. A propósito de jams, aunque esta vez se realizó con aislamiento de los equipos participantes, pude conocer a algunos de ellos y hablar largo y tendido. Como siempre digo: hay talento para mover la industria.
Por mi parte, he estado trabajando en otro proyecto, de mucha más complejidad y que ha enfrentado varias dificultades. Por eso ni siquiera tenemos fecha de salida. En paralelo, he ido trabajando en propuestas de diseño para lo que vendría a continuación de ese. Se dice rápido, pero me ha mantenido y me mantendrá bien ocupado.
Global GameJam 2022
Ha sido un mes bastante ocupado. Mucho trabajo en el trabajo (así mismo) y mucho trabajo en casa para asistir a este GameJam que se está celebrando ahora mismo. En diciembre fui invitado a participar en el evento, en la sede de la Universidad de Ciencias Informáticas. Y aquí pueden ver mi conferencia:
La historia de los videojuegos cubanos es un trabajo aún en progreso que he venido realizando en los últimos meses. Esta conferencia no es definitiva ni mucho menos, ya me han señalado un detalle a corregir, e incluso me han preguntado que para cuándo un libro. Ya veremos en el futuro.
Unigine 2.15
Me llega un mensaje de aviso de que ha sido lanzada la versión 2.15 de Unigine. con un montón de funcionalidades y cambios, como es lo usual. Aunque algunas de esas cosas llegan un poco tarde, como el editor visual de materiales, que ya es obligatorio en cualquier motor que se precie.
Unigine se caracteriza por un renderizador de alta calidad desde sus inicios, pero su precio de licenciamiento y su mentalidad cerrada evitaron que se extendiera. Aunque eso ha cambiado y ahora permiten acceder al motor sin restricciones, ya es un poco tarde.
Mi última experiencia con O3DE
Unos días antes de que se lanzara la primera versión oficial ya había descargado O3DE con su instalador, pero probarlo se me había vuelto casi imposible. Para empezar, el motor instalado debe transportarse a otra PC respetando la ruta donde se instaló. Existe el requerimiento adicional de tener instalado Visual Studio 19.9 (me dicen que las Build Tools también bastan para el proceso de compilar el proyecto). Y lo último y más trabajoso, es que al crear un proyecto es necesario una descarga de dependencias de más de 1 gb.
Al fin logré reunir todos estos requisitos en casa, de los cuales el más difícil era el de las dependencias. Me costó bastante caro bajarlas todas por datos móviles, incluso descubrí cómo guardarlas en un lugar específico y no en el perfil de usuario, para evitar llenar mi unidad C. Sin embargo, el proceso inicial de compilación reescribe mis cambios y vuelve a buscar las dependencias en C. La solución en este caso es joderse y copiar la descarga al sitio donde él las quiere, pero no fue tan fácil. Solo Qt ocupaba más de 6Gb al descomprimirse, llenando mi disco y haciendo fallar la compilación inicial.
Hasta ahí pude llegar. Lo gracioso del caso es que me era más fácil usarlo antes, cuando tenía que compilar el motor. Mi opinión, por el momento, es que O3DE no es el típico motor que puedas montar y poner a funcionar a menos que seas un estudio con personal bien capacitado. Eso, en cierto punto, es su fortaleza (o lo será), porque se aproxima más a Unreal, o su progenitor CryEngine, que a Unity o Godot. Quizás es un poco categórico y absoluto decir que no es para indies, así que vamos a dejarlo en que necesitas recursos y experiencia para lidiar con sus requerimientos y problemas actuales.
Hace 65 millones de años que lo estábamos esperando O3DE 21.11
Primer release de Open 3D Engine, para que puedan probarlo sin necesidad de compilar todo el motor. Además, han tenido la gentileza de publicar un conjunto de tutoriales (para hacer un Pong) que pueden servir de punto de partida.
Se los dije
Hace un par de días lo decía, no muy en serio, pero parece que acerté.
Arcane no solo dejó atrás al fenómeno de El Juego del Calamar., sino que también está considerada en IMDB como una de las mejores series de la historia, por encima de Juego de Tronos. Por supuesto, hay algunas que han puntuado mejor, como Chernobyl o The Wire. Y también debemos considerar que el final de Juego de Tronos fue bastante discutido.
Para los que anticipaban que La Rueda del Tiempo podría ser un digno heredero de Juego de Tronos, pues eso no se lo creía ni Amazon. Para empezar, buena parte del éxito de la adaptación de Canción de Hielo y Fuego se debe a que se trata de baja fantasía, con un componente muy alto de violencia y sexo. No veremos mucho de esto último en La Rueda y en cuanto a violencia... no creo que fulminar bichos generados por computadora con hechizos le gane muchos puntos. La gente no está muy dispuesta a darle una oportunidad a este tipo de fantasía. Agreguemos que su desarrollo es más lento (son una docena de libros) y que sus primeros episodios no encganchan mucho y ya podemos incluso dudar de que esta serie logre llegar la final de la historia original.
En cambio, la ambientación steampunk oscura de Arcane es más potable. Explota desde sus tres primeros capítulos y cuando llegas al noveno estás más loco que Jinx porque hay que esperar un año o más por la segunda temporada.
Parece que el relevo ha llegado de donde menos los esperábamos: de los videojuegos en vez de la literatura.
Unity compra Weta Digital
En el hipotético caso de que no te hayas fijado en los créditos de unas cuantas pelis de éxito de los últimos tiempos, o que ni siquiera hayas visto Lord of the Rings, te diré que Weta es la empresa detrás de los efectos especiales de muchos filmes. Además del mencionado, Weta ha trabajado en Avatar, King Kong, El Planeta de los Simios, etc. Pueden consultar la lista completa en Wikipedia. Fundada por Peter Jackson y un par de amiguitos en 1993, acumula un montón de premios y ha desarrollado un conjunto de herramientas para facilitar el trabajo delos artistas de efectos especiales.
Por ejemplo, City Builder para generar ciudades, Manuka/Gazebo el par de renderizadores (el primero de alta calidad, para el resultado final, el segundo en tiempo real, para previsualizaciones rápidas) o MASSIVE, para animar multitudes de agentes (como la batalla de los cinco ejércitos, en El Hobbit).
Estas herramientas en concreto son lo que Unity busca obtener con esta adquisición que ha implicado desembolsar 1600 millones entre efectivo y acciones, y por supuesto, su grupo de desarrollo que suma unos 275 ingenieros. Los artistas visuales serán movidos a una nueva entidad nombrada Weta FX, que continúa siendo propiedad mayoritaria de Peter Jackson, para que siga convirtiendo historias de un solo libro en trilogías de siete horas. La adquisición pondría esta tecnología al alcance de los usuarios de uno de los motores de juegos más populares del mundo, facilitando en gran medida la creación de contenido de alta calidad.
Creo que habrá que esperar un año al menos a que se concrete la integración de estas nuevas herramientas en el flujo de trabajo de Unity y entonces veremos la repercusión que tendrá la compra de Weta en el desarrollo de juegos. También pienso que esta movida es un intento de ponerse a la par con Unreal Engine, que ha dejado el listón muy alto con su versión 5. O por lo menos, no seguir quedándose atrás. Si lo analizamos bien, es un jugada en cierta forma lógica: apunta a la base de usuarios de Unity (creadores indies, equipos pequeños) y les ofrece, en teoría, la posibilidad de equipararse con los grandes. Así que muchas felicidades a los colegas que usan Unity, auqnue repito, aún está por verse el efecto real.
Un bug resuelto, luego de meses de búsqueda
Hay veces que uno se sienta a trabajar y dice: hoy sí voy a solucionar este bug. Revisas el código de punta a cabo, pruebas enfoques diferentes, te exprimes el cerebro... y te vas a dormir sin haber resuelto nada. Ayer logré romper la rutina y arreglar un error que me venía estropeando la IA del juego desde que implementé el combate básico. La historia corta: tuve que revisar el código de rotar el personaje hacia una posición y terminar usando el método simple (look_at), pero antes hubo que cambiar la orientación del modelo.
Por defecto, los modelos se exportan de Blender orientados hacia +Z. En los foros me sugirieron que debían estar orientados hacia -Z, que es la dirección que Godot asume como "frente". Además, en vez de ir directamente a usar look_at, utilicé un código que terminaba sumando más y más grados a la rotación y el NPC saltaba entre dos direcciones en vez de apuntar al jugador y seguirlo en su movimiento. Era un problema molesto que estaba trancando todo el desarrollo de la IA y que me hacía perder mucho tiempo.
Ahora que está solucionado el asunto de mayor prioridad, me toca sentarme a estudiar el proceso de creación de plugins para Android en Godot. Es la única forma en que puedo integrar el sistema de micropagos desarrollado en Cuba. Eso implica aprender un poco de Java o Kotlin, algo que no estaba en los planes.
De regreso
Ya estoy de vuelta al trabajo, con la billetera vacía, pero contento. La mejora no ha sido sustancial, porque solo he encontrado un i7 7700 (anteriormente tenía el i5 6500), pero considerando que Cuba vive un proceso de inflación desbocada, había que apañárselas con lo que apareciera. En un mes podría costar mucho más. También he saltado a 16 Gb de RAM, que ya me era muy necesario.
He tenido que tomarme un par de días para volver a familiarizarme con el proyecto, al que solo había echado unas esporádicas miradas. Hay montones de problemas de diseño que corregir, errores que cometí al inicio del proyecto y que he ido identificando poco a poco. Se trata de algo que aunque no es muy grande, es un poco mayor que El Laberinto del Saber.
Ahora que el trabajo está encarrilado de nuevo, es momento de poner en marcha otros planes atrasados, para tartar de rentabilizar un poco más el susodicho Laberinto.
La aventura del multijugador en Godot 4
Cuando digo aventura, no es esa de las de Disney, con final feliz y canciones. De hecho, aún no se ve el final por ningún lado. Es más bien una aventura tipo Juego del Calamar (que está de moda), donde no sabes lo que viene a continuación y hay mucho ensayo y error contra reloj. Sobre todo error.
Empecemos por el principio, que es donde empieza a principiar todo. Ya está saliendo el pre alfa de Godot. No he tenido tiempo de hablar del asunto, pero lo he estado usando desde hace un mes aproximadamente. Mi próximo objetvo es hacer algo multijugador, por eso volví a echar mano del tutorial sobre servidor dedicado de Game Dev Center, invertí un rato en ver los videos iniciales con calma, hasta que al fin pude encontrar algo de tiempo para implementar una prueba. El problema es que el sistema de redes cambia muchísimo en Godot 4. La documentación no lo dice, la gente aún no lo sabe (salvo los que lo programaron), así que toca joderse.
Aunque el tutorial aún puede darte una cierta idea general, he tenido que descubrir a las malas cómo se hacen las llamadas RPC. Antes simplemente declarabas una función remote del otro lado. Ahora la función debe estar declarada en ambos lados de la conexión, con los mismos parámetros y marcada con @rpc. Además, de un día para otro, el parámetro any de la anotación @rpc se convirtió en any_peer. Por suerte, un amable mensaje de error me lo explicó en detalle.
Supongamos que en el cliente creas un singleton llamado server, que entre otras cosas debe enviar un valor al servidor:
server.gd
@rpc(any_peer)
func test_value(val):
rpc_id(1,StringName("test_value",val)
En el lado del servidor, necesitaremos una clase o script llamado server también, porque la ruta de la función debe ser igual:
server.gd
@rpc(any_peer)
func test_value(val):
print(val)
Así, a grosso modo. Si empiezas a ver errores en el debug de que el checksum no coincide y que la ruta del nodo no existe, quiere decir que hay una diferencia entre la función de un extremo y la del otro. Aún me queda mucho por delante, pues ni siquiera he pasado de la parte de login, usando un servidor de autentificación. He decidido, de momento, no enredarme con un gateway, porque ya eso serían cuatro proyectos diferentes. No me parece que se justifique en un entorno donde a lo más, habrían dos o tres servidores, uno para autenticación y los otros sirviendo mundos o regiones del juego.
Con un poco de suerte, en diciembre habré conseguido entender la replicación del estado de los jugadores.
