Fallout, la serie
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.
Unity cambia su modelo de negocios
Un nuevo anuncio ha cabreado a casi toda la comunidad de usuarios del popular motor de juegos. El modelo de negocios vuelve a cambiar, y aunque lo más llamativo es que el límite de la licencia Personal aumenta a 200k anuales, esto viene con malas noticias: si superas ese límite y además tienes más de 200k instalaciones, tendrás que pagar 20 centavos por cada instalación e inicialización del juego por encima de esas 200k. Incluso, si el mismo usuario reinstala el juego, pagarás dos veces. O tres... o más. Para la licencia Pro, el límite sube a un millón de instalaciones y el fee se reduce a 2 centavos.
La jugada parece estúpida, y lo es. Esto golpea durísimo a los F2P, a los juegos que monetizan ads y generan unos pocos centavos por instalación (a menos que uses la red de ads de Unity, qué casualidad), a los juegos del Gamepass que también ingresan muy poco por cada copia instalada (y si formateas tu consola o reinstalas tu PC y vuelves a instalar desde el Gamepass...), e incluso te hace vulnerable a ataques de instalación en bulto. Rayos, si alguien piratea tu juego tendrás que pagar por esas instalaciones piratas! El hilo en reddit/gamedev lo explica mejor que yo. Incluso hay jugosos chismes: el Riki vendió sus acciones en la empresa la semana pasada. Ya lo decía yo, casualidades.
Las prestaciones extra que gana la licencia Personal gratis no es que compensen mucho y también hay otro cambio: a partir de noviembre Unity requerirá que inicies sesión y tengas conexión a internet. En caso de cortarse la conexión, podrás usarlo offline durante tres días. Quizásesto no sea un problema para nadie en esta época de conexión abundante, salvo para los cubanos, que aún estamos en la edad de piedra (con grandes probabilidades de retroceder a la edad anterior, si es que hubo alguna).
Aún está por verse si Unity dará marcha atrás a esta monumental metida de pata. El golpe (otro más) a su credibilidad ya está dado y la gente se está planteando seriamente si pasarse a Godot o a Unreal, cuyo 5% en fees es menor y su ritmo de innovación es más rápido, sin necesidad de tantas compras ruinosas y despidos masivos. Por ejemplo: Unity tuvo que comprar Ziva para obtener tecnología de renderizado realista de humanos y equipararse a Unreal. O3DE hizo lo mismo sin comprar a nadie. Luego compraron a Weta Digital... no me queda muy claro para qué la querían.
Como decía un querido amigo mío: ya nos veremos.
Resumen de estupideces de Quora
Les traigo un resumen de lo peor que ha preguntado la gente en Quora esta semana. La lista ha sido recopilada por yo mismo en persona.
Soy un hombre solitario que vive en el campo y me enamoré de mi burro, ¿qué me aconsejan?
Para empezar, yo te recomendaría mucha vaselina. Y que en tu noche de luna de miel tengas un doctor a mano, por si acaso.
¿Si el sistema solar realmente existe, ¿cómo explican los sistemas solares que no hayamos encontrado vida extraterrestre? Si hubiera otros planetas ya habríamos encontrado otras formas de vida por ahí, pero como no existen, por eso estamos solos.
Este es un espécimen cada vez más abundante en Quora. No preguntan, ellos afirman, generalmente perlas como esta. Más sobre el tema dentro de un rato.
Mi hijo fue sentenciado a cadena perpetua por un crimen que no cometió y hace 15 años está en prisión. Temo que se desmoralice y cometa una locura. Necesito consejos para mantener su animo alto, tiene solo 20 años y lo veo muy bajoneado. ¿Consejos?
Que estudie matemáticas. Usted, no su hijo.
Pregunta.. ¿es bueno o malo? Tener 2 biblias iguales pero con una tapa de color diferente?
Pues digo yo que el Yahvé de tapa azul podría querer liarse a hostias con el Yahvé de tapa roja y tendrías una guerra santa en tu casa.
Como cirujano, ¿qué es lo más insólito que ha encontrado dentro del cuerpo de un paciente?
Sin comentarios.
¿Si la tierra tiene 4504 millones de años, ¿cómo explican los terraviejistas que el edificio más antiguo no tenga más de 5004 años? Si la tierra fuera antigua habría millones de edificios de millones de años.
Qué les dije? Perlas, puras perlas!
La semana próxima volvemos con más.
Baldur's Gate 3 rompe los moldes, pero eso ni es nuevo ni es malo
No recuerdo que un juego isométrico y con combate por turnos haya sido jamás candidato al Game Of The Year. Ni tampoco un título que otros desarrolladores se hayan apresurado a calificarlo como una anomalía, que no debería ser tomado como el estándar a seguir en la industria. El problema es que el trabajo de Larian ha sido tan excepcional que ha opacado juegos tan esperados como Starfield, Zelda o el mismo Diablo IV (alguien habla de Diablo IV a estas alturas).
A ver muchachones. Juegardos excepcionales los han habido antes. Clásicos, les llaman. Lo fue Skyrim, en su momento, y les recuerdo que aún se juega y Bethesda le saca lascas. The Witcher 3 ofreció un mundo bastante bien logrado y fue uno de los mejores RPGs de la década pasada. ¿Alguien recuerda el viejo Fallout 2 y las libertades que permitía? Son juegos hechos con cuidado y tiempo, no un Assassin's Creed que sacas cada dos años. Cosas hechas a toda prisa seguirán saliendo y haciendo dinero, porque eso, señores, no es culpa de la industria, es culpa de los jugadores, que pagan por un nuevo Assassin's Creed, por un nuevo Call of Duty o por un nuevo FIFA, por los DLCs infames que activan contenido que ya está ahí, los pases de batalla, las cajas de botín, y todo lo que sirva para exprimir el bolsillo del cliente.
Que de vez en cuando venga un Baldur's Gate 3 no va a hundir la industria. Para empezar Tampoco los desarrolladores deberíamos sentirnos preocupados, porque las genialidades pueden provenir de cualquier parte (igual que las mierdas monumentales). Y lo bueno de todo esto es que hay espacio para todos. Hay espacio para que un pequeño estudio nos sorprenda con cositas como Underrail, que cuando miras a tu alrededor te ha robado cientos de horas de tu vida (y es solo un RPG isométrico en 2D) y hay espacio para que los grandes lo intenten. Que no quieran ya es otra cosa.
Ahí es donde está el problema y el apuro por hacernos creer que Baldur's Gate 3 no es ni debería considerarse como el nuevo estándar. En el miedo al riesgo, en la falta de amor a lo que se hace y el poco respeto al jugador (que repito, es culpa del propio jugador). Sí, es inalcanzable para muchos, pero debería ser la aspiración de todos tratar de aproximarnos algún día a ese logro.
Sistema de misiones casi a punto
Junto con los diálogos, el sistema de misiones es el otro componente esencial que debía terminar para que las mecánicas de juego estuviesen casi completas. El sistema de misiones (o quests) pasó por manos de dos personas, siendo la segunda iteración la más completa, pero mal documentada y bastante compleja, con un uso intensivo de signals. Me tomó un par de horas entender cómo funcionaba, e incluso hasta ayer descubrí cosas que estaba haciendo mal. No ha sido divertido, pero no suele serlo nunca cuando se trata de programar juegos.
A diferencia de mis ideas iniciales, el sistema de misiones acabó siendo una escena autoload (o sea, que Godot la trata como un singleton) y las quests son escenas hijas. Hay que tener en cuenta que para Godot, una escena puede ser cualquier cosa. Lo mismo es un prefab, que una locación del juego, que el modelo de tu personaje con sus scripts adjuntos... Es muy versátil. En fin, que tenemos una jerarquía de nodos con misiones y sus objetivos. Nada original, de hecho GDQuest usa el mismo enfoque en su videotutorial.
Ahora que las bases están sentadas, faltarían detalles como salvar correctamente el estado de objetivos multi (recoger X objetos, matar X NPCs) y encontrar los casos específicos que requieran la implementación de objetivos únicos. Pero estas bases ya permiten cubrir la mayoría de los casos y gracias a eso es posible jugar, con limitaciones, claro, el 90% de la primera escena.
Casi cien líneas de diálogos!
Se dice fácil, pero no lo es tanto. Cada una de esas líneas debe ser probada, en especial las que dependen de alguna condición. O sea, que el proceso más o menos es: escribir, ejecutar el juego, si hay que cumplir alguna condición asegurarse de hacerlo, llegar hasta el NPC y recorrer el diálogo. A veces, hay que repetir esto en varias ocasiones para una sola línea, hasta que todos los errores queden resueltos, o simplemente para verificar todas las posible bifurcaciones. Luego viene volver a leerse el diálogo y comprobar su coherencia, naturalidad, ortografía, y si cumple con lo que se espera de él, que es proveer información.
En concreto, me resultó muy pesado escribir el diálogo para un personaje, que resulta ser un pedante que habla con un lenguaje rebuscado. Eso, en español y también en inglés. Una hora entera para lograr unas líneas. No había llegado al final y ya le tenía odio al personaje.
Es curioso ver cómo este trabajo va completando y dando forma a la escena. Incluso, el testeo de las misiones en cierta forma "pide" cambios en la distribución y ubicación de los personajes. Por ejemplo: cualquier desplazamiento entre los puntos de una misión que tome menos de treinta segundos prácticamente no aporta tiempo de juego. Si vas del personaje A al B en 20 segundos, te tomas 15-20 segundos en el diálogo, y 20 segundos regresando, apenas has implementado un minuto de tiempo de juego. Obvio, la solución no es tan simple como estirar la escena y alejar los personajes hasta el infinito. Sí, se necesita aumentar el recorrido (anyway, en la vida real los trayectos casi nunca son completamente rectos), pero el diálogo también contribuye a alargar la duración de las misiones (esos diálogos con cinemáticas largas no están ahí por gusto, de hecho, aportan más que el mismo desplazamiento).
Este primer escenario me ha enseñado algunas cosas que pondremos en práctica en el segundo (y probablemente, ese segundo también me enseñará cosas nuevas).