Más pruebas con O3DE


 Otro video de O3DE. Esta vez reimplemento un sistema traído desde las lejanas tierras de Godot, para ocultar el techo al entrar en las casas y así poder explorar el interior sin problemas.

Reporte de avance

De vuelta con otro reporte de progresos, aunque en realidad no ha sido gran cosa. Mayormente mi trabajo ahora consiste en agregar contenido, y algún que otro bugfix. Al fin se ha integrado al proyecto un primer kitbash para las casas de dos de las escenas. En algún momento debe llegar un segundo. Justamente eso es lo que me está atrasando ahora: el trabajo de rehacer casi todas las edificaciones  suele tomarme muchísimo tiempo. A pesar de que estoy dedicando casi tres horas diarias al trabajo, si los apagones lo permiten, no he conseguido todo el avance que quería para la presentación el día 23.

En cuanto a eso, si estás por la Habana en esa fecha, habrá un encuentro con jugadores en el Joven Club de Plaza. No sé si habrá equipamiento que cumpla los requisitos del juego, pero si lo hay, será posible verlo en acción.

Ahora, vayamos a otra cosa. En concreto, a otro culpable del atraso. En esta semana o la próxima debería salir O3DE 24.09 y he logrado probar el preview en Linux. Ha sido un proceso accidentado, pero de nuevo estoy poniéndome al día con el motor, e incluso hice un reporte de bug. El mes dedicado a estudiar Blueprint me ha servido de base para entender mejor el Script Canvas. Hay grandes diferencias: Script Canvas es orientado a eventos, los get/set están dentro de la línea de ejecución mientras que en BP basta que algún nodo las use, en BP necesitas un Sequence para ejecutar una secuencia de instrucciones y en SC puedes, desde cualquier nodo, conectar hilos de ejecución con varios nodos más, y otras que de momento, no he identificado. Sin embargo, conocer BP me ha abierto un poco la mente a esta forma de programar, y probablemente si hubiera dedicado más tiempo a SC, habría entendido BP mejor desde el principio.


 

Pero volviendo al tema, O3DE ya está casi listo para producción. De hecho, hay varios equipos haciendo cosas comerciales y ha ganado cierto renombre en aplicaciones de robótica. La versión 24.09, tal como esperaba, va a marcar un punto de inflexión, de ahora en adelante marchamos hacia la madurez del motor. Cabe esperar optimización, mejoras de estabilidad, usabilidad y el completamiento de funcionalidades como un sistema de partículas libre (desarrollado por Huawei). Todavía no lo veo como indie friendly, pero para un equipo con varios ingenieros capaces, las posibilidades de personalización de los flujos de trabajo son interesantes.

En cuanto regrese del viaje, pienso dedicar algo de tiempo a dominar Script Canvas y sacar algunos videos cortos con casos de uso básicos, de esos que ayudan más cuando uno está en pañales.

Vuelven las pruebas con O3DE

Con el 24.09 a las puertas, he dedicado algo de mi escaso tiempo a O3DE. La comunidad ha mejorado y esta vez he tenido ayuda invaluable de otros. 




 

Hablemos de Solo Writing, ahora que el término está de moda

Si has pasado por aquí antes, sabrás que he escrito varias novelas. De hecho, la primera de ellas, en opinión de un par de personas que respeto mucho, está entre las mejores de la fantsía cubana. Después de esa escribí unas cuantas más. Creo que demasiadas, considerando que no se logra publicar acá en Cuba. He escrito novelas largas, una en dos partes, algunas de ellas con múltiples personajes, cada uno con su historia. Probablemente se pregunten para qué les hago este cuento. ¿Para mencionarles mi primera novela y ver si se animan a comprarla? Algo de eso hay, pero en realidad, hoy hablaremos de otra cosa.

Hablaremos de qué tan complicado es para una sola persona escribir el guión de un juego y por qué deberías buscar ayuda.

The Key of the World tiene una historia bastante lineal si la comparamos con otros títulos similares. La diferencia se debe a que esos otros títulos tenían equipos de escritores (un detalle que suelo mencionar cuando imparto mi conferencia sobre creación de guiones). Incluso una historia semilineal como esta tiene varios personajes, varios villanos y varios arcos argumentales. Si se quiere tener unas misiones de relleno decentes, alguna de ellas debería extenderse hasta casi ser un mini-arco argumental adicional (detalle minúsculo: los diseñadores de misiones son un equipo más de escritores).

El guión del proyecto ha sufrido unos cuantos cambios a lo largo de los años. En algún momento queremos contratar a un escritor profesional para hacerse cargo de mejorar la parte narrativa. Ahora mismo no, porque hay cosas que urgen más y me acaban de recortar el salario a lo bestia. Pero se hará. También necesitaremos alguien para las misiones.

Durante estas reescrituras y adiciones, el guión ha ido evolucionando desde una historia bastante simple y tonta a algo un poco menos simple y tonto, pero lleno de agujeros e inconsistencias. De vez en cuando yo encuentro una. En cierta ocasión recluté a alguien para que ayudara en la tarea, pero en realidad no aportó nada y los problemas de coherencia siguieron ahí. Son el resultado de agregar cosas y quitar otras, todo eso sobre una base que tiene, como les dije, varios años de antiguedad. La simpleza original se ha convertido en la historia de tres facciones que quieren lo mismo por razones diferentes. Facciones que aparecen en diferentes momentos del juego, cada una de ellas con sus cadenas de personajes. Lo jodido del caso es que todo eso es trabajo de una sola persona: el menda. Que además escribe todas las quests. Y los diálogos, en español e inglés, sin ser traductor profesional. Y también programa el 90% del juego.

A primera vista todo parece estar bien, hasta que empiezas a hacerte preguntas. Hace un par de días, conversaba con dos colegas (expertos en UX/UI, si necesitan a alguien, los puedo conectar) y en apenas cinco minutos una de ellos, que tiene un background como escritora, había hecho las preguntas correctas y destapado agujeros de guión que me obligan a corregir varios detalles. Lo más curioso del asunto es que ni siquiera estábamos analizando el guión, solo estábamos discutiendo ideas para la estética de la interfaz. Del carajo, ¿no creen? Hablamos del UI y encontramos agujeros de guión. ¿Qué pasaría si de verdad nos hubiésemos dedicado a revisar la historia del juego?

La enseñanza que deberían sacar de toda esta historia es que si tu juego tiene una trama relativamente complicada o no lineal, te vendrá bien un par de ojos adicionales que te supervisen. No digo que sea totalmente imposible hacerlo solo, pero al menos yo, cada día me convenzo más de que una ayuda es necesaria. Incluso los mejores autores tienen su equipo de lectores cero que revisan los manuscritos recién escritos. Yo, que no soy de los mejores, tengo los míos.

La supervisión te ayudará a descubrir errores de consistencia. También te ayudará a destapar esos fallos en que incurrimos a veces los escritores al pensar que algo está claro y a la vista. Lo estará para ti, que eres el creador, pero para el lector/jugador podría ser oscuro, incomprensible o pasarse por alto.

Hay que saber aceptar la crítica. Mi guión está mal. Antes “lo sabía”. O creía que lo sabía. Ahora sí lo sé, con detalles concretos. Que la historia en general esté bien no quiere decir que su ejecución sea perfecta. Tres facciones. Tres propósitos. ¿Qué los motiva? ¿Por qué quieren lo que quieren? ¿Por qué hacen lo que hacen? Si yo mismo no puedo contestar con exactitud esas preguntas, difícilmente el jugador podrá hallarle sentido a la trama.

Así que ya saben. Aprendan de mis errores. Y si pueden, páguenme por el aprendizaje (me rebajaron el salario, ya les dije).

Fallout, la serie

 Antes de empezar, debo aclarar que no puedo considerarme un juez imparcial en este tema. Quizás no lo he dicho por las claras con anterioridad, pero Fallout ejerció sobre mí una gran influencia. Siempre que me preguntan el tipo de juego que quiero hacer, o cuando intento describir el proyecto actual, acabo mencionando Fallout. En primer lugar, mayormente, y por supuesto, me refiero al 2, no a las mierdas esas que hizo Bethesda (exceptuando New Vegas).
 
Una vez aclarado esto, vayamos al tajo. La serie basada en la saga Fallout tal vez no se gane un Oscar (o lo que sea), pero es una digna adaptación. Tal parece que todas las buenas series de los últimos tiempos son basadas en videojuegos. Ya desde los primeros segundos del primer capítulo sentí un pelín de emoción: ¡estoy viendo una serie de Fallout! ¡Y encima, se ve y se siente tan… Fallout! No hay destrozos al lore, no hay guionistas mediocres tomándose libertades indebidas y pasándose el contenido original por el forro de los cojones. Solo humor negro y gente destripada, como debe ser. ¡Es el Yermo, carajo, se supone que esté lleno de gente mentirosa, traicionera, criminal, e hijos de puta de toda clase!

Tengo una hipótesis al respecto, quizás sea un disparate, pero quizás no ande muy desencaminada. Al ser las franquicias de videojuegos adaptados a la TV propiedad de empresas que facturan cientos de millones, los estudios no pueden simplemente tratarlos como hacen con los autores de novelas exitosas. No pueden arrojarles un cheque de un mísero milloncejo, violarse el contenido original y esperar que los autores se lo agradezcan, o que al menos, se queden en silencio ante el desmadre perpetrado por guionistas que a veces ni siquiera respetan la obra que sirve de base a su trabajo.

La serie ha logrado ampliar el lore con detalles interesantes que se ajustan a lo que cabría esperar del universo Fallout, que no mencionaré para no spoilear. Se aprecia también un cuidado en la escenografía y vestuario, el guión tiene ese humor negro del que les hablaba, que podría ser predecible en ocasiones, al menos para mí, pero es que en esas ocasiones he tenido que admitir que eso era justamente lo que correspondía. O por lo menos, yo también lo hubiese escrito así.

Habrá que esperar próximas temporadas a ver si no la cagan. Que haya un buen equipo a cargo no es garantía de nada, eso ya lo sabemos.

Siempre supervisa!

 

Esta semana hemos aprendido a las malas por qué es importante supervisar todo el código que entra al proyecto, al menos hasta garantizar que el desarrollador sabe lo que hace. Un tiempo atrás, alguien nos pidió entrar al proyecto y apoyar, como voluntario. Decía tener 30 años como programador, y empezaría con cosas sencillas y mayormente, haciendo testeo. De testeo hubo poco, casi de inmediato se sentó a estudiar el código ya criticar cosas. No le gustaban los for, prefería los while. No le gustaba que las variables se inicializaran dentro del for, aunque era más legible así. No le gustaban los diccionarios. Se le asignó la tarea, relativamente simple, de ampliar el sistema de configuración de juego.

Para hacer el cuento corto: escribió cientos de líneas, solo la mitad de ellas de código. El resto eran comentarios y notas. A pesar de los cientos de líneas de comentarios, su código es un picadillo de funciones con nombres crípticos casi imposible de seguir. Movió una buena parte de la funcionalidad de configuración a otro script, sin necesidad ninguna. Agregó opciones tan esotéricas del motor que nadie sabe realmente qué hacen, en vez de escoger las opciones más representativas y proporcionar niveles (Bajo, Normal, Alto) que engloben esas opciones esotéricas de forma más legible.

Y lo peor, en el momento que más lo necesitamos, hemos encontrado que no funciona bien. El juego ni siquiera configura el idioma adecuadamente, algo que ha afectado las pruebas externas. En fin, que toca reimplementar todo desde cero, porque todo ese código regado por diferentes lugares es imposible de revertir.

Así que ya saben. Siempre supervisa!

Nuevo sistema de combate

 Luego de una prueba por parte de alguien externo al grupo, he decidido cambiar un poco el sistema de combate del juego. Ahora en vez de un ataque básico en bucle con el arma equipada tendremos que hacer click para ejecutar cada acción de ataque. La diferencia es mínima, y los cambios necesarios también fueron pocos. No he terminado de pulir, por ejemplo, para evitar que se creen molestas colas de ataques (solo las habilidades deberían encolarse), pero en cuanto el trabajo atrasado me dé un respiro lo implementaré.

Supongo que el sistema continuo también tendría sus fans, pero eso requeriría una prueba muy amplia que no me ha sido posible realizar. Por eso toca asumir que la mayoría preferirá algo más en la línea Action RPG, aunque en general el juego no es un ARPG como Diablo o Last Epoch.Tengan en cuenta eso, por favor. La idea es un combate dinámico, pero no frenético, que no sea un rompemouses, y que pueda pausarse para poner acciones/habilidades en la cola.

Hablando de Last Epoch, me he tomado un rato para echarle un vistazo. No me ha sido especialmente atractivo, igual que me sucedió con Diablo 3. Me resulta raro, porque es un tipo de juegos que solía disfrutar antes. Quizás me estoy poniendo viejo y gruñón. En general, creo que se trata de la falta de los componentes exploración e historia. En esencia, se resumen a ir por ahí dando click encima de todo lo que ves hasta que se muere. No hay una conversación, no hay una quest que te haga pensar...

Aún seguimos sin fecha para tener un demo. Los apagones nos han golpeado tanto que es casi imposible trabajar, sobre todo, si el proyecto no es tu fuente de ingresos (de hecho es más bien una fuente de gastos).

Sí, estoy vivo. Reporte de progreso (o de la falta de él)

 Bien, estoy vivo. Pero la situación de país y la mía propia son críticas y avanzar en el proyecto se ha tornado casi imposible. En lo personal, he tenido que tomar tres empleos diferentes. No es que me esté haciendo rico con eso, pero al menos se garantiza sobrevivir. Eso también me ha hecho replantearme mis prioridades y he salido a buscar mejores ofertas. Hay que lograr sacarle el máximo a las horas de trabajo y eso solo se consigue de una forma: con contratos de desarrollo fuera del país. De momento no he logrado nada, así que toca insistir hasta que algo caiga.

De la situación del país... poco puedo decir que no sepan ya. Apenas tenemos 10 horas de electricidad al día con grandes probabilidades de que se reduzcan mucho más. Se habla de 6 o incluso 3 horas, y además no se prevé estabilidad. Me resistía a considerar a Cuba como un estado fallido, pero debido el asunto electricidad y otros temas he cambiado de opinión. Esto es un estado fallido, definitivamente.

Por todo eso, ha sido inevitable el retraso del demo, que ya casi está listo. No solo eso, sino que todo el juego está prácticamente detenido, porque nos resulta casi imposible dedicarle tiempo. Lo más triste es que para el demo solo necesitamos terminar un modelo (bastante complejo) y la interfaz de usuario. Solo eso.

De todas formas, manténganse en sintonía. Quizás pueda darles alguna buena noticia un día de estos. O un año de estos.

Dónde está el problema?

 Bien, básicamente ya tenemos una escena casi terminada, e incluso podemos entrar en algunas edificaciones! Sin embargo, todo esto está muy lejos de funcionar como debe ser. El problema? La navegación.

Godot utiliza Recast para calcular la malla de navegación. Es una biblioteca open source bastante veterana y confiable, probablemente la única con esta función. No solo Godot, también O3DE la usó para sustituir sus sistema de pathfinding basado en Kythera. Godot genera su malla de navegación a a partir de geometría y objetos de colisión, a diferencia de O3DE, que solo permite el uso de los últimos. El detalle aquí es que si no te pasas primero por la documentación, descubrirás a las malas que usar geometrías es un error mayúsculo. Las geometrías, o cualquier forma de colisión que no sea una primitiva, demoran el cálculo de la malla de navegación. En nuestro caso, hasta 5-6 segundos, mientras que en O3DE un terreno era calculado casi instantáneamente.

Tuve que darme a la tarea de optimizar el asunto. Para empezar, había que sacar las geometrías. Y aquí vino el segundo detalle: las opciones de selección de alcance de cálculo me indujeron a confusión. Había elegido procesar los children of root node, creyendo que solo procesaría los hijos del nodo Region, y realmente estaba procesando absolutamente todo en la escena. Una vez subsanado este error, logré configurar correctamente que solo se usara un grupo de nodos específicos, en este caso, primitivas de colisión. Cada casa, cada sección de terreno, cada objeto, ahora tiene una primitiva (caja o cilindro), que es la única que se utiliza para determinar la navegación. Esto redujo el cálculo de la malla a 1-2 segundo (hasta que se añadió relieve, que tiene colisiones más complicadas).

Y qué sucede en caso de edificaciones complejas? Bueno, aquí ya es necesario un poco de trabajo adicional. Hay que crear una geometría auxiliar para la navegación, y convertir esa geometría en una forma de colisión. Es la parte donde aún persisten errores que no sé si atribuir al motor o a mi ineptitud. En nuestro edificio más complicado, resulta trivial subir la segundo piso, pero bajar la escalera se vuelve un incordio.

Lamentablemente no tengo experiencia con otros motores en este tema, así que no podría decirles si Godot es igual o peor, que Unity, por ejemplo.

Me quedaría un segundo paso de optimización: ver si es posible partir la escena en varias regiones de navegación. Por qué este afán en optimizar algo que en definitiva, se precalcula de antemano en el editor? Pues porque si quiero abrir una puerta en el juego, es necesario actualizar de nuevo la malla de navegación, en tiempo de ejecución. De ahí que sea imprescindible reducir el tiempo.

Reporte de progresos

 Seguimos trabajando! Aunque no lo crean. Estoy escaso de tiempo y no puedo atender el blog. Usar internet en el trabajo es una molestia (mayormente para mi jefe, que le molesta que la use) así que no esperen mucha atención por aquí. 

En fin, si me siguen en X o en LinkedIn, podrán ver lo que estamos haciendo. Las funcionalidades básicas del sistema RPG han sido implementadas, y lo que más problema nos está dando es la parte gráfica. A pesar de eso, hemos avanzado mucho.Ya están listas algunas animaciones adicionales, en general se ha mejorado la calidad, y el AnimationTree fue reimplementado. Al fin hay blending! 

Godot aún no tiene sistema de terreno oficial y hemos tenido que desechar nuestra segunda opción, el addon de Zylann, porque la pérdida de rendimiento se hacía notar en hardware de gama baja. El cambio ha sido para bien: el aspecto visual cambió mucho. En fin, toca esperar que el equipo de Godot decida qué harán con el terreno, pero eso demorará.

Se ha implementado un sistema para entrar y salir a las casas sin necesidad de cargar una escena independiente. No funciona perfectamente, pero la funcionalidad era imprescindible. Para complementarlo, un nuevo lote de casas ha sido agregado al proyecto. 

El contenido del juego como tal está casi completo para la escena de introducción. Se echa muchísimo de menos un editor de cinemáticas, pero ya saben que la filosofía de Godot no es esa. Incluso, es posible completar toda la historia principal y varias misiones secundarias, para después pasar a la escena siguiente. Aproximadamente 20 minutos de juego, si te sabes todos los diálogos de memoria como es mi caso.

Qué nos falta? Sonido, interfaz de usuario, música, y otros detalles.

O3DE 23.10

 De alguna forma olvidé que estamos en el mes 10 y que tocaba ración de Open 3D Engine. Ayer (o antier, ya no recuerdo), se lanzó la versión 23.01, la última de este año. El anuncio es demasiado escueto para mi gusto y no logro sacar nada en claro, salvo que se ha facilitado el proceso de generar el build de los proyectos.

Lamentablemente esta vez no tendré tiempo de probarlo. Estamos en una fase bastante crítica del proyecto, implementando cosas a toda prisa con vistas al festival de noviembre. Todo eso en medio de una crisis energética total, con apagones de 10 horas diarias o más. Pero no se preocupen, que según el gobierno, no estamos tan mal. Creo que esperaré a la primera versión del 2024 a ver si hay cambios llamativos.

Resumen de estupideces de Quora II

 Volvemos con lo mejorcito (o peorcito) de los últimos días en nuestra red de preguntas y respuestas favorita.

¿Es legal que un profesor te obligue a leer y si vos no querés te pone un 1 sólo por no leer?
Pues como van las cosas, pronto va a ser ilegal que la generación de cristal vaya a la escuela para no sufrir la tiranía de los profesores. Y pensar que a mí me pegaban con una regla de madera en primer grado...

Si me tiro de un edificio, ¿empezaré a volar?
Hombre, si eres Batman...

¿Cuándo supiste que la vacunación contra el coronavirus era para exterminar a personas mayores de 60 años o que padecieran enfermedades crónicas?
Lo lamentable es que no exista una vacuna que extermine ignorantes.

¿Qué es lo más perturbador que has leído en la Biblia?
Diablos, Ezequiel!

¿Por qué el oro y las riquezas robadas a México mediante múltiples robos y saqueos se despilfarraron construyendo el palacio del Alambre en Granada, en vez de industrializar España?
Y esto es lo que sucede cuando te duermes en las clases de Historia (como yo).

¿Alguien me podría indicar por qué tengo la manía de cocinar en mí casa desnudo y con zapatos de mujer de tacón? …soy hombre heterosexual… gracias
Nada... mariconerías que le dan a uno de vez en cuando.

¿Cómo se apaga la gravedad en la Tierra?
Cuando entras por la puerta, en el interruptor justo a la derecha. Pero después la enciendes de nuevo que nos dejas un lío a los que venimos detrás.

¿Por qué se dice que España bloqueará el ingreso de México a la Unión Europea? ¿Les da envidia que en México también hay muchos blancos incluso más alemanes que en España?
Envidiosos que son estos españoles.

¿Por que México no puede entrar en la Unión Europea? Es por racismo? 

Envidiosos, y además racistas. Obviamente, las clases de Geografía son tan buenas para dormir como las de Historia. De ahí que haya tanto terraplanista suelto últimamente.

¿Si México actual le declara la guerra a España y a su Rey, podriamos ganar y esclavizar los siervos españoles?
Me apunto, si me garantizan que puedo traerme tres o cuatro siervas españolas de buen ver.