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.

Reporte de estado

 Sigo sin PC, así que no tengo tiempo para publicar aquí. Además de eso, la ciudad está sometida a restricciones de movilidad: a mediodía cerramos y me voy a casa. El poco tiempo libre que tengo se lo he dedicado a un proyecto de un amigo.

Se trata de algo para móviles, que parece ser la moda ahora, con Godot. Definitivamente útil para aprender, aunque no era mi intennción involucrarme en proyectos 3D con Godot 3.x. Las dificultades que estamos experimentando me han dado la razón, casi todas relacionadas con pobre rendimiento. Espero poder publicar algún video dentro de unos meses.

Quizás podría decir que la buena noticia es que logré compilar O3DE, crear un proyecto y abrirlo. La documentación es escasa, incluso si buscas la referente a Lumberyard. Eso y la falta de tiempo me impiden hacer poco más que poner objetos en la escena. 

En fin, que puedo dar la mitad de este año por perdida, a menos que considere un logro ponerme al día con series que nunca vi por falta de tiempo.

Nuevo temblor

 Esta mañana tuvimos otro temblor bastante fuerte. Al parecer, su origen fue en Haití, donde fue más fuerte aún. Es muy difícil explicar lo que se siente al escuchar los ladrillos de tus paredes caer y el ruido de la casa al sacudirse, así que no me detendré en eso ahora. 

Lo peor de todo es ver cómo tu vivienda poco a poco se va llenando de grietas y cada día te encuentras un pedacito de pared aquí, y otro allá, que ha caído mientras estabas fuera (porque no solo hay temblores grandes, hay otros menos perceptibles a diario). Y ver que no puedes hacer nada para arreglar esos daños, porque los materiales no existen. O existen a un precio inalcanzable. 

Así que te sientas a esperar, a preguntarte si la próxima vez se caerá la pared completa, junto con el techo (si no se lo ha llevado antes un huracán) y el resto de lo que te queda de casa. A preguntarte si te caerá encima. No te sientas a pensar en soluciones porque no las hay. 

Laberinto del Saber disponible para PC

Ya está casi listo (aún quedan detalles por pulir) el port del nuevo Laberinto del Saber para PC. Pueden jugarlo en Windows o Linux, ya sea con teclado, como en los viejísimos tiempos de principios de los 90 o con un mando. 


 

Disponible para descarga gratis, pero también pueden dejar una donación, que me vendría muy bien para armar una nueva PC.

Ya he visto FF 9, y se las cuento

 Un poco tarde, pero ya he visto Fast&Furious 9. Definitivamente, la peor de la serie, al menos hasta que salga la décima parte, que será incluso más mala que esta. Esto es largo, así que empecemos.

Aunque Dom vive recluido y alerta, sus amigos llegan para fastidiar la tranquilidad. Don Nadie les ha enviado un mensaje de emergencia: su avión está bajo ataque por un agente desertor y transporta algo importante que debe ser puesto a salvo. Dom no quiere inmiscuirse y por suerte, sus socios se van sin quedarse a cenar. Sin embargo, Letty quiere fiesta y se apunta. Al final, como no podía ser de otra forma, el viejo equipo se reúne otra vez.

El avión de Don Nadie, que transportaba a Cipher y un dispositivo secreto, ha caído en un lugar que jamás oímos mencionar y que olvidaremos a los cinco minutos. Lo que importa es que etá en medio de una zona militarizada y los soldados aparecen cuando el grupo ha logrado recuperar el dispositivo. Es hora de que empecemos con los disparates y locuras. En medio de la fuga, Roman se ve en medio de un tiroteo y recibe algunos balazos de AK, que son detenidos por el chaleco. Debería tener varias costillas fracturadas y estar muy machucado, pero no. El chaleco antibalas es mágico, no solo dispersa la energía del impacto, sino que también protege en las partes donde no hay placa balística.

Aquí tenemos la primera presecución en autos de la peli, atravesando selva, un campo minado y cruzando un puente colgante que se cae, pero aquí los autos vuelan, o por lo menos, se cagan en las leyes de la física. Aparece un nuevo personaje, que resulta ser un conocido de Dom: su hermano Jakob. El hermanito se hace con el dispositivo y se larga en una maniobra espectacular con salto al vacío y posterior captura del auto por un avión. Dom no quiere ser menos aprovecha que del puente solo queda una cuerda y embiste el poste a toda velocidad, su auto se amarra solo la cuerda (la IA de Tesla no puede hacer eso) y van a parar al otro lado, con tres o cuatro vueltas al caer para aumentar la complejidad del ejercicio. 

Dom y Jakob están enemistados desde hace años. El padre de ambos murió en una carrera, y durante su estancia en prisión Dom descubre que el desperfecto que causó el accidente tien que haber sido culpa de su hermano menor, así que cuando regresa, lo manda a volar. El dispositivo, llamado Ares, es la mitad de uno de esos Objetos de Película, capaz de controlar cualquier equipo electrónico, ya sea computadora, arma, o un iPhone, que es incompatible con todo. Una idea muy probada. Más que probada, gastada en infinidad de películas y series.

Para encontrar la mitad que falta, Jakob y su empleador han tomado prisionera a Cipher y la tienen metida en una jaula de cristal completamente vacía. Y yo me pregunto, ¿dónde duerme, dónde se baña, dónde mea? Porque en la caja no hay nada de eso. Cipher recupera la posición de la otra mitad del dispositivo, mientras que nuestro grupo de héroes, gracias a unas coordenadas metidas en el mensaje de Don Nadie, se hacen con una base secreta en algún lugar que debe ser muy céntrico, porque está cerca de todas partes. Aquí se les suma Mia, la hermana de Dom, para completar el equipo.

El segundo objeto está en Edimburgo, así que parte del equipo se reúne para poner en peligro a los peatones con otra carrera de autos en medio de la ciudad. Por su parte, Letty y Mia van en busca de la Llave, que es necesaria para activar Ares, que guarda alguna relación con Han, que supuestamente murió en otra película que ya no recordamos. Por supuesto, Jakob se hace con la segunda mitad de Ares, pero nuestros queridos protas se quedan con unos electroimanes muy chulos con tiritas led. Mia y Letty se encuentran a Han, y la Llave resulta ser una niña, la hija de los creadores del dispositivo, asesinados tiempo atrás. 

Los malvados secuaces de Otto el Villano interrumpen la reunión para llevarse a Elle la Llave. Como siempre, el error clásico del villano es dejar varios hombres atrás para que maten a Dom. Joder, a estas alturas ya deberían saber que al protagonista hay que matarlo en el momento. Todo el mundo se escapa para planificar la recuperación de Ares, que ahora tiene una complejidad extra: hay que neutralizar el satélite usado para propagar la señal.

Tej y Roman tienen que volar hasta el satélite, a 80km de altura, para hackearlo, porque no se puede hacer remotamente. Para ello acuden a unos locos que supuestamente alguien conoce de alguna peli anterior, pero que ya nadie recuerda, y arman un auto con varios cohetes amarrados. Lo suben al lomo de un avión (pésimo lugar desde donde lanzar cosas, si me preguntan a mí) y a volar se ha dicho. Cuando llegan al satélite, no les queda más remedio que embestirlo, porque el plan A no funciona debido a unos cables que no resistieron el viaje espacial. Acabarán más tarde en la Estación Espacial Internacional.

Otto activa Ares con Elle, y comienza la transferencia al satélite. Por lo lento que va, debe ser una conexión de Nauta Hogar a 1mb, o debe ser un archivo grande de cojones. Pero si no fuese así, los protas no tendrían tiempo de montar una persecución como Dios manda. 

El villano Otto le pide a Jakob que verifique por qué la señal está interrumpida, pero es una estratagema para sacarlo del camión donde van y que su otro secuaz de relleno lo mate. Cipher ahora está libre y trabajando con él. Pero Jakob se salva con ayuda de Dom, que choca a un carro volcado para que Jakob caiga encima y vaya a parar al blindado ocupado por Mia, que lo recoge y le cede un auto. ¿Alguien se esperaba otra cosa? Porque se veía venir desde el principio, que al final terminarían juntos. Jakob se va, pero luego regresa para echarle una mano a Dom en el asunto de volcar el enorme camión blindado donde llevan Ares. Usando los electroimanes, se aferran a la cabina y hacen que todo ese gusano blindado de más de veinte metros de largo se dé la vuelta hacia adelante. Nada, que ni Mijaín López hubiera conseguido un desbalance así. 

Aunque ahora las ruedas están hacia arriba, el camión sigue avanzando como si nada, dándole tiempo a Dom a reventar el piso, entrar y recuperar Ares. Lo que no logra es salir hasta el último momento, no sin que antes Cipher le dispare varios cohetes desde el dron y que alcancen un precipicio. 

Cerramos con una escena feliz de parrillada entre amigos, cerveza y hamburguesas. Otra escena breve con Jason Statham, para dejarnos ver que es probable que esté en la próxima peli, y chao. 

De lo espectacular a lo ridículo hay solo un paso, y FF 9, no solo ha dado ese paso, sino que además ha cogido impulso y ha dado un triple salto más allá, cayendo en toda una categoría totalmente nueva. No es solo todas las patadas a la física, sino también a la anatomía, con esos personajes que parecen ser de goma que caen, dan vueltas dentro de autos y hasta etcétera. En fin,que si quieres ver esta peli te recomiendo que dejes el cerebro en el refrigerador. 

Intentando compilar O3DE

 Pensaba esperar a que sacaran un release como debe ser, pero a final de mes aún me quedaban unas horas de Internet sin usar y era mejor gastarlas en algo que perderlas. Por eso me puse manos a la obra y descargué el repo y las dependencias, que no pasaban de 4-5 gb. La supuesta compilación fue bien al primer intento, incluso con un Visual Studio por debajo de lo recomendado, pero los problemas comenzaron cuando intenté crear un proyecto.

El asunto es que según la guía, los proyectos se crean desde la línea de comando, se "registran" en el motor y a continuación debemos ejecutar cmake para generar los archivos de proyecto y luego para hacer un build. Un poco confuso, la verdad. Sin embargo, una vez conseguido eso, me encontré que el supuesto editor no estaba por ningún lugar y ahí se enredaron las cosas. Intentar compilar el motor con Visual Studio me produjo un montón de errores.

Conclusión, que no he podido ver O3DE funcionando. Quizás en un estudio profesional con experiencia en Visual Studio y cmake las dificultades serían mínimas, pero si eres un indie que quiere algo listo para arrancar sin complicaciones, esta no es tu mejor opción. Hay que esperar aún que pulan más esos detalles de usabilidad y que sea solo ejecutar un gestor de proyectos, crear y empezar a trabajar.

Al fin he visto Godzilla vs Kong, y se las cuento

 A petición del público (sí, hay gustos que merecen palos) seguimos reseñando/contando pelis de éxito. Agárrense a sus asientos, porque Godzila vs Kong los tendrá durante dos horas al borde de la somnolencia.

Resulta que de alguna forma a Kong (¿donde quedó lo de King Kong?) lo tienen recluido en un domo muy bonito en la Isla Calavera, con selva y todo. El lo sabe, ya veces para joder lanza un árbol gigante y hace goters en el techo. Pero es por su bien, porque si sale, Godzilla vendrá a por él, porque no pueden haber dos titanes alfa. Su única amiga es una niña muda, que se comunica con él mediante señas. Y fíjese usted, en un lugar lleno de cámaras, nadie sabe que Kong también puede usar el lenguaje de señas. 

También tenemos a un tipo conspiranoico con un podcast que trabaja en Apex, una empresa muy grande y con una seguridad de mierda, porque no se han dado cuenta de que tienen a un imbécil trabajando allí para exponer sus secretos. El tipo usa su ingeniería antisocial para hacer que otro se levante de su PC y se vaya al baño sin bloquear la sesión (ya les decía, seguridad de mierda). Se despacha a gusto y descubre que vana  mandar un aparato novedoso y por tanto, muy malvado a Hong Kong, y justo en ese mismo momento aparece Godzilla y arrasa con la instalación.

En vez de evacuar, el gordo conspiranoico se mete más profundo en la instalación y logra ver el aparato en cuestión, que es una bola de discoteca con leds rojos. Ahora nos introducen a otro personaje innecesario: una chica que es seguidora del podcast del conspiranoico, pero que por obra y gracia del guión, tiene razón en algo: Godzilla no suele atacar por gusto. Como es de esperar, su padre no la cree y eso desencadena una especie de misión muy loca con otro personaje de relleno para encontrar al conspiranoico y vivir más aventuras estúpidas. Obviemos la forma en que encuentra al conspiranoico, es estúpida, pero dentro de los parámetros nominales del guionista promedio.

Por otro lado, el dueño de Apex va a ver a un científico que tiene una teoría sobre la Tierra Hueca, el lugar de donde provienen los titanes como Godzilla y Kong. Le hace la pelota diciéndole que es admirador suyo y que tiene razón. Quiere organizar una expedición al mundo de abajo, probablemente por razones muy malvadas (en las pelis, si es millonario, no es bueno). Y aquí viene lo bueno: según el científico la expedición anterior, comandada por su hermano, fracasó porque en un punto del trayecto se producía una ¨inversión de la gravedad muy brusca¨. Así, con dos cojones. Ya me dirán ustedes cómo ir hacia abajo puede invertir la gravedad.

Pero el viejo con pasta dice que han inventado unos aparatos geniales que pueden manejar la ¨inversión de la gravedad". Así que todos contentos y nos vamos al centro de la Tierra a busca la energía de la vida, que allí está a patadas. Pero hace falta un guía: Kong. Así que convencen a la doctora que lo cuida para montar al mono en un barco enorme protegido por una flota. Como van a la Antártida, que está abajo en el mapa, la bajada ayuda a que el viaje en barco tome muy pocos días. Eso, o no sé qué otra cosa será. 

Tal como esperaban, Godzilla viene a fajarse con el mono y de paso, despalilla toda la flota. Así que hay que transportar a Kong por aire. Una vez en la Antártida y habiendo descubierto que la niña puede hablar con el simio, le piden que le diga que su familia puede estar ahí abajo. Así que Kong se lanza a la carrera a cruzar y ellos lo siguen montados en unos carritos voladores y dirigidos por la hija del millonario, que está ahí para supervisar la expedición. 

No nos olvidemos del conspiranoico y sus dos compinches de relleno. De alguna forma se logran colar en la instalación destruida de Apex y por casualidad se meten en una cápsula de transporte maglev futurista, directo a Hong Kong, donde van a descubrir una cosa asombrosa.

Por su parte, la expedición se lanza hacia la Tierra Hueca y en el punto donde supuestamente debe ocurrir la inversión de gravedad... pues lo que vemos es que sigue cayendo hacia abajo, con normalidad, y no vemos inversión por ningún lado. En efecto, hay un mundo selvático ahí abajo y no lo sabíamos. El único lugar donde parece haber gravedad invertida es en cierto punto donde hay unas rocas flotando y el techo dela caverna está más cerca. Kong salta hacia allí y descubren una salón giantescon, donde hay vestigios de otros simios titanes, abunda una piedra brillante y alguien se ha dejado un hacha enorme botada. 

Por su parte, los infiltrados que  sobran descubren lo que Apex guarda en Hong Kong: un mecagodzilla (no confundir con mecagoengodzilla, eso es otra cosa). El bicho es funcional, pero necesita la energía de la Tierra Hueca para alcanzar su verdadero potencial. Esto es debido a que la cabina remota del piloto del mecagodzilla es un cráneo de un antiguo titán, que está conectado por tubos a... algo que combina el ADN del titán con el robot. Aquí el nivel de estupidez de guión crece a niveles incomprensibles para los meros mortales como nosotros. 

Godzilla llega a Hong Kong, donde percibe que está su oponente el mono. Allí utiliza su escupida de plasma y abre un agujero hasta el mundo hueco.

Para no hacer el cuento muy largo, la hija del millonario toma una muestra de la piedra brillante que contiene la energía de la vida. ¿Y cómo la envía hacia arriba? Agárrense: mediante una transferencia de datos. Por supuesto ahí las cosas se tuercen, porque al descubrirse el plan malvado, alguien amenaza a la niña y Kong ruge, atrayendo unos murciélagos muy bestias que se zampan a todo el mundo. La millonaria junior intenta escapar por el hueco que acaba de crear Godzilla, pero comete el error de dispararle a Kong para que se aparte. Baste decir que no la veremos más en esta historia.

Kong y los que quedan vivos suben por el hueco hasta la superficie, donde ni siquiera el hacha gigante lo salva de que Godzilla le da otra paliza, solo para que a continuación con que el mecagodzilla le da una paliza a él y encima, se sale de control y mata a su piloto con un corrientazo. 

La niña le explica a Kong que Godzilla no es su enemigo, y le pide que lo ayude a derrotar al robot. Así que ahora los dos son socitos y desguazan al mecagodzilla, con la ayuda innecesaria de los tres personajes de relleno, que rompen la consola de control del robot echándole whisky. Muy improbable que funcione, así que no lo intenten en caso apocalipsis robótico. Luego se quedan Kong y Godzilla en plan ¨te daría una hostia, pero me están esperando en casa¨ y de ahí pasamos al final feliz con el simio viviendo en la Tierra Hueca en compañía de la niña y los científicos.

En resumen, eso es Godzila vs Kong. Manténganse en sintonía, porque muy pronto tendremos otro estreno: Rápido y Furioso... ¿qué número era? Bueno, el que sea.

Dungeons and Honor arrasa en su estreno

 Si somos rigurosos desde el punto de vista histórico, el primer juego multijugador cubano fue Netris Kombat, un tetris desarrollado por miebros del legendario equipo Merchise. Pero para la nueva generación de jugadores cubanos, que jamás conoció un título multijugador hecho en casa (y que de hecho, ha conocido muy pocos juegos ancionales que valga la pena jugar) Dungeons and Honor se ha instalado como el primer juego online cubano. El que pueden jugar con "datos nacionales", o sea, el bono de tráfico local que ofrece ETECSA al comprar un paquete de datos, y con un consumo mínimo. El que pueden jugar sin necesidad de VPN, y sin descargar gigas y gigas de actualizaciones. Un juego pensado y hecho a la medida de nuestro país.


 Desde su lanzamiento el 28 de julio ha alcanzado miles de descargas registradas y otras muchas no registradas. El grupo de telegram ha saltado de 50 miembros a más de 100, que están exigiendo más modos de juego, más contenido, más, y más y más. Quizás comparado con otros lanzamientos parezca poco, pero estamos hablando de Cuba, un país que hace 5 años no tenía internet en las casas ni en los teléfonos.  

El juego presenta muy pocos bugs y las quejas de los jugadores son más bien debido a la alta latencia del servidor. Pero eso ya es responsabilidad de ETECSA como proveedor de servicios.

Dungeons and Honor viene a probar algunas cosas. A falta de una plataforma de venta de juegos de PC, los móviles son el mercado más prometedor, y el único en Cuba. La única forma legal de obtener ingresos es mediante micropagos, usando SMS premium, aunque la mayor parte de las ganancias (60%) se las quedan ETECSA, dueña de las redes telefónicas y DESOFT, que desarrolló la pasarela de pago. Es posible vivir de los videojuegos en Cuba, hay un mercado de gamers ávidos por consumir productos nacionales. Estamos logrando erradicar el estigma de que juego cubano es igual a mala calidad y chapucería. Y por último y más importante, el público nacional quiere juegos online. No son pocos los que exigen un MMORPG al estilo WoW. El problema es desarrollar y rentabilizar un producto así. 

Y les dejo un gameplay, para que tengan idea:



He visto Viuda Negra

 La película empieza con una familia de espías soviéticos dándose a la fuga al estilo americano, con persecución policial, tiros y todo. Papá espía, mamá espía y las hijas acaban en una base aérea en Cuba, donde son recibidos por Dreykov, que suponemos sea un alto miembro del PCUS, que se lleva a las dos niñas sin que al padre (que es el Guardián Rojo, una especie de Capitán América soviético) parezca importarle mucho. A la madre se la llevan herida, así que no tiene mucho que decir.

Pasamos a veinte años después, que es más o menos lo que se toma ver todos los créditos, lo cual nos deja más o menos después de Avengers Civil. Tenemos a las dos hermanas, Natasha huyendo del gobierno americano, y a Yelena persiguiendo a una mujer desconocida junto a una delegación deportiva. Logra dejar casi muerta a su objetivo, pero en el último momento la víctima le rocía  algo en la cara que la hace liberarse del control al que está sometida, o eso se suponemos, por lo cariñosa que se pone con la difunta. A continuación, sale echando y sus compañeras la reportan como desertora. De paso, se lleva unos tubos con el mismo gas que le echaron en la cara.

Natasha se ha ido a Noruega o un lugar parecido, y sin venir a cuento le traen unas cosas que había en otro piso seguro de Budapest. Ni se molesta en revisarlas, pero como tiene Noruega es un lugar muy ecológico y ella vive en medio del bosque, tiene que botar la basura en la ciudad. Así que echa la caja con cosas en su auto y se va a por gasolina. Aquí se le aparece Taskmaster, alguien vestido con una armadura y una copia rusa del escudo del Capitán América, que pretende quitarle el maletín, dentro del cual, oh sorpresa, están los tubos de gas. BTW, lo único que este Taskmaster comparte con el de los comics es su capacidad para imitar los movimientos de otros.

De alguna forma, Natasha se lleva los tubos de gas y deja a Taskmaster con el maletín vacío. Se larga a Budapest y gracias a los milagros de la narrativa pobre va directo al apartamento de su hermana, donde ambas tienen una de esas peleas entre hermanos tan comunes, sin venir a cuento. Luego Yelena explica que le envió el gas para que lo estudiaran, es la única forma de romper el control que Dreykov tiene sobre las chicas de la Sala Roja. Natasha creía haberlo matado, pero no es así.

El enternecedor reencuentro se ve interrumpido por la delegación deportiva de la Sala Roja, durante la pelea una de las mujeres sale herida y Dreykov la obliga a suicidarse por control remoto, delante de Natasha. Ambas hermanas deciden liquidar a Dreykov, esta vez de verdad, pero hay un problema: nadie sabe dónde encontrar la Sala Roja. Así que el reencuentro familiar continúa, ahora van en busca de Alexéi Shostakov, el Guardián Rojo y falso padre, que por alguna razón ha pasado de super héroe ruso a presidiario. Tenemos una escena estándar de escape de prisión al modo super héroe, pero Alexéi no sabe dónde está Dreykov. Seguimos rumbo a San Petersburgo, a buscar al último miebro de la falsa familia: Melina, la madre.

Luego de algunas discusiones (¿qué familia no las tiene?) las chicas de la Sala Roja aparecen para cargar con todo el mundo, llamadas por Melina. La dichosa Sala Roja está en el aire, en un aparato enorme que va volando por ahí. Joder, alguien debería haber visto una estructura inmensa flotando por ahí, o aparecería en los radares. 

Para no hacerles el cuento muy largo, se trata de un plan cuidadosamente pergueñado por Natasha y Melina. La primera, con una cara falsa de su madre, se encuentra con Dreykov en su oficina. La segunda con el rostro de Natasha, es encerrada junto a Alexei y lo ayuda a escapar. También le indica a Yelena cómo liberarse y encontrar el gas para romper el control de Dreykov.

El susodicho está teniendo una charla amena con Natasha, a la que ha descubierto desde el primer momento. El control de Dreykov se basa en unas feromonas, que si nos ponemos técnicos, es algo un poco complicado si eres humano, porque nuestro olfato no es tan sensible. Más que feromonas, son todo un alucinógeno. Cualquiera que esté cerca de Dreykov olerá esas feromonas y será incapaz de dañarlo. Taskmaster resulta ser la hija de Dreykov, que salió bastante dañada del intento anterior de Natasha de matarlo, ahora tiene la cara pasada por una freidora y un puerto USB en la nuca.

Sin embargo, es posible evitar el control: seccionando un nervio (así mismo) que va de la nariz al cerebro. Aquí viene la perla del guión, Natasha se da un golpe en la nariz y "secciona" el nervio, rompiendo el control. Bastante estúpido, pero entra en los valores nominales de estupidez de un guionista de alto nivel de Hollywood. Dreykov se escapa y deja a Natasha en buenas manos: las de la delegación deportiva, que le da una paliza de espanto.

Por su parte, su madre Melina ha roto uno de los motores y todo el tinglado empieza a caerse a pedazos. Eso es lo malo de las madrigueras de super villanos: se rompe la taza del baño y a continuación va explotando el resto poco a poco. Yelena aparece y salva a su hermana. Todo el mundo intenta salir echando del lugar y Natasha libera a Taskmaster, que se ha quedado encerrada en su pelea anterior con Alexéi. Dreykov coge un helocópteroavión, o aviocóptero, o lo que sea, pero Yelena le suelta un palo en el motor y explota todo. Lo mismo, se les poncha una goma y bum, ya no los hacen como antes. En cambio, al que cogen Alex y Melina se le rompe la cola y aún así aterriza. No es justo.

Viene una breve pelea con Taskmaster, donde Natasha usa el penúltimo tubo de gas para liberarla y al fin pedirle disculpas. También, al fin, acaba la peli. Y no les cuento la escena post-créditos porque me da pereza. En conclusión, no está tan mala como me habían dicho, aunque sí hay que reconocer que a la Viuda Negra le ha tocado la más floja y a mí me ha llevado dos días verla. Esto es todo por ahora y nos vemos en la próxima reseña.

Refactorizando el Laberinto

Ahora que no tengo PC en casa me es imposible dedicar tiempo a concentrarme como debe ser en ningún proyecto, así que solo me queda estudiar y probar pequeñas cosas. Tenía pendiente pulir el Laberinto del Saber y ponerlo a punto con vista a subirlo a Google Play y sacar una versión de PC, y eso empezaba por corregir las animaciones. Esto implicaba cambiar el sistema actual a uno que usara AnimationTrees. Les advierto desde ahora, que los AnimationTrees, o su equivalente en el motor que utilices, son esenciales si quieres hacer algo más o menos profesional. 

 Por supuesto, esto trajo consecuencias: algunas cosas dejaron de funcionar porque dependían de los AnimationPlayers, como por ejemplo las señales de animación terminada. He tenido que iniciar un proceso de refactorización de código que no sé a dónde me lleve porque lo hago en condiciones que para nada propician el pensar y rediseñar la arquitectura del juego. Esto no estaba en los planes.

El objetivo final es que se ejecute la animación correspondiente a la dirección del movimiento, para el jugador y el fantasma. También que el juego funcione igual en un dispositivo móvil o en una PC con teclado o mando. Existe una propuesta por ahí para almacenar la partida y los rankings en una nube nacional, pero eso aún no se ha concretado bien. Las mecánicas del juego sí no sufrirán cambios.

Así que en algún momento tendremos versión para PC.

Ley de Murphy

 Entre los escritores de Santiago de Cuba tenemos a uno que se ha ganado el mote de Murphy, por un cuento humorístico que escribió acerca de un tipo con muy mal día. Definitivamente, me ha tocado un mal día: mi motherboard se ha roto.En la noche del jueves se congeló el sistema y ahora enciende a veces, funciona cinco minutos y se apaga, o se apaga unos segundos después de encender, y vuelve a encender sola y apagarse.

Me dicen que las Gigabyte B250  padecen de ese mal y  que es solucionable, pero que la mejor opción es evitar comprar Gigabyte y Asrock. En otro lugar del mundo eso no sería un problema grave, pero aquí sí lo es. Casi no entran partes de computadoras al país y las pocas que hay valen carísimas. Por tanto, solo me queda la opción de intentar el arreglo y considerar cuidadosamente si quiero vender algo que no tengo la seguridad de que va a durar. En caso de no tener salvación, tendré que tomarme varios meses de vacaciones, hasta que alguien venga desde Estados Unidos y me traiga un reemplazo, porque no pienso pagar los precios, más que estratosféricos, cósmicos, que están pidiendo aquí.

De toda formas, necesitaba un alto. La espera por Godot 4, y ahora por una versión usable de O3DE, ha sido casi estresante.


Lumberyard ahora es libre y se llama O3DE

 Hay un nuevo motor de juegos libre, y esta vez es un contendiente serio: Amazon acaba de liberar Lumberyard bajo licencia Apache 2.0, que es muy permisiva, renombrándolo como Open 3D Engine, O3DE. Para los que no estén al tanto de la historia, en una era olvidada de caos, anterior al tiempo y al Unreal 5 (o sea, hace como cinco años), Amazon hizo un acuerdo con Crytek por el que obtuvo el fuente de CryEngine. La nueva criatura nacida de ese diabólico pacto se llamó... Lumberyard (inserte aquí unos truenos). 

Lumberyard era gratis o algo así, pero no libre en el sentido estricto de la palabra. Como todo derivado de CryEngine, podía ofrecer una calidad gráfica excepcional. Pero el mercado de motores de juegos estaba saturado. Teníamos Unity, Unreal, y si de veras querías el CryEngine, podías obtenerlo gratis de Crytek y pagar lo que te viniera en ganas después.  En cambio, Lumberyard lo único que ofrecía era integración con AWS, la nube de Amazon.

No sé si alguien lo habrá explotado a fondo, pero definitivamente, no es un motor de primera línea. Sin embargo, con esta movida Amazon se posiciona en un mercado con espacio para más contendientes, con una oferta tentadora. O3DE ofrece un renderizador increíble que permite imágenes fotorrealistas, soporte para Windows, Linux, Mac, iOS, Android y consolas. Además, cuenta con el apoyo de grandes de la industria, como Adobe, Huawei y otros, y ha sido recibido con entusiasmo por algunos estudios de cierto renombre. El proceso está supervisado por la Linux Foundation, lo que nos da un margen de confianza aceptable, y se creará la Open 3D Foundation, para acelerar la colaboración con los desarrolladores.

La oferta parece tentadora si necesitas un motor profesional en todos sus aspectos, para un proyecto de alto nivel, o incluso para un proyecto de menor envergadura. De todas formas, recomiendo echarle un vistazo si puedes permitirte clonar el repo y compilar tú mismo.

Les cuento La Guerra del Mañana

 ¡Volvemos con las reseñas de pelis! Yo hago el sacrificio de verlas para que ustedes se ahorren el mal rato. Hoy hablaré de La Guerra del Mañana. Es una jodienda cuando sabes lo que va a suceder antes de que suceda, pero ahí está lo malo de ser escritor. Que te imaginas la peli como si la hubieses escrito tú, pero peor, que ya es mucho decir. En concreto, de esta ya desde el trailer me suponía cosas, como les cuento más adelante.

El filme nos narra una invasión alienígena en el futuro, que está a punto de borrar a la humanidad, así que la solución es volver al pasado a reclutar más soldados que vayan al futuro a que los invasores espinas blancas los usen de alfileteros. Como solo el 50% de los soldados son aptos para saltar, hay que rellenar con civiles. Los criterios de selección no quedan muy claros, salvo que son gente que está a pocos meses o años de palmarla. Aparte de eso, se dedican a sus familias, sus vidas, o lo que sea. Vamos, que no están haciendo nada útil, por lo que no hay problema si los mandamos a la guerra durante una semana, a que maten al 70% de ellos y el resto quede mutilado.

Así que a nuestro protagonista le toca dejar a su esposa e hija para ir a salvar el futuro. El tío ha sido soldado, pero es también medio científico, aunque no consigue trabajo como tal y tiene que conformarse con dar clases. Su hija va por el mismo camino, el de ser científica, digo. Completamos el cuadro con un padre veterano de Viet Nam que abandonó la familia al volver de la guerra y ya tenemos un personaje con profundidad, como dictan los manuales de escritura.

En fin, que nuestro prota se va y ya me venía oliendo yo desde el trailer que iba a encontrarse con su hija ya mayor, y así fue. Qué puedo decirles, soy una especie de Nostradamus. La hija es una investigadora de alto rango entre los pocos supervivientes que quedan, y está organizando una misión para capturar a una de las hembras de los invasores y desarrollar una toxina que la mate. Por supuesto, en la misión de captura la diñan unos cuantos y luego de escapar por los pelos, es un buen momento para una charla entre padre e hija que les ahorraré, por no aportarle nada a la historia salvo un poco más de confusión y unos minutos que pudieran haberse invertido en algo más interesante. Como otra batalla, por ejemplo. 

Para no divagar mucho, la chica lista acaba por descubrir la toxina y le pide a su padre que vuelva al pasado, donde existe la capacidad industrial para fabricarla masivamente. En ese momento, el último reducto de la humanidad es atacado por cientos de miles de espinas blancas. Si podían hacerlo, ¿por qué no lo intentaron antes? Quizás les daba pereza. La hembra cautiva se libera, y como no puede ser de otra forma, matan a la hija del protagonista, que en el último segundo se salva, al ser retornado en el tiempo cuando expira su período de servicio. 

Y aquí viene lo bueno. Nuestro héroe intenta detener la invasión antes de que empiece, usando la toxina creada por su hija en el futuro. Para ello, localiza el punto de orige de la invasión, en un glaciar ruso, y con ayuda de su padre y otros soldados, va para allá. Sin el más mínimo apoyo del gobierno, oiga, porque ¿quién va a estar interesado en salvar el futuro al costo de un miserable avión y un equipo SEAL cuando el presente está tan jodido? Supongo que se preguntarán, ¿y la paradoja temporal que causaría eso? Si detienes la invasión, no hay razón para que se cree la toxina en el futuro. Pues la solución a tal paradoja es simplemente hacer como que no existe y ya. O creernos que aunque haya una línea temporal donde la humanidad fue aniquilada, en esta otra podremos tener un final feliz.

Los espinas blancas han llegado en una nave que está enterrada en el hielo, que en unos 30 años se derratirá, dejándolos libres. Al parecer, son una especie de arma de los verdaderos tripulantes de esa nave y están guardados en unos capullos. Como no puede ser de otra forma, varios de ellos escapan, incluyendo a una hembra que casualmente, se parece mucho a la que vimos anteriormente en el futuro (o debería decir que veremos despuésmente). Viene a continuación una pelea mano a mano, o mano a garra/tentáculo lanzaespinas entre el padre, el prota y la hembra. Durante la misma, nuestro héroe le inyecta la toxina en una pata, que empieza a descomponerse y se cae a pedazos. Tal como me esperaba, la espina blanca se arranca la pata de una mordida, para evitar envenenarse, así que hay que seguir la pelea, hasta que el protagonista logra meterle otro tubo de toxina por el gaznate y empujarla por un precipicio que estaba por allí cerca. Siempre debes pelear cerca de un precipicio, porque puedes empujar al malo mientras dices alguna frase impactante. 

En fin, que en esta peli el guionista se ha pasado la lógica de los viajes en el tiempo por el forro de los cojones, aunque para otras cosas ha respetado el manual. Si desconectamos el cerebro y disfrutamos solo de las peleas con los bichos alienígenas la cosa no está tan jodida.

Puntos fuertes: Hay peleas y aliens tronchando terrícolas, algo que es divertido de ver (hasta que ocurra en la realidad y entonces no será tan divertido).

Puntos débiles: Paradojas temporales tan grandes como las de Avengers Endgame, no hay suficientes peleas con aliens.

 Les recuerdo que sin no han comprado todavía mi remake de El Laberinto del Saber, pueden hacrelo aquí en Apklis. Por favor, no se demoren, que necesito comprar un yate nuevo.

Experimento: resucitando proyecto de Unity

 Llevaba más de un año sin mirar Unity, e incluso no lo había instalado luego de cambiar mi sistema hace poco. El tiempo no me alcanza para refrescar los conocimientos ni probar cosas fuera de Godot. Ahí están Unreal 4 y 5, esperando que me digne a mirarlos. Además, Unity se está poniendo complicado para usarlo desde Cuba: requiere conexión para muchas cosas y siempre detrás de una VPN. No es un obstáculo insalvable, claro, pero yo aún no tengo Internet en casa (quizás a fines de año).

A pesar de eso me tomé unos minutos para reabrir un viejo proyecto y solucionar todos los problemas derivados de saltar desde Unity 2019 a 2021. Año y medio de progresos, en teoría. Para mi sorpresa, el lightmapper basado en GPU aún sigue en preview. En general, el proyecto se ve igual y podrán juzgar ustedes mismos porque pienso grabar un video y subirlo mañana.

Probando el contenido de Quixel

 Hace algunos años, y gracias a la ayuda de un amigo del exterior, logré conseguir que una de mis cuentas de correo tuviera acceso a Epic. En aquel momento me servía para descargar el código fuente de Unreal, y ahora resulta que me viene de perlas para acceder a Quixel Megascans, que por si no lo sabes, es una colección bestial de modelos de alta calidad con sus correspondientes texturas PBR, a 4K y hasta 8K. Además, casi todo es modular, o sea, que está dividido en secciones que puedes unir a tu gusto para armar lo que se te ocurra. En vez de una casa, tienes diversas paredes y puertas. No es la panacea, pero puede resolver un problema puntual.

El contenido de Quixel es gratis si lo usas con Unreal (si tienes Quixel Bridge incluso descarga más rápido), pero a mí solo me interesa echarle un vistazo y poner a prueba Godot 4 en privado. Aunque la calidad visual es excepcional, tengo que aclarar que en algunos puntos me decepcionó. Por ejemplo, descargué algunas secciones de muros y me encontré que a diferencia del preview, el modelo solo incluía uno de los lados del muro. En un caso específico, duplicar y rotar no me producía un muro completo y utilizable, pues quedaban huecos entre una mitad y la otra. 

En Godot 4 se produce un efecto curioso: desde lejos la textura se ve borrosa y solo se ve bien si acercas la cámara. Considerando que ni siquiera es un motor en estado alfa, podríamos achacar esto a algún error de renderizado. Pienso hacer algunas pruebas con Unity y Unreal cuando encuentre algo de tiempo a ver qué sucede.

Pasando a Godot 3.3

 Al final hemos terminado dando un salto desde la 3.2 a la 3.3, pero supongo que eso ya lo sabían. Elcambio me ha afectado principalmente porque ahora necesito un SDK de Android superior y todos los cubanos hemos puesto el grito en el cielo. La verdad, los que no viven en Cuba no tienen ni idea de lo que cuesta hacerse con un SDK o NDK. Solo obtuve el de Windows, aunque ya tengo planes para descargar el de Linux también. 

La migración ha ido muy bien, aunque al principio le atribuí unos problemas que eran, por supuesto, culpa mía. Estoy en proceso de pulir El Laberinto del Saber (si estás en Cuba, puedes comprarlo aquí) para quizás, si todos los astros se alinean en una conjunción perfecta, poderlo poner en Google Play y quizás, solo quizás, también en GoG. O en cualquier otro lugar. 

También lo he utilizado para un nuevo proyecto 3D, pero aún no he avanzado lo suficiente como para poder formarme una opinión. En general, la rama 3.x no me convence más allá del 2D y mi experiencia, aunque limitada, está llena de problemas de rendimiento y diseño. Espero que en un par de meses ya esté halándome los pelos por la desesperación.

Haciendo el trabajo sucio: compilando las plantillas de exportación de Godot

 De momento no hay plantillas de exportación para Android de la rama master, porque básicamente es menos que alfa, aunque dicen que ya está cerca. Por eso, si quería hacer pruebas reales tenía que poner manos a la obra y crearlas yo. 

El proceso está documentado en la ayuda, por suerte, y en teoría no es difícil, solo trabajoso. Sin embargo, si estás en Cuba o cualquier otro país sujeto a un embargo estadounidense, la cosa se complica. Para empezar necesitaba un SDK de Android actualizado y solo pude conseguirlo para Windows. También el correspondiente NDK. Todo eso lo obtuve vía VPN, aunque al costo de mover mi entorno de desarrollo a Windows. Como les decía, si cuentas con una conexión rápida y sin restricciones, el proceso de compilación descarga todo lo necesario mientras te preparas un café, te tomas una cerveza o haces cualquier cosa de esas que involucre comida o bebida y que yo no puedo hacer (porque no tengo ni café, ni bebidas y de comida voy justo).

Sin entrar en detalles, porque todo está bastante claro en la documentación, y cuando digo todo, es todo, el proceso involucra múltiples compilaciones del motor, dos para cada arquitectura si quieres tener debug y release. En mi caso, me salté el debug y la arquitectura x86, lo cual redujo las compilaciones a las dos de ARM y la espera a más o menos una hora. No disponía en ese momento de mi propio build del editor de Godot para Windows, así que me había bajado un nightly build y enseguida logré exportar mi apk sin problemas. Hasta ahí los cuentos de hadas y el final feliz. Cuando probé el proyecto en el teléfono me dio una pantalla negra unos segundos antes de cerrarse. Sabía que podía pasar, pero uno tiene sus esperanzas a veces.

Las razones pueden ser muchas: que Godot 4 aún no corra en Android, que el renderizador Vulkan no sea compatible con mi teléfono, que mi teléfono no soporte Vulkan adecuadamente... hay para escoger.
No queda más que esperar unos meses a ver si llega el alfa, el renderizador secundario GL ES 3, y volver a probar. Lo que sí me queda claro es que a finales de año si ya alcanzamos una beta estaremos de suerte.

Dungeons and Honor, multiplayer hecho en Cuba

 Y además, indie, trabajo de un solo desarrollador. 


En estos días subiré otra partida. Les debo (y les deberé) el stream en vivo porque acá la velocidad de subida es más falsa que un dólar con la cara de Tutankamón y es insuficiente para esos lujos.

Reporte de progreso, devlog

 O como quieran llamarlo.

El master está más o menos usable según lo que quieras hacer. No recomiendo que intenten nada que tenga que ver con gráficos y creación de escenas, pero tirar líneas y ver si funcionan no los matará de una rabieta. Lo que he hecho en los últimos días es armar parte de la base del sistema RPG y probar números.
Casi todo el trabajo se lo han llevado los ítems. Es bastante básico y lo implementado hasta ahora es muy poco: las armas dañan, las armaduras protegen y cualquier objeto puede proveer algún tipo de bonificación por su uso. Armas y armaduras pueden equiparse, o en este caso, escudo, porque no tengo armaduras para probar. Lo de montar objetos sobre el personaje requiere un pulido a fondo, pero me sorprendió que me resultó muy fácil. La vez anterior me encontré todo tipo de problemas de escala y cometí errores enormes debido al desconocimiento. Ahora es posible crear objetos complejos, que incluyan, por ejemplo, un sistema de partículas, porque cada objeto es una escena. No estoy muy seguro de que esto funcione bien en un móvil de gama media baja, por eso no lo considero una funcionalidad definitiva.


 

Hice un pequeño experimento para crear una escena grande con carga progresiva por secciones. Nos preocupaba mucho el impacto que tendría en el rendimiento un escenario muy grande y complejo, pero en lo personal, me opongo a sacrificar el espacio y limitarnos a pequeñas salitas. Por tanto, me dediqué a comprobar qué tan factible sería particionar la escena. La prueba no salió mal: la carga era imperceptible (de nuevo, el resultado podría variar según el móvil), quizás porque los elementos de la escena ya estaban en memoria. El método que utilicé fue un poco burdo: instanciar las escenas cuando el jugador se aproxima a ellas, eliminarlas cuando el jugador se aleja, todo eso fuera del área visible. Quedan un montón de incógnitas (digamos, qué hacer con los NPCs de una sección al eliminarla), pero no quiero ni pensar en eso ahora.

El trabajoso asunto de los números

 Mientras nos llega Godot 4, he estado trabajando en la base del sistema RPG: objetos y habilidades. Ambas cosas requieren probar y afinar las fórmulas, que después tendrán que ser reajustadas cuando se implemente el combate real, y vuelta a reajustar cuando los jugadores las pongan a prueba. Pero ahora mismo, es solo la fase de sacar cuentas. O como dice un colega: el papeleo. He tratado de no enredar mucho porque mis matemáticas no son buenas y para que el jugador no tenga que echar números sin necesidad. En teoría, un punto invertido en cualquier atributo tendrá un efecto perceptible en los cálculos que incluyen dicho atributo. Un punto invertido en Fuerza, por ejemplo, produce varios puntos de daño adicional, en dependencia del arma.

Aún en un sistema RPG simple como el que estoy creando, el trabajo conlleva muchas pruebas y tiempo. En primer lugar tengo que descubrir qué es implementable con mi actual dominio del motor, que está muy lejos de un sistema como el de Diablo 2 o DOTA 2. Lo que he podido hacer hasta ahora es algo más simple: cuatro atributos, de los que derivan cosas como esquiva y precisión, y algunos bonificadores/penalizadores que pueden afectar esos atributos y las habilidades. Estas últimas también pueden afectar los atributos, o en caso de las pasivas, el daño de las armas y habilidades, estadísticas derivadas, o cualquier otra cosa que pueda crear por el camino. 

En estos días he logrado implementar los daños básicos (aunque solo he probado el de tipo normal) y una armadura que protege al objetivo. El siguiente paso es agregar un uso más realista introduciendo el temporizador de las acciones, en dependencia del cooldown del objeto o habilidad, y sincronizar eso con una animación. Por suerte, tengo un modelo con animaciones que puedo utilizar. 

Poniendo a prueba Godot 4

 Pretendía traer un video comparando Godot 4 antes y después de su optimización, pero en el momento de grabar las comparaciones me encontré con un problema: aún desactivando VSync el proyecto no pasaba de 60 cuadros. Lo atribuí a algún error en Godot, en definitiva ni siquiera estaba en fase alfa, miles de cosas no funcionan como debe ser. 

Hace dos días me dediqué a revisar la configuración del proyecto, buscando los cambios recién implementados. Noté que no había tocado la configuración multihilo, que por defecto viene a Single Thread. Al cambiarlo a Multi Thread el rendimiento se disparó, alcanzando los 90 FPS, con picos de más de 100, aunque lo normal es que varíe constantemente. El por qué de los saltos entre 80 y 120 FPS de un segundo para otro escapa a mi comprensión. He tomado prestado un modelo de otro proyecto, con alta calidad y texturas PBR, además he subido al máximo todas las opciones de calidad y GI, excepto FXAA porque afectaba la textura de la cota de malla (se volvía borrosa).


En caso de que piensen que 100 FPS con una escena casi vacía no es gran cosa, yo también pensé lo mismo, hasta que recordé que estoy usando los drivers libres, no los propietarios de AMD. Es lógico que el rendimiento no sea el máximo posible.

Hasta el domingo pasado, el master sigue (y seguirá) en un estado no apto para el trabajo. Ha sido corregido un problema que me molestaba: la serialización de las variables export, que nos e guardaban, y junto a eso, el detalle que no me permitía exportar un String porque el editor no dejaba modificar. Ahora ya puedo hacer ambas cosas. Persiste el error de indexado de diccionarios, es imposible usar la sintaxis [] para leer el valor de un miembro. En cambio, sí puedes usarla para escribir el valor. O sea:

a = dicc["miembro"]  #No funciona, hay que usar a=dicc.get("miembro")

dicc["miembro"]=valor  #sí funciona

Curioso. 

En otro orden de cosas, Juan Linietsky, uno de los fundadores de Godot y ahora mismo el desarrollador principal, afirma que su última gran tarea será la implementación del renderizador GL ES 3. Luego de eso seguirá involucrado, pero con cosas más sencillas. Pero que no cunda el pánico, que afirma que hay contribuyentes capacitados para hacerse cargo.


El tamaño (del lag) sí importa

 He vuelto a jugar Dota. No es que la vez anterior jugase mucho, porque casi todo el tiempo estaba en proceso de actualizar y con una conexión lenta es para morirse. No es que yo sea un gran fan, ni un jugador profesional, pero me divierte y de hecho, lo descubrí cuando aún era un mapa de Warcraft 3.
O sea, que no se las den de listillos conmigo, que yo estaba ahí cuando empezó.

 

Pero nada, como les decía, no soy un as jugando. A decir verdad, me dan unas buenas palizas, a menos que juegue con un equipo bueno contra otro malo. Tampoco me sé con exactitud los builds por héroe, yo tiro de lo primero que me apaezca en la tienda. Algo que no ayuda en nada es que si estás en Cuba ya partes con desventaja.
El primer día tenía una latencia más o menos aceptable, sobre los 100ms. Me lucí con el Sniper, en las partidas de aprendizaje.  Miren qué cosa más chula:

El segundo día ya las cosas no fueron tan fáciles en las partidas normales. Las regiones con mejor latencia no bajaban de 350 ms. Y  eso, lamentablemente, se siente. No llega a medio segundo, pero marca una diferencia sustancial. Es la diferencia entre acertar un toletazo con el Rey Mono y fallarlo (los fallé casi todos). Es la diferencia entre apartarte a tiempo y que te atizen en toda la cabeza. Sumen a eso mis errores de principiante contra gente que ya sabe jugar, con eso basta para evitar tenerme en el equipo porque soy la garantía de la derrota.
Es un mal que padecemos los cubanos. Incluso dentro de la red nacional, los pings a los nuevos VPS de ETECSA son de 300 o 400. No sé para qué carajo tenemos un cable de fibra de una punta a la otra del país. Con esa latencia es imposible crear un MMO al estilo de For Honor, o algo parecido. Nada de combates en tiempo real. Por eso, la próxima vez que te quejes de que tus 20 mbps y tu latencia de 90 ms, recuerda que aquí estamos mucho peor.

Si crees que tu lanzamiento ha sido terrible, mira el mío

 El jueves pasado me adelanté a mis planes y subí la versión de venta del juego a la plataforma Apklis, que si no lo sabes, es la tienda cubana de aplciaciones móviles (para Android, por supuesto). Tenía pensado lanzarla el viernes, pero decidí no esperar y ponerla con antelación a disposición  de algunos amigos. Pues ya es domingo y la aplicación aún no aparece a la venta. Por suerte, no anuncié de antemano la fecha de salida.

El caso es que Apklis se ha visto saturada por la salida de una aplicación que permite a los usuarios ver el estado de las ventas en la página de comercio electrónico. Han bastado 25 mil compras en pocos días para poner la plataforma de rodillas. La gente se queja de que paga por la app y no se descarga, o se descarga y no funciona, o recién están descubriendo que sus nombres de usuarios son inválidos por contener espacios y caracteres indebidos. Algo que no se advierte de forma bien visible en ningún lado, ni se valida cuando te registras.

Arreglados estamos si una plataforma de venta no logra manejar unos miles de transacciones diarias. 

Entonces, no me queda más que esperar a que la saturación disminuya con el tiempo, lo cual podría tomar un par de semanas. Es evidente que Apklis necesita una mejora en sus servidores urgentemente, y creo que con sus ingresos pueden permitírselo. Solamente de Comprando En Cuba, la apk de la discordia, deben haber ingresado unos $113 mil pesos, equivalentes a precio oficial a unos $4700 USD. Supongo que con eso algo se puede hacer.

Reporte de estado, Godot 4

 
Para que evitarles malestar a su cuerpo y malas noches a su familia, en este blog nos dedicamos a hacer de piloto de pruebas para software pre-pre alfa, como Godot 4. Así pueden aprender de mis experiencias (buenas o malas) y obrar en consecuencia. En realidad no pretendía involucrarme mucho con Godot 4 hasta dentro de un par de meses, pero tuve que hacer un alto en el trabajo de diseño y meterle mano al código. Me di cuenta de que no tenía idea de cómo implementar mi propuesta de sistema de habilidades, o sea, que corría el riesgo de cagarme fuera del cajón.

A ver, Anteriormente en Godot 4... La última vez que trabajé con la rama master se dañó irreparablemente una escena que me había costado hacer. El sistema de renderizado 3d fallaba bestialmente con modelos animados y ni siquiera conseguí comparar la mejora de rendimiento luego de las optimizaciones (aunque lo primero fue lo que me detuvo). Era muy difícil seguir los mensajes en el panel de salida porque estaba lleno de errores, aunque hay que reconocer que el editor no explotaba a menudo. Tampoco logré entenderme con la nueva sintaxis de export y había un error en el acceso a los índices de los diccionarios, o sea, que había que usar dicc.get("indice") en vez de dicc["indice"].

A día de hoy, el error de los diccionarios persiste, aunque se sabe la causa. El renderizado no lo he mirado a fondo, pero creo que se mantiene la deformación de los modelos. Me encontré un problema que explotaba el editor, pero al final logré descubrir que se debía a que estaba usando una función con parámetros en una clase hija cuando la función de igual nombre en la clase padre no los tenía. Esto es perfectamente válido en la programación orientada a objeto, así que podría ser un error en el intérprete de GDScript. Otro detalle raro es que no se puede exportar una variable de tipo String, o mejor dicho, puedes pero el editor no permite editar el valor. Fuera de eso, el editor es bastante estable y los errores que desbordaban el panel de salida se han ido. 

En fin, Godot 4 se mantiene en estado inusable para cosas serias y se mantendrá así por un período largo y difícil de determinar. El editor al fin está recibiendo cierta cantidad de trabajo, lo que a la larga implica mejoras, pero ahora mismo es una ruleta rusa. El renderizador secundario no aparece aún y se han dicho tantas cosas que ya no sé si será basado en GL ES 2 o 3. La última propuesta fue GL ES 3 para 3d y un renderizador GL ES 2 para 2d. El renderizador Vulkan está muy completo a nivel de funcionalidades y optimización, así que supongo que solo falta pulir fallos. Otras funcionalidades sufrirán cambios no anunciados, como Navigation3D que desapareció debido a una simplificación, ahora solo necesitamos las Regiones. Lo que sí espero es que no haya más cambios en la sintaxis de GDScript, por eso intenté algunas pruebas de concepto que no tenían nada que ver con interacción o gráficos y me fue bastante bien.

Dentro de un mes quizás les haga otro reporte, aunque no espero grandes cambios. Ojalá me equivoque.

La Pira, un éxito más para los videojuegos cubanos

 Con apenas cinco días de lanzado, La Pira ha alcanzado las 10 mil descargas y sigue subiendo. No tengo datos de las ventas reales, porque el juego se distribuye gratis con utiliza micropagos y ConWiro no ha revelado cifras de ingresos aún. Sin embargo, es lo más cercano a una historia de éxito entre los juegos cubanos.

Eso no quiere decir que el desarrollo de juegos se haya vuelto fácil de repente en nuestro país. Para nada. Simplemente hemos cambiado el nivel de dificultad de Very hard, con permadeath incluida, a Difícil. Los enemigos siguen haciendo el doble de daño con el doble de vida. Pero es, si no una luz al final del túnel, al menos una velita.

A diferencia de la "industria" editorial cubana, que se desliza apaciblemente hacia su muerte, el mercado de los videojuegos es el coto de caza de gente joven, o por lo menos, gente altamente calificada y que se mantiene al día con las últimas tecnologías. Hay otra mentalidad, que empuja a hacer más con lo poco que hay y obliga a cambiar a un país cuya consigna es el no cambio.

El mérito de ConWiro, o Nameless Studio, que es otro protagonista de una historia de éxito, ha sido abrir camino para los demás, en un mercado que históricamente ha accedido a los juegos gratis se rehúsa a pagar por juegos. Ahora hace falta que otros empiecen a ver los videojuegos como un negocio viable y no como un hobby del cual puedo sacar unos centavos, pero si no, pues no importa. Hay que pensar en rentabilidad. Hay que pensar "voy a dedicarme a esto para vivir".

El próximo paso natural, que creo demorará un poco, es una tienda de juegos para PC. Eso probablemente marque el inicio de una industria como tal del videojuego en Cuba. Incluso ya no parece tan loco pensar en un MMORPG cubano. Estas cosas requieren de más conectividad y mejor infrastructura para soportar e-commerce (sí, podía haber dicho comercio electrónico pero así suena más chulo). No nos queda otra que esperar y de momento, ir probando los límites.

Por esta razón es que no puedo estudiar

 Esta semana me he planteado un nuevo reto: estudiar matemáticas. Me he bajado las conferencias de Freya Holmer (que sugiero le eches una mirada si estás dispuesto a dedicarle varias horas), empezando por las de matemáticas básicas, para seguir con las de shaders. Como les decía, son varias horas cada una, pero muy bien explicadas, hasta yo las entiendo. 

El asunto es que aunque no voy mal, ya me ha golpeado el problema usual. Soy pésimo estudiante, porque tiendo a caer dormido en las clases (ostento el récord de haber dormido en más aulas de la Universidad de Oriente, incluso durante un examen) o disociarme y empezar a divagar. Empeizo a mirar los audífonos de Freya y pensar si una cosa de ese tamaño me molestaría en las orejas (odio los audífonos), o si serían de tan buena calidad que al fin no me molestarían tanto, luego me entretiene el gato de Freya, y así sucesivamente. Cuando vengo a caer en cuenta, me he quedado botado en la carretera. Me es muy difícil escuchar a las personas que intentan enseñarme y no por culpa de ellas, sino mía.

La ventaja es que ahora sí puedo virar para atrás y reiniciar desde donde perdí el hilo, gracias a eso algo se está pegando. He tratado de tomar notas para reforzar el aprendizaje, aunque sin muchas garantías de que funcione si no aplico todo lo que voy aprendiendo. 

Veremos si puedo completar el reto y sacar algo de beneficio.

Y así se ve el nuevo Laberinto del Saber

 Mi natural vagancia me impide escribir un largo post explicando los cambios y por qué deberían probar este juego en cuanto salga. ASí que ahí lo dejoÑ



Tutorial completo sobre juegos multijugador con Godot

Un post muy breve para recomendarles este tutorial (bastante largo) que cubre la creación de juegos multijugador con Godot. Lo mejor: con servidor dedicado, que otros muchos tutoriales no cubren el tema porque el asunto tiene sus cosas. En Godot hay que cumplir ciertos requisitos como tener los nodos con el mismo nombre para poder hacer un rpc de un lado a otro y etc.

Yo ayer volví a dedicarle veinte minutos y al fin logré implementar los primeros elementos del servidor. En concreto, conectar desde el cliente, solicitar un valor y recibirlo. Todo muy simple. Lo cual no quiere decir que ahora mismo tenga en planes ponerme a hacer un MMORPG, para nada nadísima. Aunque se han dado ciertas condiciones en Cuba, como por ejemplo que ya es posible rentar un VPS, el trabajo que requiere un MMORPG es bestial. No lo intenten en casa.

No te quejes de Cyberpunk 2077

 Ayer implementé los últimos detalles de jugabilidad del Laberinto, así que el demo está, técnicamente, completo. He hablado acerca del largo y pesado proceso de pulido, pero nada acerca del trabajo con beta testers. Si eres indie, al final mucho de este trabajo recaerá sobre ti.  

Lo explicaré de una forma simple y sencilla. De una docena de beta testers voluntarios, solo dos o tres reportarán algo. El resto nunca reportará nada, quizás porque no jugaron lo suficiente, o porque ni siqueira probaron el juego. Esos dos o tres reportarán los errores más graves que no lograste ver tú, lo cual no deja de ser útil. Sin embargo, es poco probable que pasen de ahí. No conseguirás que en una segunda ronda de pruebas te informen de más problemas. Debe ser que ya están aburridos del juego, así que es razonable que ya no rindan tanto. No puedes pedirle más a un voluntario.

Por eso, ayer cuando terminé de programar, tuve que hacer una corrida de prueba, donde me percaté de un montón de detalles de jugabilidad que se habían pasado por alto. Volví a Godot a retocar todas las escenas, e incluso me planteé retrasar la salida del demo. Y yo solo tengo ocho escenas. Pero el proceso de balanceo de la jugabilidad tiene lo suyo. Sospecho que tendré que darle otra pasada al juego completo para ver si alcanza el nivel de dificultad que pretendo.

Así que ya pueden imaginarse a CD Projekt haciendo lo mismo con Cyberpunk 2077. Cientos de diálogos que probar, cientos de misiones, una ciudad gigantesca. Sí, van a  decirme que para eso le pagan a un montón de beta testers, pero ni así. Esto es algo que hay que vivirlo para entenderlo.

Ah, y acaba de escribirme la artista para recordarme unos botones que no coinciden con la estética del juego. En fin, que sí tendré que atrasar la salida hasta la semana próxima. Espero que los jugadores no se sientan decepcionados.

El reto de los dos días, en video

 Un breve video del prototipo de prueba que hice la semana pasada. Aparte de lo que implementé en esas dos noches de trabajo, agregué zoom y rotación de la cámara. Sin embargo, la rotación probó no ser una buena idea, porque requiere ciertos cálculos adicionales. Al girar la cámara, la orientación del pivote no coincide con la del personaje y causa que cuando te mueves hacia arriba, el personaje se desplaza hacia abajo. Soluble, pero completamente fuera de la idea.



Historia de los juegos hechos en Cuba

 Me he tomado más de lo que esperaba (dos o tres meses más), pero ya está concluido y estrenado en Youtube:


El audio no es el mejor, porque mis condiciones de grabación no son nada buenas, pero creo que se entiende.

Reto de ayer: clon de Diablo Immortal

 Hay días que uno amanece creativo. Como que se te sale el pájaro que todos llevamos por dentro. Luego de ver el gameplay de Diablo Immortal, hasta yo, que no soy fan de jugar en el teléfono (eso se lo dejo a mi hija) quise probar algo parecido. Y una conversación en el grupo de desarrolladores cubanos en Telegram me hizo preguntarme qué tan rápido podía hacer un prototipo, usando Godot.


 

 La respuesta es un par de horas. Tengan en cuenta que es algo que no había hecho nunca, ya que no es lo mismo que hacer una cámara isométrica. En este caso, la cámara sigue al jugador, y el control de movimiento se hace mediante un botón en la pantalla. En esas dos horas logré implementar movimiento del personaje y animación, solo me falta orientar el modelo en la dirección del movimiento. 

De paso, hice un pequeño experimento de rendimiento. El proyecto, con sombras activadas, corre a unos 52-53 cuadros por segundo en mi Redmi Note 7 y usa GL ES 3. También tuve un extraño bug cuando agregué la configuración de iluminación recomendada para exteriores, que resolví creando el Environment desde cero y cambiando solo el tonemap. Aún tendré que experimentar un poco más con eso a ver los valores correctos.