Sistema de IA en Godot, con Resources


Sí, es posible hacer un sistema de Inteligencia Artificial en Godot usando Resources, equivalente al de Unity que empleaba ScriptableObjects. Por cuestiones personales (o sea, vagancia), no he alcanzado el mismo nivel que en el prototipo de Unity y también porque el código de búsqueda de caminos va a cambiar drásticamente en la rama 4.0. Es decir, que trabajar en eso es por gusto y el combate como tal tendrá que esperar unos meses.
Encontrar la idea me ha tomado algo de tiempo y el punto de partida lo encontré estudiando el código fuente del port para Godot de Wesnoth. Se siente un poco raro volver a la época en que descargaba el código fuente de juegos libres a mansalva y me sumergía en ellos para aprender cosas. La diferencia entre Unity y Godot mayormente consiste en que Godot no permite múltiples scripts en un solo nodo. Por tanto, tuve que distribuir los scripts en una jerarquía de nodos, con el padre como gestor de estados y los hijos conteniendo los estados de la IA. Cada estado ejecuta diferentes bloques lógicos, que están almacenados como recursos. En un principio, había incluido la IA dentro de la escena de cada personaje, pero eso me planteaba un problemita mínimo: cada NPC que requiriera una IA diferente necesitaba su propia escena. Aquí les aclaro que en Godot, todo es una escena. Lo que en Unity sería un prefab, aquí es una escena que contiene, digamos, el modelo del personaje, su forma de colisión, scripts, etcétera.
Cuando tu acceso a internet se mide por horas o por volumen de tráfico, tiendes a ponerte un poco tacaño con los megabytes, por eso me pregunté si podía optimizar un poco más. Y sí, era posible, si creaba la IA en la escena de juego y no en la del personaje. Eso me permite reutilizar una misma escena de personaje con varias IA diferentes. Ambos métodos no son excluyentes, si necesito reutilizar personajes con la misma IA, puedo incluirla en su escena plantilla y ya.
Por ahora es solo un sistema muy primitivo sujeto a cambios, pero creo que la idea base es correcta, porque de hecho, no la inventé yo, sino gente mucho más experimentada.

Reseña: Seven Eves

Lo prometido es deuda, y en este caso, el compromiso con el grupo de escritores de Espacio Abierto era una reseña de Seven Eves, de Neal Stephenson. Llevaba ya unos añitos sin leerlo, porque luego de leer algunas de sus mejores novelas, otras que eran sagas no las tenía completas. Reamde me pareció una verdadera hazaña, por su extensión y porque la historia en un momento determinado cambia de rumbo totalmente, y eso sin dejar de mantenernos enganchados.
En fin, volviendo a Seven Eves. Esta es una novela de ciencia ficción, pero de las duras. La premisa es muy simple: algo ha roto la Luna en pedazos y esos trozos van a desencadenar una reacción en cadena que ocasionará una lluvia de fragmentos sobre la Tierra, extinguiendo toda la vida y haciendo inhabitable el planeta durante milenios. Algo así como que el cielo se va a caer y el rey lo debe saber, pero a escala Cixin Li. A lo bestia, vamos. Es casi imposible  sobrevivir bajo tierra o bajo el mar, el único camino es el espacio.
La cosa está de apaga y vámonos, pero solo quedan dos años para idear un plan para salvar a unos pocos humanos que perpetúen la especie. Sin embargo, la novela no se desarrolla en un futuro lejano donde el vuelo espacial es algo común, para nada. La humanidad cuenta únicamente con la Estación Espacial Internacional y la única libertad que se ha tomado el autor es adjuntarle un asteroide, puesto ahí para pruebas de minería espacial. Unos pocos miles de hombres y mujeres serán los afortunados, pero tampoco lo tendrán fácil, porque como decía, el nivel tecnológico es casi igual al de la actualidad y no existe experiencia ni herramientas para crear hábitats espaciales. Imaginen la titánica tarea de poner en órbita miles de personas y material para subsistir durante miles de años.
Algunos considerarán la carga científica de esta novela un poco excesiva, pero en su mayor parte, los conflictos vienen dados por las tremendas dificultades a enfrentar para salvar parte de la humanidad. ¿Cómo garantizar alimentos? ¿Oxígenos? ¿Espacio vital? ¿Gravedad? Stephenson, al menos en mi caso, consigue que a pesar de la charla técnica la trama se mantenga interesante y moviéndose hacia adelante. Un poco más allá de la mitad, los conflictos interpersonales hacen aparición, pero no les adelanto en qué terminan ni el peso que tienen en la historia.
Sin embargo, en el último cuarto esta carga sí se vuelve pesada. El autor nos abruma con un montón de detalles acerca de hábitats y estructuras espaciales colosales, muy difíciles de visualizar a menos que seas un especialista en la materia. El infodumping es tan violento que detiene por completo la trama y la novela decae muchísimo, para llegar a un breve desenlace que es casi decepcionante.
Aunque esto le quita puntos, tengo que decir que el libro consigue hacer que nos preguntemos qué sucedería de tner que enfrentar un evento catastrófico de ese nivel. Y la respuesta pone los pelos de punta: nada. Entonces, ¿recomendaría esta novela? Por supuesto que sí, a pesar de los detalles que señalo. Neal Stephenson es un escritor que casi siempre vale la pena leer y este libro no es la excepción.

Estamos en cuarentena

¡Aunque no cerrados! Solo estoy ausente al trabajo la mayor parte del tiempo y desde casa no me es posible usar internet, salvo para lo esencial. O sea, chatear con los colegas escritores y jugar Regnum. Y últimamente ni tanto de Regnum.
Ya el verano está aquí, por eso el horario de mediodía y tarde es de siesta y apartarse de la PC, para evitar calentarla. Ni siquiera estamos en junio y ya hay récord de temperatura en un lugar no muy lejano.
Entonces, ¿qué estoy haciendo? Godot, principalmente. He estado adelantando un poco en el port del  Laberinto, desarrollando un prototipo de juego 3D y experimentando con la rama 4.0. De esto último les advierto que lo eviten, excepto para cosas muy simples. Ahora mismo, la 4.0 no crea proyectos y no los importa. Mi solución fue usar un proyecto que ya estaba en el listado y cambiarle el nombre (ojo, la carpeta sí debe conservar su nombre) para poder trabajar sobre ese. Tampoco se puede arrastrar un archivo hacia el panel de propiedades. A pesar de todo, la estabilidad es sorprendentemente buena.
En cuanto a la 3.2, sigo descubriendo que hay muchas cosas que son muy fáciles de hacer, aunque a decir verdad hay otras que aún faltan y faltarán por un buen tiempo.
En caso de que aún no estés convencido y quieras probar una opción más profesional, Unigine al fin ha decidido lanzar una Community Edition, para que los desarrolladores puedan probar el motor libremente y pagar solo cuando superen un monto específico que no recuerdo ahora. Vale la pena echarle un vistazo.

De gatear a caminar

Ya he alcanzado ese punto de inflexión donde se pasa de tener que dejar todo para después que se hagan preguntas a poder trabajar con más eficiencia. En estos días de encierro he dedicado tiempo a portar El Laberinto del Saber de Unity a Godot, una tarea que tenía abandonada desde hacía un mes. Con un poco más de conocimiento ahora, pude dedicar varias horas seguidas al asunto y ver un avance notable.
En concreto, ya he implementado el uso de las puertas, puntuación, las bonificaciones, y el conteo de tiempo. Se dice fácil, pero eso implica tener que cambiar muchas cosas, porque la forma en que se manejan las colisiones en Unity es diferente a la de Godot. Para empezar, ahora tengo que lidiar con un TileMap, que aunque agiliza la creación de la escena, requiere sus detalles para determinar el tile que estás tocando.
Me queda lo más difícil: mover a los fantasmas persiguiendo al jugador y abandonar cuando ya no esté visible, una IA sencilla, pero que tiene sus cositas. Por suerte, Godot sí ofrece un sistema de navegación en 2D, que Unity no tenía, lo que debe facilitar este tema.
De continuar trabajando así, en un mes podría volver a tener un prototipo y comenzar a pulir otra vez.